UPDATE POSITION LINE RO AND SR

This commit is contained in:
zakaria.hachem
2025-11-10 23:49:53 +01:00
parent 099b156413
commit 815d2b927f
6 changed files with 294 additions and 147 deletions

View File

@ -206,4 +206,7 @@ public interface IExceptionMessage {
public static final String STOCK_CORRECTION_2 = /*$$(*/ public static final String STOCK_CORRECTION_2 = /*$$(*/
"No stock move generated.Please verify stock correction details." /*)*/; "No stock move generated.Please verify stock correction details." /*)*/;
public static final String STOCK_MOVE_QTY = /*$$(*/
"Quantity transferred greater than the quantity of product." /*)*/;
} }

View File

@ -44,7 +44,9 @@ import com.axelor.apps.stock.db.StockConfig;
import com.axelor.apps.stock.db.StockLocation; import com.axelor.apps.stock.db.StockLocation;
import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMove;
import com.axelor.apps.stock.db.StockMoveLine; 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.StockMoveLineLocationLine;
import com.axelor.apps.stock.db.StockMoveLineStockMoveLineLocation;
import com.axelor.apps.stock.db.repo.*; import com.axelor.apps.stock.db.repo.*;
import com.axelor.apps.stock.exception.IExceptionMessage; import com.axelor.apps.stock.exception.IExceptionMessage;
import com.axelor.apps.stock.report.IReport; import com.axelor.apps.stock.report.IReport;
@ -64,14 +66,7 @@ import java.lang.invoke.MethodHandles;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
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.stream.Collectors; import java.util.stream.Collectors;
import javax.persistence.Query; import javax.persistence.Query;
@ -398,12 +393,12 @@ public class StockMoveServiceImpl implements StockMoveService {
} }
@Transactional(rollbackOn = {Exception.class}) @Transactional(rollbackOn = {Exception.class})
public StockMoveLineLocationLine createStockMoveLineLocationLine(StockMoveLine line){ public StockMoveLineLocationLine createStockMoveLineLocationLine(StockMoveLine line,BigDecimal qty){
System.out.println("************************* Start createStockMoveLineLocationLine *************************"); System.out.println("************************* Start createStockMoveLineLocationLine *************************");
StockMoveLineLocationLine stockMoveLineLocationLine = new StockMoveLineLocationLine(); StockMoveLineLocationLine stockMoveLineLocationLine = new StockMoveLineLocationLine();
stockMoveLineLocationLine.setProduct(line.getProduct()); stockMoveLineLocationLine.setProduct(line.getProduct());
System.out.println("- Product : "+stockMoveLineLocationLine.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("- RealQty : "+stockMoveLineLocationLine.getRealQty());
System.out.println("- StockMoveLineLocation : "+stockMoveLineLocationLine.getStockMoveLineLocation()); System.out.println("- StockMoveLineLocation : "+stockMoveLineLocationLine.getStockMoveLineLocation());
stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber()); stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber());
@ -415,7 +410,7 @@ public class StockMoveServiceImpl implements StockMoveService {
} }
@Transactional(rollbackOn = {Exception.class}) @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 **********************"); System.out.println("\n********************** updateStockMoveLineLocationLine **********************");
stockMoveLineLocationLine.setProduct(line.getProduct()); stockMoveLineLocationLine.setProduct(line.getProduct());
@ -424,12 +419,15 @@ public class StockMoveServiceImpl implements StockMoveService {
System.out.println("- Before RealQty : "+stockMoveLineLocationLine.getRealQty()); System.out.println("- Before RealQty : "+stockMoveLineLocationLine.getRealQty());
if(typeSelect == StockMoveRepository.TYPE_INCOMING) { if(typeSelect == StockMoveRepository.TYPE_INCOMING) {
System.out.println("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) { if (typeSelect == StockMoveRepository.TYPE_OUTGOING) {
System.out.println("TYPE_OUTGOING"); System.out.println("TYPE_OUTGOING");
if(stockMoveLineLocationLine.getRealQty().compareTo(line.getRealQty()) >= 0){ System.out.println("stockMoveLineLocationLine.getRealQty() : "+stockMoveLineLocationLine.getRealQty());
stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().subtract(line.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{ }else{
throw new AxelorException( throw new AxelorException(
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
@ -446,6 +444,19 @@ public class StockMoveServiceImpl implements StockMoveService {
System.out.println("********************** End updateStockMoveLineLocationLine *********************\n"); System.out.println("********************** End updateStockMoveLineLocationLine *********************\n");
return stockMoveLineLocationLine; return stockMoveLineLocationLine;
} }
public boolean checkQuantity(StockMoveLine line,List<StockMoveLineStockMoveLineLocation> 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 @Override
@Transactional(rollbackOn = {Exception.class}) @Transactional(rollbackOn = {Exception.class})
public String realize(StockMove stockMove, boolean checkOngoingInventoryFlag) public String realize(StockMove stockMove, boolean checkOngoingInventoryFlag)
@ -488,43 +499,70 @@ public class StockMoveServiceImpl implements StockMoveService {
line -> { line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
line.getStockMoveLineLocationSet() List<StockMoveLineStockMoveLineLocation> stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all()
.forEach( .filter("self.stockMoveLine = :stockMoveLine ")
st -> { .bind("stockMoveLine", line.getId())
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()+")"); .fetch();
System.out.println("***********************************************************************");
System.out.println("\n\n\n");
System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest);
if (checkQuantity(line,stockMoveLineLocationLineListTest)) {
if (stockMoveLineLocationLineListTest.size() > 0) {
List<StockMoveLineLocation> 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)"; String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
if (line.getTrackingNumber() == null){ if (line.getTrackingNumber() == null) {
query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
} }
List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all()
.filter(query) .filter(query)
.bind("product", line.getProduct()) .bind("product", line.getProduct())
.bind("trackingNumber", line.getTrackingNumber()) .bind("trackingNumber", line.getTrackingNumber())
.bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) .bind("stockMoveLineLocation", link.getStockMoveLineLocation())
.fetch(); .fetch();
int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList);
System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); StockMoveLineLocationLine newStockMoveLineLocationLine = null;
for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList){
System.out.println("\nstockMoveLineLocationLine : "+stockMoveLineLocationLine); if (stockMoveLineLocationLineList.size() == 0) {
} System.out.println("stockMoveLineLocationLineList.size()==0 ---> createStockMoveLineLocationLine");
if (stockMoveLineLocationLineListSize < 1){ StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line, link.getQty());
StockMoveLineLocationLine stockMoveLineLocationLine = createStockMoveLineLocationLine(line);
stockMoveLineLocationLine.setStockMoveLineLocation(st); stockMoveLineLocationLine.setStockMoveLineLocation(st);
st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine);
System.out.println("stockMoveLineLocationLine : "+stockMoveLineLocationLine); } else {
}else { System.out.println("stockMoveLineLocationLineList.size()==" + stockMoveLineLocationLineList.size() + " ---> updateStockMoveLineLocationLine");
if (stockMoveLineLocationLineListSize == 1){ System.out.println("updateStockMoveLineLocationLine");
StockMoveLineLocationLine newStockMoveLineLocationLine = null;
try { try {
newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect()); newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), stockMove.getTypeSelect(), link.getQty());
} catch (AxelorException e) { } catch (AxelorException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
newStockMoveLineLocationLine.setStockMoveLineLocation(st); newStockMoveLineLocationLine.setStockMoveLineLocation(st);
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); 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 *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
Long partnerId = stockMove.getPartner().getId(); Long partnerId = stockMove.getPartner().getId();
Long familleId = line.getProduct().getFamilleProduit().getId(); Long familleId = line.getProduct().getFamilleProduit().getId();
@ -581,49 +619,73 @@ public class StockMoveServiceImpl implements StockMoveService {
} }
} }
} catch (AxelorException e) { } catch (AxelorException e) {
e.printStackTrace(); // Consider logging this instead of printing. e.printStackTrace();
} }
} }
}); });
} }
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){ if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){
System.out.println("************************ TYPE_OUTGOING ***********************");
stockMove stockMove
.getStockMoveLineList() .getStockMoveLineList()
.forEach( .forEach(
line -> { line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet()); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
line.getStockMoveLineLocationSet() List<StockMoveLineStockMoveLineLocation> stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all()
.forEach( .filter("self.stockMoveLine = :stockMoveLine ")
st -> { .bind("stockMoveLine", line.getId())
.fetch();
System.out.println("***********************************************************************");
System.out.println("\n\n\n");
System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest);
if(stockMoveLineLocationLineListTest.size()>0){
List<StockMoveLineLocation> 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)"; String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
if (line.getTrackingNumber() == null){ if (line.getTrackingNumber() == null){
query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; 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<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all()
.filter(query) .filter(query)
.bind("product", line.getProduct()) .bind("product", line.getProduct())
.bind("trackingNumber", line.getTrackingNumber()) .bind("trackingNumber", line.getTrackingNumber())
.bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) .bind("stockMoveLineLocation", link.getStockMoveLineLocation())
.fetch(); .fetch();
int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size();
System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList); System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList);
for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList){
System.out.println("\nstockMoveLineLocationLine : "+stockMoveLineLocationLine);
}
if (stockMoveLineLocationLineListSize == 1){
StockMoveLineLocationLine newStockMoveLineLocationLine = null; 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 { try {
newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect()); newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),stockMove.getTypeSelect(),link.getQty());
} catch (AxelorException e) { } catch (AxelorException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
newStockMoveLineLocationLine.setStockMoveLineLocation(st); newStockMoveLineLocationLine.setStockMoveLineLocation(st);
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); 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( .forEach(
line -> { line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
System.out.println("line.getStockMoveLineLocationSet() : " + line.getStockMoveLineLocationSet()); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
line.getStockMoveLineLocationSet() List<StockMoveLineStockMoveLineLocation> stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all()
.forEach( .filter("self.stockMoveLine = :stockMoveLine ")
st -> { .bind("stockMoveLine", line.getId())
.fetch();
System.out.println("***********************************************************************");
System.out.println("\n\n\n");
System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest);
if(stockMoveLineLocationLineListTest.size()>0){
List<StockMoveLineLocation> 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)"; String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
if (line.getTrackingNumber() == null){ if (line.getTrackingNumber() == null){
query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; 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<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all()
.filter(query) .filter(query)
.bind("product", line.getProduct()) .bind("product", line.getProduct())
.bind("trackingNumber", line.getTrackingNumber()) .bind("trackingNumber", line.getTrackingNumber())
.bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) .bind("stockMoveLineLocation", link.getStockMoveLineLocation())
.fetch(); .fetch();
int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList);
System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList);
for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList) {
System.out.println("\nstockMoveLineLocationLine : " + stockMoveLineLocationLine);
}
if (stockMoveLineLocationLineListSize == 1) {
StockMoveLineLocationLine newStockMoveLineLocationLine = null; 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 { try {
newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), StockMoveRepository.TYPE_OUTGOING); newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),StockMoveRepository.TYPE_OUTGOING,link.getQty());
} catch (AxelorException e) { } catch (AxelorException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
newStockMoveLineLocationLine.setStockMoveLineLocation(st); newStockMoveLineLocationLine.setStockMoveLineLocation(st);
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine);
} }
}); System.out.println("-----------------------------\n");
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); }
}
System.out.println("\n\n\n");
System.out.println("***********************************************************************");
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
}); });
} }
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){ if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING){
@ -1134,39 +1217,60 @@ public class StockMoveServiceImpl implements StockMoveService {
.forEach( .forEach(
line -> { line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
System.out.println("line.getStockMoveLineLocationSet() : " + line.getStockMoveLineLocationSet()); System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
line.getStockMoveLineLocationSet() List<StockMoveLineStockMoveLineLocation> stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all()
.forEach( .filter("self.stockMoveLine = :stockMoveLine ")
st -> { .bind("stockMoveLine", line.getId())
.fetch();
System.out.println("***********************************************************************");
System.out.println("\n\n\n");
System.out.println("stockMoveLineLocationLineListTest : "+stockMoveLineLocationLineListTest);
if(stockMoveLineLocationLineListTest.size()>0){
List<StockMoveLineLocation> 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)"; String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
if (line.getTrackingNumber() == null){ if (line.getTrackingNumber() == null){
query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)"; 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<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all() List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all()
.filter(query) .filter(query)
.bind("product", line.getProduct()) .bind("product", line.getProduct())
.bind("trackingNumber", line.getTrackingNumber()) .bind("trackingNumber", line.getTrackingNumber())
.bind("stockMoveLineLocation", line.getStockMoveLineLocationSet()) .bind("stockMoveLineLocation", link.getStockMoveLineLocation())
.fetch(); .fetch();
int stockMoveLineLocationLineListSize = stockMoveLineLocationLineList.size(); System.out.println("stockMoveLineLocationLineList : "+stockMoveLineLocationLineList);
System.out.println("stockMoveLineLocationLineList : " + stockMoveLineLocationLineList);
for (StockMoveLineLocationLine stockMoveLineLocationLine : stockMoveLineLocationLineList) {
System.out.println("\nstockMoveLineLocationLine : " + stockMoveLineLocationLine);
}
if (stockMoveLineLocationLineListSize == 1) {
StockMoveLineLocationLine newStockMoveLineLocationLine = null; 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 { try {
newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0), StockMoveRepository.TYPE_INCOMING); newStockMoveLineLocationLine = updateStockMoveLineLocationLine(line, stockMoveLineLocationLineList.get(0),StockMoveRepository.TYPE_INCOMING,link.getQty());
} catch (AxelorException e) { } catch (AxelorException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
newStockMoveLineLocationLine.setStockMoveLineLocation(st); newStockMoveLineLocationLine.setStockMoveLineLocation(st);
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine); st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine);
} }
}); System.out.println("-----------------------------\n");
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*"); }
}
System.out.println("\n\n\n");
System.out.println("***********************************************************************");
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
}); });
} }

