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
April 2013
- 2 participants
- 82 discussions
r104 - in trunk/magalie-web/src/main/java/com/franciaflex/magalie/web: . action
by bleny@users.forge.codelutin.com 17 Apr '13
by bleny@users.forge.codelutin.com 17 Apr '13
17 Apr '13
Author: bleny
Date: 2013-04-17 12:35:44 +0200 (Wed, 17 Apr 2013)
New Revision: 104
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
introduce current activity in session to redirect user
Added:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/Activity.java
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/Activity.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/Activity.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/Activity.java 2013-04-17 10:35:44 UTC (rev 104)
@@ -0,0 +1,14 @@
+package com.franciaflex.magalie.web;
+
+/**
+ * Current activity of the user. May be used for redirection since a user
+ * keep doing the same thing until manually declare otherwise.
+ *
+ * @author bleny
+ */
+public enum Activity {
+
+ REQUESTED_LISTS,
+ KANBANS
+
+}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-17 10:27:04 UTC (rev 103)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-17 10:35:44 UTC (rev 104)
@@ -26,6 +26,8 @@
protected Warehouse lastUsedDestinationWarehouseForKanbans;
+ protected Activity activity;
+
protected Collection<String> messages;
public MagalieUser getMagalieUser() {
@@ -63,4 +65,12 @@
getMessages().add(message);
}
+ public Activity getActivity() {
+ return activity;
+ }
+
+ public void setActivity(Activity activity) {
+ this.activity = activity;
+ }
+
}
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-17 10:27:04 UTC (rev 103)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-17 10:35:44 UTC (rev 104)
@@ -6,6 +6,7 @@
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 org.apache.commons.logging.Log;
@@ -37,6 +38,8 @@
@Override
public String execute() {
+ session.setActivity(Activity.REQUESTED_LISTS);
+
MagalieUser magalieUser = session.getMagalieUser();
Building building = session.getBuilding();
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-17 10:27:04 UTC (rev 103)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-17 10:35:44 UTC (rev 104)
@@ -7,6 +7,7 @@
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
import com.franciaflex.magalie.services.service.BookArticleResult;
import com.franciaflex.magalie.services.service.FulfilKanbanService;
+import com.franciaflex.magalie.web.Activity;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
import org.apache.commons.logging.Log;
@@ -45,8 +46,10 @@
}
@Override
- public String input() throws Exception {
+ public String input() {
+ session.setActivity(Activity.KANBANS);
+
Building building = session.getBuilding();
destinationWarehouses = service.getDestinationWarehouses(building);
@@ -84,6 +87,8 @@
@Override
public String execute() {
+ session.setActivity(Activity.KANBANS);
+
if (log.isDebugEnabled()) {
log.debug("article barcode is " + articleBarcode);
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-17 10:27:04 UTC (rev 103)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-17 10:35:44 UTC (rev 104)
@@ -42,7 +42,8 @@
import java.util.Map;
@Results({
- @Result(name="success", type="redirectAction", params = { "actionName", "report" })
+ @Result(name="KANBANS", type="redirectAction", params = { "actionName", "fulfil-kanban!input" }),
+ @Result(name="REQUESTED_LISTS", type="redirectAction", params = { "actionName", "deliver-requested-article!input" })
})
public class WithdrawItemAction extends MagalieActionSupport {
@@ -119,7 +120,9 @@
service.confirmStorageMovement(confirmation, magalieUser);
- return SUCCESS;
+ String resultName = session.getActivity().name();
+ return resultName;
+
}
}
1
0
r103 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 17 Apr '13
by bleny@users.forge.codelutin.com 17 Apr '13
17 Apr '13
Author: bleny
Date: 2013-04-17 12:27:04 +0200 (Wed, 17 Apr 2013)
New Revision: 103
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add delivered requested lists in report
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp
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-17 09:46:14 UTC (rev 102)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java 2013-04-17 10:27:04 UTC (rev 103)
@@ -1,6 +1,7 @@
package com.franciaflex.magalie.services;
import com.franciaflex.magalie.persistence.StorageMovements;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.LocationError;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.StorageMovement;
@@ -20,6 +21,8 @@
protected List<LocationError> allLocationErrors;
+ protected List<DeliveredRequestedList> allDeliveredRequestedLists;
+
public void setReportDate(Date reportDate) {
this.reportDate = reportDate;
}
@@ -69,4 +72,12 @@
public void setAllLocationErrors(List<LocationError> allLocationErrors) {
this.allLocationErrors = allLocationErrors;
}
+
+ public void setAllDeliveredRequestedLists(List<DeliveredRequestedList> allDeliveredRequestedLists) {
+ this.allDeliveredRequestedLists = allDeliveredRequestedLists;
+ }
+
+ public List<DeliveredRequestedList> getAllDeliveredRequestedLists() {
+ return allDeliveredRequestedLists;
+ }
}
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-17 09:46:14 UTC (rev 102)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java 2013-04-17 10:27:04 UTC (rev 103)
@@ -1,6 +1,7 @@
package com.franciaflex.magalie.services.service;
import com.franciaflex.magalie.persistence.dao.StorageMovementDao;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.LocationError;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.StorageMovement;
@@ -46,6 +47,12 @@
magalieReport.setAllLocationErrors(allLocationsInError);
+ RequestedArticleService requestedArticleService = serviceContext.newService(RequestedArticleService.class);
+
+ List<DeliveredRequestedList> allDeliveredRequestedLists = requestedArticleService.getAllDeliveredRequestedLists();
+
+ magalieReport.setAllDeliveredRequestedLists(allDeliveredRequestedLists);
+
return magalieReport;
}
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-17 09:46:14 UTC (rev 102)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-17 10:27:04 UTC (rev 103)
@@ -305,4 +305,16 @@
return requestedArticles;
}
+
+ public List<DeliveredRequestedList> getAllDeliveredRequestedLists() {
+
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ DeliveredRequestedListDao dao = persistenceContext.getDeliveredRequestedListDao();
+
+ List<DeliveredRequestedList> all = dao.findAll();
+
+ return all;
+
+ }
}
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-17 09:46:14 UTC (rev 102)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-04-17 10:27:04 UTC (rev 103)
@@ -205,6 +205,51 @@
</section>
<section>
+ <h2>Traitement des listes</h2>
+
+ <table class="table">
+ <thead>
+ <tr>
+ <th>
+ Id
+ </th>
+ <th>
+ Liste
+ </th>
+ <th>
+ Statut
+ </th>
+ <th>
+ Affectation
+ </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <s:iterator value="report.allDeliveredRequestedLists">
+ <tr>
+ <td>
+ <s:property value="id" />
+ </td>
+ <td>
+ <s:property value="requestedList.code" />
+ </td>
+ <td>
+ <s:property value="status" />
+ </td>
+ <td>
+ <s:if test="affectedTo">
+ <a href="#<s:property value="affectedTo.id" />"><s:property value="affectedTo.login" /></a>
+ </s:if>
+ </td>
+ </tr>
+ </s:iterator>
+ </tbody>
+
+ </table>
+</section>
+
+<section>
<h2>Utilisateurs connus</h2>
<table class="table">
1
0
r102 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence 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 17 Apr '13
by bleny@users.forge.codelutin.com 17 Apr '13
17 Apr '13
Author: bleny
Date: 2013-04-17 11:46:14 +0200 (Wed, 17 Apr 2013)
New Revision: 102
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
on confirmation, when adding a storage movement set destination location
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StorageMovements.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.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/StorageMovements.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StorageMovements.java 2013-04-17 09:37:50 UTC (rev 101)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/StorageMovements.java 2013-04-17 09:46:14 UTC (rev 102)
@@ -25,6 +25,14 @@
}
}
+ protected static class GetDestinationFunction implements Function<StorageMovement, Location> {
+
+ @Override
+ public Location apply(StorageMovement storageMovement) {
+ return storageMovement.getDestinationLocation();
+ }
+ }
+
protected static class StorageMovementIsConfirmedPredicate implements Predicate<StorageMovement> {
@Override
@@ -41,6 +49,10 @@
return new GetOriginFunction();
}
+ public static Function<StorageMovement, Location> getDestinationFunction() {
+ return new GetDestinationFunction();
+ }
+
public static Predicate<StorageMovement> storageMovementIsConfirmed() {
return new StorageMovementIsConfirmedPredicate();
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java 2013-04-17 09:37:50 UTC (rev 101)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java 2013-04-17 09:46:14 UTC (rev 102)
@@ -127,4 +127,20 @@
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
+
+ protected Set<Location> getDestinationLocations() {
+ Set<Location> locations =
+ Sets.newHashSet(
+ Iterables.transform(
+ getStorageMovements(),
+ StorageMovements.getDestinationFunction()
+ )
+ );
+ return locations;
+ }
+
+ public Location getDestinationLocation() {
+ Location onlyElement = Iterables.getOnlyElement(getDestinationLocations());
+ return onlyElement;
+ }
}
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-17 09:37:50 UTC (rev 101)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-17 09:46:14 UTC (rev 102)
@@ -306,21 +306,24 @@
public void confirmStorageMovement(StorageMovementConfirmation confirmation, MagalieUser magalieUser) {
- String storageMovementOrderId = confirmation.getStorageMovementOrderId();
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
StorageMovementOrderDao storageMovementOrderDao =
- serviceContext.getPersistenceContext().getStorageMovementOrderDao();
+ persistenceContext.getStorageMovementOrderDao();
- LocationDao locationDao = serviceContext.getPersistenceContext().getLocationDao();
+ LocationDao locationDao = persistenceContext.getLocationDao();
StorageMovementOrder storageMovementOrder =
- storageMovementOrderDao.findById(storageMovementOrderId);
+ storageMovementOrderDao.findById(
+ confirmation.getStorageMovementOrderId());
Date confirmDate = serviceContext.getNow();
LocationErrorsService locationErrorsService =
serviceContext.newService(LocationErrorsService.class);
+ Location destinationLocation = storageMovementOrder.getDestinationLocation();
+
for (Map.Entry<String, Double> locationIdToActualQuantity : confirmation.getLocationsIdsToActualQuantities().entrySet()) {
String locationId = locationIdToActualQuantity.getKey();
@@ -339,7 +342,7 @@
storageMovement.setOriginLocation(originLocation);
- // TODO brendan 28/03/13 what about destination location
+ storageMovement.setDestinationLocation(destinationLocation);
storageMovement.setMagalieUser(magalieUser);
@@ -367,7 +370,7 @@
storageMovementOrderDao.merge(storageMovementOrder);
- serviceContext.getPersistenceContext().commit();
+ persistenceContext.commit();
}
}
1
0
17 Apr '13
Author: bleny
Date: 2013-04-17 11:37:50 +0200 (Wed, 17 Apr 2013)
New Revision: 101
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
save quantity when reporting error in location
Modified:
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-04-17 08:28:26 UTC (rev 100)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-04-17 09:37:50 UTC (rev 101)
@@ -101,7 +101,6 @@
var storageMovement = this.getStorageMovement(barcode);
storageMovement.used = true;
storageMovement.defect = true;
- storageMovement.withdrawn = 0;
};
model.nextLocation = function() {
@@ -246,7 +245,10 @@
} else {
var barcode = $('#withdraw-item_locationBarcode').val();
+ var quantity = parseFloat($('#withdraw-item_quantity').val());
+ model.withdraw(barcode, quantity);
+
model.reportError(barcode);
// if used location focused as current, highlight next location to go
1
0
17 Apr '13
Author: bleny
Date: 2013-04-17 10:28:26 +0200 (Wed, 17 Apr 2013)
New Revision: 100
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
do not show next location when there is nothing more to withdraw
Modified:
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-04-16 17:37:40 UTC (rev 99)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-04-17 08:28:26 UTC (rev 100)
@@ -169,7 +169,7 @@
} else {
$(storageMovementElement).addClass('success');
}
- } else if (storageMovement.originLocation.id === model.storageMovements[model.storageMovementsIndex].originLocation.id) {
+ } else if (storageMovement.originLocation.id === model.storageMovements[model.storageMovementsIndex].originLocation.id && ! model.canTerminate()) {
$(storageMovementElement).addClass('pending');
storageMovementsElement.scrollTop(storageMovementElement[0].offsetTop);
} else {
1
0
16 Apr '13
Author: bleny
Date: 2013-04-16 19:37:40 +0200 (Tue, 16 Apr 2013)
New Revision: 99
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add affectation management
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedListDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/DeliveredRequestedListJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedList.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java
Removed:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Entities.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.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/FindOrderToExecuteResult.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/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
trunk/magalie-web/src/main/resources/log4j.properties
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Entities.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Entities.java 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Entities.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -4,7 +4,10 @@
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import org.apache.commons.lang3.ObjectUtils;
+import java.util.Comparator;
+
public class Entities {
private Entities() {}
@@ -17,6 +20,15 @@
}
}
+ protected static class ArbitraryComparator<E extends AbstractEntity> implements Comparator<E> {
+
+ @Override
+ public int compare(E x, E y) {
+ return ObjectUtils.compare(x.getId(), y.getId());
+ }
+
+ }
+
public static Function<AbstractEntity, String> getIdFunction() {
return new GetIdFunction();
}
@@ -25,4 +37,7 @@
return Predicates.compose(Predicates.equalTo(id), getIdFunction());
}
+ public static <E extends AbstractEntity> Comparator<E> arbitraryComparator() {
+ return new ArbitraryComparator();
+ }
}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -3,6 +3,7 @@
import com.franciaflex.magalie.persistence.dao.ArticleDao;
import com.franciaflex.magalie.persistence.dao.BuildingDao;
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao;
+import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao;
import com.franciaflex.magalie.persistence.dao.MagalieUserDao;
import com.franciaflex.magalie.persistence.dao.RequestedArticleDao;
import com.franciaflex.magalie.persistence.dao.LocationDao;
@@ -15,6 +16,7 @@
import com.franciaflex.magalie.persistence.dao.jpa.ArticleJpaDao;
import com.franciaflex.magalie.persistence.dao.jpa.BuildingJpaDao;
import com.franciaflex.magalie.persistence.dao.jpa.DeliveredRequestedArticleJpaDao;
+import com.franciaflex.magalie.persistence.dao.jpa.DeliveredRequestedListJpaDao;
import com.franciaflex.magalie.persistence.dao.jpa.LocationErrorJpaDao;
import com.franciaflex.magalie.persistence.dao.jpa.LocationJpaDao;
import com.franciaflex.magalie.persistence.dao.jpa.MagalieUserJpaDao;
@@ -123,4 +125,8 @@
return new RequestedListJpaDao(entityManager);
}
+ @Override
+ public DeliveredRequestedListDao getDeliveredRequestedListDao() {
+ return new DeliveredRequestedListJpaDao(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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -3,6 +3,7 @@
import com.franciaflex.magalie.persistence.dao.ArticleDao;
import com.franciaflex.magalie.persistence.dao.BuildingDao;
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao;
+import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao;
import com.franciaflex.magalie.persistence.dao.LocationDao;
import com.franciaflex.magalie.persistence.dao.LocationErrorDao;
import com.franciaflex.magalie.persistence.dao.MagalieUserDao;
@@ -48,4 +49,6 @@
RequestedListDao getRequestedListDao();
+ DeliveredRequestedListDao getDeliveredRequestedListDao();
+
}
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -1,98 +0,0 @@
-package com.franciaflex.magalie.persistence;
-
-import com.franciaflex.magalie.persistence.entity.RequestedArticle;
-import com.franciaflex.magalie.persistence.entity.RequestedList;
-import com.google.common.base.Function;
-import com.google.common.collect.ImmutableListMultimap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Multimaps;
-import org.apache.commons.collections.comparators.BooleanComparator;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-
-public class RequestedArticles {
-
- protected static class UrgentFirstComparator implements Comparator<RequestedArticle> {
-
- @Override
- public int compare(RequestedArticle x, RequestedArticle y) {
- return BooleanComparator.getTrueFirstComparator().compare(x.getRequestedList().isUrgent(), y.getRequestedList().isUrgent());
- }
-
- }
-
- protected static class RequestDateFistComparator implements Comparator<RequestedArticle> {
-
- @Override
- public int compare(RequestedArticle x, RequestedArticle y) {
- return x.getRequestedList().getRequestDate().compareTo(y.getRequestedList().getRequestDate());
- }
-
- }
-
- protected static class FinishEarlyFirstComparator implements Comparator<RequestedArticle> {
-
- protected Map<RequestedList, Integer> requestListToArticleRemainingCount;
-
- public FinishEarlyFirstComparator(Map<RequestedList, Integer> requestListToArticleRemainingCount) {
- this.requestListToArticleRemainingCount = requestListToArticleRemainingCount;
- }
-
- protected int getRemainingCount(RequestedArticle requestedArticle) {
- Integer remainingCount = requestListToArticleRemainingCount.get(requestedArticle.getRequestedList());
- return remainingCount;
- }
-
- @Override
- public int compare(RequestedArticle x, RequestedArticle y) {
- int xRemainingCount = getRemainingCount(x);
- int yRemainingCount = getRemainingCount(y);
- return xRemainingCount - yRemainingCount;
- }
-
- }
-
- protected static class GetRequestList implements Function<RequestedArticle, RequestedList> {
-
- @Override
- public RequestedList apply(RequestedArticle requestedArticle) {
- return requestedArticle.getRequestedList();
- }
- }
-
- public static Comparator<RequestedArticle> urgentFirstComparator() {
- return new UrgentFirstComparator();
- }
-
- public static Comparator<RequestedArticle> requestDateFirstComparator() {
- return new RequestDateFistComparator();
- }
-
- public static Comparator<RequestedArticle> finishEarlyFirstComparator(List<RequestedArticle> requests) {
-
- ImmutableListMultimap<RequestedList, RequestedArticle> index =
- Multimaps.index(requests, RequestedArticles.getRequestList());
-
- Map<RequestedList, Integer> requestListToArticleRemainingCount = Maps.newHashMap();
-
- for (Map.Entry<RequestedList, Collection<RequestedArticle>> requestedListCollectionEntry : index.asMap().entrySet()) {
-
- RequestedList requestedList = requestedListCollectionEntry.getKey();
-
- int remainingCount = requestedListCollectionEntry.getValue().size();
-
- requestListToArticleRemainingCount.put(requestedList, remainingCount);
-
- }
-
- return new FinishEarlyFirstComparator(requestListToArticleRemainingCount);
-
- }
-
- public static Function<RequestedArticle, RequestedList> getRequestList() {
- return new GetRequestList();
- }
-}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,53 @@
+package com.franciaflex.magalie.persistence;
+
+import com.franciaflex.magalie.persistence.entity.RequestedArticle;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+
+import java.util.Comparator;
+import java.util.List;
+
+public class RequestedArticles {
+
+ protected static class RequestedListComparator implements Comparator<RequestedArticle> {
+
+ public RequestedListComparator(Comparator<RequestedList> requestedListComparator) {
+ this.requestedListComparator = requestedListComparator;
+ }
+
+ protected Comparator<RequestedList> requestedListComparator;
+
+ @Override
+ public int compare(RequestedArticle x, RequestedArticle y) {
+ return requestedListComparator.compare(x.getRequestedList(), y.getRequestedList());
+ }
+ }
+
+ public static Comparator<RequestedArticle> comparator(List<RequestedArticle> requests, RequestedList affectedRequestedList) {
+ Comparator<RequestedArticle> comparator =
+ Ordering.compound(
+ Lists.newArrayList(
+
+ new RequestedListComparator(RequestedLists.comparator(requests, affectedRequestedList)),
+
+ // we can still have ambiguous or priorities, so to be deterministic, use arbitrary order
+ Entities.<RequestedArticle>arbitraryComparator()
+ )
+ );
+ return comparator;
+ }
+
+ protected static class GetRequestList implements Function<RequestedArticle, RequestedList> {
+
+ @Override
+ public RequestedList apply(RequestedArticle requestedArticle) {
+ return requestedArticle.getRequestedList();
+ }
+ }
+
+ public static Function<RequestedArticle, RequestedList> getRequestList() {
+ return new GetRequestList();
+ }
+}
Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java (from rev 98, trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java)
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,134 @@
+package com.franciaflex.magalie.persistence;
+
+import com.franciaflex.magalie.persistence.entity.RequestedArticle;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
+import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.Ordering;
+import org.apache.commons.collections.comparators.BooleanComparator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+public class RequestedLists {
+
+ private static final Log log = LogFactory.getLog(RequestedLists.class);
+
+ protected static class GivenRequestListFirst implements Comparator<RequestedList> {
+
+ protected RequestedList requestedList;
+
+ public GivenRequestListFirst(RequestedList requestedList) {
+ this.requestedList = requestedList;
+ }
+
+ @Override
+ public int compare(RequestedList x, RequestedList y) {
+ return BooleanComparator.getTrueFirstComparator().compare(x.equals(requestedList), y.equals(requestedList));
+ }
+ }
+
+ protected static class UrgentFirstComparator implements Comparator<RequestedList> {
+
+ @Override
+ public int compare(RequestedList x, RequestedList y) {
+ int compare = BooleanComparator.getTrueFirstComparator().compare(x.isUrgent(), y.isUrgent());
+ return compare;
+ }
+
+ }
+
+ protected static class RequestDateFistComparator implements Comparator<RequestedList> {
+
+ @Override
+ public int compare(RequestedList x, RequestedList y) {
+ int compare = x.getRequestDate().compareTo(y.getRequestDate());
+ return compare;
+ }
+
+ }
+
+ protected static class FinishEarlyFirstComparator implements Comparator<RequestedList> {
+
+ protected Map<RequestedList, Integer> requestListToArticleRemainingCount;
+
+ public FinishEarlyFirstComparator(Map<RequestedList, Integer> requestListToArticleRemainingCount) {
+ this.requestListToArticleRemainingCount = requestListToArticleRemainingCount;
+ }
+
+ protected int getRemainingCount(RequestedList requestedList) {
+ Integer remainingCount = requestListToArticleRemainingCount.get(requestedList);
+ return remainingCount;
+ }
+
+ @Override
+ public int compare(RequestedList x, RequestedList y) {
+ int xRemainingCount = getRemainingCount(x);
+ int yRemainingCount = getRemainingCount(y);
+ int compare = xRemainingCount - yRemainingCount;
+ if (log.isTraceEnabled()) {
+ if (compare < 0) log.trace(x.getId() + " is before " + y.getId());
+ if (compare == 0) log.trace(x.getId() + " is same position as " + y.getId());
+ if (compare > 0) log.trace(y.getId() + " is before " + x.getId());
+ }
+ return compare;
+ }
+
+ }
+
+ public static Comparator<RequestedList> urgentFirstComparator() {
+ return new UrgentFirstComparator();
+ }
+
+ public static Comparator<RequestedList> requestDateFirstComparator() {
+ return new RequestDateFistComparator();
+ }
+
+ public static Comparator<RequestedList> finishEarlyFirstComparator(List<RequestedArticle> requests) {
+
+ ImmutableListMultimap<RequestedList, RequestedArticle> index =
+ Multimaps.index(requests, RequestedArticles.getRequestList());
+
+ Map<RequestedList, Integer> requestListToArticleRemainingCount = Maps.newHashMap();
+
+ for (Map.Entry<RequestedList, Collection<RequestedArticle>> requestedListCollectionEntry : index.asMap().entrySet()) {
+
+ RequestedList requestedList = requestedListCollectionEntry.getKey();
+
+ int remainingCount = requestedListCollectionEntry.getValue().size();
+
+ requestListToArticleRemainingCount.put(requestedList, remainingCount);
+
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("number of remaining articles per list: " + requestListToArticleRemainingCount);
+ }
+
+ return new FinishEarlyFirstComparator(requestListToArticleRemainingCount);
+
+ }
+
+ public static Comparator<RequestedList> givenRequestListFirst(RequestedList requestedList) {
+ return new GivenRequestListFirst(requestedList);
+ }
+
+ public static Comparator<RequestedList> comparator(List<RequestedArticle> requests, RequestedList affectedRequestedList) {
+ Ordering<RequestedList> comparator =
+ Ordering.compound(
+ Lists.newArrayList(
+ givenRequestListFirst(affectedRequestedList),
+ finishEarlyFirstComparator(requests),
+ urgentFirstComparator(),
+ requestDateFirstComparator()
+ )
+ );
+ return comparator;
+ }
+}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedListDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedListDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedListDao.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,16 @@
+package com.franciaflex.magalie.persistence.dao;
+
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
+
+/**
+ * @author bleny
+ */
+public interface DeliveredRequestedListDao extends Dao<DeliveredRequestedList> {
+
+ DeliveredRequestedList findByAffectedTo(MagalieUser affectedTo);
+
+ DeliveredRequestedList findByRequestedList(RequestedList requestedList);
+
+}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -1,6 +1,7 @@
package com.franciaflex.magalie.persistence.dao;
import com.franciaflex.magalie.persistence.entity.Building;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import java.util.List;
@@ -10,6 +11,6 @@
*/
public interface RequestedArticleDao extends Dao<RequestedArticle> {
- List<RequestedArticle> findAllUndelivered(Building building);
+ List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo);
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/DeliveredRequestedListJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/DeliveredRequestedListJpaDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/DeliveredRequestedListJpaDao.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,62 @@
+package com.franciaflex.magalie.persistence.dao.jpa;
+
+import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
+import com.google.common.collect.Iterables;
+
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import java.util.List;
+
+public class DeliveredRequestedListJpaDao extends AbstractJpaDao<DeliveredRequestedList> implements DeliveredRequestedListDao {
+
+ public DeliveredRequestedListJpaDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<DeliveredRequestedList> getEntityClass() {
+ return DeliveredRequestedList.class;
+ }
+
+ @Override
+ public DeliveredRequestedList findByAffectedTo(MagalieUser affectedTo) {
+
+ TypedQuery<DeliveredRequestedList> query =
+ entityManager.createQuery(
+ "from DeliveredRequestedList drl where drl.status = :affected and drl.affectedTo = :affectedTo",
+ getEntityClass());
+
+ query.setParameter("affectedTo", affectedTo);
+
+ query.setParameter("affected", DeliveredRequestedListStatus.AFFECTED);
+
+ List<DeliveredRequestedList> resultList = query.getResultList();
+
+ DeliveredRequestedList onlyElement = Iterables.getOnlyElement(resultList, null);
+
+ return onlyElement;
+
+ }
+
+ @Override
+ public DeliveredRequestedList findByRequestedList(RequestedList requestedList) {
+
+ TypedQuery<DeliveredRequestedList> query =
+ entityManager.createQuery(
+ "from DeliveredRequestedList drl where drl.requestedList = :requestedList",
+ getEntityClass());
+
+ query.setParameter("requestedList", requestedList);
+
+ List<DeliveredRequestedList> resultList = query.getResultList();
+
+ DeliveredRequestedList onlyElement = Iterables.getOnlyElement(resultList, null);
+
+ return onlyElement;
+
+ }
+}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedArticleJpaDao.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -2,6 +2,8 @@
import com.franciaflex.magalie.persistence.dao.RequestedArticleDao;
import com.franciaflex.magalie.persistence.entity.Building;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import javax.persistence.EntityManager;
@@ -20,13 +22,19 @@
}
@Override
- public List<RequestedArticle> findAllUndelivered(Building building) {
+ public List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo) {
TypedQuery<RequestedArticle> query =
entityManager.createQuery(
- "from RequestedArticle ra where ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra) and ra.requestedList.building = :building",
+ "from RequestedArticle ra where "
+ + " ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra) "
+ + " and ra.requestedList.building = :building "
+ + " and ra.requestedList not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :complete or drl.status = :affected and drl.affectedTo != :affectedTo)",
getEntityClass()
);
query.setParameter("building", building);
+ query.setParameter("complete", DeliveredRequestedListStatus.COMPLETE);
+ query.setParameter("affected", DeliveredRequestedListStatus.AFFECTED);
+ query.setParameter("affectedTo", affectedTo);
return query.getResultList();
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedList.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedList.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedList.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,56 @@
+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 DeliveredRequestedList extends AbstractEntity {
+
+ @Id
+ @GeneratedValue
+ protected String id;
+
+ @OneToOne
+ protected RequestedList requestedList;
+
+ @OneToOne
+ protected MagalieUser affectedTo;
+
+ protected DeliveredRequestedListStatus status;
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public RequestedList getRequestedList() {
+ return requestedList;
+ }
+
+ public void setRequestedList(RequestedList requestedList) {
+ this.requestedList = requestedList;
+ }
+
+ public MagalieUser getAffectedTo() {
+ return affectedTo;
+ }
+
+ public void setAffectedTo(MagalieUser affectedTo) {
+ this.affectedTo = affectedTo;
+ }
+
+ public DeliveredRequestedListStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(DeliveredRequestedListStatus status) {
+ this.status = status;
+ }
+}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -0,0 +1,9 @@
+package com.franciaflex.magalie.persistence.entity;
+
+public enum DeliveredRequestedListStatus {
+
+ PENDING,
+ AFFECTED,
+ COMPLETE
+
+}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -174,20 +174,27 @@
protected Queue<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) {
- Ordering<StoredArticle> orderingByPriority = Ordering.compound(
- Lists.newArrayList(
- StoredArticles.fixedLocationForArticleComparator(),
- StoredArticles.locationWithLowestQuantityFirstComparator(),
- StoredArticles.articleStoredInLocationsRequiringDriverLicenseFirstComparator()
- )
- );
+ Queue<StoredArticle> storedArticlesByPriority = Lists.newLinkedList();
- Queue<StoredArticle> storedArticlesByPriority =
- new PriorityQueue<StoredArticle>(
- storedArticles.size(),
- orderingByPriority
- );
+ if ( ! storedArticles.isEmpty()) {
+ 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/FindOrderToExecuteResult.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -1,5 +1,6 @@
package com.franciaflex.magalie.services.service;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
public class FindOrderToExecuteResult {
@@ -10,6 +11,12 @@
protected boolean driverLicenseRequired;
+ protected boolean everythingUnavailable;
+
+ protected DeliveredRequestedList oldAffectation;
+
+ protected DeliveredRequestedList newAffectation;
+
public boolean isSuccess() {
return storageMovementOrder != null;
}
@@ -38,7 +45,27 @@
return driverLicenseRequired;
}
+ public void setEverythingUnavailable(boolean everythingUnavailable) {
+ this.everythingUnavailable = everythingUnavailable;
+ }
+
public boolean isEverythingUnavailable() {
- return ! driverLicenseRequired && ! nothingToDo;
+ return everythingUnavailable;
}
+
+ public void setOldAffectation(DeliveredRequestedList oldAffectation) {
+ this.oldAffectation = oldAffectation;
+ }
+
+ public DeliveredRequestedList getOldAffectation() {
+ return oldAffectation;
+ }
+
+ public void setNewAffectation(DeliveredRequestedList newAffectation) {
+ this.newAffectation = newAffectation;
+ }
+
+ public DeliveredRequestedList getNewAffectation() {
+ return newAffectation;
+ }
}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -26,19 +26,21 @@
import com.franciaflex.magalie.persistence.MagaliePersistenceContext;
import com.franciaflex.magalie.persistence.RequestedArticles;
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.entity.Article;
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
+import com.franciaflex.magalie.persistence.entity.RequestedList;
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -58,15 +60,12 @@
this.serviceContext = serviceContext;
}
- public FindOrderToExecuteResult getStorageMovementOrder(
- MagalieUser magalieUser,
- Building building) {
+ public FindOrderToExecuteResult findOrderToExecute(MagalieUser magalieUser, Building building) {
- List<RequestedArticle> requestedArticles = getRequestedArticles(building);
+ List<RequestedArticle> requestedArticles = getRequestedArticles(building, magalieUser);
- Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles);
+ Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles, magalieUser);
-
FindOrderToExecuteResult findOrderToExecuteResult =
findOrderToExecute(
requestedArticlesByPriority,
@@ -77,11 +76,11 @@
}
- protected List<RequestedArticle> getRequestedArticles(Building building) {
+ protected List<RequestedArticle> getRequestedArticles(Building building, MagalieUser magalieUser) {
RequestedArticleDao requestedArticleDao = serviceContext.getPersistenceContext().getRequestedArticleDao();
- List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building);
+ List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building, magalieUser);
if (log.isInfoEnabled()) {
log.info(allRequestedArticles.size() + " articles requested in building " + building.getCode());
@@ -106,6 +105,8 @@
boolean driverLicenseRequired = false;
+ boolean somethingIsAvailable = false;
+
while ( ! success && requestedArticleIterator.hasNext()) {
requestedArticle = requestedArticleIterator.next();
@@ -122,6 +123,8 @@
driverLicenseRequired |= bookArticleResult.isArticleInaccessible() && ! bookArticleResult.isArticleUnavailable();
+ somethingIsAvailable |= ! bookArticleResult.isArticleUnavailable();
+
success = bookArticleResult.isSuccess();
}
@@ -130,6 +133,10 @@
if (success) {
+ if (log.isInfoEnabled()) {
+ log.info("order to execute found: " + requestedArticle);
+ }
+
Preconditions.checkState(requestedArticle != null);
MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
@@ -146,22 +153,114 @@
dao.persist(newDeliveredRequestedArticle);
- persistenceContext.commit();
+ findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
- findOrderToExecuteResult = new FindOrderToExecuteResult();
+ // deal with affectations
+ DeliveredRequestedListDao deliveredRequestedListDao =
+ persistenceContext.getDeliveredRequestedListDao();
- findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
+ DeliveredRequestedList oldAffectation =
+ deliveredRequestedListDao.findByAffectedTo(magalieUser);
+ RequestedList requestedList = requestedArticle.getRequestedList();
+
+ DeliveredRequestedList newAffectation =
+ deliveredRequestedListDao.findByRequestedList(requestedList);
+
+ if (newAffectation == null) {
+
+ newAffectation = new DeliveredRequestedList();
+
+ deliveredRequestedListDao.persist(newAffectation);
+
+ }
+
+ newAffectation.setAffectedTo(magalieUser);
+
+ newAffectation.setRequestedList(requestedList);
+
+ newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
+
+ deliveredRequestedListDao.merge(newAffectation);
+
+ if (oldAffectation == null) {
+
+ if (log.isInfoEnabled()) {
+ log.info("user has no previous affectation");
+ }
+
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
+ }
+
+ boolean affectationChanged = ! oldAffectation.getRequestedList().equals(requestedList);
+
+ if (affectationChanged) {
+
+ if (log.isInfoEnabled()) {
+ log.info("user changed affectation from "
+ + oldAffectation.getRequestedList().getCode()
+ + " to " + requestedList.getCode());
+ }
+
+ boolean isFinished = false; // TODO brendan 16/04/13 really ?
+
+ if (isFinished) {
+
+ if (log.isInfoEnabled()) {
+ log.info("request list " + oldAffectation.getRequestedList()
+ + " is complete, save status");
+ }
+
+ oldAffectation.setStatus(DeliveredRequestedListStatus.COMPLETE);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("request list " + oldAffectation.getRequestedList()
+ + " is not complete, putting it back to pending");
+ }
+
+ oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
+
+ oldAffectation.setAffectedTo(null);
+
+ }
+
+ findOrderToExecuteResult.setOldAffectation(oldAffectation);
+
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
+
+ }
+
+ }
+
+ persistenceContext.commit();
+
} else {
if (requestedArticlesByPriority.isEmpty()) {
+ if (log.isInfoEnabled()) {
+ log.info("no order to execute found: nothing to do");
+ }
+
findOrderToExecuteResult.setNothingToDo(true);
} else {
+ if (log.isInfoEnabled()) {
+ log.info("no order to execute found: there is something to do but driver license is required");
+ }
+
findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
+ findOrderToExecuteResult.setEverythingUnavailable( ! somethingIsAvailable);
+
}
}
@@ -170,20 +269,29 @@
}
- protected Queue<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests) {
+ protected Queue<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
PriorityQueue<RequestedArticle> requestedArticles = new PriorityQueue<RequestedArticle>();
if ( ! requests.isEmpty()) {
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ DeliveredRequestedListDao deliveredRequestedListDao = persistenceContext.getDeliveredRequestedListDao();
+
+ DeliveredRequestedList affectedDeliveredRequestedList =
+ deliveredRequestedListDao.findByAffectedTo(magalieUser);
+
+ RequestedList affectedRequestedList = null;
+
+ if (affectedDeliveredRequestedList != null) {
+
+ affectedRequestedList = affectedDeliveredRequestedList.getRequestedList();
+
+ }
+
Comparator<RequestedArticle> priorityComparator =
- Ordering.compound(
- Lists.newArrayList(
- RequestedArticles.finishEarlyFirstComparator(requests),
- RequestedArticles.urgentFirstComparator(),
- RequestedArticles.requestDateFirstComparator()
- )
- );
+ RequestedArticles.comparator(requests, affectedRequestedList);
requestedArticles =
new PriorityQueue<RequestedArticle>(
Modified: trunk/magalie-services/src/main/resources/fixtures.yaml
===================================================================
--- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-16 17:37:40 UTC (rev 99)
@@ -417,7 +417,7 @@
requestedList2:
&requestedList2 !requested-list
id: requestedList2
- code: 123456789
+ code: 987654321
requestDate: 2013-04-08 12:00:00
urgent: false
building: *B1
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -22,6 +22,10 @@
protected RequestedArticleService service;
+ protected MagalieUser magalieUser;
+
+ protected Building building;
+
@Before
public void setUp() throws ParseException {
@@ -31,15 +35,16 @@
serviceContext.setDate(new Date(1363948427576l));
+ magalieUser = fixture("bruno");
+
+ building = fixture("B1");
}
@Test
public void testGetRequestedArticles() {
- Building building = fixture("B1");
+ List<RequestedArticle> requestedArticles = service.getRequestedArticles(building, magalieUser);
- List<RequestedArticle> requestedArticles = service.getRequestedArticles(building);
-
for (RequestedArticle requestedArticle : requestedArticles) {
Assert.assertEquals(building, requestedArticle.getRequestedList().getBuilding());
@@ -54,19 +59,22 @@
List<RequestedArticle> requestedArticles = fixture("requestedArticles");
Queue<RequestedArticle> requestedArticlesByPriority =
- service.getRequestedArticlesByPriority(requestedArticles);
+ 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());
+
}
@Test
public void testFindOrderWhenNoRequestedArticles() {
- MagalieUser magalieUser = fixture("bruno");
-
- Building building = fixture("B1");
-
Queue<RequestedArticle> emptyQueue = Lists.newLinkedList();
FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(emptyQueue, magalieUser, building);
@@ -78,4 +86,19 @@
}
+ @Test
+ public void testFindOrderRequestedArticles() {
+
+ FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(magalieUser, building);
+
+ Assert.assertFalse(orderToExecute.isNothingToDo());
+ Assert.assertFalse(orderToExecute.isEverythingUnavailable());
+ Assert.assertFalse(orderToExecute.isDriverLicenseRequired());
+ Assert.assertTrue(orderToExecute.isSuccess());
+
+ Assert.assertNull(orderToExecute.getOldAffectation());
+ Assert.assertNotNull(orderToExecute.getNewAffectation());
+
+ }
+
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -3,8 +3,10 @@
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.Warehouse;
+import com.google.common.collect.Lists;
import java.io.Serializable;
+import java.util.Collection;
/**
* The single object every user will have in its session.
@@ -21,8 +23,11 @@
protected MagalieUser magalieUser;
protected Building building;
- private Warehouse lastUsedDestinationWarehouseForKanbans;
+ protected Warehouse lastUsedDestinationWarehouseForKanbans;
+
+ protected Collection<String> messages;
+
public MagalieUser getMagalieUser() {
return magalieUser;
}
@@ -46,4 +51,16 @@
public void setLastUsedDestinationWarehouseForKanbans(Warehouse lastUsedDestinationWarehouseForKanbans) {
this.lastUsedDestinationWarehouseForKanbans = lastUsedDestinationWarehouseForKanbans;
}
+
+ public Collection<String> getMessages() {
+ if (messages == null) {
+ messages = Lists.newLinkedList();
+ }
+ return messages;
+ }
+
+ public void addMessage(String message) {
+ getMessages().add(message);
+ }
+
}
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-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-16 17:37:40 UTC (rev 99)
@@ -1,6 +1,7 @@
package com.franciaflex.magalie.web.action;
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.StorageMovementOrder;
import com.franciaflex.magalie.services.service.FindOrderToExecuteResult;
@@ -41,35 +42,59 @@
Building building = session.getBuilding();
FindOrderToExecuteResult findOrderToExecuteResult =
- service.getStorageMovementOrder(magalieUser, building);
+ service.findOrderToExecute(magalieUser, building);
+ String result;
+
+ addActionMessage("test");
+
if (findOrderToExecuteResult.isSuccess()) {
+ DeliveredRequestedList oldAffectation = findOrderToExecuteResult.getOldAffectation();
+
+ if (oldAffectation != null) {
+
+ session.addMessage("Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode());
+
+ }
+
+ DeliveredRequestedList newAffectation = findOrderToExecuteResult.getNewAffectation();
+
+ if (newAffectation != null) {
+
+ session.addMessage("Vous venez d'être affecté à la liste " + newAffectation.getRequestedList().getCode());
+
+ }
+
storageMovementOrder = findOrderToExecuteResult.getStorageMovementOrder();
- return SUCCESS;
+ result = SUCCESS;
- }
+ } else {
- if (findOrderToExecuteResult.isNothingToDo()) {
+ if (findOrderToExecuteResult.isNothingToDo()) {
- addActionMessage("Il n'y a aucune demande. Vous n'avez rien à faire");
+ addActionMessage("Il n'y a aucune demande. Vous n'avez rien à faire");
- }
+ }
- if (findOrderToExecuteResult.isDriverLicenseRequired()) {
+ if (findOrderToExecuteResult.isDriverLicenseRequired()) {
- addActionMessage("Il y a des demandes en cours, mais un permis est requis");
+ addActionMessage("Il y a des demandes en cours, mais un permis est requis");
- }
+ }
- if (findOrderToExecuteResult.isEverythingUnavailable()) {
+ if (findOrderToExecuteResult.isEverythingUnavailable()) {
- addActionMessage("Toutes les demandes en cours concernent des articles indisponibles");
+ addActionMessage("Toutes les demandes en cours concernent des articles indisponibles");
+ }
+
+ result = INPUT;
+
}
- return INPUT;
+ return result;
}
Modified: trunk/magalie-web/src/main/resources/log4j.properties
===================================================================
--- trunk/magalie-web/src/main/resources/log4j.properties 2013-04-15 16:18:12 UTC (rev 98)
+++ trunk/magalie-web/src/main/resources/log4j.properties 2013-04-16 17:37:40 UTC (rev 99)
@@ -34,6 +34,9 @@
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n
-log4j.logger.com.franciaflex.magalie=TRACE
-log4j.logger.org.nuiton.web.filter.JpaTransactionFilter=TRACE
+# log4j.logger.org.nuiton.web.filter.JpaTransactionFilter=TRACE
+# log4j.logger.com.franciaflex.magalie=TRACE
+
+log4j.logger.com.franciaflex.magalie.services.service.RequestedArticleService=TRACE
+log4j.logger.com.franciaflex.magalie.services.service.ArticleStorageService=TRACE
1
0
16 Apr '13
Jenkins build became unstable: franciaflex-magalie » MagaLiE :: Services #30
by admin+hudson@codelutin.com 16 Apr '13
by admin+hudson@codelutin.com 16 Apr '13
16 Apr '13
r98 - trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 15 Apr '13
by bleny@users.forge.codelutin.com 15 Apr '13
15 Apr '13
Author: bleny
Date: 2013-04-15 18:18:12 +0200 (Mon, 15 Apr 2013)
New Revision: 98
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add test for RequestedArticleService
Modified:
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
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-15 15:37:46 UTC (rev 97)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-15 16:18:12 UTC (rev 98)
@@ -34,12 +34,18 @@
}
@Test
- public void testGetRequestedArticles() throws Exception {
+ public void testGetRequestedArticles() {
Building building = fixture("B1");
List<RequestedArticle> requestedArticles = service.getRequestedArticles(building);
+ for (RequestedArticle requestedArticle : requestedArticles) {
+
+ Assert.assertEquals(building, requestedArticle.getRequestedList().getBuilding());
+
+ }
+
}
@Test
1
0
r97 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services/exception magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action
by bleny@users.forge.codelutin.com 15 Apr '13
by bleny@users.forge.codelutin.com 15 Apr '13
15 Apr '13
Author: bleny
Date: 2013-04-15 17:37:46 +0200 (Mon, 15 Apr 2013)
New Revision: 97
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
remove usage of exceptions for task assignement
Added:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java
Removed:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java
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/FulfilKanbanService.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/ArticleStorageServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java 2013-04-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -1,54 +0,0 @@
-package com.franciaflex.magalie.services.exception;
-
-import com.franciaflex.magalie.persistence.Locations;
-import com.franciaflex.magalie.persistence.entity.Article;
-import com.franciaflex.magalie.persistence.entity.Location;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.google.common.base.Predicate;
-
-public class RequiredDriverLicenceException extends MagalieException {
-
- protected Article article;
-
- protected MagalieUser magalieUser;
-
- protected Location location;
-
- protected RequiredDriverLicenceException(String message) {
- super(message);
- }
-
- public Article getArticle() {
- return article;
- }
-
- public MagalieUser getMagalieUser() {
- return magalieUser;
- }
-
- public Location getLocation() {
- return location;
- }
-
- public static void throwIfUserCannotAccessLocation(MagalieUser magalieUser, Location location, Article article) throws RequiredDriverLicenceException {
-
- Predicate<Location> isLocationInaccessiblePredicate = Locations.inaccessibleLocationPredicate(magalieUser);
-
- if (isLocationInaccessiblePredicate.apply(location)) {
-
- String message = "requested article " + article
- + " can not be retrieved since user " + magalieUser
- + " has no driver license";
-
- RequiredDriverLicenceException newException = new RequiredDriverLicenceException(message);
-
- newException.magalieUser = magalieUser;
-
- newException.location = location;
-
- newException.article = article;
-
- throw newException;
- }
- }
-}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java 2013-04-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -1,49 +0,0 @@
-package com.franciaflex.magalie.services.exception;
-
-import com.franciaflex.magalie.persistence.entity.Article;
-
-public class UnavailableArticleException extends MagalieException {
-
- protected Article article;
-
- protected double availableQuantity;
-
- protected double requestedQuantity;
-
- protected UnavailableArticleException(String message) {
- super(message);
- }
-
- public static void throwIfRequestMoreThanAvailable(double requestedQuantity, double availableQuantity, Article article) throws UnavailableArticleException {
-
- if (requestedQuantity > availableQuantity) {
-
- String message = "requested article " + article
- + " is not available at expected quantity: requested = " + requestedQuantity
- + " available = " + availableQuantity;
-
- UnavailableArticleException newException = new UnavailableArticleException(message);
-
- newException.article = article;
-
- newException.availableQuantity = availableQuantity;
-
- newException.requestedQuantity = requestedQuantity;
-
- throw newException;
-
- }
- }
-
- public Article getArticle() {
- return article;
- }
-
- public double getAvailableQuantity() {
- return availableQuantity;
- }
-
- public double getRequestedQuantity() {
- return requestedQuantity;
- }
-}
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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -17,8 +17,6 @@
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.franciaflex.magalie.services.StorageMovementTask;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -45,8 +43,7 @@
this.serviceContext = serviceContext;
}
- public StorageMovementOrder bookArticle(BookArticleRequest bookArticleRequest)
- throws UnavailableArticleException, RequiredDriverLicenceException {
+ public BookArticleResult bookArticle(BookArticleRequest bookArticleRequest) {
Preconditions.checkNotNull(bookArticleRequest.getMagalieUser());
@@ -66,21 +63,27 @@
Queue<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles);
- StorageMovementOrder storageMovementOrder = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles);
+ BookArticleResult bookArticleResult = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles);
- MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
- StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao();
+ if (storageMovementOrder != null) {
- dao.persist(storageMovementOrder);
+ MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- persistenceContext.commit();
+ StorageMovementOrderDao dao = persistenceContext.getStorageMovementOrderDao();
- return storageMovementOrder;
+ dao.persist(storageMovementOrder);
+ persistenceContext.commit();
+
+ }
+
+ return bookArticleResult;
+
}
- protected StorageMovementOrder buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) throws RequiredDriverLicenceException, UnavailableArticleException {
+ protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Queue<StoredArticle> sortedStoredArticles) {
Article article = bookArticleRequest.getArticle();
@@ -88,6 +91,10 @@
double requestedQuantity = bookArticleRequest.getRequestedQuantity();
+ BookArticleResult bookArticleResult = new BookArticleResult();
+
+ bookArticleResult.setBookArticleRequest(bookArticleRequest);
+
StorageMovementOrder storageMovementOrder = new StorageMovementOrder();
double quantity = 0;
@@ -106,7 +113,7 @@
Location originLocation = storedArticle.getLocation();
- RequiredDriverLicenceException.throwIfUserCannotAccessLocation(magalieUser, originLocation, article);
+ bookArticleResult.userMustAccessLocation(originLocation);
quantity += quantityWithdrawn;
@@ -129,28 +136,40 @@
}
}
- if (bookArticleRequest.isBestEffortPolicy()) {
+ // TODO brendan 15/04/13 refactor
- log.debug("best effort policy, requested quantity was "
- + requestedQuantity + " but only " + quantity +
- " available");
+ bookArticleResult.setAvailableQuantity(quantity);
- if (storageMovementOrder.getStorageMovements().isEmpty()) {
+ if (storageMovementOrder.getStorageMovements().isEmpty()) {
- UnavailableArticleException.throwIfRequestMoreThanAvailable(requestedQuantity, 0., article);
+ storageMovementOrder = null;
- }
-
} else {
- // strict policy, we must deliver all requested quantity
+ if (quantity < requestedQuantity) {
- UnavailableArticleException.throwIfRequestMoreThanAvailable(requestedQuantity, quantity, article);
+ if (bookArticleRequest.isBestEffortPolicy()) {
+ log.debug("best effort policy, requested quantity was "
+ + requestedQuantity + " but only " + quantity +
+ " available");
+
+ } else {
+
+ // strict policy, we must deliver all requested quantity
+
+ storageMovementOrder = null;
+
+ }
+
+ }
+
}
- return storageMovementOrder;
+ bookArticleResult.setStorageMovementOrder(storageMovementOrder);
+ return bookArticleResult;
+
}
protected Queue<StoredArticle> sortStoredArticlesByPriority(List<StoredArticle> storedArticles) {
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -0,0 +1,72 @@
+package com.franciaflex.magalie.services.service;
+
+import com.franciaflex.magalie.persistence.Locations;
+import com.franciaflex.magalie.persistence.entity.Location;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+import com.google.common.base.Predicate;
+
+public class BookArticleResult {
+
+ protected StorageMovementOrder storageMovementOrder;
+
+ protected BookArticleRequest bookArticleRequest;
+
+ protected double availableQuantity;
+
+ protected Location inaccessibleLocation;
+
+ public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) {
+ this.storageMovementOrder = storageMovementOrder;
+ }
+
+ public StorageMovementOrder getStorageMovementOrder() {
+ return storageMovementOrder;
+ }
+
+ public void setBookArticleRequest(BookArticleRequest bookArticleRequest) {
+ this.bookArticleRequest = bookArticleRequest;
+ }
+
+ public BookArticleRequest getBookArticleRequest() {
+ return bookArticleRequest;
+ }
+
+ public void userMustAccessLocation(Location location) {
+
+ if (inaccessibleLocation == null) {
+
+ MagalieUser magalieUser = bookArticleRequest.getMagalieUser();
+
+ Predicate<Location> isLocationInaccessiblePredicate = Locations.inaccessibleLocationPredicate(magalieUser);
+
+ if (isLocationInaccessiblePredicate.apply(location)) {
+
+ this.inaccessibleLocation = location;
+
+ }
+
+ }
+
+ }
+
+ public boolean isArticleInaccessible() {
+ return inaccessibleLocation != null;
+ }
+
+ public boolean isArticleUnavailable() {
+ return storageMovementOrder == null;
+ }
+
+ public void setAvailableQuantity(double availableQuantity) {
+ this.availableQuantity = availableQuantity;
+ }
+
+ public double getAvailableQuantity() {
+ return availableQuantity;
+ }
+
+ public boolean isSuccess() {
+ return ! isArticleInaccessible() && ! isArticleUnavailable();
+ }
+}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -0,0 +1,44 @@
+package com.franciaflex.magalie.services.service;
+
+import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+
+public class FindOrderToExecuteResult {
+
+ protected StorageMovementOrder storageMovementOrder;
+
+ protected boolean nothingToDo;
+
+ protected boolean driverLicenseRequired;
+
+ public boolean isSuccess() {
+ return storageMovementOrder != null;
+ }
+
+ public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) {
+ this.storageMovementOrder = storageMovementOrder;
+ }
+
+ public StorageMovementOrder getStorageMovementOrder() {
+ return storageMovementOrder;
+ }
+
+ public void setNothingToDo(boolean nothingToDo) {
+ this.nothingToDo = nothingToDo;
+ }
+
+ public boolean isNothingToDo() {
+ return nothingToDo;
+ }
+
+ public void setDriverLicenseRequired(boolean driverLicenseRequired) {
+ this.driverLicenseRequired = driverLicenseRequired;
+ }
+
+ public boolean isDriverLicenseRequired() {
+ return driverLicenseRequired;
+ }
+
+ public boolean isEverythingUnavailable() {
+ return ! driverLicenseRequired && ! nothingToDo;
+ }
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-04-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -8,13 +8,10 @@
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.StorageMovementOrder;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -43,12 +40,10 @@
}
- public StorageMovementOrder fulfilKanbanTask(
+ public BookArticleResult fulfilKanbanTask(
String articleBarcode,
MagalieUser magalieUser,
- String destinationStoreId) throws InvalidMagalieBarcodeException,
- UnavailableArticleException,
- RequiredDriverLicenceException {
+ String destinationStoreId) throws InvalidMagalieBarcodeException {
if (log.isInfoEnabled()) {
log.info(magalieUser + " requested fulfil kanban with barcode " + articleBarcode);
@@ -77,10 +72,10 @@
magalieUser, building, article,
quantityInKanban, destinationLocation, true);
- StorageMovementOrder storageMovementOrder =
+ BookArticleResult bookArticleResult =
articleStorageService.bookArticle(bookArticleRequest);
- return storageMovementOrder;
+ return bookArticleResult;
}
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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -36,8 +36,6 @@
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
@@ -60,7 +58,7 @@
this.serviceContext = serviceContext;
}
- public StorageMovementOrder getStorageMovementOrder(
+ public FindOrderToExecuteResult getStorageMovementOrder(
MagalieUser magalieUser,
Building building) {
@@ -68,13 +66,14 @@
Queue<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles);
- StorageMovementOrder storageMovementOrder =
+
+ FindOrderToExecuteResult findOrderToExecuteResult =
findOrderToExecute(
requestedArticlesByPriority,
magalieUser,
building);
- return storageMovementOrder;
+ return findOrderToExecuteResult;
}
@@ -92,25 +91,23 @@
}
- protected StorageMovementOrder findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
+ protected FindOrderToExecuteResult findOrderToExecute(Queue<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
ArticleStorageService articleStorageService =
serviceContext.newService(ArticleStorageService.class);
- StorageMovementOrder storageMovementOrder = null;
+ BookArticleResult bookArticleResult = null;
- int requestedArticlesCount = requestedArticlesByPriority.size();
+ RequestedArticle requestedArticle = null;
+ boolean success = false;
+
Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
- boolean everythingIsUnavailable = true;
+ boolean driverLicenseRequired = false;
- boolean requiredDriverLicence = false;
+ while ( ! success && requestedArticleIterator.hasNext()) {
- RequestedArticle requestedArticle = null;
-
- while (storageMovementOrder == null && requestedArticleIterator.hasNext()) {
-
requestedArticle = requestedArticleIterator.next();
Article article = requestedArticle.getArticle();
@@ -121,48 +118,18 @@
BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, quantity, destinationLocation, false);
- try {
+ bookArticleResult = articleStorageService.bookArticle(bookArticleRequest);
- storageMovementOrder = articleStorageService.bookArticle(bookArticleRequest);
+ driverLicenseRequired |= bookArticleResult.isArticleInaccessible() && ! bookArticleResult.isArticleUnavailable();
- everythingIsUnavailable = false;
+ success = bookArticleResult.isSuccess();
- } catch (UnavailableArticleException e) {
-
- if (log.isDebugEnabled()) {
- log.debug("cannot work for order", e);
- }
-
- } catch (RequiredDriverLicenceException e) {
-
- if (log.isDebugEnabled()) {
- log.debug("cannot work for order", e);
- }
-
- requiredDriverLicence = true;
-
- }
-
}
- if (storageMovementOrder == null && requestedArticlesCount > 0) {
+ FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
- if (everythingIsUnavailable) {
+ if (success) {
- if (requiredDriverLicence) {
-
- // throw new RequiredDriverLicenceException();
-
- } else {
-
- // throw new UnavailableArticleException();
-
- }
- }
- }
-
- if (storageMovementOrder != null) {
-
Preconditions.checkState(requestedArticle != null);
MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
@@ -173,15 +140,33 @@
newDeliveredRequestedArticle.setRequestedArticle(requestedArticle);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
newDeliveredRequestedArticle.setStorageMovementOrder(storageMovementOrder);
dao.persist(newDeliveredRequestedArticle);
persistenceContext.commit();
+ findOrderToExecuteResult = new FindOrderToExecuteResult();
+
+ findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
+
+ } else {
+
+ if (requestedArticlesByPriority.isEmpty()) {
+
+ findOrderToExecuteResult.setNothingToDo(true);
+
+ } else {
+
+ findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
+
+ }
+
}
- return storageMovementOrder;
+ return findOrderToExecuteResult;
}
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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ArticleStorageServiceTest.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -7,8 +7,6 @@
import com.franciaflex.magalie.persistence.entity.StorageMovement;
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.google.common.collect.Iterables;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -27,6 +25,8 @@
protected Building building;
+ protected Location destinationLocation;
+
@Before
public void setUp() throws ParseException {
@@ -34,71 +34,44 @@
building = fixture("B1");
+ destinationLocation = fixture("location5");
+
service = newService(ArticleStorageService.class);
serviceContext.setDate(new Date(1363948427576l));
}
- protected StorageMovementOrder bookArticle(MagalieUser magalieUser, Building building, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException {
+ @Test
+ public void testThrowUnavailableArticle() throws Exception {
- BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, requestedQuantity, null, false);
-
- return service.bookArticle(bookArticleRequest);
+ MagalieUser alexandre = fixture("alexandre");
+ Article article = fixture("article1");
- }
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 100., destinationLocation, false);
- public StorageMovementOrder bookArticleWithBestEffortPolicy(
- MagalieUser magalieUser, Building building, Article article, double requestedQuantity, Location destinationLocation)
- throws RequiredDriverLicenceException, UnavailableArticleException {
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, requestedQuantity, null, true);
+ Assert.assertFalse(bookArticleResult.isSuccess());
- return service.bookArticle(bookArticleRequest);
+ Assert.assertTrue(bookArticleResult.isArticleUnavailable());
}
@Test
- public void testThrowUnavailableArticle() throws Exception {
+ public void testThrowRequiredDriverLicenceException() throws Exception {
- MagalieUser alexandre = fixture("alexandre");
+ MagalieUser basile = fixture("basile");
Article article = fixture("article1");
- StorageMovementOrder storageMovementOrder;
- try {
- storageMovementOrder = bookArticle(alexandre, building, article, 100.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.assertEquals(70., e.getAvailableQuantity(), DELTA);
- }
- }
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 70., destinationLocation, false);
- @Test
- public void testThrowRequiredDriverLicenceException() throws Exception {
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
- MagalieUser basile = fixture("basile");
- Article article = fixture("article1");
- Location location2 = fixture("location2");
- StorageMovementOrder storageMovementOrder;
+ Assert.assertFalse(bookArticleResult.isSuccess());
+ Assert.assertTrue(bookArticleResult.isArticleInaccessible());
+ Assert.assertFalse(bookArticleResult.isArticleUnavailable());
- try {
- storageMovementOrder = bookArticle(basile, building, article, 70.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- Assert.fail();
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.assertEquals(location2.getId(), e.getLocation().getId());
- }
}
@Test
@@ -106,26 +79,17 @@
MagalieUser basile = fixture("basile");
Article article = fixture("article2");
- StorageMovementOrder storageMovementOrder = null;
- try {
- storageMovementOrder = bookArticle(basile, building, article, 5.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- }
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(basile, building, article, 5., destinationLocation, false);
- Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
+ 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
@@ -133,30 +97,21 @@
MagalieUser alexandre = fixture("alexandre");
Article article = fixture("article1");
- StorageMovementOrder storageMovementOrder = null;
- try {
- storageMovementOrder = bookArticle(alexandre, building, article, 50.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- }
+ 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
@@ -167,13 +122,14 @@
Article article = fixture("article1");
- StorageMovementOrder storageMovementOrder = null;
+ {
+ BookArticleRequest bookArticleRequest = new BookArticleRequest(alexandre, building, article, 30., destinationLocation, false);
+ BookArticleResult bookArticleResult = service.bookArticle(bookArticleRequest);
+ StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
- try {
- storageMovementOrder = bookArticle(alexandre, building, article, 30.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
+ 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);
@@ -181,37 +137,21 @@
StorageMovement storageMovement2 = Iterables.get(storageMovementOrder.getStorageMovements(), 1, null);
Assert.assertEquals(10., storageMovement2.getExpectedQuantity(), DELTA);
Assert.assertEquals("A1", storageMovement2.getOriginLocation().getCode());
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
}
- try {
- storageMovementOrder = bookArticle(cathy, building, article, 30.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
+ {
+
+ 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());
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
}
}
@@ -228,28 +168,21 @@
LocationErrorsService locationErrorsService = newService(LocationErrorsService.class);
locationErrorsService.reportError(location2, alexandre);
- try {
- StorageMovementOrder storageMovementOrder = bookArticle(cathy, building, article, 30.);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- 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());
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- }
+ 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
@@ -259,26 +192,18 @@
Article article = fixture("article2");
Location location1 = fixture("location1");
- try {
- StorageMovementOrder storageMovementOrder = bookArticleWithBestEffortPolicy(alexandre, building, article, 30., null);
- if (log.isDebugEnabled()) {
- log.debug("storageMovementOrder = " + storageMovementOrder);
- }
- 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());
- } catch (RequiredDriverLicenceException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- } catch (UnavailableArticleException e) {
- if (log.isDebugEnabled()) {
- log.debug("exception raised = " + e);
- }
- Assert.fail();
- }
+ 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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -4,6 +4,7 @@
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
+import com.google.common.collect.Lists;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
@@ -54,10 +55,21 @@
}
@Test
- public void testName() {
+ public void testFindOrderWhenNoRequestedArticles() {
MagalieUser magalieUser = fixture("bruno");
+ Building building = fixture("B1");
+ Queue<RequestedArticle> emptyQueue = Lists.newLinkedList();
+
+ FindOrderToExecuteResult orderToExecute = service.findOrderToExecute(emptyQueue, magalieUser, building);
+
+ Assert.assertTrue(orderToExecute.isNothingToDo());
+ Assert.assertFalse(orderToExecute.isEverythingUnavailable());
+ Assert.assertFalse(orderToExecute.isSuccess());
+ Assert.assertFalse(orderToExecute.isDriverLicenseRequired());
+
}
+
}
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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -3,6 +3,7 @@
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+import com.franciaflex.magalie.services.service.FindOrderToExecuteResult;
import com.franciaflex.magalie.services.service.RequestedArticleService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -39,20 +40,37 @@
Building building = session.getBuilding();
- storageMovementOrder = service.getStorageMovementOrder(magalieUser, building);
+ FindOrderToExecuteResult findOrderToExecuteResult =
+ service.getStorageMovementOrder(magalieUser, building);
- String result = SUCCESS;
+ if (findOrderToExecuteResult.isSuccess()) {
- if (storageMovementOrder == null) {
+ storageMovementOrder = findOrderToExecuteResult.getStorageMovementOrder();
- addActionMessage("Aucun article");
+ return SUCCESS;
- result = INPUT;
+ }
+ if (findOrderToExecuteResult.isNothingToDo()) {
+
+ addActionMessage("Il n'y a aucune demande. Vous n'avez rien à faire");
+
}
- return result;
+ if (findOrderToExecuteResult.isDriverLicenseRequired()) {
+ addActionMessage("Il y a des demandes en cours, mais un permis est requis");
+
+ }
+
+ if (findOrderToExecuteResult.isEverythingUnavailable()) {
+
+ addActionMessage("Toutes les demandes en cours concernent des articles indisponibles");
+
+ }
+
+ return INPUT;
+
}
public String getStorageMovementOrderId() {
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-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -5,8 +5,7 @@
import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
+import com.franciaflex.magalie.services.service.BookArticleResult;
import com.franciaflex.magalie.services.service.FulfilKanbanService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -96,9 +95,11 @@
// save used destination warehouse to propose it by default on next kanban
session.setLastUsedDestinationWarehouseForKanbans(destinationWarehouse);
+ BookArticleResult bookArticleResult;
+
try {
- storageMovementOrder = service.fulfilKanbanTask(articleBarcode, magalieUser, destinationWarehouseId);
+ bookArticleResult = service.fulfilKanbanTask(articleBarcode, magalieUser, destinationWarehouseId);
} catch (InvalidMagalieBarcodeException e) {
@@ -106,20 +107,26 @@
return INPUT;
- } catch (UnavailableArticleException e) {
+ }
+ if (bookArticleResult.isArticleUnavailable()) {
+
addActionError("Cet article n'est pas disponible");
return INPUT;
- } catch (RequiredDriverLicenceException e) {
+ }
+ if (bookArticleResult.isArticleInaccessible()) {
+
addActionError("Un permis est nécessaire pour obtenir cet article");
return INPUT;
}
+ storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+
return SUCCESS;
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-15 12:51:16 UTC (rev 96)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-04-15 15:37:46 UTC (rev 97)
@@ -27,8 +27,6 @@
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.franciaflex.magalie.services.StorageMovementTask;
-import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.franciaflex.magalie.services.service.ArticleStorageService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -73,7 +71,7 @@
}
@Override
- public String input() throws RequiredDriverLicenceException, UnavailableArticleException {
+ public String input() {
Preconditions.checkNotNull(storageMovementOrderId);
1
0