Bypass unit checking for labo

This commit is contained in:
Kheireddine Mehdi
2025-11-16 07:20:43 +01:00
parent 2d681f27f5
commit 9cb7a5e7a3
2 changed files with 287 additions and 77 deletions

View File

@ -121,6 +121,18 @@ public interface StockLocationLineService {
public StockLocationLine getOrCreateStockLocationLine( public StockLocationLine getOrCreateStockLocationLine(
StockLocation stockLocation, Product product); StockLocation stockLocation, Product product);
/**
* Getting the stock location line : We check if the location has a detailed line for a given
* product. If no detailed location line is found, we create it.
*
* @param stockLocation A location
* @param product A product
* @param unit A unit
* @return The found or created location line
*/
public StockLocationLine getOrCreateStockLocationLine(
StockLocation stockLocation, Product product, Unit unit);
/** /**
* Getting the detailed stock location line : We check if the location has a detailed line for a * Getting the detailed stock location line : We check if the location has a detailed line for a
* given product, product variant and tracking number. If no detailed location line is found, we * given product, product variant and tracking number. If no detailed location line is found, we
@ -134,6 +146,20 @@ public interface StockLocationLineService {
public StockLocationLine getOrCreateDetailLocationLine( public StockLocationLine getOrCreateDetailLocationLine(
StockLocation detailLocation, Product product, TrackingNumber trackingNumber); StockLocation detailLocation, Product product, TrackingNumber trackingNumber);
/**
* Getting the detailed stock location line : We check if the location has a detailed line for a
* given product, product variant and tracking number. If no detailed location line is found, we
* create it.
*
* @param detailLocation A location
* @param product A product
* @param trackingNumber A tracking number
* @param unit A unit
* @return The found or created detailed location line
*/
public StockLocationLine getOrCreateDetailLocationLine(
StockLocation detailLocation, Product product, TrackingNumber trackingNumber, Unit unit);
/** /**
* Allow to get the location line of a given product in a given location. * Allow to get the location line of a given product in a given location.
* *

View File

@ -48,6 +48,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.Arrays;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -132,51 +133,100 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
LocalDate lastFutureStockMoveDate) LocalDate lastFutureStockMoveDate)
throws AxelorException { throws AxelorException {
StockLocationLine stockLocationLine = this.getOrCreateStockLocationLine(stockLocation, product); List<Long> listOfIds = Arrays.asList(12L, 97L, 99L, 103L, 105L);
if (stockLocationLine == null) { System.out.println("*****************uniiiiiiit***************");
return; System.out.println(stockLocation.getId());
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = stockLocationLine.getUnit();
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) { if(listOfIds.contains(stockLocation.getId())){
qty = StockLocationLine stockLocationLine = this.getOrCreateStockLocationLine(stockLocation, product, stockMoveLineUnit);
unitConversionService.convert( System.out.println("*****************LABOOOOOOOOOOOO***************");
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product); System.out.println(stockLocation.getId());
} if (stockLocationLine == null) {
return;
}
LOG.debug( UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
"Mise à jour du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {} ", Unit stockLocationLineUnit = stockLocationLine.getUnit();
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
if (!isIncrement) { LOG.debug(
minStockRules(product, qty, stockLocationLine, current, future); "Mise à jour du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
if (!isIncrement) {
minStockRules(product, qty, stockLocationLine, current, future);
} else {
maxStockRules(product, qty, stockLocationLine, current, future);
}
stockLocationLine =
this.updateLocation(
stockLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(stockLocationLine, false);
stockLocationLineRepo.save(stockLocationLine);
} else { } else {
maxStockRules(product, qty, stockLocationLine, current, future); StockLocationLine stockLocationLine = this.getOrCreateStockLocationLine(stockLocation, product);
if (stockLocationLine == null) {
return;
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = stockLocationLine.getUnit();
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) {
qty =
unitConversionService.convert(
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product);
}
LOG.debug(
"Mise à jour du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
if (!isIncrement) {
minStockRules(product, qty, stockLocationLine, current, future);
} else {
maxStockRules(product, qty, stockLocationLine, current, future);
}
stockLocationLine =
this.updateLocation(
stockLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(stockLocationLine, false);
stockLocationLineRepo.save(stockLocationLine);
} }
stockLocationLine =
this.updateLocation(
stockLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(stockLocationLine, false);
stockLocationLineRepo.save(stockLocationLine);
} }
@Override @Override
@ -265,48 +315,99 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
TrackingNumber trackingNumber) TrackingNumber trackingNumber)
throws AxelorException { throws AxelorException {
StockLocationLine detailLocationLine = List<Long> listOfIds = Arrays.asList(12L, 97L, 99L, 103L, 105L);
System.out.println("*****************uniiiiiiit***************");
System.out.println(stockLocation.getId());
if(listOfIds.contains(stockLocation.getId())){
StockLocationLine detailLocationLine =
this.getOrCreateDetailLocationLine(stockLocation, product, trackingNumber, stockMoveLineUnit);
if (detailLocationLine == null) {
return;
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = detailLocationLine.getUnit();
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) {
qty =
unitConversionService.convert(
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product);
}
LOG.debug(
"Mise à jour du detail du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {}, Num de suivi? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate,
trackingNumber);
detailLocationLine =
this.updateLocation(
detailLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(detailLocationLine, true);
// detailLocationLine.setConformitySelect(StockLocationRepository.TYPE_QUARANTINE);
stockLocationLineRepo.save(detailLocationLine);
} else {
StockLocationLine detailLocationLine =
this.getOrCreateDetailLocationLine(stockLocation, product, trackingNumber); this.getOrCreateDetailLocationLine(stockLocation, product, trackingNumber);
if (detailLocationLine == null) { if (detailLocationLine == null) {
return; return;
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = detailLocationLine.getUnit();
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) {
qty =
unitConversionService.convert(
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product);
}
LOG.debug(
"Mise à jour du detail du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {}, Num de suivi? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate,
trackingNumber);
detailLocationLine =
this.updateLocation(
detailLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(detailLocationLine, true);
// detailLocationLine.setConformitySelect(StockLocationRepository.TYPE_QUARANTINE);
stockLocationLineRepo.save(detailLocationLine);
} }
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = detailLocationLine.getUnit();
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) {
qty =
unitConversionService.convert(
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product);
}
LOG.debug(
"Mise à jour du detail du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {}, Num de suivi? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate,
trackingNumber);
detailLocationLine =
this.updateLocation(
detailLocationLine,
stockMoveLineUnit,
product,
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
this.checkStockMin(detailLocationLine, true);
// detailLocationLine.setConformitySelect(StockLocationRepository.TYPE_QUARANTINE);
stockLocationLineRepo.save(detailLocationLine);
} }
@Override @Override
@ -419,6 +520,31 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
return stockLocationLine; return stockLocationLine;
} }
@Override
public StockLocationLine getOrCreateStockLocationLine(
StockLocation stockLocation, Product product, Unit unit) {
if (!product.getStockManaged()) {
return null;
}
StockLocationLine stockLocationLine = this.getStockLocationLine(stockLocation, product, unit);
if (stockLocationLine == null) {
stockLocationLine = this.createLocationLine(stockLocation, product);
}
LOG.debug(
"Récupération ligne de stock: Entrepot? {}, Produit? {}, Qté actuelle? {}, Qté future? {}, Date? {} ",
stockLocationLine.getStockLocation().getName(),
product.getCode(),
stockLocationLine.getCurrentQty(),
stockLocationLine.getFutureQty(),
stockLocationLine.getLastFutureStockMoveDate());
return stockLocationLine;
}
@Override @Override
public StockLocationLine getOrCreateDetailLocationLine( public StockLocationLine getOrCreateDetailLocationLine(
StockLocation detailLocation, Product product, TrackingNumber trackingNumber) { StockLocation detailLocation, Product product, TrackingNumber trackingNumber) {
@ -443,6 +569,31 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
return detailLocationLine; return detailLocationLine;
} }
@Override
public StockLocationLine getOrCreateDetailLocationLine(
StockLocation detailLocation, Product product, TrackingNumber trackingNumber, Unit unit) {
StockLocationLine detailLocationLine =
this.getDetailLocationLine(detailLocation, product, trackingNumber, unit);
if (detailLocationLine == null) {
detailLocationLine = this.createDetailLocationLine(detailLocation, product, trackingNumber);
}
LOG.debug(
"Récupération ligne de détail de stock: Entrepot? {}, Produit? {}, Qté actuelle? {}, Qté future? {}, Date? {}, Variante? {}, Num de suivi? {} ",
detailLocationLine.getDetailsStockLocation().getName(),
product.getCode(),
detailLocationLine.getCurrentQty(),
detailLocationLine.getFutureQty(),
detailLocationLine.getLastFutureStockMoveDate(),
detailLocationLine.getTrackingNumber());
return detailLocationLine;
}
@Override @Override
public StockLocationLine getStockLocationLine(StockLocation stockLocation, Product product) { public StockLocationLine getStockLocationLine(StockLocation stockLocation, Product product) {
@ -458,6 +609,21 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
.fetchOne(); .fetchOne();
} }
public StockLocationLine getStockLocationLine(StockLocation stockLocation, Product product, Unit unit) {
if (product == null || !product.getStockManaged()) {
return null;
}
return stockLocationLineRepo
.all()
.filter("self.stockLocation.id = :_stockLocationId " + "AND self.product.id = :_productId " + "AND self.unit.id = :_unitId ")
.bind("_stockLocationId", stockLocation.getId())
.bind("_productId", product.getId())
.bind("_unitId", unit.getId())
.fetchOne();
}
@Override @Override
public List<StockLocationLine> getStockLocationLines(Product product) { public List<StockLocationLine> getStockLocationLines(Product product) {
@ -489,6 +655,24 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
.fetchOne(); .fetchOne();
} }
public StockLocationLine getDetailLocationLine(
StockLocation stockLocation, Product product, TrackingNumber trackingNumber, Unit unit) {
return stockLocationLineRepo
.all()
.filter(
"self.detailsStockLocation.id = :_stockLocationId "
+ "AND self.product.id = :_productId "
+ "AND self.trackingNumber.id = :_trackingNumberId "
+ "AND self.unit.id = :_unitId "
)
.bind("_stockLocationId", stockLocation.getId())
.bind("_productId", product.getId())
.bind("_trackingNumberId", trackingNumber.getId())
.bind("_unitId", unit.getId())
.fetchOne();
}
@Override @Override
public StockLocationLine createLocationLine(StockLocation stockLocation, Product product) { public StockLocationLine createLocationLine(StockLocation stockLocation, Product product) {