From 879e4d4716f30e717ee2a96d38224e11df435b1c Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Thu, 23 Jun 2022 10:59:31 +0100 Subject: [PATCH 1/5] add link between po children and purchase request --- .../service/PurchaseRequestServiceImpl.java | 4 ++++ .../main/resources/domains/PurchaseOrder.xml | 2 ++ .../service/PurchaseOrderSupplierService.java | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseRequestServiceImpl.java b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseRequestServiceImpl.java index 140a77cb..40cd4dbf 100644 --- a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseRequestServiceImpl.java +++ b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseRequestServiceImpl.java @@ -93,6 +93,9 @@ public class PurchaseRequestServiceImpl implements PurchaseRequestService { // SOPHAL setProjectPurchaseOrder(purchaseOrder, purchaseRequest); purchaseOrder.setNotes(purchaseRequest.getDescription()); + // sophal set purchase request + // purchaseOrder.setPurchaseRequest(purchaseRequest.getId()); + // sophal purchaseOrderRepo.save(purchaseOrder); // SOPHAL key = key == null ? purchaseRequest.getId().toString() : key; @@ -133,6 +136,7 @@ public class PurchaseRequestServiceImpl implements PurchaseRequestService { } purchaseOrder.getPurchaseOrderLineList().addAll(purchaseOrderLineList); purchaseOrderService.computePurchaseOrder(purchaseOrder); + purchaseOrder.setPurchaseRequestOrigin(purchaseRequest); purchaseOrderRepo.save(purchaseOrder); Set hash_Set = new HashSet(); hash_Set.add(purchaseOrder); diff --git a/modules/axelor-open-suite/axelor-purchase/src/main/resources/domains/PurchaseOrder.xml b/modules/axelor-open-suite/axelor-purchase/src/main/resources/domains/PurchaseOrder.xml index 16df4c18..87874097 100644 --- a/modules/axelor-open-suite/axelor-purchase/src/main/resources/domains/PurchaseOrder.xml +++ b/modules/axelor-open-suite/axelor-purchase/src/main/resources/domains/PurchaseOrder.xml @@ -69,6 +69,8 @@ + + diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java index 3533c001..8943069f 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java @@ -28,9 +28,11 @@ import com.axelor.apps.base.service.PartnerPriceListService; import com.axelor.apps.base.service.app.AppBaseService; import com.axelor.apps.purchase.db.PurchaseOrder; import com.axelor.apps.purchase.db.PurchaseOrderLine; +import com.axelor.apps.purchase.db.PurchaseRequest; import com.axelor.apps.purchase.db.SupplierCatalog; import com.axelor.apps.purchase.db.repo.PurchaseOrderLineRepository; import com.axelor.apps.purchase.db.repo.PurchaseOrderRepository; +import com.axelor.apps.purchase.db.repo.PurchaseRequestRepository; import com.axelor.apps.purchase.service.PurchaseOrderLineService; import com.axelor.apps.purchase.service.app.AppPurchaseService; import com.axelor.apps.stock.service.StockLocationService; @@ -52,6 +54,8 @@ import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.HashSet; +import java.util.Set; public class PurchaseOrderSupplierService { @@ -65,6 +69,8 @@ public class PurchaseOrderSupplierService { @Inject protected PurchaseOrderRepository poRepo; + @Inject private PurchaseRequestRepository purchaseRequestRepo; + @Transactional public void generateAllSuppliersRequests(PurchaseOrder purchaseOrder) { @@ -128,13 +134,22 @@ public class PurchaseOrderSupplierService { Map> purchaseOrderLinesBySupplierPartner = this.splitBySupplierPartner(purchaseOrder.getPurchaseOrderLineList()); + // remove link purchase order purchase request + PurchaseRequest purchaseRequest = Beans.get(PurchaseRequestRepository.class).find(purchaseOrder.getPurchaseRequestOrigin().getId()); + purchaseRequest.getPurchaseOrderSet().remove(purchaseOrder); + Set hash_Set = new HashSet(); + for (Partner supplierPartner : purchaseOrderLinesBySupplierPartner.keySet()) { PurchaseOrder PurchaseOrderNew = this.createPurchaseOrderSophal( supplierPartner, purchaseOrderLinesBySupplierPartner.get(supplierPartner), purchaseOrder); + // sophal + hash_Set.add(PurchaseOrderNew); createPurchaseOrderSupplierLineTCO(PurchaseOrderNew.getPurchaseOrderLineList() ,purchaseOrderLinesBySupplierPartner.get(supplierPartner)); } + purchaseRequest.setPurchaseOrderSet(hash_Set); + purchaseRequestRepo.save(purchaseRequest); purchaseOrder.setArchived(true); poRepo.save(purchaseOrder); } @@ -273,7 +288,7 @@ public class PurchaseOrderSupplierService { purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED); purchaseOrder.setReceiptState(PurchaseOrderRepository.STATE_NOT_RECEIVED); - + purchaseOrder.setPurchaseRequestOrigin(parentPurchaseOrder.getPurchaseRequestOrigin()); poRepo.save(purchaseOrder); return purchaseOrder; From 136097ff364c3114de7f3f281d1ab6075b0e03d4 Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Thu, 23 Jun 2022 11:15:17 +0100 Subject: [PATCH 2/5] copy description from parent po to children POs --- .../service/PurchaseOrderSupplierService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java index 8943069f..026c6809 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java @@ -289,6 +289,8 @@ public class PurchaseOrderSupplierService { purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED); purchaseOrder.setReceiptState(PurchaseOrderRepository.STATE_NOT_RECEIVED); purchaseOrder.setPurchaseRequestOrigin(parentPurchaseOrder.getPurchaseRequestOrigin()); + // copy description from parent po + purchaseOrder.setNotes(parentPurchaseOrder.getNotes());; poRepo.save(purchaseOrder); return purchaseOrder; From 16f582158476804b09b1a64b38cedf74487e92f6 Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Thu, 23 Jun 2022 15:59:58 +0100 Subject: [PATCH 3/5] copy texline from parent to generated PO children --- .../service/PurchaseOrderSupplierService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java index 026c6809..27cd351d 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java @@ -321,6 +321,8 @@ public class PurchaseOrderSupplierService { PurchaseOrderLineNew.setDiscountAmount(purchaseOrderLine.getDiscountAmount()); PurchaseOrderLineNew.setDiscountTypeSelect(purchaseOrderLine.getDiscountTypeSelect()); PurchaseOrderLineNew.setSupplierPartner(purchaseOrderLine.getSupplierPartner()); + // set taxline to children + PurchaseOrderLineNew.setTaxLine(purchaseOrderLine.getTaxLine()); return PurchaseOrderLineNew ; } From ed4bddc1c6260f0fc9c51a892547f232ac64f545 Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Thu, 23 Jun 2022 16:04:15 +0100 Subject: [PATCH 4/5] prevent generation of PO children twice from the same parent --- .../web/PurchaseOrderController.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderController.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderController.java index 32862dae..b882be69 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderController.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/web/PurchaseOrderController.java @@ -27,6 +27,7 @@ import com.axelor.inject.Beans; import com.axelor.rpc.ActionRequest; import com.axelor.rpc.ActionResponse; import com.google.inject.Singleton; +import java.util.List; @Singleton public class PurchaseOrderController { @@ -34,7 +35,11 @@ public class PurchaseOrderController { public void generateSuppliersPurchaseOrder(ActionRequest request, ActionResponse response) { PurchaseOrder purchaseOrder = request.getContext().asType(PurchaseOrder.class); - + List purchaseOrders = Beans.get(PurchaseOrderRepository.class).all() + .filter("self.parentPurchaseOrder = ?1 ", purchaseOrder.getId()) + .fetch(); + + if(purchaseOrders.size() < 1){ try { Beans.get(PurchaseOrderSupplierService.class) .generateSuppliersPurchaseOrder( @@ -44,7 +49,10 @@ public class PurchaseOrderController { } catch (Exception e) { TraceBackService.trace(response, e); } + }else{ + response.setFlash("Vous avez deja genere les commandes fournisseurs associees"); } +} public void generateSuppliersRequests(ActionRequest request, ActionResponse response) { From 904e2ed225e719dba91d5f7a0424c3a00f504567 Mon Sep 17 00:00:00 2001 From: bachir souldi Date: Fri, 24 Jun 2022 15:49:35 +0100 Subject: [PATCH 5/5] allow multiple sub-creation of PO from children --- .../service/PurchaseOrderSupplierService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java index 27cd351d..1c041cec 100644 --- a/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java +++ b/modules/axelor-open-suite/axelor-supplier-management/src/main/java/com/axelor/apps/suppliermanagement/service/PurchaseOrderSupplierService.java @@ -41,6 +41,7 @@ import com.axelor.apps.supplychain.service.PurchaseOrderServiceSupplychainImpl; import com.axelor.apps.suppliermanagement.db.repo.PurchaseOrderSupplierLineRepository; import com.axelor.apps.suppliermanagement.db.PurchaseOrderSupplierLine; import com.axelor.auth.AuthUtils; +import com.axelor.db.JPA; import com.axelor.exception.AxelorException; import com.axelor.exception.db.repo.TraceBackRepository; import com.axelor.i18n.I18n; @@ -56,6 +57,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import javax.persistence.Query; public class PurchaseOrderSupplierService { @@ -136,9 +140,13 @@ public class PurchaseOrderSupplierService { // remove link purchase order purchase request PurchaseRequest purchaseRequest = Beans.get(PurchaseRequestRepository.class).find(purchaseOrder.getPurchaseRequestOrigin().getId()); - purchaseRequest.getPurchaseOrderSet().remove(purchaseOrder); - Set hash_Set = new HashSet(); + Set po = purchaseRequest.getPurchaseOrderSet().stream().filter((t) -> t.getId() != purchaseOrder.getId()).collect(Collectors.toSet()); + + purchaseRequest.getPurchaseOrderSet().removeIf((t) -> t.getId() == purchaseOrder.getId()); + + Set hash_Set = new HashSet(); + hash_Set.addAll(po); for (Partner supplierPartner : purchaseOrderLinesBySupplierPartner.keySet()) { PurchaseOrder PurchaseOrderNew = this.createPurchaseOrderSophal(