1 Commits

Author SHA1 Message Date
9cb7a5e7a3 Bypass unit checking for labo 2025-11-16 07:20:43 +01:00
7 changed files with 323 additions and 280 deletions

View File

@ -149,10 +149,6 @@
<boolean name="isDangerousProduct" title="Is dangerous" />
<boolean name="needDt1Validation" title="DT1 validation required" massUpdate="true"/>
<boolean name="needDt2Validation" title="DT2 validation required" massUpdate="true"/>
<boolean name="needQaQc1Validation" title="QAQC1 validation required" massUpdate="true"/>
<boolean name="needQaQc2Validation" title="QAQC2 validation required" massUpdate="true"/>
<many-to-one name="coaSpec" ref="com.axelor.meta.db.MetaFile" />
@ -213,10 +209,6 @@
<field name="shp" />
<field name="stklim" />
<field name="ug" />
<field name="needDt1Validation" />
<field name="needDt2Validation" />
<field name="needQaQc1Validation" />
<field name="needQaQc2Validation" />
<message if="true" on="UPDATE">Product updated</message>
</track>
</entity>

View File

@ -1,81 +0,0 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.message.job;
import com.axelor.apps.message.db.Message;
import com.axelor.apps.message.db.repo.MessageRepository;
import com.axelor.apps.message.service.MessageService;
import com.axelor.exception.service.TraceBackService;
import com.google.inject.Inject;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.util.List;
import javax.mail.MessagingException;
import com.axelor.exception.AxelorException;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** An example {@link Job} class that prints a some messages to the stderr. */
public class SendEmailJob implements Job {
private final Logger log = LoggerFactory.getLogger(SendEmailJob.class);
@Inject private MessageService messageService;
@Inject private MessageRepository messageRepository;
@Override
public void execute(JobExecutionContext context) {
LocalDate today = LocalDate.now();
LocalDateTime startOfDay = today.atStartOfDay();
List<Message> draftMessages = messageRepository
.all()
.filter("self.statusSelect = 1 AND self.createdOn >= :startOfDay")
.bind("startOfDay", startOfDay)
.fetch();
log.debug("Total of draft messages : {}", draftMessages.size());
for (Message message : draftMessages) {
try {
Message m = messageService.sendMessage(message);
} catch (AxelorException e) {
TraceBackService.trace(e);
}
}
List<Message> inProgressMessages = messageRepository
.all()
.filter("self.statusSelect = 2 AND self.createdOn >= :startOfDay")
.bind("startOfDay", startOfDay)
.fetch();
log.debug("Total of in progress messages : {}", inProgressMessages.size());
for (Message message : inProgressMessages) {
try {
Message m = messageService.sendMessage(message);
} catch (AxelorException e) {
TraceBackService.trace(e);
}
}
}
}

View File

