UPDATE STOCK POSITION LINE QTY
This commit is contained in:
@ -45,13 +45,7 @@ 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.StockMoveLineLocationLine;
|
import com.axelor.apps.stock.db.StockMoveLineLocationLine;
|
||||||
import com.axelor.apps.stock.db.repo.InternalTrackingNumberRepository;
|
import com.axelor.apps.stock.db.repo.*;
|
||||||
import com.axelor.apps.stock.db.repo.InventoryLineRepository;
|
|
||||||
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;
|
||||||
@ -403,6 +397,55 @@ public class StockMoveServiceImpl implements StockMoveService {
|
|||||||
return realize(stockMove, true);
|
return realize(stockMove, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackOn = {Exception.class})
|
||||||
|
public StockMoveLineLocationLine createStockMoveLineLocationLine(StockMoveLine line){
|
||||||
|
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()));
|
||||||
|
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) 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(line.getRealQty()));
|
||||||
|
}
|
||||||
|
if (typeSelect == StockMoveRepository.TYPE_OUTGOING) {
|
||||||
|
System.out.println("TYPE_OUTGOING");
|
||||||
|
if(stockMoveLineLocationLine.getRealQty().compareTo(line.getRealQty()) >= 0){
|
||||||
|
stockMoveLineLocationLine.setRealQty(stockMoveLineLocationLine.getRealQty().subtract(line.getRealQty()));
|
||||||
|
}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;
|
||||||
|
}
|
||||||
@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 +480,52 @@ 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 -> {
|
||||||
|
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* Start Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
|
||||||
|
System.out.println("line.getStockMoveLineLocationSet() : "+line.getStockMoveLineLocationSet());
|
||||||
line.getStockMoveLineLocationSet()
|
line.getStockMoveLineLocationSet()
|
||||||
.forEach(
|
.forEach(
|
||||||
st -> {
|
st -> {
|
||||||
st.setBusy(true);
|
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()+")");
|
||||||
StockMoveLineLocationLine stockMoveLineLocationLine =
|
String query = "self.product = :product AND self.trackingNumber = :trackingNumber AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
|
||||||
new StockMoveLineLocationLine();
|
if (line.getTrackingNumber() == null){
|
||||||
stockMoveLineLocationLine.setProduct(line.getProduct());
|
query = "self.product = :product AND (self.trackingNumber = :trackingNumber OR self.trackingNumber IS NULL) AND self.stockMoveLineLocation IN (:stockMoveLineLocation)";
|
||||||
stockMoveLineLocationLine.setStockMoveLineLocation(st);
|
}
|
||||||
stockMoveLineLocationLine.setTrackingNumber(line.getTrackingNumber());
|
List<StockMoveLineLocationLine> stockMoveLineLocationLineList = Beans.get(StockMoveLineLocationLineRepository.class).all()
|
||||||
st.addStockMoveLineLocationLineSetItem(stockMoveLineLocationLine);
|
.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
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 +564,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(),
|
||||||
@ -513,6 +587,46 @@ public class StockMoveServiceImpl implements StockMoveService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (stockMove.getTypeSelect() == StockMoveRepository.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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
setRealizedStatus(stockMove);
|
setRealizedStatus(stockMove);
|
||||||
stockMoveLineService.updateLocations(
|
stockMoveLineService.updateLocations(
|
||||||
@ -960,6 +1074,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 +1087,89 @@ 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());
|
||||||
|
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), StockMoveRepository.TYPE_OUTGOING);
|
||||||
|
} catch (AxelorException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
newStockMoveLineLocationLine.setStockMoveLineLocation(st);
|
||||||
|
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (stockMove.getTypeSelect() == StockMoveRepository.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), StockMoveRepository.TYPE_INCOMING);
|
||||||
|
} catch (AxelorException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
newStockMoveLineLocationLine.setStockMoveLineLocation(st);
|
||||||
|
st.addStockMoveLineLocationLineSetItem(newStockMoveLineLocationLine);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-* End Mapping StockMoveLineLocationSet *-*-*-*-*-*-*-*-*-*-*-*-*-*");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
stockMove.clearPlannedStockMoveLineList();
|
stockMove.clearPlannedStockMoveLineList();
|
||||||
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING
|
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING
|
||||||
&& initialStatus == StockMoveRepository.STATUS_REALIZED) {
|
&& initialStatus == StockMoveRepository.STATUS_REALIZED) {
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user