View File

@ -23,9 +23,11 @@ import com.axelor.apps.stock.db.StockLocationLine;
import com.axelor.apps.stock.db.StockMove; import com.axelor.apps.stock.db.StockMove;
import com.axelor.apps.stock.db.StockMoveLine; import com.axelor.apps.stock.db.StockMoveLine;
import com.axelor.apps.stock.db.TrackingNumber; 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.StockLocationRepository;
import com.axelor.apps.stock.db.repo.StockMoveLineRepository; import com.axelor.apps.stock.db.repo.StockMoveLineRepository;
import com.axelor.apps.stock.db.repo.StockMoveRepository; 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.exception.IExceptionMessage;
import com.axelor.apps.stock.service.StockLocationLineService; import com.axelor.apps.stock.service.StockLocationLineService;
import com.axelor.apps.stock.service.StockMoveLineService; import com.axelor.apps.stock.service.StockMoveLineService;
@ -53,6 +55,8 @@ import java.util.TreeSet;
@Singleton @Singleton
public class StockMoveLineController { public class StockMoveLineController {
private StockMoveLineStockMoveLineLocationRepository linkRepo;
public void compute(ActionRequest request, ActionResponse response) throws AxelorException { public void compute(ActionRequest request, ActionResponse response) throws AxelorException {
StockMoveLine stockMoveLine = request.getContext().asType(StockMoveLine.class); StockMoveLine stockMoveLine = request.getContext().asType(StockMoveLine.class);
StockMove stockMove = stockMoveLine.getStockMove(); StockMove stockMove = stockMoveLine.getStockMove();
@ -281,4 +285,18 @@ public class StockMoveLineController {
} }
response.setValue("$trackingNumbers", trackingNumbers); 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);
}
}
} }

