r97 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services/exception magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action
Author: bleny Date: 2013-04-15 17:37:46 +0200 (Mon, 15 Apr 2013) New Revision: 97 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: remove usage of exceptions for task assignement Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java Removed: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java 2013-04-15 15:37:46 UTC (rev 97) @@ -1,54 +0,0 @@ -package com.franciaflex.magalie.services.exception; - -import com.franciaflex.magalie.persistence.Locations; -import com.franciaflex.magalie.persistence.entity.Article; -import com.franciaflex.magalie.persistence.entity.Location; -import com.franciaflex.magalie.persistence.entity.MagalieUser; -import com.google.common.base.Predicate; - -public class RequiredDriverLicenceException extends MagalieException { - - protected Article article; - - protected MagalieUser magalieUser; - - protected Location location; - - protected RequiredDriverLicenceException(String message) { - super(message); - } - - public Article getArticle() { - return article; - } - - public MagalieUser getMagalieUser() { - return magalieUser; - } - - public Location getLocation() { - return location; - } - - public static void throwIfUserCannotAccessLocation(MagalieUser magalieUser, Location location, Article article) throws RequiredDriverLicenceException { - - Predicate<Location> isLocationInaccessiblePredicate = Locations.inaccessibleLocationPredicate(magalieUser); - - if (isLocationInaccessiblePredicate.apply(location)) { - - String message = "requested article " + article - + " can not be retrieved since user " + magalieUser - + " has no driver license"; - - RequiredDriverLicenceException newException = new RequiredDriverLicenceException(message); - - newException.magalieUser = magalieUser; - - newException.location = location; - - newException.article = article; - - throw newException; - } - } -} Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java 2013-04-15 15:37:46 UTC (rev 97) @@ -1,49 +0,0 @@ -package com.franciaflex.magalie.services.exception; - -import com.franciaflex.magalie.persistence.entity.Article; - -public class UnavailableArticleException extends MagalieException { - - protected Article article; - - protected double availableQuantity; - - protected double requestedQuantity; - - protected UnavailableArticleException(String message) { - super(message); - } - - public static void throwIfRequestMoreThanAvailable(double requestedQuantity, double availableQuantity, Article article) throws UnavailableArticleException { - - if (requestedQuantity > availableQuantity) { - - String message = "requested article " + article - + " is not available at expected quantity: requested = " + requestedQuantity - + " available = " + availableQuantity; - - UnavailableArticleException newException = new UnavailableArticleException(message); - - newException.article = article; - - newException.availableQuantity = availableQuantity; - - newException.requestedQuantity = requestedQuantity; - - throw newException; - - } - } - - public Article getArticle() { - return article; - } - - public double getAvailableQuantity() { - return availableQuantity; - } - - public double getRequestedQuantity() { - return requestedQuantity; - } -} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-15 15:37:46 UTC (rev 97) @@ -17,8 +17,6 @@ import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.StorageMovementConfirmation; import com.franciaflex.magalie.services.StorageMovementTask; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; @@ -45,8 +43,7 @@ this.serviceContext = serviceContext; } - public StorageMovementOrder bookArticle(BookArticleRequest bookArticleRequest) - throws UnavailableArticleException, RequiredDriverLicenceException { + public BookArticleResult bookArticle(BookArticleRequest bookArticleRequest) { Preconditions.checkNotNull(bookArticleRequest.getMagalieUser()); @@ -66,21 +63,27 @@ Queue<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles); - StorageMovementOrder storageMovementOrder = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles); + BookArticleResult bookArticleResult = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); - StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao(); + if (storageMovementOrder != null) { - dao.persist(storageMovementOrder); + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); - persistenceContext.commit(); + StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao(); - return storageMovementOrder; + dao.persist(storageMovementOrder); + persistenceContext.commit(); + + } + + return bookArticleResult; + } - protected StorageMovementOrder buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) throws RequiredDriverLicenceException, UnavailableArticleException { + protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) { Article article = bookArticleRequest.getArticle(); @@ -88,6 +91,10 @@ double requestedQuantity = bookArticleRequest.getRequestedQuantity(); + BookArticleResult bookArticleResult = new BookArticleResult(); + + bookArticleResult.setBookArticleRequest(bookArticleRequest); + StorageMovementOrder storageMovementOrder = new StorageMovementOrder(); double quantity = 0; @@ -106,7 +113,7 @@ Location originLocation = storedArticle.getLocation(); - RequiredDriverLicenceException.throwIfUserCannotAccessLocation(magalieUser, originLocation, article); + bookArticleResult.userMustAccessLocation(originLocation); quantity += quantityWithdrawn; @@ -129,28 +136,40 @@ } } - if (bookArticleRequest.isBestEffortPolicy()) { + // TODO brendan 15/04/13 refactor - log.debug("best effort policy, requested quantity was " - + requestedQuantity + " but only " + quantity + - " available"); + bookArticleResult.setAvailableQuantity(quantity); - if (storageMovementOrder.getStorageMovements().isEmpty()) { + if (storageMovementOrder.getStorageMovements().isEmpty()) { - UnavailableArticleException.throwIfRequestMoreThanAvailable(requestedQuantity, 0., article); + storageMovementOrder = null; - } - } else { - // strict policy, we must deliver all requested quantity + if (quantity < requestedQuantity) { - UnavailableArticleException.throwIfRequestMoreThanAvailable(requestedQuantity, quantity, article); + if (bookArticleRequest.isBestEffortPolicy()) { + log.debug("best effort policy, requested quantity was " + + requestedQuantity + " but only " + quantity + + " available"); + + } else { + + // strict policy, we must deliver all requested quantity + + storageMovementOrder = null; + + } + + } + } - return storageMovementOrder; + bookArticleResult.setStorageMovementOrder(storageMovementOrder); + return bookArticleResult; + } protected Queue<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) { Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java 2013-04-15 15:37:46 UTC (rev 97) @@ -0,0 +1,72 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.Locations; +import com.franciaflex.magalie.persistence.entity.Location; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; +import com.google.common.base.Predicate; + +public class BookArticleResult { + + protected StorageMovementOrder storageMovementOrder; + + protected BookArticleRequest bookArticleRequest; + + protected double availableQuantity; + + protected Location inaccessibleLocation; + + public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) { + this.storageMovementOrder = storageMovementOrder; + } + + public StorageMovementOrder getStorageMovementOrder() { + return storageMovementOrder; + } + + public void setBookArticleRequest(BookArticleRequest bookArticleRequest) { + this.bookArticleRequest = bookArticleRequest; + } + + public BookArticleRequest getBookArticleRequest() { + return bookArticleRequest; + } + + public void userMustAccessLocation(Location location) { + + if (inaccessibleLocation == null) { + + MagalieUser magalieUser = bookArticleRequest.getMagalieUser(); + + Predicate<Location> isLocationInaccessiblePredicate = Locations.inaccessibleLocationPredicate(magalieUser); + + if (isLocationInaccessiblePredicate.apply(location)) { + + this.inaccessibleLocation = location; + + } + + } + + } + + public boolean isArticleInaccessible() { + return inaccessibleLocation != null; + } + + public boolean isArticleUnavailable() { + return storageMovementOrder == null; + } + + public void setAvailableQuantity(double availableQuantity) { + this.availableQuantity = availableQuantity; + } + + public double getAvailableQuantity() { + return availableQuantity; + } + + public boolean isSuccess() { + return ! isArticleInaccessible() && ! isArticleUnavailable(); + } +} Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-04-15 15:37:46 UTC (rev 97) @@ -0,0 +1,44 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; + +public class FindOrderToExecuteResult { + + protected StorageMovementOrder storageMovementOrder; + + protected boolean nothingToDo; + + protected boolean driverLicenseRequired; + + public boolean isSuccess() { + return storageMovementOrder != null; + } + + public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) { + this.storageMovementOrder = storageMovementOrder; + } + + public StorageMovementOrder getStorageMovementOrder() { + return storageMovementOrder; + } + + public void setNothingToDo(boolean nothingToDo) { + this.nothingToDo = nothingToDo; + } + + public boolean isNothingToDo() { + return nothingToDo; + } + + public void setDriverLicenseRequired(boolean driverLicenseRequired) { + this.driverLicenseRequired = driverLicenseRequired; + } + + public boolean isDriverLicenseRequired() { + return driverLicenseRequired; + } + + public boolean isEverythingUnavailable() { + return ! driverLicenseRequired && ! nothingToDo; + } +} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-04-15 15:37:46 UTC (rev 97) @@ -8,13 +8,10 @@ import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.Location; import com.franciaflex.magalie.persistence.entity.MagalieUser; -import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.persistence.entity.Warehouse; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -43,12 +40,10 @@ } - public StorageMovementOrder fulfilKanbanTask( + public BookArticleResult fulfilKanbanTask( String articleBarcode, MagalieUser magalieUser, - String destinationStoreId) throws InvalidMagalieBarcodeException, - UnavailableArticleException, - RequiredDriverLicenceException { + String destinationStoreId) throws InvalidMagalieBarcodeException { if (log.isInfoEnabled()) { log.info(magalieUser + " requested fulfil kanban with barcode " + articleBarcode); @@ -77,10 +72,10 @@ magalieUser, building, article, quantityInKanban, destinationLocation, true); - StorageMovementOrder storageMovementOrder = + BookArticleResult bookArticleResult = articleStorageService.bookArticle(bookArticleRequest); - return storageMovementOrder; + return bookArticleResult; } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-15 15:37:46 UTC (rev 97) @@ -36,8 +36,6 @@ import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; @@ -60,7 +58,7 @@ this.serviceContext = serviceContext; } - public StorageMovementOrder getStorageMovementOrder( + public FindOrderToExecuteResult getStorageMovementOrder( MagalieUser magalieUser, Building building) { @@ -68,13 +66,14 @@ Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles); - StorageMovementOrder storageMovementOrder = + + FindOrderToExecuteResult findOrderToExecuteResult = findOrderToExecute( requestedArticlesByPriority, magalieUser, building); - return storageMovementOrder; + return findOrderToExecuteResult; } @@ -92,25 +91,23 @@ } - protected StorageMovementOrder findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) { + protected FindOrderToExecuteResult findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) { ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class); - StorageMovementOrder storageMovementOrder = null; + BookArticleResult bookArticleResult = null; - int requestedArticlesCount = requestedArticlesByPriority.size(); + RequestedArticle requestedArticle = null; + boolean success = false; + Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator(); - boolean everythingIsUnavailable = true; + boolean driverLicenseRequired = false; - boolean requiredDriverLicence = false; + while ( ! success && requestedArticleIterator.hasNext()) { - RequestedArticle requestedArticle = null; - - while (storageMovementOrder == null && requestedArticleIterator.hasNext()) { - requestedArticle = requestedArticleIterator.next(); Article article = requestedArticle.getArticle(); @@ -121,48 +118,18 @@ BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, quantity, destinationLocation, false); - try { + bookArticleResult = articleStorageService.bookArticle(bookArticleRequest); - storageMovementOrder = articleStorageService.bookArticle(bookArticleRequest); + driverLicenseRequired |= bookArticleResult.isArticleInaccessible() && ! bookArticleResult.isArticleUnavailable(); - everythingIsUnavailable = false; + success = bookArticleResult.isSuccess(); - } catch (UnavailableArticleException e) { - - if (log.isDebugEnabled()) { - log.debug("cannot work for order", e); - } - - } catch (RequiredDriverLicenceException e) { - - if (log.isDebugEnabled()) { - log.debug("cannot work for order", e); - } - - requiredDriverLicence = true; - - } - } - if (storageMovementOrder == null && requestedArticlesCount > 0) { + FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult(); - if (everythingIsUnavailable) { + if (success) { - if (requiredDriverLicence) { - - // throw new RequiredDriverLicenceException(); - - } else { - - // throw new UnavailableArticleException(); - - } - } - } - - if (storageMovementOrder != null) { - Preconditions.checkState(requestedArticle != null); MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); @@ -173,15 +140,33 @@ newDeliveredRequestedArticle.setRequestedArticle(requestedArticle); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); + newDeliveredRequestedArticle.setStorageMovementOrder(storageMovementOrder); dao.persist(newDeliveredRequestedArticle); persistenceContext.commit(); + findOrderToExecuteResult = new FindOrderToExecuteResult(); + + findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder); + + } else { + + if (requestedArticlesByPriority.isEmpty()) { + + findOrderToExecuteResult.setNothingToDo(true); + + } else { + + findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired); + + } + } - return storageMovementOrder; + return findOrderToExecuteResult; } Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-15 15:37:46 UTC (rev 97) @@ -7,8 +7,6 @@ import com.franciaflex.magalie.persistence.entity.StorageMovement; import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.services.AbstractMagalieServiceTest; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; import com.google.common.collect.Iterables; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -27,6 +25,8 @@ protected Building building; + protected Location destinationLocation; + @Before public void setUp() throws ParseException { @@ -34,71 +34,44 @@ building = fixture("B1"); + destinationLocation = fixture("location5"); + service = newService(ArticleStorageService.class); serviceContext.setDate(new Date(1363948427576l)); } - protected StorageMovementOrder bookArticle(MagalieUser magalieUser, Building building, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException { + @Test + public void testThrowUnavailableArticle() throws Exception { - BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, requestedQuantity, null, false); - - return service.bookArticle(bookArticleRequest); + MagalieUser alexandre = fixture("alexandre"); + Article article = fixture("article1"); - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 100., destinationLocation, false); - public StorageMovementOrder bookArticleWithBestEffortPolicy( - MagalieUser magalieUser, Building building, Article article, double requestedQuantity, Location destinationLocation) - throws RequiredDriverLicenceException, UnavailableArticleException { + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); - BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, requestedQuantity, null, true); + Assert.assertFalse(bookArticleResult.isSuccess()); - return service.bookArticle(bookArticleRequest); + Assert.assertTrue(bookArticleResult.isArticleUnavailable()); } @Test - public void testThrowUnavailableArticle() throws Exception { + public void testThrowRequiredDriverLicenceException() throws Exception { - MagalieUser alexandre = fixture("alexandre"); + MagalieUser basile = fixture("basile"); Article article = fixture("article1"); - StorageMovementOrder storageMovementOrder; - try { - storageMovementOrder = bookArticle(alexandre, building, article, 100.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.assertEquals(70., e.getAvailableQuantity(), DELTA); - } - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 70., destinationLocation, false); - @Test - public void testThrowRequiredDriverLicenceException() throws Exception { + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); - MagalieUser basile = fixture("basile"); - Article article = fixture("article1"); - Location location2 = fixture("location2"); - StorageMovementOrder storageMovementOrder; + Assert.assertFalse(bookArticleResult.isSuccess()); + Assert.assertTrue(bookArticleResult.isArticleInaccessible()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); - try { - storageMovementOrder = bookArticle(basile, building, article, 70.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - Assert.fail(); - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.assertEquals(location2.getId(), e.getLocation().getId()); - } } @Test @@ -106,26 +79,17 @@ MagalieUser basile = fixture("basile"); Article article = fixture("article2"); - StorageMovementOrder storageMovementOrder = null; - try { - storageMovementOrder = bookArticle(basile, building, article, 5.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 5., destinationLocation, false); - Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); + + Assert.assertEquals(1, bookArticleResult.getStorageMovementOrder().getStorageMovements().size()); + } @Test @@ -133,30 +97,21 @@ MagalieUser alexandre = fixture("alexandre"); Article article = fixture("article1"); - StorageMovementOrder storageMovementOrder = null; - try { - storageMovementOrder = bookArticle(alexandre, building, article, 50.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 50., destinationLocation, false); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); + + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size()); StorageMovement location1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); Assert.assertEquals(20., location1.getExpectedQuantity(), DELTA); StorageMovement location2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null); Assert.assertEquals(30., location2.getExpectedQuantity(), DELTA); + } @Test @@ -167,13 +122,14 @@ Article article = fixture("article1"); - StorageMovementOrder storageMovementOrder = null; + { + BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, false); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); - try { - storageMovementOrder = bookArticle(alexandre, building, article, 30.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size()); StorageMovement storageMovement1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); Assert.assertEquals(20., storageMovement1.getExpectedQuantity(), DELTA); @@ -181,37 +137,21 @@ StorageMovement storageMovement2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null); Assert.assertEquals(10., storageMovement2.getExpectedQuantity(), DELTA); Assert.assertEquals("A1", storageMovement2.getOriginLocation().getCode()); - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); } - try { - storageMovementOrder = bookArticle(cathy, building, article, 30.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } + { + + BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); + + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); Assert.assertEquals(30., storageMovement.getExpectedQuantity(), DELTA); Assert.assertEquals("A1", storageMovement.getOriginLocation().getCode()); - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); } } @@ -228,28 +168,21 @@ LocationErrorsService locationErrorsService = newService(LocationErrorsService.class); locationErrorsService.reportError(location2, alexandre); - try { - StorageMovementOrder storageMovementOrder = bookArticle(cathy, building, article, 30.); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); - StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); - Assert.assertNotEquals( - "location2 must not be returned because it was reported in error", - location2.getId(), - storageMovement.getOriginLocation().getId()); - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); + + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); + + Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); + StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); + Assert.assertNotEquals( + "location2 must not be returned because it was reported in error", + location2.getId(), + storageMovement.getOriginLocation().getId()); + } @Test @@ -259,26 +192,18 @@ Article article = fixture("article2"); Location location1 = fixture("location1"); - try { - StorageMovementOrder storageMovementOrder = bookArticleWithBestEffortPolicy(alexandre, building, article, 30., null); - if (log.isDebugEnabled()) { - log.debug("storageMovementOrder = " + storageMovementOrder); - } - Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); - StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); - Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getQuantity(), DELTA); - Assert.assertEquals(location1.getId(), storageMovement.getOriginLocation().getId()); - } catch (RequiredDriverLicenceException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } catch (UnavailableArticleException e) { - if (log.isDebugEnabled()) { - log.debug("exception raised = " + e); - } - Assert.fail(); - } + BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, true); + BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest); + StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); + + Assert.assertTrue(bookArticleResult.isSuccess()); + Assert.assertFalse(bookArticleResult.isArticleUnavailable()); + Assert.assertFalse(bookArticleResult.isArticleInaccessible()); + Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size()); + StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null); + Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getQuantity(), DELTA); + Assert.assertEquals(location1.getId(), storageMovement.getOriginLocation().getId()); + } } Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-15 15:37:46 UTC (rev 97) @@ -4,6 +4,7 @@ import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.services.AbstractMagalieServiceTest; +import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -54,10 +55,21 @@ } @Test - public void testName() { + public void testFindOrderWhenNoRequestedArticles() { MagalieUser magalieUser = fixture("bruno"); + Building building = fixture("B1"); + Queue<RequestedArticle> emptyQueue = Lists.newLinkedList(); + + FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(emptyQueue, magalieUser, building); + + Assert.assertTrue(orderToExecute.isNothingToDo()); + Assert.assertFalse(orderToExecute.isEverythingUnavailable()); + Assert.assertFalse(orderToExecute.isSuccess()); + Assert.assertFalse(orderToExecute.isDriverLicenseRequired()); + } + } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-15 15:37:46 UTC (rev 97) @@ -3,6 +3,7 @@ import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; +import com.franciaflex.magalie.services.service.FindOrderToExecuteResult; import com.franciaflex.magalie.services.service.RequestedArticleService; import com.franciaflex.magalie.web.MagalieActionSupport; import com.franciaflex.magalie.web.MagalieSession; @@ -39,20 +40,37 @@ Building building = session.getBuilding(); - storageMovementOrder = service.getStorageMovementOrder(magalieUser, building); + FindOrderToExecuteResult findOrderToExecuteResult = + service.getStorageMovementOrder(magalieUser, building); - String result = SUCCESS; + if (findOrderToExecuteResult.isSuccess()) { - if (storageMovementOrder == null) { + storageMovementOrder = findOrderToExecuteResult.getStorageMovementOrder(); - addActionMessage("Aucun article"); + return SUCCESS; - result = INPUT; + } + if (findOrderToExecuteResult.isNothingToDo()) { + + addActionMessage("Il n'y a aucune demande. Vous n'avez rien à faire"); + } - return result; + if (findOrderToExecuteResult.isDriverLicenseRequired()) { + addActionMessage("Il y a des demandes en cours, mais un permis est requis"); + + } + + if (findOrderToExecuteResult.isEverythingUnavailable()) { + + addActionMessage("Toutes les demandes en cours concernent des articles indisponibles"); + + } + + return INPUT; + } public String getStorageMovementOrderId() { Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-15 15:37:46 UTC (rev 97) @@ -5,8 +5,7 @@ import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.persistence.entity.Warehouse; import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; +import com.franciaflex.magalie.services.service.BookArticleResult; import com.franciaflex.magalie.services.service.FulfilKanbanService; import com.franciaflex.magalie.web.MagalieActionSupport; import com.franciaflex.magalie.web.MagalieSession; @@ -96,9 +95,11 @@ // save used destination warehouse to propose it by default on next kanban session.setLastUsedDestinationWarehouseForKanbans(destinationWarehouse); + BookArticleResult bookArticleResult; + try { - storageMovementOrder = service.fulfilKanbanTask(articleBarcode, magalieUser, destinationWarehouseId); + bookArticleResult = service.fulfilKanbanTask(articleBarcode, magalieUser, destinationWarehouseId); } catch (InvalidMagalieBarcodeException e) { @@ -106,20 +107,26 @@ return INPUT; - } catch (UnavailableArticleException e) { + } + if (bookArticleResult.isArticleUnavailable()) { + addActionError("Cet article n'est pas disponible"); return INPUT; - } catch (RequiredDriverLicenceException e) { + } + if (bookArticleResult.isArticleInaccessible()) { + addActionError("Un permis est nécessaire pour obtenir cet article"); return INPUT; } + storageMovementOrder = bookArticleResult.getStorageMovementOrder(); + return SUCCESS; } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-15 12:51:16 UTC (rev 96) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-15 15:37:46 UTC (rev 97) @@ -27,8 +27,6 @@ import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.services.StorageMovementConfirmation; import com.franciaflex.magalie.services.StorageMovementTask; -import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; -import com.franciaflex.magalie.services.exception.UnavailableArticleException; import com.franciaflex.magalie.services.service.ArticleStorageService; import com.franciaflex.magalie.web.MagalieActionSupport; import com.franciaflex.magalie.web.MagalieSession; @@ -73,7 +71,7 @@ } @Override - public String input() throws RequiredDriverLicenceException, UnavailableArticleException { + public String input() { Preconditions.checkNotNull(storageMovementOrderId);
participants (1)
-
bleny@users.forge.codelutin.com