From f86be4329a7334c9baf55a714bff79ff59789f6d Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Wed, 11 Jan 2023 08:51:48 +0100 Subject: [PATCH] fix split workflow --- .../stock/service/StockMoveServiceImpl.java | 1 + .../service/StockMoveInvoiceServiceImpl.java | 11 ++-- .../StockMoveServiceSupplychainImpl.java | 66 +++++++++++++++++++ .../supplychain/web/StockMoveController.java | 3 +- 4 files changed, 75 insertions(+), 6 deletions(-) diff --git a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java index 64dffdd2..4913f516 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java @@ -1344,6 +1344,7 @@ public class StockMoveServiceImpl implements StockMoveService { newStockMoveLine.setProductTypeSelect(moveLine.getProductTypeSelect()); // add stock move line originalStockMove.addStockMoveLineListItem(newStockMoveLine); + newStockMoveLine.setCompanyUnitPriceUntaxed(moveLine.getCompanyUnitPriceUntaxed()); // find the original move line to update it Optional correspondingMoveLine = diff --git a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveInvoiceServiceImpl.java b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveInvoiceServiceImpl.java index 85f2beb0..c8ffbadd 100644 --- a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveInvoiceServiceImpl.java +++ b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveInvoiceServiceImpl.java @@ -478,11 +478,12 @@ public class StockMoveInvoiceServiceImpl implements StockMoveInvoiceService { if (stockMoveLine.getSaleOrderLine() != null) { list = stockMoveLineSaleMap.get(stockMoveLine.getSaleOrderLine()); - if (list == null) { - list = new ArrayList<>(); - stockMoveLineSaleMap.put(stockMoveLine.getSaleOrderLine(), list); - } - list.add(stockMoveLine); + // if (list == null) { + // list = new ArrayList<>(); + // stockMoveLineSaleMap.put(stockMoveLine.getSaleOrderLine(), list); + // } + // list.add(stockMoveLine); + resultList.add(stockMoveLine); } else if (stockMoveLine.getPurchaseOrderLine() != null) { list = stockMoveLinePurchaseMap.get(stockMoveLine.getPurchaseOrderLine()); if (list == null) { diff --git a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveServiceSupplychainImpl.java b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveServiceSupplychainImpl.java index 248b86ce..36c435f6 100644 --- a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveServiceSupplychainImpl.java +++ b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/service/StockMoveServiceSupplychainImpl.java @@ -53,6 +53,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.StringJoiner; import java.util.stream.Collectors; import javax.persistence.Query; @@ -440,4 +441,69 @@ public class StockMoveServiceSupplychainImpl extends StockMoveServiceImpl } } } + + // same move +@Transactional(rollbackOn = {Exception.class}) +public StockMove splitInto2SameMove( + StockMove originalStockMove, List modifiedStockMoveLines) + throws AxelorException { + +StockMoveRepository stockMoveRepo = Beans.get(StockMoveRepository.class); +StockMoveLineRepository stockMoveLineRepo = Beans.get(StockMoveLineRepository.class); + + modifiedStockMoveLines = + modifiedStockMoveLines + .stream() + .filter(stockMoveLine -> stockMoveLine.getQty().compareTo(BigDecimal.ZERO) != 0) + .collect(Collectors.toList()); + for (StockMoveLine moveLine : modifiedStockMoveLines) { + StockMoveLine newStockMoveLine = new StockMoveLine(); + // Set quantity in new stock move line + newStockMoveLine = stockMoveLineRepo.copy(moveLine, false); + newStockMoveLine.setQty(moveLine.getQty()); + newStockMoveLine.setRealQty(moveLine.getQty()); + newStockMoveLine.setProductTypeSelect(moveLine.getProductTypeSelect()); + newStockMoveLine.setSaleOrderLine(moveLine.getSaleOrderLine()); + newStockMoveLine.setCompanyUnitPriceUntaxed(moveLine.getCompanyUnitPriceUntaxed()); + // add stock move line + originalStockMove.addStockMoveLineListItem(newStockMoveLine); + + // find the original move line to update it + Optional correspondingMoveLine = + originalStockMove + .getStockMoveLineList() + .stream() + .filter(stockMoveLine -> stockMoveLine.getId().equals(moveLine.getId())) + .findFirst(); + if (BigDecimal.ZERO.compareTo(moveLine.getQty()) > 0 + || (correspondingMoveLine.isPresent() + && moveLine.getQty().compareTo(correspondingMoveLine.get().getRealQty()) > 0)) { + throw new AxelorException( + TraceBackRepository.CATEGORY_INCONSISTENCY, + I18n.get(""), + originalStockMove); + } + + if (correspondingMoveLine.isPresent()) { + // Update quantity in original stock move. + // If the remaining quantity is 0, remove the stock move line + BigDecimal remainingQty = correspondingMoveLine.get().getQty().subtract(moveLine.getQty()); + if (BigDecimal.ZERO.compareTo(remainingQty) == 0) { + // Remove the stock move line + originalStockMove.removeStockMoveLineListItem(correspondingMoveLine.get()); + } else { + correspondingMoveLine.get().setQty(remainingQty); + correspondingMoveLine.get().setRealQty(remainingQty); + } + } + } + + if (!originalStockMove.getStockMoveLineList().isEmpty()) { + return stockMoveRepo.save(originalStockMove); + } else { + return null; + } +} + + } diff --git a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/web/StockMoveController.java b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/web/StockMoveController.java index f4a97a3d..d3fb9eb7 100644 --- a/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/web/StockMoveController.java +++ b/modules/axelor-open-suite/axelor-supplychain/src/main/java/com/axelor/apps/supplychain/web/StockMoveController.java @@ -30,6 +30,7 @@ import com.axelor.apps.supplychain.service.SaleOrderReservedQtyService; import com.axelor.apps.supplychain.service.SaleOrderServiceSupplychainImpl; import com.axelor.apps.supplychain.service.SaleOrderStockService; import com.axelor.apps.supplychain.service.StockMoveServiceSupplychain; +import com.axelor.apps.supplychain.service.StockMoveServiceSupplychainImpl; import com.axelor.apps.supplychain.service.app.AppSupplychainService; import com.axelor.apps.supplychain.service.config.SupplyChainConfigService; import com.axelor.exception.service.TraceBackService; @@ -129,7 +130,7 @@ public class StockMoveController { try { StockMove newStockMove = - Beans.get(SaleOrderServiceSupplychainImpl.class).splitInto2SameMove(stockMove, modifiedStockMoveLineList); + Beans.get(StockMoveServiceSupplychainImpl.class).splitInto2SameMove(stockMove, modifiedStockMoveLineList); if (newStockMove == null) { response.setFlash(I18n.get(""));