Pick saleOrderLine for StockMoveLine in split-2
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user