Pick saleOrderLine for StockMoveLine in split-2

This commit is contained in:
2023-01-08 08:23:56 +01:00
parent 71e8bdab59
commit f16ad5dc1b
2 changed files with 96 additions and 0 deletions

View File

@@ -28,6 +28,8 @@ import com.axelor.apps.sale.db.SaleOrderLine;
import com.axelor.apps.sale.db.repo.SaleOrderLineRepository; import com.axelor.apps.sale.db.repo.SaleOrderLineRepository;
import com.axelor.apps.sale.service.saleorder.SaleOrderServiceImpl; import com.axelor.apps.sale.service.saleorder.SaleOrderServiceImpl;
import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMove;
import com.axelor.apps.stock.db.StockMoveLine;
import com.axelor.apps.stock.db.repo.StockMoveLineRepository;
import com.axelor.apps.stock.db.repo.StockMoveRepository; import com.axelor.apps.stock.db.repo.StockMoveRepository;
import com.axelor.apps.stock.service.StockMoveService; import com.axelor.apps.stock.service.StockMoveService;
import com.axelor.apps.supplychain.db.Timetable; import com.axelor.apps.supplychain.db.Timetable;
@@ -188,4 +190,68 @@ public class SaleOrderServiceSupplychainImpl extends SaleOrderServiceImpl {
saleOrderStockService.createStocksMovesFromSaleOrder(saleOrder); saleOrderStockService.createStocksMovesFromSaleOrder(saleOrder);
} }
} }
// same move
@Transactional(rollbackOn = {Exception.class})
public StockMove splitInto2SameMove(
StockMove originalStockMove, List<StockMoveLine> 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());
// add stock move line
originalStockMove.addStockMoveLineListItem(newStockMoveLine);
// find the original move line to update it
Optional<StockMoveLine> 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;
}
}
} }

View File

@@ -20,9 +20,14 @@ package com.axelor.apps.supplychain.web;
import com.axelor.apps.base.db.Company; import com.axelor.apps.base.db.Company;
import com.axelor.apps.sale.db.SaleOrder; import com.axelor.apps.sale.db.SaleOrder;
import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMove;
import com.axelor.apps.stock.db.StockMoveLine;
import com.axelor.apps.stock.db.repo.StockMoveLineRepository;
import com.axelor.apps.stock.db.repo.StockMoveRepository;
import com.axelor.apps.stock.service.StockMoveService;
import com.axelor.apps.supplychain.db.SupplyChainConfig; import com.axelor.apps.supplychain.db.SupplyChainConfig;
import com.axelor.apps.supplychain.exception.IExceptionMessage; import com.axelor.apps.supplychain.exception.IExceptionMessage;
import com.axelor.apps.supplychain.service.SaleOrderReservedQtyService; 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.SaleOrderStockService;
import com.axelor.apps.supplychain.service.StockMoveServiceSupplychain; import com.axelor.apps.supplychain.service.StockMoveServiceSupplychain;
import com.axelor.apps.supplychain.service.app.AppSupplychainService; import com.axelor.apps.supplychain.service.app.AppSupplychainService;
@@ -32,6 +37,9 @@ import com.axelor.i18n.I18n;
import com.axelor.inject.Beans; import com.axelor.inject.Beans;
import com.axelor.rpc.ActionRequest; import com.axelor.rpc.ActionRequest;
import com.axelor.rpc.ActionResponse; import com.axelor.rpc.ActionResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public class StockMoveController { public class StockMoveController {
@@ -112,4 +120,26 @@ public class StockMoveController {
response.setReload(true); response.setReload(true);
} }
} }
public void splitInto2Same(ActionRequest request, ActionResponse response) {
StockMove stockMove = request.getContext().asType(StockMove.class);
List<StockMoveLine> modifiedStockMoveLineList = stockMove.getStockMoveLineList();
stockMove = Beans.get(StockMoveRepository.class).find(stockMove.getId());
try {
StockMove newStockMove =
Beans.get(SaleOrderServiceSupplychainImpl.class).splitInto2SameMove(stockMove, modifiedStockMoveLineList);
if (newStockMove == null) {
response.setFlash(I18n.get(""));
} else {
response.setReload(true);
}
} catch (Exception e) {
TraceBackService.trace(response, e);
}
}
} }