Author: bleny Date: 2013-05-17 10:45:28 +0200 (Fri, 17 May 2013) New Revision: 160 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: refs #2165 prevent suggestion of 'REC' locations Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java 2013-05-16 15:56:34 UTC (rev 159) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java 2013-05-17 08:45:28 UTC (rev 160) @@ -33,6 +33,14 @@ public class Locations { + protected static class IsReceptionLocation implements Predicate<Location> { + + @Override + public boolean apply(Location location) { + return codeForReceptionLocations().equals(location.getCode()); + } + } + protected static class AccessibleLocationPredicate implements Predicate<Location> { protected MagalieUser magalieUser; @@ -81,4 +89,8 @@ public static String codeForReceptionLocations() { return "REC"; } + + public static Predicate<Location> isNotReceptionLocation() { + return Predicates.not(new IsReceptionLocation()); + } } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-05-16 15:56:34 UTC (rev 159) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-05-17 08:45:28 UTC (rev 160) @@ -23,6 +23,7 @@ * #L% */ +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; @@ -119,6 +120,17 @@ protected List<Location> findLocationsToReceiveArticle(Building building, Article article) { + // first step, add fixed locations for this article first + Set<Location> locations = Sets.newLinkedHashSet(); + + if (article.getFixedLocations() != null) { + + locations.addAll(article.getFixedLocations()); + + } + + // second step, add locations where there is already quantities stored + // we will suggest locations with highest quantities first ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class); @@ -135,30 +147,33 @@ Iterables.addAll(sortedStoredArticles, storedArticles); - Set<Location> result = Sets.newLinkedHashSet(); - - if (article.getFixedLocations() != null) { - - result.addAll(article.getFixedLocations()); - - } - Iterables.addAll( - result, + locations, Iterables.transform( - sortedStoredArticles, - StoredArticles.getLocationFunction())); + sortedStoredArticles, + StoredArticles.getLocationFunction())); + // third step, add extra locations MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); LocationDao locationDao = persistenceContext.getLocationDao(); - result.addAll(locationDao.findAllWithoutReception(building)); + locations.addAll(locationDao.findAllWithoutReception(building)); - return Lists.newArrayList(result); + // fourth step, remove reception locations because it's stupid to + // move an article from reception location to another reception location + List<Location> result = + Lists.newArrayList( + Iterables.filter( + locations, + Locations.isNotReceptionLocation() + ) + ); + return result; + } public void confirmReception(MagalieUser magalieUser, ReceptionConfirmation receptionConfirmation) { Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-05-16 15:56:34 UTC (rev 159) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-05-17 08:45:28 UTC (rev 160) @@ -23,6 +23,7 @@ * #L% */ +import com.franciaflex.magalie.persistence.Locations; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; @@ -120,6 +121,20 @@ Assert.assertEquals(fixedLocation, receptionTask.getLocations().get(0)); + for (Location location : receptionTask.getLocations()) { + + Assert.assertNotEquals( + "we should never suggest someone to store something in a reception location", + Locations.codeForReceptionLocations(), + location.getCode()); + + Assert.assertNotEquals( + "we should never suggest someone to store something in a warehouse without locations", + Locations.codeForWarehouseWithoutLocations(), + location.getCode()); + + } + } @Test