Compare commits
2 Commits
feature/pu
...
feature/st
| Author | SHA1 | Date | |
|---|---|---|---|
| 815d2b927f | |||
| 099b156413 |
@ -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." /*)*/;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
Reference in New Issue
Block a user