From 95effc77b89958273ea81326de275e3d39c3aabc Mon Sep 17 00:00:00 2001 From: Kheireddine Mehdi Date: Thu, 20 Nov 2025 09:02:08 +0100 Subject: [PATCH] feat: add stock move verification for wms --- .../stock/service/StockMoveServiceImpl.java | 137 +++++++++++++----- .../main/resources/domains/StockConfig.xml | 6 + 2 files changed, 107 insertions(+), 36 deletions(-) diff --git a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java index 87c56d5..bee67aa 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/service/StockMoveServiceImpl.java @@ -418,22 +418,59 @@ public class StockMoveServiceImpl implements StockMoveService { String newStockSeq = null; stockMoveLineService.checkTrackingNumber(stockMove); stockMoveLineService.checkConformitySelection(stockMove); - System.out.println("Checking oooo..................."); - // checking ..... - if (stockMove.getFromStockLocation().getTypeSelect() != StockLocationRepository.TYPE_VIRTUAL) - { - List listOfIds = Arrays.asList(10L, 11L, 13L, 14L, 15L, 16L, 13L, 12L, 54L, 55L, 58L,50L); - System.out.println("Checking..................."); - System.out.println(listOfIds.contains(stockMove.getToStockLocation().getId())); - System.out.println("Checking..................."); + System.out.println("----------------------------------------------------"); + System.out.println("stockMove.getTypeSelect() : " + stockMove.getTypeSelect()); + System.out.println("----------------------------------------------------"); - if(listOfIds.contains(stockMove.getToStockLocation().getId())){ - checkIfQuarantine(stockMove); - checkIfNonConformityTag(stockMove); - } + + if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INTERNAL){ + System.out.println("INTERNAL MOVE"); + StockConfig stockConfig = stockMove.getCompany().getStockConfig(); + StockLocation parentwasteStockLocation = stockConfig.getWasteStockLocationParent(); + + if(Boolean.TRUE.equals(stockMove.getToStockLocation().getNeedCheckInVerification())){ + System.out.println("Check-in required for this stock location..."); + checkIfConforme(stockMove); + checkIfNonConformityTag(stockMove); + + } else if (parentwasteStockLocation.equals(stockMove.getToStockLocation().getParentStockLocation())){ + System.out.println("**************************** Child of Waste Parent ******************************"); + CheckIfNotNotconforme(stockMove); + checkIfNonConformityTag(stockMove); + } } + else if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING + && stockMove.getPartner().getId() != 853 + && stockMove.getIsReversion() == false){ + + System.out.println("Livraison Client."); + checkIfConforme(stockMove); + checkIfNonConformityTag(stockMove); + } + + else if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING + && stockMove.getPartner().getId() == 853 + && stockMove.getIsReversion() == false){ + + System.out.println("Sortie."); + StockConfig stockConfig = stockMove.getCompany().getStockConfig(); + StockLocation nonCoreStockLocationParent = stockConfig.getNonCoreStockLocation(); + StockLocation parentwasteStockLocation = stockConfig.getWasteStockLocationParent(); + + if (parentwasteStockLocation.equals(stockMove.getToStockLocation().getParentStockLocation())){ + System.out.println("**************************** Child of Waste Parent ******************************"); + CheckIfNotNotconforme(stockMove); + checkIfNonConformityTag(stockMove); + } else if (!nonCoreStockLocationParent.equals(stockMove.getToStockLocation().getParentStockLocation())) { + checkIfConforme(stockMove); + checkIfNonConformityTag(stockMove); + } + } + + + checkExpirationDates(stockMove); if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING) { @@ -1592,53 +1629,81 @@ public class StockMoveServiceImpl implements StockMoveService { } - public void checkIfQuarantine(StockMove stockMove) + public void checkIfConforme(StockMove stockMove) throws AxelorException { Query sql = JPA.em() .createNativeQuery( "SELECT LINE.ID"+ - " FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.INTERNAL_TRACKING_NUMBER = LOCATION_LINE.INTERNAL_TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+ - " where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 2 AND LOCATION_LINE.CONFORMITY_SELECT != 5 AND LINE.STOCK_MOVE = ?2"); + " FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+ + " where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 2 AND LINE.STOCK_MOVE = ?2"); sql.setParameter(1, stockMove.getFromStockLocation().getId()); sql.setParameter(2, stockMove.getId()); - System.out.println("*****************checkIfQuarantine******************"); + System.out.println("*****************checkIfConforme******************"); System.out.println(sql.getResultList().size() > 0); - System.out.println("******************checkIfQuarantine*****************"); + System.out.println("******************checkIfConforme*****************"); if (sql.getResultList().size() > 0) { throw new AxelorException( stockMove, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, - "Vous avez une ligne en etat qurantaine"); + "Certaines lignes ne sont pas conformes (état différent de 'Conforme')."); } } - public void checkIfNonConformityTag(StockMove stockMove) + public void CheckIfNotNotconforme(StockMove stockMove) throws AxelorException { - + Query sql = JPA.em() .createNativeQuery( - "SELECT LINE.ID" + - " FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.INTERNAL_TRACKING_NUMBER = LOCATION_LINE.INTERNAL_TRACKING_NUMBER and LINE.product = LOCATION_LINE.product" + - " where LOCATION_LINE.DETAILS_STOCK_LOCATION = :location AND LOCATION_LINE.is_conform_tag is not true AND LINE.STOCK_MOVE = :move"); - - sql.setParameter("location", stockMove.getFromStockLocation().getId()); - sql.setParameter("move", stockMove.getId()); + "SELECT LINE.ID"+ + " FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+ + " where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 3 AND LINE.STOCK_MOVE = ?2"); + sql.setParameter(1, stockMove.getFromStockLocation().getId()); + sql.setParameter(2, stockMove.getId()); - System.out.println("*****************checkIfNonConformityTag*****************"); - System.out.println(sql.getResultList().size() > 0); - System.out.println("*****************checkIfNonConformityTag****************"); - - if (sql.getResultList().size() > 0) { - throw new AxelorException( - stockMove, - TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, - "Vous avez une ligne non étiquetée"); + System.out.println("*****************CheckIfNotNotconforme******************"); + System.out.println(sql.getResultList().size() > 0); + System.out.println("******************CheckIfNotNotconforme*****************"); + if (sql.getResultList().size() > 0) { + throw new AxelorException( + stockMove, + TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, + "Toutes les lignes doivent être en état 'Non conforme'."); + } + } + + public void checkIfNonConformityTag(StockMove stockMove) + throws AxelorException { + + Query sql = JPA.em() + .createNativeQuery( + "SELECT LINE.ID" + + " FROM STOCK_STOCK_MOVE_LINE LINE" + + " LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE" + + " ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER" + + " AND LINE.PRODUCT = LOCATION_LINE.PRODUCT" + + " WHERE LOCATION_LINE.DETAILS_STOCK_LOCATION = :location" + + " AND (LOCATION_LINE.IS_CONFORM_TAG IS NULL OR LOCATION_LINE.IS_CONFORM_TAG = FALSE)" + + " AND LINE.STOCK_MOVE = :move"); + + sql.setParameter("location", stockMove.getFromStockLocation().getId()); + sql.setParameter("move", stockMove.getId()); + + System.out.println("*****************checkIfNonConformityTag*****************"); + boolean hasNonTags = !sql.getResultList().isEmpty(); + System.out.println("Has non conform tag: " + hasNonTags); + System.out.println("*****************checkIfNonConformityTag****************"); + + if (hasNonTags) { + throw new AxelorException( + stockMove, + TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, + "Vous avez une ligne non étiquetée"); + } } - } @Override public void massPlan(List moveIds) throws AxelorException { diff --git a/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockConfig.xml b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockConfig.xml index 0614576..4fdf53d 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockConfig.xml +++ b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockConfig.xml @@ -18,6 +18,9 @@ + + + @@ -102,6 +105,9 @@ + + +