From cfdd98edda1cf6ef81b0bfc101ed50f32c3814f3 Mon Sep 17 00:00:00 2001 From: walid seghier Date: Sun, 18 Sep 2022 10:13:37 +0100 Subject: [PATCH] Dossier importation : divise la ligne bc en 2 --- .../PurchaseOrderSupplierLineService.java | 78 +++++++++++++++++++ .../PurchaseOrderSupplierLineController.java | 20 +++++ 2 files changed, 98 insertions(+) diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierLineService.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierLineService.java index 76857125..0686c806 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierLineService.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierLineService.java @@ -35,12 +35,24 @@ import com.axelor.inject.Beans; import com.google.inject.Inject; import com.google.inject.persist.Transactional; import java.math.BigDecimal; +import com.axelor.apps.purchase.db.PurchaseOrder; +import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository; +import com.axelor.apps.purchase.service.PurchaseOrderLineService; +import java.util.List; +import java.math.RoundingMode; +import com.axelor.apps.base.service.app.AppBaseService; public class PurchaseOrderSupplierLineService { @Inject PurchaseOrderSupplierLineRepository poSupplierLineRepo; @Inject protected AppPurchaseService appPurchaseService; + + @Inject private PurchaseOrderLineRepository purchaseOrderLineRepo; + + @Inject private PurchaseOrderLineService purchaseOrderLineService; + + @Inject protected AppBaseService appBaseService; @Transactional(rollbackOn = {Exception.class}) public void accept(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException { @@ -95,4 +107,70 @@ public class PurchaseOrderSupplierLineService { public void savePurchaseSupplierLine(PurchaseOrderSupplierLine purchaseOrderSupplierLine){ poSupplierLineRepo.save(purchaseOrderSupplierLine); } + + @Transactional + public void calculateAmountsTco(PurchaseOrderSupplierLine purchaseOrderSupplierLine) throws AxelorException{ + + BigDecimal ExTaxTotal = BigDecimal.ZERO; + BigDecimal taxTotal = BigDecimal.ZERO; + BigDecimal inTaxTotal = BigDecimal.ZERO; + + ExTaxTotal = purchaseOrderSupplierLine.getPrice().multiply(purchaseOrderSupplierLine.getAvailableQty()) + .setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN); + purchaseOrderSupplierLine.setExTaxTotal(ExTaxTotal); + + if(purchaseOrderSupplierLine.getTaxLine().getValue() != null){ + + taxTotal = ExTaxTotal.multiply(purchaseOrderSupplierLine.getTaxLine().getValue()) + .setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN); + purchaseOrderSupplierLine.setTaxTotal(taxTotal); + } + + inTaxTotal = ExTaxTotal.add(taxTotal).setScale(AppBaseService.DEFAULT_NB_DECIMAL_DIGITS, RoundingMode.HALF_EVEN);; + purchaseOrderSupplierLine.setInTaxTotal(inTaxTotal); + + poSupplierLineRepo.save(purchaseOrderSupplierLine); + } + + + @Transactional + public void splitPurchaseOrderLinesSpecialInto2( + PurchaseOrder purchaseOrder, PurchaseOrderLine purchaseOrderLine, BigDecimal splitQty) throws AxelorException{ + + BigDecimal totalQty = purchaseOrderLine.getQty(); + totalQty = totalQty.subtract(splitQty); + + if(totalQty.compareTo(BigDecimal.ZERO) > 0){ + + PurchaseOrderLine newLine = purchaseOrderLineRepo.copy(purchaseOrderLine, true); + newLine.setQty(splitQty); + purchaseOrderLineService.compute(newLine, purchaseOrder); + List purchaseOrderSupplierLineList; + purchaseOrderSupplierLineList = newLine.getPurchaseOrderSupplierLineList(); + if (purchaseOrderSupplierLineList != null) { + for (PurchaseOrderSupplierLine purchaseOrderSupplierLine : purchaseOrderSupplierLineList) { + purchaseOrderSupplierLine.setAvailableQty(splitQty); + this.calculateAmountsTco(purchaseOrderSupplierLine); + } + } + purchaseOrder.addPurchaseOrderLineListItem(newLine); + + PurchaseOrderLine newLine2 = purchaseOrderLineRepo.copy(purchaseOrderLine, true); + newLine2.setQty(totalQty); + purchaseOrderLineService.compute(newLine2, purchaseOrder); + List purchaseOrderSupplierLineList2; + purchaseOrderSupplierLineList2 = newLine2.getPurchaseOrderSupplierLineList(); + if (purchaseOrderSupplierLineList2 != null) { + for (PurchaseOrderSupplierLine purchaseOrderSupplierLine2 : purchaseOrderSupplierLineList2) { + purchaseOrderSupplierLine2.setAvailableQty(totalQty); + this.calculateAmountsTco(purchaseOrderSupplierLine2); + } + } + purchaseOrder.addPurchaseOrderLineListItem(newLine2); + + + purchaseOrder.removePurchaseOrderLineListItem(purchaseOrderLine); + + } + } } diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderSupplierLineController.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderSupplierLineController.java index 3e4a1ad0..afa4a68d 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderSupplierLineController.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderSupplierLineController.java @@ -36,6 +36,8 @@ import com.google.common.base.Strings; import com.google.inject.Singleton; import java.util.stream.Collectors; import com.axelor.meta.schema.actions.ActionView; +import java.math.BigDecimal; +import com.axelor.exception.AxelorException; @Singleton @@ -151,4 +153,22 @@ public class PurchaseOrderSupplierLineController { response.setAttr("supplierPartner", "domain", domain); } + + + public void splitPurchaseOrderLinesInto2(ActionRequest request, ActionResponse response){ + try { + Long Id = (Long) request.getContext().get("id"); + PurchaseOrderLineRepository purchaseOrderLineRepository = Beans.get(PurchaseOrderLineRepository.class); + PurchaseOrderLine purchaseOrderLine = purchaseOrderLineRepository.find(Id); + PurchaseOrder purchaseOrder = purchaseOrderLine.getPurchaseOrder(); + + BigDecimal splitQty = new BigDecimal(request.getContext().get("splitQty").toString()); + + Beans.get(PurchaseOrderSupplierLineService.class) + .splitPurchaseOrderLinesSpecialInto2(purchaseOrder, purchaseOrderLine, splitQty); + } catch (Exception e) { + TraceBackService.trace(response, e); + } + + } }