Author: bleny Date: 2013-04-25 12:04:24 +0200 (Thu, 25 Apr 2013) New Revision: 128 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce UnavailableArticle entity Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/UnavailableArticleDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/UnavailableArticleJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-25 08:58:18 UTC (rev 127) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-25 10:04:24 UTC (rev 128) @@ -36,6 +36,7 @@ import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.dao.SupplierDao; +import com.franciaflex.magalie.persistence.dao.UnavailableArticleDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.jpa.ArticleJpaDao; @@ -51,6 +52,7 @@ import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementOrderJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.SupplierJpaDao; +import com.franciaflex.magalie.persistence.dao.jpa.UnavailableArticleJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.WarehouseJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StoredArticleJpaDao; @@ -166,4 +168,9 @@ public SupplierDao getSupplierDao() { return new SupplierJpaDao(entityManager); } + + @Override + public UnavailableArticleDao getUnavailableArticleDao() { + return new UnavailableArticleJpaDao(entityManager); + } } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-25 08:58:18 UTC (rev 127) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-25 10:04:24 UTC (rev 128) @@ -37,6 +37,7 @@ import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.SupplierDao; +import com.franciaflex.magalie.persistence.dao.UnavailableArticleDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; /** @@ -80,4 +81,6 @@ SupplierDao getSupplierDao(); + UnavailableArticleDao getUnavailableArticleDao(); + } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/UnavailableArticleDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/UnavailableArticleDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/UnavailableArticleDao.java 2013-04-25 10:04:24 UTC (rev 128) @@ -0,0 +1,13 @@ +package com.franciaflex.magalie.persistence.dao; + +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.UnavailableArticle; + +/** + * @author bleny + */ +public interface UnavailableArticleDao extends Dao<UnavailableArticle> { + + UnavailableArticle findByArticle(Article article); + +} Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/UnavailableArticleJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/UnavailableArticleJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/UnavailableArticleJpaDao.java 2013-04-25 10:04:24 UTC (rev 128) @@ -0,0 +1,27 @@ +package com.franciaflex.magalie.persistence.dao.jpa; + +import com.franciaflex.magalie.persistence.dao.UnavailableArticleDao; +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.UnavailableArticle; + +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; + +public class UnavailableArticleJpaDao extends AbstractJpaDao<UnavailableArticle> implements UnavailableArticleDao { + + public UnavailableArticleJpaDao(EntityManager entityManager) { + super(entityManager); + } + + @Override + protected Class<UnavailableArticle> getEntityClass() { + return UnavailableArticle.class; + } + + @Override + public UnavailableArticle findByArticle(Article article) { + TypedQuery<UnavailableArticle> query = createQuery("from UnavailableArticle ua where ua.article = :article"); + query.setParameter("article", article); + return findUniqueOrNull(query); + } +} Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java 2013-04-25 10:04:24 UTC (rev 128) @@ -0,0 +1,34 @@ +package com.franciaflex.magalie.persistence.entity; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToOne; + +@Entity +public class UnavailableArticle extends AbstractEntity { + + @Id + @GeneratedValue + protected String id; + + @OneToOne + protected Article article; + + @Override + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Article getArticle() { + return article; + } + + public void setArticle(Article article) { + this.article = article; + } +} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java 2013-04-25 08:58:18 UTC (rev 127) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java 2013-04-25 10:04:24 UTC (rev 128) @@ -28,6 +28,7 @@ import com.franciaflex.magalie.persistence.entity.LocationError; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.StorageMovement; +import com.franciaflex.magalie.persistence.entity.UnavailableArticle; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; @@ -45,6 +46,7 @@ protected List<LocationError> allLocationErrors; protected List<DeliveredRequestedList> allDeliveredRequestedLists; + private List<UnavailableArticle> allUnavailableArticles; public void setReportDate(Date reportDate) { this.reportDate = reportDate; @@ -103,4 +105,12 @@ public List<DeliveredRequestedList> getAllDeliveredRequestedLists() { return allDeliveredRequestedLists; } + + public void setAllUnavailableArticles(List<UnavailableArticle> allUnavailableArticles) { + this.allUnavailableArticles = allUnavailableArticles; + } + + public List<UnavailableArticle> getAllUnavailableArticles() { + return allUnavailableArticles; + } } 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-25 08:58:18 UTC (rev 127) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-25 10:04:24 UTC (rev 128) @@ -29,6 +29,7 @@ import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; +import com.franciaflex.magalie.persistence.dao.UnavailableArticleDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.Location; @@ -36,6 +37,7 @@ import com.franciaflex.magalie.persistence.entity.StorageMovement; import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.persistence.entity.UnavailableArticle; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.StorageMovementConfirmation; @@ -74,8 +76,10 @@ Preconditions.checkNotNull(bookArticleRequest.getBuilding()); - Preconditions.checkNotNull(bookArticleRequest.getArticle()); + Article article = bookArticleRequest.getArticle(); + Preconditions.checkNotNull(article); + Preconditions.checkNotNull(bookArticleRequest.getDestinationLocation()); Preconditions.checkArgument(bookArticleRequest.getRequestedQuantity() > 0.); @@ -84,7 +88,7 @@ log.info("will process article request" + bookArticleRequest); } - List<StoredArticle> storedArticles = getStoredArticles(bookArticleRequest.getBuilding(), bookArticleRequest.getArticle()); + List<StoredArticle> storedArticles = getStoredArticles(bookArticleRequest.getBuilding(), article); Queue<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles); @@ -92,22 +96,71 @@ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder(); - if (storageMovementOrder != null) { + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + boolean articleIsAvailable = storageMovementOrder != null; + if (articleIsAvailable) { + StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao(); dao.persist(storageMovementOrder); - persistenceContext.commit(); - } + updateArticleAvailability(bookArticleRequest, articleIsAvailable); + + persistenceContext.commit(); + return bookArticleResult; } + /** + * Add or remove a line in table {@link UnavailableArticle} + */ + protected void updateArticleAvailability(BookArticleRequest bookArticleRequest, boolean articleIsAvailable) { + + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + + UnavailableArticleDao dao = persistenceContext.getUnavailableArticleDao(); + + Article article = bookArticleRequest.getArticle(); + + UnavailableArticle unavailableArticle = dao.findByArticle(article); + + if (articleIsAvailable) { + + if (unavailableArticle != null) { + + if (log.isInfoEnabled()) { + log.info("article " + article + " is no longer considered as unavailable"); + } + + dao.remove(unavailableArticle); + + } + + } else { + + if (log.isInfoEnabled()) { + log.info("reporting article " + article + " as unavailable"); + } + + if (unavailableArticle == null) { + + UnavailableArticle newUnavailableArticle = new UnavailableArticle(); + + newUnavailableArticle.setArticle(article); + + dao.persist(newUnavailableArticle); + + } + + } + + } + protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) { Article article = bookArticleRequest.getArticle(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java 2013-04-25 08:58:18 UTC (rev 127) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java 2013-04-25 10:04:24 UTC (rev 128) @@ -23,7 +23,9 @@ * #L% */ +import com.franciaflex.magalie.persistence.MagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; +import com.franciaflex.magalie.persistence.dao.UnavailableArticleDao; import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList; import com.franciaflex.magalie.persistence.entity.LocationError; import com.franciaflex.magalie.persistence.entity.MagalieUser; @@ -50,6 +52,8 @@ Date now = serviceContext.getNow(); + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + magalieReport.setReportDate(now); MagalieUsersService magalieUsersService = serviceContext.newService(MagalieUsersService.class); @@ -58,7 +62,7 @@ magalieReport.setAllMagalieUsers(allMagalieUsers); - StorageMovementDao storageMovementDao = serviceContext.getPersistenceContext().getStorageMovementDao(); + StorageMovementDao storageMovementDao = persistenceContext.getStorageMovementDao(); List<StorageMovement> allStorageMovements = storageMovementDao.findAll(); @@ -76,6 +80,10 @@ magalieReport.setAllDeliveredRequestedLists(allDeliveredRequestedLists); + UnavailableArticleDao unavailableArticleDao = persistenceContext.getUnavailableArticleDao(); + + magalieReport.setAllUnavailableArticles(unavailableArticleDao.findAll()); + return magalieReport; } Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-04-25 08:58:18 UTC (rev 127) +++ trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-04-25 10:04:24 UTC (rev 128) @@ -272,6 +272,38 @@ </section> <section> + <h2>Articles sans stocks</h2> + + <table class="table"> + <thead> + <tr> + <th> + Id + </th> + <th> + Article + </th> + </tr> + </thead> + + <tbody> + <s:iterator value="report.allUnavailableArticles"> + <tr> + <td> + <s:property value="id" /> + </td> + <td> + <s:property value="description" /> + (<s:property value="code" />) + </td> + </tr> + </s:iterator> + </tbody> + + </table> +</section> + +<section> <h2>Utilisateurs connus</h2> <table class="table">