[ROSSOGARGANO]
- corretta gestione scarichi teorici in nuovo servizio chiusura ordine
This commit is contained in:
@@ -27,6 +27,7 @@ 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.*;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.josql.Query;
|
||||
@@ -2938,6 +2939,10 @@ public class DocumentProdService {
|
||||
documentiCarico.add(generaDocumentiCaricoDaTeorico(dto));
|
||||
}
|
||||
|
||||
if (dto.isSalvaDocumenti()){
|
||||
entityProcessor.processEntityList(documentiCarico,multiDBTransactionManager,true);
|
||||
UtilityEntity.throwEntitiesException(documentiCarico);
|
||||
}
|
||||
return documentiCarico;
|
||||
}
|
||||
|
||||
@@ -2945,14 +2950,24 @@ public class DocumentProdService {
|
||||
List<DtbDoct> documentiScarico = new ArrayList<>();
|
||||
ScaricoLavorazioneDTO dtoScarico = dto.getScaricoLavorazioneDTO();
|
||||
if (dtoScarico.isScaricoDaCollo()) {
|
||||
documentiScarico.addAll(generaDocumentiScaricoOrdineDaColli(dto));
|
||||
List<DtbDoct> scarichiDaCollo =generaDocumentiScaricoOrdineDaColli(dto);
|
||||
if (dto.isSalvaDocumenti()){
|
||||
entityProcessor.processEntityList(scarichiDaCollo,multiDBTransactionManager,true);
|
||||
UtilityEntity.throwEntitiesException(scarichiDaCollo);
|
||||
}
|
||||
documentiScarico.addAll(scarichiDaCollo);
|
||||
}
|
||||
|
||||
//<editor-fold desc="Genera scarico materiali: se c'è stato uno scarico da collo di versamento allora scarica solo
|
||||
// eventuali materiali restanti Se la data del documento non viene passata da fuori allora vuole dire che la generazione
|
||||
// dei carichi/scarichi deve essere fatta utilizzando la data dei colli di versamento o carico">
|
||||
for (ProduzioneOrdineDTO produzione : dto.getProduzioniOrdine()){
|
||||
documentiScarico.addAll(generaDocumentiScaricoMateriali(dto, produzione));
|
||||
for (ProduzioneOrdineDTO produzione : dto.getProduzioniOrdine()) {
|
||||
List<DtbDoct> scarichi = generaDocumentiScaricoMateriali(dto, produzione);
|
||||
if (dto.isSalvaDocumenti()){
|
||||
entityProcessor.processEntityList(scarichi,multiDBTransactionManager,true);
|
||||
UtilityEntity.throwEntitiesException(scarichi);
|
||||
}
|
||||
documentiScarico.addAll(scarichi);
|
||||
}
|
||||
// if (dto.getDataDoc() == null) {
|
||||
// documentiScarico.addAll(generaDocumentiScaricoMaterialiDaDataCollo(dto));
|
||||
@@ -2990,7 +3005,7 @@ public class DocumentProdService {
|
||||
return produzioni;
|
||||
}
|
||||
|
||||
BigDecimal qtaProdotta = produzioni.stream().map(ProduzioneOrdineDTO::getQuantita).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
BigDecimal qtaProdotta = produzioni.stream().map(ProduzioneOrdineDTO::getQuantita).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
produzioni.forEach(x ->
|
||||
{
|
||||
x.setPesoProduzione(BigDecimal.valueOf(100).multiply(x.getQuantita()).divide(qtaProdotta, 3, RoundingMode.HALF_EVEN));
|
||||
@@ -3004,6 +3019,7 @@ public class DocumentProdService {
|
||||
return generaTestataDocDaOrdineLav(ordineLav, codDtip, dataDoc, serDoc, codAnag, numDoc, codMdep, ordineLav.getPartitaMag());
|
||||
|
||||
}
|
||||
|
||||
public DtbDoct generaTestataDocDaOrdineLav(DtbOrdt ordineLav, String codDtip, Date dataDoc, String serDoc, String codAnag, Integer numDoc, String codMdep, String partitaMag) throws Exception {
|
||||
|
||||
DtbDoct docT = new DtbDoct();
|
||||
@@ -3284,7 +3300,6 @@ public class DocumentProdService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
return documents;
|
||||
}
|
||||
|
||||
@@ -3406,7 +3421,7 @@ public class DocumentProdService {
|
||||
" dtb_doct.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
|
||||
" dtb_doct.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd());
|
||||
if (UtilityString.hasContent(produzioneOrdine.getPartitaMag())) {
|
||||
UtilityDB.addwhereCond(sql, it.integry.ems_model.utility.Query.format("partita_mag = {}",produzioneOrdine.getPartitaMag()),true);
|
||||
UtilityDB.addwhereCond(sql, it.integry.ems_model.utility.Query.format("partita_mag = {}", produzioneOrdine.getPartitaMag()), true);
|
||||
}
|
||||
|
||||
docT = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbDoct.class);
|
||||
@@ -3671,7 +3686,7 @@ public class DocumentProdService {
|
||||
return docsList;
|
||||
}
|
||||
Date dataDoc = dataDocFromCollo != null ? dataDocFromCollo.getDataDocFromCollo() : null;
|
||||
List<DtbDocr> righeScarico = getRigheScaricoDocumento(chiusuraLavorazioneDTO, listMateriali, dettaglioScaricoDTO,dataDoc , dataDocFromCollo.getQtaColForDate());
|
||||
List<DtbDocr> righeScarico = getRigheScaricoDocumento(chiusuraLavorazioneDTO, listMateriali, dettaglioScaricoDTO, dataDoc, dataDocFromCollo.getQtaColForDate());
|
||||
|
||||
|
||||
if (!righeScarico.isEmpty()) {
|
||||
@@ -4066,195 +4081,85 @@ public class DocumentProdService {
|
||||
/*Se si tratta di una materia prima di tipo IMBALLAGGIO ed è stata passata la quantità in confezioni dal servizio,
|
||||
allora il rapporto deve essere calcolato in base al numero di confezioni realizzate */
|
||||
if (materiale.getGruppoContoMp() != null && tipoImballaggi.compareTo(materiale.getGruppoContoMp()) == 0 && !UtilityBigDecimal.isNullOrZero(datiScarico.getNumCnf())) {
|
||||
if (BigDecimal.ZERO.compareTo(dettaglioScaricoDTO.getNumCnf()) == 0) {
|
||||
throw new Exception(String.format("Numero confezioni del piano di produzione è uguale a zero. Prodotto: %s ", ordine.getCodProd()));
|
||||
}
|
||||
rapporto = datiScarico.getNumCnf().divide(dettaglioScaricoDTO.getNumCnf(), 10, RoundingMode.HALF_UP);
|
||||
} else {
|
||||
rapporto = qtaProdUMMag.divide(materiale.getQtaProdOrd(), 10, RoundingMode.HALF_UP);
|
||||
rapporto = qtaProdUMMag.divide(materiale.getQtaProdOrd(), 5, RoundingMode.HALF_UP);
|
||||
}
|
||||
}
|
||||
|
||||
// Gestione quantità da scaricare
|
||||
if (UtilityString.isNullOrEmpty(materiale.getPartitaMag())) {
|
||||
materiale.setQtaMate(materiale.getQtaMate().multiply(rapporto).setScale(5, RoundingMode.HALF_UP));
|
||||
|
||||
if ("S".equals(materiale.getFlagDig())) {
|
||||
materiale.setQtaMate(materiale.getQtaMate().setScale(0, RoundingMode.CEILING));
|
||||
}
|
||||
RigaScaricoDTO riga = new RigaScaricoDTO();
|
||||
riga.setQtaInevasa(materiale.getQtaMate());
|
||||
riga.setRigaOrd(materiale.getRigaOrd());
|
||||
righeScarichi.add(riga);
|
||||
} else {
|
||||
// Acquisizione quantità totale definita nell'ordine di lavorazione per l'articolo in questione
|
||||
if (materialiProcessati.stream().noneMatch(x -> x.equalsIgnoreCase(materiale.getCodMart()))) {
|
||||
materialiProcessati.add(materiale.getCodMart());
|
||||
String sql =
|
||||
" SELECT ISNULL(sum(qta_ord), 0) as qta_mate_tot " +
|
||||
" FROM dtb_ordr " +
|
||||
" WHERE dtb_ordr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
|
||||
" dtb_ordr.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
|
||||
" dtb_ordr.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + " AND " +
|
||||
" dtb_ordr.cod_mart = " + UtilityDB.valueToString(materiale.getCodMart()) + " AND " +
|
||||
" dtb_ordr.flag_evaso <> 'A' AND " +
|
||||
" dtb_ordr.partita_mag IS NOT NULL ";
|
||||
BigDecimal qtaDaScaricareTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
|
||||
|
||||
// Quantità totale materiale proporzionato alla quantità di prodotto da realizzare
|
||||
qtaDaScaricareTot = qtaDaScaricareTot.multiply(rapporto).setScale(5, RoundingMode.HALF_UP);
|
||||
|
||||
// Acquisizione dettaglio partite associate alla materia prima
|
||||
sql =
|
||||
" SELECT dtb_ordr.riga_ord, " +
|
||||
" CASE WHEN dtb_ordr.qta_ord - dtb_ordr.qta_evasa > 0 THEN dtb_ordr.qta_ord - dtb_ordr.qta_evasa ELSE mtb_part_dt.qta_esistente / dtb_ordr.rap_conv END as qta_inevasa, " +
|
||||
" ISNULL(dtb_ordr.partita_mag, '') as partita_mag, " +
|
||||
" mtb_part_dt.qta_esistente / dtb_ordr.rap_conv as giacenza" +
|
||||
" FROM dtb_ordr LEFT OUTER JOIN mtb_part_dt ON dtb_ordr.cod_mart = mtb_part_dt.cod_mart AND " +
|
||||
" dtb_ordr.partita_mag = mtb_part_dt.partita_mag AND " +
|
||||
" dtb_ordr.cod_mdep = mtb_part_dt.cod_mdep " +
|
||||
" WHERE dtb_ordr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
|
||||
" dtb_ordr.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
|
||||
" dtb_ordr.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + " AND " +
|
||||
" dtb_ordr.cod_mart = " + UtilityDB.valueToString(materiale.getCodMart()) + " AND " +
|
||||
" dtb_ordr.flag_evaso <> 'A' AND " +
|
||||
" dtb_ordr.qta_ord - dtb_ordr.qta_evasa <> 0 AND " +
|
||||
" dtb_ordr.partita_mag IS NOT NULL " +
|
||||
"ORDER BY dtb_ordr.riga_ord ";
|
||||
|
||||
List<RigaScaricoDTO> dettagliScarico = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, RigaScaricoDTO.class);
|
||||
if (dettagliScarico == null) {
|
||||
dettagliScarico = new ArrayList<>();
|
||||
}
|
||||
if (!dettagliScarico.isEmpty()) {
|
||||
Iterator<RigaScaricoDTO> scaricoDTOIterator = dettagliScarico.iterator();
|
||||
while (UtilityBigDecimal.greaterThan(qtaDaScaricareTot, BigDecimal.ZERO) && scaricoDTOIterator.hasNext()) {
|
||||
RigaScaricoDTO dettaglioScarico = scaricoDTOIterator.next();
|
||||
|
||||
// Se la quantità da scaricare è minore della quantità inevasa sull'ordine allora la quantità viene assegnata ad un unica partita,
|
||||
// se la quantita da scaricare è maggiore allora viene scaricata la quantità dell'ordine da una partita e la quantità residua da
|
||||
// eventuale altra partita di magazzino se disponibile in caso constrario il sistema blocca lo scarico visualizzando un messaggio
|
||||
|
||||
BigDecimal qtaScarico = UtilityBigDecimal.getLowerBetween(qtaDaScaricareTot, dettaglioScarico.getQtaInevasa());
|
||||
if ("S".equals(materiale.getFlagDig())) {
|
||||
qtaScarico = qtaScarico.setScale(0, RoundingMode.CEILING);
|
||||
}
|
||||
qtaDaScaricareTot = qtaDaScaricareTot.subtract(qtaScarico);
|
||||
|
||||
RigaScaricoDTO riga = new RigaScaricoDTO();
|
||||
riga.setQtaInevasa(qtaScarico);
|
||||
riga.setRigaOrd(materiale.getRigaOrd());
|
||||
riga.setPartitaMag(riga.getPartitaMag());
|
||||
righeScarichi.add(riga);
|
||||
|
||||
if (!scaricoDTOIterator.hasNext()) {
|
||||
qtaDaScaricareTot = BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
} else if (qtaDaScaricareTot.compareTo(BigDecimal.ZERO) != 0) {
|
||||
// Se non ci sono righe di ordine inevase con relativa partita e la quantità residua da scaricare è diversa da 0
|
||||
// allora viene presa l'ultima partita scaricata ed assegnata la quantità residua ad essa se la giacenza è
|
||||
// sufficiente in caso contrario il programma blocca lo scarico
|
||||
sql =
|
||||
" SELECT TOP 1 dtb_ordr.riga_ord, " +
|
||||
" mtb_part_dt.qta_esistente / dtb_ordr.rap_conv as giacenza, " +
|
||||
" ISNULL(dtb_ordr.partita_mag, '') as partita_mag " +
|
||||
" FROM dtb_ordr LEFT OUTER JOIN mtb_part_dt ON dtb_ordr.cod_mart = mtb_part_dt.cod_mart AND " +
|
||||
" dtb_ordr.partita_mag = mtb_part_dt.partita_mag AND " +
|
||||
" dtb_ordr.cod_mdep = mtb_part_dt.cod_mdep " +
|
||||
" WHERE dtb_ordr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
|
||||
" dtb_ordr.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
|
||||
" dtb_ordr.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + " AND " +
|
||||
" dtb_ordr.cod_mart = " + UtilityDB.valueToString(materiale.getCodMart()) + " AND " +
|
||||
" dtb_ordr.flag_evaso <> 'A' " +
|
||||
"ORDER BY dtb_ordr.riga_ord DESC ";
|
||||
|
||||
List<RigaScaricoDTO> lista = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, RigaScaricoDTO.class);
|
||||
if (lista == null) {
|
||||
lista = new ArrayList<>();
|
||||
}
|
||||
|
||||
for (RigaScaricoDTO row : lista) {
|
||||
if (row.getGiacenza().compareTo(BigDecimal.ZERO) == 0) {
|
||||
throw new Exception("Impossibile procedure allo scarico della materia prima " + materiale.getCodMart() + " lotto " + row.getPartitaMag() + ". " +
|
||||
"La partita non ha giacenza sufficiente per lo scarico: qtà da scaricare = " + qtaDaScaricareTot + " giacenza= " + row.getGiacenza());
|
||||
}
|
||||
if ("S".equals(materiale.getFlagDig())) {
|
||||
qtaDaScaricareTot = qtaDaScaricareTot.setScale(0, RoundingMode.CEILING);
|
||||
}
|
||||
|
||||
RigaScaricoDTO riga = new RigaScaricoDTO();
|
||||
riga.setQtaInevasa(qtaDaScaricareTot);
|
||||
riga.setRigaOrd(riga.getRigaOrd());
|
||||
riga.setPartitaMag(riga.getPartitaMag());
|
||||
righeScarichi.add(riga);
|
||||
qtaDaScaricareTot = BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
BigDecimal qtaDaScaricare = materiale.getQtaMate().multiply(rapporto);
|
||||
if (UtilityBigDecimal.equalsOrLowerThan(qtaDaScaricare, BigDecimal.ZERO)) {
|
||||
// se la quantità da scaricare è zero o negativa passo al prossimo materiale
|
||||
continue;
|
||||
}
|
||||
if ("S".equals(materiale.getFlagDig())) {
|
||||
qtaDaScaricare = qtaDaScaricare.setScale(0, RoundingMode.CEILING);
|
||||
}
|
||||
|
||||
String sql;
|
||||
if (UtilityString.isNullOrEmpty(materiale.getPartitaMag()) && righeScarichi.isEmpty()) {
|
||||
if ("S".equals(materiale.getFlagTracciabilita())) {
|
||||
/*Verifica quantità totale per partita disponibile, se non sufficiente allora
|
||||
boolean strictCheckPartita = UtilityString.hasContent(materiale.getPartitaMag());
|
||||
String filtroPartite = UtilityString.isNull(materiale.getPartitaMag(), materiale.getSystemNote());
|
||||
|
||||
/*Verifica quantità totale per partita disponibile, se non sufficiente allora
|
||||
va comunque scaricata la quantità mancante senza la partita*/
|
||||
String order = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "ORDINAMENTO_PARTITA", datiScarico.getCodMdep());
|
||||
if (order == null) {
|
||||
order = "ASC";
|
||||
}
|
||||
|
||||
// Acquisizione tipo metodo assegnazione partite su articoli che prevedono tracciabilità
|
||||
String tipoMetodo = "FIFO"; // Default
|
||||
if (order.compareTo("ASC") == 0) {
|
||||
tipoMetodo = "FIFO";
|
||||
} else if (order.compareTo("DESC") == 0) {
|
||||
tipoMetodo = "LIFO";
|
||||
} else if (order.compareTo("FEFO") == 0) {
|
||||
tipoMetodo = order;
|
||||
} else {
|
||||
tipoMetodo = "FIFO";
|
||||
}
|
||||
|
||||
sql =
|
||||
" select ISNULL(sum(qta),0) " +
|
||||
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ", 0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ")";
|
||||
|
||||
BigDecimal qtaTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
if (UtilityString.hasContent(filtroPartite) || materiale.getFlagTracciabilita().equalsIgnoreCase("S")) {
|
||||
|
||||
|
||||
BigDecimal qtaResidua = materiale.getQtaMate().subtract(qtaTot);
|
||||
sql = "";
|
||||
if (qtaResidua.setScale(0, RoundingMode.HALF_UP).compareTo(BigDecimal.ZERO) > 0) {
|
||||
sql =
|
||||
"select NULL as partita_mag, " +
|
||||
" " + UtilityDB.valueToString(qtaResidua) + " as qta_inevasa, " +
|
||||
UtilityDB.valueToString(materiale.getRigaOrd()) + " as riga_ord " +
|
||||
"UNION ALL";
|
||||
}
|
||||
|
||||
// Se non c'è partita di magazzino, ma la materia prima prevede tracciabilità allora l'assegnazione
|
||||
// della partita verrà fatta utilizzando la tecnica stabilita per l'azienda (FIFO, LIFO, FEFO)
|
||||
sql +=
|
||||
" select partita_mag, " +
|
||||
" qta as qta_inevasa, " +
|
||||
UtilityDB.valueToString(materiale.getRigaOrd()) + " as riga_ord " +
|
||||
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ",0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ")";
|
||||
} else {
|
||||
|
||||
// Se la partita non c'è e non è tracciabile allora non verrà fatta alcuna assegnazione di partita
|
||||
sql = "SELECT null as partita_mag, " +
|
||||
"CONVERT(numeric(20,5), " + UtilityDB.valueToString(materiale.getQtaMate()) + ") as qta_inevasa , " +
|
||||
UtilityDB.valueToString(materiale.getRigaOrd()) + " as riga_ord";
|
||||
String order = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "ORDINAMENTO_PARTITA", datiScarico.getCodMdep());
|
||||
if (order == null) {
|
||||
order = "ASC";
|
||||
}
|
||||
righeScarichi = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, RigaScaricoDTO.class);
|
||||
if (righeScarichi == null) {
|
||||
righeScarichi = new ArrayList<>();
|
||||
String ordineDiPrelievo;
|
||||
|
||||
switch (order) {
|
||||
case "DESC":
|
||||
ordineDiPrelievo = "LIFO";
|
||||
break;
|
||||
case "FEFO":
|
||||
ordineDiPrelievo = order;
|
||||
break;
|
||||
case "ASC":
|
||||
default:
|
||||
ordineDiPrelievo = "FIFO";
|
||||
break;
|
||||
}
|
||||
|
||||
String sql = it.integry.ems_model.utility.Query.format("select partita_mag, qta as qta_inevasa, {} as riga_ord\n" +
|
||||
"from dbo.getQtaXPartitaMag({},\n" +
|
||||
" {},\n" +
|
||||
" {},\n" +
|
||||
" {},\n" +
|
||||
" 0,\n" +
|
||||
" {},\n" +
|
||||
" {})",
|
||||
materiale.getRigaOrd(),
|
||||
datiScarico.getCodMdep(),
|
||||
materiale.getCodMart(),
|
||||
ordineDiPrelievo,
|
||||
qtaDaScaricare,
|
||||
materiale.getSystemNote(),
|
||||
dataDoc, CommonConstants.DATE_FORMAT_YMD);
|
||||
|
||||
List<RigaScaricoDTO> partiteDisponibili = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, RigaScaricoDTO.class);
|
||||
if (UtilityList.isNullOrEmpty(partiteDisponibili)) {
|
||||
partiteDisponibili = new ArrayList<>();
|
||||
}
|
||||
List<String> partitePrioritarie = Arrays.asList(StringUtils.split(filtroPartite, "|"));
|
||||
Iterator<RigaScaricoDTO> iteratorScarichi = partiteDisponibili.iterator();
|
||||
while (iteratorScarichi.hasNext() && UtilityBigDecimal.greaterThan(qtaDaScaricare, BigDecimal.ZERO)) {
|
||||
RigaScaricoDTO row = iteratorScarichi.next();
|
||||
if (!partitePrioritarie.contains(row.getPartitaMag()) && strictCheckPartita) {
|
||||
continue;
|
||||
}
|
||||
qtaDaScaricare = qtaDaScaricare.subtract(row.getQtaInevasa());
|
||||
righeScarichi.add(row);
|
||||
}
|
||||
}
|
||||
//se non ci sono più partite aggiungo una riga con partita a null e le quntità rimanenti
|
||||
if (UtilityBigDecimal.greaterThan(qtaDaScaricare, BigDecimal.ZERO)) {
|
||||
RigaScaricoDTO row = new RigaScaricoDTO();
|
||||
row.setQtaInevasa(qtaDaScaricare)
|
||||
.setRigaOrd(materiale.getRigaOrd());
|
||||
righeScarichi.add(row);
|
||||
}
|
||||
|
||||
for (RigaScaricoDTO row : righeScarichi) {
|
||||
|
||||
@@ -787,8 +787,9 @@ public class ProductionService {
|
||||
ordine.setOperation(OperationType.SELECT_OBJECT);
|
||||
entityProcessor.processEntity(ordine, multiDBTransactionManager);
|
||||
if (chiusuraLavorazioneDTO.isEffettuaCarico() || chiusuraLavorazioneDTO.isEffettuaScarico()) {
|
||||
entityBaseList.addAll(documentProdService.generaDocumentiLavorazione(chiusuraLavorazioneDTO));
|
||||
List<DtbDoct> documentiGenerati = (documentProdService.generaDocumentiLavorazione(chiusuraLavorazioneDTO));
|
||||
}
|
||||
|
||||
if (chiusuraLavorazioneDTO.isChiudiOrdine()) {
|
||||
boolean generateLotto = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "GENERA_LOTTO_PROD", "GENERA_LOTTO");
|
||||
|
||||
@@ -807,11 +808,8 @@ public class ProductionService {
|
||||
entityBaseList.add(terminaLavorazioneLinea(ordine, chiusuraLavorazioneDTO.getCodJfas()));
|
||||
}
|
||||
|
||||
if (chiusuraLavorazioneDTO.isSalvaDocumenti()) {
|
||||
entityProcessor.processEntityList(entityBaseList, true);
|
||||
UtilityEntity.throwEntitiesException(entityBaseList);
|
||||
//distribuzioneMateriali();
|
||||
}
|
||||
entityProcessor.processEntityList(entityBaseList, true);
|
||||
UtilityEntity.throwEntitiesException(entityBaseList);
|
||||
String syncChiusuraOrdineLavorazione = String.format("SET NOCOUNT ON; EXEC MES_SyncChiusuraOrdineLavorazione %d, %s, %s; SET NOCOUNT OFF;",
|
||||
ordine.getNumOrd(),
|
||||
UtilityDB.valueToString(ordine.getDataOrd()),
|
||||
@@ -847,7 +845,7 @@ public class ProductionService {
|
||||
|
||||
if (chiusuraLavorazioneDTO.getDataDoc() != null) {
|
||||
dataDoc = chiusuraLavorazioneDTO.getDataDoc();
|
||||
} else {
|
||||
} else {
|
||||
dataDoc = new Date();
|
||||
}
|
||||
|
||||
@@ -971,7 +969,7 @@ public class ProductionService {
|
||||
|
||||
List<DtbOrdSteps> steps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class);
|
||||
|
||||
if (!UtilityList.isNullOrEmpty(steps)){
|
||||
if (!UtilityList.isNullOrEmpty(steps)) {
|
||||
ordineLav.getDtbOrdSteps().addAll(steps.stream().peek(step -> step.setOperation(OperationType.UPDATE)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@@ -1659,29 +1657,29 @@ public class ProductionService {
|
||||
// String partitaMagQuery = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
//
|
||||
// if (partitaMagQuery == null) {
|
||||
// La partita per data scad non esiste, leggere l'ultima e creane una nuova
|
||||
String sql = Query.format(
|
||||
"SELECT MAX(partita_mag)\n" +
|
||||
"FROM mtb_partita_mag\n" +
|
||||
"WHERE cod_mart = %s\n" +
|
||||
"AND partita_mag_prod = %s\n",
|
||||
codMart,
|
||||
partitaMag
|
||||
);
|
||||
// La partita per data scad non esiste, leggere l'ultima e creane una nuova
|
||||
String sql = Query.format(
|
||||
"SELECT MAX(partita_mag)\n" +
|
||||
"FROM mtb_partita_mag\n" +
|
||||
"WHERE cod_mart = %s\n" +
|
||||
"AND partita_mag_prod = %s\n",
|
||||
codMart,
|
||||
partitaMag
|
||||
);
|
||||
|
||||
String lastPartitaMag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
String lastPartitaMag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
|
||||
if (lastPartitaMag != null) {
|
||||
char lastPartitaChar = lastPartitaMag.charAt(lastPartitaMag.length() - 1);
|
||||
if (lastPartitaMag != null) {
|
||||
char lastPartitaChar = lastPartitaMag.charAt(lastPartitaMag.length() - 1);
|
||||
|
||||
if (Character.isDigit(lastPartitaChar)) {
|
||||
lastPartitaChar = 'A';
|
||||
} else {
|
||||
lastPartitaChar++;
|
||||
}
|
||||
|
||||
partitaMag += lastPartitaChar;
|
||||
if (Character.isDigit(lastPartitaChar)) {
|
||||
lastPartitaChar = 'A';
|
||||
} else {
|
||||
lastPartitaChar++;
|
||||
}
|
||||
|
||||
partitaMag += lastPartitaChar;
|
||||
}
|
||||
// } else {
|
||||
// partitaMag = partitaMagQuery;
|
||||
// }
|
||||
@@ -1727,19 +1725,19 @@ public class ProductionService {
|
||||
return entityBaseList;
|
||||
}
|
||||
|
||||
public String getCodDtipCaricoLavorazione(boolean isOrdineInterno)throws Exception {
|
||||
if (isOrdineInterno){
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"W_PORDI_RC","SETUP_DOCUMENTI","COD_DTIP_CAR");
|
||||
}else {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"DATI_AZIENDA","CONTO_LAVORO","COD_DTIP_CLAV");
|
||||
public String getCodDtipCaricoLavorazione(boolean isOrdineInterno) throws Exception {
|
||||
if (isOrdineInterno) {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "SETUP_DOCUMENTI", "COD_DTIP_CAR");
|
||||
} else {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "DATI_AZIENDA", "CONTO_LAVORO", "COD_DTIP_CLAV");
|
||||
}
|
||||
}
|
||||
|
||||
public String getCodDtipScaricoLavorazione(boolean isOrdineInterno)throws Exception {
|
||||
if (isOrdineInterno){
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"W_PORDI_RC","SETUP_DOCUMENTI","COD_DTIP_SCAR");
|
||||
}else {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"DATI_AZIENDA","CONTO_LAVORO","COD_DTIP_SLAV");
|
||||
public String getCodDtipScaricoLavorazione(boolean isOrdineInterno) throws Exception {
|
||||
if (isOrdineInterno) {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "SETUP_DOCUMENTI", "COD_DTIP_SCAR");
|
||||
} else {
|
||||
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "DATI_AZIENDA", "CONTO_LAVORO", "COD_DTIP_SLAV");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user