diff --git a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/exception/IExceptionMessage.java b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/exception/IExceptionMessage.java index e0fc4dd..aa80bf2 100644 --- a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/exception/IExceptionMessage.java +++ b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/exception/IExceptionMessage.java @@ -72,4 +72,6 @@ public interface IExceptionMessage { "Please enter supplier for following purchase request : %s" /*)*/; public static final String TCO = /*$$(*/ "CTO not validated for products : %s" /*)*/; + public static final String NO_TCO = /*$$(*/ + "CTO not present for products : %s" /*)*/; } diff --git a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderService.java b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderService.java index 952d63d..46e06e4 100644 --- a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderService.java +++ b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderService.java @@ -110,6 +110,8 @@ public interface PurchaseOrderService { public void validatePurchaseOrder(PurchaseOrder purchaseOrder) throws AxelorException, MalformedURLException, JSONException; + public void checkTcoToApprove(PurchaseOrder purchaseOrder) throws AxelorException; + public void finishPurchaseOrder(PurchaseOrder purchaseOrder); public void cancelPurchaseOrder(PurchaseOrder purchaseOrder); diff --git a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderServiceImpl.java b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderServiceImpl.java index 1f4c25b..8d908c7 100644 --- a/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderServiceImpl.java +++ b/modules/axelor-open-suite/axelor-purchase/src/main/java/com/axelor/apps/purchase/service/PurchaseOrderServiceImpl.java @@ -307,6 +307,7 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { @Override @Transactional(rollbackOn = {Exception.class}) public void requestPurchaseOrder(PurchaseOrder purchaseOrder) throws AxelorException { + this.checkTcoToApprove(purchaseOrder); purchaseOrder.setStatusSelect(PurchaseOrderRepository.STATUS_REQUESTED); Partner partner = purchaseOrder.getSupplierPartner(); Company company = purchaseOrder.getCompany(); @@ -609,6 +610,37 @@ public class PurchaseOrderServiceImpl implements PurchaseOrderService { } + public void checkTcoToApprove(PurchaseOrder purchaseOrder) throws AxelorException{ + /*vérifier si tous les tco sont validées */ + javax.persistence.Query dateQuery = + com.axelor + .db + .JPA + .em() + .createNativeQuery("SELECT A.product "+ + "FROM PURCHASE_PURCHASE_ORDER_LINE AS A "+ + "LEFT JOIN PUBLIC.SUPPLIERMANAGEMENT_PURCHASE_ORDER_SUPPLIER_LINE AS B "+ + "ON A.ID = B.PURCHASE_ORDER_LINE "+ + "WHERE A.PURCHASE_ORDER = "+purchaseOrder.getId()+" AND (A.ARCHIVED IS NOT TRUE OR B.ARCHIVED IS NOT TRUE) and B.ID is null "+ + "GROUP BY A.ID, B.ID"); + List productsResult = dateQuery.getResultList(); + + + List products = new ArrayList<>(); + for (BigInteger id : productsResult) { + Product product = Beans.get(ProductRepository.class).find(id.longValue()); + products.add(product.getFullName()); + } + + if(products.size() > 0){ + + throw new AxelorException( + TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, + I18n.get(IExceptionMessage.NO_TCO),products); + } + + } + @Transactional