Author: bleny Date: 2013-09-02 11:35:28 +0200 (Mon, 02 Sep 2013) New Revision: 402 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: fixes #3144 add a more restrictive request to find undelivered articles Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.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/RequestedArticleServiceTest.java Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java 2013-08-30 16:34:51 UTC (rev 401) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java 2013-09-02 09:35:28 UTC (rev 402) @@ -24,6 +24,7 @@ */ import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.persistence.entity.RequestedList; @@ -46,9 +47,16 @@ @Override public List<RequestedArticle> findAllUndelivered(Building building, String listType) { - TypedQuery<RequestedArticle> query = createQuery("from RequestedArticle ra where ra.requestedList.building = :building and ra.requestedList.listType = :listType and ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra)"); + TypedQuery<RequestedArticle> query = createQuery( + " from RequestedArticle ra" + + " where ra.requestedList.building = :building" + + " and ra.requestedList.listType = :listType" + + " and ra.requestedList not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :affectedDeliveredRequestedListStatus OR drl.status = :completeDeliveredRequestedListStatus)" + + " and ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra)"); query.setParameter("building", building); query.setParameter("listType", listType); + query.setParameter("affectedDeliveredRequestedListStatus", DeliveredRequestedListStatus.AFFECTED); + query.setParameter("completeDeliveredRequestedListStatus", DeliveredRequestedListStatus.COMPLETE); return findAll(query); } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java 2013-08-30 16:34:51 UTC (rev 401) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java 2013-09-02 09:35:28 UTC (rev 402) @@ -39,4 +39,8 @@ return this == AFFECTED; } + public boolean isPending() { + return this == PENDING; + } + } //DeliveredRequestedListStatus 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-08-30 16:34:51 UTC (rev 401) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-09-02 09:35:28 UTC (rev 402) @@ -171,6 +171,10 @@ deliveredRequestedListDao.persist(newAffectation); + } else { + + Preconditions.checkState(newAffectation.getStatus().isPending(), "liste déjà affectée"); + } newAffectation.setAffectedTo(magalieUser); 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-08-30 16:34:51 UTC (rev 401) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-09-02 09:35:28 UTC (rev 402) @@ -23,7 +23,9 @@ * #L% */ +import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListJpaDao; import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.persistence.entity.StorageMovement; @@ -40,6 +42,7 @@ import org.junit.Test; import org.mockito.Mockito; +import javax.persistence.EntityManager; import java.text.ParseException; import java.util.Date; import java.util.List; @@ -255,4 +258,42 @@ } + @Test + public void testAffectationsLockLists() { + + FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE); + + Preconditions.checkState(orderToExecute.isSuccess()); + + DeliveredRequestedList firstAffectation = orderToExecute.getNewAffectation(); + + Preconditions.checkNotNull(firstAffectation); + + // on essaie de travailler avec un autre utilisateur pour vérifier qu'il n'est pas affecté à la même liste + + MagalieUser otherMagalieUser = fixture("pascal"); + + orderToExecute = service.findOrderToExecute(otherMagalieUser, building, LIST_TYPE); + + Preconditions.checkState(orderToExecute.isSuccess()); + + DeliveredRequestedList otherAffectation = orderToExecute.getNewAffectation(); + + Preconditions.checkNotNull(otherAffectation); + + EntityManager entityManager = getJpaEntityManagerRule().newEntityManager(); + DeliveredRequestedListJpaDao deliveredRequestedListJpaDao = new DeliveredRequestedListJpaDao(entityManager); + List<DeliveredRequestedList> deliveredRequestedLists = deliveredRequestedListJpaDao.findAll(); + + if (log.isDebugEnabled()) { + log.debug("delivered requested list = " + deliveredRequestedLists); + } + System.out.println("delivered requested list = " + deliveredRequestedLists); + + Assert.assertEquals(2, deliveredRequestedLists.size()); + + Assert.assertNotEquals(firstAffectation.getRequestedList(), otherAffectation.getRequestedList()); + + } + }