r121 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/main/resources magalie-services/src/test/java/com/franciaflex/magalie/services/service
Author: bleny Date: 2013-04-24 11:42:41 +0200 (Wed, 24 Apr 2013) New Revision: 121 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: refs #2165 introduce ReceptionService Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/SupplierDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/SupplierJpaDao.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.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/JpaMagaliePersistenceContext.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.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/ArticleJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java trunk/magalie-services/src/main/resources/fixtures.yaml 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-24 09:42:41 UTC (rev 121) @@ -35,6 +35,7 @@ import com.franciaflex.magalie.persistence.dao.RequestedListDao; 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.WarehouseDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.jpa.ArticleJpaDao; @@ -49,6 +50,7 @@ import com.franciaflex.magalie.persistence.dao.jpa.RequestedListJpaDao; 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.WarehouseJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StoredArticleJpaDao; @@ -159,4 +161,9 @@ public KanbanDao getKanbanDao() { return new KanbanJpaDao(entityManager); } + + @Override + public SupplierDao getSupplierDao() { + return new SupplierJpaDao(entityManager); + } } 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-04-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java 2013-04-24 09:42:41 UTC (rev 121) @@ -98,4 +98,7 @@ return "SANS"; } + public static String codeForReceptionLocations() { + return "REC"; + } } 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-24 09:42:41 UTC (rev 121) @@ -36,6 +36,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.SupplierDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; /** @@ -77,4 +78,6 @@ KanbanDao getKanbanDao(); + SupplierDao getSupplierDao(); + } 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StoredArticleDao.java 2013-04-24 09:42:41 UTC (rev 121) @@ -33,4 +33,6 @@ List<StoredArticle> findAllForArticleInBuilding(Article article, Building building); + List<StoredArticle> findAllReceivedForSupplier(String supplierId); + } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/SupplierDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/SupplierDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/SupplierDao.java 2013-04-24 09:42:41 UTC (rev 121) @@ -0,0 +1,15 @@ +package com.franciaflex.magalie.persistence.dao; + +import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.Supplier; + +import java.util.List; + +/** + * @author bleny + */ +public interface SupplierDao extends Dao<Supplier> { + + List<Supplier> findAllWithReceivedArticles(Building building); + +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/ArticleJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/ArticleJpaDao.java 2013-04-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/ArticleJpaDao.java 2013-04-24 09:42:41 UTC (rev 121) @@ -25,10 +25,9 @@ import com.franciaflex.magalie.persistence.dao.ArticleDao; import com.franciaflex.magalie.persistence.entity.Article; -import com.google.common.collect.Iterables; import javax.persistence.EntityManager; -import javax.persistence.Query; +import javax.persistence.TypedQuery; public class ArticleJpaDao extends AbstractJpaDao<Article> implements ArticleDao { @@ -43,13 +42,8 @@ @Override public Article findByCode(String articleCode) { - Query query = entityManager.createQuery("from Article a where a.code = :code"); + TypedQuery<Article> query = createQuery("from Article a where a.code = :code"); query.setParameter("code", articleCode); - Article article = (Article) - Iterables.getOnlyElement( - query.getResultList(), - null - ); - return article; + return findUniqueOrNull(query); } } 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java 2013-04-24 09:42:41 UTC (rev 121) @@ -23,6 +23,7 @@ * #L% */ +import com.franciaflex.magalie.persistence.Locations; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; @@ -30,6 +31,7 @@ import javax.persistence.EntityManager; import javax.persistence.Query; +import javax.persistence.TypedQuery; import java.util.List; public class StoredArticleJpaDao extends AbstractJpaDao<StoredArticle> implements StoredArticleDao { @@ -54,4 +56,12 @@ } return resultList; } + + @Override + public List<StoredArticle> findAllReceivedForSupplier(String supplierId) { + TypedQuery<StoredArticle> query = createQuery("from StoredArticle sa where sa.location.code = :code and sa.article.supplier.id = :supplierId"); + query.setParameter("supplierId", supplierId); + query.setParameter("code", Locations.codeForReceptionLocations()); + return findAll(query); + } } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/SupplierJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/SupplierJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/SupplierJpaDao.java 2013-04-24 09:42:41 UTC (rev 121) @@ -0,0 +1,31 @@ +package com.franciaflex.magalie.persistence.dao.jpa; + +import com.franciaflex.magalie.persistence.Locations; +import com.franciaflex.magalie.persistence.dao.SupplierDao; +import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.Supplier; + +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import java.util.List; + +public class SupplierJpaDao extends AbstractJpaDao<Supplier> implements SupplierDao { + + public SupplierJpaDao(EntityManager entityManager) { + super(entityManager); + } + + @Override + protected Class<Supplier> getEntityClass() { + return Supplier.class; + } + + @Override + public List<Supplier> findAllWithReceivedArticles(Building building) { + TypedQuery<Supplier> query = createQuery("select sa.article.supplier from StoredArticle sa where sa.location.code = :code and sa.location.warehouse.building = :building"); + query.setParameter("building", building); + query.setParameter("code", Locations.codeForReceptionLocations()); + return findAll(query); + } + +} 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-04-24 09:42:41 UTC (rev 121) @@ -29,12 +29,13 @@ import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.Kanban; +import com.franciaflex.magalie.persistence.entity.Location; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; -import com.franciaflex.magalie.persistence.entity.Location; import com.franciaflex.magalie.persistence.entity.RequestedList; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.persistence.entity.Supplier; import com.franciaflex.magalie.persistence.entity.Warehouse; -import com.franciaflex.magalie.persistence.entity.StoredArticle; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; @@ -58,6 +59,7 @@ YamlReader reader = new YamlReader(yaml); reader.getConfig().setClassTag("building", Building.class); reader.getConfig().setClassTag("warehouse", Warehouse.class); + reader.getConfig().setClassTag("supplier", Supplier.class); reader.getConfig().setClassTag("article", Article.class); reader.getConfig().setClassTag("kanban", Kanban.class); reader.getConfig().setClassTag("stored-article", StoredArticle.class); 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-23 16:17:29 UTC (rev 120) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-04-24 09:42:41 UTC (rev 121) @@ -32,6 +32,7 @@ import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; import com.franciaflex.magalie.persistence.dao.RequestedListDao; import com.franciaflex.magalie.persistence.dao.StoredArticleDao; +import com.franciaflex.magalie.persistence.dao.SupplierDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; @@ -41,6 +42,7 @@ import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.persistence.entity.RequestedList; import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.persistence.entity.Supplier; import com.franciaflex.magalie.persistence.entity.Warehouse; import com.franciaflex.magalie.services.MagalieFixtures; import com.franciaflex.magalie.services.MagalieService; @@ -148,6 +150,18 @@ persistenceContext.commit(); + SupplierDao supplierDao = persistenceContext.getSupplierDao(); + + Collection<Supplier> suppliers = fixtures.fixture("suppliers"); + + for (Supplier supplier : suppliers) { + + supplierDao.persist(supplier); + + } + + persistenceContext.commit(); + ArticleDao articleDao = persistenceContext.getArticleDao(); Collection<Article> articles = fixtures.fixture("articles"); Added: 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 (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-04-24 09:42:41 UTC (rev 121) @@ -0,0 +1,95 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.dao.StoredArticleDao; +import com.franciaflex.magalie.persistence.dao.SupplierDao; +import com.franciaflex.magalie.persistence.entity.Article; +import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.Location; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.persistence.entity.Supplier; +import com.franciaflex.magalie.services.MagalieService; +import com.franciaflex.magalie.services.MagalieServiceContext; +import com.google.common.collect.Lists; + +import java.util.List; + +public class ReceptionService implements MagalieService { + + protected MagalieServiceContext serviceContext; + + @Override + public void setServiceContext(MagalieServiceContext serviceContext) { + this.serviceContext = serviceContext; + } + + public List<Supplier> getReceivedSuppliers(Building building) { + + MagaliePersistenceContext persistenceContext = + serviceContext.getPersistenceContext(); + + SupplierDao supplierDao = persistenceContext.getSupplierDao(); + + List<Supplier> suppliers = + supplierDao.findAllWithReceivedArticles(building); + + return suppliers; + + } + + public List<StoredArticle> getReceivedArticles(String supplierId) { + + MagaliePersistenceContext persistenceContext = + serviceContext.getPersistenceContext(); + + StoredArticleDao dao = + persistenceContext.getStoredArticleDao(); + + List<StoredArticle> receivedArticles = + dao.findAllReceivedForSupplier(supplierId); + + return receivedArticles; + + } + + public ReceptionTask getReceptionTask(String storedArticleId) { + + MagaliePersistenceContext persistenceContext = + serviceContext.getPersistenceContext(); + + StoredArticleDao storedArticleDao = persistenceContext.getStoredArticleDao(); + + StoredArticle storedArticle = + storedArticleDao.findById(storedArticleId); + + Article article = storedArticle.getArticle(); + + Building building = storedArticle.getLocation().getWarehouse().getBuilding(); + + List<Location> locations = findLocationsToReceiveArticle(article, building); + + ReceptionTask receptionTask = new ReceptionTask(storedArticle, locations); + + return receptionTask; + + } + + protected List<Location> findLocationsToReceiveArticle(Article article, Building building) { + + List<Location> locations = Lists.newLinkedList(); + + if (article.getFixedLocations() != null) { + + locations.addAll(article.getFixedLocations()); + + } + + // TODO brendan 24/04/13 add already stored locations + + // TODO brendan 24/04/13 add other suggested location + + return locations; + + } + +} Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java 2013-04-24 09:42:41 UTC (rev 121) @@ -0,0 +1,26 @@ +package com.franciaflex.magalie.services.service; + +import com.franciaflex.magalie.persistence.entity.Location; +import com.franciaflex.magalie.persistence.entity.StoredArticle; + +import java.util.List; + +public class ReceptionTask { + + protected StoredArticle storedArticle; + + protected List<Location> locations; + + public ReceptionTask(StoredArticle storedArticle, List<Location> locations) { + this.storedArticle = storedArticle; + this.locations = locations; + } + + public StoredArticle getStoredArticle() { + return storedArticle; + } + + public List<Location> getLocations() { + return locations; + } +} Modified: trunk/magalie-services/src/main/resources/fixtures.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-23 16:17:29 UTC (rev 120) +++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-24 09:42:41 UTC (rev 121) @@ -188,6 +188,48 @@ code: SANS requiredAccreditationLevel: 0 +locationRecU01: + &locationRecU01 !location + id: locationRecU01 + warehouse: *U01 + code: REC + requiredAccreditationLevel: 0 + +locationRecU02: + &locationRecU02 !location + id: locationRecU02 + warehouse: *U02 + code: REC + requiredAccreditationLevel: 0 + +locationRecU03: + &locationRecU03 !location + id: locationRecU03 + warehouse: *U03 + code: REC + requiredAccreditationLevel: 0 + +locationRecU04: + &locationRecU04 !location + id: locationRecU04 + warehouse: *U04 + code: REC + requiredAccreditationLevel: 0 + +locationRecSOM: + &locationRecSOM !location + id: locationRecSOM + warehouse: *SOM + code: REC + requiredAccreditationLevel: 0 + +locationRecB01: + &locationRecB01 !location + id: locationRecB01 + warehouse: *B01 + code: REC + requiredAccreditationLevel: 0 + locations: - *location1 - *location2 @@ -203,7 +245,27 @@ - *location12 - *location13 - *location14 + - *locationRecU01 + - *locationRecU02 + - *locationRecU03 + - *locationRecU04 + - *locationRecSOM + - *locationRecB01 +supplier1: + &supplier1 !supplier + id: supplier1 + name: Somfy + +supplier2: + &supplier2 !supplier + id: supplier2 + name: Soliris + +suppliers: + - *supplier1 + - *supplier2 + article1: &article1 !article id: article1 @@ -262,6 +324,7 @@ unit: PCE description: Ensemble SOLIRIS UNO fixedLocationsFirst: false + supplier: *supplier2 articles: - *article1 @@ -406,6 +469,13 @@ location: *location3 quantity: 70 +storedArticleRec1: + &storedArticleRec1 !stored-article + id: storedArticleRec1 + article: *article6 + location: *locationRecU01 + quantity: 10 + storedArticles: - *storedArticle1 - *storedArticle2 @@ -420,6 +490,7 @@ - *storedArticle11 - *storedArticle12 - *storedArticle13 + - *storedArticleRec1 storedArticlesForArticle1: - *storedArticle1 Added: 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 (rev 0) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-04-24 09:42:41 UTC (rev 121) @@ -0,0 +1,94 @@ +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.Location; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.persistence.entity.StoredArticle; +import com.franciaflex.magalie.persistence.entity.Supplier; +import com.franciaflex.magalie.services.AbstractMagalieServiceTest; +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 ReceptionServiceTest extends AbstractMagalieServiceTest { + + private static final Log log = LogFactory.getLog(ReceptionServiceTest.class); + + protected ReceptionService service; + + protected MagalieUser magalieUser; + + protected Building building; + + protected Supplier supplier; + + protected Article article; + + @Before + public void setUp() throws ParseException { + + loadFixtures("fixtures"); + + service = newService(ReceptionService.class); + + serviceContext.setDate(new Date(1363948427576l)); + + magalieUser = fixture("bruno"); + + building = fixture("B1"); + + supplier = fixture("supplier2"); + + article = fixture("article6"); + + } + + @Test + public void testGetSuppliers() { + + List<Supplier> suppliers = service.getReceivedSuppliers(building); + + Assert.assertEquals(1, suppliers.size()); + + Assert.assertEquals(supplier, suppliers.get(0)); + + } + + @Test + public void testGetArticlesForSupplier() { + + List<StoredArticle> receivedArticles = + service.getReceivedArticles(supplier.getId()); + + Assert.assertEquals(1, receivedArticles.size()); + + Assert.assertEquals(article, receivedArticles.get(0).getArticle()); + + } + + @Test + public void testGetReceptionTask() { + + List<StoredArticle> receivedArticles = + service.getReceivedArticles(supplier.getId()); + + StoredArticle onlyElement = + Iterables.getOnlyElement(receivedArticles); + + ReceptionTask receptionTask = + service.getReceptionTask(onlyElement.getId()); + + Location fixedLocation = Iterables.getOnlyElement(article.getFixedLocations()); + + Assert.assertTrue(receptionTask.getLocations().contains(fixedLocation)); + + } +}
participants (1)
-
bleny@users.forge.codelutin.com