Merge branch 'develop' into feature/TipoValoreCq

This commit is contained in:
2024-11-08 15:12:03 +01:00
6 changed files with 115 additions and 80 deletions

View File

@@ -0,0 +1,21 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20241107142940 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("alter table mtb_colr add cod_art_for varchar(25)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20241108132034 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
dropFunction("getListinoVendita_new");
dropFunction("getListinoVendita_old");
dropFunction("getPromozioneVendita_new");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -619,7 +619,7 @@ public class AccountingRules extends QueryRules {
} else {
String sql =
Query.format(
"SELECT cast(count(*) as bit)" +
"SELECT cast(case when count(*) > 1 THEN 1 ELSE 0 eND as bit) " +
" FROM ctb_parr " +
" WHERE cod_anag = %s AND " +
"tipo_anag = %s AND " +

View File

@@ -148,6 +148,9 @@ public class MtbColr extends EntityBase implements EquatableEntityInterface<MtbC
@SqlField(value = "peso_lordo_kg", nullable = false)
private BigDecimal pesoLordoKg;
@SqlField(value = "cod_art_for", maxLength = 25)
private String codArtFor;
@EntityChild
MtbColrInfoProd mtbColrInfoProd;
@@ -536,6 +539,15 @@ public class MtbColr extends EntityBase implements EquatableEntityInterface<MtbC
return this;
}
public String getCodArtFor() {
return codArtFor;
}
public MtbColr setCodArtFor(String codArtFor) {
this.codArtFor = codArtFor;
return this;
}
public MtbPartitaMag getMtbPartitaMag() {
return mtbPartitaMag;
}

View File

@@ -44,6 +44,7 @@ public class CaricoProdFinLavDTO {
private String terminaLavorazioneLinea;
private String activityID;
private Integer idLotto;
private boolean escludiArticoliGestitiDaWmsInScarico;
public String getCodJfas() {
return codJfas;
@@ -207,6 +208,10 @@ public class CaricoProdFinLavDTO {
return terminaLavorazione;
}
public boolean isTerminaLavorazione() {
return "S".equalsIgnoreCase(terminaLavorazione);
}
@XmlElement(name = "TERMINA_LAVORAZIONE")
public void setTerminaLavorazione(String terminaLavorazione) {
this.terminaLavorazione = terminaLavorazione;
@@ -361,6 +366,15 @@ public class CaricoProdFinLavDTO {
return this;
}
public boolean isEscludiArticoliGestitiDaWmsInScarico() {
return escludiArticoliGestitiDaWmsInScarico;
}
public CaricoProdFinLavDTO setEscludiArticoliGestitiDaWmsInScarico(boolean escludiArticoliGestitiDaWmsInScarico) {
this.escludiArticoliGestitiDaWmsInScarico = escludiArticoliGestitiDaWmsInScarico;
return this;
}
public String getGenerateJson() {
return generateJson;
}

View File

@@ -825,7 +825,7 @@ public class DocumentProdService {
docT.getDtbDocr().add(docR);
// Chiusura forzata ordine
if ("S".equals(carico.getTerminaLavorazione())) {
if (carico.isTerminaLavorazione()) {
DtbOrdt ordT = new DtbOrdt();
ordT.setOperation(OperationType.UPDATE);
ordT.setGestione(gestione);
@@ -1027,21 +1027,19 @@ public class DocumentProdService {
" data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " +
" num_ord = " + UtilityDB.valueToString(numOrd);
HashMap<String, Object> datiOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sql);
if (datiOrd != null && datiOrd.size() > 0) {
if (datiOrd != null && !datiOrd.isEmpty()) {
codProd = (String) datiOrd.get("cod_prod");
partitaMag = (String) datiOrd.get("partita_mag");
}
if (carico.getTerminaLavorazione().compareTo("N") == 0) {
if (carico.isTerminaLavorazione()) {
if (codJfas != null) {
condFase = "mtb_colt.cod_jfas = " + UtilityDB.valueToString(codJfas);
}
}
String flagCaricoImmediato = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "GENERA_CARICO_SCARICO_IMMEDIATO", carico.getCodMdep());
if (UtilityString.isNullOrEmpty(flagCaricoImmediato)) {
flagCaricoImmediato = "N";
}
boolean flagCaricoImmediato = setupGest.getSetupDepoBoolean(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "GENERA_CARICO_SCARICO_IMMEDIATO", carico.getCodMdep());
/*Se la data del documento non è stata passata da fuori allora la data documento dovrà essere quella del collo */
List<DataDocFromCollo> results = new ArrayList<>();
@@ -1066,7 +1064,7 @@ public class DocumentProdService {
sql = UtilityDB.addwhereCond(sql, condFase, false);
results = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DataDocFromCollo.class);
if ((results == null || results.size() == 0) && "S".equals(carico.getTerminaLavorazione()) && flagCaricoImmediato.compareTo("N") == 0) {
if ((results == null || results.isEmpty()) && "S".equals(carico.getTerminaLavorazione()) && !flagCaricoImmediato) {
throw new Exception("Non ci sono colli di produzione generati per la produzione in corso");
}
} else {
@@ -1120,7 +1118,7 @@ public class DocumentProdService {
loadColli.setColli(colli);
if (loadColli.getColli() != null && loadColli.getColli().size() > 0) {
if (loadColli.getColli() != null && !loadColli.getColli().isEmpty()) {
DtbDoct docT = null;
docT = loadColliService.createDocFromColli(multiDBTransactionManager, loadColli);
docT
@@ -1136,7 +1134,7 @@ public class DocumentProdService {
}
// Chiusura forzata ordine
if ("S".equals(carico.getTerminaLavorazione())) {
if (carico.isTerminaLavorazione()) {
DtbOrdt ordT = new DtbOrdt()
.setGestione(gestione)
.setDataOrd(dataOrd)
@@ -1664,50 +1662,28 @@ public class DocumentProdService {
Connection conn = multiDBTransactionManager.getPrimaryConnection();
// Acquisizione dati configurazione e passati dall'esterno
String scaricoUnico = setupGest.getSetup(conn, "CARICO_SCARICO_PF", "SETUP", "SCARICO_UNICO"); //todo Creare query su STB_GEST_SEUP
String generateLotto = setupGest.getSetup(conn, "W_PORDI_RC", "GENERA_LOTTO_PROD", "GENERA_LOTTO");
if (UtilityString.isNullOrEmpty(generateLotto)) {
generateLotto = "N";
}
boolean scaricoUnico = setupGest.getSetupBoolean(conn, "CARICO_SCARICO_PF", "SETUP", "SCARICO_UNICO"); //todo Creare query su STB_GEST_SEUP
boolean generateLotto = setupGest.getSetupBoolean(conn, "W_PORDI_RC", "GENERA_LOTTO_PROD", "GENERA_LOTTO");
String gestione = carico.getGestione();
Integer numOrd = carico.getNumOrd();
Date dataOrd = carico.getDataOrd();
Date dataProd = carico.getDataProd();
String effettuaScaricoMateriali = carico.getEffettuaScaricoMateriali();
String effettuaCaricoProdotto = carico.getEffettuaCaricoProdotto();
Date dataDoc = carico.getDataDoc();
String codAnag = carico.getCodAnag();
String codMdep = carico.getCodMdep();
String codMdepScar = carico.getCodMdepScar();
String codDtipScar = carico.getCodDtipScar();
String terminaLavorazione = carico.getTerminaLavorazione();
String serDoc = carico.getSerDoc();
Date dataVersamento = carico.getDataVersamento();
String creaColloVersaDaColloCarico = carico.getCreaColloVersDaColloCarico();
String creaScaricoDaCollo = carico.getCreaScaricoDaCollo();
// Impostazione default
if (UtilityString.isNullOrEmpty(creaScaricoDaCollo)) {
creaScaricoDaCollo = "N";
}
if (UtilityString.isNullOrEmpty(effettuaScaricoMateriali)) {
effettuaScaricoMateriali = "S";
}
if (UtilityString.isNullOrEmpty(effettuaCaricoProdotto)) {
effettuaCaricoProdotto = "S";
}
if (UtilityString.isNullOrEmpty(codMdepScar)) {
codMdepScar = codMdep;
}
if (UtilityString.isNullOrEmpty(terminaLavorazione)) {
terminaLavorazione = "N";
}
if (UtilityString.isNullOrEmpty(serDoc)) {
serDoc = null;
}
if (UtilityString.isNullOrEmpty(scaricoUnico)) {
scaricoUnico = "N";
}
String order = setupGest.getSetupDepo(conn, "CARICO_SCARICO_PF", "SETUP", "ORDINAMENTO_PARTITA", codMdep);
if (order == null) {
@@ -1734,7 +1710,7 @@ public class DocumentProdService {
" isnull(ordL.cod_jfas, jtb_cicl.cod_jfas) as cod_jfas, " +
" ordL.cod_jcom, " +
" jtb_lotr.id_lotto, " +
" jtb_lotr.cod_jfas, " +
" jtb_lotr.cod_jfas AS cod_jfas_lotto, " +
" dtb_ordr.num_cnf " +
" FROM dtb_ordt ordL LEFT OUTER JOIN jtb_lotr ON ordL.gestione = jtb_lotr.gestione AND " +
" ordL.data_ord = jtb_lotr.data_ord AND " +
@@ -1751,30 +1727,24 @@ public class DocumentProdService {
" ordL.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " +
" ordL.num_ord = " + UtilityDB.valueToString(numOrd);
info = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
res = info.executeQuery();
Integer rows = UtilityDB.countRow(res);
if (rows == 0) {
throw new Exception("L'ordine di lavorazione n." + UtilityDB.valueToString(numOrd) + " del " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " e/o la distinta corrispondente presentano delle anomalie.");
}
while (res.next()) {
codProd = res.getString(1);
untMisProd = res.getString(2);
rapConvProd = res.getBigDecimal(3);
partitaMagProd = res.getString(4);
codJfas = res.getString(5);
codJcom = res.getString(6);
idLotto = res.getInt(7);
codJfasLotto = res.getString(8);
numCnfProd = res.getBigDecimal(9);
}
res.close();
info.close();
final HashMap<String, Object> resultOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql);
codProd = UtilityHashMap.getValueIfExists(resultOrd, "cod_prod");
untMisProd = UtilityHashMap.getValueIfExists(resultOrd, "unt_mis_prod");
rapConvProd = UtilityHashMap.getValueIfExists(resultOrd, "rap_conv_prod");
partitaMagProd = UtilityHashMap.getValueIfExists(resultOrd, "partita_mag");
codJfas = UtilityHashMap.getValueIfExists(resultOrd, "cod_jfas");
codJcom = UtilityHashMap.getValueIfExists(resultOrd, "cod_jcom");
idLotto = UtilityHashMap.getValueIfExists(resultOrd, "id_lotto");
codJfasLotto = UtilityHashMap.getValueIfExists(resultOrd, "cod_jfas_lotto");
numCnfProd = UtilityHashMap.getValueIfExists(resultOrd, "num_cnf");
// Acquisizione dati prodotto dall'estetno
BigDecimal qtaProdUMMag = carico.getProdotti().getRow().get(0).getQtaProdAna();
BigDecimal numConf = carico.getProdotti().getRow().get(0).getNumCart();
BigDecimal qtaProd = qtaProdUMMag.divide(rapConvProd, 5, RoundingMode.HALF_UP);
if (numConf == null) {
numConf = BigDecimal.ZERO;
}
@@ -1787,7 +1757,7 @@ public class DocumentProdService {
// Se è attiva l'opzione scarico unico allora lo scarico degli imnballaggi e delle materie prime deve essere
// fatto sempre sullo stesso documento nella giornata
BigDecimal qtaProdScaricoPrec = BigDecimal.ZERO;
if (scaricoUnico.compareTo("S") == 0) {
if (scaricoUnico) {
sql =
" SELECT dtb_doct.num_doc, " +
" dtb_doct.ser_doc, " +
@@ -1799,17 +1769,12 @@ public class DocumentProdService {
" dtb_doct.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.num_ord = " + UtilityDB.valueToString(numOrd);
info = conn.prepareStatement(sql);
res = info.executeQuery();
final HashMap<String, Object> resultDtbDoct = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql);
existScar = resultDtbDoct != null && !resultDtbDoct.isEmpty();
while (res.next()) {
existScar = true;
numDoc = res.getInt(1);
serDoc = res.getString(2);
qtaProdScaricoPrec = res.getBigDecimal(3);
}
res.close();
info.close();
numDoc = UtilityHashMap.getValueIfExists(resultDtbDoct, "num_doc");
serDoc = UtilityHashMap.getValueIfExists(resultDtbDoct, "ser_doc");
qtaProdScaricoPrec = UtilityHashMap.getValueIfExists(resultDtbDoct, "qta_prod");
}
// Creazione testata documento di scarico (Imballaggi e materiali se presenti)
@@ -1841,7 +1806,7 @@ public class DocumentProdService {
arrayEntity.add(docT);
// Creazione riga commento
if (scaricoUnico.compareTo("S") == 0) {
if (scaricoUnico) {
DtbDocr docR = new DtbDocr();
docR.setOperation(OperationType.INSERT);
docR.setDescrizione("PRODUZIONE DELLE " + new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(new Date()));
@@ -1850,7 +1815,7 @@ public class DocumentProdService {
// Aggancio condizione che esclude eventuali materiali già presenti in colli di versamento
String tableMPScarDaCollo = "", condMPScarDaCollo = "";
if ("S".compareTo(creaScaricoDaCollo) == 0) {
if (carico.isCreaScaricoDaCollo()) {
condMPScarDaCollo = "righeOrdScar.num_ord is null";
tableMPScarDaCollo = "LEFT OUTER JOIN ( select distinct mtb_colt.gestione, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.riga_ord " +
" from mtb_colt, mtb_colr " +
@@ -1885,15 +1850,14 @@ public class DocumentProdService {
" dtb_ordr.num_fase, " +
" round(dtb_ordt.qta_evasa_prod * dtb_ordt.rap_conv_prod, 5), " +
" dbo.f_getTipoGruppoMP(dtb_ordr.cod_mart) as gruppo_conto_mp " +
" FROM dtb_ordt, " +
" mtb_aart, " +
" dtb_ordr " +
" FROM dtb_ordt " +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione " +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord " +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord " +
" INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart " +
(carico.isEscludiArticoliGestitiDaWmsInScarico() ? " INNER JOIN dbo.mvw_articoli_esclusi_wms mdaew ON mtb_aart.cod_mart = mdaew.cod_mart " : "") +
tableMPScarDaCollo +
" WHERE dtb_ordr.cod_mart = mtb_aart.cod_mart AND " +
" dtb_ordt.gestione = dtb_ordr.gestione AND " +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND " +
" dtb_ordt.num_ord = dtb_ordr.num_ord AND " +
" dtb_ordr.flag_evaso_forzato = 'N' AND " +
" WHERE dtb_ordr.flag_evaso_forzato = 'N' AND " +
" dtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " +
" dtb_ordr.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd);
@@ -2014,7 +1978,7 @@ public class DocumentProdService {
infoDati = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
resDati = infoDati.executeQuery();
rows = UtilityDB.countRow(resDati);
int rows = UtilityDB.countRow(resDati);
while (resDati.next()) {
Integer rigaOrdMate = resDati.getInt(1);
BigDecimal qtaDaScaricareOrd = resDati.getBigDecimal(2);
@@ -2197,7 +2161,7 @@ public class DocumentProdService {
// Verifica chiusura lotto di produzione se tutti gli ordini ad esso associati sono evasi
Integer ordInevasi = null;
if ("S".equals(terminaLavorazione) && "S".equals(generateLotto)) {
if (carico.isTerminaLavorazione() && generateLotto) {
sql =
" SELECT ISNULL(sum(CASE WHEN flag_evaso_prod = 'I' THEN 1 ELSE 0 END), 0) as ordini_inevasi " +
" FROM jtb_lotr, " +
@@ -2225,7 +2189,7 @@ public class DocumentProdService {
lotT.setIdLotto(idLotto);
lotT.setCodJfas(codJfasLotto);
lotT.setDataChiusura(dataDoc);
lotT.setFlagComp(terminaLavorazione);
lotT.setFlagComp(carico.isTerminaLavorazione() ? "S" : "N");
arrayEntity.add(lotT);
}
}