diff --git a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/exception/IExceptionMessage.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/exception/IExceptionMessage.java index e075158..1b319e5 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/exception/IExceptionMessage.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/exception/IExceptionMessage.java @@ -206,4 +206,7 @@ public interface IExceptionMessage { public static final String STOCK_CORRECTION_2 = /*$$(*/ "No stock move generated.Please verify stock correction details." /*)*/; + + public static final String STOCK_MOVE_QTY = /*$$(*/ + "Quantity transferred greater than the quantity of product." /*)*/; } 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 e524731..4a2f128 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 @@ -44,7 +44,9 @@ import com.axelor.apps.stock.db.StockConfig; import com.axelor.apps.stock.db.StockLocation; import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMoveLine; +import com.axelor.apps.stock.db.StockMoveLineLocation; import com.axelor.apps.stock.db.StockMoveLineLocationLine; +import com.axelor.apps.stock.db.StockMoveLineStockMoveLineLocation; import com.axelor.apps.stock.db.repo.*; import com.axelor.apps.stock.exception.IExceptionMessage; import com.axelor.apps.stock.report.IReport; @@ -64,14 +66,7 @@ import java.lang.invoke.MethodHandles; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; import javax.persistence.Query; @@ -398,12 +393,12 @@ public class StockMoveServiceImpl implements StockMoveService { } @Transactional(rollbackOn = {Exception.class}) - public StockMoveLineLocationLine createStockMoveLineLocationLine(StockMoveLine line){ + public StockMoveLineLocationLine createStockMoveLineLocationLine(StockMoveLine line,BigDecimal qty){ System.out.println("************************* Start createStockMoveLineLocationLine *************************"); StockMoveLineLocationLine stockMoveLineLocationLine = new StockMoveLineLocationLine(); stockMoveLineLocationLine.setProduct(line.getProduct()); System.out.println("- Product : "+stockMoveLineLocationLine.getProduct()); - stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().add(line.getRealQty())); + stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().add(qty)); System.out.println("- RealQty : "+stockMoveLineLocationLine.getRealQty()); System.out.println("- StockMoveLineLocation : "+stockMoveLineLocationLine.getStockMoveLineLocation()); stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber()); @@ -415,7 +410,7 @@ public class StockMoveServiceImpl implements StockMoveService { } @Transactional(rollbackOn = {Exception.class}) - public StockMoveLineLocationLine updateStockMoveLineLocationLine(StockMoveLine line,StockMoveLineLocationLine stockMoveLineLocationLine,Integer typeSelect) throws AxelorException { + public StockMoveLineLocationLine updateStockMoveLineLocationLine(StockMoveLine line,StockMoveLineLocationLine stockMoveLineLocationLine,Integer typeSelect,BigDecimal qty) throws AxelorException { System.out.println("\n********************** updateStockMoveLineLocationLine **********************"); stockMoveLineLocationLine.setProduct(line.getProduct()); @@ -424,12 +419,15 @@ public class StockMoveServiceImpl implements StockMoveService { System.out.println("- Before RealQty : "+stockMoveLineLocationLine.getRealQty()); if(typeSelect == StockMoveRepository.TYPE_INCOMING) { System.out.println("TYPE_INCOMING"); - stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().add(line.getRealQty())); + stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().add(qty)); } if (typeSelect == StockMoveRepository.TYPE_OUTGOING) { System.out.println("TYPE_OUTGOING"); - if(stockMoveLineLocationLine.getRealQty().compareTo(line.getRealQty()) >= 0){ - stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().subtract(line.getRealQty())); + System.out.println("stockMoveLineLocationLine.getRealQty() : "+stockMoveLineLocationLine.getRealQty()); + System.out.println("qty : "+qty); + System.out.println(stockMoveLineLocationLine.getRealQty().compareTo(qty)); + if(stockMoveLineLocationLine.getRealQty().compareTo(qty) >= 0){ + stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().subtract(qty)); }else{ throw new AxelorException( TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, @@ -446,6 +444,19 @@ public class StockMoveServiceImpl implements StockMoveService { System.out.println("********************** End updateStockMoveLineLocationLine *********************\n"); return stockMoveLineLocationLine; } + + public boolean checkQuantity(StockMoveLine line,List links ){ + BigDecimal count = BigDecimal.valueOf(0); + for (StockMoveLineStockMoveLineLocation link : links) { + count = count.add(link.getQty()); + } + System.out.println("count : "+count); + System.out.println("line.getRealQty() : "+line.getRealQty()); + if (count.compareTo(line.getRealQty()) != 0){ + return false; + } + return true; + } @Override @Transactional(rollbackOn = {Exception.class}) public String realize(StockMove stockMove, boolean checkOngoingInventoryFlag) @@ -488,43 +499,70 @@ public class StockMoveServiceImpl implements StockMoveService { line -> { System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); - line.getStockMoveLineLocationSet() - .forEach( - st -> { - System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+line.getStockMoveLineLocationSet()+")"); - String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - if (line.getTrackingNumber() == null){ - query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - } - List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() - .filter(query) - .bind("product", line.getProduct()) - .bind("trackingNumber", line.getTrackingNumber()) - .bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) - .fetch(); - int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); - System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); - for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList){ - System.out.println("\nstockMoveLineLocationLine : "+stockMoveLineLocationLine); - } - if (stockMoveLineLocationLineListSize < 1){ - StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line); - stockMoveLineLocationLine.setStockMoveLineLocation(st); - st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); - System.out.println("stockMoveLineLocationLine : "+stockMoveLineLocationLine); - }else { - if (stockMoveLineLocationLineListSize == 1){ - StockMoveLineLocationLine newStockMoveLineLocationLine = null; - try { - newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect()); - } catch (AxelorException e) { - throw new RuntimeException(e); - } - newStockMoveLineLocationLine.setStockMoveLineLocation(st); - st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); - } - } - }); + List stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all() + .filter("self.stockMoveLine = :stockMoveLine ") + .bind("stockMoveLine", line.getId()) + .fetch(); + System.out.println("***********************************************************************"); + System.out.println("\n\n\n"); + System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest); + if (checkQuantity(line,stockMoveLineLocationLineListTest)) { + if (stockMoveLineLocationLineListTest.size() > 0) { + List stockMoveLineLocations = new ArrayList<>(); + System.out.println("-----------------------------"); + for (StockMoveLineStockMoveLineLocation link : stockMoveLineLocationLineListTest) { + System.out.println("ID: " + link.getId()); + System.out.println("StockMoveLine ID: " + (link.getStockMoveLine() != null ? link.getStockMoveLine().getId() : "null")); + System.out.println("StockMoveLineLocation ID: " + (link.getStockMoveLineLocation() != null ? link.getStockMoveLineLocation().getId() : "null")); + StockMoveLineLocation st = link.getStockMoveLineLocation(); + System.out.println("Quantity: " + link.getQty()); + System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = " + line.getProduct() + " AND self.trackingNumber = " + line.getTrackingNumber() + " AND self.stockMoveLineLocation IN (" + link.getStockMoveLineLocation() + ")"); + String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + if (line.getTrackingNumber() == null) { + query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + } + List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() + .filter(query) + .bind("product", line.getProduct()) + .bind("trackingNumber", line.getTrackingNumber()) + .bind("stockMoveLineLocation", link.getStockMoveLineLocation()) + .fetch(); + System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList); + StockMoveLineLocationLine newStockMoveLineLocationLine = null; + + if (stockMoveLineLocationLineList.size() == 0) { + System.out.println("stockMoveLineLocationLineList.size()==0 ---> createStockMoveLineLocationLine"); + StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line, link.getQty()); + stockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); + } else { + System.out.println("stockMoveLineLocationLineList.size()==" + stockMoveLineLocationLineList.size() + " ---> updateStockMoveLineLocationLine"); + System.out.println("updateStockMoveLineLocationLine"); + try { + newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), stockMove.getTypeSelect(), link.getQty()); + } catch (AxelorException e) { + throw new RuntimeException(e); + } + newStockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); + } + System.out.println("-----------------------------\n"); + } + + } + }else{ + System.out.println("Insuffisant qty"); + try { + throw new AxelorException( + TraceBackRepository.CATEGORY_INCONSISTENCY, + I18n.get(IExceptionMessage.STOCK_MOVE_QTY), + line.getProduct().getName()); + } catch (AxelorException e) { + throw new RuntimeException(e); + } + } + System.out.println("\n\n\n"); + System.out.println("***********************************************************************"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); Long partnerId = stockMove.getPartner().getId(); Long familleId = line.getProduct().getFamilleProduit().getId(); @@ -581,49 +619,73 @@ public class StockMoveServiceImpl implements StockMoveService { } } } catch (AxelorException e) { - e.printStackTrace(); // Consider logging this instead of printing. + e.printStackTrace(); } } }); } if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){ + System.out.println("************************ TYPE_OUTGOING ***********************"); stockMove .getStockMoveLineList() .forEach( line -> { System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); - line.getStockMoveLineLocationSet() - .forEach( - st -> { - String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - if (line.getTrackingNumber() == null){ - query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - } - System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+line.getStockMoveLineLocationSet()+")"); - List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() - .filter(query) - .bind("product", line.getProduct()) - .bind("trackingNumber", line.getTrackingNumber()) - .bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) - .fetch(); - int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); - System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); - for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList){ - System.out.println("\nstockMoveLineLocationLine : "+stockMoveLineLocationLine); - } - if (stockMoveLineLocationLineListSize == 1){ - StockMoveLineLocationLine newStockMoveLineLocationLine = null; - try { - newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect()); - } catch (AxelorException e) { - throw new RuntimeException(e); - } - newStockMoveLineLocationLine.setStockMoveLineLocation(st); - st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); - } - }); + List stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all() + .filter("self.stockMoveLine = :stockMoveLine ") + .bind("stockMoveLine", line.getId()) + .fetch(); + System.out.println("***********************************************************************"); + System.out.println("\n\n\n"); + System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest); + if(stockMoveLineLocationLineListTest.size()>0){ + List stockMoveLineLocations = new ArrayList<>(); + + System.out.println("-----------------------------"); + for (StockMoveLineStockMoveLineLocation link : stockMoveLineLocationLineListTest) { + System.out.println("ID: " + link.getId()); + System.out.println("StockMoveLine ID: " + (link.getStockMoveLine() != null ? link.getStockMoveLine().getId() : "null")); + System.out.println("StockMoveLineLocation ID: " + (link.getStockMoveLineLocation() != null ? link.getStockMoveLineLocation().getId() : "null")); + StockMoveLineLocation st = link.getStockMoveLineLocation(); + System.out.println("Quantity: " + link.getQty()); + System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+link.getStockMoveLineLocation()+")"); + String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + if (line.getTrackingNumber() == null){ + query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + } + List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() + .filter(query) + .bind("product", line.getProduct()) + .bind("trackingNumber", line.getTrackingNumber()) + .bind("stockMoveLineLocation", link.getStockMoveLineLocation()) + .fetch(); + System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); + StockMoveLineLocationLine newStockMoveLineLocationLine = null; + if(stockMoveLineLocationLineList.size()==0){ + System.out.println("stockMoveLineLocationLineList.size()==0 ---> createStockMoveLineLocationLine"); + StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line,link.getQty()); + stockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); + }else{ + System.out.println("stockMoveLineLocationLineList.size()=="+stockMoveLineLocationLineList.size()+" ---> updateStockMoveLineLocationLine"); + System.out.println("updateStockMoveLineLocationLine"); + try { + newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect(),link.getQty()); + } catch (AxelorException e) { + throw new RuntimeException(e); + } + newStockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); + } + System.out.println("-----------------------------\n"); + } + + } + System.out.println("\n\n\n"); + System.out.println("***********************************************************************"); + System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); }); } @@ -1093,39 +1155,60 @@ public class StockMoveServiceImpl implements StockMoveService { .forEach( line -> { System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); - System.out.println("line.getStockMoveLineLocationSet() : " + line.getStockMoveLineLocationSet()); - line.getStockMoveLineLocationSet() - .forEach( - st -> { - String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - if (line.getTrackingNumber() == null){ - query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - } - System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+line.getStockMoveLineLocationSet()+")"); - List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() - .filter(query) - .bind("product", line.getProduct()) - .bind("trackingNumber", line.getTrackingNumber()) - .bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) - .fetch(); - int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); - System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList); - for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList) { - System.out.println("\nstockMoveLineLocationLine : " + stockMoveLineLocationLine); - } + System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); + List stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all() + .filter("self.stockMoveLine = :stockMoveLine ") + .bind("stockMoveLine", line.getId()) + .fetch(); + System.out.println("***********************************************************************"); + System.out.println("\n\n\n"); + System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest); + if(stockMoveLineLocationLineListTest.size()>0){ + List stockMoveLineLocations = new ArrayList<>(); - if (stockMoveLineLocationLineListSize == 1) { - StockMoveLineLocationLine newStockMoveLineLocationLine = null; - try { - newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), StockMoveRepository.TYPE_OUTGOING); - } catch (AxelorException e) { - throw new RuntimeException(e); - } - newStockMoveLineLocationLine.setStockMoveLineLocation(st); - st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); - } - }); - System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); + System.out.println("-----------------------------"); + for (StockMoveLineStockMoveLineLocation link : stockMoveLineLocationLineListTest) { + System.out.println("ID: " + link.getId()); + System.out.println("StockMoveLine ID: " + (link.getStockMoveLine() != null ? link.getStockMoveLine().getId() : "null")); + System.out.println("StockMoveLineLocation ID: " + (link.getStockMoveLineLocation() != null ? link.getStockMoveLineLocation().getId() : "null")); + StockMoveLineLocation st = link.getStockMoveLineLocation(); + System.out.println("Quantity: " + link.getQty()); + System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+link.getStockMoveLineLocation()+")"); + String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + if (line.getTrackingNumber() == null){ + query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + } + List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() + .filter(query) + .bind("product", line.getProduct()) + .bind("trackingNumber", line.getTrackingNumber()) + .bind("stockMoveLineLocation", link.getStockMoveLineLocation()) + .fetch(); + System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); + StockMoveLineLocationLine newStockMoveLineLocationLine = null; + if(stockMoveLineLocationLineList.size()==0){ + System.out.println("stockMoveLineLocationLineList.size()==0 ---> createStockMoveLineLocationLine"); + StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line,link.getQty()); + stockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); + }else{ + System.out.println("stockMoveLineLocationLineList.size()=="+stockMoveLineLocationLineList.size()+" ---> updateStockMoveLineLocationLine"); + System.out.println("updateStockMoveLineLocationLine"); + try { + newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),StockMoveRepository.TYPE_OUTGOING,link.getQty()); + } catch (AxelorException e) { + throw new RuntimeException(e); + } + newStockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); + } + System.out.println("-----------------------------\n"); + } + + } + System.out.println("\n\n\n"); + System.out.println("***********************************************************************"); + System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); }); } if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){ @@ -1134,39 +1217,60 @@ public class StockMoveServiceImpl implements StockMoveService { .forEach( line -> { System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); - System.out.println("line.getStockMoveLineLocationSet() : " + line.getStockMoveLineLocationSet()); - line.getStockMoveLineLocationSet() - .forEach( - st -> { - String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - if (line.getTrackingNumber() == null){ - query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; - } - System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+line.getStockMoveLineLocationSet()+")"); - List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() - .filter(query) - .bind("product", line.getProduct()) - .bind("trackingNumber", line.getTrackingNumber()) - .bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) - .fetch(); - int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); - System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList); - for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList) { - System.out.println("\nstockMoveLineLocationLine : " + stockMoveLineLocationLine); - } + System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); + List stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all() + .filter("self.stockMoveLine = :stockMoveLine ") + .bind("stockMoveLine", line.getId()) + .fetch(); + System.out.println("***********************************************************************"); + System.out.println("\n\n\n"); + System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest); + if(stockMoveLineLocationLineListTest.size()>0){ + List stockMoveLineLocations = new ArrayList<>(); - if (stockMoveLineLocationLineListSize == 1) { - StockMoveLineLocationLine newStockMoveLineLocationLine = null; - try { - newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), StockMoveRepository.TYPE_INCOMING); - } catch (AxelorException e) { - throw new RuntimeException(e); - } - newStockMoveLineLocationLine.setStockMoveLineLocation(st); - st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); - } - }); - System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); + System.out.println("-----------------------------"); + for (StockMoveLineStockMoveLineLocation link : stockMoveLineLocationLineListTest) { + System.out.println("ID: " + link.getId()); + System.out.println("StockMoveLine ID: " + (link.getStockMoveLine() != null ? link.getStockMoveLine().getId() : "null")); + System.out.println("StockMoveLineLocation ID: " + (link.getStockMoveLineLocation() != null ? link.getStockMoveLineLocation().getId() : "null")); + StockMoveLineLocation st = link.getStockMoveLineLocation(); + System.out.println("Quantity: " + link.getQty()); + System.out.println("SELECT * FROM Stock_Move_Line_Location_Line WHERE product = "+line.getProduct()+" AND self.trackingNumber = "+line.getTrackingNumber()+" AND self.stockMoveLineLocation IN ("+link.getStockMoveLineLocation()+")"); + String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + if (line.getTrackingNumber() == null){ + query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; + } + List stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() + .filter(query) + .bind("product", line.getProduct()) + .bind("trackingNumber", line.getTrackingNumber()) + .bind("stockMoveLineLocation", link.getStockMoveLineLocation()) + .fetch(); + System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); + StockMoveLineLocationLine newStockMoveLineLocationLine = null; + if(stockMoveLineLocationLineList.size()==0){ + System.out.println("stockMoveLineLocationLineList.size()==0 ---> createStockMoveLineLocationLine"); + StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line,link.getQty()); + stockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); + }else{ + System.out.println("stockMoveLineLocationLineList.size()=="+stockMoveLineLocationLineList.size()+" ---> updateStockMoveLineLocationLine"); + System.out.println("updateStockMoveLineLocationLine"); + try { + newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),StockMoveRepository.TYPE_INCOMING,link.getQty()); + } catch (AxelorException e) { + throw new RuntimeException(e); + } + newStockMoveLineLocationLine.setStockMoveLineLocation(st); + st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); + } + System.out.println("-----------------------------\n"); + } + + } + System.out.println("\n\n\n"); + System.out.println("***********************************************************************"); + System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); }); } diff --git a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveLineController.java b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveLineController.java index 07cec33..6b3c952 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveLineController.java +++ b/modules/axelor-open-suite/axelor-stock/src/main/java/com/axelor/apps/stock/web/StockMoveLineController.java @@ -23,9 +23,11 @@ import com.axelor.apps.stock.db.StockLocationLine; import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMoveLine; import com.axelor.apps.stock.db.TrackingNumber; +import com.axelor.apps.stock.db.StockMoveLineStockMoveLineLocation; import com.axelor.apps.stock.db.repo.StockLocationRepository; import com.axelor.apps.stock.db.repo.StockMoveLineRepository; import com.axelor.apps.stock.db.repo.StockMoveRepository; +import com.axelor.apps.stock.db.repo.StockMoveLineStockMoveLineLocationRepository; import com.axelor.apps.stock.exception.IExceptionMessage; import com.axelor.apps.stock.service.StockLocationLineService; import com.axelor.apps.stock.service.StockMoveLineService; @@ -53,6 +55,8 @@ import java.util.TreeSet; @Singleton public class StockMoveLineController { + private StockMoveLineStockMoveLineLocationRepository linkRepo; + public void compute(ActionRequest request, ActionResponse response) throws AxelorException { StockMoveLine stockMoveLine = request.getContext().asType(StockMoveLine.class); StockMove stockMove = stockMoveLine.getStockMove(); @@ -281,4 +285,18 @@ public class StockMoveLineController { } response.setValue("$trackingNumbers", trackingNumbers); } + + // This method will be called when creating new record from the panel-related + public void createNewLocationLink(ActionRequest request, ActionResponse response) { + try { + StockMoveLine stockMoveLine = request.getContext().getParent().asType(StockMoveLine.class); + StockMoveLineStockMoveLineLocation newLink = new StockMoveLineStockMoveLineLocation(); + newLink.setStockMoveLine(stockMoveLine); + newLink.setQty(BigDecimal.ONE); + response.setValues(newLink); + + } catch (Exception e) { + TraceBackService.trace(response, e); + } + } } diff --git a/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLine.xml b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLine.xml index 9f4aba1..d766d35 100644 --- a/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLine.xml +++ b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLine.xml @@ -97,6 +97,8 @@ + + - + + + diff --git a/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLineStockMoveLineLocation.xml b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLineStockMoveLineLocation.xml new file mode 100644 index 0000000..c7179a2 --- /dev/null +++ b/modules/axelor-open-suite/axelor-stock/src/main/resources/domains/StockMoveLineStockMoveLineLocation.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + +