Franciaflex-magalie-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 438 discussions
r135 - trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 16:47:55 +0200 (Thu, 25 Apr 2013)
New Revision: 135
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
rename Location#occupied to full
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Location.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Location.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Location.java 2013-04-25 14:38:56 UTC (rev 134)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/Location.java 2013-04-25 14:47:55 UTC (rev 135)
@@ -40,7 +40,7 @@
protected int requiredAccreditationLevel;
- protected boolean occupied;
+ protected boolean full;
@Override
public String getId() {
@@ -84,11 +84,11 @@
return requiredAccreditationLevel == 9;
}
- public boolean isOccupied() {
- return occupied;
+ public boolean isFull() {
+ return full;
}
- public void setOccupied(boolean occupied) {
- this.occupied = occupied;
+ public void setFull(boolean full) {
+ this.full = full;
}
}
1
0
25 Apr '13
Author: bleny
Date: 2013-04-25 16:38:56 +0200 (Thu, 25 Apr 2013)
New Revision: 134
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2162 introduce list types
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/RequestedListDao.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/RequestedListJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.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/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
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-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -35,7 +35,7 @@
*/
public interface RequestedArticleDao extends Dao<RequestedArticle> {
- List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo);
+ List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo, String listType);
List<RequestedArticle> findAll(RequestedList requestedList);
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -25,9 +25,13 @@
import com.franciaflex.magalie.persistence.entity.RequestedList;
+import java.util.List;
+
/**
* @author bleny
*/
public interface RequestedListDao extends Dao<RequestedList> {
+ List<String> findAllDistinctListTypes();
+
}
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-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -46,13 +46,15 @@
}
@Override
- public List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo) {
+ public List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo, String listType) {
TypedQuery<RequestedArticle> query = createQuery(
"from RequestedArticle ra where "
+ " ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra) "
+ " and ra.requestedList.building = :building "
+ + " and ra.requestedList.listType = :listType "
+ " and ra.requestedList not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :complete or drl.status = :affected and drl.affectedTo != :affectedTo)");
query.setParameter("building", building);
+ query.setParameter("listType", listType);
query.setParameter("complete", DeliveredRequestedListStatus.COMPLETE);
query.setParameter("affected", DeliveredRequestedListStatus.AFFECTED);
query.setParameter("affectedTo", affectedTo);
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -27,6 +27,8 @@
import com.franciaflex.magalie.persistence.entity.RequestedList;
import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import java.util.List;
public class RequestedListJpaDao extends AbstractJpaDao<RequestedList> implements RequestedListDao {
@@ -39,4 +41,9 @@
return RequestedList.class;
}
+ @Override
+ public List<String> findAllDistinctListTypes() {
+ TypedQuery<String> query = entityManager.createQuery("select distinct rl.listType from RequestedList rl", String.class);
+ return query.getResultList();
+ }
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -43,6 +43,8 @@
protected boolean urgent;
+ protected String listType;
+
@Override
public String getId() {
return id;
@@ -83,4 +85,12 @@
public void setBuilding(Building building) {
this.building = building;
}
+
+ public String getListType() {
+ return listType;
+ }
+
+ public void setListType(String listType) {
+ this.listType = listType;
+ }
}
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-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -29,6 +29,7 @@
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao;
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao;
import com.franciaflex.magalie.persistence.dao.RequestedArticleDao;
+import com.franciaflex.magalie.persistence.dao.RequestedListDao;
import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle;
@@ -62,9 +63,9 @@
this.serviceContext = serviceContext;
}
- public FindOrderToExecuteResult findOrderToExecute(MagalieUser magalieUser, Building building) {
+ public FindOrderToExecuteResult findOrderToExecute(MagalieUser magalieUser, Building building, String listType) {
- List<RequestedArticle> requestedArticles = getRequestedArticles(building, magalieUser);
+ List<RequestedArticle> requestedArticles = getRequestedArticles(building, magalieUser, listType);
Set<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles, magalieUser);
@@ -78,11 +79,11 @@
}
- protected List<RequestedArticle> getRequestedArticles(Building building, MagalieUser magalieUser) {
+ protected List<RequestedArticle> getRequestedArticles(Building building, MagalieUser magalieUser, String listType) {
RequestedArticleDao requestedArticleDao = serviceContext.getPersistenceContext().getRequestedArticleDao();
- List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building, magalieUser);
+ List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building, magalieUser, listType);
if (log.isInfoEnabled()) {
log.info(allRequestedArticles.size() + " articles requested in building " + building.getCode());
@@ -407,4 +408,35 @@
}
+ public RequestedList getAffectationForUser(MagalieUser magalieUser) {
+
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ DeliveredRequestedListDao dao = persistenceContext.getDeliveredRequestedListDao();
+
+ DeliveredRequestedList deliveredRequestedList = dao.findByAffectedTo(magalieUser);
+
+ RequestedList requestedList = null;
+
+ if (deliveredRequestedList != null) {
+
+ requestedList = deliveredRequestedList.getRequestedList();
+
+ }
+
+ return requestedList;
+
+ }
+
+ public List<String> getListTypes() {
+
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ RequestedListDao dao = persistenceContext.getRequestedListDao();
+
+ List<String> allDistinctListTypes = dao.findAllDistinctListTypes();
+
+ return allDistinctListTypes;
+
+ }
}
Modified: trunk/magalie-services/src/main/resources/fixtures.yaml
===================================================================
--- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-25 14:38:56 UTC (rev 134)
@@ -522,6 +522,7 @@
requestDate: 2013-04-08 12:00:00
urgent: true
building: *B1
+ listType: LOT DE FAB
requestedList2:
&requestedList2 !requested-list
@@ -530,6 +531,7 @@
requestDate: 2013-04-08 12:00:00
urgent: false
building: *B1
+ listType: LOT DE FAB
requestedLists:
- *requestedList1
Modified: trunk/magalie-services/src/main/resources/fixtures2.yaml
===================================================================
--- trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-25 14:38:56 UTC (rev 134)
@@ -241,6 +241,7 @@
requestDate: 2013-04-08 12:00:00
urgent: true
building: *B1
+ listType: LOT DE FAB
requestedList2:
&requestedList2 !requested-list
@@ -249,6 +250,7 @@
requestDate: 2013-04-08 12:00:00
urgent: false
building: *B1
+ listType: LOT DE FAB
requestedLists:
- *requestedList1
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-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -51,6 +51,8 @@
protected Building building;
+ protected static final String LIST_TYPE = "LOT DE FAB";
+
@Before
public void setUp() throws ParseException {
@@ -68,7 +70,7 @@
@Test
public void testGetRequestedArticles() {
- List<RequestedArticle> requestedArticles = service.getRequestedArticles(building, magalieUser);
+ List<RequestedArticle> requestedArticles = service.getRequestedArticles(building, magalieUser, LIST_TYPE);
for (RequestedArticle requestedArticle : requestedArticles) {
@@ -114,7 +116,7 @@
@Test
public void testFindOrderRequestedArticles() {
- FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(magalieUser, building);
+ FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Assert.assertFalse(orderToExecute.isNothingToDo());
Assert.assertFalse(orderToExecute.isEverythingUnavailable());
@@ -179,7 +181,7 @@
// user is affected to first list, must know new affectation
{
- orderToExecute = service.findOrderToExecute(magalieUser, building);
+ orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
Assert.assertNull(orderToExecute.getOldAffectation());
@@ -189,7 +191,7 @@
// continuing first list, user affectation not changed
{
- orderToExecute = service.findOrderToExecute(magalieUser, building);
+ orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
Assert.assertNull(orderToExecute.getOldAffectation());
@@ -199,7 +201,7 @@
// first list is finished, must know old affectation and new affectation
{
- orderToExecute = service.findOrderToExecute(magalieUser, building);
+ orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
Assert.assertNotNull(orderToExecute.getOldAffectation());
@@ -211,7 +213,7 @@
}
{
- orderToExecute = service.findOrderToExecute(magalieUser, building);
+ orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
Assert.assertNull(orderToExecute.getOldAffectation());
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-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-25 14:38:56 UTC (rev 134)
@@ -26,17 +26,21 @@
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.service.FindOrderToExecuteResult;
import com.franciaflex.magalie.services.service.RequestedArticleService;
import com.franciaflex.magalie.web.Activity;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
+import com.google.common.base.Preconditions;
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 java.util.List;
+
@Results({
@Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "storageMovementOrderId", "${storageMovementOrderId}" })
})
@@ -50,6 +54,12 @@
protected StorageMovementOrder storageMovementOrder;
+ protected RequestedList requestedList;
+
+ protected List<String> listTypes;
+
+ protected String listType;
+
public void setService(RequestedArticleService service) {
this.service = service;
}
@@ -59,8 +69,35 @@
}
@Override
+ public String input() {
+
+ MagalieUser magalieUser = session.getMagalieUser();
+
+ requestedList = service.getAffectationForUser(magalieUser);
+
+ listTypes = service.getListTypes();
+
+ return INPUT;
+
+ }
+
+ public RequestedList getRequestedList() {
+ return requestedList;
+ }
+
+ public List<String> getListTypes() {
+ return listTypes;
+ }
+
+ public void setListType(String listType) {
+ this.listType = listType;
+ }
+
+ @Override
public String execute() {
+ Preconditions.checkState(listType != null);
+
session.setActivity(Activity.REQUESTED_LISTS);
MagalieUser magalieUser = session.getMagalieUser();
@@ -68,7 +105,7 @@
Building building = session.getBuilding();
FindOrderToExecuteResult findOrderToExecuteResult =
- service.findOrderToExecute(magalieUser, building);
+ service.findOrderToExecute(magalieUser, building, listType);
String result;
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-04-25 13:30:44 UTC (rev 133)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-04-25 14:38:56 UTC (rev 134)
@@ -23,8 +23,25 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
-<s:url namespace="/" action="deliver-requested-article" id="deliverRequestedArticleUrl"/>
+<s:if test="requestedList">
+ <p>
+ Vous êtes affecté à la liste <s:property value="requestedList.code" />
+ </p>
+ <s:url namespace="/" action="deliver-requested-article" id="deliverRequestedArticleUrl">
+ <s:param name="listType" value="%{requestedList.listType}" />
+ </s:url>
+ <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block">Demander un article à servir</s:a>
+</s:if>
+<s:else>
+ <s:iterator value="listTypes" var="listType">
+ <s:url namespace="/" action="deliver-requested-article" id="deliverRequestedArticleUrl">
+ <s:param name="listType" value="#listType" />
+ </s:url>
+ <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block">
+ Commencer à traiter une liste « <s:property value="#listType" /> »
+ </s:a>
+ </s:iterator>
+</s:else>
+
<s:url namespace="/" action="remove-user-affectation" id="removeUserAffectationUrl"/>
-
-<s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block">Demander un article à servir</s:a>
<s:a href="%{removeUserAffectationUrl}" cssClass="btn btn-block">Changer d'activité</s:a>
1
0
r133 - trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 15:30:44 +0200 (Thu, 25 Apr 2013)
New Revision: 133
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add todo
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
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-25 12:57:51 UTC (rev 132)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-25 13:30:44 UTC (rev 133)
@@ -370,6 +370,8 @@
deliveredRequestedList.setStatus(DeliveredRequestedListStatus.COMPLETE);
+ // TODO brendan 25/04/13 notify user
+
}
}
1
0
r132 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 14:57:51 +0200 (Thu, 25 Apr 2013)
New Revision: 132
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix enormous problem using priorityQueue#iterator, replace by treeSets
Added:
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java
Removed:
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.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/RequestedArticleService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java 2013-04-25 11:08:52 UTC (rev 131)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StoredArticles.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -24,8 +24,8 @@
*/
import com.franciaflex.magalie.persistence.entity.Article;
+import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.StoredArticle;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
@@ -40,7 +40,7 @@
public class StoredArticles {
/**
- * Put fixed sites for given article first, or last according to the value of
+ * Put fixed sites for given article first, or ignore it according to the value of
* {@link com.franciaflex.magalie.persistence.entity.Article#isFixedLocationsFirst()}
*/
protected static class FixedLocationForArticle implements Comparator<StoredArticle> {
@@ -51,7 +51,13 @@
Preconditions.checkArgument(article.equals(y.getArticle()));
boolean xIsInFixedLocation = article.isFixedLocation(x.getLocation());
boolean yIsInFixedLocation = article.isFixedLocation(y.getLocation());
- return BooleanComparator.getBooleanComparator( ! article.isFixedLocationsFirst()).compare(xIsInFixedLocation, yIsInFixedLocation);
+ int compare;
+ if (article.isFixedLocationsFirst()) {
+ compare = BooleanComparator.getTrueFirstComparator().compare(xIsInFixedLocation, yIsInFixedLocation);
+ } else {
+ compare = 0;
+ }
+ return compare;
}
}
@@ -60,7 +66,8 @@
@Override
public int compare(StoredArticle o1, StoredArticle o2) {
- return Double.compare(o1.getQuantity(), o2.getQuantity());
+ int compare = Double.compare(o2.getQuantity(), o1.getQuantity());
+ return compare;
}
}
@@ -110,7 +117,7 @@
}
public static Comparator<StoredArticle> locationWithLowestQuantityFirstComparator() {
- return Ordering.from(new LocationWithHighestQuantityFirst()).reverse();
+ return Ordering.from(locationWithHighestQuantityFirst()).reverse();
}
@@ -119,7 +126,7 @@
}
public static Comparator<StoredArticle> fixedLocationForArticleComparator() {
- return Ordering.from(new FixedLocationForArticle()).reverse();
+ return new FixedLocationForArticle();
}
public static Function<StoredArticle, Location> getLocationFunction() {
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 11:08:52 UTC (rev 131)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -48,6 +48,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -56,8 +57,6 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.PriorityQueue;
-import java.util.Queue;
import java.util.Set;
public class ArticleStorageService implements MagalieService {
@@ -90,7 +89,7 @@
List<StoredArticle> storedArticles = getStoredArticles(bookArticleRequest.getBuilding(), article);
- Queue<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles);
+ Set<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles);
BookArticleResult bookArticleResult = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles);
@@ -163,7 +162,7 @@
}
- protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) {
+ protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Set<StoredArticle> sortedStoredArticles) {
Article article = bookArticleRequest.getArticle();
@@ -252,29 +251,20 @@
}
- protected Queue<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) {
+ protected Set<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) {
- Queue<StoredArticle> storedArticlesByPriority = Lists.newLinkedList();
+ Ordering<StoredArticle> orderingByPriority =
+ Ordering.compound(
+ Lists.newArrayList(
+ StoredArticles.fixedLocationForArticleComparator(),
+ StoredArticles.locationWithLowestQuantityFirstComparator()
+ //StoredArticles.articleStoredInLocationsRequiringDriverLicenseFirstComparator()
+ )
+ );
- if ( ! storedArticles.isEmpty()) {
+ Set<StoredArticle> storedArticlesByPriority =
+ Sets.newTreeSet(orderingByPriority);
- Ordering<StoredArticle> orderingByPriority =
- Ordering.compound(
- Lists.newArrayList(
- StoredArticles.fixedLocationForArticleComparator(),
- StoredArticles.locationWithLowestQuantityFirstComparator(),
- StoredArticles.articleStoredInLocationsRequiringDriverLicenseFirstComparator()
- )
- );
-
- storedArticlesByPriority =
- new PriorityQueue<StoredArticle>(
- storedArticles.size(),
- orderingByPriority
- );
-
- }
-
storedArticlesByPriority.addAll(storedArticles);
return storedArticlesByPriority;
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-25 11:08:52 UTC (rev 131)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -43,14 +43,14 @@
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
-import java.util.PriorityQueue;
-import java.util.Queue;
+import java.util.Set;
public class RequestedArticleService implements MagalieService {
@@ -66,7 +66,7 @@
List<RequestedArticle> requestedArticles = getRequestedArticles(building, magalieUser);
- Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles, magalieUser);
+ Set<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles, magalieUser);
FindOrderToExecuteResult findOrderToExecuteResult =
findOrderToExecute(
@@ -92,7 +92,7 @@
}
- protected FindOrderToExecuteResult findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
+ protected FindOrderToExecuteResult findOrderToExecute(Set<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
ArticleStorageService articleStorageService =
serviceContext.newService(ArticleStorageService.class);
@@ -281,39 +281,31 @@
}
- protected Queue<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
+ protected Set<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
- PriorityQueue<RequestedArticle> requestedArticles = new PriorityQueue<RequestedArticle>();
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- if ( ! requests.isEmpty()) {
+ DeliveredRequestedListDao deliveredRequestedListDao = persistenceContext.getDeliveredRequestedListDao();
- MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ DeliveredRequestedList affectedDeliveredRequestedList =
+ deliveredRequestedListDao.findByAffectedTo(magalieUser);
- DeliveredRequestedListDao deliveredRequestedListDao = persistenceContext.getDeliveredRequestedListDao();
+ RequestedList affectedRequestedList = null;
- DeliveredRequestedList affectedDeliveredRequestedList =
- deliveredRequestedListDao.findByAffectedTo(magalieUser);
+ if (affectedDeliveredRequestedList != null) {
- RequestedList affectedRequestedList = null;
+ affectedRequestedList = affectedDeliveredRequestedList.getRequestedList();
- if (affectedDeliveredRequestedList != null) {
+ }
- affectedRequestedList = affectedDeliveredRequestedList.getRequestedList();
+ Comparator<RequestedArticle> priorityComparator =
+ RequestedArticles.comparator(requests, affectedRequestedList);
- }
+ Set<RequestedArticle> requestedArticles =
+ Sets.newTreeSet(priorityComparator);
- Comparator<RequestedArticle> priorityComparator =
- RequestedArticles.comparator(requests, affectedRequestedList);
+ requestedArticles.addAll(requests);
- requestedArticles =
- new PriorityQueue<RequestedArticle>(
- requests.size(),
- priorityComparator);
-
- requestedArticles.addAll(requests);
-
- }
-
return requestedArticles;
}
Deleted: 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-25 11:08:52 UTC (rev 131)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -1,232 +0,0 @@
-package com.franciaflex.magalie.services.service;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-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.StorageMovementOrder;
-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;
-
-public class ArticleStorageServiceTest extends AbstractMagalieServiceTest {
-
- private static final Log log = LogFactory.getLog(ArticleStorageServiceTest.class);
-
- protected ArticleStorageService service;
-
- protected Building building;
-
- protected Location destinationLocation;
-
- @Before
- public void setUp() throws ParseException {
-
- loadFixtures("fixtures2");
-
- building = fixture("B1");
-
- destinationLocation = fixture("location5");
-
- service = newService(ArticleStorageService.class);
-
- serviceContext.setDate(new Date(1363948427576l));
-
- }
-
- @Test
- public void testThrowUnavailableArticle() throws Exception {
-
- MagalieUser alexandre = fixture("alexandre");
- Article article = fixture("article1");
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 100., destinationLocation, false);
-
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
-
- Assert.assertFalse(bookArticleResult.isSuccess());
-
- Assert.assertTrue(bookArticleResult.isArticleUnavailable());
-
- }
-
- @Test
- public void testThrowRequiredDriverLicenceException() throws Exception {
-
- MagalieUser basile = fixture("basile");
- Article article = fixture("article1");
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 70., destinationLocation, false);
-
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
-
- Assert.assertFalse(bookArticleResult.isSuccess());
- Assert.assertTrue(bookArticleResult.isArticleInaccessible());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
-
- }
-
- @Test
- public void testWithdrawArticleWithoutDriverLicense() throws Exception {
-
- MagalieUser basile = fixture("basile");
- Article article = fixture("article2");
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 5., destinationLocation, false);
-
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
-
- Assert.assertEquals(1, bookArticleResult.getStorageMovementOrder().getStorageMovements().size());
-
- }
-
- @Test
- public void testWithdrawArticleWithDriverLicense() throws Exception {
-
- MagalieUser alexandre = fixture("alexandre");
- Article article = fixture("article1");
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 50., destinationLocation, false);
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
-
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
- Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size());
- StorageMovement location1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertEquals(20., location1.getExpectedQuantity(), DELTA);
- StorageMovement location2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null);
- Assert.assertEquals(30., location2.getExpectedQuantity(), DELTA);
-
- }
-
- @Test
- public void testWithdrawArticleConsiderAlreadyRemovedItem() throws Exception {
-
- MagalieUser alexandre = fixture("alexandre");
- MagalieUser cathy = fixture("cathy");
-
- Article article = fixture("article1");
-
- {
- BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, false);
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
- Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size());
- StorageMovement storageMovement1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertEquals(20., storageMovement1.getExpectedQuantity(), DELTA);
- Assert.assertEquals("B2", storageMovement1.getOriginLocation().getCode());
- StorageMovement storageMovement2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null);
- Assert.assertEquals(10., storageMovement2.getExpectedQuantity(), DELTA);
- Assert.assertEquals("A1", storageMovement2.getOriginLocation().getCode());
- }
-
- {
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false);
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
- Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
- StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertEquals(30., storageMovement.getExpectedQuantity(), DELTA);
- Assert.assertEquals("A1", storageMovement.getOriginLocation().getCode());
- }
- }
-
- @Test
- public void testWithdrawArticleConsiderLocationsInError() throws Exception {
-
- MagalieUser alexandre = fixture("alexandre");
- MagalieUser cathy = fixture("cathy");
-
- Article article = fixture("article1");
-
- // report location 2 in error
- Location location2 = fixture("location2");
- LocationErrorsService locationErrorsService = newService(LocationErrorsService.class);
- locationErrorsService.reportError(location2, article, alexandre);
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false);
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
-
- Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
- StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertNotEquals(
- "location2 must not be returned because it was reported in error",
- location2.getId(),
- storageMovement.getOriginLocation().getId());
-
- }
-
- @Test
- public void testWithdrawArticleWithBestEffortPolicy() throws Exception {
-
- MagalieUser alexandre = fixture("alexandre");
- Article article = fixture("article2");
- Location location1 = fixture("location1");
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, true);
- BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- Assert.assertTrue(bookArticleResult.isSuccess());
- Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- Assert.assertFalse(bookArticleResult.isArticleInaccessible());
- Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
- StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getQuantity(), DELTA);
- Assert.assertEquals(location1.getId(), storageMovement.getOriginLocation().getId());
-
- }
-
-}
Added: 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 (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -0,0 +1,70 @@
+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.StorageMovement;
+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;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+public class ArticleStorageServiceTest extends AbstractMagalieServiceTest {
+
+ private static final Log log = LogFactory.getLog(ArticleStorageServiceTest.class);
+
+ protected ArticleStorageService service;
+
+ protected Building building;
+
+ protected Location destinationLocation;
+
+ protected MagalieUser magalieUser;
+
+ @Before
+ public void setUp() throws ParseException {
+
+ loadFixtures("fixtures");
+
+ building = fixture("B1");
+
+ destinationLocation = fixture("location5");
+
+ magalieUser = fixture("bruno");
+
+ service = newService(ArticleStorageService.class);
+
+ serviceContext.setDate(new Date(1363948427576l));
+
+ }
+
+ /**
+ * Checks that lowest quantity first policy is applied and fixed location first = false
+ * is considered.
+ */
+ @Test
+ public void testOrder() {
+
+ Article article = fixture("article2");
+
+ BookArticleRequest bookArticleRequest =
+ new BookArticleRequest(magalieUser, building, article, 11., destinationLocation, false);
+
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+
+ List<StorageMovement> storageMovements = bookArticleResult.getStorageMovementOrder().getStorageMovements();
+
+ Assert.assertEquals(2., storageMovements.get(0).getExpectedQuantity(), DELTA);
+ Assert.assertEquals(9., storageMovements.get(1).getExpectedQuantity(), DELTA);
+
+ }
+}
Copied: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java (from rev 130, trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java)
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -0,0 +1,232 @@
+package com.franciaflex.magalie.services.service;
+
+/*
+ * #%L
+ * MagaLiE :: Services
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2013 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+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.StorageMovementOrder;
+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;
+
+public class OldFixturesArticleStorageServiceTest extends AbstractMagalieServiceTest {
+
+ private static final Log log = LogFactory.getLog(OldFixturesArticleStorageServiceTest.class);
+
+ protected ArticleStorageService service;
+
+ protected Building building;
+
+ protected Location destinationLocation;
+
+ @Before
+ public void setUp() throws ParseException {
+
+ loadFixtures("fixtures2");
+
+ building = fixture("B1");
+
+ destinationLocation = fixture("location5");
+
+ service = newService(ArticleStorageService.class);
+
+ serviceContext.setDate(new Date(1363948427576l));
+
+ }
+
+ @Test
+ public void testThrowUnavailableArticle() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ Article article = fixture("article1");
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 100., destinationLocation, false);
+
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+
+ Assert.assertFalse(bookArticleResult.isSuccess());
+
+ Assert.assertTrue(bookArticleResult.isArticleUnavailable());
+
+ }
+
+ @Test
+ public void testThrowRequiredDriverLicenceException() throws Exception {
+
+ MagalieUser basile = fixture("basile");
+ Article article = fixture("article1");
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 70., destinationLocation, false);
+
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+
+ Assert.assertFalse(bookArticleResult.isSuccess());
+ Assert.assertTrue(bookArticleResult.isArticleInaccessible());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+
+ }
+
+ @Test
+ public void testWithdrawArticleWithoutDriverLicense() throws Exception {
+
+ MagalieUser basile = fixture("basile");
+ Article article = fixture("article2");
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 5., destinationLocation, false);
+
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+
+ Assert.assertEquals(1, bookArticleResult.getStorageMovementOrder().getStorageMovements().size());
+
+ }
+
+ @Test
+ public void testWithdrawArticleWithDriverLicense() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ Article article = fixture("article1");
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 50., destinationLocation, false);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+ Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size());
+ StorageMovement location1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
+ Assert.assertEquals(20., location1.getExpectedQuantity(), DELTA);
+ StorageMovement location2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null);
+ Assert.assertEquals(30., location2.getExpectedQuantity(), DELTA);
+
+ }
+
+ @Test
+ public void testWithdrawArticleConsiderAlreadyRemovedItem() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ MagalieUser cathy = fixture("cathy");
+
+ Article article = fixture("article1");
+
+ {
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, false);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+ Assert.assertEquals(2, storageMovementOrder.getStorageMovements().size());
+ StorageMovement storageMovement1 = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
+ Assert.assertEquals(20., storageMovement1.getExpectedQuantity(), DELTA);
+ Assert.assertEquals("B2", storageMovement1.getOriginLocation().getCode());
+ StorageMovement storageMovement2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null);
+ Assert.assertEquals(10., storageMovement2.getExpectedQuantity(), DELTA);
+ Assert.assertEquals("A1", storageMovement2.getOriginLocation().getCode());
+ }
+
+ {
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+ Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
+ StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
+ Assert.assertEquals(30., storageMovement.getExpectedQuantity(), DELTA);
+ Assert.assertEquals("A1", storageMovement.getOriginLocation().getCode());
+ }
+ }
+
+ @Test
+ public void testWithdrawArticleConsiderLocationsInError() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ MagalieUser cathy = fixture("cathy");
+
+ Article article = fixture("article1");
+
+ // report location 2 in error
+ Location location2 = fixture("location2");
+ LocationErrorsService locationErrorsService = newService(LocationErrorsService.class);
+ locationErrorsService.reportError(location2, article, alexandre);
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+
+ Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
+ StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
+ Assert.assertNotEquals(
+ "location2 must not be returned because it was reported in error",
+ location2.getId(),
+ storageMovement.getOriginLocation().getId());
+
+ }
+
+ @Test
+ public void testWithdrawArticleWithBestEffortPolicy() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ Article article = fixture("article2");
+ Location location1 = fixture("location1");
+
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, true);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
+ Assert.assertTrue(bookArticleResult.isSuccess());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
+ Assert.assertFalse(bookArticleResult.isArticleInaccessible());
+ Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
+ StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
+ Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getQuantity(), DELTA);
+ Assert.assertEquals(location1.getId(), storageMovement.getOriginLocation().getId());
+
+ }
+
+}
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-25 11:08:52 UTC (rev 131)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-25 12:57:51 UTC (rev 132)
@@ -28,7 +28,8 @@
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
@@ -37,9 +38,8 @@
import java.text.ParseException;
import java.util.Date;
-import java.util.LinkedList;
import java.util.List;
-import java.util.Queue;
+import java.util.Set;
public class RequestedArticleServiceTest extends AbstractMagalieServiceTest {
@@ -83,26 +83,26 @@
List<RequestedArticle> requestedArticles = fixture("requestedArticles");
- Queue<RequestedArticle> requestedArticlesByPriority =
+ Set<RequestedArticle> requestedArticlesByPriority =
service.getRequestedArticlesByPriority(requestedArticles, magalieUser);
Assert.assertEquals(requestedArticles.size(), requestedArticlesByPriority.size());
- Assert.assertEquals("requestedArticle5", requestedArticlesByPriority.poll().getId());
- Assert.assertEquals("requestedArticle6", requestedArticlesByPriority.poll().getId());
- Assert.assertEquals("requestedArticle1", requestedArticlesByPriority.poll().getId());
- Assert.assertEquals("requestedArticle2", requestedArticlesByPriority.poll().getId());
- Assert.assertEquals("requestedArticle3", requestedArticlesByPriority.poll().getId());
- Assert.assertEquals("requestedArticle4", requestedArticlesByPriority.poll().getId());
+ Assert.assertEquals("requestedArticle5", Iterables.get(requestedArticlesByPriority, 0).getId());
+ Assert.assertEquals("requestedArticle6", Iterables.get(requestedArticlesByPriority, 1).getId());
+ Assert.assertEquals("requestedArticle1", Iterables.get(requestedArticlesByPriority, 2).getId());
+ Assert.assertEquals("requestedArticle2", Iterables.get(requestedArticlesByPriority, 3).getId());
+ Assert.assertEquals("requestedArticle3", Iterables.get(requestedArticlesByPriority, 4).getId());
+ Assert.assertEquals("requestedArticle4", Iterables.get(requestedArticlesByPriority, 5).getId());
}
@Test
public void testFindOrderWhenNoRequestedArticles() {
- Queue<RequestedArticle> emptyQueue = Lists.newLinkedList();
+ Set<RequestedArticle> emptySet = Sets.newHashSet();
- FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(emptyQueue, magalieUser, building);
+ FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(emptySet, magalieUser, building);
Assert.assertTrue(orderToExecute.isNothingToDo());
Assert.assertFalse(orderToExecute.isEverythingUnavailable());
@@ -131,13 +131,12 @@
RequestedArticle requestedArticle4 = fixture("requestedArticle4");
- LinkedList<RequestedArticle> fakePriorityQueue =
- Lists.newLinkedList();
+ Set<RequestedArticle> fakePrioritySet = Sets.newHashSet();
- fakePriorityQueue.add(requestedArticle4);
+ fakePrioritySet.add(requestedArticle4);
FindOrderToExecuteResult orderToExecute =
- service.findOrderToExecute(fakePriorityQueue, magalieUser, building);
+ service.findOrderToExecute(fakePrioritySet, magalieUser, building);
Assert.assertFalse(orderToExecute.isNothingToDo());
Assert.assertTrue(orderToExecute.isEverythingUnavailable());
@@ -156,13 +155,12 @@
RequestedArticle requestedArticle1 = fixture("requestedArticle1");
- LinkedList<RequestedArticle> fakePriorityQueue =
- Lists.newLinkedList();
+ Set<RequestedArticle> fakePrioritySet = Sets.newHashSet();
- fakePriorityQueue.add(requestedArticle1);
+ fakePrioritySet.add(requestedArticle1);
FindOrderToExecuteResult orderToExecute =
- service.findOrderToExecute(fakePriorityQueue, magalieUser, building);
+ service.findOrderToExecute(fakePrioritySet, magalieUser, building);
Assert.assertFalse(orderToExecute.isNothingToDo());
Assert.assertTrue(orderToExecute.isEverythingUnavailable());
1
0
r131 - trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 13:08:52 +0200 (Thu, 25 Apr 2013)
New Revision: 131
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix bad dao implementation
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java 2013-04-25 10:31:03 UTC (rev 130)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java 2013-04-25 11:08:52 UTC (rev 131)
@@ -54,6 +54,7 @@
@Override
public List<Location> getAllLocationsInError(Article article) {
Query query = entityManager.createQuery("select se.location from LocationError se where se.article = :article");
+ query.setParameter("article", article);
List<Location> allLocationsInError = query.getResultList();
return allLocationsInError;
}
1
0
r130 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 12:31:03 +0200 (Thu, 25 Apr 2013)
New Revision: 130
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
in LocationError consider article and not only location
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/LocationError.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/LocationErrorsService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java 2013-04-25 10:06:18 UTC (rev 129)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.LocationError;
@@ -35,7 +36,7 @@
LocationError findByLocation(Location location);
- List<Location> getAllLocationsInError();
+ List<Location> getAllLocationsInError(Article article);
List<LocationError> findAll();
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java 2013-04-25 10:06:18 UTC (rev 129)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationErrorJpaDao.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -24,6 +24,7 @@
*/
import com.franciaflex.magalie.persistence.dao.LocationErrorDao;
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.LocationError;
@@ -51,8 +52,8 @@
}
@Override
- public List<Location> getAllLocationsInError() {
- Query query = entityManager.createQuery("select se.location from LocationError se");
+ public List<Location> getAllLocationsInError(Article article) {
+ Query query = entityManager.createQuery("select se.location from LocationError se where se.article = :article");
List<Location> allLocationsInError = query.getResultList();
return allLocationsInError;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/LocationError.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/LocationError.java 2013-04-25 10:06:18 UTC (rev 129)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/LocationError.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -40,6 +40,9 @@
@OneToOne
protected Location location;
+ @OneToOne
+ protected Article article;
+
@ManyToOne
protected MagalieUser magalieUser;
@@ -77,4 +80,12 @@
public void setReportDate(Date reportDate) {
this.reportDate = reportDate;
}
+
+ public Article getArticle() {
+ return article;
+ }
+
+ public void setArticle(Article article) {
+ this.article = article;
+ }
}
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 10:06:18 UTC (rev 129)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -393,7 +393,7 @@
LocationErrorsService locationErrorsService = serviceContext.newService(LocationErrorsService.class);
- List<Location> allLocationsInError = locationErrorsService.getAllLocationsInError();
+ List<Location> allLocationsInError = locationErrorsService.getAllLocationsInError(article);
storedArticles =
Lists.newArrayList(
@@ -467,7 +467,7 @@
Location locationInError = locationDao.findById(locationInErrorId);
- locationErrorsService.reportError(locationInError, magalieUser, confirmDate);
+ locationErrorsService.reportError(locationInError, storageMovementOrder.getArticle(), magalieUser, confirmDate);
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java 2013-04-25 10:06:18 UTC (rev 129)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -24,6 +24,7 @@
*/
import com.franciaflex.magalie.persistence.dao.LocationErrorDao;
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.LocationError;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
@@ -46,15 +47,15 @@
this.serviceContext = serviceContext;
}
- public void reportError(Location location, MagalieUser magalieUser) {
+ public void reportError(Location location, Article article, MagalieUser magalieUser) {
Date reportDate = serviceContext.getNow();
- reportError(location, magalieUser, reportDate);
+ reportError(location, article, magalieUser, reportDate);
}
- public void reportError(Location location, MagalieUser magalieUser, Date reportDate) {
+ public void reportError(Location location, Article article, MagalieUser magalieUser, Date reportDate) {
LocationErrorDao locationErrorDao = serviceContext.getPersistenceContext().getLocationErrorDao();
@@ -68,6 +69,8 @@
newLocationError.setLocation(location);
+ newLocationError.setArticle(article);
+
newLocationError.setReportDate(reportDate);
locationErrorDao.persist(newLocationError);
@@ -83,11 +86,11 @@
}
}
- public List<Location> getAllLocationsInError() {
+ public List<Location> getAllLocationsInError(Article article) {
LocationErrorDao locationErrorDao = serviceContext.getPersistenceContext().getLocationErrorDao();
- List<Location> allLocationsInError = locationErrorDao.getAllLocationsInError();
+ List<Location> allLocationsInError = locationErrorDao.getAllLocationsInError(article);
return allLocationsInError;
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-25 10:06:18 UTC (rev 129)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-25 10:31:03 UTC (rev 130)
@@ -189,7 +189,7 @@
// report location 2 in error
Location location2 = fixture("location2");
LocationErrorsService locationErrorsService = newService(LocationErrorsService.class);
- locationErrorsService.reportError(location2, alexandre);
+ locationErrorsService.reportError(location2, article, alexandre);
BookArticleRequest bookArticleRequest = new BookArticleRequest(cathy, building, article, 30., destinationLocation, false);
BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
1
0
r129 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity magalie-services/src/main/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 12:06:18 +0200 (Thu, 25 Apr 2013)
New Revision: 129
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add report date in unavailable article
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java
Modified: 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 2013-04-25 10:04:24 UTC (rev 128)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/UnavailableArticle.java 2013-04-25 10:06:18 UTC (rev 129)
@@ -4,6 +4,7 @@
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
+import java.util.Date;
@Entity
public class UnavailableArticle extends AbstractEntity {
@@ -15,6 +16,8 @@
@OneToOne
protected Article article;
+ protected Date reportDate;
+
@Override
public String getId() {
return id;
@@ -31,4 +34,12 @@
public void setArticle(Article article) {
this.article = article;
}
+
+ public void setReportDate(Date reportDate) {
+ this.reportDate = reportDate;
+ }
+
+ public Date getReportDate() {
+ return reportDate;
+ }
}
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 10:04:24 UTC (rev 128)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-25 10:06:18 UTC (rev 129)
@@ -153,6 +153,8 @@
newUnavailableArticle.setArticle(article);
+ newUnavailableArticle.setReportDate(serviceContext.getNow());
+
dao.persist(newUnavailableArticle);
}
1
0
25 Apr '13
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/revision…
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">
1
0
r127 - trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 10:58:18 +0200 (Thu, 25 Apr 2013)
New Revision: 127
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2163 more explicit message when article unavailable
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
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-25 08:54:53 UTC (rev 126)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-25 08:58:18 UTC (rev 127)
@@ -178,7 +178,7 @@
if (bookArticleResult.isArticleUnavailable()) {
- addActionError("Cet article n'est pas disponible");
+ addActionError("Article sans stock");
return INPUT;
1
0
r126 - in trunk: 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/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/webapp/js
by bleny@users.forge.codelutin.com 25 Apr '13
by bleny@users.forge.codelutin.com 25 Apr '13
25 Apr '13
Author: bleny
Date: 2013-04-25 10:54:53 +0200 (Thu, 25 Apr 2013)
New Revision: 126
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2165 suggest more locations
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationJpaDao.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/service/ArticleStorageService.java
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/webapp/js/receive-article-input.js
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationDao.java 2013-04-24 13:55:31 UTC (rev 125)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationDao.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -23,11 +23,16 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.Warehouse;
+import java.util.List;
+
public interface LocationDao extends Dao<Location> {
Location find(String code, Warehouse warehouse);
+ List<Location> findAllWithoutReception(Building building);
+
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationJpaDao.java 2013-04-24 13:55:31 UTC (rev 125)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/LocationJpaDao.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -23,12 +23,15 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.Locations;
import com.franciaflex.magalie.persistence.dao.LocationDao;
+import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
+import java.util.List;
public class LocationJpaDao extends AbstractJpaDao<Location> implements LocationDao {
@@ -48,4 +51,18 @@
query.setParameter("warehouse", warehouse);
return findUnique(query);
}
+
+ @Override
+ public List<Location> findAllWithoutReception(Building building) {
+ TypedQuery<Location> query = createQuery(
+ " from Location l where"
+ + " l.warehouse.building = :building and "
+ + " l.code != :codeForReceptionLocations and "
+ + " l.code != :codeForWarehouseWithoutLocations "
+ + " order by l.warehouse.building.code, l.warehouse.code, l.code");
+ query.setParameter("building", building);
+ query.setParameter("codeForReceptionLocations", Locations.codeForReceptionLocations());
+ query.setParameter("codeForWarehouseWithoutLocations", Locations.codeForWarehouseWithoutLocations());
+ return findAll(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-24 13:55:31 UTC (rev 125)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/StoredArticleJpaDao.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -47,9 +47,10 @@
@Override
public List<StoredArticle> findAllForArticleInBuilding(Article article, Building building) {
- Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article and sa.location.warehouse.building = :building");
+ Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article and sa.location.warehouse.building = :building and sa.location.code != :receptionLocationCode");
query.setParameter("article", article);
query.setParameter("building", building);
+ query.setParameter("receptionLocationCode", Locations.codeForReceptionLocations());
List<StoredArticle> resultList = query.getResultList();
for (StoredArticle storedArticle : resultList) {
entityManager.detach(storedArticle);
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-24 13:55:31 UTC (rev 125)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -51,6 +51,7 @@
import org.apache.commons.logging.LogFactory;
import java.util.Date;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
@@ -277,39 +278,62 @@
List<StoredArticle> storedArticles = storedArticleDao.findAllForArticleInBuilding(article, building);
+ ImmutableMap<Location, StoredArticle> storedArticlesByLocation =
+ Maps.uniqueIndex(
+ storedArticles,
+ StoredArticles.getLocationFunction()
+ );
+
// consider storage movements and compute actually available quantities
StorageMovementDao storageMovementDao = persistenceContext.getStorageMovementDao();
List<StorageMovement> storageMovements = storageMovementDao.findAllByArticle(article);
- ImmutableMap<Location, StoredArticle> storedArticlesByLocation =
- Maps.uniqueIndex(
- storedArticles,
- StoredArticles.getLocationFunction()
- );
-
for (StorageMovement storageMovement : storageMovements) {
Location originLocation = storageMovement.getOriginLocation();
StoredArticle storedArticle = storedArticlesByLocation.get(originLocation);
- double actualQuantity = storedArticle.getQuantity() - storageMovement.getQuantity();
+ if (storedArticle != null) {
- if (actualQuantity > 0.) {
+ double actualQuantity = storedArticle.getQuantity() - storageMovement.getQuantity();
storedArticle.setQuantity(actualQuantity);
+ }
- } else {
+ Location destinationLocation = storageMovement.getDestinationLocation();
+ storedArticle = storedArticlesByLocation.get(destinationLocation);
+
+ if (storedArticle != null) {
+
+ double actualQuantity = storedArticle.getQuantity() + storageMovement.getQuantity();
+
+ storedArticle.setQuantity(actualQuantity);
+
+ }
+
+ }
+
+ LinkedList<StoredArticle> toRemove = Lists.newLinkedList();
+
+ for (StoredArticle storedArticle : storedArticles) {
+
+ double actualQuantity = storedArticle.getQuantity();
+
+ if ( ! (actualQuantity > 0.)) {
+
// location is empty, do not include it as a location where you can take an article
- storedArticles.remove(storedArticle);
+ toRemove.add(storedArticle);
}
}
+ storedArticles.removeAll(toRemove);
+
// exclude storageMovements reported in error
LocationErrorsService locationErrorsService = serviceContext.newService(LocationErrorsService.class);
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:55:31 UTC (rev 125)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -1,6 +1,7 @@
package com.franciaflex.magalie.services.service;
import com.franciaflex.magalie.persistence.MagaliePersistenceContext;
+import com.franciaflex.magalie.persistence.StoredArticles;
import com.franciaflex.magalie.persistence.dao.LocationDao;
import com.franciaflex.magalie.persistence.dao.StorageMovementDao;
import com.franciaflex.magalie.persistence.dao.StoredArticleDao;
@@ -14,11 +15,15 @@
import com.franciaflex.magalie.persistence.entity.Supplier;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
import java.util.Date;
import java.util.List;
import java.util.Map;
+import java.util.Set;
public class ReceptionService implements MagalieService {
@@ -81,7 +86,7 @@
Building building = storedArticle.getLocation().getWarehouse().getBuilding();
- List<Location> locations = findLocationsToReceiveArticle(article, building);
+ List<Location> locations = findLocationsToReceiveArticle(building, article);
ReceptionTask receptionTask = new ReceptionTask(storedArticle, locations);
@@ -89,22 +94,48 @@
}
- protected List<Location> findLocationsToReceiveArticle(Article article, Building building) {
+ protected List<Location> findLocationsToReceiveArticle(Building building, Article article) {
- List<Location> locations = Lists.newLinkedList();
+ ArticleStorageService articleStorageService =
+ serviceContext.newService(ArticleStorageService.class);
+ List<StoredArticle> storedArticles =
+ articleStorageService.getStoredArticles(building, article);
+
+ Ordering<StoredArticle> comparator = Ordering.compound(
+ Lists.newArrayList(
+ StoredArticles.locationWithHighestQuantityFirst()
+ )
+ );
+
+ Set<StoredArticle> sortedStoredArticles = Sets.newTreeSet(comparator);
+
+ sortedStoredArticles.addAll(storedArticles);
+
+ Set<Location> result = Sets.newLinkedHashSet();
+
if (article.getFixedLocations() != null) {
- locations.addAll(article.getFixedLocations());
+ result.addAll(article.getFixedLocations());
}
- // TODO brendan 24/04/13 add already stored locations
+ Iterables.addAll(
+ result,
+ Iterables.transform(
+ sortedStoredArticles,
+ StoredArticles.getLocationFunction()));
- // TODO brendan 24/04/13 add other suggested location
+ MagaliePersistenceContext persistenceContext =
+ serviceContext.getPersistenceContext();
- return locations;
+ LocationDao locationDao =
+ persistenceContext.getLocationDao();
+ result.addAll(locationDao.findAllWithoutReception(building));
+
+ return Lists.newArrayList(result);
+
}
public void confirmReception(MagalieUser magalieUser, ReceptionConfirmation receptionConfirmation) {
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:55:31 UTC (rev 125)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-04-25 08:54:53 UTC (rev 126)
@@ -95,7 +95,7 @@
Location fixedLocation = Iterables.getOnlyElement(article.getFixedLocations());
- Assert.assertTrue(receptionTask.getLocations().contains(fixedLocation));
+ Assert.assertEquals(fixedLocation, receptionTask.getLocations().get(0));
}
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:55:31 UTC (rev 125)
+++ trunk/magalie-web/src/main/webapp/js/receive-article-input.js 2013-04-25 08:54:53 UTC (rev 126)
@@ -60,7 +60,7 @@
}
var locationIdToStoredQuantities = {};
$.each(model.locations, function(key, location) {
- if (location.used) {
+ if (location.used && location.stored > 0.) {
locationIdToStoredQuantities[location.id] = location.stored;
}
});
1
0