Franciaflex-magalie-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 438 discussions
r376 - trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service
by bleny@users.forge.codelutin.com 27 Aug '13
by bleny@users.forge.codelutin.com 27 Aug '13
27 Aug '13
Author: bleny
Date: 2013-08-27 10:45:30 +0200 (Tue, 27 Aug 2013)
New Revision: 376
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix tests compilation
Modified:
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-08-26 15:58:30 UTC (rev 375)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-08-27 08:45:30 UTC (rev 376)
@@ -147,7 +147,7 @@
Assert.assertEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 2).getWarehouse());
Assert.assertEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 3).getWarehouse());
- for (Location location : receptionTask.getLocations()) {
+ for (ReceptionLocation location : receptionTask.getLocations()) {
if (log.isDebugEnabled()) {
log.debug("location " + location.getBarcode());
@@ -349,7 +349,7 @@
long time = System.currentTimeMillis();
- Set<Location> locations = service.getReceptionTask(receivedArticle.getId()).getLocations();
+ Set<ReceptionLocation> locations = service.getReceptionTask(receivedArticle.getId()).getLocations();
if (log.isTraceEnabled()) {
log.trace("getting a result of " + locations.size() +
1
0
r375 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action magalie-web/src/main/webapp/WEB-INF/content magalie-web/src/main/webapp/css
by bleny@users.forge.codelutin.com 26 Aug '13
by bleny@users.forge.codelutin.com 26 Aug '13
26 Aug '13
Author: bleny
Date: 2013-08-26 17:58:30 +0200 (Mon, 26 Aug 2013)
New Revision: 375
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fixes #2998 show listCode on withdraw screen, after confirmation of withdraw for requestedArticle jump to another requestedArticle
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.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/WithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/css/magalie-ck3x-reduced.css
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-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-08-26 15:58:30 UTC (rev 375)
@@ -467,7 +467,7 @@
}
- public RequestedList getAffectationForUser(MagalieUser magalieUser) {
+ public Optional<RequestedList> getAffectationForUser(MagalieUser magalieUser) {
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
@@ -475,15 +475,19 @@
DeliveredRequestedList deliveredRequestedList = dao.findByAffectedTo(magalieUser);
- RequestedList requestedList = null;
+ Optional<RequestedList> affectationForUser;
- if (deliveredRequestedList != null) {
+ if (deliveredRequestedList == null) {
- requestedList = deliveredRequestedList.getRequestedList();
+ affectationForUser = Optional.absent();
+ } else {
+
+ affectationForUser = Optional.of(deliveredRequestedList.getRequestedList());
+
}
- return requestedList;
+ return affectationForUser;
}
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-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-26 15:58:30 UTC (rev 375)
@@ -32,7 +32,9 @@
import com.franciaflex.magalie.web.Activity;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.opensymphony.xwork2.Preparable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.convention.annotation.Result;
@@ -43,7 +45,7 @@
@Results({
@Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "requestedArticleId", "${requestedArticleId}" })
})
-public class DeliverRequestedArticleAction extends MagalieActionSupport {
+public class DeliverRequestedArticleAction extends MagalieActionSupport implements Preparable {
private static final Log log = LogFactory.getLog(DeliverRequestedArticleAction.class);
@@ -68,16 +70,27 @@
}
@Override
- public String input() {
+ public void prepare() {
MagalieUser magalieUser = session.getMagalieUser();
- requestedList = service.getAffectationForUser(magalieUser);
+ Optional<RequestedList> affectationForUser = service.getAffectationForUser(magalieUser);
+ if (affectationForUser.isPresent()) {
+
+ requestedList = affectationForUser.get();
+
+ }
+
Building building = session.getBuilding();
listTypes = service.getListTypes(building);
+ }
+
+ @Override
+ public String input() {
+
return INPUT;
}
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-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-08-26 15:58:30 UTC (rev 375)
@@ -47,7 +47,7 @@
@Results({
@Result(name="KANBANS", type="redirectAction", params = { "actionName", "fulfil-kanban!input" }),
- @Result(name="REQUESTED_LISTS", type="redirectAction", params = { "actionName", "deliver-requested-article!input" })
+ @Result(name="REQUESTED_LISTS", type="redirectAction", params = { "actionName", "deliver-requested-article", "listType", "%{listType}" })
})
public class WithdrawItemAction extends MagalieActionSupport implements Preparable {
@@ -71,6 +71,10 @@
protected Article article;
+ protected String requestedListCode;
+
+ protected String listType;
+
public void setArticleId(String articleId) {
this.articleId = articleId;
}
@@ -120,6 +124,8 @@
articleId = article.getId();
+ requestedListCode = requestedArticle.getRequestedList().getCode();
+
}
Preconditions.checkNotNull(articleId);
@@ -144,6 +150,10 @@
return expectedQuantity;
}
+ public String getRequestedListCode() {
+ return requestedListCode;
+ }
+
public String getModelAsJson() throws JSONException {
Map<String,Object> model = Maps.newHashMap();
@@ -195,12 +205,25 @@
articleStorageService.confirmStorageMovement(confirmation, magalieUser);
+ if (confirmation.getRequestedArticleId() != null) {
+
+ RequestedArticle requestedArticle =
+ requestedArticleService.getRequestedArticle(confirmation.getRequestedArticleId());
+
+ listType = requestedArticle.getRequestedList().getListType();
+
+ }
+
String resultName = session.getActivity().name();
return resultName;
}
+ public String getListType() {
+ return listType;
+ }
+
public String cancel() {
MagalieUser magalieUser = session.getMagalieUser();
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-08-26 15:58:30 UTC (rev 375)
@@ -46,6 +46,12 @@
<s:a href="%{removeUserAffectationUrl}" cssClass="btn btn-block" id="removeUserAffectationLink">Abandonner la liste (Esc)</s:a>
</s:if>
<s:else>
+ <script type="text/javascript">
+ $(document).ready(function () {
+ bindKey('Esc', function(){ redirectTo($('#removeUserAffectationLink'));});
+ });
+ </script>
+
<s:if test="listTypes.empty">
Aucune liste à servir à traiter
</s:if>
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-08-26 15:58:30 UTC (rev 375)
@@ -38,6 +38,11 @@
<header>
<ul class="oneItemPerLine">
+ <s:if test="%{requestedListCode != null}">
+ <li>
+ Liste : <s:property value="requestedListCode" />
+ </li>
+ </s:if>
<li>
Réf. : <s:property value="article.code" />
</li>
Modified: trunk/magalie-web/src/main/webapp/css/magalie-ck3x-reduced.css
===================================================================
--- trunk/magalie-web/src/main/webapp/css/magalie-ck3x-reduced.css 2013-08-26 10:09:03 UTC (rev 374)
+++ trunk/magalie-web/src/main/webapp/css/magalie-ck3x-reduced.css 2013-08-26 15:58:30 UTC (rev 375)
@@ -64,11 +64,14 @@
margin-bottom: 0px;
}
-#storageMovements,
#locations {
min-height: 100px; /* 5 * 20px for each element */
}
+#storageMovements {
+ min-height: 80px; /* 4 * 20px for each element */
+}
+
#storageMovements div,
#locations dl {
margin: 0;
1
0
r374 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 26 Aug '13
by bleny@users.forge.codelutin.com 26 Aug '13
26 Aug '13
Author: bleny
Date: 2013-08-26 12:09:03 +0200 (Mon, 26 Aug 2013)
New Revision: 374
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fixes #2991 show already stored quantity
Added:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionLocation.java
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LocationJsonAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/receive-article-input.jsp
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionLocation.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionLocation.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionLocation.java 2013-08-26 10:09:03 UTC (rev 374)
@@ -0,0 +1,52 @@
+package com.franciaflex.magalie.services.service;
+
+import com.franciaflex.magalie.persistence.entity.Location;
+import com.franciaflex.magalie.persistence.entity.Warehouse;
+
+public class ReceptionLocation {
+
+ protected Location location;
+
+ protected double alreadyStoredQuantity;
+
+ public ReceptionLocation(Location location) {
+ this.location = location;
+ }
+
+ public String getBarcode() {
+ return location.getBarcode();
+ }
+
+ public String getCode() {
+ return location.getCode();
+ }
+
+ public boolean isRequiredCraneMan() {
+ return location.isRequiredCraneMan();
+ }
+
+ public Warehouse getWarehouse() {
+ return location.getWarehouse();
+ }
+
+ public boolean isFullLocation() {
+ return location.isFullLocation();
+ }
+
+ public int getRequiredAccreditationLevel() {
+ return location.getRequiredAccreditationLevel();
+ }
+
+ public String getId() {
+ return location.getId();
+ }
+
+ public double getAlreadyStoredQuantity() {
+ return alreadyStoredQuantity;
+ }
+
+ public void setAlreadyStoredQuantity(double alreadyStoredQuantity) {
+ this.alreadyStoredQuantity = alreadyStoredQuantity;
+ }
+
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-08-21 13:59:15 UTC (rev 373)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-08-26 10:09:03 UTC (rev 374)
@@ -52,9 +52,11 @@
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
@@ -195,6 +197,10 @@
LocationErrorsService locationErrorsService =
serviceContext.newService(LocationErrorsService.class);
+ // a predicate to remove reception locations because it's stupid to
+ // move an article from reception location to another reception location
+ // also, remove full locations and locations reported in error
+
Predicate<Location> isAcceptableForReception =
Predicates.and(
ImmutableSet.of(
@@ -204,24 +210,39 @@
)
);
+ ReceptionTask receptionTask = new ReceptionTask(storedArticle, quantity);
+
// first step, add fixed locations for this article first
- Set<Location> preferredLocations = getPreferredLocations(warehouse, article);
+ Set<Location> fixedLocations = article.getFixedLocationsInBuilding(warehouse.getBuilding());
- Iterable<Location> acceptablePreferredLocations = Iterables.filter(preferredLocations, isAcceptableForReception);
+ Iterable<Location> acceptableFixedLocations = Iterables.filter(fixedLocations, isAcceptableForReception);
- // second step, add extra locations
+ receptionTask.setFixedLocations(acceptableFixedLocations);
+ // second step, add locations with already stored quantities
+
+ Set<StoredArticle> alreadyUsedLocations = getAlreadyUsedLocations(warehouse, article);
+
+ Iterable<StoredArticle> acceptableAlreadyUsedLocations =
+ Iterables.filter(
+ alreadyUsedLocations,
+ Predicates.compose(isAcceptableForReception, StoredArticles.getLocationFunction()));
+
+ receptionTask.setAlreadyUsedLocations(acceptableAlreadyUsedLocations);
+
+ // third step, add extra locations
+
Set<Location> extraLocations = getExtraLocations(warehouse);
Iterable<Location> acceptableExtraLocations = Iterables.filter(extraLocations, isAcceptableForReception);
- ReceptionTask receptionTask = new ReceptionTask(storedArticle, quantity, acceptablePreferredLocations, acceptableExtraLocations);
+ receptionTask.setExtraLocations(acceptableExtraLocations);
if (log.isDebugEnabled()) {
log.debug("locations to receive articles for article "
+ article + " in warehouse " + warehouse + " are acceptable = "
- + StringUtils.join(acceptablePreferredLocations, ", ") +
+ + StringUtils.join(acceptableAlreadyUsedLocations, ", ") +
" extra = " + StringUtils.join(acceptableExtraLocations, ", "));
}
@@ -243,27 +264,15 @@
// add all locations in the same warehouse
locations.addAll(locationDao.findAllWithoutReception(warehouse, LIMIT_EXTRA_LOCATIONS_TO_50));
- // fourth step, remove reception locations because it's stupid to
- // move an article from reception location to another reception location
- // also, remove full locations and locations reported in error
-
return locations;
}
- protected Set<Location> getPreferredLocations(Warehouse warehouse, Article article) {
+ protected Set<StoredArticle> getAlreadyUsedLocations(Warehouse warehouse, Article article) {
- // first step, add fixed locations for this article first
+ // add locations where there is already quantities stored
+ // we will suggest locations with highest quantities first
- Set<Location> locations = Sets.newLinkedHashSet();
-
- Set<Location> fixedLocationsInBuilding =
- article.getFixedLocationsInBuilding(warehouse.getBuilding());
-
- locations.addAll(fixedLocationsInBuilding);
-
- // second step, add locations where there is already quantities stored
- // we will suggest locations with highest quantities first
ArticleStorageService articleStorageService =
serviceContext.newService(ArticleStorageService.class);
@@ -280,14 +289,8 @@
Iterables.addAll(sortedStoredArticles, storedArticles);
- Iterables.addAll(
- locations,
- Iterables.transform(
- sortedStoredArticles,
- StoredArticles.getLocationFunction()));
+ return sortedStoredArticles;
- return locations;
-
}
public ReceptionTask getReceptionTaskForPreparedArticleReception(Building building, String barcode) throws PreparedArticleReceptionAlreadyStoredException, InvalidMagalieBarcodeException {
@@ -404,8 +407,12 @@
}
- public Location getLocationToStoreSomething(Building building, MagalieUser magalieUser, String locationBarcode, String articleId) throws InvalidMagalieBarcodeException {
+ public ReceptionLocation getReceptionLocation(Building building, MagalieUser magalieUser, String locationBarcode, String articleId) throws InvalidMagalieBarcodeException {
+ ArticleJpaDao articleDao = serviceContext.getPersistenceContext().getArticleDao();
+
+ Article article = articleDao.findById(articleId);
+
MagalieBarcodeService magalieBarcodeService =
serviceContext.newService(MagalieBarcodeService.class);
@@ -420,22 +427,40 @@
LocationErrorsService locationErrorsService =
serviceContext.newService(LocationErrorsService.class);
- ArticleJpaDao articleDao = serviceContext.getPersistenceContext().getArticleDao();
+ locationErrorsService.reportError(location, article, magalieUser);
- Article article = articleDao.findById(articleId);
+ }
- locationErrorsService.reportError(location, article, magalieUser);
+ ReceptionLocation receptionLocation = new ReceptionLocation(location);
+ // on essaie de déterminer la quantité qui se trouve dans cet emplacement
+
+ ArticleStorageService articleStorageService =
+ serviceContext.newService(ArticleStorageService.class);
+
+ Iterable<StoredArticle> storedArticles =
+ articleStorageService.getStoredArticles(building, article);
+
+ ImmutableMap<Location,StoredArticle> storedArticlesByLocation =
+ Maps.uniqueIndex(storedArticles, StoredArticles.getLocationFunction());
+
+ StoredArticle storedArticle = storedArticlesByLocation.get(location);
+
+ if (storedArticle == null) {
+ receptionLocation.setAlreadyStoredQuantity(0.);
+ } else {
+ receptionLocation.setAlreadyStoredQuantity(storedArticle.getQuantity());
}
- return location;
+ return receptionLocation;
}
/**
* On cherche à savoir si pour un storedArticle donné, il y a encore des articles à recevoir pour le même fournisseur
*/
- public Optional<Supplier> isSupplierHaveOtherArticlesToReceive(Building building, String storedArticleId) {
+ public Optional<Supplier> isSupplierHaveOtherArticlesToReceive(Building building, String
+ storedArticleId) {
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java 2013-08-21 13:59:15 UTC (rev 373)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionTask.java 2013-08-26 10:09:03 UTC (rev 374)
@@ -23,9 +23,13 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.StoredArticles;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.StoredArticle;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
@@ -33,36 +37,46 @@
public class ReceptionTask {
- protected boolean userMustChooseExtraLocation;
-
protected StoredArticle storedArticle;
protected double quantity;
- protected Iterable<Location> preferredLocations;
+ protected Iterable<Location> fixedLocations;
+ protected Iterable<StoredArticle> alreadyUsedLocations;
+
protected Iterable<Location> extraLocations;
- protected Set<Location> locations;
-
- public ReceptionTask(StoredArticle storedArticle, double quantity, Iterable<Location> preferredLocations, Iterable<Location> extraLocations) {
+ public ReceptionTask(StoredArticle storedArticle, double quantity) {
this.storedArticle = storedArticle;
this.quantity = quantity;
- this.preferredLocations = preferredLocations;
- this.extraLocations = extraLocations;
}
public StoredArticle getStoredArticle() {
return storedArticle;
}
- public Set<Location> getLocations() {
- if (locations == null) {
- locations = Sets.newLinkedHashSet();
- Iterables.addAll(locations, preferredLocations);
- Iterables.addAll(locations, extraLocations);
+ public Set<ReceptionLocation> getLocations() {
+ ImmutableMap<Location, StoredArticle> locationToStoredArticle =
+ Maps.uniqueIndex(alreadyUsedLocations, StoredArticles.getLocationFunction());
+ Set<ReceptionLocation> receptionLocations = Sets.newLinkedHashSet();
+ ImmutableSet<Location> allLocations =
+ ImmutableSet.<Location> builder()
+ .addAll(fixedLocations)
+ .addAll(Iterables.transform(alreadyUsedLocations, StoredArticles.getLocationFunction()))
+ .addAll(extraLocations)
+ .build();
+ for (Location location : allLocations) {
+ ReceptionLocation receptionLocation = new ReceptionLocation(location);
+ StoredArticle storedArticleInLocation = locationToStoredArticle.get(location);
+ if (storedArticleInLocation == null) {
+ receptionLocation.setAlreadyStoredQuantity(0.);
+ } else {
+ receptionLocation.setAlreadyStoredQuantity(storedArticleInLocation.getQuantity());
+ }
+ receptionLocations.add(receptionLocation);
}
- return locations;
+ return receptionLocations;
}
public double getQuantity() {
@@ -70,9 +84,21 @@
}
public boolean isUserMustChooseExtraLocation() {
- return Iterables.isEmpty(preferredLocations);
+ return Iterables.isEmpty(fixedLocations) && Iterables.isEmpty(alreadyUsedLocations);
}
+ public void setFixedLocations(Iterable<Location> fixedLocations) {
+ this.fixedLocations = fixedLocations;
+ }
+
+ public void setAlreadyUsedLocations(Iterable<StoredArticle> alreadyUsedLocations) {
+ this.alreadyUsedLocations = alreadyUsedLocations;
+ }
+
+ public void setExtraLocations(Iterable<Location> extraLocations) {
+ this.extraLocations = extraLocations;
+ }
+
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-08-21 13:59:15 UTC (rev 373)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-08-26 10:09:03 UTC (rev 374)
@@ -363,7 +363,7 @@
Location fullLocation = fixture("locationFull1");
- service.getLocationToStoreSomething(building, magalieUser, fullLocation.getBarcode(), article.getId());
+ service.getReceptionLocation(building, magalieUser, fullLocation.getBarcode(), article.getId());
EntityManager entityManager = getJpaEntityManagerRule().newEntityManager();
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LocationJsonAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LocationJsonAction.java 2013-08-21 13:59:15 UTC (rev 373)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/LocationJsonAction.java 2013-08-26 10:09:03 UTC (rev 374)
@@ -24,9 +24,9 @@
*/
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.services.exception.InvalidMagalieBarcodeException;
+import com.franciaflex.magalie.services.service.ReceptionLocation;
import com.franciaflex.magalie.services.service.ReceptionService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -44,14 +44,14 @@
protected ReceptionService service;
- protected Location location;
-
protected String locationBarcode;
protected MagalieSession session;
protected String articleId;
+ protected ReceptionLocation receptionLocation;
+
public void setSession(MagalieSession session) {
this.session = session;
}
@@ -79,14 +79,14 @@
Building building = session.getBuilding();
- location = service.getLocationToStoreSomething(building, magalieUser, locationBarcode, articleId);
+ receptionLocation = service.getReceptionLocation(building, magalieUser, locationBarcode, articleId);
return SUCCESS;
}
- public Location getLocation() {
- return location;
+ public ReceptionLocation getReceptionLocation() {
+ return receptionLocation;
}
}
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/receive-article-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/receive-article-input.jsp 2013-08-21 13:59:15 UTC (rev 373)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/receive-article-input.jsp 2013-08-26 10:09:03 UTC (rev 374)
@@ -66,6 +66,6 @@
<div>
<span data="warehouse.code"></span>
<span data="code"></span>
- <span data="stored">0</span> <s:property value="receptionTask.storedArticle.article.unit" />
+ <span data="stored">0</span> / <span data="alreadyStoredQuantity"></span> <s:property value="receptionTask.storedArticle.article.unit" />
</div>
</div>
1
0
r373 - in trunk: magalie-persistence/src/test/java/com/franciaflex/magalie/persistence magalie-web/src/main/java/com/franciaflex/magalie/web/action
by bleny@users.forge.codelutin.com 21 Aug '13
by bleny@users.forge.codelutin.com 21 Aug '13
21 Aug '13
Author: bleny
Date: 2013-08-21 15:59:15 +0200 (Wed, 21 Aug 2013)
New Revision: 373
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
remove wrong 'throws Exception' clauses
Modified:
trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/persistence/SuppliersTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseCompanyAction.java
Modified: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/persistence/SuppliersTest.java
===================================================================
--- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/persistence/SuppliersTest.java 2013-08-21 13:24:48 UTC (rev 372)
+++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/persistence/SuppliersTest.java 2013-08-21 13:59:15 UTC (rev 373)
@@ -36,7 +36,7 @@
public class SuppliersTest {
@Test
- public void testOrderByNamesComparator() throws Exception {
+ public void testOrderByNamesComparator() {
ImmutableList<String> supplierNames = ImmutableList.of("d", "a", "c", "b");
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseCompanyAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseCompanyAction.java 2013-08-21 13:24:48 UTC (rev 372)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseCompanyAction.java 2013-08-21 13:59:15 UTC (rev 373)
@@ -43,14 +43,16 @@
}
@Override
- public String execute() throws Exception {
+ public String execute() {
companies = service.getAllCompanies();
return SUCCESS;
+
}
public List<Company> getCompanies() {
return companies;
}
+
}
1
0
r372 - trunk/magalie-web/src/main/java/com/franciaflex/magalie/web
by bleny@users.forge.codelutin.com 21 Aug '13
by bleny@users.forge.codelutin.com 21 Aug '13
21 Aug '13
Author: bleny
Date: 2013-08-21 15:24:48 +0200 (Wed, 21 Aug 2013)
New Revision: 372
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add some javadoc
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java 2013-08-21 13:14:28 UTC (rev 371)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java 2013-08-21 13:24:48 UTC (rev 372)
@@ -13,6 +13,10 @@
import java.util.Map;
import java.util.Set;
+/**
+ * C'est une implémentation de {@link MagalieUserNotificationContext} qui stocke les messages
+ * dans une Multimap indexée par les utilisateurs
+ */
public class StrutsActionMessagesUserNotificationContext implements MagalieUserNotificationContext {
protected SetMultimap<MagalieUser, String> usersNotifications;
1
0
r371 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao 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 21 Aug '13
by bleny@users.forge.codelutin.com 21 Aug '13
21 Aug '13
Author: bleny
Date: 2013-08-21 15:14:28 +0200 (Wed, 21 Aug 2013)
New Revision: 371
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2999 show only listTypes in the same building
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java 2013-08-21 13:08:11 UTC (rev 370)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java 2013-08-21 13:14:28 UTC (rev 371)
@@ -23,11 +23,13 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Building;
+
import java.util.List;
/** @author bleny */
public interface RequestedListDao {
- List<String> findAllDistinctListTypes();
+ List<String> findAllDistinctListTypes(Building building);
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java 2013-08-21 13:08:11 UTC (rev 370)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java 2013-08-21 13:14:28 UTC (rev 371)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus;
import javax.persistence.EntityManager;
@@ -36,15 +37,16 @@
}
@Override
- public List<String> findAllDistinctListTypes() { // TODO brendan 20/08/13 add a building parameter
+ public List<String> findAllDistinctListTypes(Building building) {
TypedQuery<String> query =
entityManager.createQuery(
" select distinct rl.listType"
+ " from RequestedList rl"
- + " where rl not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :affectedDeliveredRequestedListStatus OR drl.status = :completeDeliveredRequestedListStatus)"
+ + " where rl.building = :building and rl not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :affectedDeliveredRequestedListStatus OR drl.status = :completeDeliveredRequestedListStatus)"
, String.class);
query.setParameter("affectedDeliveredRequestedListStatus", DeliveredRequestedListStatus.AFFECTED);
query.setParameter("completeDeliveredRequestedListStatus", DeliveredRequestedListStatus.COMPLETE);
+ query.setParameter("building", building);
return query.getResultList();
}
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-08-21 13:08:11 UTC (rev 370)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-08-21 13:14:28 UTC (rev 371)
@@ -487,13 +487,13 @@
}
- public List<String> getListTypes() {
+ public List<String> getListTypes(Building building) {
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
RequestedListJpaDao dao = persistenceContext.getRequestedListDao();
- List<String> allDistinctListTypes = dao.findAllDistinctListTypes();
+ List<String> allDistinctListTypes = dao.findAllDistinctListTypes(building);
return allDistinctListTypes;
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-08-21 13:08:11 UTC (rev 370)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-08-21 13:14:28 UTC (rev 371)
@@ -81,7 +81,7 @@
@Test
public void testListTypes() {
- List<String> listTypes = service.getListTypes();
+ List<String> listTypes = service.getListTypes(building);
Assert.assertEquals(1, listTypes.size());
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-08-21 13:08:11 UTC (rev 370)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-21 13:14:28 UTC (rev 371)
@@ -74,8 +74,10 @@
requestedList = service.getAffectationForUser(magalieUser);
- listTypes = service.getListTypes();
+ Building building = session.getBuilding();
+ listTypes = service.getListTypes(building);
+
return INPUT;
}
1
0
r370 - in trunk: magalie-services magalie-services/src/main/java/com/franciaflex/magalie/services 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 magalie-web/src/main/java/com/franciaflex/magalie/web/action magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 21 Aug '13
by bleny@users.forge.codelutin.com 21 Aug '13
21 Aug '13
Author: bleny
Date: 2013-08-21 15:08:11 +0200 (Wed, 21 Aug 2013)
New Revision: 370
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fixes #2999 introduce notification context in services and use it
Added:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUserNotificationContext.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java
Modified:
trunk/magalie-services/pom.xml
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.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/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
Modified: trunk/magalie-services/pom.xml
===================================================================
--- trunk/magalie-services/pom.xml 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/pom.xml 2013-08-21 13:08:11 UTC (rev 370)
@@ -81,6 +81,11 @@
<artifactId>junit</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ </dependency>
+
</dependencies>
<build>
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -26,6 +26,7 @@
import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.MagalieTechnicalException;
import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext;
+import com.google.common.base.Preconditions;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -37,6 +38,8 @@
protected JpaMagaliePersistenceContext persistenceContext;
+ protected MagalieUserNotificationContext userNotificationContext;
+
@Override
public MagalieApplicationConfig getMagalieApplicationConfig() {
return magalieApplicationConfig;
@@ -95,4 +98,17 @@
public void setPersistenceContext(JpaMagaliePersistenceContext persistenceContext) {
this.persistenceContext = persistenceContext;
}
+
+ @Override
+ public MagalieUserNotificationContext getUserNotificationContext() {
+ Preconditions.checkState(
+ userNotificationContext != null,
+ "user notification context not provided");
+ return userNotificationContext;
+ }
+
+ public void setUserNotificationContext(MagalieUserNotificationContext userNotificationContext) {
+ this.userNotificationContext = userNotificationContext;
+ }
+
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -41,4 +41,6 @@
MagalieApplicationConfig getMagalieApplicationConfig();
+ MagalieUserNotificationContext getUserNotificationContext();
+
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUserNotificationContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUserNotificationContext.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUserNotificationContext.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -0,0 +1,22 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+
+/**
+ * Ce contrat représente pour les services une façon de notifier un utilisateur
+ * pour différent messages.
+ *
+ * @author bleny
+ */
+public interface MagalieUserNotificationContext {
+
+ void notifyUnaffectedRequestedListDriverLicenseRequired(MagalieUser magalieUser, DeliveredRequestedList oldAffectation);
+
+ void notifyUnaffectedRequestedListForEverythingUnavailable(MagalieUser magalieUser, DeliveredRequestedList oldAffectation);
+
+ void notifyUnaffectedRequestedListForCompletedRequestedList(MagalieUser magalieUser, DeliveredRequestedList oldAffectation);
+
+ void notifyAffectedRequestedList(MagalieUser magalieUser, DeliveredRequestedList newAffectation);
+
+}
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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -274,7 +274,7 @@
RequestedArticleService requestedArticleService =
serviceContext.newService(RequestedArticleService.class);
- requestedArticleService.onStorageMovementConfirmation(confirmation, confirmedStorageMovements);
+ requestedArticleService.onStorageMovementConfirmation(magalieUser, confirmation, confirmedStorageMovements);
persistenceContext.commit();
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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -41,6 +41,7 @@
import com.franciaflex.magalie.persistence.entity.StorageMovement;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.franciaflex.magalie.services.MagalieUserNotificationContext;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
@@ -74,6 +75,9 @@
JpaMagaliePersistenceContext persistenceContext =
serviceContext.getPersistenceContext();
+ MagalieUserNotificationContext userNotificationContext =
+ serviceContext.getUserNotificationContext();
+
// first, try find order in affected list
FindOrderToExecuteResult findOrderToExecuteResult = null;
@@ -112,6 +116,16 @@
oldAffectation = affectedDeliveredRequestedList;
+ if (findOrderToExecuteResult.isDriverLicenseRequired()) {
+
+ userNotificationContext.notifyUnaffectedRequestedListDriverLicenseRequired(magalieUser, oldAffectation);
+
+ } else if (findOrderToExecuteResult.isEverythingUnavailable()) {
+
+ userNotificationContext.notifyUnaffectedRequestedListForEverythingUnavailable(magalieUser, oldAffectation);
+
+ }
+
}
}
@@ -175,10 +189,20 @@
persistenceContext.commit();
- findOrderToExecuteResult.setOldAffectation(oldAffectation);
+ if (oldAffectation != null) {
- findOrderToExecuteResult.setNewAffectation(newAffectation);
+ findOrderToExecuteResult.setOldAffectation(oldAffectation);
+ }
+
+ if (newAffectation != null) {
+
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
+
+ userNotificationContext.notifyAffectedRequestedList(magalieUser, newAffectation);
+
+ }
+
if (log.isInfoEnabled()) {
log.info("will return " + findOrderToExecuteResult);
}
@@ -331,7 +355,7 @@
}
- public void onStorageMovementConfirmation(StorageMovementConfirmation confirmation, Collection<StorageMovement> storageMovements) {
+ public void onStorageMovementConfirmation(MagalieUser magalieUser, StorageMovementConfirmation confirmation, Collection<StorageMovement> storageMovements) {
String requestedArticleId = confirmation.getRequestedArticleId();
@@ -399,6 +423,11 @@
+ requestedList.getCode() + " as complete");
}
+ MagalieUserNotificationContext userNotificationContext =
+ serviceContext.getUserNotificationContext();
+
+ userNotificationContext.notifyUnaffectedRequestedListForCompletedRequestedList(magalieUser, deliveredRequestedList);
+
deliveredRequestedList.setStatus(DeliveredRequestedListStatus.COMPLETE);
}
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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -28,6 +28,7 @@
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.persistence.entity.StorageMovement;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
+import com.franciaflex.magalie.services.MagalieUserNotificationContext;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
@@ -37,6 +38,7 @@
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
import java.text.ParseException;
import java.util.Date;
@@ -55,6 +57,8 @@
protected static final String LIST_TYPE = "LOT DE FAB";
+ private MagalieUserNotificationContext magalieUserNotificationContextMock;
+
@Before
public void setUp() throws ParseException {
@@ -68,6 +72,10 @@
building = fixture("B1");
+ magalieUserNotificationContextMock = Mockito.mock(MagalieUserNotificationContext.class);
+
+ serviceContext.setUserNotificationContext(magalieUserNotificationContextMock);
+
}
@Test
@@ -106,6 +114,8 @@
Assert.assertNull(orderToExecute.getOldAffectation());
Assert.assertNotNull(orderToExecute.getNewAffectation());
+ Mockito.verify(magalieUserNotificationContextMock).notifyAffectedRequestedList(magalieUser, orderToExecute.getNewAffectation());
+
}
@Test
@@ -169,7 +179,7 @@
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
- service.onStorageMovementConfirmation(confirmation, emptySet);
+ service.onStorageMovementConfirmation(magalieUser, confirmation, emptySet);
}
@@ -184,7 +194,7 @@
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
- service.onStorageMovementConfirmation(confirmation, emptySet);
+ service.onStorageMovementConfirmation(magalieUser, confirmation, emptySet);
}
@@ -199,7 +209,7 @@
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
- service.onStorageMovementConfirmation(confirmation, emptySet);
+ service.onStorageMovementConfirmation(magalieUser, confirmation, emptySet);
}
@@ -210,17 +220,14 @@
Assert.assertEquals("requestedArticle6", orderToExecute.getRequestedArticle().getId());
Assert.assertNotNull(orderToExecute.getNewAffectation());
- if (true) {
- // XXX brendan 13/07/13 doesn't works but doesn't mind, the information is given to the user by another mean
- Assert.assertNotNull(orderToExecute.getOldAffectation());
- Assert.assertNotEquals(
- orderToExecute.getOldAffectation().getRequestedList(),
- orderToExecute.getNewAffectation().getRequestedList());
- }
+ Assert.assertNotNull(orderToExecute.getOldAffectation());
+ Assert.assertNotEquals(
+ orderToExecute.getOldAffectation().getRequestedList(),
+ orderToExecute.getNewAffectation().getRequestedList());
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
- service.onStorageMovementConfirmation(confirmation, emptySet);
+ service.onStorageMovementConfirmation(magalieUser, confirmation, emptySet);
}
@@ -234,7 +241,7 @@
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
- service.onStorageMovementConfirmation(confirmation, emptySet);
+ service.onStorageMovementConfirmation(magalieUser, confirmation, emptySet);
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -25,6 +25,7 @@
import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.services.DefaultMagalieServiceContext;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.franciaflex.magalie.services.service.FixturesService;
@@ -49,8 +50,11 @@
protected String contextPath;
+ protected StrutsActionMessagesUserNotificationContext userNotificationContext;
+
public MagalieApplicationContext(String contextPath) {
this.contextPath = contextPath;
+ userNotificationContext = new StrutsActionMessagesUserNotificationContext();
}
public MagalieApplicationConfig getMagalieApplicationConfig() {
@@ -94,20 +98,6 @@
}
- public void close() {
-
- if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
-
- if (log.isInfoEnabled()) {
- log.info("stopping magalie, will close entity manager factory");
- }
-
- entityManagerFactory.close();
-
- }
-
- }
-
public MagalieServiceContext newServiceContext(EntityManager entityManager) {
// FIXME brendan 04/06/13 very strange behavior, raise exception when loading a page
@@ -124,6 +114,8 @@
serviceContext.setMagalieApplicationConfig(applicationConfig);
+ serviceContext.setUserNotificationContext(userNotificationContext);
+
return serviceContext;
}
@@ -152,4 +144,34 @@
}
+ public void close() {
+
+ if (entityManagerFactory != null && entityManagerFactory.isOpen()) {
+
+ if (log.isInfoEnabled()) {
+ log.info("stopping magalie, will close entity manager factory");
+ }
+
+ entityManagerFactory.close();
+
+ }
+
+ for (Map.Entry<MagalieUser, String> magalieUserMessage : userNotificationContext.getUsersNotifications().entries()) {
+
+ MagalieUser magalieUser = magalieUserMessage.getKey();
+
+ String message = magalieUserMessage.getValue();
+
+ if (log.isWarnEnabled()) {
+ log.warn("notification message was not delivered magalieUser=" + magalieUser + " message=" + message);
+ }
+
+ }
+
+ }
+
+ public StrutsActionMessagesUserNotificationContext getUserNotificationContext() {
+ return userNotificationContext;
+ }
+
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -24,6 +24,7 @@
*/
import com.franciaflex.magalie.MagalieApplicationConfig;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.franciaflex.magalie.web.action.ChooseCompanyAction;
@@ -33,9 +34,9 @@
import com.franciaflex.magalie.web.action.RestoreFixturesAction;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.beans.BeanUtil;
@@ -77,20 +78,40 @@
if (action instanceof MagalieActionSupport) {
+ // on ajoute les notifications pour l'utilisateur
+
+ Set<String> messages = Sets.newLinkedHashSet();
+
+ // d'abord on récupère les notifications ajoutées par les actions dans la session
+
MagalieSession magalieSession = getMagalieSession(invocation);
- if (CollectionUtils.isNotEmpty(magalieSession.getMessages())) {
+ messages.addAll(magalieSession.getMessagesAndClear());
- for (String message : magalieSession.getMessages()) {
+ // ensuite on ajoute les notifications ajoutées par les services
- ((MagalieActionSupport) action).addActionMessage(message);
+ MagalieApplicationContext magalieApplicationContext =
+ getMagalieApplicationContext(invocation);
- }
+ StrutsActionMessagesUserNotificationContext userNotificationContext =
+ magalieApplicationContext.getUserNotificationContext();
- magalieSession.getMessages().clear();
+ MagalieUser magalieUser = magalieSession.getMagalieUser();
+ if (magalieUser != null) {
+
+ messages.addAll(userNotificationContext.getMessagesAndClearFor(magalieUser));
+
}
+ // on ajoute tous ces messages comme actionMessage
+
+ for (String message : messages) {
+
+ ((MagalieActionSupport) action).addActionMessage(message);
+
+ }
+
Class<?> actionClass = action.getClass();
Set<PropertyDescriptor> descriptors =
@@ -119,7 +140,7 @@
} else if (MagalieApplicationConfig.class.isAssignableFrom(propertyType)) {
- toInject = getMagalieApplicationContext(invocation).getMagalieApplicationConfig();
+ toInject = magalieApplicationContext.getMagalieApplicationConfig();
}
@@ -137,7 +158,7 @@
try {
// prevent accessing a page without a session
- if (magalieSession.getMagalieUser() == null) {
+ if (magalieUser == null) {
if (ACCESSIBLE_ACTIONS_FOR_NOT_LOGGED_USER.contains(actionClass)) {
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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -33,6 +33,7 @@
import java.io.Serializable;
import java.util.Collection;
+import java.util.List;
/**
* The single object every user will have in its session.
@@ -54,7 +55,7 @@
protected Activity activity;
- protected Collection<String> messages;
+ protected Collection<String> messages = Lists.newLinkedList();
public MagalieUser getMagalieUser() {
return magalieUser;
@@ -87,15 +88,14 @@
this.lastUsedDestinationWarehouseForKanbans = lastUsedDestinationWarehouseForKanbans;
}
- public Collection<String> getMessages() {
- if (messages == null) {
- messages = Lists.newLinkedList();
- }
- return messages;
+ public void addMessage(String message) {
+ messages.add(message);
}
- public void addMessage(String message) {
- getMessages().add(message);
+ public List<String> getMessagesAndClear() {
+ List<String> messages = Lists.newArrayList(this.messages);
+ this.messages.clear();
+ return messages;
}
public Activity getActivity() {
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/StrutsActionMessagesUserNotificationContext.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -0,0 +1,61 @@
+package com.franciaflex.magalie.web;
+
+import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.services.MagalieUserNotificationContext;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+public class StrutsActionMessagesUserNotificationContext implements MagalieUserNotificationContext {
+
+ protected SetMultimap<MagalieUser, String> usersNotifications;
+
+ public StrutsActionMessagesUserNotificationContext() {
+ Supplier<Set<String>> emptySetFactory = new Supplier<Set<String>>() {
+
+ @Override
+ public Set<String> get() {
+ return Sets.newLinkedHashSet();
+ }
+ };
+ Map<MagalieUser, Collection<String >> magalieUserToMessages = Maps.newHashMap();
+ SetMultimap<MagalieUser, String> multimap = Multimaps.newSetMultimap(magalieUserToMessages, emptySetFactory);
+ usersNotifications = Multimaps.synchronizedSetMultimap(multimap);
+ }
+
+ @Override
+ public void notifyUnaffectedRequestedListDriverLicenseRequired(MagalieUser magalieUser, DeliveredRequestedList oldAffectation) {
+ usersNotifications.put(magalieUser, "Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode() + " : permis requis");
+ }
+
+ @Override
+ public void notifyUnaffectedRequestedListForEverythingUnavailable(MagalieUser magalieUser, DeliveredRequestedList oldAffectation) {
+ usersNotifications.put(magalieUser, "Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode() + " : stock manquant");
+ }
+
+ @Override
+ public void notifyUnaffectedRequestedListForCompletedRequestedList(MagalieUser magalieUser, DeliveredRequestedList oldAffectation) {
+ usersNotifications.put(magalieUser, "Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode() + " : liste terminée");
+ }
+
+ @Override
+ public void notifyAffectedRequestedList(MagalieUser magalieUser, DeliveredRequestedList newAffectation) {
+ usersNotifications.put(magalieUser, "Vous êtes désormais affecté à la liste " + newAffectation.getRequestedList().getCode());
+ }
+
+ public SetMultimap<MagalieUser, String> getUsersNotifications() {
+ return usersNotifications;
+ }
+
+ public Set<String> getMessagesAndClearFor(MagalieUser magalieUser) {
+ return usersNotifications.removeAll(magalieUser);
+ }
+
+}
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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -24,7 +24,6 @@
*/
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.RequestedArticle;
import com.franciaflex.magalie.persistence.entity.RequestedList;
@@ -111,34 +110,6 @@
if (findOrderToExecuteResult.isSuccess()) {
- DeliveredRequestedList oldAffectation = findOrderToExecuteResult.getOldAffectation();
-
- if (oldAffectation != null) {
-
- String message = "Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode();
-
- if (oldAffectation.getStatus().isComplete()) {
-
- message += " : liste terminée";
-
- } else {
-
- // message += " : liste non terminée";
-
- }
-
- session.addMessage(message);
-
- }
-
- DeliveredRequestedList newAffectation = findOrderToExecuteResult.getNewAffectation();
-
- if (newAffectation != null) {
-
- session.addMessage("Vous venez d'être affecté à la liste " + newAffectation.getRequestedList().getCode());
-
- }
-
requestedArticle = findOrderToExecuteResult.getRequestedArticle();
result = 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-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-08-21 13:08:11 UTC (rev 370)
@@ -25,7 +25,6 @@
import com.franciaflex.magalie.MagalieTechnicalException;
import com.franciaflex.magalie.persistence.entity.Article;
-import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
@@ -33,7 +32,6 @@
import com.franciaflex.magalie.services.service.RequestedArticleService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
-import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.opensymphony.xwork2.Preparable;
@@ -197,21 +195,6 @@
articleStorageService.confirmStorageMovement(confirmation, magalieUser);
- Optional<DeliveredRequestedList> deliveredRequestedListOptional =
- requestedArticleService.getDeliveredRequestedList(confirmation);
-
- if (deliveredRequestedListOptional.isPresent()) {
-
- DeliveredRequestedList deliveredRequestedList = deliveredRequestedListOptional.get();
-
- if (deliveredRequestedList.getStatus().isComplete()) {
-
- session.addMessage("La liste " + deliveredRequestedList.getRequestedList().getCode() + " est terminée");
-
- }
-
- }
-
String resultName = session.getActivity().name();
return resultName;
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-08-21 09:40:45 UTC (rev 369)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/deliver-requested-article-input.jsp 2013-08-21 13:08:11 UTC (rev 370)
@@ -46,29 +46,34 @@
<s:a href="%{removeUserAffectationUrl}" cssClass="btn btn-block" id="removeUserAffectationLink">Abandonner la liste (Esc)</s:a>
</s:if>
<s:else>
- <s:iterator value="listTypes" var="listType" status="stat">
- <s:set var="deliverRequestedArticleId">prepareArticleReceptionId<s:property value="#stat.index" /></s:set>
- <s:url action="deliver-requested-article" id="deliverRequestedArticleUrl">
- <s:param name="listType" value="#listType" />
- </s:url>
- <s:if test="#stat.index < shortcuts.size()">
- <script type="text/javascript">
- $(document).ready(function () {
- var id = '<s:property value="deliverRequestedArticleId" />';
- bindKey('<s:property value="shortcuts.get(#stat.index)" />', function(){ redirectTo($('#' + id));});
- });
- </script>
- <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block" id="%{deliverRequestedArticleId}">
- Commencer à traiter une liste « <s:property value="#listType" /> »
- (<s:property value="shortcuts.get(#stat.index)" />)
- </s:a>
- </s:if>
- <s:else>
- <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block">
- Commencer à traiter une liste « <s:property value="#listType" /> »
- </s:a>
- </s:else>
- </s:iterator>
+ <s:if test="listTypes.empty">
+ Aucune liste à servir à traiter
+ </s:if>
+ <s:else>
+ <s:iterator value="listTypes" var="listType" status="stat">
+ <s:set var="deliverRequestedArticleId">prepareArticleReceptionId<s:property value="#stat.index" /></s:set>
+ <s:url action="deliver-requested-article" id="deliverRequestedArticleUrl">
+ <s:param name="listType" value="#listType" />
+ </s:url>
+ <s:if test="#stat.index < shortcuts.size()">
+ <script type="text/javascript">
+ $(document).ready(function () {
+ var id = '<s:property value="deliverRequestedArticleId" />';
+ bindKey('<s:property value="shortcuts.get(#stat.index)" />', function(){ redirectTo($('#' + id));});
+ });
+ </script>
+ <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block" id="%{deliverRequestedArticleId}">
+ Commencer à traiter une liste « <s:property value="#listType" /> »
+ (<s:property value="shortcuts.get(#stat.index)" />)
+ </s:a>
+ </s:if>
+ <s:else>
+ <s:a href="%{deliverRequestedArticleUrl}" cssClass="btn btn-block">
+ Commencer à traiter une liste « <s:property value="#listType" /> »
+ </s:a>
+ </s:else>
+ </s:iterator>
+ </s:else>
<s:url action="remove-user-affectation" id="removeUserAffectationUrl">
<s:param name="result">REDIRECT_TO_ACTIVITIES</s:param>
1
0
r369 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao 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 21 Aug '13
by bleny@users.forge.codelutin.com 21 Aug '13
21 Aug '13
Author: bleny
Date: 2013-08-21 11:40:45 +0200 (Wed, 21 Aug 2013)
New Revision: 369
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2999 refactor findOrderToExecute to allow giving more details to the user about why she is no longer affected
Modified:
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/RequestedArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.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/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
Modified: 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-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -33,8 +33,8 @@
public class RequestedArticles {
- public static Comparator<RequestedArticle> comparator(RequestedList affectedRequestedList) {
- Comparator<RequestedList> requestedListComparator = RequestedLists.comparator(affectedRequestedList);
+ public static Comparator<RequestedArticle> comparator() {
+ Comparator<RequestedList> requestedListComparator = RequestedLists.comparator();
Comparator<RequestedArticle> comparator =
Ordering.compound(
Lists.newArrayList(
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java 2013-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedLists.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -82,11 +82,10 @@
return new GivenRequestListFirst(requestedList);
}
- public static Comparator<RequestedList> comparator(RequestedList affectedRequestedList) {
+ public static Comparator<RequestedList> comparator() {
Ordering<RequestedList> comparator =
Ordering.compound(
Lists.newArrayList(
- givenRequestListFirst(affectedRequestedList),
urgentFirstComparator(),
requestDateFirstComparator()
)
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-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleDao.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -24,7 +24,6 @@
*/
import com.franciaflex.magalie.persistence.entity.Building;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.persistence.entity.RequestedList;
@@ -33,8 +32,8 @@
/** @author bleny */
public interface RequestedArticleDao {
- List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo, String listType);
+ List<RequestedArticle> findAllUndelivered(RequestedList requestedList);
- List<RequestedArticle> findAll(RequestedList requestedList);
+ List<RequestedArticle> findAllUndelivered(Building building, String listType);
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java 2013-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedArticleJpaDao.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -24,8 +24,6 @@
*/
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 com.franciaflex.magalie.persistence.entity.RequestedList;
@@ -40,25 +38,17 @@
}
@Override
- public List<RequestedArticle> findAllUndelivered(Building building, MagalieUser affectedTo, String listType) {
- TypedQuery<RequestedArticle> query = createQuery(
- "from RequestedArticle ra where "
- + " ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra) "
- + " and ra.requestedList.building = :building "
- + " and ra.requestedList.listType = :listType "
- + " and ra.requestedList not in (select drl.requestedList from DeliveredRequestedList drl where drl.status = :complete or drl.status = :affected and drl.affectedTo != :affectedTo)");
- query.setParameter("building", building);
- query.setParameter("listType", listType);
- query.setParameter("complete", DeliveredRequestedListStatus.COMPLETE);
- query.setParameter("affected", DeliveredRequestedListStatus.AFFECTED);
- query.setParameter("affectedTo", affectedTo);
+ public List<RequestedArticle> findAllUndelivered(RequestedList requestedList) {
+ TypedQuery<RequestedArticle> query = createQuery("from RequestedArticle ra where ra.requestedList = :requestedList and ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra where dra.requestedArticle.requestedList = :requestedList)");
+ query.setParameter("requestedList", requestedList);
return findAll(query);
}
@Override
- public List<RequestedArticle> findAll(RequestedList requestedList) {
- TypedQuery<RequestedArticle> query = createQuery("from RequestedArticle ra where ra.requestedList = :requestedList");
- query.setParameter("requestedList", requestedList);
+ public List<RequestedArticle> findAllUndelivered(Building building, String listType) {
+ TypedQuery<RequestedArticle> query = createQuery("from RequestedArticle ra where ra.requestedList.building = :building and ra.requestedList.listType = :listType and ra not in (select dra.requestedArticle from DeliveredRequestedArticle dra)");
+ query.setParameter("building", building);
+ query.setParameter("listType", listType);
return findAll(query);
}
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-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -25,6 +25,7 @@
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
public class FindOrderToExecuteResult {
@@ -92,4 +93,9 @@
return newAffectation;
}
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
+
}
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-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -29,7 +29,6 @@
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleJpaDao;
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao;
import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListJpaDao;
-import com.franciaflex.magalie.persistence.dao.RequestedArticleDao;
import com.franciaflex.magalie.persistence.dao.RequestedArticleJpaDao;
import com.franciaflex.magalie.persistence.dao.RequestedListJpaDao;
import com.franciaflex.magalie.persistence.entity.Building;
@@ -45,8 +44,11 @@
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import com.google.common.primitives.Booleans;
+import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -69,163 +71,212 @@
public FindOrderToExecuteResult findOrderToExecute(MagalieUser magalieUser, Building building, String listType) {
- List<RequestedArticle> requestedArticles = getRequestedArticles(building, magalieUser, listType);
+ JpaMagaliePersistenceContext persistenceContext =
+ serviceContext.getPersistenceContext();
- Set<RequestedArticle> requestedArticlesByPriority = getRequestedArticlesByPriority(requestedArticles, magalieUser);
+ // first, try find order in affected list
- FindOrderToExecuteResult findOrderToExecuteResult =
- findOrderToExecute(
- requestedArticlesByPriority,
- magalieUser,
- building);
+ FindOrderToExecuteResult findOrderToExecuteResult = null;
- return findOrderToExecuteResult;
+ DeliveredRequestedListJpaDao deliveredRequestedListDao =
+ persistenceContext.getDeliveredRequestedListDao();
- }
+ DeliveredRequestedList affectedDeliveredRequestedList =
+ deliveredRequestedListDao.findByAffectedTo(magalieUser);
- protected List<RequestedArticle> getRequestedArticles(Building building, MagalieUser magalieUser, String listType) {
+ DeliveredRequestedList oldAffectation = null;
- RequestedArticleDao requestedArticleDao = serviceContext.getPersistenceContext().getRequestedArticleDao();
+ if (affectedDeliveredRequestedList != null) {
- List<RequestedArticle> allRequestedArticles = requestedArticleDao.findAllUndelivered(building, magalieUser, listType);
+ RequestedList affectedRequestedList = affectedDeliveredRequestedList.getRequestedList();
- if (log.isInfoEnabled()) {
- log.info(allRequestedArticles.size() + " articles requested in building " + building.getCode());
+ findOrderToExecuteResult =
+ findOrderToExecute(affectedRequestedList, magalieUser, building);
+
+ if (findOrderToExecuteResult.isSuccess()) {
+
+ if (log.isInfoEnabled()) {
+ log.info("order to execute " + findOrderToExecuteResult + " found in affected list " + affectedDeliveredRequestedList);
+ }
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("request list " + affectedDeliveredRequestedList.getRequestedList()
+ + " is not complete, putting it back to pending");
+ }
+
+ affectedDeliveredRequestedList.setStatus(DeliveredRequestedListStatus.PENDING);
+
+ affectedDeliveredRequestedList.setAffectedTo(null);
+
+ oldAffectation = affectedDeliveredRequestedList;
+
+ }
+
}
- return allRequestedArticles;
+ DeliveredRequestedList newAffectation = null;
- }
+ if (findOrderToExecuteResult == null || ! findOrderToExecuteResult.isSuccess()) {
- protected FindOrderToExecuteResult findOrderToExecute(Set<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
+ RequestedArticleJpaDao requestedArticleDao =
+ persistenceContext.getRequestedArticleDao();
- ArticleStorageService articleStorageService =
- serviceContext.newService(ArticleStorageService.class);
+ List<RequestedArticle> allUndelivered =
+ requestedArticleDao.findAllUndelivered(building, listType);
- RequestedArticle requestedArticle = null;
+ if (log.isInfoEnabled()) {
+ log.info(allUndelivered.size() + " undelivered requested articles in building " + building + " for list type " + listType);
+ }
- boolean success = false;
+ if (allUndelivered.isEmpty()) {
- Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
+ findOrderToExecuteResult = new FindOrderToExecuteResult();
- boolean driverLicenseRequired = false;
+ findOrderToExecuteResult.setNothingToDo(true);
- boolean somethingIsAvailable = false;
+ } else {
- while ( ! success && requestedArticleIterator.hasNext()) {
+ Set<RequestedArticle> allUndeliveredByPriority =
+ Sets.newTreeSet(RequestedArticles.comparator());
- requestedArticle = requestedArticleIterator.next();
+ allUndeliveredByPriority.addAll(allUndelivered);
- String articleId = requestedArticle.getArticle().getId();
+ findOrderToExecuteResult = findOrderToExecute(allUndeliveredByPriority, magalieUser, building);
- RealTimeStorageMovementTask realTimeStorageMovementTask =
- articleStorageService.getRealTimeStorageMovementTask(building, magalieUser, articleId);
+ if (findOrderToExecuteResult != null && findOrderToExecuteResult.isSuccess()) {
- boolean articleIsAvailable = ! realTimeStorageMovementTask.isArticleUnavailable();
+ RequestedList requestedList = findOrderToExecuteResult.getRequestedArticle().getRequestedList();
- if (articleIsAvailable) {
+ newAffectation = deliveredRequestedListDao.findByRequestedList(requestedList);
- somethingIsAvailable = true;
+ if (newAffectation == null) {
- driverLicenseRequired |= realTimeStorageMovementTask.isDriverLicenseRequired();
+ newAffectation = new DeliveredRequestedList();
- }
+ deliveredRequestedListDao.persist(newAffectation);
- success = articleIsAvailable;
+ }
- }
+ newAffectation.setAffectedTo(magalieUser);
- FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
+ newAffectation.setRequestedList(requestedList);
- if (success) {
+ newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
- if (log.isInfoEnabled()) {
- log.info("order to execute found: " + requestedArticle);
+ deliveredRequestedListDao.merge(newAffectation);
+
+ }
+
}
- Preconditions.checkState(requestedArticle != null);
+ }
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ persistenceContext.commit();
- findOrderToExecuteResult.setRequestedArticle(requestedArticle);
+ findOrderToExecuteResult.setOldAffectation(oldAffectation);
- // deal with affectations
- DeliveredRequestedListJpaDao deliveredRequestedListDao =
- persistenceContext.getDeliveredRequestedListDao();
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
- DeliveredRequestedList oldAffectation =
- deliveredRequestedListDao.findByAffectedTo(magalieUser);
+ if (log.isInfoEnabled()) {
+ log.info("will return " + findOrderToExecuteResult);
+ }
- RequestedList requestedList = requestedArticle.getRequestedList();
+ Preconditions.checkState(oldAffectation == null || newAffectation == null || ! oldAffectation.equals(newAffectation));
- DeliveredRequestedList newAffectation =
- deliveredRequestedListDao.findByRequestedList(requestedList);
+ Preconditions.checkState(findOrderToExecuteResult != null);
- if (newAffectation == null) {
+ Preconditions.checkState(
+ BooleanUtils.xor(
+ Booleans.toArray(
+ ImmutableSet.of(
+ findOrderToExecuteResult.isSuccess(),
+ findOrderToExecuteResult.isEverythingUnavailable(),
+ findOrderToExecuteResult.isNothingToDo(),
+ findOrderToExecuteResult.isDriverLicenseRequired()
+ )
+ )
+ )
+ );
- newAffectation = new DeliveredRequestedList();
+ return findOrderToExecuteResult;
- deliveredRequestedListDao.persist(newAffectation);
+ }
- }
+ protected FindOrderToExecuteResult findOrderToExecute(RequestedList requestedList, MagalieUser magalieUser, Building building) {
- newAffectation.setAffectedTo(magalieUser);
+ JpaMagaliePersistenceContext persistenceContext =
+ serviceContext.getPersistenceContext();
- newAffectation.setRequestedList(requestedList);
+ RequestedArticleJpaDao requestedArticleDao =
+ persistenceContext.getRequestedArticleDao();
- newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
+ List<RequestedArticle> allUndelivered =
+ requestedArticleDao.findAllUndelivered(requestedList);
- deliveredRequestedListDao.merge(newAffectation);
+ Comparator<RequestedArticle> priorityComparator =
+ RequestedArticles.priorityComparator();
- if (oldAffectation == null) {
+ Set<RequestedArticle> requestedArticlesByPriority =
+ Sets.newTreeSet(priorityComparator);
- if (log.isInfoEnabled()) {
- log.info("user has no previous affectation");
- }
+ requestedArticlesByPriority.addAll(allUndelivered);
- findOrderToExecuteResult.setNewAffectation(newAffectation);
+ return findOrderToExecute(requestedArticlesByPriority, magalieUser, building);
- } else {
+ }
- if (log.isInfoEnabled()) {
- log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
- }
+ protected FindOrderToExecuteResult findOrderToExecute(Set<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
- boolean affectationChanged = !oldAffectation.getRequestedList().equals(requestedList);
+ ArticleStorageService articleStorageService =
+ serviceContext.newService(ArticleStorageService.class);
- if (affectationChanged) {
+ RequestedArticle requestedArticle = null;
- if (log.isInfoEnabled()) {
- log.info("user changed affectation from "
- + oldAffectation.getRequestedList().getCode()
- + " to " + requestedList.getCode());
- }
+ boolean success = false;
- boolean isFinished = oldAffectation.getStatus().isComplete();
+ Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
- if (!isFinished) {
+ boolean driverLicenseRequired = false;
- if (log.isInfoEnabled()) {
- log.info("request list " + oldAffectation.getRequestedList()
- + " is not complete, putting it back to pending");
- }
+ boolean somethingIsAvailable = false;
- oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
+ while ( ! success && requestedArticleIterator.hasNext()) {
- oldAffectation.setAffectedTo(null);
+ requestedArticle = requestedArticleIterator.next();
- }
+ String articleId = requestedArticle.getArticle().getId();
- findOrderToExecuteResult.setOldAffectation(oldAffectation);
+ RealTimeStorageMovementTask realTimeStorageMovementTask =
+ articleStorageService.getRealTimeStorageMovementTask(building, magalieUser, articleId);
- findOrderToExecuteResult.setNewAffectation(newAffectation);
+ boolean articleIsAvailable = ! realTimeStorageMovementTask.isArticleUnavailable();
- }
+ if (articleIsAvailable) {
+ somethingIsAvailable = true;
+
+ driverLicenseRequired |= realTimeStorageMovementTask.isDriverLicenseRequired();
+
}
- persistenceContext.commit();
+ success = articleIsAvailable;
+ }
+
+ FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
+
+ if (success) {
+
+ if (log.isInfoEnabled()) {
+ log.info("order to execute found: " + requestedArticle);
+ }
+
+ Preconditions.checkState(requestedArticle != null);
+
+ findOrderToExecuteResult.setRequestedArticle(requestedArticle);
+
} else {
if (requestedArticlesByPriority.isEmpty()) {
@@ -268,35 +319,6 @@
}
- protected Set<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
-
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
-
- DeliveredRequestedListDao deliveredRequestedListDao = persistenceContext.getDeliveredRequestedListDao();
-
- DeliveredRequestedList affectedDeliveredRequestedList =
- deliveredRequestedListDao.findByAffectedTo(magalieUser);
-
- RequestedList affectedRequestedList = null;
-
- if (affectedDeliveredRequestedList != null) {
-
- affectedRequestedList = affectedDeliveredRequestedList.getRequestedList();
-
- }
-
- Comparator<RequestedArticle> priorityComparator =
- RequestedArticles.comparator(affectedRequestedList);
-
- Set<RequestedArticle> requestedArticles =
- Sets.newTreeSet(priorityComparator);
-
- requestedArticles.addAll(requests);
-
- return requestedArticles;
-
- }
-
public List<DeliveredRequestedList> getAllDeliveredRequestedLists() {
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
@@ -351,7 +373,7 @@
RequestedList requestedList = requestedArticle.getRequestedList();
List<RequestedArticle> allRequestedArticlesForList =
- requestedArticleDao.findAll(requestedList);
+ requestedArticleDao.findAllByRequestedList(requestedList);
List<DeliveredRequestedArticle> deliveredRequestedArticlesForList =
deliveredRequestedArticleDao.findAll(requestedList);
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-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -31,7 +31,6 @@
import com.franciaflex.magalie.services.StorageMovementConfirmation;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -81,38 +80,6 @@
}
@Test
- public void testGetRequestedArticles() {
-
- List<RequestedArticle> requestedArticles = service.getRequestedArticles(building, magalieUser, LIST_TYPE);
-
- for (RequestedArticle requestedArticle : requestedArticles) {
-
- Assert.assertEquals(building, requestedArticle.getRequestedList().getBuilding());
-
- }
-
- }
-
- @Test
- public void testGetRequestedArticlesByPriority() {
-
- List<RequestedArticle> requestedArticles = fixture("requestedArticles");
-
- Set<RequestedArticle> requestedArticlesByPriority =
- service.getRequestedArticlesByPriority(requestedArticles, magalieUser);
-
- Assert.assertEquals(requestedArticles.size(), requestedArticlesByPriority.size());
-
- Assert.assertEquals("requestedArticle3", Iterables.get(requestedArticlesByPriority, 0).getId());
- Assert.assertEquals("requestedArticle1", Iterables.get(requestedArticlesByPriority, 1).getId());
- Assert.assertEquals("requestedArticle4", Iterables.get(requestedArticlesByPriority, 2).getId());
- Assert.assertEquals("requestedArticle2", Iterables.get(requestedArticlesByPriority, 3).getId());
- Assert.assertEquals("requestedArticle6", Iterables.get(requestedArticlesByPriority, 4).getId());
- Assert.assertEquals("requestedArticle5", Iterables.get(requestedArticlesByPriority, 5).getId());
-
- }
-
- @Test
public void testFindOrderWhenNoRequestedArticles() {
Set<RequestedArticle> emptySet = Sets.newHashSet();
@@ -182,9 +149,6 @@
Assert.assertFalse(orderToExecute.isDriverLicenseRequired());
Assert.assertTrue(orderToExecute.isSuccess());
- Assert.assertNull(orderToExecute.getOldAffectation());
- Assert.assertNotNull(orderToExecute.getNewAffectation());
-
}
@Test
@@ -201,6 +165,7 @@
Assert.assertNull(orderToExecute.getOldAffectation());
Assert.assertNotNull(orderToExecute.getNewAffectation());
+ Assert.assertEquals("requestedArticle3", orderToExecute.getRequestedArticle().getId());
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
@@ -215,6 +180,7 @@
Assert.assertNull(orderToExecute.getOldAffectation());
Assert.assertNull(orderToExecute.getNewAffectation());
+ Assert.assertEquals("requestedArticle1", orderToExecute.getRequestedArticle().getId());
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
@@ -229,6 +195,7 @@
Assert.assertNull(orderToExecute.getOldAffectation());
Assert.assertNull(orderToExecute.getNewAffectation());
+ Assert.assertEquals("requestedArticle2", orderToExecute.getRequestedArticle().getId());
StorageMovementConfirmation confirmation = new StorageMovementConfirmation();
confirmation.setRequestedArticleId(orderToExecute.getRequestedArticle().getId());
@@ -240,9 +207,10 @@
{
orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
+ Assert.assertEquals("requestedArticle6", orderToExecute.getRequestedArticle().getId());
Assert.assertNotNull(orderToExecute.getNewAffectation());
- if (false) {
+ if (true) {
// XXX brendan 13/07/13 doesn't works but doesn't mind, the information is given to the user by another mean
Assert.assertNotNull(orderToExecute.getOldAffectation());
Assert.assertNotEquals(
@@ -259,6 +227,7 @@
{
orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
Preconditions.checkState(orderToExecute.isSuccess());
+ Assert.assertEquals("requestedArticle5", orderToExecute.getRequestedArticle().getId());
Assert.assertNull(orderToExecute.getOldAffectation());
Assert.assertNull(orderToExecute.getNewAffectation());
@@ -269,6 +238,14 @@
}
+ {
+ orderToExecute = service.findOrderToExecute(magalieUser, building, LIST_TYPE);
+
+ Assert.assertTrue(orderToExecute.isEverythingUnavailable());
+ // Assert.assertNotNull(orderToExecute.getOldAffectation());
+
+ }
+
}
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-20 16:12:50 UTC (rev 368)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-21 09:40:45 UTC (rev 369)
@@ -123,7 +123,7 @@
} else {
- message += " : liste non terminée";
+ // message += " : liste non terminée";
}
1
0
r368 - trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao
by bleny@users.forge.codelutin.com 20 Aug '13
by bleny@users.forge.codelutin.com 20 Aug '13
20 Aug '13
Author: bleny
Date: 2013-08-20 18:12:50 +0200 (Tue, 20 Aug 2013)
New Revision: 368
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add a todo
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java 2013-08-20 13:25:20 UTC (rev 367)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListJpaDao.java 2013-08-20 16:12:50 UTC (rev 368)
@@ -36,7 +36,7 @@
}
@Override
- public List<String> findAllDistinctListTypes() {
+ public List<String> findAllDistinctListTypes() { // TODO brendan 20/08/13 add a building parameter
TypedQuery<String> query =
entityManager.createQuery(
" select distinct rl.listType"
1
0
r367 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-web/src/main/java/com/franciaflex/magalie/web/action
by bleny@users.forge.codelutin.com 20 Aug '13
by bleny@users.forge.codelutin.com 20 Aug '13
20 Aug '13
Author: bleny
Date: 2013-08-20 15:25:20 +0200 (Tue, 20 Aug 2013)
New Revision: 367
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2999 when affectation is removed, show if list is complete or not
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedListStatus.java
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.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/WithdrawItemAction.java
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-08-20 13:25:20 UTC (rev 367)
@@ -0,0 +1,19 @@
+package com.franciaflex.magalie.persistence.entity;
+
+public enum DeliveredRequestedListStatus {
+
+ PENDING,
+
+ AFFECTED,
+
+ COMPLETE;
+
+ public boolean isComplete() {
+ return this == COMPLETE;
+ }
+
+ public boolean isAffected() {
+ return this == AFFECTED;
+ }
+
+} //DeliveredRequestedListStatus
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-08-19 15:43:42 UTC (rev 366)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-08-20 13:25:20 UTC (rev 367)
@@ -201,7 +201,7 @@
+ " to " + requestedList.getCode());
}
- boolean isFinished = oldAffectation.getStatus().equals(DeliveredRequestedListStatus.COMPLETE);
+ boolean isFinished = oldAffectation.getStatus().isComplete();
if (!isFinished) {
@@ -398,7 +398,7 @@
DeliveredRequestedList deliveredRequestedList =
dao.findByAffectedTo(magalieUser);
- if (deliveredRequestedList != null && deliveredRequestedList.getStatus() == DeliveredRequestedListStatus.AFFECTED) {
+ if (deliveredRequestedList != null && deliveredRequestedList.getStatus().isAffected()) {
if (log.isInfoEnabled()) {
log.info("user " + magalieUser.getLogin() +
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-08-19 15:43:42 UTC (rev 366)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-08-20 13:25:20 UTC (rev 367)
@@ -115,8 +115,20 @@
if (oldAffectation != null) {
- session.addMessage("Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode());
+ String message = "Vous n'êtes plus affecté à la liste " + oldAffectation.getRequestedList().getCode();
+ if (oldAffectation.getStatus().isComplete()) {
+
+ message += " : liste terminée";
+
+ } else {
+
+ message += " : liste non terminée";
+
+ }
+
+ session.addMessage(message);
+
}
DeliveredRequestedList newAffectation = findOrderToExecuteResult.getNewAffectation();
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-08-19 15:43:42 UTC (rev 366)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-08-20 13:25:20 UTC (rev 367)
@@ -26,7 +26,6 @@
import com.franciaflex.magalie.MagalieTechnicalException;
import com.franciaflex.magalie.persistence.entity.Article;
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.RequestedArticle;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
@@ -205,7 +204,7 @@
DeliveredRequestedList deliveredRequestedList = deliveredRequestedListOptional.get();
- if (deliveredRequestedList.getStatus() == DeliveredRequestedListStatus.COMPLETE) {
+ if (deliveredRequestedList.getStatus().isComplete()) {
session.addMessage("La liste " + deliveredRequestedList.getRequestedList().getCode() + " est terminée");
1
0