From 71e8bdab59bbf5ea47a7a511e4aa451a1fc92c2f Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Sat, 7 Jan 2023 18:20:07 +0100 Subject: [PATCH] split stock move line --- .../apps/stock/service/StockMoveService.java | 6 ++ .../stock/service/StockMoveServiceImpl.java | 65 +++++++++++++++++++ .../apps/stock/web/StockMoveController.java | 19 ++++++ 3 files changed, 90 insertions(+) diff --git a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveService.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveService.java index 799ce77..4a3a80d 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveService.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveService.java @@ -154,6 +154,12 @@ public interface StockMoveService { StockMove originalStockMove, List modifiedStockMoveLines) throws AxelorException; + +public StockMove splitInto2SameMove( + StockMove originalStockMove, List modifiedStockMoveLines) + throws AxelorException; + + public List> getStockPerDate( Long locationId, Long productId, LocalDate fromDate, LocalDate toDate); 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 4be8450..64dffdd 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 @@ -51,6 +51,7 @@ import com.axelor.apps.stock.db.repo.StockMoveRepository; import com.axelor.apps.stock.exception.IExceptionMessage; import com.axelor.apps.stock.report.IReport; import com.axelor.common.ObjectUtils; +import com.axelor.db.JPA; import com.axelor.exception.AxelorException; import com.axelor.exception.db.repo.TraceBackRepository; import com.axelor.i18n.I18n; @@ -70,6 +71,9 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; + +import javax.persistence.Query; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -1317,4 +1321,65 @@ public class StockMoveServiceImpl implements StockMoveService { } } } + + + // same move + @Override + @Transactional(rollbackOn = {Exception.class}) + public StockMove splitInto2SameMove( + StockMove originalStockMove, List modifiedStockMoveLines) + throws AxelorException { + + 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()); + // 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(IExceptionMessage.STOCK_MOVE_16), + 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-stock/src/main/java/com/axelor/apps/stock/web/StockMoveController.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveController.java index 58ade1b..600d590 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveController.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveController.java @@ -410,6 +410,25 @@ public class StockMoveController { } } + + public void splitInto2Same(ActionRequest request, ActionResponse response) { + StockMove stockMove = request.getContext().asType(StockMove.class); + List modifiedStockMoveLineList = stockMove.getStockMoveLineList(); + stockMove = Beans.get(StockMoveRepository.class).find(stockMove.getId()); + try { + StockMove newStockMove = + Beans.get(StockMoveService.class).splitInto2SameMove(stockMove, modifiedStockMoveLineList); + + if (newStockMove == null) { + response.setFlash(I18n.get(IExceptionMessage.STOCK_MOVE_SPLIT_NOT_GENERATED)); + } else { + response.setReload(true); + } + } catch (Exception e) { + TraceBackService.trace(response, e); + } + } + public void changeConformityStockMove(ActionRequest request, ActionResponse response) { StockMove stockMove = request.getContext().asType(StockMove.class);