@ -121,6 +121,18 @@ public interface StockLocationLineService {
public StockLocationLine getOrCreateStockLocationLine(
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
* 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(
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.
*

View File

@ -48,6 +48,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.List;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -131,52 +132,101 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
boolean isIncrement,
LocalDate lastFutureStockMoveDate)
throws AxelorException {
List<Long> listOfIds = Arrays.asList(12L, 97L, 99L, 103L, 105L);
StockLocationLine stockLocationLine = this.getOrCreateStockLocationLine(stockLocation, product);
System.out.println("*****************uniiiiiiit***************");
System.out.println(stockLocation.getId());
if (stockLocationLine == null) {
return;
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = stockLocationLine.getUnit();
if(listOfIds.contains(stockLocation.getId())){
StockLocationLine stockLocationLine = this.getOrCreateStockLocationLine(stockLocation, product, stockMoveLineUnit);
System.out.println("*****************LABOOOOOOOOOOOO***************");
System.out.println(stockLocation.getId());
if (stockLocationLine == null) {
return;
}
if (stockLocationLineUnit != null && !stockLocationLineUnit.equals(stockMoveLineUnit)) {
qty =
unitConversionService.convert(
stockMoveLineUnit, stockLocationLineUnit, qty, qty.scale(), product);
}
UnitConversionService unitConversionService = Beans.get(UnitConversionService.class);
Unit stockLocationLineUnit = stockLocationLine.getUnit();
LOG.debug(
"Mise à jour du stock : Entrepot? {}, Produit? {}, Quantité? {}, Actuel? {}, Futur? {}, Incrément? {}, Date? {} ",
stockLocation.getName(),
product.getCode(),
qty,
current,
future,
isIncrement,
lastFutureStockMoveDate);
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);
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 {
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
@ -264,49 +314,100 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
LocalDate lastFutureStockMoveDate,
TrackingNumber trackingNumber)
throws AxelorException {
List<Long> listOfIds = Arrays.asList(12L, 97L, 99L, 103L, 105L);
StockLocationLine detailLocationLine =
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);
if (detailLocationLine == null) {
return;
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);
}
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
@ -419,6 +520,31 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
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
public StockLocationLine getOrCreateDetailLocationLine(
StockLocation detailLocation, Product product, TrackingNumber trackingNumber) {
@ -443,6 +569,31 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
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
public StockLocationLine getStockLocationLine(StockLocation stockLocation, Product product) {
@ -458,6 +609,21 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
.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
public List<StockLocationLine> getStockLocationLines(Product product) {
@ -489,6 +655,24 @@ public class StockLocationLineServiceImpl implements StockLocationLineService {
.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
public StockLocationLine createLocationLine(StockLocation stockLocation, Product product) {

View File

@ -418,59 +418,22 @@ public class StockMoveServiceImpl implements StockMoveService {
String newStockSeq = null;
stockMoveLineService.checkTrackingNumber(stockMove);
stockMoveLineService.checkConformitySelection(stockMove);
System.out.println("Checking oooo...................");
System.out.println("----------------------------------------------------");
System.out.println("stockMove.getTypeSelect() : " + stockMove.getTypeSelect());
System.out.println("----------------------------------------------------");
// checking .....
if (stockMove.getFromStockLocation().getTypeSelect() != StockLocationRepository.TYPE_VIRTUAL)
{
List<Long> listOfIds = Arrays.asList(10L, 11L, 13L, 14L, 15L, 16L, 13L, 12L, 54L, 55L, 58L,50L);
System.out.println("Checking...................");
System.out.println(listOfIds.contains(stockMove.getToStockLocation().getId()));
System.out.println("Checking...................");
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INTERNAL){
System.out.println("INTERNAL MOVE");
StockConfig stockConfig = stockMove.getCompany().getStockConfig();
StockLocation parentwasteStockLocation = stockConfig.getWasteStockLocationParent();
if(Boolean.TRUE.equals(stockMove.getToStockLocation().getNeedCheckInVerification())){
System.out.println("Check-in required for this stock location...");
checkIfConforme(stockMove);
checkIfNonConformityTag(stockMove);
} else if (parentwasteStockLocation.equals(stockMove.getToStockLocation().getParentStockLocation())){
System.out.println("**************************** Child of Waste Parent ******************************");
CheckIfNotNotconforme(stockMove);
checkIfNonConformityTag(stockMove);
}
if(listOfIds.contains(stockMove.getToStockLocation().getId())){
checkIfQuarantine(stockMove);
checkIfNonConformityTag(stockMove);
}
}
else if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING
&& stockMove.getPartner().getId() != 853
&& stockMove.getIsReversion() == false){
System.out.println("Livraison Client.");
checkIfConforme(stockMove);
checkIfNonConformityTag(stockMove);
}
else if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_OUTGOING
&& stockMove.getPartner().getId() == 853
&& stockMove.getIsReversion() == false){
System.out.println("Sortie.");
StockConfig stockConfig = stockMove.getCompany().getStockConfig();
StockLocation nonCoreStockLocationParent = stockConfig.getNonCoreStockLocation();
StockLocation parentwasteStockLocation = stockConfig.getWasteStockLocationParent();
if (parentwasteStockLocation.equals(stockMove.getToStockLocation().getParentStockLocation())){
System.out.println("**************************** Child of Waste Parent ******************************");
CheckIfNotNotconforme(stockMove);
checkIfNonConformityTag(stockMove);
} else if (!nonCoreStockLocationParent.equals(stockMove.getToStockLocation().getParentStockLocation())) {
checkIfConforme(stockMove);
checkIfNonConformityTag(stockMove);
}
}
checkExpirationDates(stockMove);
if (stockMove.getTypeSelect() == StockMoveRepository.TYPE_INCOMING) {
@ -1629,81 +1592,53 @@ public class StockMoveServiceImpl implements StockMoveService {
}
public void checkIfConforme(StockMove stockMove)
public void checkIfQuarantine(StockMove stockMove)
throws AxelorException {
Query sql =
JPA.em()
.createNativeQuery(
"SELECT LINE.ID"+
" FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+
" where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 2 AND LINE.STOCK_MOVE = ?2");
" FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.INTERNAL_TRACKING_NUMBER = LOCATION_LINE.INTERNAL_TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+
" where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 2 AND LOCATION_LINE.CONFORMITY_SELECT != 5 AND LINE.STOCK_MOVE = ?2");
sql.setParameter(1, stockMove.getFromStockLocation().getId());
sql.setParameter(2, stockMove.getId());
System.out.println("*****************checkIfConforme******************");
System.out.println("*****************checkIfQuarantine******************");
System.out.println(sql.getResultList().size() > 0);
System.out.println("******************checkIfConforme*****************");
System.out.println("******************checkIfQuarantine*****************");
if (sql.getResultList().size() > 0) {
throw new AxelorException(
stockMove,
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
"Certaines lignes ne sont pas conformes (état différent de 'Conforme').");
"Vous avez une ligne en etat qurantaine");
}
}
public void CheckIfNotNotconforme(StockMove stockMove)
public void checkIfNonConformityTag(StockMove stockMove)
throws AxelorException {
Query sql =
JPA.em()
.createNativeQuery(
"SELECT LINE.ID"+
" FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.product = LOCATION_LINE.product"+
" where LOCATION_LINE.DETAILS_STOCK_LOCATION = ?1 AND LOCATION_LINE.CONFORMITY_SELECT != 3 AND LINE.STOCK_MOVE = ?2");
sql.setParameter(1, stockMove.getFromStockLocation().getId());
sql.setParameter(2, stockMove.getId());
"SELECT LINE.ID" +
" FROM STOCK_STOCK_MOVE_LINE LINE LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER and LINE.INTERNAL_TRACKING_NUMBER = LOCATION_LINE.INTERNAL_TRACKING_NUMBER and LINE.product = LOCATION_LINE.product" +
" where LOCATION_LINE.DETAILS_STOCK_LOCATION = :location AND LOCATION_LINE.is_conform_tag is not true AND LINE.STOCK_MOVE = :move");
sql.setParameter("location", stockMove.getFromStockLocation().getId());
sql.setParameter("move", stockMove.getId());
System.out.println("*****************CheckIfNotNotconforme******************");
System.out.println(sql.getResultList().size() > 0);
System.out.println("******************CheckIfNotNotconforme*****************");
if (sql.getResultList().size() > 0) {
throw new AxelorException(
stockMove,
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
"Toutes les lignes doivent être en état 'Non conforme'.");
}
}
public void checkIfNonConformityTag(StockMove stockMove)
throws AxelorException {
Query sql = JPA.em()
.createNativeQuery(
"SELECT LINE.ID" +
" FROM STOCK_STOCK_MOVE_LINE LINE" +
" LEFT JOIN STOCK_STOCK_LOCATION_LINE LOCATION_LINE" +
" ON LINE.TRACKING_NUMBER = LOCATION_LINE.TRACKING_NUMBER" +
" AND LINE.PRODUCT = LOCATION_LINE.PRODUCT" +
" WHERE LOCATION_LINE.DETAILS_STOCK_LOCATION = :location" +
" AND (LOCATION_LINE.IS_CONFORM_TAG IS NULL OR LOCATION_LINE.IS_CONFORM_TAG = FALSE)" +
" AND LINE.STOCK_MOVE = :move");
sql.setParameter("location", stockMove.getFromStockLocation().getId());
sql.setParameter("move", stockMove.getId());
System.out.println("*****************checkIfNonConformityTag*****************");
boolean hasNonTags = !sql.getResultList().isEmpty();
System.out.println("Has non conform tag: " + hasNonTags);
System.out.println("*****************checkIfNonConformityTag****************");
if (hasNonTags) {
throw new AxelorException(
stockMove,
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
"Vous avez une ligne non étiquetée");
}
System.out.println("*****************checkIfNonConformityTag*****************");
System.out.println(sql.getResultList().size() > 0);
System.out.println("*****************checkIfNonConformityTag****************");
if (sql.getResultList().size() > 0) {
throw new AxelorException(
stockMove,
TraceBackRepository.CATEGORY_CONFIGURATION_ERROR,
"Vous avez une ligne non étiquetée");
}
}
@Override
public void massPlan(List<Long> moveIds) throws AxelorException {

View File

@ -18,9 +18,6 @@
<many-to-one name="supplierVirtualStockLocation" ref="com.axelor.apps.stock.db.StockLocation" title="Supplier virtual stock location"/>
<many-to-one name="inventoryVirtualStockLocation" ref="com.axelor.apps.stock.db.StockLocation" title="Inventory virtual stock location"/>
<many-to-one name="nonCoreStockLocation" ref="com.axelor.apps.stock.db.StockLocation" title="Non-core stock location"/>
<many-to-one name="wasteStockLocationParent" ref="com.axelor.apps.stock.db.StockLocation" title="Parent waste stock location"/>
<many-to-one name="customsMassUnit" ref="com.axelor.apps.base.db.Unit" title="Unit of mass"/>
<boolean name="realizeStockMovesUponParcelPalletCollection" title="Realize stock moves upon parcel/pallet collection" />
@ -105,9 +102,6 @@
<field name="displayTrackNbrOnCertificateOfConformityPrinting" on="UPDATE"/>
<field name="displayExtRefOnCertificateOfConformityPrinting" on="UPDATE"/>
<field name="nonCoreStockLocation" on="UPDATE"/>
<field name="wasteStockLocationParent" on="UPDATE"/>
</track>
</entity>

View File

@ -21,8 +21,6 @@
<many-to-many name="stockLocationList" ref="com.axelor.apps.stock.db.StockLocation" title="Stock locations"/>
<many-to-one name="picture" ref="com.axelor.meta.db.MetaFile" title="Photo" index="false"/>
<boolean name="needCheckInVerification" title="Check-in verification required" default="false" massUpdate="true"/>
<finder-method name="findByCompany" using="company"/>
<finder-method name="findByPartner" using="partner"/>
@ -43,11 +41,6 @@
]]></extra-code>
<track on="UPDATE">
<field name="needCheckInVerification" />
</track>
</entity>
</domain-models>