fix split workflow

This commit is contained in:
2023-01-11 08:51:48 +01:00
parent f16ad5dc1b
commit f86be4329a
4 changed files with 75 additions and 6 deletions

View File

@@ -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<StockMoveLine> correspondingMoveLine =

View File

@@ -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) {

View File

@@ -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<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());
newStockMoveLine.setCompanyUnitPriceUntaxed(moveLine.getCompanyUnitPriceUntaxed());
// 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

@@ -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(""));