r216 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services 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-05-30 14:55:46 +0200 (Thu, 30 May 2013) New Revision: 216 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: refs #2168 in simple withdraw item, consider driver license Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-05-30 12:43:01 UTC (rev 215) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-05-30 12:55:46 UTC (rev 216) @@ -1,6 +1,8 @@ package com.franciaflex.magalie.services; import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import java.util.List; @@ -8,13 +10,14 @@ protected List<StoredArticle> storedArticles; - // TODO brendan 29/05/13 protected boolean driverLicenseRequired; protected boolean articleUnavailable; - public SimpleWithdrawItemTask(List<StoredArticle> storedArticles) { - this.storedArticles = storedArticles; + public SimpleWithdrawItemTask(Iterable<StoredArticle> storedArticles, boolean driverLicenseRequired, boolean articleUnavailable) { + this.storedArticles = Lists.newArrayList(storedArticles); + this.driverLicenseRequired = driverLicenseRequired; + this.articleUnavailable = articleUnavailable; } public List<StoredArticle> getStoredArticles() { @@ -22,10 +25,12 @@ } public boolean isDriverLicenseRequired() { + Preconditions.checkState( ! articleUnavailable); return driverLicenseRequired; } public boolean isArticleUnavailable() { + Preconditions.checkState( ! driverLicenseRequired); return articleUnavailable; } } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-05-30 12:43:01 UTC (rev 215) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-05-30 12:55:46 UTC (rev 216) @@ -2,6 +2,7 @@ import com.franciaflex.magalie.persistence.Locations; import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.StoredArticles; import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; @@ -16,7 +17,8 @@ import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.SimpleWithdrawItemTask; import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; -import com.google.common.collect.Lists; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -33,7 +35,7 @@ this.serviceContext = serviceContext; } - public SimpleWithdrawItemTask getSimpleWithdrawItemTask(Building building, String articleBarcode) throws InvalidMagalieBarcodeException { + public SimpleWithdrawItemTask getSimpleWithdrawItemTask(Building building, MagalieUser magalieUser, String articleBarcode) throws InvalidMagalieBarcodeException { ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class); @@ -46,8 +48,20 @@ Iterable<StoredArticle> storedArticles = articleStorageService.getStoredArticles(building, article); + Predicate<StoredArticle> articleStoredInAccessibleLocationPredicate = + StoredArticles.articleStoredInAccessibleLocationPredicate(magalieUser); + + boolean articleIsAccessible = + Iterables.any( + storedArticles, + articleStoredInAccessibleLocationPredicate); + + boolean articleUnavailable = Iterables.isEmpty(storedArticles); + + storedArticles = Iterables.filter(storedArticles, articleStoredInAccessibleLocationPredicate); + SimpleWithdrawItemTask simpleWithdrawItemTask = - new SimpleWithdrawItemTask(Lists.newArrayList(storedArticles)); + new SimpleWithdrawItemTask(storedArticles, ! articleIsAccessible, articleUnavailable); return simpleWithdrawItemTask; Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java (rev 0) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java 2013-05-30 12:55:46 UTC (rev 216) @@ -0,0 +1,97 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.StoredArticles; +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.services.AbstractMagalieServiceTest; +import com.franciaflex.magalie.services.SimpleWithdrawItemTask; +import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; +import com.google.common.base.Predicate; +import com.google.common.collect.Iterables; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.text.ParseException; +import java.util.Date; +import java.util.List; + +public class SimpleWithdrawItemServiceTest extends AbstractMagalieServiceTest { + + private static final Log log = LogFactory.getLog(SimpleWithdrawItemServiceTest.class); + + protected SimpleWithdrawItemService service; + + protected MagalieUser magalieUser; + + protected Building building; + + @Before + public void setUp() throws ParseException { + + loadFixtures("fixtures"); + + service = newService(SimpleWithdrawItemService.class); + + serviceContext.setDate(new Date(1363948427576l)); + + magalieUser = fixture("bruno"); + + building = fixture("B1"); + } + + @Test + public void testSimpleWithdraw() throws InvalidMagalieBarcodeException { + + Article article = fixture("article2"); + + SimpleWithdrawItemTask simpleWithdrawItemTask = + service.getSimpleWithdrawItemTask(building, magalieUser, article.getCode()); + + Assert.assertFalse(simpleWithdrawItemTask.isDriverLicenseRequired()); + + Assert.assertFalse(simpleWithdrawItemTask.isArticleUnavailable()); + + List<StoredArticle> storedArticles = simpleWithdrawItemTask.getStoredArticles(); + + Predicate<StoredArticle> articleStoredInAccessibleLocationPredicate = + StoredArticles.articleStoredInAccessibleLocationPredicate(magalieUser); + + Assert.assertTrue(Iterables.all(storedArticles, articleStoredInAccessibleLocationPredicate)); + + Assert.assertEquals(3, storedArticles.size()); + + } + + @Test + public void testSimpleWithdrawWithoutDriverLicense() throws InvalidMagalieBarcodeException { + + magalieUser = fixture("corinne"); + + Article article = fixture("article1"); + + SimpleWithdrawItemTask simpleWithdrawItemTask = + service.getSimpleWithdrawItemTask(building, magalieUser, article.getCode()); + + Assert.assertFalse(simpleWithdrawItemTask.isDriverLicenseRequired()); + + Assert.assertFalse(simpleWithdrawItemTask.isArticleUnavailable()); + + List<StoredArticle> storedArticles = simpleWithdrawItemTask.getStoredArticles(); + + Predicate<StoredArticle> articleStoredInAccessibleLocationPredicate = + StoredArticles.articleStoredInAccessibleLocationPredicate(magalieUser); + + Assert.assertTrue( + "all given locations must be accessible for user", + Iterables.all(storedArticles, articleStoredInAccessibleLocationPredicate)); + + Assert.assertEquals(1, storedArticles.size()); + + } + +} Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java 2013-05-30 12:43:01 UTC (rev 215) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java 2013-05-30 12:55:46 UTC (rev 216) @@ -59,9 +59,11 @@ Building building = session.getBuilding(); + MagalieUser magalieUser = session.getMagalieUser(); + try { - simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, articleBarcode); + simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, magalieUser, articleBarcode); } catch (InvalidMagalieBarcodeException e) { @@ -120,7 +122,7 @@ Building building = session.getBuilding(); - simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, articleBarcode); + simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, magalieUser, articleBarcode); Optional<StoredArticle> storedArticleOptional = Iterables.tryFind(
participants (1)
-
bleny@users.forge.codelutin.com