Author: bleny Date: 2013-04-10 16:40:31 +0200 (Wed, 10 Apr 2013) New Revision: 83 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce notion of building, ask for destination store when fulfilling kanban Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/BuildingDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoreDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/BuildingJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoreJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Building.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Store.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-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoredArticleDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Site.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.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/FixturesService.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/main/java/com/franciaflex/magalie/services/service/StoreService.java trunk/magalie-services/src/main/resources/fixtures.yaml trunk/magalie-services/src/main/resources/fixtures2.yaml 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/MagalieSession.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.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/LoginAction.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LogoutAction.java trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp trunk/magalie-web/src/main/webapp/WEB-INF/content/login-input.jsp trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.persistence; import com.franciaflex.magalie.persistence.dao.ArticleDao; +import com.franciaflex.magalie.persistence.dao.BuildingDao; import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao; import com.franciaflex.magalie.persistence.dao.MagalieUserDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; @@ -8,8 +9,10 @@ import com.franciaflex.magalie.persistence.dao.SiteErrorDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; +import com.franciaflex.magalie.persistence.dao.StoreDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.jpa.ArticleJpaDao; +import com.franciaflex.magalie.persistence.dao.jpa.BuildingJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.DeliveredRequestedArticleJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.MagalieUserJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.RequestedArticleJpaDao; @@ -17,6 +20,7 @@ import com.franciaflex.magalie.persistence.dao.jpa.SiteJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementOrderJpaDao; +import com.franciaflex.magalie.persistence.dao.jpa.StoreJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StoredArticleJpaDao; import javax.persistence.EntityManager; @@ -82,6 +86,16 @@ } @Override + public StoreDao getStoreDao() { + return new StoreJpaDao(entityManager); + } + + @Override + public BuildingDao getBuildingDao() { + return new BuildingJpaDao(entityManager); + } + + @Override public void commit() { entityTransaction.commit(); entityTransaction = entityManager.getTransaction(); 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.persistence; import com.franciaflex.magalie.persistence.dao.ArticleDao; +import com.franciaflex.magalie.persistence.dao.BuildingDao; import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao; import com.franciaflex.magalie.persistence.dao.MagalieUserDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; @@ -8,6 +9,7 @@ import com.franciaflex.magalie.persistence.dao.SiteErrorDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; +import com.franciaflex.magalie.persistence.dao.StoreDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; /** @@ -15,6 +17,12 @@ */ public interface MagaliePersistenceContext { + void commit(); + + void rollback(); + + void clearDatabase(); + MagalieUserDao getMagalieUserDao(); StoredArticleDao getStoredArticleDao(); @@ -33,10 +41,7 @@ DeliveredRequestedArticleDao getDeliveredRequestedArticleDao(); - void commit(); + BuildingDao getBuildingDao(); - void rollback(); - - void clearDatabase(); - + StoreDao getStoreDao(); } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/BuildingDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/BuildingDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/BuildingDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,10 @@ +package com.franciaflex.magalie.persistence.dao; + +import com.franciaflex.magalie.persistence.entity.Building; + +/** + * @author bleny + */ +public interface BuildingDao extends Dao<Building> { + +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,5 +1,6 @@ package com.franciaflex.magalie.persistence.dao; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import java.util.List; @@ -9,6 +10,6 @@ */ public interface RequestedArticleDao extends Dao<RequestedArticle> { - List<RequestedArticle> findAllUndelivered(); + List<RequestedArticle> findAllUndelivered(Building building); } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoreDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoreDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoreDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,10 @@ +package com.franciaflex.magalie.persistence.dao; + +import com.franciaflex.magalie.persistence.entity.Store; + +/** + * @author bleny + */ +public interface StoreDao extends Dao<Store> { + +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoredArticleDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoredArticleDao.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoredArticleDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,12 +1,13 @@ package com.franciaflex.magalie.persistence.dao; import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.StoredArticle; import java.util.List; public interface StoredArticleDao extends Dao<StoredArticle> { - List<StoredArticle> findAllByArticle(Article article); + List<StoredArticle> findAllForArticleInBuilding(Article article, Building building); } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/BuildingJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/BuildingJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/BuildingJpaDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,18 @@ +package com.franciaflex.magalie.persistence.dao.jpa; + +import com.franciaflex.magalie.persistence.dao.BuildingDao; +import com.franciaflex.magalie.persistence.entity.Building; + +import javax.persistence.EntityManager; + +public class BuildingJpaDao extends AbstractJpaDao<Building> implements BuildingDao { + + public BuildingJpaDao(EntityManager entityManager) { + super(entityManager); + } + + @Override + protected Class<Building> getEntityClass() { + return Building.class; + } +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.persistence.dao.jpa; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import javax.persistence.EntityManager; @@ -19,7 +20,8 @@ } @Override - public List<RequestedArticle> findAllUndelivered() { + public List<RequestedArticle> findAllUndelivered(Building building) { + // XXX brendan 10/04/13 what about building ??? TypedQuery<RequestedArticle> query = entityManager.createQuery( "from RequestedArticle ra where ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra)", Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoreJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoreJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoreJpaDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,18 @@ +package com.franciaflex.magalie.persistence.dao.jpa; + +import com.franciaflex.magalie.persistence.dao.StoreDao; +import com.franciaflex.magalie.persistence.entity.Store; + +import javax.persistence.EntityManager; + +public class StoreJpaDao extends AbstractJpaDao<Store> implements StoreDao { + + public StoreJpaDao(EntityManager entityManager) { + super(entityManager); + } + + @Override + protected Class<Store> getEntityClass() { + return Store.class; + } +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java 2013-04-10 14:40:31 UTC (rev 83) @@ -2,6 +2,7 @@ import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.StoredArticle; import javax.persistence.EntityManager; @@ -20,9 +21,10 @@ } @Override - public List<StoredArticle> findAllByArticle(Article article) { - Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article"); + public List<StoredArticle> findAllForArticleInBuilding(Article article, Building building) { + Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article and sa.site.store.building = :building"); query.setParameter("article", article); + query.setParameter("building", building); List<StoredArticle> resultList = query.getResultList(); for (StoredArticle storedArticle : resultList) { entityManager.detach(storedArticle); Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Building.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Building.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Building.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,30 @@ +package com.franciaflex.magalie.persistence.entity; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class Building extends AbstractEntity { + + @Id + protected String id; + + protected String name; + + @Override + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Site.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Site.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Site.java 2013-04-10 14:40:31 UTC (rev 83) @@ -2,6 +2,7 @@ import javax.persistence.Entity; import javax.persistence.Id; +import javax.persistence.ManyToOne; @Entity public class Site extends AbstractEntity { @@ -9,7 +10,8 @@ @Id protected String id; - protected String storeCode; + @ManyToOne + protected Store store; protected String locationCode; @@ -24,18 +26,14 @@ this.id = id; } - public boolean isDriverLicenseRequired() { - return requiredAccreditationLevel == 9; + public Store getStore() { + return store; } - public String getStoreCode() { - return storeCode; + public void setStore(Store store) { + this.store = store; } - public void setStoreCode(String storeCode) { - this.storeCode = storeCode; - } - public String getLocationCode() { return locationCode; } @@ -56,4 +54,12 @@ String barcode = getStoreCode() + getLocationCode(); return barcode; } + + public boolean isDriverLicenseRequired() { + return requiredAccreditationLevel == 9; + } + + public String getStoreCode() { + return getStore().getName(); + } } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Store.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Store.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Store.java 2013-04-10 14:40:31 UTC (rev 83) @@ -0,0 +1,42 @@ +package com.franciaflex.magalie.persistence.entity; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +@Entity +public class Store extends AbstractEntity { + + @Id + protected String id; + + protected String name; + + @ManyToOne + protected Building building; + + @Override + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Building getBuilding() { + return building; + } + + public void setBuilding(Building building) { + this.building = building; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-04-10 14:40:31 UTC (rev 83) @@ -4,9 +4,11 @@ import com.esotericsoftware.yamlbeans.YamlReader; import com.franciaflex.magalie.MagalieTechnicalException; 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.RequestedArticle; import com.franciaflex.magalie.persistence.entity.Site; +import com.franciaflex.magalie.persistence.entity.Store; import com.franciaflex.magalie.persistence.entity.StoredArticle; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; @@ -29,6 +31,8 @@ throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e); } YamlReader reader = new YamlReader(yaml); + reader.getConfig().setClassTag("building", Building.class); + reader.getConfig().setClassTag("store", Store.class); reader.getConfig().setClassTag("article", Article.class); reader.getConfig().setClassTag("stored-article", StoredArticle.class); reader.getConfig().setClassTag("user", MagalieUser.class); 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-10 14:40:31 UTC (rev 83) @@ -7,6 +7,7 @@ import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; 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.Site; import com.franciaflex.magalie.persistence.entity.StorageMovement; @@ -43,34 +44,36 @@ this.serviceContext = serviceContext; } - public StorageMovementOrder bookArticle(MagalieUser magalieUser, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException { + public StorageMovementOrder bookArticle(MagalieUser magalieUser, Building building, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException { - return bookArticle(magalieUser, article, requestedQuantity, null); + return bookArticle(magalieUser, building, article, requestedQuantity, null); } public StorageMovementOrder bookArticleWithBestEffortPolicy( - MagalieUser magalieUser, Article article, double requestedQuantity, Site destinationSite) + MagalieUser magalieUser, Building building, Article article, double requestedQuantity, Site destinationSite) throws RequiredDriverLicenceException, UnavailableArticleException { - return bookArticle(magalieUser, article ,requestedQuantity, destinationSite, true); + return bookArticle(magalieUser, building, article ,requestedQuantity, destinationSite, true); } public StorageMovementOrder bookArticle( - MagalieUser magalieUser, Article article, double requestedQuantity, Site destinationSite) + MagalieUser magalieUser, Building building, Article article, double requestedQuantity, Site destinationSite) throws UnavailableArticleException, RequiredDriverLicenceException { - return bookArticle(magalieUser, article ,requestedQuantity, destinationSite, false); + return bookArticle(magalieUser, building, article ,requestedQuantity, destinationSite, false); } protected StorageMovementOrder bookArticle( - MagalieUser magalieUser, Article article, double requestedQuantity, Site destinationSite, boolean bestEffortPolicy) + MagalieUser magalieUser, Building building, Article article, double requestedQuantity, Site destinationSite, boolean bestEffortPolicy) throws UnavailableArticleException, RequiredDriverLicenceException { Preconditions.checkNotNull(magalieUser); + Preconditions.checkNotNull(building); + Preconditions.checkNotNull(article); Preconditions.checkArgument(requestedQuantity > 0.); @@ -81,7 +84,7 @@ ); } - List<StoredArticle> storedArticles = getStoredArticles(article); + List<StoredArticle> storedArticles = getStoredArticles(building, article); Ordering<StoredArticle> storedArticlesOrdering = Ordering.compound( @@ -186,8 +189,11 @@ Set<Site> sitesInOrder = storageMovementOrder.getSites(); - List<StoredArticle> storedArticles = getStoredArticles(article); + // we suppose the order concerns movement in the same building + Building building = Iterables.get(sitesInOrder, 0).getStore().getBuilding(); + List<StoredArticle> storedArticles = getStoredArticles(building, article); + for (StoredArticle storedArticle : storedArticles) { Site site = storedArticle.getSite(); @@ -211,15 +217,17 @@ } - protected List<StoredArticle> getStoredArticles(Article article) { + protected List<StoredArticle> getStoredArticles(Building building, Article article) { - StoredArticleDao storedArticleDao = serviceContext.getPersistenceContext().getStoredArticleDao(); + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); - List<StoredArticle> storedArticles = storedArticleDao.findAllByArticle(article); + StoredArticleDao storedArticleDao = persistenceContext.getStoredArticleDao(); + List<StoredArticle> storedArticles = storedArticleDao.findAllForArticleInBuilding(article, building); + // consider storage movements and compute actually available quantities - StorageMovementDao storageMovementDao = serviceContext.getPersistenceContext().getStorageMovementDao(); + StorageMovementDao storageMovementDao = persistenceContext.getStorageMovementDao(); List<StorageMovement> storageMovements = storageMovementDao.findAllByArticle(article); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-04-10 14:40:31 UTC (rev 83) @@ -2,14 +2,18 @@ import com.franciaflex.magalie.persistence.MagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.ArticleDao; +import com.franciaflex.magalie.persistence.dao.BuildingDao; import com.franciaflex.magalie.persistence.dao.MagalieUserDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; import com.franciaflex.magalie.persistence.dao.SiteDao; +import com.franciaflex.magalie.persistence.dao.StoreDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; 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.RequestedArticle; import com.franciaflex.magalie.persistence.entity.Site; +import com.franciaflex.magalie.persistence.entity.Store; import com.franciaflex.magalie.persistence.entity.StoredArticle; import com.franciaflex.magalie.services.MagalieFixtures; import com.franciaflex.magalie.services.MagalieService; @@ -73,7 +77,7 @@ } - MagalieUserDao magalieUserDao = serviceContext.getPersistenceContext().getMagalieUserDao(); + MagalieUserDao magalieUserDao = persistenceContext.getMagalieUserDao(); Collection<MagalieUser> users = fixtures.fixture("users"); @@ -83,9 +87,29 @@ } + BuildingDao buildingDao = persistenceContext.getBuildingDao(); + + Collection<Building> buildings = fixtures.fixture("buildings"); + + for (Building building : buildings) { + + buildingDao.persist(building); + + } + + StoreDao storeDao = persistenceContext.getStoreDao(); + + Collection<Store> stores = fixtures.fixture("stores"); + + for (Store store : stores) { + + storeDao.persist(store); + + } + persistenceContext.commit(); - SiteDao siteDao = serviceContext.getPersistenceContext().getSiteDao(); + SiteDao siteDao = persistenceContext.getSiteDao(); Collection<Site> sites = fixtures.fixture("sites"); @@ -97,7 +121,7 @@ persistenceContext.commit(); - ArticleDao articleDao = serviceContext.getPersistenceContext().getArticleDao(); + ArticleDao articleDao = persistenceContext.getArticleDao(); Collection<Article> articles = fixtures.fixture("articles"); @@ -109,7 +133,7 @@ persistenceContext.commit(); - StoredArticleDao storedArticleDao = serviceContext.getPersistenceContext().getStoredArticleDao(); + StoredArticleDao storedArticleDao = persistenceContext.getStoredArticleDao(); Collection<StoredArticle> storedArticles = fixtures.fixture("storedArticles"); @@ -121,7 +145,7 @@ persistenceContext.commit(); - RequestedArticleDao requestedArticleDao = serviceContext.getPersistenceContext().getRequestedArticleDao(); + RequestedArticleDao requestedArticleDao = persistenceContext.getRequestedArticleDao(); Collection<RequestedArticle> requestedArticles = fixtures.fixture("requestedArticles"); 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,10 +1,13 @@ package com.franciaflex.magalie.services.service; -import com.franciaflex.magalie.persistence.dao.SiteDao; +import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.dao.StoreDao; 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.Site; import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; +import com.franciaflex.magalie.persistence.entity.Store; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; @@ -13,6 +16,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.List; + public class FulfilKanbanService implements MagalieService { private static final Log log = LogFactory.getLog(FulfilKanbanService.class); @@ -24,10 +29,22 @@ this.serviceContext = serviceContext; } + public Store getStore(String storeId) { + + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + + StoreDao storeDao = persistenceContext.getStoreDao(); + + Store store = storeDao.findById(storeId); + + return store; + + } + public StorageMovementOrder fulfilKanbanTask( String articleBarcode, MagalieUser magalieUser, - String destinationSiteId) throws InvalidMagalieBarcodeException, + String destinationStoreId) throws InvalidMagalieBarcodeException, UnavailableArticleException, RequiredDriverLicenceException { @@ -45,13 +62,18 @@ ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class); - SiteDao siteDao = serviceContext.getPersistenceContext().getSiteDao(); + StoreDao storeDao = serviceContext.getPersistenceContext().getStoreDao(); - Site destinationSite = siteDao.findById(destinationSiteId); + Store destinationStore = storeDao.findById(destinationStoreId); + Building building = destinationStore.getBuilding(); + + Site destinationSite = getDestinationSite(destinationStore); + StorageMovementOrder storageMovementOrder = articleStorageService.bookArticleWithBestEffortPolicy( magalieUser, + building, article, quantityInKanban, destinationSite); @@ -59,4 +81,24 @@ return storageMovementOrder; } + + protected Site getDestinationSite(Store destinationStore) { + + // TODO brendan 10/04/13 how to define destination for store, something like "INC" ? + + return null; + + } + + public List<Store> getDestinationStores(Building building) { + + MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + + StoreDao storeDao = persistenceContext.getStoreDao(); + + // FIXME brendan 10/04/13 consider building + + return storeDao.findAll(); + + } } 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-10 14:40:31 UTC (rev 83) @@ -28,6 +28,7 @@ import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; @@ -60,29 +61,30 @@ public StorageMovementOrder getStorageMovementOrder( MagalieUser magalieUser, - String storeCode) { + Building building) { - List<RequestedArticle> requestedArticles = getRequestedArticles(storeCode); + List<RequestedArticle> requestedArticles = getRequestedArticles(building); Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles); StorageMovementOrder storageMovementOrder = findOrderToExecute( requestedArticlesByPriority, - magalieUser); + magalieUser, + building); return storageMovementOrder; } - protected List<RequestedArticle> getRequestedArticles(String storeCode) { + protected List<RequestedArticle> getRequestedArticles(Building building) { RequestedArticleDao requestedArticleDao = serviceContext.getPersistenceContext().getRequestedArticleDao(); - List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(); + List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building); if (log.isInfoEnabled()) { - log.info(allRequestedArticles.size() + " articles requested"); + log.info(allRequestedArticles.size() + " articles requested in building " + building.getName()); } // TODO brendan 05/04/13 consider storeCode @@ -91,7 +93,7 @@ } - protected StorageMovementOrder findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser) { + protected StorageMovementOrder findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) { ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class); @@ -118,7 +120,7 @@ try { - storageMovementOrder = articleStorageService.bookArticle(magalieUser, article, quantity, null); + storageMovementOrder = articleStorageService.bookArticle(magalieUser, building, article, quantity, null); everythingIsUnavailable = false; Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StoreService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StoreService.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StoreService.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.services.service; -import com.franciaflex.magalie.persistence.dao.SiteDao; +import com.franciaflex.magalie.persistence.dao.BuildingDao; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; @@ -15,11 +16,20 @@ this.serviceContext = serviceContext; } - public List<String> getAllStoreCodes() { + public List<Building> getAllBuildings() { - SiteDao dao = serviceContext.getPersistenceContext().getSiteDao(); + BuildingDao dao = serviceContext.getPersistenceContext().getBuildingDao(); - return dao.getAllStoreCodes(); + return dao.findAll(); } + + public Building getBuilding(String buildingId) { + + BuildingDao dao = serviceContext.getPersistenceContext().getBuildingDao(); + + return dao.findById(buildingId); + + } + } Modified: trunk/magalie-services/src/main/resources/fixtures.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-10 14:40:31 UTC (rev 83) @@ -32,94 +32,139 @@ - *pascal - *xavier +B1: + &B1 !building + id: building_1 + name: B1 + +buildings: + - *B1 + +U01: + &U01 !store + id: store_u01 + name: U01 + building: *B1 + +U02: + &U02 !store + id: store_u02 + name: U02 + building: *B1 + +U03: + &U03 !store + id: store_u03 + name: U03 + building: *B1 + +U04: + &U04 !store + id: store_u04 + name: U04 + building: *B1 + +SOM: + &SOM !store + id: store_som + name: SOM + building: *B1 + +stores: + - *U01 + - *U02 + - *U03 + - *U04 + - *SOM + site1: &site1 !site id: site1 - storeCode: U01 + store: *U01 locationCode: A01 requiredAccreditationLevel: 0 site2: &site2 !site id: site2 - storeCode: U01 + store: *U01 locationCode: B02 requiredAccreditationLevel: 9 site3: &site3 !site id: site3 - storeCode: U01 + store: *U01 locationCode: C03 requiredAccreditationLevel: 0 site4: &site4 !site id: site4 - storeCode: U01 + store: *U01 locationCode: D04 requiredAccreditationLevel: 9 site5: &site5 !site id: site5 - storeCode: U02 + store: *U02 locationCode: F01 requiredAccreditationLevel: 0 site6: &site6 !site id: site6 - storeCode: U02 + store: *U02 locationCode: G02 requiredAccreditationLevel: 0 site7: &site7 !site id: site7 - storeCode: U02 + store: *U02 locationCode: H03 requiredAccreditationLevel: 9 site8: &site8 !site id: site8 - storeCode: U04 + store: *U04 locationCode: A010 requiredAccreditationLevel: 0 site9: &site9 !site id: site9 - storeCode: SOM + store: *SOM locationCode: B10 requiredAccreditationLevel: 0 site10: &site10 !site id: site10 - storeCode: SOM + store: *SOM locationCode: B24 requiredAccreditationLevel: 0 site11: &site11 !site id: site11 - storeCode: SOM + store: *SOM locationCode: B77 requiredAccreditationLevel: 0 site12: &site12 !site id: site12 - storeCode: SOM + store: *SOM locationCode: C12 requiredAccreditationLevel: 0 site13: &site13 !site id: site13 - storeCode: U01 + store: *U01 locationCode: REC requiredAccreditationLevel: 0 Modified: trunk/magalie-services/src/main/resources/fixtures2.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-10 14:40:31 UTC (rev 83) @@ -32,38 +32,83 @@ - *cathy - *david +B1: + &B1 !building + id: building_1 + name: B1 + +buildings: + - *B1 + +U01: + &U01 !store + id: store_u01 + name: U01 + building: *B1 + +U02: + &U02 !store + id: store_u02 + name: U02 + building: *B1 + +U03: + &U03 !store + id: store_u03 + name: U03 + building: *B1 + +U04: + &U04 !store + id: store_u04 + name: U04 + building: *B1 + +SOM: + &SOM !store + id: store_som + name: SOM + building: *B1 + +stores: + - *U01 + - *U02 + - *U03 + - *U04 + - *SOM + site1: &site1 !site id: site1 - storeCode: UO1 + store: *U01 locationCode: A1 requiredAccreditationLevel: 0 site2: &site2 !site id: site2 - storeCode: UO1 + store: *U01 locationCode: B2 requiredAccreditationLevel: 9 site3: &site3 !site id: site3 - storeCode: UO1 + store: *U01 locationCode: C3 requiredAccreditationLevel: 0 site4: &site4 !site id: site4 - storeCode: UO1 + store: *U01 locationCode: D4 requiredAccreditationLevel: 9 site5: &site5 !site id: site5 - storeCode: UO2 + store: *U02 locationCode: A1 requiredAccreditationLevel: 0 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.services.service; 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.Site; import com.franciaflex.magalie.persistence.entity.StorageMovement; @@ -24,11 +25,15 @@ protected ArticleStorageService service; + protected Building building; + @Before public void setUp() throws ParseException { loadFixtures("fixtures2"); + building = fixture("B1"); + service = newService(ArticleStorageService.class); serviceContext.setDate(new Date(1363948427576l)); @@ -43,7 +48,7 @@ StorageMovementOrder storageMovementOrder; try { - storageMovementOrder = service.bookArticle(alexandre, article, 100.); + storageMovementOrder = service.bookArticle(alexandre, building, article, 100.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -65,7 +70,7 @@ StorageMovementOrder storageMovementOrder; try { - storageMovementOrder = service.bookArticle(basile, article, 70.); + storageMovementOrder = service.bookArticle(basile, building, article, 70.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -86,7 +91,7 @@ StorageMovementOrder storageMovementOrder = null; try { - storageMovementOrder = service.bookArticle(basile, article, 5.); + storageMovementOrder = service.bookArticle(basile, building, article, 5.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -113,7 +118,7 @@ StorageMovementOrder storageMovementOrder = null; try { - storageMovementOrder = service.bookArticle(alexandre, article, 50.); + storageMovementOrder = service.bookArticle(alexandre, building, article, 50.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -147,7 +152,7 @@ StorageMovementOrder storageMovementOrder = null; try { - storageMovementOrder = service.bookArticle(alexandre, article, 30.); + storageMovementOrder = service.bookArticle(alexandre, building, article, 30.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -171,7 +176,7 @@ } try { - storageMovementOrder = service.bookArticle(cathy, article, 30.); + storageMovementOrder = service.bookArticle(cathy, building, article, 30.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -206,7 +211,7 @@ siteErrorsService.reportError(site2, alexandre); try { - StorageMovementOrder storageMovementOrder = service.bookArticle(cathy, article, 30.); + StorageMovementOrder storageMovementOrder = service.bookArticle(cathy, building, article, 30.); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } @@ -237,7 +242,7 @@ Site site1 = fixture("site1"); try { - StorageMovementOrder storageMovementOrder = service.bookArticleWithBestEffortPolicy(alexandre, article, 30., null); + StorageMovementOrder storageMovementOrder = service.bookArticleWithBestEffortPolicy(alexandre, building, article, 30., null); if (log.isDebugEnabled()) { log.debug("storageMovementOrder = " + storageMovementOrder); } 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,7 +1,11 @@ package com.franciaflex.magalie.services.service; +import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.services.AbstractMagalieServiceTest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -13,6 +17,8 @@ public class RequestedArticleServiceTest extends AbstractMagalieServiceTest { + private static final Log log = LogFactory.getLog(RequestedArticleServiceTest.class); + protected RequestedArticleService service; @Before @@ -29,9 +35,9 @@ @Test public void testGetRequestedArticles() throws Exception { - String storeCode = "UO1"; + Building building = fixture("B1"); - List<RequestedArticle> requestedArticles = service.getRequestedArticles(storeCode); + List<RequestedArticle> requestedArticles = service.getRequestedArticles(building); } @@ -46,4 +52,12 @@ Assert.assertEquals(requestedArticles.size(), requestedArticlesByPriority.size()); } + + @Test + public void testName() { + + MagalieUser magalieUser = fixture("bruno"); + + + } } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,6 +1,8 @@ package com.franciaflex.magalie.web; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.Store; import java.io.Serializable; @@ -18,7 +20,8 @@ protected MagalieUser magalieUser; - protected String storeCode; + protected Building building; + private Store lastUsedDestinationStoreForKanbans; public MagalieUser getMagalieUser() { return magalieUser; @@ -28,11 +31,19 @@ this.magalieUser = magalieUser; } - public void setStoreCode(String storeCode) { - this.storeCode = storeCode; + public Building getBuilding() { + return building; } - public String getStoreCode() { - return storeCode; + public void setBuilding(Building building) { + this.building = building; } + + public Store getLastUsedDestinationStoreForKanbans() { + return lastUsedDestinationStoreForKanbans; + } + + public void setLastUsedDestinationStoreForKanbans(Store lastUsedDestinationStoreForKanbans) { + this.lastUsedDestinationStoreForKanbans = lastUsedDestinationStoreForKanbans; + } } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,5 +1,6 @@ package com.franciaflex.magalie.web.action; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.web.MagalieActionSupport; import com.franciaflex.magalie.web.MagalieSession; @@ -10,7 +11,7 @@ protected MagalieUser magalieUser; - protected String storeCode; + protected Building building; public void setSession(MagalieSession session) { this.session = session; @@ -21,7 +22,7 @@ magalieUser = session.getMagalieUser(); - storeCode = session.getStoreCode(); + building = session.getBuilding(); return SUCCESS; @@ -31,7 +32,7 @@ return magalieUser; } - public String getStoreCode() { - return storeCode; + public Building getBuilding() { + return building; } } 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,5 +1,6 @@ package com.franciaflex.magalie.web.action; +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.RequestedArticleService; @@ -36,9 +37,9 @@ MagalieUser magalieUser = session.getMagalieUser(); - String storeCode = session.getStoreCode(); + Building building = session.getBuilding(); - storageMovementOrder = service.getStorageMovementOrder(magalieUser, storeCode); + storageMovementOrder = service.getStorageMovementOrder(magalieUser, building); String result = SUCCESS; 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-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,7 +1,9 @@ package com.franciaflex.magalie.web.action; +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.persistence.entity.Store; import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException; import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException; import com.franciaflex.magalie.services.exception.UnavailableArticleException; @@ -13,7 +15,9 @@ import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; +import java.util.List; + @Results({ @Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "storageMovementOrderId", "${storageMovementOrderId}" }) }) @@ -29,10 +33,10 @@ protected StorageMovementOrder storageMovementOrder; - public void setArticleBarcode(String articleBarcode) { - this.articleBarcode = articleBarcode; - } + protected List<Store> destinationStores; + protected String destinationStoreId; + public void setService(FulfilKanbanService service) { this.service = service; } @@ -42,6 +46,43 @@ } @Override + public String input() throws Exception { + + Building building = session.getBuilding(); + + destinationStores = service.getDestinationStores(building); + + // let's help user by selecting by default the previously used destination store + + Store lastUsedDestinationStoreForKanbans = session.getLastUsedDestinationStoreForKanbans(); + + if (lastUsedDestinationStoreForKanbans != null) { + + destinationStoreId = lastUsedDestinationStoreForKanbans.getId(); + + } + + return INPUT; + + } + + public String getDestinationStoreId() { + return destinationStoreId; + } + + public List<Store> getDestinationStores() { + return destinationStores; + } + + public void setArticleBarcode(String articleBarcode) { + this.articleBarcode = articleBarcode; + } + + public void setDestinationStoreId(String destinationStoreId) { + this.destinationStoreId = destinationStoreId; + } + + @Override public String execute() { if (log.isDebugEnabled()) { @@ -50,12 +91,15 @@ MagalieUser magalieUser = session.getMagalieUser(); + Store destinationStore = service.getStore(destinationStoreId); + + // save used destination store to propose it by default on next kanban + session.setLastUsedDestinationStoreForKanbans(destinationStore); + try { - // TODO brendan 04/04/13 add destination site != null + storageMovementOrder = service.fulfilKanbanTask(articleBarcode, magalieUser, destinationStoreId); - storageMovementOrder = service.fulfilKanbanTask(articleBarcode, magalieUser, null); - } catch (InvalidMagalieBarcodeException e) { addFieldError("articleBarcode", "Le code barre n'est pas un code valide"); Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LoginAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LoginAction.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LoginAction.java 2013-04-10 14:40:31 UTC (rev 83) @@ -1,5 +1,6 @@ package com.franciaflex.magalie.web.action; +import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.services.service.MagalieUsersService; import com.franciaflex.magalie.services.service.StoreService; @@ -21,13 +22,13 @@ protected List<MagalieUser> allMagalieUsers; - protected List<String> allStoreCodes; + protected List<Building> allBuildings; protected MagalieSession session; protected String login; - protected String storeCode; + protected String buildingId; public void setMagalieUsersService(MagalieUsersService magalieUsersService) { this.magalieUsersService = magalieUsersService; @@ -45,8 +46,8 @@ this.login = login; } - public void setStoreCode(String storeCode) { - this.storeCode = storeCode; + public void setBuildingId(String buildingId) { + this.buildingId = buildingId; } @Override @@ -54,7 +55,7 @@ allMagalieUsers = magalieUsersService.getAllMagalieUsers(); - allStoreCodes = storeService.getAllStoreCodes(); + allBuildings = storeService.getAllBuildings(); return INPUT; @@ -64,16 +65,16 @@ return login; } - public String getStoreCode() { - return storeCode; + public String getBuildingId() { + return buildingId; } public List<MagalieUser> getAllMagalieUsers() { return allMagalieUsers; } - public List<String> getAllStoreCodes() { - return allStoreCodes; + public List<Building> getAllBuildings() { + return allBuildings; } @Override @@ -81,9 +82,11 @@ MagalieUser magalieUser = magalieUsersService.getMagalieUser(login); + Building building = storeService.getBuilding(buildingId); + session.setMagalieUser(magalieUser); - session.setStoreCode(storeCode); + session.setBuilding(building); return SUCCESS; Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LogoutAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LogoutAction.java 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LogoutAction.java 2013-04-10 14:40:31 UTC (rev 83) @@ -21,7 +21,7 @@ session.setMagalieUser(null); - session.setStoreCode(null); + session.setBuilding(null); return SUCCESS; Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp 2013-04-10 14:40:31 UTC (rev 83) @@ -34,8 +34,8 @@ <dl class="dl-horizontal"> <dt>Identifiant</dt> <dd><s:property value="magalieUser.name" /> (<s:property value="magalieUser.login" />)</dd> - <dt>Magasin</dt> - <dd><s:property value="storeCode" /></dd> + <dt>Bâtiment</dt> + <dd><s:property value="building.name" /></dd> </dl> </header> Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp 2013-04-10 14:40:31 UTC (rev 83) @@ -8,6 +8,14 @@ <s:form> <s:textfield name="articleBarcode" label="Article" inputAppendIcon="barcode" cssClass="input-medium" /> + <s:select label="Magasin destination" + key="destinationStoreId" + list="destinationStores" + listKey="id" + listValue="name" + required="true" + /> + <div class="btn-group"> <s:submit name="next" value="Suivant" cssClass="btn btn-primary" /> </div> Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/login-input.jsp =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/content/login-input.jsp 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/webapp/WEB-INF/content/login-input.jsp 2013-04-10 14:40:31 UTC (rev 83) @@ -15,9 +15,11 @@ required="true" /> - <s:select label="Magasin" - key="storeCode" - list="allStoreCodes" + <s:select label="Bâtiment" + key="buildingId" + list="allBuildings" + listKey="id" + listValue="name" required="true" /> Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-04-09 13:10:38 UTC (rev 82) +++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-04-10 14:40:31 UTC (rev 83) @@ -111,7 +111,7 @@ <div id="storageMovementTemplate" class="template"> <dl class="dl-horizontal"> <dt>Empl.</dt> - <dd data="originSite.locationCode"></dd> + <dd><span data="originSite.store.name"></span> <span data="originSite.locationCode"></span></dd> <dt>Prélev.</dt> <dd><span data="withdrawn">0</span> / <span data="expectedQuantity"></span> <s:property value="storageMovementTask.article.unit" /></dd> </dl>