r125 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action magalie-web/src/main/webapp/js
Author: bleny Date: 2013-04-24 15:55:31 +0200 (Wed, 24 Apr 2013) New Revision: 125 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: refs #2165 start implement confirmation for reception Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionConfirmation.java Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReceiveArticleAction.java trunk/magalie-web/src/main/webapp/js/receive-article-input.js Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionConfirmation.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionConfirmation.java (rev 0) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionConfirmation.java 2013-04-24 13:55:31 UTC (rev 125) @@ -0,0 +1,26 @@ +package com.franciaflex.magalie.services.service; + +import java.util.Map; + +public class ReceptionConfirmation { + + protected String storedArticleId; + + protected Map<String, Double> locationIdToStoredQuantities; + + public String getStoredArticleId() { + return storedArticleId; + } + + public void setStoredArticleId(String storedArticleId) { + this.storedArticleId = storedArticleId; + } + + public Map<String, Double> getLocationIdToStoredQuantities() { + return locationIdToStoredQuantities; + } + + public void setLocationIdToStoredQuantities(Map<String, Double> locationIdToStoredQuantities) { + this.locationIdToStoredQuantities = locationIdToStoredQuantities; + } +} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-04-24 13:06:30 UTC (rev 124) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-04-24 13:55:31 UTC (rev 125) @@ -1,18 +1,24 @@ package com.franciaflex.magalie.services.service; import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.dao.LocationDao; +import com.franciaflex.magalie.persistence.dao.StorageMovementDao; 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.MagalieUser; +import com.franciaflex.magalie.persistence.entity.StorageMovement; 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.Date; import java.util.List; +import java.util.Map; public class ReceptionService implements MagalieService { @@ -101,4 +107,51 @@ } + public void confirmReception(MagalieUser magalieUser, ReceptionConfirmation receptionConfirmation) { + + String storedArticleId = receptionConfirmation.getStoredArticleId(); + + MagaliePersistenceContext persistenceContext = + serviceContext.getPersistenceContext(); + + StoredArticleDao storedArticleDao = + persistenceContext.getStoredArticleDao(); + + StoredArticle storedArticle = + storedArticleDao.findById(storedArticleId); + + LocationDao locationDao = persistenceContext.getLocationDao(); + + StorageMovementDao storageMovementDao = persistenceContext.getStorageMovementDao(); + + Date now = serviceContext.getNow(); + + for (Map.Entry<String, Double> locationToStoredQuantity : receptionConfirmation.getLocationIdToStoredQuantities().entrySet()) { + + StorageMovement storageMovement = new StorageMovement(); + + Location originLocation = storedArticle.getLocation(); + + storageMovement.setOriginLocation(originLocation); + + Location destinationLocation = locationDao.findById(locationToStoredQuantity.getKey()); + + storageMovement.setDestinationLocation(destinationLocation); + + storageMovement.setMagalieUser(magalieUser); + + storageMovement.setArticle(storedArticle.getArticle()); + + storageMovement.setActualQuantity(locationToStoredQuantity.getValue()); + + storageMovement.setConfirmDate(now); + + storageMovementDao.persist(storageMovement); + + } + + persistenceContext.commit(); + + } + } Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-04-24 13:06:30 UTC (rev 124) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-04-24 13:55:31 UTC (rev 125) @@ -1,12 +1,15 @@ package com.franciaflex.magalie.services.service; +import com.franciaflex.magalie.persistence.dao.StorageMovementDao; 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.StorageMovement; 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.ImmutableMap; import com.google.common.collect.Iterables; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -95,4 +98,32 @@ Assert.assertTrue(receptionTask.getLocations().contains(fixedLocation)); } + + @Test + public void testConfirmReception() { + + List<StoredArticle> receivedArticles = + service.getReceivedArticles(building, supplier.getId()); + + StoredArticle storedArticle = + Iterables.getOnlyElement(receivedArticles); + + Location fixedLocation = Iterables.getOnlyElement(article.getFixedLocations()); + + ReceptionConfirmation receptionConfirmation = new ReceptionConfirmation(); + + receptionConfirmation.setStoredArticleId(storedArticle.getId()); + + receptionConfirmation.setLocationIdToStoredQuantities( + ImmutableMap.of(fixedLocation.getId(), storedArticle.getQuantity())); + + service.confirmReception(magalieUser, receptionConfirmation); + + StorageMovementDao storageMovementDao = serviceContext.getPersistenceContext().getStorageMovementDao(); + + List<StorageMovement> storageMovements = storageMovementDao.findAll(); + + Assert.assertEquals(1, storageMovements.size()); + + } } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReceiveArticleAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReceiveArticleAction.java 2013-04-24 13:06:30 UTC (rev 124) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReceiveArticleAction.java 2013-04-24 13:55:31 UTC (rev 125) @@ -1,24 +1,43 @@ package com.franciaflex.magalie.web.action; +import com.franciaflex.magalie.MagalieTechnicalException; +import com.franciaflex.magalie.persistence.entity.MagalieUser; +import com.franciaflex.magalie.services.service.ReceptionConfirmation; import com.franciaflex.magalie.services.service.ReceptionService; import com.franciaflex.magalie.services.service.ReceptionTask; import com.franciaflex.magalie.web.MagalieActionSupport; +import com.franciaflex.magalie.web.MagalieSession; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.json.JSONException; +import org.apache.struts2.json.JSONPopulator; import org.apache.struts2.json.JSONUtil; +import java.util.Map; + @Results({ @Result(name="success", type="redirectAction", params = { "actionName", "prepare-article-reception!input" }) }) public class ReceiveArticleAction extends MagalieActionSupport { + private static final Log log = LogFactory.getLog(ReceiveArticleAction.class); + + protected MagalieSession session; + protected ReceptionService service; protected String storedArticleId; protected ReceptionTask receptionTask; + protected ReceptionConfirmation confirmation; + + public void setSession(MagalieSession session) { + this.session = session; + } + public void setService(ReceptionService service) { this.service = service; } @@ -48,9 +67,27 @@ } + public void setConfirmation(String confirmationJson) { + try { + Map deserialize = (Map) JSONUtil.deserialize(confirmationJson); + JSONPopulator jsonPopulator = new JSONPopulator(); + confirmation = new ReceptionConfirmation(); + jsonPopulator.populateObject(confirmation, deserialize); + } catch (Throwable e) { + if (log.isErrorEnabled()) { + log.error("unable to parse confirmation, json =\n" + confirmationJson, e); + } + throw new MagalieTechnicalException(e); + } + } + @Override public String execute() { + MagalieUser magalieUser = session.getMagalieUser(); + + service.confirmReception(magalieUser, confirmation); + return SUCCESS; } Modified: trunk/magalie-web/src/main/webapp/js/receive-article-input.js =================================================================== --- trunk/magalie-web/src/main/webapp/js/receive-article-input.js 2013-04-24 13:06:30 UTC (rev 124) +++ trunk/magalie-web/src/main/webapp/js/receive-article-input.js 2013-04-24 13:55:31 UTC (rev 125) @@ -55,20 +55,18 @@ } model.getConfirmation = function() { - var locationsIdsToActualQuantities = {}; - var locationInErrorIds = []; - $.each(model.storageMovements, function(key, storageMovement) { - if (storageMovement.used) { - locationsIdsToActualQuantities[storageMovement.originLocation.id] = storageMovement.withdrawn; - if (storageMovement.defect) { - locationInErrorIds.push(storageMovement.originLocation.id); - } + if (this.remainingQuantity() > 0.) { + throw new Error("Tout n'a pas été stocké"); + } + var locationIdToStoredQuantities = {}; + $.each(model.locations, function(key, location) { + if (location.used) { + locationIdToStoredQuantities[location.id] = location.stored; } }); var confirmation = { - storageMovementOrderId: this.storageMovementOrderId, - locationsIdsToActualQuantities: locationsIdsToActualQuantities, - locationInErrorIds: locationInErrorIds + storedArticleId: this.storedArticle.id, + locationIdToStoredQuantities: locationIdToStoredQuantities }; return confirmation; }
participants (1)
-
bleny@users.forge.codelutin.com