2 Commits

Author SHA1 Message Date
815d2b927f UPDATE POSITION LINE RO AND SR 2025-11-10 23:49:53 +01:00
099b156413 UPDATE STOCK POSITION LINE QTY 2025-11-04 15:06:06 +01:00
7 changed files with 375 additions and 28 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,14 +44,10 @@ 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.repo.InternalTrackingNumberRepository; import com.axelor.apps.stock.db.StockMoveLineStockMoveLineLocation;
import com.axelor.apps.stock.db.repo.InventoryLineRepository; import com.axelor.apps.stock.db.repo.*;
import com.axelor.apps.stock.db.repo.InventoryRepository;
import com.axelor.apps.stock.db.repo.StockConfigRepository;
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.exception.IExceptionMessage; import com.axelor.apps.stock.exception.IExceptionMessage;
import com.axelor.apps.stock.report.IReport; import com.axelor.apps.stock.report.IReport;
import com.axelor.common.ObjectUtils; import com.axelor.common.ObjectUtils;
@ -70,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;
@ -403,6 +392,71 @@ public class StockMoveServiceImpl implements StockMoveService {
return realize(stockMove, true); return realize(stockMove, true);
} }
@Transactional(rollbackOn = {Exception.class})
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(qty));
System.out.println("- RealQty : "+stockMoveLineLocationLine.getRealQty());
System.out.println("- StockMoveLineLocation : "+stockMoveLineLocationLine.getStockMoveLineLocation());
stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber());
System.out.println("- TrackingNumber"+stockMoveLineLocationLine.getTrackingNumber());
stockMoveLineLocationLine.setInternalTrackingNumber(line.getInternalTrackingNumber());
System.out.println("- InternalTrackingNumber"+stockMoveLineLocationLine.getInternalTrackingNumber());
System.out.println("************************* End createStockMoveLineLocationLine *************************\n");
return stockMoveLineLocationLine;
}
@Transactional(rollbackOn = {Exception.class})
public StockMoveLineLocationLine updateStockMoveLineLocationLine(StockMoveLine line,StockMoveLineLocationLine stockMoveLineLocationLine,Integer typeSelect,BigDecimal qty) throws AxelorException {
System.out.println("\n********************** updateStockMoveLineLocationLine **********************");
stockMoveLineLocationLine.setProduct(line.getProduct());
System.out.println("- Product : "+stockMoveLineLocationLine.getProduct());
System.out.println("- Before RealQty : "+stockMoveLineLocationLine.getRealQty());
if(typeSelect == StockMoveRepository.TYPE_INCOMING) {
System.out.println("TYPE_INCOMING");
stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().add(qty));
}
if (typeSelect == StockMoveRepository.TYPE_OUTGOING) {
System.out.println("TYPE_OUTGOING");
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,
I18n.get("Insufficient quantity")
);
}
}
System.out.println("- After RealQty : "+stockMoveLineLocationLine.getRealQty());
System.out.println("- StockMoveLineLocation : "+stockMoveLineLocationLine.getStockMoveLineLocation());
stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber());
System.out.println("- TrackingNumber"+stockMoveLineLocationLine.getTrackingNumber());
stockMoveLineLocationLine.setInternalTrackingNumber(line.getInternalTrackingNumber());
System.out.println("- InternalTrackingNumber"+stockMoveLineLocationLine.getInternalTrackingNumber());
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 @Override
@Transactional(rollbackOn = {Exception.class}) @Transactional(rollbackOn = {Exception.class})
public String realize(StockMove stockMove, boolean checkOngoingInventoryFlag) public String realize(StockMove stockMove, boolean checkOngoingInventoryFlag)
@ -437,23 +491,79 @@ public class StockMoveServiceImpl implements StockMoveService {
checkExpirationDates(stockMove); checkExpirationDates(stockMove);
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING) { if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING) {
System.out.println("************************ TYPE_INCOMING ***********************");
partnerProductQualityRatingService.calculate(stockMove); partnerProductQualityRatingService.calculate(stockMove);
stockMove stockMove
.getStockMoveLineList() .getStockMoveLineList()
.forEach( .forEach(
line -> { line -> {
line.getStockMoveLineLocationSet() System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
.forEach( System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
st -> { List<StockMoveLineStockMoveLineLocation> stockMoveLineLocationLineListTest = Beans.get(StockMoveLineStockMoveLineLocationRepository.class).all()
st.setBusy(true); .filter("self.stockMoveLine = :stockMoveLine ")
StockMoveLineLocationLine stockMoveLineLocationLine = .bind("stockMoveLine", line.getId())
new StockMoveLineLocationLine(); .fetch();
stockMoveLineLocationLine.setProduct(line.getProduct()); 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); stockMoveLineLocationLine.setStockMoveLineLocation(st);
stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber());
st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine); 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 partnerId = stockMove.getPartner().getId();
Long familleId = line.getProduct().getFamilleProduit().getId(); Long familleId = line.getProduct().getFamilleProduit().getId();
BigDecimal realQty = line.getRealQty(); BigDecimal realQty = line.getRealQty();
@ -492,9 +602,11 @@ public class StockMoveServiceImpl implements StockMoveService {
System.out.println("***********************************internal noy null**********************"); System.out.println("***********************************internal noy null**********************");
if (createdDate.equals(estimatedDate)) { if (createdDate.equals(estimatedDate)) {
System.out.println("if (createdDate.equals(estimatedDate))");
line.setInternalTrackingNumber(internalTrackingNumber); line.setInternalTrackingNumber(internalTrackingNumber);
stockMoveLineRepo.save(line); stockMoveLineRepo.save(line);
}else{ }else{
System.out.println("else");
InternalTrackingNumber internal = internalTrackingNumberService.createInternalTrackingNumber( InternalTrackingNumber internal = internalTrackingNumberService.createInternalTrackingNumber(
line.getProduct(), line.getProduct(),
line.getStockMove().getCompany(), line.getStockMove().getCompany(),
@ -507,12 +619,76 @@ 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){
System.out.println("************************ TYPE_OUTGOING ***********************");
stockMove
.getStockMoveLineList()
.forEach(
line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
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<>();
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("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
});
}
setRealizedStatus(stockMove); setRealizedStatus(stockMove);
stockMoveLineService.updateLocations( stockMoveLineService.updateLocations(
@ -960,6 +1136,7 @@ public class StockMoveServiceImpl implements StockMoveService {
stockMove.getEstimatedDate(), stockMove.getEstimatedDate(),
false); false);
} else { } else {
stockMoveLineService.updateLocations( stockMoveLineService.updateLocations(
stockMove.getFromStockLocation(), stockMove.getFromStockLocation(),
stockMove.getToStockLocation(), stockMove.getToStockLocation(),
@ -972,6 +1149,131 @@ public class StockMoveServiceImpl implements StockMoveService {
stockMove.setRealDate(LocalDateTime.now()); stockMove.setRealDate(LocalDateTime.now());
} }
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING){
stockMove
.getStockMoveLineList()
.forEach(
line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
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<>();
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){
stockMove
.getStockMoveLineList()
.forEach(
line -> {
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
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<>();
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("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
});
}
stockMove.clearPlannedStockMoveLineList(); stockMove.clearPlannedStockMoveLineList();
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING
&& initialStatus == StockMoveRepository.STATUS_REALIZED) { && initialStatus == StockMoveRepository.STATUS_REALIZED) {

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

@ -9,7 +9,9 @@
<many-to-one name="stockMoveLineLocation" ref="StockMoveLineLocation" title="StockMoveLocation"/> <many-to-one name="stockMoveLineLocation" ref="StockMoveLineLocation" title="StockMoveLocation"/>
<many-to-one name="product" ref="com.axelor.apps.base.db.Product" title="Product"/> <many-to-one name="product" ref="com.axelor.apps.base.db.Product" title="Product"/>
<many-to-one name="trackingNumber" ref="com.axelor.apps.stock.db.TrackingNumber" title="trackingNumber"/> <many-to-one name="trackingNumber" ref="com.axelor.apps.stock.db.TrackingNumber" title="trackingNumber"/>
<decimal name="realQty" min="0" title="Real Qty"/>
<many-to-one name="internalTrackingNumber" ref="com.axelor.apps.stock.db.InternalTrackingNumber" title="internalTrackingNumber"/>
</entity> </entity>

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>