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 = /*$$(*/
"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.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<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
@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<StockMoveLineLocationLine> 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<StockMoveLineStockMoveLineLocation> 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<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)";
if (line.getTrackingNumber() == null) {
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()
.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<StockMoveLineLocationLine> 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<StockMoveLineStockMoveLineLocation> 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<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)";
if (line.getTrackingNumber() == null){
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()
.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<StockMoveLineLocationLine> 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<StockMoveLineStockMoveLineLocation> 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<StockMoveLineLocation> 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<StockMoveLineLocationLine> 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<StockMoveLineLocationLine> 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<StockMoveLineStockMoveLineLocation> 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<StockMoveLineLocation> 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<StockMoveLineLocationLine> 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("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
});
}

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.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);
}
}
}

View File

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

View File

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