Creati servizi per il recupero materiale da WMS

This commit is contained in:
2025-02-03 19:10:37 +01:00
parent 2277443482
commit b57508aec5
8 changed files with 588 additions and 11 deletions

View File

@@ -1,5 +1,6 @@
package it.integry.ems_model.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeName;
import it.integry.common.var.CommonConstants;
import it.integry.ems_model.annotation.*;
@@ -867,6 +868,11 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
return flagQtaCnfFissa;
}
@JsonIgnore
public boolean isFlagQtaCnfFissaBoolean() {
return "S".equalsIgnoreCase(flagQtaCnfFissa);
}
public MtbAart setFlagQtaCnfFissa(String flagQtaCnfFissa) {
this.flagQtaCnfFissa = flagQtaCnfFissa;
return this;
@@ -1362,4 +1368,5 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
.setOperation(OperationType.SELECT_OBJECT);
return art;
}
}

View File

@@ -96,10 +96,19 @@ public class UtilityBigDecimal {
}
public static BigDecimal divide(BigDecimal input1, BigDecimal divisor) {
return divide(input1, divisor, RoundingMode.HALF_EVEN);
}
public static BigDecimal divide(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) {
if (input1 == null) return null;
if (divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return input1.divide(divisor, 5, BigDecimal.ROUND_HALF_EVEN);
return input1.divide(divisor, 5, roundingMode);
}
public static BigDecimal divideAndRoundToInteger(BigDecimal input1, BigDecimal divisor, RoundingMode roundingMode) {
if (divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return new BigDecimal(input1.divide(divisor, 0, roundingMode).intValue());
}
public static BigDecimal multiply(BigDecimal input1, BigDecimal multiplier) {

View File

@@ -25,14 +25,16 @@ import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.entity.MtbDepoPosizioni;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.drools.core.util.IoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileNotFoundException;
import java.net.InetAddress;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
@@ -43,6 +45,8 @@ import java.util.*;
@Scope("request")
public class WMSGenericController {
private final Logger logger = LogManager.getLogger();
@Autowired
private EmsProperties emsProperties;
@@ -110,10 +114,8 @@ public class WMSGenericController {
}
@RequestMapping(value = EmsRestConstants.PATH_CHECK_LATEST_WMS_VERSION_JSON, method = RequestMethod.GET)
public Object checkWMSLatestVersionJSON() throws Exception {
public Object checkWMSLatestVersionJSON(HttpServletResponse response) throws Exception {
String wmsVersionFile = Paths.get(UtilityDirs.getWebAppPath(), "wms", "version.txt").toString();
if (new File(wmsVersionFile).exists()) {
List<String> lines = UtilityString.splitStringToMultipleLine(IoUtils.readFileAsString(new File(wmsVersionFile)));
@@ -148,7 +150,11 @@ public class WMSGenericController {
}
return wmsVersionDTO;
} else throw new FileNotFoundException("File version.txt non trovato");
} else {
logger.warn("File version.txt non trovato");
response.sendError(404, "File version.txt non trovato");
return null;
}
}
@RequestMapping(value = EmsRestConstants.PATH_GET_GIACENZA_BANCALI_ARTICOLI_ORDINE, method = RequestMethod.GET)

View File

@@ -5,8 +5,6 @@ import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.wms.accettazione.service.WMSAccettazioneService;
import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.lavorazione.service.WMSLavorazioneService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
@@ -17,9 +15,6 @@ import org.springframework.web.bind.annotation.*;
public class WMSLavorazioneController {
private final Logger logger = LogManager.getLogger();
@Autowired
private WMSAccettazioneService wmsAccettazioneService;

View File

@@ -0,0 +1,32 @@
package it.integry.ems.retail.wms.lavorazione.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.wms.lavorazione.dto.RecuperaMaterialiRequestDTO;
import it.integry.ems.retail.wms.lavorazione.dto.RecuperaMaterialiResponseDTO;
import it.integry.ems.retail.wms.lavorazione.service.WMSMaterialiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
@RestController
@Scope("request")
@RequestMapping("wms/materiali")
public class WMSMaterialiController {
@Autowired
private WMSMaterialiService wmsMaterialiService;
@RequestMapping(value = "recupera", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse recupera(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody RecuperaMaterialiRequestDTO recuperaMaterialiRequestDTO) throws Exception {
RecuperaMaterialiResponseDTO responseDto = new RecuperaMaterialiResponseDTO()
.setUpdatedMtbColtScarico(wmsMaterialiService.recupera(recuperaMaterialiRequestDTO));
return ServiceRestResponse.createPositiveResponse(responseDto);
}
}

View File

@@ -0,0 +1,237 @@
package it.integry.ems.retail.wms.lavorazione.dto;
import it.integry.ems_model.entity.MtbColt;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
public class RecuperaMaterialiRequestDTO {
private String codMart;
private String partitaMag;
private BigDecimal numCnf;
private BigDecimal qtaCnf;
private BigDecimal qtaTot;
private int numCollo;
private LocalDate dataCollo;
private String gestione;
private String serCollo;
private int numColloRif;
private LocalDate dataColloRif;
private String gestioneRif;
private String serColloRif;
private List<Ordine> ordini;
private MtbColt mtbColtCarico;
public String getCodMart() {
return codMart;
}
public RecuperaMaterialiRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public RecuperaMaterialiRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public RecuperaMaterialiRequestDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public RecuperaMaterialiRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public RecuperaMaterialiRequestDTO setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public int getNumCollo() {
return numCollo;
}
public RecuperaMaterialiRequestDTO setNumCollo(int numCollo) {
this.numCollo = numCollo;
return this;
}
public LocalDate getDataCollo() {
return dataCollo;
}
public RecuperaMaterialiRequestDTO setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public String getGestione() {
return gestione;
}
public RecuperaMaterialiRequestDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public String getSerCollo() {
return serCollo;
}
public RecuperaMaterialiRequestDTO setSerCollo(String serCollo) {
this.serCollo = serCollo;
return this;
}
public int getNumColloRif() {
return numColloRif;
}
public RecuperaMaterialiRequestDTO setNumColloRif(int numColloRif) {
this.numColloRif = numColloRif;
return this;
}
public LocalDate getDataColloRif() {
return dataColloRif;
}
public RecuperaMaterialiRequestDTO setDataColloRif(LocalDate dataColloRif) {
this.dataColloRif = dataColloRif;
return this;
}
public String getGestioneRif() {
return gestioneRif;
}
public RecuperaMaterialiRequestDTO setGestioneRif(String gestioneRif) {
this.gestioneRif = gestioneRif;
return this;
}
public String getSerColloRif() {
return serColloRif;
}
public RecuperaMaterialiRequestDTO setSerColloRif(String serColloRif) {
this.serColloRif = serColloRif;
return this;
}
public List<Ordine> getOrdini() {
return ordini;
}
public RecuperaMaterialiRequestDTO setOrdini(List<Ordine> ordini) {
this.ordini = ordini;
return this;
}
public MtbColt getMtbColtCarico() {
return mtbColtCarico;
}
public RecuperaMaterialiRequestDTO setMtbColtCarico(MtbColt mtbColtCarico) {
this.mtbColtCarico = mtbColtCarico;
return this;
}
public static class Ordine {
private Integer numero;
private LocalDate data;
private String gestione;
private Integer rigaOrd;
private BigDecimal qtaCol;
private BigDecimal numCnf;
private Integer percentageHr;
public Integer getNumero() {
return numero;
}
public Ordine setNumero(Integer numero) {
this.numero = numero;
return this;
}
public LocalDate getData() {
return data;
}
public Ordine setData(LocalDate data) {
this.data = data;
return this;
}
public String getGestione() {
return gestione;
}
public Ordine setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public Integer getRigaOrd() {
return rigaOrd;
}
public Ordine setRigaOrd(Integer rigaOrd) {
this.rigaOrd = rigaOrd;
return this;
}
public BigDecimal getQtaCol() {
return qtaCol;
}
public Ordine setQtaCol(BigDecimal qtaCol) {
this.qtaCol = qtaCol;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public Ordine setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public Integer getPercentageHr() {
return percentageHr;
}
public Ordine setPercentageHr(Integer percentageHr) {
this.percentageHr = percentageHr;
return this;
}
}
}

View File

@@ -0,0 +1,17 @@
package it.integry.ems.retail.wms.lavorazione.dto;
import it.integry.ems_model.entity.MtbColt;
public class RecuperaMaterialiResponseDTO {
private MtbColt updatedMtbColtScarico;
public MtbColt getUpdatedMtbColtScarico() {
return updatedMtbColtScarico;
}
public RecuperaMaterialiResponseDTO setUpdatedMtbColtScarico(MtbColt updatedMtbColtScarico) {
this.updatedMtbColtScarico = updatedMtbColtScarico;
return this;
}
}

View File

@@ -0,0 +1,274 @@
package it.integry.ems.retail.wms.lavorazione.service;
import core.utility.UtilityDate;
import it.integry.ems.product.importaz.service.ProductServices;
import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
import it.integry.ems.retail.wms.lavorazione.dto.RecuperaMaterialiRequestDTO;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
@Service
@Scope("request")
public class WMSMaterialiService {
@Autowired
private SetupGest setupGest;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private ProductServices productServices;
@Autowired
private EntityProcessor entityProcessor;
private final Logger logger = LogManager.getLogger();
public MtbColt recupera(RecuperaMaterialiRequestDTO request) throws Exception {
final boolean versamentoDirettoEnabled = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "PRODUZIONE", "FLAG_VERSAMENTO_DIRETTO");
final boolean forceAllToColli = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "SETUP", "FLAG_FORCE_ALL_TO_COLLI");
MtbAart mtbAart = productServices.getArticoloByCodMart(request.getCodMart());
if (mtbAart == null)
throw new InvalidArticoloException(request.getCodMart());
if (request.getMtbColtCarico() == null)
throw new Exception("Indicare una UL in cui effettuare il carico del materiale");
List<EntityBase> entitiesToSave = new ArrayList<>();
final MtbColt mtbColtScarico = new MtbColt()
.setDataCollo(request.getDataCollo())
.setSerCollo(request.getSerCollo())
.setNumCollo(request.getNumCollo())
.setGestione(request.getGestione());
mtbColtScarico.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(mtbColtScarico, multiDBTransactionManager);
entitiesToSave.add(mtbColtScarico);
BigDecimal inputNumCnf = request.getNumCnf();
BigDecimal inputQtaTot = request.getQtaTot();
BigDecimal inputQtaCnf = request.getQtaCnf();
BigDecimal totalSumOfQtaCol = BigDecimal.ZERO;
BigDecimal totalSumOfNumCnf = BigDecimal.ZERO;
if (versamentoDirettoEnabled) {
for (RecuperaMaterialiRequestDTO.Ordine ordine : request.getOrdini()) {
BigDecimal qtaColToSave;
BigDecimal numCnfToSave;
if (forceAllToColli || !mtbAart.isFlagQtaCnfFissaBoolean()) {
numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, RoundingMode.FLOOR);
} else {
qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, inputQtaCnf, RoundingMode.FLOOR);
}
totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave);
totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave);
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(request.getCodMart())
.setPartitaMag(UtilityString.emptyStr2Null(request.getPartitaMag()))
.setQtaCol(qtaColToSave)
.setQtaCnf(inputQtaCnf)
.setNumCnf(numCnfToSave)
.setDescrizione(UtilityString.isNull(mtbAart.getDescrizioneEstesa(), mtbAart.getDescrizione()))
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(request.getNumColloRif())
.setDataColloRif(UtilityLocalDate.localDateToDate(request.getDataColloRif()))
.setGestioneRif(request.getGestioneRif())
.setSerColloRif(request.getSerColloRif())
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
mtbColrScarico.setOperation(OperationType.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);
}
} else {
BigDecimal qtaColToSave;
BigDecimal numCnfToSave;
if (forceAllToColli || (!mtbAart.isFlagQtaCnfFissaBoolean())) {
numCnfToSave = inputNumCnf;
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, RoundingMode.FLOOR);
} else {
qtaColToSave = inputQtaTot;
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, inputQtaCnf, RoundingMode.FLOOR);
}
totalSumOfQtaCol = qtaColToSave;
totalSumOfNumCnf = numCnfToSave;
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
if (request.getOrdini() != null && !request.getOrdini().isEmpty()) {
BigDecimal totalQtaOrd = request.getOrdini().stream()
.map(RecuperaMaterialiRequestDTO.Ordine::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
for (RecuperaMaterialiRequestDTO.Ordine ordine : request.getOrdini()) {
BigDecimal qtaCol = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(ordine.getQtaCol(), qtaColToSave), totalQtaOrd);
BigDecimal numCnf = UtilityBigDecimal.divide(qtaCol, inputQtaCnf);
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(request.getCodMart())
.setPartitaMag(UtilityString.emptyStr2Null(request.getPartitaMag()))
.setQtaCol(qtaCol)
.setQtaCnf(inputQtaCnf)
.setNumCnf(numCnf)
.setDescrizione(UtilityString.isNull(mtbAart.getDescrizioneEstesa(), mtbAart.getDescrizione()))
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(request.getNumColloRif())
.setDataColloRif(UtilityLocalDate.localDateToDate(request.getDataColloRif()))
.setGestioneRif(request.getGestioneRif())
.setSerColloRif(request.getSerColloRif())
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
mtbColrScarico.setOperation(OperationType.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);
}
} else {
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(request.getCodMart())
.setPartitaMag(UtilityString.emptyStr2Null(request.getPartitaMag()))
.setQtaCol(qtaColToSave)
.setQtaCnf(inputQtaCnf)
.setNumCnf(numCnfToSave)
.setDescrizione(UtilityString.isNull(mtbAart.getDescrizioneEstesa(), mtbAart.getDescrizione()))
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(request.getNumColloRif())
.setDataColloRif(UtilityLocalDate.localDateToDate(request.getDataColloRif()))
.setGestioneRif(request.getGestioneRif())
.setSerColloRif(request.getSerColloRif());
mtbColrScarico.setOperation(OperationType.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);
}
}
boolean updateQtaCnfFirstRow = false;
if (UtilityBigDecimal.lowerThan(totalSumOfNumCnf, inputNumCnf)) {
BigDecimal diff = inputNumCnf.subtract(totalSumOfNumCnf).multiply(BigDecimal.valueOf(-1));
mtbColtScarico.getMtbColr().get(0).setNumCnf(mtbColtScarico.getMtbColr().get(0).getNumCnf().add(diff));
updateQtaCnfFirstRow = true;
}
if (UtilityBigDecimal.lowerThan(totalSumOfQtaCol, inputQtaTot)) {
BigDecimal diff = inputQtaTot.subtract(totalSumOfQtaCol).multiply(BigDecimal.valueOf(-1));
mtbColtScarico.getMtbColr().get(0).setQtaCol(mtbColtScarico.getMtbColr().get(0).getQtaCol().add(diff));
updateQtaCnfFirstRow = true;
}
if (updateQtaCnfFirstRow) {
mtbColtScarico.getMtbColr().get(0).setQtaCnf(
UtilityBigDecimal.divide(mtbColtScarico.getMtbColr().get(0).getQtaCol(), mtbColtScarico.getMtbColr().get(0).getNumCnf()));
}
for (int i = 0; i < mtbColtScarico.getMtbColr().size(); i++) {
if (mtbColtScarico.getMtbColr().get(i).getQtaCol().equals(BigDecimal.ZERO)) {
mtbColtScarico.getMtbColr().remove(i);
i--;
}
}
mtbColtScarico.setOperation(OperationType.INSERT_OR_UPDATE);
if (!request.getMtbColtCarico().getDataCollo().isEqual(request.getDataColloRif()) ||
!request.getMtbColtCarico().getSerCollo().equalsIgnoreCase(request.getSerColloRif()) ||
request.getMtbColtCarico().getNumCollo() != request.getNumColloRif() ||
!request.getMtbColtCarico().getGestione().equalsIgnoreCase(request.getGestioneRif())) {
//Non sto caricando nella stessa UL da cui ho prelevato
MtbColt mtbColtCarico = request.getMtbColtCarico();
mtbColtCarico.setOperation(OperationType.INSERT_OR_UPDATE);
final MtbColr mtbColrCarico = new MtbColr()
.setCodMart(request.getCodMart())
.setPartitaMag(UtilityString.emptyStr2Null(request.getPartitaMag()))
.setQtaCol(inputQtaTot)
.setNumCnf(inputNumCnf)
.setQtaCnf(inputQtaCnf)
.setDescrizione(UtilityString.isNull(mtbAart.getDescrizioneEstesa(), mtbAart.getDescrizione()))
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(request.getNumColloRif())
.setDataColloRif(UtilityLocalDate.localDateToDate(request.getDataColloRif()))
.setGestioneRif(request.getGestioneRif())
.setSerColloRif(request.getSerColloRif());
mtbColtCarico.setOperation(OperationType.INSERT_OR_UPDATE);
mtbColtCarico.getMtbColr().add(mtbColrCarico);
entitiesToSave.add(mtbColtCarico);
}
if (mtbColtScarico.hasDocument()) {
DtbDoct dtbDoctScaricoToUpdate = new DtbDoct(mtbColtScarico.getCodAnag(),
mtbColtScarico.getCodDtip(),
mtbColtScarico.getDataDoc(),
mtbColtScarico.getNumDoc(),
mtbColtScarico.getSerDoc());
dtbDoctScaricoToUpdate.setOperation(OperationType.NO_OP);
DtbDocr dtbDocrScarico = new DtbDocr()
.setCodMart(request.getCodMart())
.setPartitaMag(request.getPartitaMag())
.setQta(UtilityBigDecimal.multiply(inputQtaTot, BigDecimal.valueOf(-1)))
.setNumCnf(UtilityBigDecimal.multiply(inputNumCnf, BigDecimal.valueOf(-1)))
.setQtaCnf(request.getQtaCnf());
dtbDocrScarico.setOperation(OperationType.INSERT);
dtbDoctScaricoToUpdate.getDtbDocr().add(dtbDocrScarico);
entitiesToSave.add(dtbDoctScaricoToUpdate);
}
final List<EntityBase> savedEntities = entityProcessor.processEntityList(entitiesToSave, true);
UtilityEntity.throwEntitiesException(savedEntities);
return mtbColtScarico;
}
}