View File

@ -97,6 +97,8 @@
<many-to-many ref="StockMoveLineLocation" name="stockMoveLineLocationSet" /> <many-to-many ref="StockMoveLineLocation" name="stockMoveLineLocationSet" />
<one-to-many name="stockMoveLineStockMoveLineLocations" ref="StockMoveLineStockMoveLineLocation" mappedBy="stockMoveLine" />
<extra-code><![CDATA[ <extra-code><![CDATA[
// CONFORMITY SELECT // CONFORMITY SELECT
public static final int CONFORMITY_NONE = 1; public static final int CONFORMITY_NONE = 1;

View File

@ -8,7 +8,7 @@
<entity name="StockMoveLineLocation" lang="java"> <entity name="StockMoveLineLocation" lang="java">
<string name="code" title="Code" > <string name="code" title="Code" namecolumn="true">
<![CDATA[ <![CDATA[
String code = ""; String code = "";
if(lane != null && rack != null && racklevel != null && position != null ) if(lane != null && rack != null && racklevel != null && position != null )
@ -29,6 +29,8 @@
<boolean name="busy" title="Busy"/> <boolean name="busy" title="Busy"/>
<one-to-many name="stockMoveLineStockMoveLineLocations" ref="StockMoveLineStockMoveLineLocation" mappedBy="stockMoveLineLocation" />
<track> <track>
<field name="code"/> <field name="code"/>
</track> </track>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<domain-models xmlns="http://axelor.com/xml/ns/domain-models"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://axelor.com/xml/ns/domain-models http://axelor.com/xml/ns/domain-models/domain-models_5.2.xsd">
<module name="stock" package="com.axelor.apps.stock.db"/>
<entity name="StockMoveLineStockMoveLineLocation" lang="java">
<many-to-one name="stockMoveLine" ref="com.axelor.apps.stock.db.StockMoveLine" title="Stock Move Line" required="true"/>
<many-to-one name="stockMoveLineLocation" ref="com.axelor.apps.stock.db.StockMoveLineLocation" title="Stock Move Line Location" required="true"/>
<decimal name="qty" title="Quantity" default="0" precision="10" scale="2"/>
<unique-constraint columns="stockMoveLine,stockMoveLineLocation"/>
</entity>
</domain-models>