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
July 2013
- 3 participants
- 95 discussions
Build failed in Jenkins: franciaflex-magalie » MagaLiE :: Services #89
by admin+hudson@codelutin.com 13 Jul '13
by admin+hudson@codelutin.com 13 Jul '13
13 Jul '13
See <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>
Changes:
[Brendan Le Ny] remove from model orderQuantity and orderDate (renamed to movementDate)
[Brendan Le Ny] fix withdraw-item-input workflow, renable find ordre to execute in RequestedArticleService
[Brendan Le Ny] break everything to go real time
------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MagaLiE :: Services 1.0-rc-1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://nexus.nuiton.org/nexus/content/groups/public/org/nuiton/jpa/nuiton-j…
Downloaded: http://nexus.nuiton.org/nexus/content/groups/public/org/nuiton/jpa/nuiton-j… (2 KB at 6.1 KB/sec)
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ magalie-services ---
[INFO]
[INFO] --- maven-enforcer-plugin:1.2:enforce (check-project-files) @ magalie-services ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ magalie-services ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ magalie-services ---
[INFO] Compiling 32 source files to <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>
[INFO]
[INFO] --- maven-antrun-plugin:1.7:run (generate-surefire-workdir) @ magalie-services ---
[INFO] Executing tasks
main:
[mkdir] Created dir: <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>
[INFO] Executed tasks
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ magalie-services ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ magalie-services ---
[INFO] Compiling 8 source files to <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] bootstrap class path not set in conjunction with -source 1.6
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[232,8] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class RequestedArticleServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[245,49] error: cannot find symbol
[ERROR] symbol: method getStorageMovementOrder()
location: variable orderToExecute of type FindOrderToExecuteResult
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[261,45] error: cannot find symbol
[ERROR] symbol: method getStorageMovementOrder()
location: variable orderToExecute of type FindOrderToExecuteResult
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[75,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[75,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[91,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[91,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[107,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[107,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[124,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[124,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[130,8] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[133,42] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: variable location1 of type StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[135,42] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: variable location2 of type StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[147,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[147,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[163,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[163,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[181,12] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[181,57] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[182,12] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[189,53] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: variable storageMovement1 of type StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[192,53] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: variable storageMovement2 of type StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[199,12] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[199,57] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[200,12] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[207,52] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: variable storageMovement of type StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[226,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[226,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[227,8] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[250,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[250,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[251,8] error: cannot find symbol
[ERROR] symbol: class StorageMovementOrder
location: class OldFixturesArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[88,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class ArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[88,53] error: cannot find symbol
[ERROR] symbol: method bookArticle(BookArticleRequest)
location: variable service of type ArticleStorageService
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[95,55] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: class StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[97,56] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: class StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[101,55] error: cannot find symbol
[ERROR] symbol: method getExpectedQuantity()
location: class StorageMovement
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[118,8] error: cannot find symbol
[ERROR] symbol: class BookArticleResult
location: class ArticleStorageServiceTest
<http://ci.nuiton.org/jenkins/job/franciaflex-magalie/com.franciaflex$magali…>:[118,53] error: cannot find symbol
[INFO] 40 errors
[INFO] -------------------------------------------------------------
1
0
r309 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity magalie-persistence/src/main/xmi magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-services/src/test/java/com/franciaflex/magalie/services/service magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 12 Jul '13
by bleny@users.forge.codelutin.com 12 Jul '13
12 Jul '13
Author: bleny
Date: 2013-07-12 23:39:35 +0200 (Fri, 12 Jul 2013)
New Revision: 309
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
remove from model orderQuantity and orderDate (renamed to movementDate)
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovement.java
trunk/magalie-persistence/src/main/xmi/magalie.zargo
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementJpaDao.java 2013-07-12 21:24:59 UTC (rev 308)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementJpaDao.java 2013-07-12 21:39:35 UTC (rev 309)
@@ -68,7 +68,7 @@
@Override
public List<StorageMovement> findAll() {
- Query query = entityManager.createQuery("from StorageMovement sm order by sm.orderDate");
+ Query query = entityManager.createQuery("from StorageMovement sm order by sm.movementDate");
return query.getResultList();
}
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovement.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovement.java 2013-07-12 21:24:59 UTC (rev 308)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovement.java 2013-07-12 21:39:35 UTC (rev 309)
@@ -36,20 +36,14 @@
return confirmDate != null;
}
- public double getQuantity() {
- double quantity = Objects.firstNonNull(actualQuantity, expectedQuantity);
- return quantity;
- }
-
@Override
public String toString() {
return Objects.toStringHelper(this)
.add(PROPERTY_ID, id)
- .add(PROPERTY_ORDER_DATE, orderDate)
+ .add(PROPERTY_MOVEMENT_DATE, movementDate)
.add(PROPERTY_CONFIRM_DATE, confirmDate)
.add(PROPERTY_ORIGIN_LOCATION, originLocation)
.add(PROPERTY_DESTINATION_LOCATION, destinationLocation)
- .add(PROPERTY_EXPECTED_QUANTITY, expectedQuantity)
.add(PROPERTY_ACTUAL_QUANTITY, actualQuantity)
.add(PROPERTY_ARTICLE, article)
.add(PROPERTY_MAGALIE_USER, magalieUser)
Modified: trunk/magalie-persistence/src/main/xmi/magalie.zargo
===================================================================
(Binary files differ)
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-07-12 21:24:59 UTC (rev 308)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-07-12 21:39:35 UTC (rev 309)
@@ -189,7 +189,7 @@
if (storageMovement.getOriginLocation().equals(location)) {
- double actualQuantity = storedArticle.getQuantity() - storageMovement.getQuantity();
+ double actualQuantity = storedArticle.getQuantity() - storageMovement.getActualQuantity();
storedArticle.setQuantity(actualQuantity);
@@ -197,7 +197,7 @@
if (storageMovement.getDestinationLocation().equals(location)) {
- double actualQuantity = storedArticle.getQuantity() + storageMovement.getQuantity();
+ double actualQuantity = storedArticle.getQuantity() + storageMovement.getActualQuantity();
storedArticle.setQuantity(actualQuantity);
@@ -453,7 +453,7 @@
Date now = serviceContext.getNow();
- storageMovement.setOrderDate(now);
+ storageMovement.setMovementDate(now);
StorageMovementJpaDao storageMovementDao =
persistenceContext.getStorageMovementDao();
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java 2013-07-12 21:24:59 UTC (rev 308)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java 2013-07-12 21:39:35 UTC (rev 309)
@@ -255,7 +255,7 @@
Assert.assertFalse(bookArticleResult.isArticleInaccessible());
Assert.assertEquals(1, storageMovementOrder.getStorageMovements().size());
StorageMovement storageMovement = Iterables.get(storageMovementOrder.getStorageMovements(), 0, null);
- Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getQuantity(), DELTA);
+ Assert.assertEquals("only 10 is available, so don't propose more", 10., storageMovement.getActualQuantity(), DELTA);
Assert.assertEquals(location1.getId(), storageMovement.getOriginLocation().getId());
}
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-07-12 21:24:59 UTC (rev 308)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-07-12 21:39:35 UTC (rev 309)
@@ -52,13 +52,10 @@
Article
</th>
<th>
- Quantité
- </th>
- <th>
Utilisateur
</th>
<th>
- Date ordre
+ Date
</th>
</tr>
</thead>
@@ -73,25 +70,24 @@
<s:property value="originLocation.warehouse.code" />
-
<s:property value="originLocation.code" />
+ (<s:property value="originLocation.warehouse.building.code" />)
</td>
<td>
<s:if test="destinationLocation">
<s:property value="destinationLocation.warehouse.code" />
-
<s:property value="destinationLocation.code" />
+ (<s:property value="destinationLocation.warehouse.building.code" />)
</s:if>
</td>
<td>
<s:property value="article.code" />
</td>
<td>
- <s:property value="expectedQuantity" /> <s:property value="article.unit" />
- </td>
- <td>
<a href="#<s:property value="magalieUser.id" />"><s:property value="magalieUser.login" /></a>
</td>
<td>
- <s:property value="orderDate" />
+ <s:property value="movementDate" />
</td>
</tr>
</s:iterator>
@@ -118,16 +114,13 @@
Article
</th>
<th>
- Quantité ordre
- </th>
- <th>
Quantité réelle
</th>
<th>
Utilisateur
</th>
<th>
- Date ordre
+ Date mouvement
</th>
<th>
Date confirmation
@@ -159,16 +152,13 @@
<s:property value="article.code" />
</td>
<td>
- <s:property value="expectedQuantity" /> <s:property value="article.unit" />
- </td>
- <td>
<s:property value="actualQuantity" /> <s:property value="article.unit" />
</td>
<td>
<a href="#<s:property value="magalieUser.id" />"><s:property value="magalieUser.login" /></a>
</td>
<td>
- <s:property value="orderDate" />
+ <s:property value="movementDate" />
</td>
<td>
<s:property value="confirmDate" />
1
0
r308 - in trunk/magalie-web/src/main: java/com/franciaflex/magalie/web/action webapp/WEB-INF/content webapp/js
by bleny@users.forge.codelutin.com 12 Jul '13
by bleny@users.forge.codelutin.com 12 Jul '13
12 Jul '13
Author: bleny
Date: 2013-07-12 23:24:59 +0200 (Fri, 12 Jul 2013)
New Revision: 308
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
allow report error in SimpleWithdrawItem
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java 2013-07-12 20:50:13 UTC (rev 307)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SimpleWithdrawItemAction.java 2013-07-12 21:24:59 UTC (rev 308)
@@ -30,6 +30,7 @@
import com.franciaflex.magalie.services.SimpleWithdrawItemTask;
import com.franciaflex.magalie.services.exception.IllegalWithdrawException;
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
+import com.franciaflex.magalie.services.service.LocationErrorsService;
import com.franciaflex.magalie.services.service.SimpleWithdrawItemService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -50,6 +51,8 @@
protected SimpleWithdrawItemService service;
+ protected LocationErrorsService locationErrorsService;
+
protected String storedArticleId;
protected String articleBarcode;
@@ -62,6 +65,14 @@
protected String originLocationBarcode;
+ public void setService(SimpleWithdrawItemService service) {
+ this.service = service;
+ }
+
+ public void setLocationErrorsService(LocationErrorsService locationErrorsService) {
+ this.locationErrorsService = locationErrorsService;
+ }
+
public void setSession(MagalieSession session) {
this.session = session;
}
@@ -74,10 +85,6 @@
this.destinationWarehouseId = destinationWarehouseId;
}
- public void setService(SimpleWithdrawItemService service) {
- this.service = service;
- }
-
@Override
public String input() {
@@ -177,4 +184,37 @@
}
+ public String reportError() throws InvalidMagalieBarcodeException, IllegalWithdrawException {
+
+ MagalieUser magalieUser = session.getMagalieUser();
+
+ Building building = session.getBuilding();
+
+ simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, magalieUser, articleBarcode);
+
+ Optional<StoredArticle> storedArticleOptional =
+ Iterables.tryFind(
+ simpleWithdrawItemTask.getStoredArticles(),
+ StoredArticles.locationBarcodeEquals(originLocationBarcode));
+
+ if (storedArticleOptional.isPresent()) {
+
+ StoredArticle storedArticle = storedArticleOptional.get();
+
+ locationErrorsService.reportError(storedArticle.getLocation(), storedArticle.getArticle(), magalieUser);
+
+ addActionMessage("Anomalie signalée");
+
+ simpleWithdrawItemTask = service.getSimpleWithdrawItemTask(building, magalieUser, articleBarcode);
+
+ } else {
+
+ addFieldError("originLocationBarcode", "Ce n'est pas le code-barre d'un emplacement valide");
+
+ }
+
+ return INPUT;
+
+ }
+
}
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-12 20:50:13 UTC (rev 307)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-12 21:24:59 UTC (rev 308)
@@ -73,7 +73,8 @@
<div class="btn-group">
<s:a href="%{cancelUrl}" cssClass="btn" id="CancelLink" >Quitter (Esc)</s:a>
- <s:submit name="" value="Valider" cssClass="btn btn-primary" />
+ <s:submit action="simple-withdraw-item!reportError" value="Anomalie (F5)" cssClass="btn btn-danger" />
+ <s:submit action="simple-withdraw-item" value="Valider" cssClass="btn btn-primary" />
</div>
</s:form>
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 20:50:13 UTC (rev 307)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 21:24:59 UTC (rev 308)
@@ -99,7 +99,7 @@
}
});
if (storageMovement.articleUnavailable) {
- alert('Pas de stock');
+ alert('Plus de stock');
} else {
if (this.expectedQuantity) {
storageMovement.expectedQuantity = Math.min(model.remaining(), storageMovement.storedArticle.quantity);
@@ -148,7 +148,6 @@
},
async: false,
success: function(data) {
- console.log(data);
storageMovement.id = data.storageMovement.id;
},
fail: function(jqXHR, textStatus, errorThrown) {
@@ -260,7 +259,7 @@
},
- onNext : function() {
+ onNext : function(reportError) {
try {
@@ -269,6 +268,10 @@
model.withdraw(barcode, quantity);
+ if (reportError === true) {
+ model.reportError(barcode);
+ }
+
view.refresh();
var proposeAnotherLocation = ! model.expectedQuantity // pas de quantité demandée précisée au départ donc on ne sait pas s'il faut s'arrêter donc on propose au cas où
@@ -292,25 +295,8 @@
onReportError : function() {
- try {
+ controller.onNext(true);
- var barcode = $('#withdraw-item_locationBarcode').val();
- var quantity = parseFloat($('#withdraw-item_quantity').val());
-
- model.withdraw(barcode, quantity);
-
- model.reportError(barcode);
-
- view.refresh();
-
- } catch (ex) {
-
- if (ex instanceof ValidationError) {
- handleValidationError(ex);
- } else {
- throw ex;
- }
- }
},
onConfirm : function() {
1
0
r307 - in trunk/magalie-web/src/main: java/com/franciaflex/magalie/web/action webapp/js
by bleny@users.forge.codelutin.com 12 Jul '13
by bleny@users.forge.codelutin.com 12 Jul '13
12 Jul '13
Author: bleny
Date: 2013-07-12 22:50:13 +0200 (Fri, 12 Jul 2013)
New Revision: 307
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
allow to not specify quantity when in kanban
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-07-12 20:31:14 UTC (rev 306)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-07-12 20:50:13 UTC (rev 307)
@@ -160,36 +160,14 @@
}
- if (quantity == null) {
+ try {
- double quantityDefined;
+ quantity = service.getDefinedQuantity(article, destinationWarehouse);
- try {
+ } catch (ArticleNotAvailableForKanbanException e) {
- quantityDefined = service.getDefinedQuantity(article, destinationWarehouse);
+ addFieldError("articleBarcode", "Article non disponible par kanban");
- } catch (ArticleNotAvailableForKanbanException e) {
-
- addFieldError("articleBarcode", "Article non disponible par kanban");
-
- return INPUT;
-
- }
-
- if (quantityDefined > 0) {
-
- quantity = quantityDefined;
-
- }
-
- }
-
- if (quantity == null || ! (quantity > 0.)) {
-
- askQuantity = true;
-
- addFieldError("quantity", "Il faut préciser une quantité pour cet article");
-
return INPUT;
}
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 20:31:14 UTC (rev 306)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 20:50:13 UTC (rev 307)
@@ -269,7 +269,11 @@
model.withdraw(barcode, quantity);
- if (model.expectedQuantity && model.withdrawn() < model.expectedQuantity) {
+ view.refresh();
+
+ var proposeAnotherLocation = ! model.expectedQuantity // pas de quantité demandée précisée au départ donc on ne sait pas s'il faut s'arrêter donc on propose au cas où
+ || model.withdrawn() < model.expectedQuantity // on a une quantité demandée mais on ne l'a pas encore atteinte
+ if (proposeAnotherLocation) {
model.newEmptyStorageMovementForNextLocation();
}
1
0
r306 - 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/js
by bleny@users.forge.codelutin.com 12 Jul '13
by bleny@users.forge.codelutin.com 12 Jul '13
12 Jul '13
Author: bleny
Date: 2013-07-12 22:31:14 +0200 (Fri, 12 Jul 2013)
New Revision: 306
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix withdraw-item-input workflow, renable find ordre to execute in RequestedArticleService
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java 2013-07-12 17:43:32 UTC (rev 305)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java 2013-07-12 20:31:14 UTC (rev 306)
@@ -40,4 +40,8 @@
}
return driverLicenseRequired;
}
+
+ public boolean isSuccess() {
+ return storedArticle != null;
+ }
}
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-07-12 17:43:32 UTC (rev 305)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-07-12 20:31:14 UTC (rev 306)
@@ -52,6 +52,7 @@
import java.util.Collection;
import java.util.Comparator;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -98,194 +99,173 @@
protected FindOrderToExecuteResult findOrderToExecute(Set<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
- throw new UnsupportedOperationException();
+ ArticleStorageService articleStorageService =
+ serviceContext.newService(ArticleStorageService.class);
-// ArticleStorageService articleStorageService =
-// serviceContext.newService(ArticleStorageService.class);
-//
-// BookArticleResult bookArticleResult = null;
-//
-// RequestedArticle requestedArticle = null;
-//
-// boolean success = false;
-//
-// Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
-//
-// boolean driverLicenseRequired = false;
-//
-// boolean somethingIsAvailable = false;
-//
-// while (!success && requestedArticleIterator.hasNext()) {
-//
-// requestedArticle = requestedArticleIterator.next();
-//
-// Article article = requestedArticle.getArticle();
-//
-// double quantity = requestedArticle.getQuantity();
-//
-// Location destinationLocation = requestedArticle.getDestinationLocation();
-//
-// BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, quantity, destinationLocation, false);
-//
-// // bookArticleResult = articleStorageService.bookArticle(bookArticleRequest);
-//
-// boolean articleIsAvailable = !bookArticleResult.isArticleUnavailable();
-//
-// if (articleIsAvailable) {
-//
-// somethingIsAvailable = true;
-//
-// driverLicenseRequired |= bookArticleResult.isArticleInaccessible();
-//
-// }
-//
-// success = bookArticleResult.isSuccess();
-//
-// }
-//
-// FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
-//
-// if (success) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("order to execute found: " + requestedArticle);
-// }
-//
-// Preconditions.checkState(requestedArticle != null);
-//
-// JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
-//
-// DeliveredRequestedArticleJpaDao dao = persistenceContext.getDeliveredRequestedArticleDao();
-//
-// DeliveredRequestedArticle newDeliveredRequestedArticle = new DeliveredRequestedArticle();
-//
-// newDeliveredRequestedArticle.setRequestedArticle(requestedArticle);
-//
-// StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-//
-// // newDeliveredRequestedArticle.setStorageMovementOrder(storageMovementOrder);
-//
-// dao.persist(newDeliveredRequestedArticle);
-//
-// findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
-//
-// // deal with affectations
-// DeliveredRequestedListJpaDao deliveredRequestedListDao =
-// persistenceContext.getDeliveredRequestedListDao();
-//
-// DeliveredRequestedList oldAffectation =
-// deliveredRequestedListDao.findByAffectedTo(magalieUser);
-//
-// RequestedList requestedList = requestedArticle.getRequestedList();
-//
-// DeliveredRequestedList newAffectation =
-// deliveredRequestedListDao.findByRequestedList(requestedList);
-//
-// if (newAffectation == null) {
-//
-// newAffectation = new DeliveredRequestedList();
-//
-// deliveredRequestedListDao.persist(newAffectation);
-//
-// }
-//
-// newAffectation.setAffectedTo(magalieUser);
-//
-// newAffectation.setRequestedList(requestedList);
-//
-// newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
-//
-// deliveredRequestedListDao.merge(newAffectation);
-//
-// if (oldAffectation == null) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("user has no previous affectation");
-// }
-//
-// findOrderToExecuteResult.setNewAffectation(newAffectation);
-//
-// } else {
-//
-// if (log.isInfoEnabled()) {
-// log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
-// }
-//
-// boolean affectationChanged = !oldAffectation.getRequestedList().equals(requestedList);
-//
-// if (affectationChanged) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("user changed affectation from "
-// + oldAffectation.getRequestedList().getCode()
-// + " to " + requestedList.getCode());
-// }
-//
-// boolean isFinished = oldAffectation.getStatus().equals(DeliveredRequestedListStatus.COMPLETE);
-//
-// if (!isFinished) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("request list " + oldAffectation.getRequestedList()
-// + " is not complete, putting it back to pending");
-// }
-//
-// oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
-//
-// oldAffectation.setAffectedTo(null);
-//
-// }
-//
-// findOrderToExecuteResult.setOldAffectation(oldAffectation);
-//
-// findOrderToExecuteResult.setNewAffectation(newAffectation);
-//
-// }
-//
-// }
-//
-// persistenceContext.commit();
-//
-// } else {
-//
-// if (requestedArticlesByPriority.isEmpty()) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("no order to execute found: nothing to do");
-// }
-//
-// findOrderToExecuteResult.setNothingToDo(true);
-//
-// } else {
-//
-// if (somethingIsAvailable) {
-//
-// if (log.isInfoEnabled()) {
-// log.info("no order to execute found: there is something available to do but driver license is required");
-// }
-//
-// Preconditions.checkState(driverLicenseRequired);
-//
-// findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
-//
-// } else {
-//
-// if (log.isInfoEnabled()) {
-// log.info("no order to execute found: everything is unavailable");
-// }
-//
-// Preconditions.checkState(!driverLicenseRequired);
-//
-// findOrderToExecuteResult.setEverythingUnavailable(true);
-//
-// }
-//
-// }
-//
-// }
-//
-// return findOrderToExecuteResult;
+ RequestedArticle requestedArticle = null;
+ boolean success = false;
+
+ Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
+
+ boolean driverLicenseRequired = false;
+
+ boolean somethingIsAvailable = false;
+
+ while ( ! success && requestedArticleIterator.hasNext()) {
+
+ requestedArticle = requestedArticleIterator.next();
+
+ String articleId = requestedArticle.getArticle().getId();
+
+ RealTimeStorageMovementTask realTimeStorageMovementTask =
+ articleStorageService.getRealTimeStorageMovementTask(building, magalieUser, articleId);
+
+ boolean articleIsAvailable = ! realTimeStorageMovementTask.isArticleUnavailable();
+
+ if (articleIsAvailable) {
+
+ somethingIsAvailable = true;
+
+ driverLicenseRequired |= realTimeStorageMovementTask.isDriverLicenseRequired();
+
+ }
+
+ success = realTimeStorageMovementTask.isSuccess();
+
+ }
+
+ FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
+
+ if (success) {
+
+ if (log.isInfoEnabled()) {
+ log.info("order to execute found: " + requestedArticle);
+ }
+
+ Preconditions.checkState(requestedArticle != null);
+
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ findOrderToExecuteResult.setRequestedArticle(requestedArticle);
+
+ // deal with affectations
+ DeliveredRequestedListJpaDao deliveredRequestedListDao =
+ persistenceContext.getDeliveredRequestedListDao();
+
+ DeliveredRequestedList oldAffectation =
+ deliveredRequestedListDao.findByAffectedTo(magalieUser);
+
+ RequestedList requestedList = requestedArticle.getRequestedList();
+
+ DeliveredRequestedList newAffectation =
+ deliveredRequestedListDao.findByRequestedList(requestedList);
+
+ if (newAffectation == null) {
+
+ newAffectation = new DeliveredRequestedList();
+
+ deliveredRequestedListDao.persist(newAffectation);
+
+ }
+
+ newAffectation.setAffectedTo(magalieUser);
+
+ newAffectation.setRequestedList(requestedList);
+
+ newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
+
+ deliveredRequestedListDao.merge(newAffectation);
+
+ if (oldAffectation == null) {
+
+ if (log.isInfoEnabled()) {
+ log.info("user has no previous affectation");
+ }
+
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
+ }
+
+ boolean affectationChanged = !oldAffectation.getRequestedList().equals(requestedList);
+
+ if (affectationChanged) {
+
+ if (log.isInfoEnabled()) {
+ log.info("user changed affectation from "
+ + oldAffectation.getRequestedList().getCode()
+ + " to " + requestedList.getCode());
+ }
+
+ boolean isFinished = oldAffectation.getStatus().equals(DeliveredRequestedListStatus.COMPLETE);
+
+ if (!isFinished) {
+
+ if (log.isInfoEnabled()) {
+ log.info("request list " + oldAffectation.getRequestedList()
+ + " is not complete, putting it back to pending");
+ }
+
+ oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
+
+ oldAffectation.setAffectedTo(null);
+
+ }
+
+ findOrderToExecuteResult.setOldAffectation(oldAffectation);
+
+ findOrderToExecuteResult.setNewAffectation(newAffectation);
+
+ }
+
+ }
+
+ persistenceContext.commit();
+
+ } else {
+
+ if (requestedArticlesByPriority.isEmpty()) {
+
+ if (log.isInfoEnabled()) {
+ log.info("no order to execute found: nothing to do");
+ }
+
+ findOrderToExecuteResult.setNothingToDo(true);
+
+ } else {
+
+ if (somethingIsAvailable) {
+
+ if (log.isInfoEnabled()) {
+ log.info("no order to execute found: there is something available to do but driver license is required");
+ }
+
+ Preconditions.checkState(driverLicenseRequired);
+
+ findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("no order to execute found: everything is unavailable");
+ }
+
+ Preconditions.checkState(!driverLicenseRequired);
+
+ findOrderToExecuteResult.setEverythingUnavailable(true);
+
+ }
+
+ }
+
+ }
+
+ return findOrderToExecuteResult;
+
}
protected Set<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
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-07-12 17:43:32 UTC (rev 305)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-07-12 20:31:14 UTC (rev 306)
@@ -98,6 +98,10 @@
this.requestedArticleService = requestedArticleService;
}
+ public void setRequestedArticleId(String requestedArticleId) {
+ this.requestedArticleId = requestedArticleId;
+ }
+
@Override
public void prepare() {
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-07-12 17:43:32 UTC (rev 305)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-07-12 20:31:14 UTC (rev 306)
@@ -63,10 +63,12 @@
<s:url action="withdraw-item!cancel" id="cancelUrl" >
<%--s:param name="storageMovementOrderId" value="%{storageMovementOrderId}" /--%>
</s:url>
- <s:a href="%{cancelUrl}" cssClass="btn btn-small" id="cancelLink" >Quitter (Esc)</s:a>
- <input type="button" id="reportError" value="Anomalie (F5)" class="btn btn-danger btn-small" />
- <input type="button" id="next" value="Suivant" class="btn btn-primary btn-small" />
- <s:submit name="confirm" value="Terminer" cssClass="btn btn-success btn-small" />
+ <s:a href="%{cancelUrl}" cssClass="btn btn-mini" id="cancelLink" >Abandon (Esc)</s:a>
+ <div style="display: none">
+ <input type="button" id="reportError" value="Ano. (F5)" class="btn btn-danger btn-mini" />
+ </div>
+ <s:submit name="next" value="Suivant (⏎)" cssClass="btn btn-primary btn-mini" />
+ <input type="button" id="confirm" value="Terminer (F4)" class="btn btn-success btn-mini" />
</div>
</s:form>
<div id="storageMovementTemplate" class="template">
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 17:43:32 UTC (rev 305)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 20:31:14 UTC (rev 306)
@@ -101,7 +101,11 @@
if (storageMovement.articleUnavailable) {
alert('Pas de stock');
} else {
- storageMovement.expectedQuantity = Math.min(model.remaining(), storageMovement.storedArticle.quantity);
+ if (this.expectedQuantity) {
+ storageMovement.expectedQuantity = Math.min(model.remaining(), storageMovement.storedArticle.quantity);
+ } else {
+ storageMovement.expectedQuantity = storageMovement.storedArticle.quantity;
+ }
this.storageMovements.push(storageMovement);
this.storageMovementsIndex += 1;
}
@@ -230,19 +234,19 @@
}
},
- refreshButtons : function() {
- if (model.allowSubmit) {
- $('#withdraw-item_next').val('Terminer').removeClass('btn-primary').addClass('btn-success');
- } else {
- $('#withdraw-item_next').val('Suivant').removeClass('btn-success').addClass('btn-primary');
- }
- },
+// refreshButtons : function() {
+// if (model.allowSubmit) {
+// $('#withdraw-item_next').val('Terminer').removeClass('btn-primary').addClass('btn-success');
+// } else {
+// $('#withdraw-item_next').val('Suivant').removeClass('btn-success').addClass('btn-primary');
+// }
+// },
refresh : function() {
this.refreshSummary();
this.refreshLocations();
this.refreshForm();
- this.refreshButtons();
+// this.refreshButtons();
$('#withdraw-item_locationBarcode').focus();
}
@@ -265,7 +269,9 @@
model.withdraw(barcode, quantity);
- model.newEmptyStorageMovementForNextLocation();
+ if (model.expectedQuantity && model.withdrawn() < model.expectedQuantity) {
+ model.newEmptyStorageMovementForNextLocation();
+ }
view.refresh();
@@ -291,8 +297,6 @@
model.reportError(barcode);
- model.newEmptyStorageMovementForNextLocation();
-
view.refresh();
} catch (ex) {
@@ -305,13 +309,29 @@
}
},
- onSubmit : function(e) {
+ onConfirm : function() {
// push model as Json in a hidden field
$('#withdraw-item_confirmation').val(JSON.stringify(model.getConfirmation()));
+ model.forceConfirm = true;
+
+ $('#withdraw-item').submit();
+
},
+ onSubmit : function(e) {
+
+ if (model.forceConfirm) {
+
+ } else {
+
+ e.preventDefault();
+
+ }
+
+ }
+
};
// bindings
@@ -319,8 +339,9 @@
$('#withdraw-item').submit(controller.onSubmit);
$('#reportError').click(controller.onReportError);
$('#reportCancel').click(controller.onCancel);
- $('#next').click(controller.onNext);
- // $('#withdraw-item_confirm').click(controller.confirm);
+ $('#withdraw-item_next').click(controller.onNext);
+ $('#confirm').click(controller.onConfirm);
+ bindKey('F4', controller.onConfirm);
bindKey('F5', controller.onReportError);
bindKey('Esc', function(){ redirectTo($('#cancelLink'));});
controller.onShowFirstLocation();
1
0
12 Jul '13
Author: bleny
Date: 2013-07-12 19:43:32 +0200 (Fri, 12 Jul 2013)
New Revision: 305
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
break everything to go real time
Added:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/GetRealTimeStorageMovementTaskJsonAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SaveRealTimeStorageMovementJsonAction.java
Removed:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedArticle.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StoredArticle.java
trunk/magalie-persistence/src/main/xmi/magalie.zargo
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementConfirmation.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/PrepareWithdrawItemAction.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
trunk/magalie-web/src/main/resources/struts.xml
trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp
trunk/magalie-web/src/main/webapp/WEB-INF/content/prepare-withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
trunk/pom.xml
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleDao.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleDao.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -25,15 +25,12 @@
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle;
import com.franciaflex.magalie.persistence.entity.RequestedList;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import java.util.List;
/** @author bleny */
public interface DeliveredRequestedArticleDao {
- DeliveredRequestedArticle find(StorageMovementOrder storageMovementOrder);
-
List<DeliveredRequestedArticle> findAll(RequestedList requestedList);
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleJpaDao.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/DeliveredRequestedArticleJpaDao.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -25,7 +25,6 @@
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle;
import com.franciaflex.magalie.persistence.entity.RequestedList;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
@@ -38,15 +37,6 @@
}
@Override
- public DeliveredRequestedArticle find(StorageMovementOrder storageMovementOrder) {
- TypedQuery<DeliveredRequestedArticle> query =
- entityManager.createQuery(
- "from DeliveredRequestedArticle dra where dra.storageMovementOrder = :storageMovementOrder", getEntityClass());
- query.setParameter("storageMovementOrder", storageMovementOrder);
- return findUniqueOrNull(query);
- }
-
- @Override
public List<DeliveredRequestedArticle> findAll(RequestedList requestedList) {
TypedQuery<DeliveredRequestedArticle> query =
entityManager.createQuery(
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderDao.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderDao.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,36 +0,0 @@
-package com.franciaflex.magalie.persistence.dao;
-
-/*
- * #%L
- * MagaLiE :: Persistence
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.persistence.entity.Building;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-
-import java.util.List;
-
-public interface StorageMovementOrderDao {
-
- public List<StorageMovementOrder> findNotConfirmedByUser(MagalieUser magalieUser, Building building);
-
-}
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderJpaDao.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/StorageMovementOrderJpaDao.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,53 +0,0 @@
-package com.franciaflex.magalie.persistence.dao;
-
-/*
- * #%L
- * MagaLiE :: Persistence
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.persistence.entity.Building;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import java.util.List;
-
-public class StorageMovementOrderJpaDao extends AbstractStorageMovementOrderJpaDao {
-
- public StorageMovementOrderJpaDao(EntityManager entityManager) {
- super(entityManager);
- }
-
- @Override
- public List<StorageMovementOrder> findNotConfirmedByUser(MagalieUser magalieUser, Building building) {
- Query query = entityManager.createQuery(
- " select distinct smo" +
- " from StorageMovementOrder smo" +
- " inner join smo.storageMovements as sm" +
- " where sm.magalieUser = :magalieUser" +
- " and sm.originLocation.warehouse.building = :building" +
- " and sm.confirmDate is null" );
- query.setParameter("magalieUser", magalieUser);
- query.setParameter("building", building);
- return query.getResultList();
- }
-}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedArticle.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedArticle.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/DeliveredRequestedArticle.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -23,6 +23,9 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.StorageMovements;
+import com.google.common.collect.Iterables;
+
import javax.persistence.Entity;
@Entity
@@ -31,7 +34,10 @@
private static final long serialVersionUID = 1L;
public boolean isConfirmed() {
- return getStorageMovementOrder().isConfirmed();
+ boolean isConfirmed = Iterables.all(
+ getStorageMovements(),
+ StorageMovements.storageMovementIsConfirmed());
+ return isConfirmed;
}
} //DeliveredRequestedArticle
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StorageMovementOrder.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,124 +0,0 @@
-package com.franciaflex.magalie.persistence.entity;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.persistence.StorageMovements;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.nuiton.jpa.api.JpaEntities;
-
-import javax.persistence.Entity;
-import java.util.Set;
-
-@Entity
-public class StorageMovementOrder extends AbstractJpaStorageMovementOrder {
-
- private static final long serialVersionUID = 1L;
-
- protected Set<Article> getArticles() {
- Set<Article> articles =
- Sets.newHashSet(
- Iterables.transform(
- getStorageMovements(),
- StorageMovements.getArticleFunction()
- )
- );
- return articles;
- }
-
- public Article getArticle() {
- Article onlyElement = Iterables.getOnlyElement(getArticles());
- return onlyElement;
- }
-
- public double getQuantity() {
- double quantity = 0.;
- for (StorageMovement storageMovement : this.storageMovements) {
- quantity += storageMovement.getExpectedQuantity();
- }
- return quantity;
- }
-
- public void addStorageMovement(StorageMovement storageMovement) {
- if (this.storageMovements == null) {
- this.storageMovements= Lists.newLinkedList();
- }
- super.addStorageMovements(storageMovement);
- }
-
- public Set<Location> getLocations() {
- Set<Location> locations =
- Sets.newHashSet(
- Iterables.transform(
- getStorageMovements(),
- StorageMovements.getOriginFunction()
- )
- );
- return locations;
- }
-
- public StorageMovement findStorageMovementByLocationId(String locationId) {
- StorageMovement storageMovement =
- Iterables.find(
- getStorageMovements(),
- Predicates.compose(
- JpaEntities.entityHasId(locationId),
- StorageMovements.getOriginFunction()
- ),
- null
- );
- return storageMovement;
- }
-
- @Override
- public String toString() {
- return ToStringBuilder.reflectionToString(this);
- }
-
- protected Set<Location> getDestinationLocations() {
- Set<Location> locations =
- Sets.newHashSet(
- Iterables.transform(
- getStorageMovements(),
- StorageMovements.getDestinationFunction()
- )
- );
- return locations;
- }
-
- public Location getDestinationLocation() {
- Location onlyElement = Iterables.getOnlyElement(getDestinationLocations());
- return onlyElement;
- }
-
- public boolean isConfirmed() {
- boolean isConfirmed = Iterables.all(
- getStorageMovements(),
- StorageMovements.storageMovementIsConfirmed());
- return isConfirmed;
- }
-} //StorageMovementOrder
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StoredArticle.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StoredArticle.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/StoredArticle.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -35,7 +35,7 @@
@Override
public String toString() {
return Objects.toStringHelper(this)
- .add(PROPERTY_QUANTITY, quantity + " " + getArticle().getCode())
+ .add(PROPERTY_QUANTITY, quantity + " " + getArticle().getUnit())
.add(PROPERTY_ARTICLE, article)
.add(PROPERTY_LOCATION, location)
.toString();
Modified: trunk/magalie-persistence/src/main/xmi/magalie.zargo
===================================================================
(Binary files differ)
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementConfirmation.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementConfirmation.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementConfirmation.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -23,31 +23,34 @@
* #L%
*/
-import java.util.Map;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+
import java.util.Set;
public class StorageMovementConfirmation {
- protected String storageMovementOrderId;
+ protected String articleId;
- protected Map<String, Double> locationsIdsToActualQuantities;
+ protected Set<String> storageMovementIds;
protected Set<String> locationInErrorIds;
- public String getStorageMovementOrderId() {
- return storageMovementOrderId;
+ protected String requestedArticleId;
+
+ public String getArticleId() {
+ return articleId;
}
- public void setStorageMovementOrderId(String storageMovementOrderId) {
- this.storageMovementOrderId = storageMovementOrderId;
+ public void setArticleId(String articleId) {
+ this.articleId = articleId;
}
- public Map<String, Double> getLocationsIdsToActualQuantities() {
- return locationsIdsToActualQuantities;
+ public Set<String> getStorageMovementIds() {
+ return storageMovementIds;
}
- public void setLocationsIdsToActualQuantities(Map<String, Double> locationsIdsToActualQuantities) {
- this.locationsIdsToActualQuantities = locationsIdsToActualQuantities;
+ public void setStorageMovementIds(Set<String> storageMovementIds) {
+ this.storageMovementIds = storageMovementIds;
}
public Set<String> getLocationInErrorIds() {
@@ -57,4 +60,17 @@
public void setLocationInErrorIds(Set<String> locationInErrorIds) {
this.locationInErrorIds = locationInErrorIds;
}
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
+
+ public String getRequestedArticleId() {
+ return requestedArticleId;
+ }
+
+ public void setRequestedArticleId(String requestedArticleId) {
+ this.requestedArticleId = requestedArticleId;
+ }
}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,76 +0,0 @@
-package com.franciaflex.magalie.services;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.persistence.entity.Article;
-import com.franciaflex.magalie.persistence.entity.StorageMovement;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
-
-import java.util.List;
-
-public class StorageMovementTask {
-
- protected StorageMovementOrder storageMovementOrder;
-
- protected List<StorageMovement> extraStorageMovements = Lists.newLinkedList();
-
- public StorageMovementTask(StorageMovementOrder storageMovementOrder) {
- this.storageMovementOrder = storageMovementOrder;
- }
-
- public double getQuantity() {
- return storageMovementOrder.getQuantity();
- }
-
- public Article getArticle() {
- return storageMovementOrder.getArticle();
- }
-
- public String getStorageMovementOrderId() {
- return storageMovementOrder.getId();
- }
-
- public List<StorageMovement> getStorageMovements() {
-
- List<StorageMovement> storageMovements = Lists.newLinkedList();
-
- storageMovements.addAll(storageMovementOrder.getStorageMovements());
-
- storageMovements.addAll(extraStorageMovements);
-
- return storageMovements;
-
- }
-
- public void addExtraStorageMovement(StorageMovement extraStorageMovement) {
- extraStorageMovements.add(extraStorageMovement);
- }
-
- @Override
- public String toString() {
- return ReflectionToStringBuilder.toString(this);
- }
-}
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -26,9 +26,10 @@
import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext;
import com.franciaflex.magalie.persistence.StorageMovements;
import com.franciaflex.magalie.persistence.StoredArticles;
+import com.franciaflex.magalie.persistence.dao.ArticleJpaDao;
import com.franciaflex.magalie.persistence.dao.LocationJpaDao;
import com.franciaflex.magalie.persistence.dao.StorageMovementDao;
-import com.franciaflex.magalie.persistence.dao.StorageMovementOrderJpaDao;
+import com.franciaflex.magalie.persistence.dao.StorageMovementJpaDao;
import com.franciaflex.magalie.persistence.dao.StoredArticleDao;
import com.franciaflex.magalie.persistence.dao.UnavailableArticleJpaDao;
import com.franciaflex.magalie.persistence.entity.Article;
@@ -36,21 +37,23 @@
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.StorageMovement;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.persistence.entity.StoredArticle;
import com.franciaflex.magalie.persistence.entity.UnavailableArticle;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.franciaflex.magalie.services.StorageMovementConfirmation;
-import com.franciaflex.magalie.services.StorageMovementTask;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+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.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -69,81 +72,15 @@
this.serviceContext = serviceContext;
}
- /**
- * Everything starts here, every time an article is requested, a call to
- * this method must be used.
- *
- * @param bookArticleRequest the request gather all the details we must know
- * before computing a storage movement order
- */
- public BookArticleResult bookArticle(BookArticleRequest bookArticleRequest) {
-
- Preconditions.checkNotNull(bookArticleRequest.getMagalieUser());
-
- Preconditions.checkNotNull(bookArticleRequest.getBuilding());
-
- Article article = bookArticleRequest.getArticle();
-
- Preconditions.checkNotNull(article);
-
- Preconditions.checkNotNull(bookArticleRequest.getDestinationLocation());
-
- Preconditions.checkArgument(bookArticleRequest.getRequestedQuantity() > 0.);
-
- if (log.isInfoEnabled()) {
- log.info("will process article request" + bookArticleRequest);
- }
-
- // we will proceed in three main steps
-
- // fist, get a snapshot of the actual current state of the stock
- Iterable<StoredArticle> storedArticles = getStoredArticles(bookArticleRequest.getBuilding(), article);
-
- // second step, sort all those stored article by priority
- Set<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles);
-
- // third step, compute actual order with priorities and actual quantities
- BookArticleResult bookArticleResult = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles);
-
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
-
- boolean saveStorageMovementOrder = bookArticleResult.isSuccess();
-
- if (saveStorageMovementOrder) {
-
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- StorageMovementOrderJpaDao dao = persistenceContext.getStorageMovementOrderDao();
-
- dao.persist(storageMovementOrder);
-
- }
-
- updateArticleAvailability(bookArticleResult);
-
- persistenceContext.commit();
-
- return bookArticleResult;
-
- }
-
/** Add or remove a line in table {@link UnavailableArticle} */
- protected void updateArticleAvailability(BookArticleResult bookArticleResult) {
+ protected void updateArticleAvailability(Building building, Article article, boolean articleIsAvailable) {
- BookArticleRequest bookArticleRequest = bookArticleResult.getBookArticleRequest();
-
- Article article = bookArticleRequest.getArticle();
-
- Building building = bookArticleRequest.getBuilding();
-
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
UnavailableArticleJpaDao dao = persistenceContext.getUnavailableArticleDao();
UnavailableArticle unavailableArticle = dao.findByArticle(building, article);
- boolean articleIsAvailable = !bookArticleResult.isArticleUnavailable();
-
if (articleIsAvailable) {
if (unavailableArticle != null) {
@@ -180,93 +117,6 @@
}
- protected BookArticleResult buildStorageMovementOrder(BookArticleRequest bookArticleRequest, Set<StoredArticle> sortedStoredArticles) {
-
- Article article = bookArticleRequest.getArticle();
-
- MagalieUser magalieUser = bookArticleRequest.getMagalieUser();
-
- double requestedQuantity = bookArticleRequest.getRequestedQuantity();
-
- BookArticleResult bookArticleResult = new BookArticleResult();
-
- bookArticleResult.setBookArticleRequest(bookArticleRequest);
-
- StorageMovementOrder storageMovementOrder = new StorageMovementOrder();
-
- double quantity = 0;
-
- Date orderDate = serviceContext.getNow();
-
- for (StoredArticle storedArticle : sortedStoredArticles) {
-
- double quantityLeft = requestedQuantity - quantity;
-
- double quantityInLocation = storedArticle.getQuantity();
-
- double quantityWithdrawn = Math.min(quantityLeft, quantityInLocation);
-
- if (quantityWithdrawn > 0.) {
-
- Location originLocation = storedArticle.getLocation();
-
- bookArticleResult.userMustAccessLocation(originLocation);
-
- quantity += quantityWithdrawn;
-
- StorageMovement newStorageMovement = new StorageMovement();
-
- newStorageMovement.setArticle(article);
-
- newStorageMovement.setOrderDate(orderDate);
-
- newStorageMovement.setMagalieUser(magalieUser);
-
- newStorageMovement.setOriginLocation(originLocation);
-
- newStorageMovement.setDestinationLocation(bookArticleRequest.getDestinationLocation());
-
- newStorageMovement.setExpectedQuantity(quantityWithdrawn);
-
- storageMovementOrder.addStorageMovement(newStorageMovement);
-
- }
- }
-
- // TODO brendan 15/04/13 refactor
-
- if (CollectionUtils.isEmpty(storageMovementOrder.getStorageMovements())) {
-
- storageMovementOrder = null;
-
- } else {
-
- if (quantity < requestedQuantity) {
-
- if (bookArticleRequest.isBestEffortPolicy()) {
-
- log.debug("best effort policy, requested quantity was "
- + requestedQuantity + " but only " + quantity +
- " available");
-
- } else {
-
- // strict policy, we must deliver all requested quantity
-
- storageMovementOrder = null;
-
- }
-
- }
-
- }
-
- bookArticleResult.setStorageMovementOrder(storageMovementOrder);
-
- return bookArticleResult;
-
- }
-
protected Set<StoredArticle> sortStoredArticlesByPriority(Iterable<StoredArticle> storedArticles) {
Ordering<StoredArticle> orderingByPriority =
@@ -287,54 +137,6 @@
}
- public StorageMovementTask getStorageMovementTask(String storageMovementOrderId) {
-
- StorageMovementOrderJpaDao dao = serviceContext.getPersistenceContext().getStorageMovementOrderDao();
-
- StorageMovementOrder storageMovementOrder = dao.findById(storageMovementOrderId);
-
- Preconditions.checkArgument(
- storageMovementOrder != null,
- "cet ordre de mouvement n'existe pas " + storageMovementOrderId);
-
- Preconditions.checkState(
- ! storageMovementOrder.isConfirmed(),
- "ordre de mouvement déjà confirmé");
-
- StorageMovementTask storageMovementTask = new StorageMovementTask(storageMovementOrder);
-
- Article article = storageMovementOrder.getArticle();
-
- Set<Location> locationsInOrder = storageMovementOrder.getLocations();
-
- // we suppose the order concerns movement in the same building
- Building building = Iterables.get(locationsInOrder, 0).getWarehouse().getBuilding();
-
- Iterable<StoredArticle> storedArticles = getStoredArticles(building, article);
-
- for (StoredArticle storedArticle : storedArticles) {
-
- Location location = storedArticle.getLocation();
-
- if (!locationsInOrder.contains(location)) {
-
- StorageMovement newStorageMovement = new StorageMovement();
-
- newStorageMovement.setArticle(article);
-
- newStorageMovement.setOriginLocation(location);
-
- newStorageMovement.setExpectedQuantity(0.);
-
- storageMovementTask.addExtraStorageMovement(newStorageMovement);
-
- }
- }
-
- return storageMovementTask;
-
- }
-
/** Get a snapshot of the actual current state of the stock. */
protected Iterable<StoredArticle> getStoredArticles(Building building, Article article) {
@@ -417,103 +219,255 @@
public void confirmStorageMovement(StorageMovementConfirmation confirmation, MagalieUser magalieUser) {
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ Preconditions.checkNotNull(confirmation);
- StorageMovementOrderJpaDao storageMovementOrderDao =
- persistenceContext.getStorageMovementOrderDao();
+ if (log.isDebugEnabled()) {
+ log.debug(magalieUser + " will make confirmation " + confirmation);
+ }
- LocationJpaDao locationDao = persistenceContext.getLocationDao();
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- StorageMovementOrder storageMovementOrder =
- storageMovementOrderDao.findById(
- confirmation.getStorageMovementOrderId());
+ ArticleJpaDao articleDao = persistenceContext.getArticleDao();
+ Article article = articleDao.findById(confirmation.getArticleId());
+
Date confirmDate = serviceContext.getNow();
+ StorageMovementJpaDao storageMovementDao = persistenceContext.getStorageMovementDao();
+
+ Set<StorageMovement> confirmedStorageMovements = Sets.newHashSet();
+
+ for (String storageMovementId : confirmation.getStorageMovementIds()) {
+
+ StorageMovement storageMovement =
+ storageMovementDao.findById(storageMovementId);
+
+ storageMovement.setConfirmDate(confirmDate);
+
+ confirmedStorageMovements.add(storageMovement);
+
+ if (log.isDebugEnabled()) {
+ log.debug("confirmed storage movement " + storageMovement);
+ }
+
+ }
+
LocationErrorsService locationErrorsService =
serviceContext.newService(LocationErrorsService.class);
- Location destinationLocation = storageMovementOrder.getDestinationLocation();
+ LocationJpaDao locationDao = persistenceContext.getLocationDao();
- for (Map.Entry<String, Double> locationIdToActualQuantity : confirmation.getLocationsIdsToActualQuantities().entrySet()) {
+ for (String locationInErrorId : confirmation.getLocationInErrorIds()) {
- String locationId = locationIdToActualQuantity.getKey();
+ Location locationInError = locationDao.findById(locationInErrorId);
- double actualQuantity = locationIdToActualQuantity.getValue();
+ locationErrorsService.reportError(locationInError, article, magalieUser, confirmDate);
- StorageMovement storageMovement =
- storageMovementOrder.findStorageMovementByLocationId(locationId);
+ }
- if (storageMovement == null) {
+ RequestedArticleService requestedArticleService =
+ serviceContext.newService(RequestedArticleService.class);
- // user made a movement out of the order from its own initiative
- storageMovement = new StorageMovement();
+ requestedArticleService.onStorageMovementConfirmation(confirmation, confirmedStorageMovements);
- Location originLocation = locationDao.findById(locationId);
+ persistenceContext.commit();
- storageMovement.setOriginLocation(originLocation);
+ }
- storageMovement.setDestinationLocation(destinationLocation);
+ public void cancelStorageMovement(StorageMovementConfirmation confirmation) {
- storageMovement.setMagalieUser(magalieUser);
+ if (log.isDebugEnabled()) {
+ log.debug(" will make cancellation " + confirmation);
+ }
- storageMovement.setArticle(storageMovementOrder.getArticle());
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- storageMovement.setExpectedQuantity(0.);
+ StorageMovementJpaDao storageMovementDao = persistenceContext.getStorageMovementDao();
- storageMovementOrder.getStorageMovements().add(storageMovement);
+ Set<StorageMovement> cancelledStorageMovements = Sets.newHashSet();
+ for (String storageMovementId : confirmation.getStorageMovementIds()) {
+
+ StorageMovement storageMovement =
+ storageMovementDao.findById(storageMovementId);
+
+ cancelledStorageMovements.add(storageMovement);
+
+ storageMovementDao.remove(storageMovement);
+
+ if (log.isDebugEnabled()) {
+ log.debug("cancelled storage movement " + storageMovement);
}
- storageMovement.setConfirmDate(confirmDate);
+ }
- storageMovement.setActualQuantity(actualQuantity);
+ persistenceContext.commit();
+ }
+
+ public RealTimeStorageMovementTask getRealTimeStorageMovementTask(Building building, MagalieUser magalieUser, String articleId) {
+
+ Preconditions.checkNotNull(magalieUser);
+
+ Preconditions.checkNotNull(building);
+
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+
+ ArticleJpaDao articleDao = persistenceContext.getArticleDao();
+
+ Article article = articleDao.findById(articleId);
+
+ Preconditions.checkNotNull(article);
+
+ if (log.isInfoEnabled()) {
+ log.info("will process real time article request in building " +
+ building + " by user " + magalieUser + " for article " + article);
}
- for (String locationInErrorId : confirmation.getLocationInErrorIds()) {
+ // we will proceed in three main steps
- Location locationInError = locationDao.findById(locationInErrorId);
+ // fist, get a snapshot of the actual current state of the stock
+ Iterable<StoredArticle> storedArticles = getStoredArticles(building, article);
- locationErrorsService.reportError(locationInError, storageMovementOrder.getArticle(), magalieUser, confirmDate);
+ if (log.isTraceEnabled()) {
+ log.trace("found " + Iterables.size(storedArticles) + " stored articles " + storedArticles);
+ }
+ // second step, remove all already used location, to find all used location, looking
+ // for not already confirmed storage movements
+ StorageMovementJpaDao storageMovementDao =
+ persistenceContext.getStorageMovementDao();
+
+ Map<String, Object> storageMovementProperties = Maps.newHashMap();
+
+ storageMovementProperties.put(StorageMovement.PROPERTY_MAGALIE_USER, magalieUser);
+ storageMovementProperties.put(StorageMovement.PROPERTY_ARTICLE, article);
+ storageMovementProperties.put(StorageMovement.PROPERTY_CONFIRM_DATE, null);
+
+ List<StorageMovement> storageMovements =
+ storageMovementDao.findAllByProperties(storageMovementProperties);
+
+ if (log.isDebugEnabled()) {
+ log.debug("found " + storageMovements.size() + " movements already done " + storageMovements);
}
- storageMovementOrderDao.merge(storageMovementOrder);
+ ImmutableSet<Location> alreadyUsedLocations =
+ ImmutableSet.copyOf(
+ Iterables.transform(
+ storageMovements,
+ StorageMovements.getOriginFunction()
+ )
+ );
- RequestedArticleService requestedArticleService =
- serviceContext.newService(RequestedArticleService.class);
+ if (log.isTraceEnabled()) {
+ log.trace("already used locations " + alreadyUsedLocations);
+ }
- requestedArticleService.onStorageMovementConfirmation(storageMovementOrder);
+ Predicate<StoredArticle> articleStoredInAlreadyUsedLocation =
+ Predicates.compose(
+ Predicates.in(alreadyUsedLocations),
+ StoredArticles.getLocationFunction());
- persistenceContext.commit();
+ storedArticles = Iterables.filter(storedArticles, Predicates.not(articleStoredInAlreadyUsedLocation));
- if (log.isInfoEnabled()) {
- log.info("confirmed storage movement order: " + storageMovementOrder);
+ if (log.isTraceEnabled()) {
+ log.trace("after removing already used locations " + Iterables.size(storedArticles) + " stored articles remaining " + storedArticles);
}
+ // third step, sort all those stored article by priority
+ Set<StoredArticle> sortedStoredArticles = sortStoredArticlesByPriority(storedArticles);
+
+ RealTimeStorageMovementTask realTimeStorageMovementTask =
+ new RealTimeStorageMovementTask();
+
+ if (sortedStoredArticles.isEmpty()) {
+
+ realTimeStorageMovementTask.setArticleUnavailable(true);
+
+ } else {
+
+ Predicate<StoredArticle> articleStoredInAccessibleLocationPredicate =
+ StoredArticles.articleStoredInAccessibleLocationPredicate(magalieUser);
+
+ Optional<StoredArticle> accessibleStoredArticleOptional =
+ Iterables.tryFind(sortedStoredArticles, articleStoredInAccessibleLocationPredicate);
+
+ if (accessibleStoredArticleOptional.isPresent()) {
+
+ StoredArticle accessibleStoredArticle = accessibleStoredArticleOptional.get();
+
+ realTimeStorageMovementTask.setStoredArticle(accessibleStoredArticle);
+
+ } else {
+
+ realTimeStorageMovementTask.setDriverLicenseRequired(true);
+
+ }
+
+ }
+
+ boolean articleAvailable = ! realTimeStorageMovementTask.isArticleUnavailable();
+
+ updateArticleAvailability(building, article, articleAvailable);
+
+ return realTimeStorageMovementTask;
+
}
- public void cancelStorageMovement(String storageMovementOrderId) {
+ public Article getArticle(String articleId) {
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ ArticleJpaDao articleDao = serviceContext.getPersistenceContext().getArticleDao();
- StorageMovementOrderJpaDao storageMovementOrderDao =
- persistenceContext.getStorageMovementOrderDao();
+ Article article = articleDao.findById(articleId);
- StorageMovementOrder storageMovementOrder = storageMovementOrderDao.findById(storageMovementOrderId);
+ return article;
- RequestedArticleService requestedArticleService
- = serviceContext.newService(RequestedArticleService.class);
+ }
- requestedArticleService.cancelStorageMovement(storageMovementOrder);
+ public StorageMovement saveStorageMovement(MagalieUser magalieUser, String articleId, String originLocationId, String destinationLocationId, double quantity) {
- storageMovementOrderDao.remove(storageMovementOrder);
+ JpaMagaliePersistenceContext persistenceContext =
+ serviceContext.getPersistenceContext();
+ ArticleJpaDao articleDao = persistenceContext.getArticleDao();
+
+ Article article = articleDao.findById(articleId);
+
+ LocationJpaDao locationDao = persistenceContext.getLocationDao();
+
+ Location originLocation = locationDao.findById(originLocationId);
+
+ Location destinationLocation = locationDao.findById(destinationLocationId);
+
+ StorageMovement storageMovement = new StorageMovement();
+
+ storageMovement.setOriginLocation(originLocation);
+
+ storageMovement.setDestinationLocation(destinationLocation);
+
+ storageMovement.setMagalieUser(magalieUser);
+
+ storageMovement.setArticle(article);
+
+ storageMovement.setActualQuantity(quantity);
+
+ Date now = serviceContext.getNow();
+
+ storageMovement.setOrderDate(now);
+
+ StorageMovementJpaDao storageMovementDao =
+ persistenceContext.getStorageMovementDao();
+
+ storageMovementDao.persist(storageMovement);
+
persistenceContext.commit();
if (log.isInfoEnabled()) {
- log.info("cancelled storage movement order " + storageMovementOrder);
+ log.info("saved real time storage movement " + storageMovement);
}
+
+ return storageMovement;
+
}
+
}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/BookArticleResult.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,87 +0,0 @@
-package com.franciaflex.magalie.services.service;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.persistence.Locations;
-import com.franciaflex.magalie.persistence.entity.Location;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-
-public class BookArticleResult {
-
- protected StorageMovementOrder storageMovementOrder;
-
- protected BookArticleRequest bookArticleRequest;
-
- protected Location inaccessibleLocation;
-
- public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) {
- this.storageMovementOrder = storageMovementOrder;
- }
-
- public StorageMovementOrder getStorageMovementOrder() {
- Preconditions.checkState(isSuccess());
- return storageMovementOrder;
- }
-
- public void setBookArticleRequest(BookArticleRequest bookArticleRequest) {
- this.bookArticleRequest = bookArticleRequest;
- }
-
- public BookArticleRequest getBookArticleRequest() {
- return bookArticleRequest;
- }
-
- public void userMustAccessLocation(Location location) {
-
- if (inaccessibleLocation == null) {
-
- MagalieUser magalieUser = bookArticleRequest.getMagalieUser();
-
- Predicate<Location> isLocationInaccessiblePredicate = Locations.inaccessibleLocationPredicate(magalieUser);
-
- if (isLocationInaccessiblePredicate.apply(location)) {
-
- this.inaccessibleLocation = location;
-
- }
-
- }
-
- }
-
- public boolean isArticleInaccessible() {
- return inaccessibleLocation != null;
- }
-
- public boolean isArticleUnavailable() {
- return storageMovementOrder == null;
- }
-
- public boolean isSuccess() {
- return ! isArticleInaccessible() && ! isArticleUnavailable();
- }
-}
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FindOrderToExecuteResult.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -24,11 +24,11 @@
*/
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+import com.franciaflex.magalie.persistence.entity.RequestedArticle;
public class FindOrderToExecuteResult {
- protected StorageMovementOrder storageMovementOrder;
+ protected RequestedArticle requestedArticle;
protected boolean nothingToDo;
@@ -41,15 +41,15 @@
protected DeliveredRequestedList newAffectation;
public boolean isSuccess() {
- return storageMovementOrder != null;
+ return requestedArticle != null;
}
- public void setStorageMovementOrder(StorageMovementOrder storageMovementOrder) {
- this.storageMovementOrder = storageMovementOrder;
+ public RequestedArticle getRequestedArticle() {
+ return requestedArticle;
}
- public StorageMovementOrder getStorageMovementOrder() {
- return storageMovementOrder;
+ public void setRequestedArticle(RequestedArticle requestedArticle) {
+ this.requestedArticle = requestedArticle;
}
public void setNothingToDo(boolean nothingToDo) {
@@ -91,4 +91,5 @@
public DeliveredRequestedList getNewAffectation() {
return newAffectation;
}
+
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -32,7 +32,6 @@
import com.franciaflex.magalie.persistence.entity.Company;
import com.franciaflex.magalie.persistence.entity.Kanban;
import com.franciaflex.magalie.persistence.entity.Location;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
@@ -85,35 +84,6 @@
}
- public BookArticleResult fulfilKanbanTask(
- Article article,
- MagalieUser magalieUser,
- Warehouse destinationWarehouse,
- double quantityInKanban) {
-
- ArticleStorageService articleStorageService =
- serviceContext.newService(ArticleStorageService.class);
-
- Building building = destinationWarehouse.getBuilding();
-
- SimpleWithdrawItemService simpleWithdrawItemService =
- serviceContext.newService(SimpleWithdrawItemService.class);
-
- Location destinationLocation =
- simpleWithdrawItemService.getDestinationLocation(destinationWarehouse);
-
- BookArticleRequest bookArticleRequest =
- new BookArticleRequest(
- magalieUser, building, article,
- quantityInKanban, destinationLocation, true);
-
- BookArticleResult bookArticleResult =
- articleStorageService.bookArticle(bookArticleRequest);
-
- return bookArticleResult;
-
- }
-
public List<Warehouse> getDestinationWarehouses(Building building) {
JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
@@ -136,4 +106,16 @@
return article;
}
+
+ public Location getDestinationLocation(Warehouse destinationWarehouse) {
+
+ SimpleWithdrawItemService simpleWithdrawItemService =
+ serviceContext.newService(SimpleWithdrawItemService.class);
+
+ Location destinationLocation =
+ simpleWithdrawItemService.getDestinationLocation(destinationWarehouse);
+
+ return destinationLocation;
+
+ }
}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -1,61 +0,0 @@
-package com.franciaflex.magalie.services.service;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-
-import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext;
-import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao;
-import com.franciaflex.magalie.persistence.entity.Building;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-import com.franciaflex.magalie.services.MagalieService;
-import com.franciaflex.magalie.services.MagalieServiceContext;
-import com.google.common.collect.Iterables;
-
-import java.util.List;
-
-public class OrderResumeService implements MagalieService {
-
- protected MagalieServiceContext serviceContext;
-
- @Override
- public void setServiceContext(MagalieServiceContext serviceContext) {
- this.serviceContext = serviceContext;
- }
-
- public StorageMovementOrder findMovementOrderResume(MagalieUser magalieUser, Building building) {
-
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
-
- StorageMovementOrderDao storageMovementOrderDao = persistenceContext.getStorageMovementOrderDao();
-
- List<StorageMovementOrder> notConfirmedByUser = storageMovementOrderDao.findNotConfirmedByUser(magalieUser, building);
-
- StorageMovementOrder orderToResume = Iterables.getFirst(notConfirmedByUser, null);
-
- return orderToResume;
-
- }
-
-}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RealTimeStorageMovementTask.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -0,0 +1,43 @@
+package com.franciaflex.magalie.services.service;
+
+import com.franciaflex.magalie.persistence.entity.StoredArticle;
+import com.google.common.base.Preconditions;
+
+public class RealTimeStorageMovementTask {
+
+ protected StoredArticle storedArticle;
+
+ protected boolean articleUnavailable;
+
+ protected boolean driverLicenseRequired;
+
+ public StoredArticle getStoredArticle() {
+ return storedArticle;
+ }
+
+ public void setStoredArticle(StoredArticle storedArticle) {
+ this.storedArticle = storedArticle;
+ }
+
+ public boolean isArticleUnavailable() {
+ if (articleUnavailable) {
+ Preconditions.checkState( ! driverLicenseRequired);
+ }
+ return articleUnavailable;
+ }
+
+ public void setArticleUnavailable(boolean articleUnavailable) {
+ this.articleUnavailable = articleUnavailable;
+ }
+
+ public void setDriverLicenseRequired(boolean driverLicenseRequired) {
+ this.driverLicenseRequired = driverLicenseRequired;
+ }
+
+ public boolean isDriverLicenseRequired() {
+ if (driverLicenseRequired) {
+ Preconditions.checkState( ! articleUnavailable);
+ }
+ return driverLicenseRequired;
+ }
+}
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -32,27 +32,26 @@
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.dao.StorageMovementOrderJpaDao;
-import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedArticle;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList;
import com.franciaflex.magalie.persistence.entity.DeliveredRequestedListStatus;
-import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.RequestedArticle;
import com.franciaflex.magalie.persistence.entity.RequestedList;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+import com.franciaflex.magalie.persistence.entity.StorageMovement;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.franciaflex.magalie.services.StorageMovementConfirmation;
+import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.Collection;
import java.util.Comparator;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -99,192 +98,194 @@
protected FindOrderToExecuteResult findOrderToExecute(Set<RequestedArticle> requestedArticlesByPriority, MagalieUser magalieUser, Building building) {
- ArticleStorageService articleStorageService =
- serviceContext.newService(ArticleStorageService.class);
+ throw new UnsupportedOperationException();
- BookArticleResult bookArticleResult = null;
+// ArticleStorageService articleStorageService =
+// serviceContext.newService(ArticleStorageService.class);
+//
+// BookArticleResult bookArticleResult = null;
+//
+// RequestedArticle requestedArticle = null;
+//
+// boolean success = false;
+//
+// Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
+//
+// boolean driverLicenseRequired = false;
+//
+// boolean somethingIsAvailable = false;
+//
+// while (!success && requestedArticleIterator.hasNext()) {
+//
+// requestedArticle = requestedArticleIterator.next();
+//
+// Article article = requestedArticle.getArticle();
+//
+// double quantity = requestedArticle.getQuantity();
+//
+// Location destinationLocation = requestedArticle.getDestinationLocation();
+//
+// BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, quantity, destinationLocation, false);
+//
+// // bookArticleResult = articleStorageService.bookArticle(bookArticleRequest);
+//
+// boolean articleIsAvailable = !bookArticleResult.isArticleUnavailable();
+//
+// if (articleIsAvailable) {
+//
+// somethingIsAvailable = true;
+//
+// driverLicenseRequired |= bookArticleResult.isArticleInaccessible();
+//
+// }
+//
+// success = bookArticleResult.isSuccess();
+//
+// }
+//
+// FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
+//
+// if (success) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("order to execute found: " + requestedArticle);
+// }
+//
+// Preconditions.checkState(requestedArticle != null);
+//
+// JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+//
+// DeliveredRequestedArticleJpaDao dao = persistenceContext.getDeliveredRequestedArticleDao();
+//
+// DeliveredRequestedArticle newDeliveredRequestedArticle = new DeliveredRequestedArticle();
+//
+// newDeliveredRequestedArticle.setRequestedArticle(requestedArticle);
+//
+// StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
+//
+// // newDeliveredRequestedArticle.setStorageMovementOrder(storageMovementOrder);
+//
+// dao.persist(newDeliveredRequestedArticle);
+//
+// findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
+//
+// // deal with affectations
+// DeliveredRequestedListJpaDao deliveredRequestedListDao =
+// persistenceContext.getDeliveredRequestedListDao();
+//
+// DeliveredRequestedList oldAffectation =
+// deliveredRequestedListDao.findByAffectedTo(magalieUser);
+//
+// RequestedList requestedList = requestedArticle.getRequestedList();
+//
+// DeliveredRequestedList newAffectation =
+// deliveredRequestedListDao.findByRequestedList(requestedList);
+//
+// if (newAffectation == null) {
+//
+// newAffectation = new DeliveredRequestedList();
+//
+// deliveredRequestedListDao.persist(newAffectation);
+//
+// }
+//
+// newAffectation.setAffectedTo(magalieUser);
+//
+// newAffectation.setRequestedList(requestedList);
+//
+// newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
+//
+// deliveredRequestedListDao.merge(newAffectation);
+//
+// if (oldAffectation == null) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("user has no previous affectation");
+// }
+//
+// findOrderToExecuteResult.setNewAffectation(newAffectation);
+//
+// } else {
+//
+// if (log.isInfoEnabled()) {
+// log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
+// }
+//
+// boolean affectationChanged = !oldAffectation.getRequestedList().equals(requestedList);
+//
+// if (affectationChanged) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("user changed affectation from "
+// + oldAffectation.getRequestedList().getCode()
+// + " to " + requestedList.getCode());
+// }
+//
+// boolean isFinished = oldAffectation.getStatus().equals(DeliveredRequestedListStatus.COMPLETE);
+//
+// if (!isFinished) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("request list " + oldAffectation.getRequestedList()
+// + " is not complete, putting it back to pending");
+// }
+//
+// oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
+//
+// oldAffectation.setAffectedTo(null);
+//
+// }
+//
+// findOrderToExecuteResult.setOldAffectation(oldAffectation);
+//
+// findOrderToExecuteResult.setNewAffectation(newAffectation);
+//
+// }
+//
+// }
+//
+// persistenceContext.commit();
+//
+// } else {
+//
+// if (requestedArticlesByPriority.isEmpty()) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("no order to execute found: nothing to do");
+// }
+//
+// findOrderToExecuteResult.setNothingToDo(true);
+//
+// } else {
+//
+// if (somethingIsAvailable) {
+//
+// if (log.isInfoEnabled()) {
+// log.info("no order to execute found: there is something available to do but driver license is required");
+// }
+//
+// Preconditions.checkState(driverLicenseRequired);
+//
+// findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
+//
+// } else {
+//
+// if (log.isInfoEnabled()) {
+// log.info("no order to execute found: everything is unavailable");
+// }
+//
+// Preconditions.checkState(!driverLicenseRequired);
+//
+// findOrderToExecuteResult.setEverythingUnavailable(true);
+//
+// }
+//
+// }
+//
+// }
+//
+// return findOrderToExecuteResult;
- RequestedArticle requestedArticle = null;
-
- boolean success = false;
-
- Iterator<RequestedArticle> requestedArticleIterator = requestedArticlesByPriority.iterator();
-
- boolean driverLicenseRequired = false;
-
- boolean somethingIsAvailable = false;
-
- while (!success && requestedArticleIterator.hasNext()) {
-
- requestedArticle = requestedArticleIterator.next();
-
- Article article = requestedArticle.getArticle();
-
- double quantity = requestedArticle.getQuantity();
-
- Location destinationLocation = requestedArticle.getDestinationLocation();
-
- BookArticleRequest bookArticleRequest = new BookArticleRequest(magalieUser, building, article, quantity, destinationLocation, false);
-
- bookArticleResult = articleStorageService.bookArticle(bookArticleRequest);
-
- boolean articleIsAvailable = !bookArticleResult.isArticleUnavailable();
-
- if (articleIsAvailable) {
-
- somethingIsAvailable = true;
-
- driverLicenseRequired |= bookArticleResult.isArticleInaccessible();
-
- }
-
- success = bookArticleResult.isSuccess();
-
- }
-
- FindOrderToExecuteResult findOrderToExecuteResult = new FindOrderToExecuteResult();
-
- if (success) {
-
- if (log.isInfoEnabled()) {
- log.info("order to execute found: " + requestedArticle);
- }
-
- Preconditions.checkState(requestedArticle != null);
-
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
-
- DeliveredRequestedArticleJpaDao dao = persistenceContext.getDeliveredRequestedArticleDao();
-
- DeliveredRequestedArticle newDeliveredRequestedArticle = new DeliveredRequestedArticle();
-
- newDeliveredRequestedArticle.setRequestedArticle(requestedArticle);
-
- StorageMovementOrder storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
- newDeliveredRequestedArticle.setStorageMovementOrder(storageMovementOrder);
-
- dao.persist(newDeliveredRequestedArticle);
-
- findOrderToExecuteResult.setStorageMovementOrder(storageMovementOrder);
-
- // deal with affectations
- DeliveredRequestedListJpaDao deliveredRequestedListDao =
- persistenceContext.getDeliveredRequestedListDao();
-
- DeliveredRequestedList oldAffectation =
- deliveredRequestedListDao.findByAffectedTo(magalieUser);
-
- RequestedList requestedList = requestedArticle.getRequestedList();
-
- DeliveredRequestedList newAffectation =
- deliveredRequestedListDao.findByRequestedList(requestedList);
-
- if (newAffectation == null) {
-
- newAffectation = new DeliveredRequestedList();
-
- deliveredRequestedListDao.persist(newAffectation);
-
- }
-
- newAffectation.setAffectedTo(magalieUser);
-
- newAffectation.setRequestedList(requestedList);
-
- newAffectation.setStatus(DeliveredRequestedListStatus.AFFECTED);
-
- deliveredRequestedListDao.merge(newAffectation);
-
- if (oldAffectation == null) {
-
- if (log.isInfoEnabled()) {
- log.info("user has no previous affectation");
- }
-
- findOrderToExecuteResult.setNewAffectation(newAffectation);
-
- } else {
-
- if (log.isInfoEnabled()) {
- log.info("user is affected to " + oldAffectation.getRequestedList().getCode());
- }
-
- boolean affectationChanged = !oldAffectation.getRequestedList().equals(requestedList);
-
- if (affectationChanged) {
-
- if (log.isInfoEnabled()) {
- log.info("user changed affectation from "
- + oldAffectation.getRequestedList().getCode()
- + " to " + requestedList.getCode());
- }
-
- boolean isFinished = oldAffectation.getStatus().equals(DeliveredRequestedListStatus.COMPLETE);
-
- if (!isFinished) {
-
- if (log.isInfoEnabled()) {
- log.info("request list " + oldAffectation.getRequestedList()
- + " is not complete, putting it back to pending");
- }
-
- oldAffectation.setStatus(DeliveredRequestedListStatus.PENDING);
-
- oldAffectation.setAffectedTo(null);
-
- }
-
- findOrderToExecuteResult.setOldAffectation(oldAffectation);
-
- findOrderToExecuteResult.setNewAffectation(newAffectation);
-
- }
-
- }
-
- persistenceContext.commit();
-
- } else {
-
- if (requestedArticlesByPriority.isEmpty()) {
-
- if (log.isInfoEnabled()) {
- log.info("no order to execute found: nothing to do");
- }
-
- findOrderToExecuteResult.setNothingToDo(true);
-
- } else {
-
- if (somethingIsAvailable) {
-
- if (log.isInfoEnabled()) {
- log.info("no order to execute found: there is something available to do but driver license is required");
- }
-
- Preconditions.checkState(driverLicenseRequired);
-
- findOrderToExecuteResult.setDriverLicenseRequired(driverLicenseRequired);
-
- } else {
-
- if (log.isInfoEnabled()) {
- log.info("no order to execute found: everything is unavailable");
- }
-
- Preconditions.checkState(!driverLicenseRequired);
-
- findOrderToExecuteResult.setEverythingUnavailable(true);
-
- }
-
- }
-
- }
-
- return findOrderToExecuteResult;
-
}
protected Set<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) {
@@ -328,47 +329,70 @@
}
- public void onStorageMovementConfirmation(StorageMovementOrder storageMovementOrder) {
+ public void onStorageMovementConfirmation(StorageMovementConfirmation confirmation, Collection<StorageMovement> storageMovements) {
- JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
+ String requestedArticleId = confirmation.getRequestedArticleId();
- DeliveredRequestedList deliveredRequestedList = getDeliveredRequestedList(storageMovementOrder.getId());
+ if (requestedArticleId != null) {
- if (deliveredRequestedList != null) {
+ // confirmation concerns a requested article, add a delivered requested article
- // a order is confirmed and this order is about a requested article
- // so we may update the status of the list
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- RequestedList requestedList = deliveredRequestedList.getRequestedList();
-
RequestedArticleJpaDao requestedArticleDao =
persistenceContext.getRequestedArticleDao();
+ RequestedArticle requestedArticle =
+ requestedArticleDao.findById(requestedArticleId);
+
+ DeliveredRequestedArticle newDeliveredRequestedArticle = new DeliveredRequestedArticle();
+
+ newDeliveredRequestedArticle.setRequestedArticle(requestedArticle);
+
+ newDeliveredRequestedArticle.addAllStorageMovements(storageMovements);
+
DeliveredRequestedArticleJpaDao deliveredRequestedArticleDao =
persistenceContext.getDeliveredRequestedArticleDao();
- List<RequestedArticle> requestedArticles =
- requestedArticleDao.findAll(requestedList);
+ deliveredRequestedArticleDao.persist(newDeliveredRequestedArticle);
- List<DeliveredRequestedArticle> deliveredRequestedArticles =
+ // maybe requested list is finished, let's update the status
+
+ RequestedList requestedList = requestedArticle.getRequestedList();
+
+ List<RequestedArticle> allRequestedArticlesForList =
+ requestedArticleDao.findAll(requestedList);
+
+ List<DeliveredRequestedArticle> deliveredRequestedArticlesForList =
deliveredRequestedArticleDao.findAll(requestedList);
- boolean allIsConfirmed = deliveredRequestedArticles.size() == requestedArticles.size()
- && Iterables.all(
- deliveredRequestedArticles,
- DeliveredRequestedArticles.isConfirmedPredicate());
+ boolean allIsConfirmed =
+ deliveredRequestedArticlesForList.size() == allRequestedArticlesForList.size()
+ && Iterables.all(
+ deliveredRequestedArticlesForList,
+ DeliveredRequestedArticles.isConfirmedPredicate());
if (allIsConfirmed) {
+ DeliveredRequestedListJpaDao deliveredRequestedListDao =
+ persistenceContext.getDeliveredRequestedListDao();
+
+ DeliveredRequestedList deliveredRequestedList =
+ deliveredRequestedListDao.findByRequestedList(requestedList);
+
+ Preconditions.checkNotNull(deliveredRequestedList);
+
if (log.isInfoEnabled()) {
log.info("all requested articles have confirmed order, marking list "
- + requestedList.getCode() + " as complete");
+ + requestedList.getCode() + " as complete");
}
deliveredRequestedList.setStatus(DeliveredRequestedListStatus.COMPLETE);
}
+ persistenceContext.commit();
+
}
}
@@ -434,58 +458,52 @@
}
- /** @return null if storage movement order is not about a requested-list (for example, kanban) */
- public DeliveredRequestedList getDeliveredRequestedList(String storageMovementOrderId) {
+ public Optional<DeliveredRequestedList> getDeliveredRequestedList(StorageMovementConfirmation confirmation) {
- JpaMagaliePersistenceContext persistenceContext =
- serviceContext.getPersistenceContext();
+ String requestedArticleId = confirmation.getRequestedArticleId();
- DeliveredRequestedArticleJpaDao deliveredRequestedArticleDao =
- persistenceContext.getDeliveredRequestedArticleDao();
+ Optional<DeliveredRequestedList> result;
- StorageMovementOrderJpaDao storageMovementOrderDao =
- persistenceContext.getStorageMovementOrderDao();
+ if (requestedArticleId == null) {
- StorageMovementOrder storageMovementOrder =
- storageMovementOrderDao.findById(storageMovementOrderId);
+ result = Optional.absent();
- DeliveredRequestedArticle deliveredRequestedArticle =
- deliveredRequestedArticleDao.find(storageMovementOrder);
+ } else {
- DeliveredRequestedList deliveredRequestedList = null;
+ JpaMagaliePersistenceContext persistenceContext =
+ serviceContext.getPersistenceContext();
- if (deliveredRequestedArticle != null) {
+ RequestedArticleJpaDao requestedArticleDao =
+ persistenceContext.getRequestedArticleDao();
- RequestedList requestedList =
- deliveredRequestedArticle.getRequestedArticle().getRequestedList();
+ RequestedArticle requestedArticle =
+ requestedArticleDao.findById(requestedArticleId);
+ RequestedList requestedList = requestedArticle.getRequestedList();
+
DeliveredRequestedListJpaDao deliveredRequestedListDao =
persistenceContext.getDeliveredRequestedListDao();
- deliveredRequestedList =
+ DeliveredRequestedList deliveredRequestedList =
deliveredRequestedListDao.findByRequestedList(requestedList);
+ return Optional.of(deliveredRequestedList);
+
}
- return deliveredRequestedList;
+ return result;
}
- public void cancelStorageMovement(StorageMovementOrder storageMovementOrder) {
+ public RequestedArticle getRequestedArticle(String requestedArticleId) {
- JpaMagaliePersistenceContext persistenceContext =
- serviceContext.getPersistenceContext();
+ JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext();
- DeliveredRequestedArticleJpaDao deliveredRequestedArticleDao =
- persistenceContext.getDeliveredRequestedArticleDao();
+ RequestedArticleJpaDao requestedArticleDao = persistenceContext.getRequestedArticleDao();
- DeliveredRequestedArticle deliveredRequestedArticle =
- deliveredRequestedArticleDao.find(storageMovementOrder);
+ RequestedArticle requestedArticle = requestedArticleDao.findById(requestedArticleId);
- if (deliveredRequestedArticle != null) {
- deliveredRequestedArticleDao.remove(deliveredRequestedArticle);
- }
+ return requestedArticle;
}
-
}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/OldFixturesArticleStorageServiceTest.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -28,7 +28,6 @@
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
import com.franciaflex.magalie.persistence.entity.StorageMovement;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
import com.google.common.collect.Iterables;
import org.apache.commons.logging.Log;
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/RequestedArticleServiceTest.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -28,7 +28,6 @@
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.StorageMovementOrder;
import com.franciaflex.magalie.services.AbstractMagalieServiceTest;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -26,6 +26,8 @@
import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.franciaflex.magalie.services.service.BuildingsService;
+import com.franciaflex.magalie.services.service.MagalieUsersService;
import com.franciaflex.magalie.web.action.ChooseCompanyAction;
import com.franciaflex.magalie.web.action.IndexAction;
import com.franciaflex.magalie.web.action.LoginAction;
@@ -131,6 +133,12 @@
try {
+ // TODO brendan 12/07/13 remove
+ if (magalieSession.getMagalieUser() == null) {
+ magalieSession.setBuilding(serviceContext.newService(BuildingsService.class).getBuilding("building_1"));
+ magalieSession.setMagalieUser(serviceContext.newService(MagalieUsersService.class).getMagalieUser("magalie_user_bruno"));
+ }
+
// prevent accessing a page without a session
if (magalieSession.getMagalieUser() == null) {
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ChooseActivityAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -25,8 +25,6 @@
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
-import com.franciaflex.magalie.services.service.OrderResumeService;
import com.franciaflex.magalie.web.MagalieActionSupport;
import com.franciaflex.magalie.web.MagalieSession;
@@ -38,27 +36,17 @@
protected Building building;
- protected OrderResumeService service;
-
- protected StorageMovementOrder movementOrderResume;
-
public void setSession(MagalieSession session) {
this.session = session;
}
- public void setService(OrderResumeService service) {
- this.service = service;
- }
-
@Override
- public String execute() throws Exception {
+ public String execute() {
magalieUser = session.getMagalieUser();
building = session.getBuilding();
- movementOrderResume = service.findMovementOrderResume(magalieUser, building);
-
return SUCCESS;
}
@@ -71,12 +59,4 @@
return building;
}
- public StorageMovementOrder getMovementOrderResume() {
- return movementOrderResume;
- }
-
- public OrderResumeService getService() {
- return service;
- }
-
}
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/DeliverRequestedArticleAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -26,8 +26,8 @@
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;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.services.service.FindOrderToExecuteResult;
import com.franciaflex.magalie.services.service.RequestedArticleService;
import com.franciaflex.magalie.web.Activity;
@@ -42,7 +42,7 @@
import java.util.List;
@Results({
- @Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "storageMovementOrderId", "${storageMovementOrderId}" })
+ @Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "requestedArticleId", "${requestedArticleId}" })
})
public class DeliverRequestedArticleAction extends MagalieActionSupport {
@@ -52,14 +52,14 @@
protected RequestedArticleService service;
- protected StorageMovementOrder storageMovementOrder;
-
protected RequestedList requestedList;
protected List<String> listTypes;
protected String listType;
+ protected RequestedArticle requestedArticle;
+
public void setService(RequestedArticleService service) {
this.service = service;
}
@@ -127,7 +127,7 @@
}
- storageMovementOrder = findOrderToExecuteResult.getStorageMovementOrder();
+ requestedArticle = findOrderToExecuteResult.getRequestedArticle();
result = SUCCESS;
@@ -159,7 +159,8 @@
}
- public String getStorageMovementOrderId() {
- return storageMovementOrder.getId();
+ public String getRequestedArticleId() {
+ return requestedArticle.getId();
}
+
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -26,12 +26,10 @@
import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.Company;
-import com.franciaflex.magalie.persistence.entity.MagalieUser;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
+import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import com.franciaflex.magalie.services.exception.ArticleNotAvailableForKanbanException;
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
-import com.franciaflex.magalie.services.service.BookArticleResult;
import com.franciaflex.magalie.services.service.FulfilKanbanService;
import com.franciaflex.magalie.web.Activity;
import com.franciaflex.magalie.web.MagalieActionSupport;
@@ -47,7 +45,7 @@
@Results({
@Result(name="input", type = "dispatcher", location = "/WEB-INF/content/prepare-withdraw-item-input.jsp"),
- @Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "storageMovementOrderId", "${storageMovementOrderId}" })
+ @Result(name="success", type="redirectAction", params = { "actionName", "withdraw-item!input", "articleId", "${articleId}", "destinationLocationId", "${destinationLocationId}", "expectedQuantity", "${quantity}" })
})
public class FulfilKanbanAction extends MagalieActionSupport implements Preparable {
@@ -59,8 +57,6 @@
protected String articleBarcode;
- protected StorageMovementOrder storageMovementOrder;
-
protected List<Warehouse> destinationWarehouses;
protected String destinationWarehouseId;
@@ -73,6 +69,8 @@
protected Warehouse destinationWarehouse;
+ protected String destinationLocationId;
+
public void setService(FulfilKanbanService service) {
this.service = service;
}
@@ -135,8 +133,6 @@
log.debug("article barcode is " + articleBarcode);
}
- MagalieUser magalieUser = session.getMagalieUser();
-
Company company = session.getCompany();
if (destinationWarehouseId == null) {
@@ -198,40 +194,23 @@
}
- BookArticleResult bookArticleResult =
- service.fulfilKanbanTask(article, magalieUser, destinationWarehouse, quantity);
+ Location destinationLocation = service.getDestinationLocation(destinationWarehouse);
- if (bookArticleResult.isArticleUnavailable()) {
+ destinationLocationId = destinationLocation.getId();
- addActionError("Article sans stock");
-
- return INPUT;
-
- }
-
- if (bookArticleResult.isArticleInaccessible()) {
-
- addActionError("Un permis est nécessaire pour obtenir cet article");
-
- return INPUT;
-
- }
-
- storageMovementOrder = bookArticleResult.getStorageMovementOrder();
-
return SUCCESS;
}
- public Article getArticle() {
- return article;
+ public String getArticleId() {
+ return article.getId();
}
- public String getArticleBarcode() {
- return articleBarcode;
+ public Double getQuantity() {
+ return quantity;
}
- public String getStorageMovementOrderId() {
- return storageMovementOrder.getId();
+ public String getDestinationLocationId() {
+ return destinationLocationId;
}
}
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/GetRealTimeStorageMovementTaskJsonAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/GetRealTimeStorageMovementTaskJsonAction.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/GetRealTimeStorageMovementTaskJsonAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -0,0 +1,54 @@
+package com.franciaflex.magalie.web.action;
+
+import com.franciaflex.magalie.persistence.entity.Building;
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.services.service.ArticleStorageService;
+import com.franciaflex.magalie.services.service.RealTimeStorageMovementTask;
+import com.franciaflex.magalie.web.MagalieActionSupport;
+import com.franciaflex.magalie.web.MagalieSession;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
+
+@Results({
+ @Result(name="success", type="json")
+})
+public class GetRealTimeStorageMovementTaskJsonAction extends MagalieActionSupport {
+
+ protected ArticleStorageService service;
+
+ protected MagalieSession session;
+
+ protected String articleId;
+
+ protected RealTimeStorageMovementTask realTimeStorageMovementTask;
+
+ public void setService(ArticleStorageService service) {
+ this.service = service;
+ }
+
+ public void setArticleId(String articleId) {
+ this.articleId = articleId;
+ }
+
+ public void setSession(MagalieSession session) {
+ this.session = session;
+ }
+
+ @Override
+ public String execute() {
+
+ MagalieUser magalieUser = session.getMagalieUser();
+
+ Building building = session.getBuilding();
+
+ realTimeStorageMovementTask = service.getRealTimeStorageMovementTask(building, magalieUser, articleId);
+
+ return SUCCESS;
+
+ }
+
+ public RealTimeStorageMovementTask getRealTimeStorageMovementTask() {
+ return realTimeStorageMovementTask;
+ }
+
+}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/PrepareWithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/PrepareWithdrawItemAction.java 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/PrepareWithdrawItemAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -26,7 +26,6 @@
import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Building;
import com.franciaflex.magalie.persistence.entity.Company;
-import com.franciaflex.magalie.persistence.entity.StorageMovementOrder;
import com.franciaflex.magalie.persistence.entity.Warehouse;
import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
import com.franciaflex.magalie.services.service.FulfilKanbanService;
@@ -53,8 +52,6 @@
protected String articleBarcode;
- protected StorageMovementOrder storageMovementOrder;
-
protected List<Warehouse> destinationWarehouses;
protected String destinationWarehouseId;
@@ -175,8 +172,4 @@
return articleBarcode;
}
- public String getStorageMovementOrderId() {
- return storageMovementOrder.getId();
- }
-
}
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SaveRealTimeStorageMovementJsonAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SaveRealTimeStorageMovementJsonAction.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/SaveRealTimeStorageMovementJsonAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -0,0 +1,92 @@
+package com.franciaflex.magalie.web.action;
+
+import com.franciaflex.magalie.persistence.entity.MagalieUser;
+import com.franciaflex.magalie.persistence.entity.StorageMovement;
+import com.franciaflex.magalie.services.service.ArticleStorageService;
+import com.franciaflex.magalie.web.MagalieActionSupport;
+import com.franciaflex.magalie.web.MagalieSession;
+import com.google.common.base.Preconditions;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
+
+@Results({
+ @Result(name="success", type="json")
+})
+public class SaveRealTimeStorageMovementJsonAction extends MagalieActionSupport {
+
+ private static final Log log = LogFactory.getLog(SaveRealTimeStorageMovementJsonAction.class);
+
+ protected ArticleStorageService service;
+
+ protected MagalieSession session;
+
+ protected String articleId;
+
+ protected String originLocationId;
+
+ protected String destinationLocationId;
+
+ protected double quantity;
+
+ protected StorageMovement storageMovement;
+
+ public void setService(ArticleStorageService service) {
+ this.service = service;
+ }
+
+ public void setSession(MagalieSession session) {
+ this.session = session;
+ }
+
+ public void setArticleId(String articleId) {
+ this.articleId = articleId;
+ }
+
+ public void setDestinationLocationId(String destinationLocationId) {
+ this.destinationLocationId = destinationLocationId;
+ }
+
+ public void setOriginLocationId(String originLocationId) {
+ this.originLocationId = originLocationId;
+ }
+
+ public void setQuantity(double quantity) {
+ this.quantity = quantity;
+ }
+
+ @Override
+ public String execute() throws Exception {
+
+ try {
+
+ Preconditions.checkNotNull(articleId);
+
+ Preconditions.checkNotNull(originLocationId);
+
+ Preconditions.checkNotNull(destinationLocationId);
+
+ MagalieUser magalieUser = session.getMagalieUser();
+
+ storageMovement = service.saveStorageMovement(magalieUser, articleId, originLocationId, destinationLocationId, quantity);
+
+ return SUCCESS;
+
+ } catch (Exception e) {
+
+ if (log.isErrorEnabled()) {
+ log.error("", e);
+ }
+
+ throw e;
+
+ }
+
+ }
+
+ public StorageMovement getStorageMovement() {
+ return storageMovement;
+ }
+
+}
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-07-12 17:43:32 UTC (rev 305)
@@ -24,16 +24,20 @@
*/
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;
-import com.franciaflex.magalie.services.StorageMovementTask;
import com.franciaflex.magalie.services.service.ArticleStorageService;
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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.convention.annotation.Result;
@@ -48,7 +52,7 @@
@Result(name="KANBANS", type="redirectAction", params = { "actionName", "fulfil-kanban!input" }),
@Result(name="REQUESTED_LISTS", type="redirectAction", params = { "actionName", "deliver-requested-article!input" })
})
-public class WithdrawItemAction extends MagalieActionSupport {
+public class WithdrawItemAction extends MagalieActionSupport implements Preparable {
private static final Log log = LogFactory.getLog(WithdrawItemAction.class);
@@ -56,14 +60,32 @@
protected RequestedArticleService requestedArticleService;
- protected String storageMovementOrderId;
-
- protected StorageMovementTask storageMovementTask;
-
protected StorageMovementConfirmation confirmation;
protected MagalieSession session;
+ protected String articleId;
+
+ protected String destinationLocationId;
+
+ protected Double expectedQuantity;
+
+ protected String requestedArticleId;
+
+ protected Article article;
+
+ public void setArticleId(String articleId) {
+ this.articleId = articleId;
+ }
+
+ public void setDestinationLocationId(String destinationLocationId) {
+ this.destinationLocationId = destinationLocationId;
+ }
+
+ public void setExpectedQuantity(Double expectedQuantity) {
+ this.expectedQuantity = expectedQuantity;
+ }
+
public void setSession(MagalieSession session) {
this.session = session;
}
@@ -76,33 +98,61 @@
this.requestedArticleService = requestedArticleService;
}
- public void setStorageMovementOrderId(String storageMovementOrderId) {
- this.storageMovementOrderId = storageMovementOrderId;
+ @Override
+ public void prepare() {
+
}
@Override
public String input() {
- Preconditions.checkNotNull(storageMovementOrderId);
+ if (requestedArticleId != null) {
- storageMovementTask = articleStorageService.getStorageMovementTask(storageMovementOrderId);
+ RequestedArticle requestedArticle =
+ requestedArticleService.getRequestedArticle(requestedArticleId);
+ expectedQuantity = requestedArticle.getQuantity();
+
+ destinationLocationId = requestedArticle.getDestinationLocation().getId();
+
+ article = requestedArticle.getArticle();
+
+ articleId = article.getId();
+
+ }
+
+ Preconditions.checkNotNull(articleId);
+
+ Preconditions.checkNotNull(destinationLocationId);
+
+ article = articleStorageService.getArticle(articleId);
+
return INPUT;
}
- public String getStorageMovementOrderId() {
- return storageMovementOrderId;
+ public String getRequestedArticleId() {
+ return requestedArticleId;
}
- public StorageMovementTask getStorageMovementTask() {
- return storageMovementTask;
+ public Article getArticle() {
+ return article;
}
+ public Double getExpectedQuantity() {
+ return expectedQuantity;
+ }
+
public String getModelAsJson() throws JSONException {
- String json = JSONUtil.serialize(getStorageMovementTask());
+ Map<String,Object> model = Maps.newHashMap();
+ model.put("articleId", articleId);
+ model.put("destinationLocationId", destinationLocationId);
+ model.put("expectedQuantity", expectedQuantity);
+
+ String json = JSONUtil.serialize(model);
+
return json;
}
@@ -133,11 +183,13 @@
articleStorageService.confirmStorageMovement(confirmation, magalieUser);
- DeliveredRequestedList deliveredRequestedList =
- requestedArticleService.getDeliveredRequestedList(confirmation.getStorageMovementOrderId());
+ Optional<DeliveredRequestedList> deliveredRequestedListOptional =
+ requestedArticleService.getDeliveredRequestedList(confirmation);
- if (deliveredRequestedList != null) {
+ if (deliveredRequestedListOptional.isPresent()) {
+ DeliveredRequestedList deliveredRequestedList = deliveredRequestedListOptional.get();
+
if (deliveredRequestedList.getStatus() == DeliveredRequestedListStatus.COMPLETE) {
session.addMessage("La liste " + deliveredRequestedList.getRequestedList().getCode() + " est terminée");
@@ -152,13 +204,14 @@
}
- public String cancel(){
+ public String cancel() {
- articleStorageService.cancelStorageMovement(storageMovementOrderId);
+ articleStorageService.cancelStorageMovement(confirmation);
String resultName = session.getActivity().name();
return resultName;
}
+
}
Modified: trunk/magalie-web/src/main/resources/struts.xml
===================================================================
--- trunk/magalie-web/src/main/resources/struts.xml 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/resources/struts.xml 2013-07-12 17:43:32 UTC (rev 305)
@@ -35,7 +35,7 @@
<interceptor-stack name="magalieStack">
<interceptor-ref name="magalieInterceptor" />
- <interceptor-ref name="defaultStack" />
+ <interceptor-ref name="paramsPrepareParamsStack" />
</interceptor-stack>
</interceptors>
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/choose-activity.jsp 2013-07-12 17:43:32 UTC (rev 305)
@@ -35,9 +35,6 @@
bindKey('4', function(){ redirectTo($('#preparePreparedArticleReceptionLink'));});
bindKey('5', function(){ redirectTo($('#storageTransferLink'));});
bindKey('6', function(){ redirectTo($('#prepareWithdrawItemLink'));});
- <s:if test="movementOrderResume" >
- bindKey('7', function(){ redirectTo($('#movementOrderResumeLink'));});
- </s:if>
bindKey('Esc', function(){ redirectTo($('#logoutLink'));});
});
</script>
@@ -67,12 +64,5 @@
<s:url action="prepare-withdraw-item!input" id="prepareWithdrawItemUrl"/>
<s:a href="%{prepareWithdrawItemUrl}" cssClass="btn btn-block" id="prepareWithdrawItemLink" >Sorties toiles (6)</s:a>
-<s:if test="movementOrderResume" >
- <s:url action="withdraw-item!input" id="movementOrderResumeUrl">
- <s:param name="storageMovementOrderId" value="%{movementOrderResume.id}" />
- </s:url>
- <s:a href="%{movementOrderResumeUrl}" cssClass="btn btn-block" id="movementOrderResumeLink" >Reprendre l'ordre de mouvement (7)</s:a>
-</s:if>
-
<s:url action="logout" id="logoutUrl"/>
<s:a href="%{logoutUrl}" cssClass="btn btn-block" id="logoutLink" >Déconnexion (Esc)</s:a>
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/prepare-withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/prepare-withdraw-item-input.jsp 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/prepare-withdraw-item-input.jsp 2013-07-12 17:43:32 UTC (rev 305)
@@ -23,6 +23,8 @@
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
+<%-- XXX bleny cette page est utilisée comme vue pour deux actions ! --%>
+
<head>
<title>Traitement des kanbans</title>
<script type="text/javascript">
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-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-07-12 17:43:32 UTC (rev 305)
@@ -25,43 +25,54 @@
<head>
<script>
+ <s:url action="get-real-time-storage-movement-task-json" id="getRealTimeStorageMovementTaskJsonUrl" />
+ var getRealTimeStorageMovementTaskJsonUrl = '<s:property value="%{getRealTimeStorageMovementTaskJsonUrl}" />';
+ <s:url action="save-real-time-storage-movement-json" id="saveRealTimeStorageMovementJsonUrl" />
+ var saveRealTimeStorageMovementJsonUrl = '<s:property value="%{saveRealTimeStorageMovementJsonUrl}" />';
var model = <s:property value="modelAsJson" escapeHtml="false" />;
</script>
<script src="<s:url value='/js/withdraw-item-input.js' />"></script>
- <title>Traitement des listes à servir</title>
+ <title>Prélèvement d'un article</title>
<link rel="stylesheet" href="<s:url value='/css/magalie-ck3x-reduced.css' />"/>
</head>
<header>
<dl class="dl-horizontal">
<dt>Réf.</dt>
- <dd><s:property value="storageMovementTask.article.code" /></dd>
+ <dd><s:property value="article.code" /></dd>
<dt>Desc.</dt>
- <dd><s:property value="storageMovementTask.article.description" /></dd>
+ <dd><s:property value="article.description" /></dd>
<dt>Prélev.</dt>
- <dd><span id="withdrawn">0</span> / <s:property value="storageMovementTask.quantity" /> <s:property value="storageMovementTask.article.unit" /></dd>
+ <dd>
+ <span id="withdrawn">0</span>
+ <s:if test="expectedQuantity">
+ / <s:property value="expectedQuantity" />
+ </s:if>
+ <s:property value="article.unit" />
+ </dd>
</dl>
</header>
<section id="storageMovements">
</section>
<s:form cssClass="form-horizontal">
<s:textfield name="locationBarcode" label="Empl." inputAppendIcon="barcode" cssClass="input-small" />
- <s:textfield name="quantity" label="Qté" inputAppend="%{storageMovementTask.article.unit}" cssClass="input-mini" />
+ <s:textfield name="quantity" label="Qté" inputAppend="%{article.unit}" cssClass="input-mini" />
<s:hidden name="confirmation" />
<div class="btn-group">
<s:url action="withdraw-item!cancel" id="cancelUrl" >
- <s:param name="storageMovementOrderId" value="%{storageMovementOrderId}" />
+ <%--s:param name="storageMovementOrderId" value="%{storageMovementOrderId}" /--%>
</s:url>
<s:a href="%{cancelUrl}" cssClass="btn btn-small" id="cancelLink" >Quitter (Esc)</s:a>
<input type="button" id="reportError" value="Anomalie (F5)" class="btn btn-danger btn-small" />
- <s:submit name="next" value="Suivant" cssClass="btn btn-primary btn-small" />
+ <input type="button" id="next" value="Suivant" class="btn btn-primary btn-small" />
+ <s:submit name="confirm" value="Terminer" cssClass="btn btn-success btn-small" />
</div>
</s:form>
<div id="storageMovementTemplate" class="template">
<div>
- <span data="originLocation.warehouse.code"></span>
- <span data="originLocation.code"></span>
- <span data="withdrawn">0</span> / <span data="expectedQuantity"></span> <s:property value="storageMovementTask.article.unit" />
+ <span data="storedArticle.location.warehouse.code"></span>
+ <span data="storedArticle.location.code"></span>
+ <span data="withdrawn">0</span> / <span data="expectedQuantity"></span> / <span data="storedArticle.quantity"></span> <s:property value="article.unit" />
</div>
</div>
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-07-12 17:43:32 UTC (rev 305)
@@ -21,22 +21,47 @@
* #L%
*/
-model.storageMovementsIndex = 0;
-model.allowSubmit = false;
+//model.allowSubmit = false;
+//
+//model.isFulfilled = function() {
+// var isFull = this.withdrawn() === this.quantity;
+// return isFull;
+//};
+//
+//model.allIsUsed = function() {
+// return this.storageMovementsIndex == null;
+//};
+//
+//model.canTerminate = function() {
+// var canTerminate = this.isFulfilled() || this.allIsUsed();
+// return canTerminate;
+//};
+//
+//
+//
+//
+//model.nextLocation = function() {
+// this.storageMovementsIndex += 1;
+// if (this.storageMovementsIndex >= this.storageMovements.length) {
+// this.storageMovementsIndex = null;
+// } else {
+// var storageMovement = this.storageMovements[this.storageMovementsIndex];
+// if (storageMovement.expectedQuantity == 0.) {
+// console.debug("will use extra location " + storageMovement.storedArticle.location.code);
+// var remainingQuantity = this.quantity - this.withdrawn();
+// storageMovement.expectedQuantity = remainingQuantity;
+//// var availableQuantityInLocation = storageMovement.availableQuantity;
+//// storageMovement.expectedQuantity = Math.min(remainingQuantity, availableQuantityInLocation);
+// console.debug("pushing new value to withdraw: " + storageMovement.expectedQuantity);
+// }
+// }
+//};
+//
-model.isFulfilled = function() {
- var isFull = this.withdrawn() === this.quantity;
- return isFull;
-};
-model.allIsUsed = function() {
- return this.storageMovementsIndex == null;
-};
-model.canTerminate = function() {
- var canTerminate = this.isFulfilled() || this.allIsUsed();
- return canTerminate;
-};
+model.storageMovements = [];
+model.storageMovementsIndex = -1;
model.withdrawn = function() {
var withdrawn = 0;
@@ -46,17 +71,54 @@
return withdrawn;
};
+model.remaining = function() {
+ var remaining = null;
+ if (this.expectedQuantity) {
+ remaining = this.expectedQuantity - this.withdrawn();
+ }
+ if (remaining < 0.) {
+ remaining = 0.;
+ }
+ return remaining;
+}
+
+model.newEmptyStorageMovementForNextLocation = function() {
+ var storageMovement;
+ $.ajax({
+ dataType: "json",
+ url: getRealTimeStorageMovementTaskJsonUrl,
+ data: { articleId: this.articleId },
+ async: false,
+ success: function(data) {
+ storageMovement = data.realTimeStorageMovementTask;
+ },
+ fail: function(jqXHR, textStatus, errorThrown) {
+ console.error(jqXHR);
+ console.error(textStatus);
+ console.error(errorThrown);
+ }
+ });
+ if (storageMovement.articleUnavailable) {
+ alert('Pas de stock');
+ } else {
+ storageMovement.expectedQuantity = Math.min(model.remaining(), storageMovement.storedArticle.quantity);
+ this.storageMovements.push(storageMovement);
+ this.storageMovementsIndex += 1;
+ }
+}
+
model.getStorageMovement = function(barcode) {
if (barcode == '') {
throw new ValidationError("Il faut indiquer le code barre d'un emplacement");
}
var storageMovement;
for (var i = 0; i < this.storageMovements.length; i++) {
- if (barcode == this.storageMovements[i].originLocation.barcode) {
+ if (barcode == this.storageMovements[i].storedArticle.location.barcode) {
storageMovement = this.storageMovements[i];
}
}
if (storageMovement == null) {
+ // TODO try to load it !
throw new ValidationError(barcode + " n'est pas le code barre d'un emplacement valide");
}
return storageMovement;
@@ -68,10 +130,29 @@
}
var storageMovement = this.getStorageMovement(barcode);
storageMovement.used = true;
- storageMovement.defect =
- storageMovement.expectedQuantity != 0. // don't mark a location in error just because we wasn't supposed to withdraw item from it in the order
- && quantity != storageMovement.expectedQuantity;
+ storageMovement.defect = quantity < storageMovement.expectedQuantity && confirm('Signaler anomalie ?');
storageMovement.withdrawn = quantity;
+ var model = this;
+ $.ajax({
+ dataType: "json",
+ url: saveRealTimeStorageMovementJsonUrl,
+ data: {
+ articleId: model.articleId,
+ originLocationId: storageMovement.storedArticle.location.id,
+ destinationLocationId: model.destinationLocationId,
+ quantity: storageMovement.withdrawn
+ },
+ async: false,
+ success: function(data) {
+ console.log(data);
+ storageMovement.id = data.storageMovement.id;
+ },
+ fail: function(jqXHR, textStatus, errorThrown) {
+ console.l(jqXHR);
+ console.error(textStatus);
+ console.error(errorThrown);
+ }
+ });
};
model.reportError = function(barcode) {
@@ -80,41 +161,26 @@
storageMovement.defect = true;
};
-model.nextLocation = function() {
- this.storageMovementsIndex += 1;
- if (this.storageMovementsIndex >= this.storageMovements.length) {
- this.storageMovementsIndex = null;
- } else {
- var storageMovement = this.storageMovements[this.storageMovementsIndex];
- if (storageMovement.expectedQuantity == 0.) {
- console.debug("will use extra location " + storageMovement.originLocation.code);
- var remainingQuantity = this.quantity - this.withdrawn();
- storageMovement.expectedQuantity = remainingQuantity;
-// var availableQuantityInLocation = storageMovement.availableQuantity;
-// storageMovement.expectedQuantity = Math.min(remainingQuantity, availableQuantityInLocation);
- console.debug("pushing new value to withdraw: " + storageMovement.expectedQuantity);
- }
- }
-};
-
model.getConfirmation = function() {
- var locationsIdsToActualQuantities = {};
+ var storageMovementIds = [];
var locationInErrorIds = [];
- $.each(model.storageMovements, function(key, storageMovement) {
+ $.each(this.storageMovements, function(key, storageMovement) {
if (storageMovement.used) {
- locationsIdsToActualQuantities[storageMovement.originLocation.id] = storageMovement.withdrawn;
+ storageMovementIds.push(storageMovement.id);
if (storageMovement.defect) {
- locationInErrorIds.push(storageMovement.originLocation.id);
+ locationInErrorIds.push(storageMovement.storedArticle.location.id);
}
}
});
+ var model = this;
var confirmation = {
- storageMovementOrderId: this.storageMovementOrderId,
- locationsIdsToActualQuantities: locationsIdsToActualQuantities,
+ requestedArticleId: model.requestedArticleId,
+ articleId: model.articleId,
+ storageMovementIds: storageMovementIds,
locationInErrorIds: locationInErrorIds
};
return confirmation;
-}
+};
var view = {
@@ -145,7 +211,7 @@
} else {
$(storageMovementElement).addClass('success');
}
- } else if (storageMovement.originLocation.id === model.storageMovements[model.storageMovementsIndex].originLocation.id && ! model.canTerminate()) {
+ } else if (storageMovement.storedArticle.location.id === model.storageMovements[model.storageMovementsIndex].storedArticle.location.id) {
$(storageMovementElement).addClass('pending');
} else {
$(storageMovementElement).hide();
@@ -159,7 +225,7 @@
// reset field to prevent reuse of the value by mistake
$('#withdraw-item_locationBarcode').val('');
// set default value of quantity to what should be withdrawn on the current location
- if (model.storageMovementsIndex != null) {
+ if (model.storageMovementsIndex != null && model.storageMovementsIndex >= 0) {
$('#withdraw-item_quantity').val(model.storageMovements[model.storageMovementsIndex].expectedQuantity);
}
},
@@ -184,26 +250,25 @@
var controller = {
+ onShowFirstLocation : function () {
+
+ model.newEmptyStorageMovementForNextLocation();
+
+ },
+
onNext : function() {
try {
- if (model.allowSubmit) {
+ var barcode = $('#withdraw-item_locationBarcode').val();
+ var quantity = parseFloat($('#withdraw-item_quantity').val());
- } else {
+ model.withdraw(barcode, quantity);
- var barcode = $('#withdraw-item_locationBarcode').val();
- var quantity = parseFloat($('#withdraw-item_quantity').val());
+ model.newEmptyStorageMovementForNextLocation();
- model.withdraw(barcode, quantity);
+ view.refresh();
- // if used location focused as current, highlight next location to go
- if (barcode == model.storageMovements[model.storageMovementsIndex].originLocation.barcode) {
- model.nextLocation();
- }
-
- }
-
} catch (ex) {
if (ex instanceof ValidationError) {
@@ -212,32 +277,24 @@
throw ex;
}
}
+
},
onReportError : function() {
try {
- if (model.allowSubmit) {
+ var barcode = $('#withdraw-item_locationBarcode').val();
+ var quantity = parseFloat($('#withdraw-item_quantity').val());
- } else {
+ model.withdraw(barcode, quantity);
- var barcode = $('#withdraw-item_locationBarcode').val();
- var quantity = parseFloat($('#withdraw-item_quantity').val());
+ model.reportError(barcode);
- model.withdraw(barcode, quantity);
+ model.newEmptyStorageMovementForNextLocation();
- model.reportError(barcode);
+ view.refresh();
- // if used location focused as current, highlight next location to go
- if (barcode == model.storageMovements[model.storageMovementsIndex].originLocation.barcode) {
- model.nextLocation();
- }
-
- view.refresh();
-
- }
-
} catch (ex) {
if (ex instanceof ValidationError) {
@@ -249,18 +306,10 @@
},
onSubmit : function(e) {
- if (model.allowSubmit) {
- // push model as Json in a hidden field
- $('#withdraw-item_confirmation').val(JSON.stringify(model.getConfirmation()));
- } else {
- e.preventDefault();
- if (model.canTerminate()) {
- model.allowSubmit = true;
- }
+ // push model as Json in a hidden field
+ $('#withdraw-item_confirmation').val(JSON.stringify(model.getConfirmation()));
- view.refresh();
- }
},
};
@@ -270,8 +319,10 @@
$('#withdraw-item').submit(controller.onSubmit);
$('#reportError').click(controller.onReportError);
$('#reportCancel').click(controller.onCancel);
- $('#withdraw-item_next').click(controller.onNext);
+ $('#next').click(controller.onNext);
+ // $('#withdraw-item_confirm').click(controller.confirm);
bindKey('F5', controller.onReportError);
bindKey('Esc', function(){ redirectTo($('#cancelLink'));});
+ controller.onShowFirstLocation();
view.refresh();
});
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-07-11 19:43:16 UTC (rev 304)
+++ trunk/pom.xml 2013-07-12 17:43:32 UTC (rev 305)
@@ -125,7 +125,7 @@
<seleniumVersion>2.28.0</seleniumVersion>
<mockitoVersion>1.9.5</mockitoVersion>
<nuitonI18nVersion>2.5</nuitonI18nVersion>
- <eugeneVersion>2.6.3</eugeneVersion>
+ <eugeneVersion>2.6.4-SNAPSHOT</eugeneVersion>
<!-- license to use -->
<license.licenseName>agpl_v3</license.licenseName>
1
0
r304 - trunk/magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 11 Jul '13
by bleny@users.forge.codelutin.com 11 Jul '13
11 Jul '13
Author: bleny
Date: 2013-07-11 21:43:16 +0200 (Thu, 11 Jul 2013)
New Revision: 304
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix focus in storage-transfer-location-input
Modified:
trunk/magalie-web/src/main/webapp/WEB-INF/content/storage-transfer-location-input.jsp
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/storage-transfer-location-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/storage-transfer-location-input.jsp 2013-07-11 19:38:53 UTC (rev 303)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/storage-transfer-location-input.jsp 2013-07-11 19:43:16 UTC (rev 304)
@@ -28,7 +28,7 @@
<title>Transfert de stock</title>
<script type="text/javascript">
$(document).ready(function () {
- $("#storage-transfer-location_originBarCode").focus();
+ $("#storage-transfer-location_originBarcode").focus();
bindKey('Esc', function(){ redirectTo($('#chooseActivityLink'));});
});
</script>
1
0
r303 - in trunk: magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/main/java/com/franciaflex/magalie/services/service magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 11 Jul '13
by bleny@users.forge.codelutin.com 11 Jul '13
11 Jul '13
Author: bleny
Date: 2013-07-11 21:38:53 +0200 (Thu, 11 Jul 2013)
New Revision: 303
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
add header in simple-withdraw-item-input to show article code and description
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-07-11 19:31:05 UTC (rev 302)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-07-11 19:38:53 UTC (rev 303)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.StoredArticle;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
@@ -31,18 +32,25 @@
public class SimpleWithdrawItemTask {
+ protected Article article;
+
protected List<StoredArticle> storedArticles;
protected boolean driverLicenseRequired;
protected boolean articleUnavailable;
- public SimpleWithdrawItemTask(Iterable<StoredArticle> storedArticles, boolean driverLicenseRequired, boolean articleUnavailable) {
+ public SimpleWithdrawItemTask(Article article, Iterable<StoredArticle> storedArticles, boolean driverLicenseRequired, boolean articleUnavailable) {
+ this.article = article;
this.storedArticles = Lists.newArrayList(storedArticles);
this.driverLicenseRequired = driverLicenseRequired;
this.articleUnavailable = articleUnavailable;
}
+ public Article getArticle() {
+ return article;
+ }
+
public List<StoredArticle> getStoredArticles() {
return storedArticles;
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-07-11 19:31:05 UTC (rev 302)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-07-11 19:38:53 UTC (rev 303)
@@ -105,7 +105,7 @@
storedArticles = Iterables.filter(storedArticles, articleStoredInAccessibleLocationPredicate);
SimpleWithdrawItemTask simpleWithdrawItemTask =
- new SimpleWithdrawItemTask(storedArticles, driverLicenseRequired, articleUnavailable);
+ new SimpleWithdrawItemTask(article, storedArticles, driverLicenseRequired, articleUnavailable);
return simpleWithdrawItemTask;
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-11 19:31:05 UTC (rev 302)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-11 19:38:53 UTC (rev 303)
@@ -30,6 +30,15 @@
<s:url action="choose-activity" id="cancelUrl" />
+<ul class="oneItemPerLine">
+ <li>
+ Réf. : <s:property value="simpleWithdrawItemTask.article.code" />
+ </li>
+ <li>
+ Desc. : <s:property value="simpleWithdrawItemTask.article.description" />
+ </li>
+</ul>
+
<s:form>
<ul>
1
0
r302 - in trunk: 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/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 11 Jul '13
by bleny@users.forge.codelutin.com 11 Jul '13
11 Jul '13
Author: bleny
Date: 2013-07-11 21:31:05 +0200 (Thu, 11 Jul 2013)
New Revision: 302
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
in simple-withdraw-item-input show quantities and mention when no batchCode value, fix exception raised with simple withdraw item on an unavailable article
Modified:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-07-11 18:41:26 UTC (rev 301)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SimpleWithdrawItemTask.java 2013-07-11 19:31:05 UTC (rev 302)
@@ -48,12 +48,16 @@
}
public boolean isDriverLicenseRequired() {
- Preconditions.checkState( ! articleUnavailable);
+ if (driverLicenseRequired) {
+ Preconditions.checkState( ! articleUnavailable);
+ }
return driverLicenseRequired;
}
public boolean isArticleUnavailable() {
- Preconditions.checkState( ! driverLicenseRequired);
+ if (articleUnavailable) {
+ Preconditions.checkState( ! driverLicenseRequired);
+ }
return articleUnavailable;
}
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-07-11 18:41:26 UTC (rev 301)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-07-11 19:31:05 UTC (rev 302)
@@ -81,17 +81,31 @@
Predicate<StoredArticle> articleStoredInAccessibleLocationPredicate =
StoredArticles.articleStoredInAccessibleLocationPredicate(magalieUser);
- boolean articleIsAccessible =
- Iterables.any(
- storedArticles,
- articleStoredInAccessibleLocationPredicate);
-
boolean articleUnavailable = Iterables.isEmpty(storedArticles);
+ boolean articleAvailable = ! articleUnavailable;
+
+ boolean driverLicenseRequired;
+
+ if (articleAvailable) {
+
+ boolean articleIsAccessible =
+ Iterables.any(
+ storedArticles,
+ articleStoredInAccessibleLocationPredicate);
+
+ driverLicenseRequired = ! articleIsAccessible;
+
+ } else {
+
+ driverLicenseRequired = false;
+
+ }
+
storedArticles = Iterables.filter(storedArticles, articleStoredInAccessibleLocationPredicate);
SimpleWithdrawItemTask simpleWithdrawItemTask =
- new SimpleWithdrawItemTask(storedArticles, ! articleIsAccessible, articleUnavailable);
+ new SimpleWithdrawItemTask(storedArticles, driverLicenseRequired, articleUnavailable);
return simpleWithdrawItemTask;
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java 2013-07-11 18:41:26 UTC (rev 301)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemServiceTest.java 2013-07-11 19:31:05 UTC (rev 302)
@@ -92,6 +92,20 @@
}
@Test
+ public void testSimpleWithdrawOnUnavailableArticle() throws InvalidMagalieBarcodeException, IllegalWithdrawException {
+
+ Article article = fixture("article4");
+
+ SimpleWithdrawItemTask simpleWithdrawItemTask =
+ service.getSimpleWithdrawItemTask(building, magalieUser, article.getCode());
+
+ Assert.assertTrue(simpleWithdrawItemTask.isArticleUnavailable());
+
+ Assert.assertFalse(simpleWithdrawItemTask.isDriverLicenseRequired());
+
+ }
+
+ @Test
public void testSimpleWithdrawWithoutDriverLicense() throws InvalidMagalieBarcodeException, IllegalWithdrawException {
magalieUser = fixture("corinne");
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-11 18:41:26 UTC (rev 301)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/simple-withdraw-item-input.jsp 2013-07-11 19:31:05 UTC (rev 302)
@@ -39,10 +39,16 @@
<li>
<s:property value="location.barcode" />
+ Qté
+ <s:property value="quantity" />
+ <s:property value="article.unit" />
- <s:if test="batchCode != null">
+ <s:if test="batchCode == null">
+ (aucun lot)
+ </s:if>
+ <s:else>
(<s:property value="batchCode" />)
- </s:if>
+ </s:else>
</li>
1
0
r301 - 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
by bleny@users.forge.codelutin.com 11 Jul '13
by bleny@users.forge.codelutin.com 11 Jul '13
11 Jul '13
Author: bleny
Date: 2013-07-11 20:41:26 +0200 (Thu, 11 Jul 2013)
New Revision: 301
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fixes some locations are removed even if the article is not the same
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorJpaDao.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java 2013-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/Locations.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -95,10 +95,6 @@
return new LocationRequiringDriverLicenseFirstComparator();
}
- public static Predicate<Location> locationIsNotReportedInError(Collection<Location> allLocationsInError) {
- return Predicates.not(Predicates.in(allLocationsInError));
- }
-
public static String codeForWarehouseWithoutLocations() {
return " SANS";
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java 2013-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorDao.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -23,6 +23,7 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.LocationError;
@@ -33,7 +34,8 @@
LocationError findByLocation(Location location);
- List<Location> findAllLocationsInError();
+ List<Location> findAllLocationsInError(Article article);
List<LocationError> findAll();
+
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorJpaDao.java 2013-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/LocationErrorJpaDao.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -23,12 +23,12 @@
* #L%
*/
+import com.franciaflex.magalie.persistence.entity.Article;
import com.franciaflex.magalie.persistence.entity.Location;
import com.franciaflex.magalie.persistence.entity.LocationError;
import javax.persistence.EntityManager;
import javax.persistence.Query;
-import javax.persistence.TypedQuery;
import java.util.List;
public class LocationErrorJpaDao extends AbstractLocationErrorJpaDao {
@@ -38,22 +38,16 @@
}
@Override
- public LocationError findByLocation(Location location) {
- TypedQuery<LocationError> query = createQuery("from LocationError se where se.location = :location");
- query.setParameter("location", location);
- return findUniqueOrNull(query);
- }
-
- @Override
- public List<Location> findAllLocationsInError() {
- Query query = entityManager.createQuery("select se.location from LocationError se");
+ public List<Location> findAllLocationsInError(Article article) {
+ Query query = entityManager.createQuery("select le.location from LocationError le where le.article = :article ");
+ query.setParameter("article", article);
List<Location> allLocationsInError = query.getResultList();
return allLocationsInError;
}
@Override
public List<LocationError> findAll() {
- Query query = entityManager.createQuery("from LocationError se order by se.reportDate");
+ Query query = entityManager.createQuery("from LocationError le order by le.reportDate");
List<LocationError> all = query.getResultList();
return all;
}
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-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -356,9 +356,7 @@
LocationErrorsService locationErrorsService =
serviceContext.newService(LocationErrorsService.class);
- storedArticles = Iterables.filter(
- storedArticles,
- locationErrorsService.getArticleNotStoredInLocationReportedInErrorPredicate());
+ storedArticles = locationErrorsService.filterLocationInError(storedArticles);
return storedArticles;
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java 2013-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/LocationErrorsService.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -24,8 +24,6 @@
*/
import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext;
-import com.franciaflex.magalie.persistence.Locations;
-import com.franciaflex.magalie.persistence.StoredArticles;
import com.franciaflex.magalie.persistence.dao.LocationErrorJpaDao;
import com.franciaflex.magalie.persistence.dao.StoredArticleJpaDao;
import com.franciaflex.magalie.persistence.entity.Article;
@@ -38,6 +36,8 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -122,20 +122,54 @@
}
- public Predicate<Location> getLocationNotReportedInErrorPredicate() {
+ protected Predicate<Location> getLocationNotReportedInErrorPredicate(Article article) {
LocationErrorJpaDao locationErrorDao = serviceContext.getPersistenceContext().getLocationErrorDao();
- List<Location> allLocationsInError = locationErrorDao.findAllLocationsInError();
+ List<Location> allLocationsInErrorForArticle =
+ locationErrorDao.findAllLocationsInError(article);
- return Locations.locationIsNotReportedInError(allLocationsInError);
+ return Predicates.not(Predicates.in(allLocationsInErrorForArticle));
}
- public Predicate<StoredArticle> getArticleNotStoredInLocationReportedInErrorPredicate() {
+ protected Iterable<StoredArticle> filterLocationInError(Iterable<StoredArticle> storedArticles) {
- return Predicates.compose(getLocationNotReportedInErrorPredicate(), StoredArticles.getLocationFunction());
+ List<StoredArticle> result = Lists.newLinkedList();
+ LocationErrorJpaDao locationErrorDao =
+ serviceContext.getPersistenceContext().getLocationErrorDao();
+
+ for (StoredArticle storedArticle : storedArticles) {
+
+ ImmutableMap properties =
+ ImmutableMap.of(
+ LocationError.PROPERTY_ARTICLE, storedArticle.getArticle(),
+ LocationError.PROPERTY_LOCATION, storedArticle.getLocation()
+ );
+
+ LocationError locationError = locationErrorDao.findByProperties(properties);
+
+ if (locationError == null) {
+
+ if (log.isTraceEnabled()) {
+ log.trace("no location error reported for " + storedArticle);
+ }
+
+ result.add(storedArticle);
+
+ } else {
+
+ if (log.isDebugEnabled()) {
+ log.debug("removing stored article " + storedArticle + " due to location error " + locationError);
+ }
+
+ }
+
+ }
+
+ return result;
+
}
}
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-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -68,6 +68,9 @@
private static final Log log = LogFactory.getLog(ReceptionService.class);
+ /** disabled, for a warehouse with 1000+ locations, can lead to a page of 1Mo+, now the locations are loaded on demand */
+ protected static final boolean INCLUDE_ALL_BUILDING_LOCATIONS_IN_RECEPTION_TASK = false;
+
protected MagalieServiceContext serviceContext;
@Override
@@ -195,7 +198,7 @@
ImmutableSet.of(
Locations.isNotReceptionLocation(),
Locations.isNotFullLocation(),
- locationErrorsService.getLocationNotReportedInErrorPredicate()
+ locationErrorsService.getLocationNotReportedInErrorPredicate(article)
)
);
@@ -244,7 +247,7 @@
locations.addAll(locationDao.findAllWithoutReception(warehouse));
// add all locations in the same building, other warehouses
- if (false) { // disabled, for a warehouse with 1000+ locations, can lead to a page of 1Mo+, now the locations are loaded on demand
+ if (INCLUDE_ALL_BUILDING_LOCATIONS_IN_RECEPTION_TASK) {
locations.addAll(locationDao.findAllWithoutReception(warehouse.getBuilding()));
}
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-07-11 10:56:35 UTC (rev 300)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/service/ReceptionServiceTest.java 2013-07-11 18:41:26 UTC (rev 301)
@@ -144,14 +144,18 @@
Assert.assertEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 3).getWarehouse());
// locations in another warehouse last
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 4).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 5).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 6).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 7).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 8).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 9).getWarehouse());
- Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 10).getWarehouse());
+ if (service.INCLUDE_ALL_BUILDING_LOCATIONS_IN_RECEPTION_TASK) {
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 4).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 5).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 6).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 7).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 8).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 9).getWarehouse());
+ Assert.assertNotEquals(receivedArticle.getLocation().getWarehouse(), Iterables.get(receptionTask.getLocations(), 10).getWarehouse());
+
+ }
+
for (Location location : receptionTask.getLocations()) {
if (log.isDebugEnabled()) {
1
0