From c7a96834a2b69d30cf443556893c9e6024367854 Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 28 Jul 2025 17:54:36 +0200 Subject: [PATCH 01/28] revisione procedura di importazione ordini web --- .../order/Import/dto/ImporOrdiniWebDTO.java | 56 + .../Import/dto/ImportOrdiniWebRowDTO.java | 31 + .../service/OrdiniWebImportService.java | 1799 +++++++---------- 3 files changed, 795 insertions(+), 1091 deletions(-) create mode 100644 ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java create mode 100644 ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImportOrdiniWebRowDTO.java diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java new file mode 100644 index 0000000000..17bbf3aedc --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java @@ -0,0 +1,56 @@ +package it.integry.ems.order.Import.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import it.integry.ems_model.annotation.EntityChild; +import it.integry.ems_model.annotation.SqlField; +import it.integry.ems_model.entity.WdtbOrdt; + +public class ImporOrdiniWebDTO { + @SqlField + private WdtbOrdt wdtbOrdt; + + @SqlField(value = "flag_td") + private String flagTd; + + @SqlField(value = "cod_vlis_clie") + private String codVlisClie; + + @SqlField(value = "cod_vlis_dest") + private String codVlisDest; + + public WdtbOrdt getWdtbOrdt() { + return wdtbOrdt; + } + + public ImporOrdiniWebDTO setWdtbOrdt(WdtbOrdt wdtbOrdt) { + this.wdtbOrdt = wdtbOrdt; + return this; + } + + public String getFlagTd() { + return flagTd; + } + + public ImporOrdiniWebDTO setFlagTd(String flagTd) { + this.flagTd = flagTd; + return this; + } + + public String getCodVlisClie() { + return codVlisClie; + } + + public ImporOrdiniWebDTO setCodVlisClie(String codVlisClie) { + this.codVlisClie = codVlisClie; + return this; + } + + public String getCodVlisDest() { + return codVlisDest; + } + + public ImporOrdiniWebDTO setCodVlisDest(String codVlisDest) { + this.codVlisDest = codVlisDest; + return this; + } +} diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImportOrdiniWebRowDTO.java b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImportOrdiniWebRowDTO.java new file mode 100644 index 0000000000..1342332789 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImportOrdiniWebRowDTO.java @@ -0,0 +1,31 @@ +package it.integry.ems.order.Import.dto; + +import it.integry.ems_model.annotation.SqlField; +import it.integry.ems_model.entity.WdtbOrdr; +import it.integry.ems_model.entity.WdtbOrdt; + +public class ImportOrdiniWebRowDTO { + @SqlField + private WdtbOrdr wdtbOrdr; + + @SqlField(value = "flag_stato_art") + private String flagStatoArt; + + public WdtbOrdr getWdtbOrdr() { + return wdtbOrdr; + } + + public ImportOrdiniWebRowDTO setWdtbOrdr(WdtbOrdr wdtbOrdr) { + this.wdtbOrdr = wdtbOrdr; + return this; + } + + public String getFlagStatoArt() { + return flagStatoArt; + } + + public ImportOrdiniWebRowDTO setFlagStatoArt(String flagStatoArt) { + this.flagStatoArt = flagStatoArt; + return this; + } +} diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java index 3ac8b9e90f..6515f93618 100644 --- a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java @@ -9,6 +9,8 @@ import it.integry.common.var.CommonConstants; import it.integry.ems.Import.dto.ImportRequestDTO; import it.integry.ems.file_formatter.csv.CsvMapper; import it.integry.ems.javabeans.RequestDataDTO; +import it.integry.ems.order.Import.dto.ImporOrdiniWebDTO; +import it.integry.ems.order.Import.dto.ImportOrdiniWebRowDTO; import it.integry.ems.order.Import.dto.OrdiniYocabeDTO; import it.integry.ems.response.EsitoType; import it.integry.ems.response.ServiceRestResponse; @@ -37,6 +39,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -174,18 +177,14 @@ public class OrdiniWebImportService { } public List importOrdiniWEB(String type, String format, ImportRequestDTO body) throws Exception { - List result = new ArrayList(); - - final Connection conn = multiDBTransactionManager.getPrimaryDatasource().getConnection(); // Acquisizione data importazione dal server DB(deve essere univoca per l'intera importazione) logger.info("Start Import Ordini WBA"); - Date importDate = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, "SELECT getDate()"); // Acquisizione di chi sta importando String query = "SELECT full_name FROM stb_user WHERE user_name = " + UtilityDB.valueToString(requestDataDTO.getUsername()); - String controllatoDa = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query); + String controllatoDa = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); - HashMap importSetupSection = setupGest.getImportSetupSection(conn, type, format); + HashMap importSetupSection = setupGest.getImportSetupSection(multiDBTransactionManager.getPrimaryConnection(), type, format); // ACQUISIZIONE DATI CONDIZIONE DI WHERE ED EVENTUALE DEPOSITO String principalWhereCond = null; @@ -205,8 +204,7 @@ public class OrdiniWebImportService { /* VERIFICA SE I DATI DI QTA2 e QTA3 devono essere calcolati in base ai dati di listino. Solitamente questa logica è valida per le azienda FLOROVIVAISTICHE in quanto il rapporto di conversione è variabili in base alle altezze che sono gestite direttamente dal listino di vendita */ - String calcQtaDaListino = setupGest.getSetup(conn, "DATI_AZIENDA", "DOCU_ORD", "STRATI_PEDANE_DA_LISTINO"); - if (UtilityString.isNullOrEmpty(calcQtaDaListino)) calcQtaDaListino = "N"; + boolean calcQtaDaListino = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "DATI_AZIENDA", "DOCU_ORD", "STRATI_PEDANE_DA_LISTINO"); String flagSospeso = UtilityString.streNull(importSetupSection.get("FLAG_SOSPESO")); @@ -216,57 +214,43 @@ public class OrdiniWebImportService { // SETUP per importazione ordine di lavoro in caso di distinta senza righe boolean importOrdLav = UtilityString.equalsIgnoreCase(importSetupSection.get("SETUP_LAV"), "S"); - String queryWebOrd = "SELECT DISTINCT wdtb_ordt.gestione, " + - " wdtb_ordt.data_ord, " + - " wdtb_ordt.num_ord, " + - " wdtb_ordt.serie, " + - " CASE WHEN LEN(" + UtilityDB.valueToString(flagSospeso) + ") <> 0 THEN " + UtilityDB.valueToString(flagSospeso) + " ELSE IsNull(wdtb_ordt.flag_sospeso, 'N') END AS 'flag_sospeso'," + - " IsNull(wdtb_ordt.cod_mdep, " + UtilityDB.valueToString(codMdep) + " ) as cod_mdep, " + - " CASE WHEN wdtb_ordt.listino IS NULL " + - " THEN (CASE WHEN vtb_dest.cod_vlis IS NOT NULL THEN vtb_dest.cod_vlis ELSE vtb_clie.cod_vlis END) " + - " ELSE wdtb_ordt.listino END as listino , " + - " sum(wdtb_ordr.qta_ord) as tot_qta, " + - " wdtb_ordt.ean_fidelity, " + - " wdtb_ordt.flag_annulla, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.flag_prz_iva " + - "FROM wdtb_ordt LEFT OUTER JOIN wdtb_new_cli_ord ON wdtb_ordt.gestione = wdtb_new_cli_ord.gestione AND " + - " wdtb_ordt.data_ord = wdtb_new_cli_ord.data_ord AND" + - " wdtb_ordt.num_ord = wdtb_new_cli_ord.num_ord AND " + - " (( wdtb_new_cli_ord.serie is not null and wdtb_ordt.serie = wdtb_new_cli_ord.serie ) or " + - " ( wdtb_new_cli_ord.serie is null and wdtb_ordt.cod_anag = wdtb_new_cli_ord.cod_anag )) " + - " LEFT OUTER JOIN vtb_clie ON wdtb_ordt.cod_anag = vtb_clie.cod_anag " + - " LEFT OUTER JOIN gtb_anag ON wdtb_ordt.cod_anag = gtb_anag.cod_anag " + - " LEFT OUTER JOIN vtb_dest ON wdtb_ordt.cod_anag = vtb_dest.cod_anag AND wdtb_ordt.cod_vdes = vtb_dest.cod_vdes, " + - " wdtb_ordr " + - "WHERE wdtb_ordt.flag_elaborato = 'N' AND " + - " (wdtb_new_cli_ord.data_ord IS NULL OR wdtb_new_cli_ord.cod_anag_imported is NOT NULL) AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie " + - "GROUP BY wdtb_ordt.gestione, " + - " wdtb_ordt.data_ord, " + - " wdtb_ordt.num_ord, " + - " wdtb_ordt.serie, " + - " wdtb_ordt.flag_sospeso, " + - " wdtb_ordt.cod_mdep," + - " CASE WHEN wdtb_ordt.listino IS NULL " + - " THEN (CASE WHEN vtb_dest.cod_vlis IS NOT NULL THEN vtb_dest.cod_vlis ELSE vtb_clie.cod_vlis END) " + - " ELSE wdtb_ordt.listino END, " + - " wdtb_ordt.ean_fidelity, " + - " wdtb_ordt.flag_annulla, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.flag_prz_iva " + - "ORDER BY wdtb_ordt.gestione, " + - " wdtb_ordt.data_ord, " + - " wdtb_ordt.serie, " + - " wdtb_ordt.num_ord "; + // ACQUISIZIONE EVENTUALE CODICE ALIQUOTA IVA OMAGGI + query = "SELECT CASE WHEN flag_set_iva_omaggi = 'S' THEN cod_iva_omaggi ELSE null END as cod_iva_omaggi FROM azienda "; + String codAliqOmg = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + + boolean calcDataCons = importSetupSection.get("CALC_DATA_CONS") == null ? false : importSetupSection.get("CALC_DATA_CONS").equalsIgnoreCase("S"); + boolean setDecorrenza = importSetupSection.get("SET_DECORRENZA") == null ? false : importSetupSection.get("SET_DECORRENZA").equalsIgnoreCase("S"); + + List wdtbOrdts = new ArrayList<>(); + String queryWebOrd = + "SELECT wdtb_ordt.*, " + + " vtb_clie.cod_vlis as cod_vlis_clie, " + + " vtb_dest.cod_vlis as cod_vlis_dest, " + + " vtb_clie.flag_td " + + "FROM wdtb_ordt LEFT OUTER JOIN wdtb_new_cli_ord ON wdtb_ordt.gestione = wdtb_new_cli_ord.gestione AND " + + " wdtb_ordt.data_ord = wdtb_new_cli_ord.data_ord AND" + + " wdtb_ordt.num_ord = wdtb_new_cli_ord.num_ord AND " + + " (( wdtb_new_cli_ord.serie is not null and wdtb_ordt.serie = wdtb_new_cli_ord.serie ) or " + + " ( wdtb_new_cli_ord.serie is null and wdtb_ordt.cod_anag = wdtb_new_cli_ord.cod_anag )) " + + " LEFT OUTER JOIN vtb_clie ON wdtb_ordt.cod_anag = vtb_clie.cod_anag " + + " LEFT OUTER JOIN gtb_anag ON wdtb_ordt.cod_anag = gtb_anag.cod_anag " + + " LEFT OUTER JOIN vtb_dest ON wdtb_ordt.cod_anag = vtb_dest.cod_anag AND wdtb_ordt.cod_vdes = vtb_dest.cod_vdes " + + "WHERE wdtb_ordt.flag_elaborato = 'N' AND " + + " (wdtb_new_cli_ord.data_ord IS NULL OR wdtb_new_cli_ord.cod_anag_imported is NOT NULL) AND " + + " EXISTS(SELECT *\n" + + " FROM wdtb_ordr\n" + + " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione\n" + + " AND wdtb_ordt.data_ord = wdtb_ordr.data_ord\n" + + " AND wdtb_ordt.num_ord = wdtb_ordr.num_ord\n" + + " AND wdtb_ordt.serie = wdtb_ordr.serie) " + + "ORDER BY wdtb_ordt.gestione, " + + " wdtb_ordt.data_ord, " + + " wdtb_ordt.serie, " + + " wdtb_ordt.num_ord "; queryWebOrd = UtilityDB.addwhereCond(queryWebOrd, principalWhereCond, true); - List> ordiniWeb = UtilityDB.executeSimpleQuery(conn, queryWebOrd); - + List ordiniWeb = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), queryWebOrd, ImporOrdiniWebDTO.class); String untMis2 = null; String untMis3 = null; @@ -276,56 +260,32 @@ public class OrdiniWebImportService { BigDecimal qtaCnf = BigDecimal.ONE; BigDecimal qtaOrd2 = BigDecimal.ZERO; BigDecimal qtaOrd3 = BigDecimal.ZERO; - for (HashMap ordine : ordiniWeb) { + for (ImporOrdiniWebDTO ordine : ordiniWeb) { // INIZIALIZZAZIONE VARIABILE ORDINE - List orderEntities = new ArrayList(); - String gestione = (String) ordine.get("gestione"); - Date dataOrd = (Date) ordine.get("data_ord"); - int numOrd = (int) ordine.get("num_ord"); - String serOrd = (String) ordine.get("serie"); - flagSospeso = (String) ordine.get("flag_sospeso"); - codMdep = (String) ordine.get("cod_mdep"); - String codVlis = (String) ordine.get("listino"); - BigDecimal qtaOrdTot = (BigDecimal) ordine.get("tot_qta"); - String eanFidelity = (String) ordine.get("ean_fidelity"); - String flagAnnulla = (String) ordine.get("flag_annulla"); - String codAnagCheck = (String) ordine.get("cod_anag"); - String flagPrzIva = (String) ordine.get("flag_prz_iva"); - - // Inizializzazione entity ordine web da aggiornare - WdtbOrdt wdtbOrdt = new WdtbOrdt() - .setGestione(gestione) - .setDataOrd(dataOrd) - .setNumOrd(numOrd); - if (elencoClientiNoImport != null && !elencoClientiNoImport.isEmpty()) { - if (elencoClientiNoImport.indexOf("|" + codAnagCheck + "|") >= 0) { + if (elencoClientiNoImport.indexOf("|" + ordine.getWdtbOrdt().getCodAnag() + "|") >= 0) { continue; } } - // ACQUISIZIONE EVENTUALE CODICE ALIQUOTA IVA OMAGGI - query = "SELECT CASE WHEN flag_set_iva_omaggi = 'S' THEN cod_iva_omaggi ELSE null END as cod_iva_omaggi FROM azienda "; - String codAliqOmg = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query); + if (!UtilityString.isNullOrEmpty(flagSospeso)) + ordine.getWdtbOrdt().setFlagSospeso(flagSospeso); + if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodMdep())) + ordine.getWdtbOrdt().setCodMdep(codMdep); - // VERIFICA SE SI TRATTA DI UN CLIENTE SERVITO IN TD - query = "SELECT vtb_clie.flag_td " + - " FROM vtb_clie, " + - " wdtb_ordt " + - " WHERE vtb_clie.cod_anag = wdtb_ordt.cod_anag AND " + - " wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordt.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + - " wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - " wdtb_ordt.serie = " + UtilityDB.valueToString(serOrd); - - String flagTD = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query); - if (UtilityString.isNullOrEmpty(flagTD)) flagTD = "N"; + if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getListino())) + ordine.getWdtbOrdt().setListino(UtilityString.isNull(ordine.getCodVlisDest(), ordine.getCodVlisClie())); + // Inizializzazione entity ordine web da aggiornare + WdtbOrdt wdtbOrdt = new WdtbOrdt() + .setGestione(ordine.getWdtbOrdt().getGestione()) + .setDataOrd(ordine.getWdtbOrdt().getDataOrd()) + .setNumOrd(ordine.getWdtbOrdt().getNumOrd()) + .setSerie(ordine.getWdtbOrdt().getSerie()); // ACQUISIZIONE ELENCO FORNITORI TD DELL'ORDINE (SOLO SE IL CLIENTE E' IN TD) // ALTRIMENTI IL FORNITORE VIENE IMPOSTATO A NULL - String codFornTD = null; - Boolean generateOrdTrasfMerce = false; - if (flagTD.equalsIgnoreCase("S")) { + List codFornTDList = new ArrayList<>(); + if (ordine.getFlagTd().equalsIgnoreCase("S")) { query = "SELECT DISTINCT mtb_aart_anag.cod_anag " + " FROM mtb_aart_anag, " + " wdtb_ordr, " + @@ -335,890 +295,555 @@ public class OrdiniWebImportService { " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + " wdtb_ordr.serie = wdtb_ordt.serie AND " + " mtb_aart_anag.cod_mart = wdtb_ordr.cod_mart AND " + - " wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordt.data_ord = " + UtilityDB.valueToString(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd)) + " AND " + - " wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - " wdtb_ordt.serie = " + UtilityDB.valueToString(serOrd); + " wdtb_ordt.gestione = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getGestione()) + " AND " + + " wdtb_ordt.data_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getDataOrd()) + " AND " + + " wdtb_ordt.num_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getNumOrd()) + " AND " + + " wdtb_ordt.serie = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getSerie()); + codFornTDList = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); } else { - query = "SELECT CONVERT(VARCHAR(5), NULL) as cod_forn_td"; + codFornTDList.add(null); } - PreparedStatement innerPs = conn.prepareStatement(query); - ResultSet innerRs = innerPs.executeQuery(); - while (innerRs.next()) { - codFornTD = innerRs.getString(1); - + Date importDate = new Date(); + for (String codFornTD : codFornTDList) { try { - // VERIFICA ESISTENZA ORDINE DEFINITIVO - boolean orderExist = false; - DtbOrdt dtbOrdt = new DtbOrdt(); - Integer numOrdDef = null; - String dataOrdDef = null; - ServiceRestResponse existOrderResponse = existOrderDef(multiDBTransactionManager, conn, requestDataDTO.getUsername(), gestione, dataOrd, serOrd, numOrd, codFornTD, importDate); - if (existOrderResponse.getEsito().equals(EsitoType.OK)) { - if (existOrderResponse.getEntity() != null) { - // ACQUISIZIONE ESTREMI ORDINE DEFINITIVO DA CANCELLARE\AGGIORNARE - orderExist = true; - dtbOrdt = (DtbOrdt) existOrderResponse.getEntity(); - dataOrdDef = new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(dtbOrdt.getDataOrd()); - numOrdDef = dtbOrdt.getNumOrd(); - } + saveDtbOrdt(ordine, codFornTD, setDecorrenza, calcDataCons, controllatoDa, importOrdLav, calcQtaDaListino, codAliqOmg, creaColloReso, + importDate); - dtbOrdt.setDtbOrdr(new ArrayList()); - dtbOrdt.setOperation(OperationType.INSERT_OR_UPDATE); - dtbOrdt.setDataOrd(dataOrd); - dtbOrdt.setGestione("V"); - dtbOrdt.setFlagPrzIva(flagPrzIva); - - String whereCondOrdini = "wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - "wdtb_ordt.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + - "wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - "wdtb_ordt.serie = " + UtilityDB.valueToString(serOrd); - - String codDivi = null; - if (UtilityString.isNullOrEmpty(codFornTD)) { - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD - query = " SELECT wdtb_ordr.cod_mart, " + - " wdtb_ordr.descrizione, " + - " wdtb_ordr.cod_col, " + - " wdtb_ordr.cod_tagl, " + - " wdtb_ordr.qta_ord, " + - " wdtb_ordr.qta_omg, " + - " wdtb_ordr.data_cons, " + - " wdtb_ordr.cod_promo, " + - " wdtb_ordt.cod_vage, " + - " wdtb_ordt.sconto1, " + - " wdtb_ordt.sconto2, " + - " wdtb_ordt.sconto3, " + - " wdtb_ordt.sconto4, " + - " wdtb_ordr.sconto5, " + - " wdtb_ordr.sconto6, " + - " wdtb_ordr.sconto7, " + - " wdtb_ordr.sconto8, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.cod_vdes, " + - " wdtb_ordr.riga_ord, " + - " 'N' as sostituzione, " + - " wdtb_ordt.note," + - " wdtb_ordr.note, " + - " wdtb_ordt.compilato_da, " + - " wdtb_ordt.cod_jcom," + - " wdtb_ordt.term_cons," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordt.cod_paga, " + - " wdtb_ordt.porto, " + - " wdtb_ordt.mezzo, " + - " wdtb_ordr.val_unt, " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.cod_asso, " + - " wdtb_ordr.gruppo_cons, " + - " wdtb_ordt.cod_vage2, " + - " wdtb_ordr.cod_mdep, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordt.acconto, " + - " wdtb_ordt.descrizione_paga, " + - " wdtb_ordt.cod_banc_azi," + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordt.cod_divi, " + - " wdtb_ordr.cod_aliq, " + - " wdtb_ordr.pos_riga, " + - " wdtb_ordr.cod_oann, " + - " wdtb_ordr.qta_cnf, " + - " wdtb_ordr.num_cnf, " + - " wdtb_ordr.partita_mag, " + - " CASE WHEN wdtb_ordr.flag_evaso = 'I' AND ( select flag_stato from mtb_aart where cod_mart = wdtb_ordr.cod_mart ) = 'I' THEN 'A' ELSE wdtb_ordr.flag_evaso END as flag_evaso, " + - " wdtb_ordr.val_unt_iva, " + - " wdtb_ordt.cod_vvet, " + - " wdtb_ordr.perc_prov, " + - " wdtb_ordt.data_cons_rich " + - " FROM wdtb_ordr, " + - " wdtb_ordt " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie " + - "UNION ALL " + - " SELECT wdtb_ordr.cod_mart, " + - " wdtb_ordr.descrizione, " + - " wdtb_ordr.cod_col, " + - " wdtb_ordr.cod_tagl, " + - " 0, " + - " wdtb_ordr.qta_reso, " + - " wdtb_ordr.data_cons, " + - " wdtb_ordr.cod_promo, " + - " wdtb_ordt.cod_vage, " + - " wdtb_ordt.sconto1, " + - " wdtb_ordt.sconto2, " + - " wdtb_ordt.sconto3, " + - " wdtb_ordt.sconto4, " + - " wdtb_ordr.sconto5, " + - " wdtb_ordr.sconto6, " + - " wdtb_ordr.sconto7, " + - " 100, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.cod_vdes, " + - " wdtb_ordr.riga_ord, " + - " 'S' as sostituzione, " + - " wdtb_ordt.note," + - " wdtb_ordr.note, " + - " wdtb_ordt.compilato_da, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordt.term_cons," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordt.cod_paga, " + - " wdtb_ordt.porto, " + - " wdtb_ordt.mezzo, " + - " wdtb_ordr.val_unt , " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.cod_asso, " + - " wdtb_ordr.gruppo_cons, " + - " wdtb_ordt.cod_vage2, " + - " wdtb_ordr.cod_mdep, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordt.acconto, " + - " wdtb_ordt.descrizione_paga, " + - " wdtb_ordt.cod_banc_azi," + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordt.cod_divi, " + - " wdtb_ordr.cod_aliq, " + - " wdtb_ordr.pos_riga, " + - " wdtb_ordr.cod_oann, " + - " wdtb_ordr.qta_cnf, " + - " wdtb_ordr.num_cnf, " + - " wdtb_ordr.partita_mag, " + - " CASE WHEN wdtb_ordr.flag_evaso = 'I' AND ( select flag_stato from mtb_aart where cod_mart = wdtb_ordr.cod_mart ) = 'I' THEN 'A' ELSE wdtb_ordr.flag_evaso END as flag_evaso, " + - " wdtb_ordr.val_unt_iva, " + - " wdtb_ordt.cod_vvet, " + - " wdtb_ordr.perc_prov, " + - " wdtb_ordt.data_cons_rich " + - " FROM wdtb_ordr, " + - " wdtb_ordt " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordr.flag_reso_riv = 'O' " + - " ORDER BY wdtb_ordr.pos_riga , wdtb_ordr.riga_ord "; - } else { - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE DIRETTO - query = " SELECT wdtb_ordr.cod_mart, " + - " wdtb_ordr.descrizione, " + - " wdtb_ordr.cod_col, " + - " wdtb_ordr.cod_tagl, " + - " wdtb_ordr.qta_ord, " + - " wdtb_ordr.qta_omg, " + - " wdtb_ordr.data_cons, " + - " wdtb_ordr.cod_promo, " + - " wdtb_ordt.cod_vage, " + - " wdtb_ordt.sconto1, " + - " wdtb_ordt.sconto2, " + - " wdtb_ordt.sconto3, " + - " wdtb_ordt.sconto4, " + - " wdtb_ordr.sconto5, " + - " wdtb_ordr.sconto6, " + - " wdtb_ordr.sconto7, " + - " wdtb_ordr.sconto8, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.cod_vdes, " + - " wdtb_ordr.riga_ord, " + - " 'N' as sostituzione, " + - " wdtb_ordt.note," + - " wdtb_ordr.note, " + - " wdtb_ordt.compilato_da, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordt.term_cons," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordt.cod_paga, " + - " wdtb_ordt.porto, " + - " wdtb_ordt.mezzo, " + - " wdtb_ordr.val_unt , " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.cod_asso, " + - " wdtb_ordr.gruppo_cons, " + - " wdtb_ordt.cod_vage2, " + - " wdtb_ordr.cod_mdep, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordt.acconto, " + - " wdtb_ordt.descrizione_paga, " + - " wdtb_ordt.cod_banc_azi," + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordt.cod_divi, " + - " wdtb_ordr.cod_aliq," + - " wdtb_ordr.pos_riga , " + - " wdtb_ordr.cod_oann, " + - " wdtb_ordr.qta_cnf, " + - " wdtb_ordr.num_cnf, " + - " wdtb_ordr.partita_mag, " + - " CASE WHEN wdtb_ordr.flag_evaso = 'I' AND ( select flag_stato from mtb_aart where cod_mart = wdtb_ordr.cod_mart ) = 'I' THEN 'A' ELSE wdtb_ordr.flag_evaso END as flag_evaso, " + - " wdtb_ordr.val_unt_iva," + - " wdtb_ordt.cod_vvet, " + - " wdtb_ordr.perc_prov, " + - " wdtb_ordt.data_cons_rich " + - " FROM wdtb_ordr, " + - " wdtb_ordt, " + - " mtb_aart_anag " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND " + - " mtb_aart_anag.cod_anag = " + UtilityDB.valueToString(codFornTD) + " " + - "UNION ALL " + - " SELECT wdtb_ordr.cod_mart, " + - " wdtb_ordr.descrizione, " + - " wdtb_ordr.cod_col, " + - " wdtb_ordr.cod_tagl, " + - " 0, " + - " wdtb_ordr.qta_reso, " + - " wdtb_ordr.data_cons, " + - " wdtb_ordr.cod_promo, " + - " wdtb_ordt.cod_vage, " + - " wdtb_ordt.sconto1, " + - " wdtb_ordt.sconto2, " + - " wdtb_ordt.sconto3, " + - " wdtb_ordt.sconto4, " + - " wdtb_ordr.sconto5, " + - " wdtb_ordr.sconto6, " + - " wdtb_ordr.sconto7, " + - " 100, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.cod_vdes, " + - " wdtb_ordr.riga_ord, " + - " 'S' as sostituzione, " + - " wdtb_ordt.note," + - " wdtb_ordr.note, " + - " wdtb_ordt.compilato_da, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordt.term_cons," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordt.cod_paga, " + - " wdtb_ordt.porto, " + - " wdtb_ordt.mezzo, " + - " wdtb_ordr.val_unt , " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.cod_asso, " + - " wdtb_ordr.gruppo_cons, " + - " wdtb_ordt.cod_vage2, " + - " wdtb_ordr.cod_mdep, " + - " wdtb_ordr.cod_alis " + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordt.acconto, " + - " wdtb_ordt.descrizione_paga, " + - " wdtb_ordt.cod_banc_azi," + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordt.cod_divi, " + - " wdtb_ordr.cod_aliq, " + - " wdtb_ordr.pos_riga, " + - " wdtb_ordr.cod_oann, " + - " wdtb_ordr.qta_cnf, " + - " wdtb_ordr.num_cnf, " + - " wdtb_ordr.partita_mag, " + - " CASE WHEN wdtb_ordr.flag_evaso = 'I' AND ( select flag_stato from mtb_aart where cod_mart = wdtb_ordr.cod_mart ) = 'I' THEN 'A' ELSE wdtb_ordr.flag_evaso END as flag_evaso, " + - " wdtb_ordr.val_unt_iva," + - " wdtb_ordt.cod_vvet, " + - " wdtb_ordr.perc_prov, " + - " wdtb_ordt.data_cons_rich " + - " FROM wdtb_ordr, " + - " wdtb_ordt, " + - " mtb_aart_anag " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND " + - " mtb_aart_anag.cod_anag = " + UtilityDB.valueToString(codFornTD) + " AND " + - " wdtb_ordr.flag_reso_riv = 'O' " + - " ORDER BY wdtb_ordr.pos_riga , wdtb_ordr.riga_ord "; - } - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); - PreparedStatement wrapperInnerPs = conn.prepareStatement(query); - ResultSet wrapperInnerRs = wrapperInnerPs.executeQuery(); - - // ACQUISIZIONE RIGHE ORDINE - int countRow = 0; - while (wrapperInnerRs.next()) { - String codMart = UtilityString.streNull(wrapperInnerRs.getString(1)); - String descrizione = UtilityString.streNull(wrapperInnerRs.getString(2)); - String codCol = UtilityString.streNull(wrapperInnerRs.getString(3)); - String codTagl = UtilityString.streNull(wrapperInnerRs.getString(4)); - BigDecimal qtaOrd = wrapperInnerRs.getBigDecimal(5); - BigDecimal qtaOmg = wrapperInnerRs.getBigDecimal(6); - Date dataCons = wrapperInnerRs.getDate(7); - String codPromo = wrapperInnerRs.getString(8); - String codVage = wrapperInnerRs.getString(9); - BigDecimal sconto1 = wrapperInnerRs.getBigDecimal(10); - BigDecimal sconto2 = wrapperInnerRs.getBigDecimal(11); - BigDecimal sconto3 = wrapperInnerRs.getBigDecimal(12); - BigDecimal sconto4 = wrapperInnerRs.getBigDecimal(13); - BigDecimal sconto5 = wrapperInnerRs.getBigDecimal(14); - BigDecimal sconto6 = wrapperInnerRs.getBigDecimal(15); - BigDecimal sconto7 = wrapperInnerRs.getBigDecimal(16); - BigDecimal sconto8 = wrapperInnerRs.getBigDecimal(17); - String untMis = UtilityString.streNull(wrapperInnerRs.getString(18)); - String codAnag = UtilityString.streNull(wrapperInnerRs.getString(19)); - String codVdes = UtilityString.streNull(wrapperInnerRs.getString(20)); - String sostituzione = wrapperInnerRs.getString(22); - String note = UtilityString.streNull(wrapperInnerRs.getString(23)); - String noteRow = UtilityString.streNull(wrapperInnerRs.getString(24)); - String compilatoDa = UtilityString.streNull(wrapperInnerRs.getString(25)); - String codJcom = UtilityString.streNull(wrapperInnerRs.getString(26)); - String termCons = UtilityString.streNull(wrapperInnerRs.getString(27)); - String rifOrd = UtilityString.streNull(wrapperInnerRs.getString(28)); - String codPaga = UtilityString.streNull(wrapperInnerRs.getString(29)); - String porto = UtilityString.streNull(wrapperInnerRs.getString(30)); - String mezzo = UtilityString.streNull(wrapperInnerRs.getString(31)); - BigDecimal valUnt = wrapperInnerRs.getBigDecimal(32); - Integer idArt = wrapperInnerRs.getInt(33); - if (wrapperInnerRs.wasNull()) idArt = null; - String codAsso = UtilityString.streNull(wrapperInnerRs.getString(34)); - String gruppoCons = UtilityString.streNull(wrapperInnerRs.getString(35)); - String codVage2 = UtilityString.streNull(wrapperInnerRs.getString(36)); - String codMdepRow = UtilityString.streNull(wrapperInnerRs.getString(37)); - String codAlis = UtilityString.streNull(wrapperInnerRs.getString(38)); - String codArtForn = UtilityString.streNull(wrapperInnerRs.getString(39)); - acconto = wrapperInnerRs.getBigDecimal(40); - String descrizionePaga = UtilityString.streNull(wrapperInnerRs.getString(41)); - String codBancAzi = UtilityString.streNull(wrapperInnerRs.getString(42)); - String descrizioneEstesa = UtilityString.streNull(wrapperInnerRs.getString(43)); - codDivi = UtilityString.streNull(wrapperInnerRs.getString(44)); - String codAliq = UtilityString.streNull(wrapperInnerRs.getString(45)); - String codOann = UtilityString.streNull(wrapperInnerRs.getString(47)); - qtaCnf = wrapperInnerRs.getBigDecimal("qta_cnf"); - BigDecimal numCnf = wrapperInnerRs.getBigDecimal("num_cnf"); - String partitaMag = UtilityString.streNull(wrapperInnerRs.getString("partita_mag")); - String flagEvaso = wrapperInnerRs.getString("flag_evaso"); - String codVvet = UtilityString.streNull(wrapperInnerRs.getString("cod_vvet")); - Date dataConsRich = wrapperInnerRs.getDate("data_cons_rich"); - BigDecimal percProv = wrapperInnerRs.getBigDecimal("perc_prov"); - Integer numOrdProvv = numOrd; - countRow++; - - // Se non si tratta di un cliente TD e vi è un deposito sulla riga diverso dal deposito - // dell'ordine allora dovrà essere generato un ordine di trasferimento merce - if (flagTD.equals("N") && !codMdep.equals(codMdepRow)) { - generateOrdTrasfMerce = true; - } - - if (acconto == null) { - acconto = BigDecimal.ZERO; - } - - if (countRow == 1) { - String calcDataCons = importSetupSection.get("CALC_DATA_CONS"); - - if (calcDataCons != null && calcDataCons.equalsIgnoreCase("S")) { - String sql = "select gg_cons\n" + - "from vtb_dest\n" + - "where cod_anag = " + UtilityDB.valueToString(codAnag) + - " and cod_vdes = " + UtilityDB.valueToString(codVdes); - Integer ggCons = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - if (ggCons == null) - ggCons = 0; - - if (dataConsRich == null) { - dataConsRich = UtilityDate.dateAdd(dataCons, ggCons); - } - } - - String setDecorrenza = importSetupSection.get("SET_DECORRENZA"); - if (dataConsRich != null && setDecorrenza != null && setDecorrenza.equalsIgnoreCase("S")) { - dtbOrdt.setDataRifScad(dataConsRich); - } - - - dtbOrdt.setGestione("V"); - dtbOrdt.setFlagAnnulla(flagAnnulla); - dtbOrdt.setEanFidelity(eanFidelity); - dtbOrdt.setCompilatoDa(compilatoDa); - dtbOrdt.setControllatoDa(controllatoDa); - dtbOrdt.setFlagSospeso(flagSospeso); - dtbOrdt.setCodMdep(codMdep); - dtbOrdt.setNumOrdProvv(numOrdProvv); - dtbOrdt.setSerie(serOrd); - dtbOrdt.setCodFornTd(codFornTD); - dtbOrdt.setCodVage(codVage); - dtbOrdt.setCodVage2(codVage2); - dtbOrdt.setCodAnag(codAnag); - dtbOrdt.setCodVdes(codVdes); - dtbOrdt.setTermCons(termCons); - dtbOrdt.setRifOrd(rifOrd); - dtbOrdt.setNote(note); - dtbOrdt.setSconto1(sconto1); - dtbOrdt.setSconto2(sconto2); - dtbOrdt.setSconto3(sconto3); - dtbOrdt.setSconto4(sconto4); - dtbOrdt.setFlagPrzIva(flagPrzIva); - //dtbOrdt.setAcconto(acconto); - if (!UtilityString.isNullOrEmpty(descrizionePaga)) { - dtbOrdt.setDescrizionePaga(descrizionePaga); - } - if (!UtilityString.isNullOrEmpty(codJcom)) { - dtbOrdt.setCodJcom(codJcom); - } - if (!UtilityString.isNullOrEmpty(codVlis)) { - dtbOrdt.setListino(codVlis); - } - if (!UtilityString.isNullOrEmpty(codPaga)) { - dtbOrdt.setCodPaga(codPaga); - } - if (!UtilityString.isNullOrEmpty(porto)) { - dtbOrdt.setPorto(porto); - } - if (!UtilityString.isNullOrEmpty(mezzo)) { - dtbOrdt.setMezzo(mezzo); - } - if (!UtilityString.isNullOrEmpty(codBancAzi)) { - dtbOrdt.setCodBancAzi(codBancAzi); - } - if (!UtilityString.isNullOrEmpty(codVvet)) { - dtbOrdt.setCodVvet(codVvet); - } - dtbOrdt.setDataInizTrasp(dataCons) - .setDataConsRich(dataConsRich); - - - // Aggiunta riga descrittiva acconto - if (flagTD.equals("N") && acconto.compareTo(BigDecimal.ZERO) != 0) { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setDescrizione("IMPORTO ACCONTO " + codDivi + " " + acconto.setScale(2, RoundingMode.HALF_UP).toString()); - dtbOrdr.setDescrizioneEstesa(dtbOrdr.getDescrizione()); - dtbOrdr.setQtaOrd(BigDecimal.ZERO); - dtbOrdt.getDtbOrdr().add(dtbOrdr); - } - - } - - // INSERIMENTO DATI RIGA DOCUMENTO IN XML - // (FABIO-ANTONELLA): ATTENZIONE!! - // SE SI DECIDE DI GESTIRE RIGHE DESCRITTIVE, SOSTITUENDO != CON >= E' NECESSARIO GESTIRE DIVERSAMENTE LE SOSTITUZIONI (FLAG_RESO_RIV = 'O') - if (qtaOrd.compareTo(BigDecimal.ZERO) != 0) { - // GESTIONE RIGA BATTISCOPA PER IME - if (importOrdLav && idArt != null && idArt != 0) { - query = "SELECT wdtb_ordt.cod_jcom as cod_jcom," + - " wdtb_ordr.cod_mart as cod_mart," + - " wdtb_ordr.unt_ord as unt_ord," + - " wdtb_ordr.qta_ord as qta_ord," + - " ((a.val_unt*wdtb_ordr.qta_ord2)/wdtb_ordr.qta_ord + wdtb_ordr.val_unt) as val_unt, " + - " wdtb_ordr.cod_aliq as cod_aliq, " + - " wdtb_ordr.cod_asso as cod_asso, " + - " wdtb_ordr.gruppo_cons as gruppo_cons, " + - " wdtb_ordr.sconto5 as sconto5, " + - " wdtb_ordr.sconto6 as sconto6, " + - " wdtb_ordr.sconto7 as sconto7, " + - " wdtb_ordr.sconto8 as sconto8, " + - " wdtb_ordr.note as note, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.descrizione_estesa +' '+ a.descrizione +' ('+wdtb_ordr.unt_ord2 + ' '+ Convert(varchar(13),Convert(decimal(10,2),wdtb_ordr.qta_ord2)) +')' as descrizione_estesa, " + - " wdtb_ordr.data_cons as data_cons, " + - " wdtb_ordr.cod_alis as cod_alis, " + - " wdtb_ordr.cod_art_for as cod_art_for, " + - " wdtb_ordr.unt_ord2 as unt_ord2," + - " Wdtb_ordr.qta_ord2 as qta_ord2," + - " a.cod_mart as cod_mart_mate," + - " a.unt_ord as unt_ord_mate, " + - " a.qta_ord - wdtb_ordr.qta_ord2 as residuo, " + - " a.cod_aliq as cod_aliq_mate, " + - " a.cod_asso as cod_asso_mate," + - " a.gruppo_cons as gruppo_cons_mate, " + - " a.sconto5 as sconto5_mate," + - " a.sconto6 as sconto6_mate, " + - " a.sconto7 as sconto7_mate," + - " a.sconto8 as sconto8_mate," + - " a.note as note_mate," + - " a.descrizione_estesa as descr_estesa_mate," + - " a.data_cons as data_cons_mate," + - " a.cod_alis as cod_alis_mate," + - " a.cod_art_for as cod_art_for_mate, " + - " a.val_unt as val_unt_mate, " + - " wdtb_ordr.qta_cnf as qta_cnf, " + - " wdtb_ordr.num_cnf as num_cnf, " + - " a.qta_cnf as qta_cnf_mate " + - " FROM wdtb_ordt, wdtb_ordr , jtb_cicl , " + - " (SELECT wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.val_unt, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord," + - " cod_aliq," + - " cod_asso," + - " gruppo_cons," + - " sconto5," + - " sconto6, " + - " sconto7, " + - " sconto8," + - " wdtb_ordr.note," + - " wdtb_ordr.descrizione_estesa," + - " data_cons," + - " cod_alis," + - " cod_art_for, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.cod_mart, " + - " wdtb_ordr.qta_cnf" + - " FROM wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + - " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.flag_elaborato ='N' AND " + - " wdtb_ordr.id_art <> 0 AND " + - " jtb_cicl.cod_prod is null ) a " + - " WHERE a.data_ord = wdtb_ordr.data_ord AND " + - " a.num_ord = wdtb_ordr.num_ord AND " + - " a.gestione = wdtb_ordr.gestione AND " + - " a.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " a.id_art = wdtb_ordr.id_art AND " + - " wdtb_ordr.cod_mart = jtb_cicl.cod_prod AND " + - " wdtb_ordr.id_art = " + UtilityDB.valueToString(idArt) + " AND " + - " wdtb_ordr.cod_mart = " + UtilityDB.valueToString(codMart); - - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); - PreparedStatement info = conn.prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart"))); - dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); - dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord"))); - dtbOrdr.setQtaOrd(res.getBigDecimal("qta_ord")); - dtbOrdr.setUntOrd2(UtilityString.streNull(res.getString("unt_ord2"))); - dtbOrdr.setQtaOrd2(res.getBigDecimal("qta_ord2")); - dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq"))); - dtbOrdr.setNote(UtilityString.streNull(res.getString("note"))); - dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons"))); - dtbOrdr.setValUnt(res.getBigDecimal("val_unt")); - dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione"))); - dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descrizione_estesa"), 255))); - dtbOrdr.setSconto5(res.getBigDecimal("sconto5")); - dtbOrdr.setSconto6(res.getBigDecimal("sconto6")); - dtbOrdr.setSconto7(res.getBigDecimal("sconto7")); - dtbOrdr.setSconto8(res.getBigDecimal("sconto8")); - dtbOrdr.setIdArt(idArt); - if (res.getDate("data_cons") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons")); - } - dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis"))); - dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for"))); - dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf")); - dtbOrdr.setNumCnf(res.getBigDecimal("num_cnf")); - - dtbOrdt.getDtbOrdr().add(dtbOrdr); - - if (res.getBigDecimal("residuo").compareTo(BigDecimal.ZERO) > 0 && UtilityString.streNull(res.getString("unt_ord2")).compareTo(UtilityString.streNull(res.getString("unt_ord_mate"))) == 0) { - dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart_mate"))); - dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); - dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord_mate"))); - dtbOrdr.setQtaOrd(res.getBigDecimal("residuo")); - dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf_mate")); - dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq_mate"))); - dtbOrdr.setNote(UtilityString.streNull(res.getString("note_mate"))); - dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons_mate"))); - dtbOrdr.setValUnt(res.getBigDecimal("val_unt_mate")); - //dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione_mate"))); - dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descr_estesa_mate"), 255))); - dtbOrdr.setSconto5(res.getBigDecimal("sconto5_mate")); - dtbOrdr.setSconto6(res.getBigDecimal("sconto6_mate")); - dtbOrdr.setSconto7(res.getBigDecimal("sconto7_mate")); - dtbOrdr.setSconto8(res.getBigDecimal("sconto8_mate")); - if (res.getDate("data_cons_mate") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons_mate")); - } - dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis_mate"))); - dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for_mate"))); - - dtbOrdt.getDtbOrdr().add(dtbOrdr); - } - } - res.close(); - info.close(); - } else { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(codMart); - dtbOrdr.setDescrizione(descrizione); - if (!UtilityString.isNullOrEmpty(codCol)) { - dtbOrdr.setCodCol(codCol); - dtbOrdr.setCodTagl(codTagl); - } - dtbOrdr.setDescrizioneEstesa(descrizioneEstesa); - - dtbOrdr.setCodAliq(codAliq); - dtbOrdr.setUntOrd(untMis); - dtbOrdr.setQtaOrd(qtaOrd); - dtbOrdr.setQtaCnf(qtaCnf); - dtbOrdr.setNumCnf(numCnf); - dtbOrdr.setValUnt(valUnt); - dtbOrdr.setSconto5(sconto5); - dtbOrdr.setSconto6(sconto6); - dtbOrdr.setSconto7(sconto7); - dtbOrdr.setSconto8(sconto8); - dtbOrdr.setPercProv(percProv); - if (qtaOmg.compareTo(BigDecimal.ZERO) == 0 && codPromo != null) { - dtbOrdr.setCodPromo(codPromo); - } - if (dataCons != null) { - dtbOrdr.setDataCons(dataCons); - } - dtbOrdr.setNote(noteRow); - dtbOrdr.setIdArt(idArt); - dtbOrdr.setCodAsso(codAsso); - dtbOrdr.setGruppoCons(gruppoCons); - dtbOrdr.setCodOann(codOann); - dtbOrdr.setPartitaMag(partitaMag); - dtbOrdr.setFlagEvaso(FlagEvaso.from(flagEvaso)); - dtbOrdr.setValUntIva(wrapperInnerRs.getBigDecimal("val_unt_iva")); - /* - PER LE AZIENDE FLOROVIVAISTICHE E' NECESSARIO: - 1) CHE QTA_CNF, RAP_CONV2 E RAP_CONV3 SIANO LETTI RICALCOLATI DAL LISTINO DI VENDITA SE PRESENTE IN BASE ALLE ALTEZZE SPECIFICATE* - 2) CHE VENGA VALORIZZATO COD_ALIS E COD_ART_FORN DELL'ORDINE OVE PRESENTE - */ - if (calcQtaDaListino.equals("S")) { - query = "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + - " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + - " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + - " mtb_aart.unt_mis2, " + - " mtb_aart.unt_mis3, " + - " listVend.posizione " + - " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + - UtilityDB.valueToString(codVlis) + ", " + - UtilityDB.valueToString(codMart) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + - " listVend.tipo_variazione <> 'D' " + - " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(codMart); - PreparedStatement info = conn.prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - qtaCnf = res.getBigDecimal(1); - BigDecimal colliStrato = res.getBigDecimal(2); - BigDecimal colliPedana = res.getBigDecimal(3); - untMis2 = res.getString(4); - untMis3 = res.getString(5); - posizioneListino = res.getString(6); - BigDecimal rapConv2 = colliStrato.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); - BigDecimal rapConv3 = colliPedana.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); - qtaOrd2 = qtaOrd.divide(rapConv2, 2, RoundingMode.HALF_UP); - qtaOrd3 = qtaOrd.divide(rapConv3, 2, RoundingMode.HALF_UP); - } - res.close(); - info.close(); - - dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola - dtbOrdr.setQtaCnf(qtaCnf); - dtbOrdr.setUntOrd2(untMis2); - dtbOrdr.setQtaOrd2(qtaOrd2); - dtbOrdr.setUntOrd3(untMis3); - dtbOrdr.setQtaOrd3(qtaOrd3); - - // ACQUISIZIONE DATI FORNITORE PREFERENZIALE - codAlis = ""; - codArtForn = ""; - query = "SELECT ISNULL(listiniAcq.cod_alis, ''), " + - " ISNULL(listiniAcq.cod_art_for, ''), " + - " ISNULL(listiniAcq.partita_mag, '') " + - " from ( SELECT listino.* " + - " FROM atb_forn, " + - " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + - " (SELECT value_string as cod_atip " + - " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + - " WHERE atb_forn.cod_alis = listino.cod_alis AND " + - " atb_forn.cod_atip = stp.cod_atip AND " + - " cod_mart IS NOT NULL AND " + - " tipo_variazione <> 'D' " + - " UNION " + - " SELECT listino.* " + - " FROM atb_forn, vtb_dest, " + - " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + - " (SELECT value_string as cod_atip " + - " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + - " WHERE atb_forn.cod_atip = stp.cod_atip AND " + - " atb_forn.cod_anag = vtb_dest.cod_anag AND " + - " vtb_dest.cod_alis = listino.cod_alis AND " + - " cod_mart IS NOT NULL AND " + - " tipo_variazione <> 'D')listiniAcq " + - " WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); - - info = conn.prepareStatement(query); - res = info.executeQuery(); - while (res.next()) { - codAlis = res.getString(1); - codArtForn = res.getString(2); - partitaMagAlis = res.getString(3); - } - res.close(); - info.close(); - } - dtbOrdr.setCodAlis(codAlis); - dtbOrdr.setCodArtFor(codArtForn); - if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { - dtbOrdr.setPartitaMag(partitaMagAlis); - } - dtbOrdt.getDtbOrdr().add(dtbOrdr); - - } - } - - // RIGA QUANTITA OMAGGIATA - if (qtaOmg.compareTo(BigDecimal.valueOf(0)) != 0) { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(codMart); - dtbOrdr.setDescrizione(descrizione); - if (!UtilityString.isNullOrEmpty(codCol)) { - dtbOrdr.setCodCol(codCol); - dtbOrdr.setCodTagl(codTagl); - } - dtbOrdr.setDescrizioneEstesa(descrizioneEstesa); - dtbOrdr.setCodAliq(codAliq); - dtbOrdr.setUntOrd(untMis); - dtbOrdr.setQtaOrd(qtaOmg); - if (sostituzione.equals("N")) { - sconto5 = new BigDecimal(100); - } else { - if (codAliqOmg != null) { - dtbOrdr.setCodAliq(codAliqOmg); - } - } - dtbOrdr.setSconto5(sconto5); - dtbOrdr.setSconto6(sconto6); - dtbOrdr.setSconto7(sconto7); - dtbOrdr.setSconto8(sconto8); - if (codPromo != null) { - dtbOrdr.setCodPromo(codPromo); - } - if (dataCons != null) { - dtbOrdr.setDataCons(dataCons); - } - dtbOrdt.getDtbOrdr().add(dtbOrdr); - } - } - wrapperInnerRs.close(); - wrapperInnerPs.close(); - - // Inserimento eventuali spese accessorie - query = " SELECT wdtb_ords.id_riga, " + - " wdtb_ords.cod_spes, " + - " wdtb_ords.descrizione, " + - " wdtb_ords.importo, " + - " wdtb_ords.cod_aliq, " + - " wdtb_ords.importo_iva " + - " FROM wdtb_ords, wdtb_ordt " + - " WHERE wdtb_ords.gestione = wdtb_ordt.gestione AND " + - " wdtb_ords.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ords.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ords.serie = wdtb_ordt.serie "; - - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); - PreparedStatement info = conn.prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - Integer idRiga = res.getInt(1); - String codSpes = res.getString(2); - String descrizioneSpes = res.getString(3); - BigDecimal importo = res.getBigDecimal(4); - String codAliq = res.getString(5); - - DtbOrds ords = new DtbOrds(); - ords.setOperation(OperationType.INSERT); - ords.setIdRiga(idRiga); - ords.setCodSpes(codSpes); - ords.setDescrizione(descrizioneSpes); - ords.setImporto(importo); - ords.setCodAliq(codAliq); - ords.setImportoIva(res.getBigDecimal("importo_iva")); - dtbOrdt.getDtbOrds().add(ords); - } - info.close(); - res.close(); - - entityProcessor.processEntity(dtbOrdt, true, multiDBTransactionManager); - orderEntities.add(dtbOrdt); - - // Creazione collo di reso - if (creaColloReso) { - ServiceRestResponse importColliDiResoResponse = importColli(multiDBTransactionManager, requestDataDTO.getUsername(), gestione, dataOrd, numOrd, serOrd, new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(dtbOrdt.getDataOrd()), dtbOrdt.getNumOrd(), codFornTD, codMdep); - if (importColliDiResoResponse.getEsito().equals(EsitoType.OK)) { - if (importColliDiResoResponse.getEntity() != null) - orderEntities.add(importColliDiResoResponse.getEntity()); - } else { - throw new Exception(importColliDiResoResponse.getErrorMessage()); - } - } - // Importazione Ordine di lavoro per articoli con distinta senza righe - if (importOrdLav) { - ServiceRestResponse importOrdLavResponse = importOrdLav(multiDBTransactionManager, gestione, dataOrd, numOrd, serOrd, codMdep); - if (importOrdLavResponse.getEsito().equals(EsitoType.OK)) { - if (importOrdLavResponse.getEntityList() != null) - orderEntities.addAll(importOrdLavResponse.getEntityList()); - } else { - throw new Exception(importOrdLavResponse.getErrorMessage()); - } - } - } else { - logger.error(String.format("IMPORTAZIONE NON EFFETTUATA: %s", existOrderResponse.getErrorMessage())); - insertLog(conn, gestione, dataOrd, serOrd, numOrd, existOrderResponse.getErrorMessage(), "2", qtaOrdTot, importDate, "P"); - wdtbOrdt.setException(new EntityException(existOrderResponse.getErrorMessage())); - result.add(wdtbOrdt); - multiDBTransactionManager.commitAll(); - break; - } - - // Creazione ordine trasferimento merce - if (generateOrdTrasfMerce) { - ServiceRestResponse importTrasfMerce = importOrdineTrasfMerce(multiDBTransactionManager, gestione, dataOrd, serOrd, numOrd, codMdep, importDate); - if (importTrasfMerce.getEsito().equals(EsitoType.OK)) { - if (importTrasfMerce.getEntity() != null) - orderEntities.add(importTrasfMerce.getEntity()); - } else { - throw new Exception(importTrasfMerce.getErrorMessage()); - } - } - - // IMPORTAZIONE FLAG ELABORATO = 'S' wdtbOrdt.setOperation(OperationType.UPDATE); - wdtbOrdt.setSerie(serOrd); wdtbOrdt.setFlagElaborato("S"); entityProcessor.processEntity(wdtbOrdt, true, multiDBTransactionManager); - orderEntities.add(wdtbOrdt); + wdtbOrdts.add(wdtbOrdt); multiDBTransactionManager.commitAll(); } catch (Exception ex) { - multiDBTransactionManager.rollbackAll(); - logger.error(String.format("Errore durante l'importazione dell'ordine [Gestione: %s, Data: %s, Numero: %d]", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd), ex); - insertLog(conn, gestione, dataOrd, serOrd, numOrd, ex.getMessage(), "2", qtaOrdTot, importDate, "P"); - multiDBTransactionManager.commitAll(); - wdtbOrdt.setException(new EntityException(ex.getMessage())); - result.add(wdtbOrdt); +// logger.error(String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, +// new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd), ex); +// insertLog(conn, gestione, dataOrd, serOrd, numOrd, ex.getMessage(), "2", qtaOrdTot, importDate, "P"); +// multiDBTransactionManager.commitAll(); +// wdtbOrdt.setException(new EntityException(ex.getMessage())); +// wdtbOrdts.add(wdtbOrdt); } } - innerRs.close(); - innerPs.close(); - String applName = CommonRules.getApplicationName(conn); + String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); if (ApplicationName.TEXTILES.toString().equals(applName)) { - insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); +// insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); } else { - ServiceRestResponse checkOrderResponse = checkOrder(conn, dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate); - if (checkOrderResponse.getEsito().equals(EsitoType.OK)) { - insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); - } +// ServiceRestResponse checkOrderResponse = checkOrder(conn, dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate); +// if (checkOrderResponse.getEsito().equals(EsitoType.OK)) { +// insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); +// } } multiDBTransactionManager.commitAll(); - result.add(wdtbOrdt); - postSave(result); + wdtbOrdts.add(wdtbOrdt); + postSave(wdtbOrdts); + } - return result; + + return null; + } + + + private List saveDtbOrdt(ImporOrdiniWebDTO ordine, String codFornTD, boolean setDecorrenza, boolean calcDataCons, String controllatoDa, + boolean importOrdLav, boolean calcQtaDaListino, String codAliqOmg, boolean creaColloReso, + Date importdate) throws Exception { + List orderEntities = new ArrayList<>(); + + String gestione = ordine.getWdtbOrdt().getGestione(); + Date dataOrd = ordine.getWdtbOrdt().getDataOrd(); + Integer numOrd = ordine.getWdtbOrdt().getNumOrd(); + String serie = ordine.getWdtbOrdt().getSerie(); + DtbOrdt dtbOrdt = existOrderDef(multiDBTransactionManager, multiDBTransactionManager.getPrimaryConnection(), requestDataDTO.getUsername(), + gestione, dataOrd, serie, numOrd, codFornTD, importdate); + + if (dtbOrdt == null) dtbOrdt = new DtbOrdt(); + + dtbOrdt.setOperation(OperationType.INSERT_OR_UPDATE); + dtbOrdt.setDataOrd(dataOrd); + dtbOrdt.setGestione("V"); + dtbOrdt.setFlagPrzIva(ordine.getWdtbOrdt().getFlagPrzIva()); + + String whereCondOrdini = "wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + "wdtb_ordt.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + "wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + "wdtb_ordt.serie = " + UtilityDB.valueToString(serie); + + // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD + String query = " SELECT wdtb_ordr.*, mtb_aart.flag_stato as flag_stato_art " + + " FROM wdtb_ordr LEFT OUTER JOIN mtb_aart on wdtb_ordr.cod_mart = mtb_aart.cod_mart " + + " ORDER BY wdtb_ordr.pos_riga , wdtb_ordr.riga_ord "; + + if (codFornTD != null) { + query = UtilityDB.addwhereCond(query, "EXISTS (SELECT * FROM mtb_aart_anag WHERE wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND mtb_aart_anag.cod_anag = " + UtilityDB.valueToString(codFornTD), false); + } + query = UtilityDB.addwhereCond(query, whereCondOrdini, true); + List righeOrd = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, ImportOrdiniWebRowDTO.class); + + boolean generateOrdTrasfMerce = false; + if (righeOrd != null && !righeOrd.isEmpty()) { + Date dataConsRich = ordine.getWdtbOrdt().getDataConsRich(); + Date dataCons = righeOrd.get(0).getWdtbOrdr().getDataCons(); + if (calcDataCons) { + String sql = "select gg_cons\n" + + "from vtb_dest\n" + + "where cod_anag = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getCodAnag()) + + " and cod_vdes = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getCodVdes()); + Integer ggCons = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + if (ggCons == null) + ggCons = 0; + + if (dataConsRich == null) { + dataConsRich = UtilityDate.dateAdd(dataCons, ggCons); + + } + } + + if (dataConsRich != null && setDecorrenza) { + dtbOrdt.setDataRifScad(dataConsRich); + } + + + dtbOrdt.setGestione("V") + .setFlagAnnulla(ordine.getWdtbOrdt().getFlagAnnulla()) + .setEanFidelity(ordine.getWdtbOrdt().getEanFidelity()) + .setCompilatoDa(ordine.getWdtbOrdt().getCompilatoDa()) + .setControllatoDa(controllatoDa) + .setFlagSospeso(ordine.getWdtbOrdt().getFlagSospeso()) + .setCodMdep(ordine.getWdtbOrdt().getCodMdep()) + .setNumOrdProvv(ordine.getWdtbOrdt().getNumOrd()) + .setSerie(ordine.getWdtbOrdt().getSerie()) + .setCodFornTd(codFornTD) + .setCodVage(ordine.getWdtbOrdt().getCodVage()) + .setCodVage2(ordine.getWdtbOrdt().getCodVage2()) + .setCodAnag(ordine.getWdtbOrdt().getCodAnag()) + .setCodVdes(ordine.getWdtbOrdt().getCodVdes()) + .setTermCons(ordine.getWdtbOrdt().getTermCons()) + .setRifOrd(ordine.getWdtbOrdt().getRifOrd()) + .setNote(ordine.getWdtbOrdt().getNote()) + .setSconto1(ordine.getWdtbOrdt().getSconto1()) + .setSconto2(ordine.getWdtbOrdt().getSconto2()) + .setSconto3(ordine.getWdtbOrdt().getSconto3()) + .setSconto4(ordine.getWdtbOrdt().getSconto4()) + .setFlagPrzIva(ordine.getWdtbOrdt().getFlagPrzIva()) + .setDataInizTrasp(dataCons) + .setDataConsRich(dataConsRich); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getDescrizionePaga())) + dtbOrdt.setDescrizionePaga(ordine.getWdtbOrdt().getDescrizionePaga()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodJcom())) + dtbOrdt.setCodJcom(ordine.getWdtbOrdt().getCodJcom()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getListino())) + dtbOrdt.setListino(ordine.getWdtbOrdt().getListino()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodPaga())) + dtbOrdt.setCodPaga(ordine.getWdtbOrdt().getCodPaga()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getPorto())) + dtbOrdt.setPorto(ordine.getWdtbOrdt().getPorto()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getMezzo())) + dtbOrdt.setMezzo(ordine.getWdtbOrdt().getMezzo()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodBancAzi())) + dtbOrdt.setCodBancAzi(ordine.getWdtbOrdt().getCodBancAzi()); + if (!UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodVvet())) + dtbOrdt.setCodVvet(ordine.getWdtbOrdt().getCodVvet()); + + // Aggiunta riga descrittiva acconto + if (ordine.getFlagTd().equalsIgnoreCase("N") && !UtilityBigDecimal.isNullOrZero(ordine.getWdtbOrdt().getAcconto())) { + DtbOrdr dtbOrdr = new DtbOrdr(); + dtbOrdr.setDescrizione("IMPORTO ACCONTO " + ordine.getWdtbOrdt().getCodDivi() + " " + ordine.getWdtbOrdt().getAcconto().setScale(2, RoundingMode.HALF_UP).toString()); + dtbOrdr.setDescrizioneEstesa(dtbOrdr.getDescrizione()); + dtbOrdr.setQtaOrd(BigDecimal.ZERO); + dtbOrdt.getDtbOrdr().add(dtbOrdr); + } + + // Se non si tratta di un cliente TD e vi è un deposito sulla riga diverso dal deposito + // dell'ordine allora dovrà essere generato un ordine di trasferimento merce + if (ordine.getFlagTd().equalsIgnoreCase("N")) { + generateOrdTrasfMerce = righeOrd.stream().noneMatch(x -> x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); + } + + } + + for (ImportOrdiniWebRowDTO riga : righeOrd) { + // INSERIMENTO DATI RIGA DOCUMENTO IN XML + // (FABIO-ANTONELLA): ATTENZIONE!! + // SE SI DECIDE DI GESTIRE RIGHE DESCRITTIVE, SOSTITUENDO != CON >= E' NECESSARIO GESTIRE DIVERSAMENTE LE SOSTITUZIONI (FLAG_RESO_RIV = 'O') + if (riga.getWdtbOrdr().getQtaOrd().compareTo(BigDecimal.ZERO) != 0) { + // GESTIONE RIGA BATTISCOPA PER IME + if (importOrdLav && riga.getWdtbOrdr().getIdArt() != null && riga.getWdtbOrdr().getIdArt() != 0) { + query = "SELECT wdtb_ordt.cod_jcom as cod_jcom," + + " wdtb_ordr.cod_mart as cod_mart," + + " wdtb_ordr.unt_ord as unt_ord," + + " wdtb_ordr.qta_ord as qta_ord," + + " ((a.val_unt*wdtb_ordr.qta_ord2)/wdtb_ordr.qta_ord + wdtb_ordr.val_unt) as val_unt, " + + " wdtb_ordr.cod_aliq as cod_aliq, " + + " wdtb_ordr.cod_asso as cod_asso, " + + " wdtb_ordr.gruppo_cons as gruppo_cons, " + + " wdtb_ordr.sconto5 as sconto5, " + + " wdtb_ordr.sconto6 as sconto6, " + + " wdtb_ordr.sconto7 as sconto7, " + + " wdtb_ordr.sconto8 as sconto8, " + + " wdtb_ordr.note as note, " + + " wdtb_ordr.descrizione as descrizione, " + + " wdtb_ordr.descrizione_estesa +' '+ a.descrizione +' ('+wdtb_ordr.unt_ord2 + ' '+ Convert(varchar(13),Convert(decimal(10,2),wdtb_ordr.qta_ord2)) +')' as descrizione_estesa, " + + " wdtb_ordr.data_cons as data_cons, " + + " wdtb_ordr.cod_alis as cod_alis, " + + " wdtb_ordr.cod_art_for as cod_art_for, " + + " wdtb_ordr.unt_ord2 as unt_ord2," + + " Wdtb_ordr.qta_ord2 as qta_ord2," + + " a.cod_mart as cod_mart_mate," + + " a.unt_ord as unt_ord_mate, " + + " a.qta_ord - wdtb_ordr.qta_ord2 as residuo, " + + " a.cod_aliq as cod_aliq_mate, " + + " a.cod_asso as cod_asso_mate," + + " a.gruppo_cons as gruppo_cons_mate, " + + " a.sconto5 as sconto5_mate," + + " a.sconto6 as sconto6_mate, " + + " a.sconto7 as sconto7_mate," + + " a.sconto8 as sconto8_mate," + + " a.note as note_mate," + + " a.descrizione_estesa as descr_estesa_mate," + + " a.data_cons as data_cons_mate," + + " a.cod_alis as cod_alis_mate," + + " a.cod_art_for as cod_art_for_mate, " + + " a.val_unt as val_unt_mate, " + + " wdtb_ordr.qta_cnf as qta_cnf, " + + " wdtb_ordr.num_cnf as num_cnf, " + + " a.qta_cnf as qta_cnf_mate " + + " FROM wdtb_ordt, wdtb_ordr , jtb_cicl , " + + " (SELECT wdtb_ordr.gestione, " + + " wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art, " + + " wdtb_ordr.val_unt, " + + " wdtb_ordr.unt_ord, " + + " wdtb_ordr.qta_ord," + + " cod_aliq," + + " cod_asso," + + " gruppo_cons," + + " sconto5," + + " sconto6, " + + " sconto7, " + + " sconto8," + + " wdtb_ordr.note," + + " wdtb_ordr.descrizione_estesa," + + " data_cons," + + " cod_alis," + + " cod_art_for, " + + " wdtb_ordr.descrizione as descrizione, " + + " wdtb_ordr.cod_mart, " + + " wdtb_ordr.qta_cnf" + + " FROM wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + + " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.flag_elaborato ='N' AND " + + " wdtb_ordr.id_art <> 0 AND " + + " jtb_cicl.cod_prod is null ) a " + + " WHERE a.data_ord = wdtb_ordr.data_ord AND " + + " a.num_ord = wdtb_ordr.num_ord AND " + + " a.gestione = wdtb_ordr.gestione AND " + + " a.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " a.id_art = wdtb_ordr.id_art AND " + + " wdtb_ordr.cod_mart = jtb_cicl.cod_prod AND " + + " wdtb_ordr.id_art = " + UtilityDB.valueToString(riga.getWdtbOrdr().getIdArt()) + " AND " + + " wdtb_ordr.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); + + query = UtilityDB.addwhereCond(query, whereCondOrdini, true); + PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); + ResultSet res = info.executeQuery(); + while (res.next()) { + DtbOrdr dtbOrdr = new DtbOrdr(); + dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart"))); + dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); + dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord"))); + dtbOrdr.setQtaOrd(res.getBigDecimal("qta_ord")); + dtbOrdr.setUntOrd2(UtilityString.streNull(res.getString("unt_ord2"))); + dtbOrdr.setQtaOrd2(res.getBigDecimal("qta_ord2")); + dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq"))); + dtbOrdr.setNote(UtilityString.streNull(res.getString("note"))); + dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons"))); + dtbOrdr.setValUnt(res.getBigDecimal("val_unt")); + dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione"))); + dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descrizione_estesa"), 255))); + dtbOrdr.setSconto5(res.getBigDecimal("sconto5")); + dtbOrdr.setSconto6(res.getBigDecimal("sconto6")); + dtbOrdr.setSconto7(res.getBigDecimal("sconto7")); + dtbOrdr.setSconto8(res.getBigDecimal("sconto8")); + dtbOrdr.setIdArt(riga.getWdtbOrdr().getIdArt()); + if (res.getDate("data_cons") != null) { + dtbOrdr.setDataCons(res.getDate("data_cons")); + } + dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis"))); + dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for"))); + dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf")); + dtbOrdr.setNumCnf(res.getBigDecimal("num_cnf")); + + dtbOrdt.getDtbOrdr().add(dtbOrdr); + + if (res.getBigDecimal("residuo").compareTo(BigDecimal.ZERO) > 0 && UtilityString.streNull(res.getString("unt_ord2")).compareTo(UtilityString.streNull(res.getString("unt_ord_mate"))) == 0) { + dtbOrdr = new DtbOrdr(); + dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart_mate"))); + dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); + dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord_mate"))); + dtbOrdr.setQtaOrd(res.getBigDecimal("residuo")); + dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf_mate")); + dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq_mate"))); + dtbOrdr.setNote(UtilityString.streNull(res.getString("note_mate"))); + dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons_mate"))); + dtbOrdr.setValUnt(res.getBigDecimal("val_unt_mate")); + //dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione_mate"))); + dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descr_estesa_mate"), 255))); + dtbOrdr.setSconto5(res.getBigDecimal("sconto5_mate")); + dtbOrdr.setSconto6(res.getBigDecimal("sconto6_mate")); + dtbOrdr.setSconto7(res.getBigDecimal("sconto7_mate")); + dtbOrdr.setSconto8(res.getBigDecimal("sconto8_mate")); + if (res.getDate("data_cons_mate") != null) { + dtbOrdr.setDataCons(res.getDate("data_cons_mate")); + } + dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis_mate"))); + dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for_mate"))); + + dtbOrdt.getDtbOrdr().add(dtbOrdr); + } + } + res.close(); + info.close(); + } else { + DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaOmg(), false, false, codAliqOmg); + dtbOrdr + .setPercProv(riga.getWdtbOrdr().getPercProv()) + .setNote(riga.getWdtbOrdr().getNote()) + .setIdArt(riga.getWdtbOrdr().getIdArt()) + .setCodAsso(riga.getWdtbOrdr().getCodAsso()) + .setGruppoCons(riga.getWdtbOrdr().getGruppoCons()) + .setCodOann(riga.getWdtbOrdr().getCodOann()) + .setPartitaMag(riga.getWdtbOrdr().getPartitaMag()); + String flagEvaso = riga.getWdtbOrdr().getFlagEvaso(); + if (riga.getFlagStatoArt() != null && riga.getFlagStatoArt().equalsIgnoreCase("I")) + flagEvaso = "A"; + dtbOrdr.setFlagEvaso(FlagEvaso.from(flagEvaso)); + dtbOrdr.setValUntIva(riga.getWdtbOrdr().getValUntIva()); + + + String codAlis = riga.getWdtbOrdr().getCodAlis(); + String codArtForn = riga.getWdtbOrdr().getCodArtFor(); + /* + PER LE AZIENDE FLOROVIVAISTICHE E' NECESSARIO: + 1) CHE QTA_CNF, RAP_CONV2 E RAP_CONV3 SIANO LETTI RICALCOLATI DAL LISTINO DI VENDITA SE PRESENTE IN BASE ALLE ALTEZZE SPECIFICATE* + 2) CHE VENGA VALORIZZATO COD_ALIS E COD_ART_FORN DELL'ORDINE OVE PRESENTE + */ + String partitaMagAlis = null; +// if (calcQtaDaListino) { +// query = "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + +// " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + +// " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + +// " mtb_aart.unt_mis2, " + +// " mtb_aart.unt_mis3, " + +// " listVend.posizione " + +// " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + +// UtilityDB.valueToString(ordine.getWdtbOrdt().getListino()) + ", " + +// UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + +// " listVend.tipo_variazione <> 'D' " + +// " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); +// PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); +// ResultSet res = info.executeQuery(); +// BigDecimal qtaCnf = null, qtaOrd2 = null, qtaOrd3 = null; +// String untMis2 = "", untMis3 = "", posizioneListino; +// while (res.next()) { +// qtaCnf = res.getBigDecimal(1); +// BigDecimal colliStrato = res.getBigDecimal(2); +// BigDecimal colliPedana = res.getBigDecimal(3); +// untMis2 = res.getString(4); +// untMis3 = res.getString(5); +// posizioneListino = res.getString(6); +// BigDecimal rapConv2 = colliStrato.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); +// BigDecimal rapConv3 = colliPedana.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); +// qtaOrd2 = riga.getWdtbOrdr().getQtaOrd().divide(rapConv2, 2, RoundingMode.HALF_UP); +// qtaOrd3 = riga.getWdtbOrdr().getQtaOrd().divide(rapConv3, 2, RoundingMode.HALF_UP); +// } +// res.close(); +// info.close(); +// +// dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola +// dtbOrdr.setQtaCnf(qtaCnf); +// dtbOrdr.setUntOrd2(untMis2); +// dtbOrdr.setQtaOrd2(qtaOrd2); +// dtbOrdr.setUntOrd3(untMis3); +// dtbOrdr.setQtaOrd3(qtaOrd3); +// +// // ACQUISIZIONE DATI FORNITORE PREFERENZIALE +// codAlis = ""; +// codArtForn = ""; +// query = "SELECT ISNULL(listiniAcq.cod_alis, ''), " + +// " ISNULL(listiniAcq.cod_art_for, ''), " + +// " ISNULL(listiniAcq.partita_mag, '') " + +// " from ( SELECT listino.* " + +// " FROM atb_forn, " + +// " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + +// " (SELECT value_string as cod_atip " + +// " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + +// " WHERE atb_forn.cod_alis = listino.cod_alis AND " + +// " atb_forn.cod_atip = stp.cod_atip AND " + +// " cod_mart IS NOT NULL AND " + +// " tipo_variazione <> 'D' " + +// " UNION " + +// " SELECT listino.* " + +// " FROM atb_forn, vtb_dest, " + +// " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + +// " (SELECT value_string as cod_atip " + +// " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + +// " WHERE atb_forn.cod_atip = stp.cod_atip AND " + +// " atb_forn.cod_anag = vtb_dest.cod_anag AND " + +// " vtb_dest.cod_alis = listino.cod_alis AND " + +// " cod_mart IS NOT NULL AND " + +// " tipo_variazione <> 'D')listiniAcq " + +// " WHERE cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); +// +// info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); +// res = info.executeQuery(); +// partitaMagAlis = ""; +// while (res.next()) { +// codAlis = res.getString(1); +// codArtForn = res.getString(2); +// partitaMagAlis = res.getString(3); +// } +// res.close(); +// info.close(); +// } + dtbOrdr.setCodAlis(codAlis); + dtbOrdr.setCodArtFor(codArtForn); + if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { + dtbOrdr.setPartitaMag(partitaMagAlis); + } + dtbOrdt.getDtbOrdr().add(dtbOrdr); + + } + } + + // RIGA QUANTITA OMAGGIATA + if (riga.getWdtbOrdr().getQtaOmg().compareTo(BigDecimal.ZERO) != 0) { + DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaOmg(), true, false, codAliqOmg); + dtbOrdt.getDtbOrdr().add(dtbOrdr); + } + + // RIGA QUANTITA OMAGGIATA + if (riga.getWdtbOrdr().getQtaReso().compareTo(BigDecimal.ZERO) != 0 && riga.getWdtbOrdr().getFlagResoRiv().equalsIgnoreCase("0")) { + DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaReso(), false, true, codAliqOmg); + dtbOrdt.getDtbOrdr().add(dtbOrdr); + } + } + + // Inserimento eventuali spese accessorie + query = " SELECT wdtb_ords.id_riga, " + + " wdtb_ords.cod_spes, " + + " wdtb_ords.descrizione, " + + " wdtb_ords.importo, " + + " wdtb_ords.cod_aliq, " + + " wdtb_ords.importo_iva " + + " FROM wdtb_ords, wdtb_ordt " + + " WHERE wdtb_ords.gestione = wdtb_ordt.gestione AND " + + " wdtb_ords.data_ord = wdtb_ordt.data_ord AND " + + " wdtb_ords.num_ord = wdtb_ordt.num_ord AND " + + " wdtb_ords.serie = wdtb_ordt.serie "; + + query = UtilityDB.addwhereCond(query, whereCondOrdini, true); + PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); + ResultSet res = info.executeQuery(); + while (res.next()) { + Integer idRiga = res.getInt(1); + String codSpes = res.getString(2); + String descrizioneSpes = res.getString(3); + BigDecimal importo = res.getBigDecimal(4); + String codAliq = res.getString(5); + + DtbOrds ords = new DtbOrds(); + ords.setOperation(OperationType.INSERT); + ords.setIdRiga(idRiga); + ords.setCodSpes(codSpes); + ords.setDescrizione(descrizioneSpes); + ords.setImporto(importo); + ords.setCodAliq(codAliq); + ords.setImportoIva(res.getBigDecimal("importo_iva")); + dtbOrdt.getDtbOrds().add(ords); + } + info.close(); + res.close(); + + entityProcessor.processEntity(dtbOrdt, true, multiDBTransactionManager); + + orderEntities.add(dtbOrdt); + + // Creazione collo di reso + if (creaColloReso) { + ServiceRestResponse importColliDiResoResponse = importColli(multiDBTransactionManager, requestDataDTO.getUsername(), gestione, dataOrd, numOrd, ordine.getWdtbOrdt().getSerie(), + new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(dtbOrdt.getDataOrd()), dtbOrdt.getNumOrd(), codFornTD, ordine.getWdtbOrdt().getCodMdep()); + if (importColliDiResoResponse.getEsito().equals(EsitoType.OK)) { + if (importColliDiResoResponse.getEntity() != null) + orderEntities.add(importColliDiResoResponse.getEntity()); + } else { + throw new Exception(importColliDiResoResponse.getErrorMessage()); + } + } + // Importazione Ordine di lavoro per articoli con distinta senza righe + if (importOrdLav) { + ServiceRestResponse importOrdLavResponse = importOrdLav(multiDBTransactionManager, gestione, dataOrd, numOrd, ordine.getWdtbOrdt().getSerie(), ordine.getWdtbOrdt().getCodMdep()); + if (importOrdLavResponse.getEsito().equals(EsitoType.OK)) { + if (importOrdLavResponse.getEntityList() != null) + orderEntities.addAll(importOrdLavResponse.getEntityList()); + } else { + throw new Exception(importOrdLavResponse.getErrorMessage()); + } + } + + // Creazione ordine trasferimento merce + if (generateOrdTrasfMerce) { + ServiceRestResponse importTrasfMerce = importOrdineTrasfMerce(multiDBTransactionManager, gestione, dataOrd, serie, numOrd, ordine.getWdtbOrdt().getCodMdep(), importdate); + if (importTrasfMerce.getEsito().equals(EsitoType.OK)) { + if (importTrasfMerce.getEntity() != null) + orderEntities.add(importTrasfMerce.getEntity()); + } else { + throw new Exception(importTrasfMerce.getErrorMessage()); + } + } + + return null; + } + + private DtbOrdr getRowOrd(WdtbOrdr riga, BigDecimal qtaOrd, boolean isOmaggio, boolean sostituzione, String codAliqOmg) { + DtbOrdr dtbOrdr = new DtbOrdr(); + dtbOrdr.setCodMart(riga.getCodMart()); + dtbOrdr.setDescrizione(riga.getDescrizione()); + if (!UtilityString.isNullOrEmpty(riga.getCodCol())) { + dtbOrdr.setCodCol(riga.getCodCol()); + dtbOrdr.setCodTagl(riga.getCodTagl()); + } + dtbOrdr.setDescrizioneEstesa(riga.getDescrizioneEstesa()); + dtbOrdr.setCodAliq(riga.getCodAliq()); + dtbOrdr.setUntOrd(riga.getUntOrd()); + dtbOrdr.setQtaOrd(qtaOrd); + BigDecimal sconto5 = riga.getSconto5(); + if (sostituzione) { + sconto5 = new BigDecimal(100); + } else if (codAliqOmg != null) { + dtbOrdr.setCodAliq(codAliqOmg); + } + dtbOrdr.setSconto5(sconto5); + dtbOrdr.setSconto6(riga.getSconto6()); + dtbOrdr.setSconto7(riga.getSconto7()); + dtbOrdr.setSconto8(riga.getSconto8()); + if (riga.getCodPromo() != null) { + dtbOrdr.setCodPromo(riga.getCodPromo()); + } + if (riga.getDataCons() != null) { + dtbOrdr.setDataCons(riga.getDataCons()); + } + return dtbOrdr; } //POST-PROCESS Importazione @@ -1263,140 +888,132 @@ public class OrdiniWebImportService { * @return */ - private ServiceRestResponse existOrderDef(MultiDBTransactionManager multiDBTransactionManager, Connection connection, String username, String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, Date dataImport) { - int count = 0; - int numOrd = 0; - Date dataOrd = null; - PreparedStatement ps; - ResultSet rs; - ServiceRestResponse response = new ServiceRestResponse(); - String annoOrd = new SimpleDateFormat("yyyy").format(dataOrdProvv); - String query, sqlCodFornCond; - String serie = null; + private DtbOrdt existOrderDef(MultiDBTransactionManager multiDBTransactionManager, Connection connection, String username, + String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, Date dataImport) throws Exception { - try { - if (codFornTD == null) { - sqlCodFornCond = (" IS NULL AND"); - } else { - sqlCodFornCond = (String.format(" = %s AND", UtilityDB.valueToString(codFornTD))); - } - // CONTROLLO SE L'ORDINE E' GIA' STATO IMPORTATO IN AZIENDA, SE GIA' PRESENTE E NON E' STATO EVASO NEPPURE - // PARZIALMENTE ALLORA L'ORDINE DEVE ESSERE CANCELLATO E SOVRASCRITTO CON LO STESSO NUMERO EFFETTIVO, - // ALTRIMENTI SE E' STATO EVASO ANCHE SOLO PARZIALAMENTE L'ORDINE NON DEVE ESSERE PIU' IMPORTATO - query = "SELECT data_ord, " + - " num_ord," + - " serie " + - " FROM dtb_ordt " + - " WHERE gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " serie = " + UtilityDB.valueToString(serOrd) + " AND " + - " num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + - " cod_forn_td " + sqlCodFornCond + - " DATEPART(year, data_ord) = " + UtilityDB.valueToString(annoOrd); - - ps = connection.prepareStatement(query); - rs = ps.executeQuery(); - while (rs.next()) { - dataOrd = rs.getDate(1); - numOrd = rs.getInt(2); - serie = rs.getString(3); - count++; - } - rs.close(); - ps.close(); - - if (count == 0) { - response.setEsito(EsitoType.OK); // ORDINE INESISTENTE - } else { - response.setEsito(EsitoType.OK); // ORDINE GIA' ESISTENTE - String formattedDataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd); - query = " SELECT count(*) " + - " FROM dtb_ordr, " + - " dtb_ordt " + - " WHERE dtb_ordr.gestione = dtb_ordt.gestione AND " + - " dtb_ordr.data_ord = dtb_ordt.data_ord AND " + - " dtb_ordr.num_ord = dtb_ordt.num_ord AND " + - " dtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " dtb_ordr.data_ord = " + UtilityDB.valueToString(formattedDataOrd) + " AND " + - " dtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - " dtb_ordt.serie = " + UtilityDB.valueToString(serie) + " AND " + - " (dtb_ordr.qta_evasa <> 0 OR " + - " dtb_ordr.flag_evaso = 'A' OR " + - " dtb_ordr.flag_evaso = 'E' OR " + - " dtb_ordt.flag_annulla = 'S' OR " + - " dtb_ordt.flag_sospeso = 'S') "; - - ps = connection.prepareStatement(query); - rs = ps.executeQuery(); - while (rs.next()) { - count = rs.getInt(1); - } - rs.close(); - ps.close(); - - // SE NON E' STATO EVASO\ANNULLATO ALLORA VERRA' SOVRASCRITTO ALTRIMENTI NON VERRA' IMPORTATO - if (count > 0) { - String errorMessage = String.format("ORDINE PROVVISORIO N° %d del %s NON IMPORTATO. ORDINE GIA' PROCESSATO (ORDINE DEFINITIVO N° %d DEL %s)", numOrdProvv, new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrdProvv), numOrd, formattedDataOrd); - response.setEsito(EsitoType.KO); - response.setErrorMessage(errorMessage); - insertLog(connection, gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); - } else { - // Se non si tratta di un cliente in TD è necessario verificare se esiste un ordine di trasferimento associato - // all'ordine WEB, se esiste e non è stato evaso viene cancellato altrimenti viene la procedura si blocca - if (codFornTD == null) { - query = " SELECT distinct dtb_ordt.gestione, " + - " dtb_ordt.data_ord, " + - " dtb_ordt.num_ord, " + - " CASE WHEN dtb_ordr.qta_evasa <> 0 OR dtb_ordr.flag_evaso = 'A' OR dtb_ordr.flag_evaso = 'E' OR dtb_ordt.flag_annulla = 'S' OR dtb_ordt.flag_sospeso = 'S' THEN 'S' ELSE 'N' END flag_lock " + - " FROM dtb_ordr, " + - " dtb_ordt " + - " WHERE dtb_ordr.gestione = dtb_ordt.gestione AND " + - " dtb_ordr.data_ord = dtb_ordt.data_ord AND " + - " dtb_ordr.num_ord = dtb_ordt.num_ord AND " + - " dtb_ordt.gestione = 'A' AND " + - " dtb_ordt.data_ord = " + UtilityDB.valueToString(formattedDataOrd) + " AND " + - " dtb_ordt.num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + - " dtb_ordt.serie = " + UtilityDB.valueToString(serie); - - ps = connection.prepareStatement(query); - rs = ps.executeQuery(); - while (rs.next()) { - String gestioneAcq = rs.getString(1); - Date dataOrdAcq = rs.getDate(2); - Integer numOrdAcq = rs.getInt(3); - String flagLock = rs.getString(4); - - if ("N".equals(flagLock)) { - DtbOrdt dtbOrdt = new DtbOrdt(); - dtbOrdt.setGestione(gestioneAcq); - dtbOrdt.setDataOrd(dataOrdAcq); - dtbOrdt.setNumOrd(numOrdAcq); - dtbOrdt.setOperation(OperationType.DELETE); - response.setEntity(dtbOrdt); - entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); - } - } - rs.close(); - ps.close(); - } - - // ORDINE ESISTENTE, MA NON ANCORA EVASO E DUNQUE DA SOVRASCRIVERE - DtbOrdt dtbOrdt = new DtbOrdt(); - dtbOrdt.setGestione(gestione); - dtbOrdt.setDataOrd(dataOrd); - dtbOrdt.setNumOrd(numOrd); - dtbOrdt.setOperation(OperationType.DELETE); - response.setEntity(dtbOrdt); - entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); - } - } - } catch (Exception ex) { - String errorMessage = ex.getMessage(); - response.setEsito(EsitoType.KO); - response.setErrorMessage(ex.getMessage()); - logger.error(ex.getMessage(), ex); + String sqlCodFornCond; + if (codFornTD == null) { + sqlCodFornCond = (" IS NULL AND"); + } else { + sqlCodFornCond = (String.format(" = %s AND", UtilityDB.valueToString(codFornTD))); } - return response; + + // CONTROLLO SE L'ORDINE E' GIA' STATO IMPORTATO IN AZIENDA, SE GIA' PRESENTE E NON E' STATO EVASO NEPPURE + // PARZIALMENTE ALLORA L'ORDINE DEVE ESSERE CANCELLATO E SOVRASCRITTO CON LO STESSO NUMERO EFFETTIVO, + // ALTRIMENTI SE E' STATO EVASO ANCHE SOLO PARZIALAMENTE L'ORDINE NON DEVE ESSERE PIU' IMPORTATO + String query = "SELECT data_ord, " + + " num_ord," + + " serie " + + " FROM dtb_ordt " + + " WHERE gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " serie = " + UtilityDB.valueToString(serOrd) + " AND " + + " num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + + " cod_forn_td " + sqlCodFornCond + + " DATEPART(year, data_ord) = " + UtilityDB.valueToString(UtilityDate.datePart(Calendar.YEAR, dataOrdProvv)); + + HashMap datiOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(connection, query); + + if (UtilityHashMap.isPresent(datiOrd)) { + Date dataOrd = (Date) datiOrd.get("data_ord"); + Integer numOrd = (Integer) datiOrd.get("num_ord"); + String serie = (String) datiOrd.get("serie"); + query = " SELECT CAST(count(*) as BIT) " + + " FROM dtb_ordr, " + + " dtb_ordt " + + " WHERE dtb_ordr.gestione = dtb_ordt.gestione AND " + + " dtb_ordr.data_ord = dtb_ordt.data_ord AND " + + " dtb_ordr.num_ord = dtb_ordt.num_ord AND " + + " dtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " dtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " dtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + " dtb_ordt.serie = " + UtilityDB.valueToString(serie) + " AND " + + " (dtb_ordr.qta_evasa <> 0 OR " + + " dtb_ordr.flag_evaso = 'A' OR " + + " dtb_ordr.flag_evaso = 'E' OR " + + " dtb_ordt.flag_annulla = 'S' OR " + + " dtb_ordt.flag_sospeso = 'S') "; + + boolean existsRowOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query); + + // SE NON E' STATO EVASO\ANNULLATO ALLORA VERRA' SOVRASCRITTO ALTRIMENTI NON VERRA' IMPORTATO + if (existsRowOrd) { + String errorMessage = + String.format("ORDINE PROVVISORIO N° %d del %s NON IMPORTATO. ORDINE GIA' PROCESSATO (ORDINE DEFINITIVO N° %d DEL %s)", + numOrdProvv, + new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrdProvv), + numOrd, + new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd)); + + insertLog(connection, gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); + throw new Exception(errorMessage); + } else { + // Se non si tratta di un cliente in TD è necessario verificare se esiste un ordine di trasferimento associato + // all'ordine WEB, se esiste e non è stato evaso viene cancellato altrimenti viene la procedura si blocca + if (codFornTD == null) { + query = " SELECT distinct dtb_ordt.gestione, " + + " dtb_ordt.data_ord, " + + " dtb_ordt.num_ord, " + + " CASE WHEN dtb_ordr.qta_evasa <> 0 OR dtb_ordr.flag_evaso = 'A' OR dtb_ordr.flag_evaso = 'E' OR dtb_ordt.flag_annulla = 'S' OR dtb_ordt.flag_sospeso = 'S' THEN 'S' ELSE 'N' END flag_lock " + + " FROM dtb_ordr, " + + " dtb_ordt " + + " WHERE dtb_ordr.gestione = dtb_ordt.gestione AND " + + " dtb_ordr.data_ord = dtb_ordt.data_ord AND " + + " dtb_ordr.num_ord = dtb_ordt.num_ord AND " + + " dtb_ordt.gestione = 'A' AND " + + " dtb_ordt.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " dtb_ordt.num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + + " dtb_ordt.serie = " + UtilityDB.valueToString(serie); + + HashMap datiOrdAcq = UtilityDB.executeSimpleQueryOnlyFirstRow(connection, query); + + if (UtilityHashMap.isPresent(datiOrdAcq)) { + String gestioneAcq = (String) datiOrdAcq.get("gestione"); + Date dataOrdAcq = (Date) datiOrdAcq.get("data_ord"); + Integer numOrdAcq = (Integer) datiOrdAcq.get("num_ord"); + String flagLock = (String) datiOrdAcq.get("flag_lock"); + + if ("N".equals(flagLock)) { + DtbOrdt dtbOrdt = new DtbOrdt(); + dtbOrdt.setGestione(gestioneAcq); + dtbOrdt.setDataOrd(dataOrdAcq); + dtbOrdt.setNumOrd(numOrdAcq); + dtbOrdt.setOperation(OperationType.DELETE); + entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); + } + } + } + + // ORDINE ESISTENTE, MA NON ANCORA EVASO E DUNQUE DA SOVRASCRIVERE + DtbOrdt dtbOrdt = new DtbOrdt(); + dtbOrdt.setGestione(gestione); + dtbOrdt.setDataOrd(dataOrd); + dtbOrdt.setNumOrd(numOrd); + dtbOrdt.setOperation(OperationType.DELETE); + entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); + return dtbOrdt; + } + } + + query = "SELECT flag_elaborato from wdtb_ordt " + + "WHERE gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " data_ord = " + UtilityDB.valueDateToString(dataOrdProvv, CommonConstants.DATE_FORMAT_YMD) + " AND " + + " num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + + " serie = " + UtilityDB.valueToString(serOrd); + + String flagElaborato = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query); + if (flagElaborato != null && flagElaborato.equalsIgnoreCase("S")) { + String errorMessage = + String.format("ORDINE PROVVISORIO N° %d del %s NON IMPORTATO. ORDINE IN FASE DI ELABORAZIONE DA UN ALTRO UTENTE", + numOrdProvv, + new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrdProvv) + ); + + insertLog(connection, gestione, dataOrdProvv, serOrd, numOrdProvv, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); + throw new Exception(errorMessage); + } + + return null; } /** From 32c38b85aa89a9705d6121c0399628527f6d255d Mon Sep 17 00:00:00 2001 From: MinaR Date: Tue, 29 Jul 2025 15:24:50 +0200 Subject: [PATCH 02/28] revisione importazione ordini web --- .../ems_model/entity/DtbOrdLogImport.java | 6 +- .../service/OrdiniWebImportService.java | 1769 ++++++++--------- 2 files changed, 809 insertions(+), 966 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java index 6c6c1c405a..2c77689557 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java @@ -1,10 +1,7 @@ package it.integry.ems_model.entity; import com.fasterxml.jackson.annotation.JsonTypeName; -import it.integry.ems_model.annotation.Master; -import it.integry.ems_model.annotation.PK; -import it.integry.ems_model.annotation.SqlField; -import it.integry.ems_model.annotation.Table; +import it.integry.ems_model.annotation.*; import it.integry.ems_model.base.EntityBase; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,6 +27,7 @@ public class DtbOrdLogImport extends EntityBase { private LocalDateTime dataImport; @PK + @SqlDetailId @SqlField(value = "id_riga", nullable = false) private Integer idRiga; diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java index 6515f93618..3895207ebb 100644 --- a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java @@ -7,13 +7,12 @@ import it.integry.WooCommerce.enums.OrderStatus; import it.integry.WooCommerce.service.WooCommerceRestService; import it.integry.common.var.CommonConstants; import it.integry.ems.Import.dto.ImportRequestDTO; +import it.integry.ems.exception.PrimaryDatabaseNotPresentException; import it.integry.ems.file_formatter.csv.CsvMapper; import it.integry.ems.javabeans.RequestDataDTO; import it.integry.ems.order.Import.dto.ImporOrdiniWebDTO; import it.integry.ems.order.Import.dto.ImportOrdiniWebRowDTO; import it.integry.ems.order.Import.dto.OrdiniYocabeDTO; -import it.integry.ems.response.EsitoType; -import it.integry.ems.response.ServiceRestResponse; import it.integry.ems.rules.completing.CommonRules; import it.integry.ems.rules.completing.OrderRules; import it.integry.ems.rules.completing.dto.DatiPartitaMagDTO; @@ -24,7 +23,6 @@ import it.integry.ems_model.base.EntityBase; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.entity.*; import it.integry.ems_model.entity._enum.FlagEvaso; -import it.integry.ems_model.exception.EntityException; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.ApplicationName; import it.integry.ems_model.types.OperationType; @@ -35,17 +33,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; +import static java.util.stream.Collectors.groupingBy; + @Service @Scope("request") public class OrdiniWebImportService { @@ -67,10 +67,25 @@ public class OrdiniWebImportService { @Autowired private WooCommerceRestService restService; + + private DtbOrdLogImport insertLog(String gestione, Date dataOrd, String serie, Integer numOrd, String errorMessage, String flagTipoLog, BigDecimal qtaTotale, Date dataImport, String flagTipoOrd) { + DtbOrdLogImport dtbOrdLogImport = new DtbOrdLogImport() + .setDataImport(UtilityLocalDate.localDateTimeFromDate(dataImport)) + .setGestione(gestione) + .setDataOrd(UtilityLocalDate.localDateTimeFromDate(dataOrd)) + .setSerie(serie) + .setNumOrd(numOrd) + .setFlagTipoOrd(flagTipoOrd) + .setFlagTipoLog(flagTipoLog) + .setDescrizione(errorMessage) + .setTotOrd(1) + .setTotQtaOrd(qtaTotale); + return dtbOrdLogImport; + } + /** * Controllo ordine * - * @param connection * @param dataOrd * @param numOrd * @param serOrd @@ -81,100 +96,62 @@ public class OrdiniWebImportService { * @return */ - private ServiceRestResponse checkOrder(Connection connection, Date dataOrd, Integer numOrd, String serOrd, String gestione, String codVlis, BigDecimal qtaTot, Date dataImport) throws Exception { - ServiceRestResponse serviceRestResponse = new ServiceRestResponse(); - String ls_codMart, ls_descrizione, ls_errMsg; - double lc_przVend, lc_przVendListino; - ResultSet rs; - PreparedStatement ps; + private List checkOrder(Date dataOrd, Integer numOrd, String serOrd, String gestione, String codVlis, BigDecimal qtaTot, Date dataImport) throws Exception { + String query = + "SELECT vtb_list.cod_vlis, " + + " tmp_list.cod_mart as 'cod_mart', " + + " IsNull(mtb_lisv_data.prz_vend, mtb_lisv.prz_vend) as prz_vend," + + " wdtb_ordr.val_unt," + + " wdtb_ordr.riga_ord," + + " CASE WHEN mtb_aart.descrizione_estesa IS NULL THEN mtb_aart.descrizione ELSE mtb_aart.descrizione_estesa END as descr_estesa_art " + + " FROM (SELECT IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis) as cod_vlis, " + + " mtb_lisv.cod_mart, " + + " max(case when vtb_list_data.versione is null then null else Convert(varchar(10), vtb_list_data.data_iniz, 111) + ' ' + replicate('0', 4 - len(vtb_list_data.versione)) + Convert(varchar(5), vtb_list_data.versione) end ) as max_lisv " + + " FROM vtb_list,mtb_aart, " + + " mtb_lisv LEFT OUTER JOIN mtb_lisv_data ON mtb_lisv.cod_vlis = mtb_lisv_data.cod_vlis AND " + + " mtb_lisv.cod_mart = mtb_lisv_data.cod_mart " + + " LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND " + + " mtb_lisv_data.versione = vtb_list_data.versione and " + + " vtb_list_data.cod_promo is null AND " + + " vtb_list_data.data_iniz <= " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + "" + + " WHERE IsNull(vtb_list.cod_vlis_rif, vtb_list.cod_vlis) = mtb_lisv.cod_vlis AND " + + " mtb_lisv.cod_mart = mtb_aart.cod_mart " + + " GROUP BY IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis), " + + " mtb_lisv.cod_mart) tmp_list LEFT OUTER JOIN mtb_lisv on tmp_list.cod_vlis = mtb_lisv.cod_vlis AND " + + " tmp_list.cod_mart = mtb_lisv.cod_mart AND " + + " tmp_list.max_lisv is null " + + " LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis = mtb_lisv_data.cod_vlis AND " + + " tmp_list.cod_mart = mtb_lisv_data.cod_mart AND " + + " Convert(int, right( tmp_list.max_lisv, 4)) = mtb_lisv_data.versione, " + + " vtb_list, " + + " gtb_divi, " + + " mtb_aart," + + " wdtb_ordr " + + " WHERE wdtb_ordr.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " and " + + " wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " and " + + " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + " and " + + " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " and " + + " vtb_list.cod_vlis = " + UtilityDB.valueToString(codVlis) + " and " + + " IsNull(tipo_variazione, '') <> 'D' AND mtb_aart.flag_stato = 'A' and " + + " vtb_list.cod_vlis = tmp_list.cod_vlis and " + + " gtb_divi.cod_divi = vtb_list.cod_divi and " + + " tmp_list.cod_mart = mtb_aart.cod_mart and " + + " wdtb_ordr.cod_mart = tmp_list.cod_mart " + + " ORDER BY vtb_list.cod_vlis"; - serviceRestResponse.setEsito(EsitoType.OK); - String query = "SELECT vtb_list.cod_vlis, " + - " tmp_list.cod_mart as 'cod_mart', " + - " IsNull(mtb_lisv_data.prz_vend, mtb_lisv.prz_vend) as prz_vend," + - " wdtb_ordr.val_unt," + - " wdtb_ordr.riga_ord," + - " CASE WHEN mtb_aart.descrizione_estesa IS NULL THEN mtb_aart.descrizione ELSE mtb_aart.descrizione_estesa END as descr_estesa_art " + - " FROM (SELECT IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis) as cod_vlis, " + - " mtb_lisv.cod_mart, " + - " max(case when vtb_list_data.versione is null then null else Convert(varchar(10), vtb_list_data.data_iniz, 111) + ' ' + replicate('0', 4 - len(vtb_list_data.versione)) + Convert(varchar(5), vtb_list_data.versione) end ) as max_lisv " + - " FROM vtb_list,mtb_aart, " + - " mtb_lisv LEFT OUTER JOIN mtb_lisv_data ON mtb_lisv.cod_vlis = mtb_lisv_data.cod_vlis AND " + - " mtb_lisv.cod_mart = mtb_lisv_data.cod_mart " + - " LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND " + - " mtb_lisv_data.versione = vtb_list_data.versione and " + - " vtb_list_data.cod_promo is null AND " + - " vtb_list_data.data_iniz <= " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + "" + - " WHERE IsNull(vtb_list.cod_vlis_rif, vtb_list.cod_vlis) = mtb_lisv.cod_vlis AND " + - " mtb_lisv.cod_mart = mtb_aart.cod_mart " + - " GROUP BY IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis), " + - " mtb_lisv.cod_mart) tmp_list LEFT OUTER JOIN mtb_lisv on tmp_list.cod_vlis = mtb_lisv.cod_vlis AND " + - " tmp_list.cod_mart = mtb_lisv.cod_mart AND " + - " tmp_list.max_lisv is null " + - " LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis = mtb_lisv_data.cod_vlis AND " + - " tmp_list.cod_mart = mtb_lisv_data.cod_mart AND " + - " Convert(int, right( tmp_list.max_lisv, 4)) = mtb_lisv_data.versione, " + - " vtb_list, " + - " gtb_divi, " + - " mtb_aart," + - " wdtb_ordr " + - " WHERE wdtb_ordr.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " and " + - " wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " and " + - " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + " and " + - " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " and " + - " vtb_list.cod_vlis = " + UtilityDB.valueToString(codVlis) + " and " + - " IsNull(tipo_variazione, '') <> 'D' AND mtb_aart.flag_stato = 'A' and " + - " vtb_list.cod_vlis = tmp_list.cod_vlis and " + - " gtb_divi.cod_divi = vtb_list.cod_divi and " + - " tmp_list.cod_mart = mtb_aart.cod_mart and " + - " wdtb_ordr.cod_mart = tmp_list.cod_mart " + - " ORDER BY vtb_list.cod_vlis"; + List> datiOrdine = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + return datiOrdine.stream().filter(x -> x.get("val_unt") != x.get("prz_vend")) + .map( + x -> { + String errMsg = x.get("cod_mart") + " " + + UtilityString.streNull(x.get("descrizione_estesa_art").toString()) + + " prz. listino: " + String.valueOf((double) x.get("prz_vend")) + + " - prz. applicato: " + String.valueOf((double) x.get("val_unt")); + return insertLog(gestione, dataOrd, serOrd, numOrd, errMsg, "2", qtaTot, dataImport, "P"); + }).collect(Collectors.toList()); - ps = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - rs = ps.executeQuery(); - while (rs.next()) { - ls_codMart = rs.getString(2); - lc_przVendListino = rs.getDouble(3); - lc_przVend = rs.getDouble(4); - ls_descrizione = UtilityString.streNull(rs.getString(6)); - - if (lc_przVend != lc_przVendListino) { - ls_errMsg = ls_codMart + " " + ls_descrizione + " prz. listino: " + String.valueOf(lc_przVendListino) + " - prz. applicato: " + String.valueOf(lc_przVend); - insertLog(connection, gestione, dataOrd, serOrd, numOrd, ls_errMsg, "2", qtaTot, dataImport, "P"); - serviceRestResponse.setEsito(EsitoType.KO); - } - } - rs.close(); - ps.close(); - return serviceRestResponse; } - private void insertLog(Connection connection, String gestione, Date dataOrd, String serie, Integer numOrd, String errorMessage, String flagTipoLog, BigDecimal qtaTotale, Date dataImport, String flagTipoOrd) throws Exception { - String query = "SELECT max(id_riga) " + - " FROM dtb_ord_log_import " + - " WHERE data_import = " + UtilityDB.valueDateToString(dataImport, CommonConstants.DATETIME_FORMAT_YMD); - - Integer idRiga = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query); - if (idRiga == null) idRiga = 0; - - // INSERIMENTO RIGA DI LOG - idRiga++; - - DtbOrdLogImport dtbOrdLogImport = new DtbOrdLogImport() - .setDataImport(UtilityLocalDate.localDateTimeFromDate(dataImport)) - .setIdRiga(idRiga) - .setGestione(gestione) - .setDataOrd(UtilityLocalDate.localDateTimeFromDate(dataOrd)) - .setSerie(serie) - .setNumOrd(numOrd) - .setFlagTipoOrd(flagTipoOrd) - .setFlagTipoLog(flagTipoLog) - .setDescrizione(errorMessage) - .setTotOrd(1) - .setTotQtaOrd(qtaTotale); - dtbOrdLogImport.setOperation(OperationType.INSERT); - dtbOrdLogImport.manageWithParentConnection(connection); - } public List importOrdiniWEB(String type, String format, ImportRequestDTO body) throws Exception { // Acquisizione data importazione dal server DB(deve essere univoca per l'intera importazione) @@ -198,9 +175,6 @@ public class OrdiniWebImportService { throw new Exception(String.format("Codice Deposito di default non configurato correttamente. Verificare la configurazione di importazione %s formato %s", type, format)); } - // VERIFICA ESISTENZA CONDIZIONE DI WHERE SU CLIENTI DA ESCLUDERE DALL'IMPORTAZIONE - String elencoClientiNoImport = importSetupSection.get("ELENCO_CLIENTI_NO_IMPORT"); - /* VERIFICA SE I DATI DI QTA2 e QTA3 devono essere calcolati in base ai dati di listino. Solitamente questa logica è valida per le azienda FLOROVIVAISTICHE in quanto il rapporto di conversione è variabili in base alle altezze che sono gestite direttamente dal listino di vendita */ @@ -221,6 +195,13 @@ public class OrdiniWebImportService { boolean calcDataCons = importSetupSection.get("CALC_DATA_CONS") == null ? false : importSetupSection.get("CALC_DATA_CONS").equalsIgnoreCase("S"); boolean setDecorrenza = importSetupSection.get("SET_DECORRENZA") == null ? false : importSetupSection.get("SET_DECORRENZA").equalsIgnoreCase("S"); + // VERIFICA ESISTENZA CONDIZIONE DI WHERE SU CLIENTI DA ESCLUDERE DALL'IMPORTAZIONE + String elencoClientiNoImport = importSetupSection.get("ELENCO_CLIENTI_NO_IMPORT"); + String whereCondClientiNoImport = null; + if (!UtilityString.isNullOrEmpty(elencoClientiNoImport)) { + whereCondClientiNoImport = "wdtb_ordt.cod_anag NOT IN (" + UtilityDB.listValueToString(Arrays.asList(elencoClientiNoImport.split("|"))) + ")"; + } + List wdtbOrdts = new ArrayList<>(); String queryWebOrd = "SELECT wdtb_ordt.*, " + @@ -248,25 +229,18 @@ public class OrdiniWebImportService { " wdtb_ordt.serie, " + " wdtb_ordt.num_ord "; + queryWebOrd = UtilityDB.addwhereCond(queryWebOrd, whereCondClientiNoImport, true); queryWebOrd = UtilityDB.addwhereCond(queryWebOrd, principalWhereCond, true); List ordiniWeb = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), queryWebOrd, ImporOrdiniWebDTO.class); - String untMis2 = null; - String untMis3 = null; - String posizioneListino = null; - String partitaMagAlis = null; - BigDecimal acconto = BigDecimal.ZERO; - BigDecimal qtaCnf = BigDecimal.ONE; - BigDecimal qtaOrd2 = BigDecimal.ZERO; - BigDecimal qtaOrd3 = BigDecimal.ZERO; + List dtbOrdLogImportList; + Date importDate = new Date(); for (ImporOrdiniWebDTO ordine : ordiniWeb) { - // INIZIALIZZAZIONE VARIABILE ORDINE - if (elencoClientiNoImport != null && !elencoClientiNoImport.isEmpty()) { - if (elencoClientiNoImport.indexOf("|" + ordine.getWdtbOrdt().getCodAnag() + "|") >= 0) { - continue; - } - } + String gestione = ordine.getWdtbOrdt().getGestione(); + Date dataOrd = ordine.getWdtbOrdt().getDataOrd(); + Integer numOrd = ordine.getWdtbOrdt().getNumOrd(); + String serOrd = ordine.getWdtbOrdt().getSerie(); if (!UtilityString.isNullOrEmpty(flagSospeso)) ordine.getWdtbOrdt().setFlagSospeso(flagSospeso); @@ -275,27 +249,36 @@ public class OrdiniWebImportService { if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getListino())) ordine.getWdtbOrdt().setListino(UtilityString.isNull(ordine.getCodVlisDest(), ordine.getCodVlisClie())); + + String codVlis = ordine.getWdtbOrdt().getListino(); + query = + Query.format( + "SELECT sum(wdtb_ordr.qta_ord) FROM wdtb_ordr WHERe gestione = %s and data_ord = %s and num_ord = %s and serie = %s", + gestione, dataOrd, numOrd, serOrd); + + BigDecimal qtaOrdTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + + dtbOrdLogImportList = new ArrayList<>(); + List ordiniList = new ArrayList<>(); + // Inizializzazione entity ordine web da aggiornare WdtbOrdt wdtbOrdt = new WdtbOrdt() - .setGestione(ordine.getWdtbOrdt().getGestione()) - .setDataOrd(ordine.getWdtbOrdt().getDataOrd()) - .setNumOrd(ordine.getWdtbOrdt().getNumOrd()) - .setSerie(ordine.getWdtbOrdt().getSerie()); + .setGestione(gestione) + .setDataOrd(dataOrd) + .setNumOrd(numOrd) + .setSerie(serOrd); // ACQUISIZIONE ELENCO FORNITORI TD DELL'ORDINE (SOLO SE IL CLIENTE E' IN TD) // ALTRIMENTI IL FORNITORE VIENE IMPOSTATO A NULL List codFornTDList = new ArrayList<>(); if (ordine.getFlagTd().equalsIgnoreCase("S")) { query = "SELECT DISTINCT mtb_aart_anag.cod_anag " + - " FROM mtb_aart_anag, " + - " wdtb_ordr, " + - " wdtb_ordt " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " mtb_aart_anag.cod_mart = wdtb_ordr.cod_mart AND " + - " wdtb_ordt.gestione = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getGestione()) + " AND " + + " FROM wdtb_ordt inner JOIN wdtb_ordr on wdtb_ordr.gestione = wdtb_ordt.gestione AND " + + " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + + " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + + " wdtb_ordr.serie = wdtb_ordt.serie " + + " inner join mtb_aart_anag on mtb_aart_anag.cod_mart = wdtb_ordr.cod_mart " + + " WHERE wdtb_ordt.gestione = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getGestione()) + " AND " + " wdtb_ordt.data_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getDataOrd()) + " AND " + " wdtb_ordt.num_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getNumOrd()) + " AND " + " wdtb_ordt.serie = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getSerie()); @@ -303,61 +286,85 @@ public class OrdiniWebImportService { } else { codFornTDList.add(null); } - - Date importDate = new Date(); for (String codFornTD : codFornTDList) { - try { - saveDtbOrdt(ordine, codFornTD, setDecorrenza, calcDataCons, controllatoDa, importOrdLav, calcQtaDaListino, codAliqOmg, creaColloReso, - importDate); + List entitySave = saveDtbOrdt(ordine, codFornTD, setDecorrenza, calcDataCons, controllatoDa, importOrdLav, calcQtaDaListino, codAliqOmg, creaColloReso, + importDate, dtbOrdLogImportList); + if (entitySave != null && !entitySave.isEmpty()) { + ordiniList.addAll(entitySave); + } + } + if (ordiniList != null && !ordiniList.isEmpty()) { + //Verifico se nel frattempo è stato importato da un altra procedura + query = "SELECT cast(IIF(flag_elaborato='S',1,0) as bit) " + + " FROM wdtb_ordt " + + " WHERE gestione = " + UtilityDB.valueToString(gestione) + + " AND data_ord = " + UtilityDB.valueToString(dataOrd) + + " AND num_ord = " + UtilityDB.valueToString(numOrd) + + " AND serie = " + UtilityDB.valueToString(serOrd); + + boolean isElaborato = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + if (isElaborato) { + String errore = String.format("Ordine %s %s %d %s già importato", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd), numOrd, serOrd); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errore, "2", qtaOrdTot, importDate, "P")); + } else { wdtbOrdt.setOperation(OperationType.UPDATE); wdtbOrdt.setFlagElaborato("S"); - entityProcessor.processEntity(wdtbOrdt, true, multiDBTransactionManager); - wdtbOrdts.add(wdtbOrdt); - multiDBTransactionManager.commitAll(); - } catch (Exception ex) { -// logger.error(String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, -// new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd), ex); -// insertLog(conn, gestione, dataOrd, serOrd, numOrd, ex.getMessage(), "2", qtaOrdTot, importDate, "P"); -// multiDBTransactionManager.commitAll(); -// wdtbOrdt.setException(new EntityException(ex.getMessage())); -// wdtbOrdts.add(wdtbOrdt); + ordiniList.add(wdtbOrdt); + List entityRet = entityProcessor.processEntityList(ordiniList, multiDBTransactionManager, false); + + List error = entityRet.stream().filter(x -> x.getException() != null).collect(Collectors.toList()); + if (error != null && !error.isEmpty()) { + for (EntityBase e : error) { + String errorMessage = + String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, + new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd) + " " + e.getException().getMessage(); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errorMessage, "2", qtaOrdTot, importDate, "P")); + multiDBTransactionManager.rollbackAll(); + } + } else { + wdtbOrdts.add(wdtbOrdt); + String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); + if (ApplicationName.WINGEST.toString().equals(applName)) { + dtbOrdLogImportList.addAll(checkOrder(dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate)); + } + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P")); + multiDBTransactionManager.commitAll(); + } } } - String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); - if (ApplicationName.TEXTILES.toString().equals(applName)) { -// insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); - } else { -// ServiceRestResponse checkOrderResponse = checkOrder(conn, dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate); -// if (checkOrderResponse.getEsito().equals(EsitoType.OK)) { -// insertLog(conn, gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P"); -// } - } + entityProcessor.processEntityList(dtbOrdLogImportList, multiDBTransactionManager, false); multiDBTransactionManager.commitAll(); - wdtbOrdts.add(wdtbOrdt); - postSave(wdtbOrdts); - } - - return null; + postSave(wdtbOrdts); + return wdtbOrdts; } private List saveDtbOrdt(ImporOrdiniWebDTO ordine, String codFornTD, boolean setDecorrenza, boolean calcDataCons, String controllatoDa, boolean importOrdLav, boolean calcQtaDaListino, String codAliqOmg, boolean creaColloReso, - Date importdate) throws Exception { + Date importdate, List dtbOrdLogImportList) throws Exception { List orderEntities = new ArrayList<>(); String gestione = ordine.getWdtbOrdt().getGestione(); Date dataOrd = ordine.getWdtbOrdt().getDataOrd(); Integer numOrd = ordine.getWdtbOrdt().getNumOrd(); String serie = ordine.getWdtbOrdt().getSerie(); - DtbOrdt dtbOrdt = existOrderDef(multiDBTransactionManager, multiDBTransactionManager.getPrimaryConnection(), requestDataDTO.getUsername(), - gestione, dataOrd, serie, numOrd, codFornTD, importdate); + List ordini = existOrderDef( + gestione, dataOrd, serie, numOrd, codFornTD, importdate, dtbOrdLogImportList); + + DtbOrdt dtbOrdt = null; + if (ordini != null && ordini.size() > 0) { + orderEntities.addAll(ordini); + dtbOrdt = ordini.stream().filter(x -> x.getGestione().equalsIgnoreCase("V")).findFirst().orElse(null); + if (dtbOrdt != null) { + orderEntities.remove(dtbOrdt); + } + } if (dtbOrdt == null) dtbOrdt = new DtbOrdt(); dtbOrdt.setOperation(OperationType.INSERT_OR_UPDATE); @@ -365,20 +372,19 @@ public class OrdiniWebImportService { dtbOrdt.setGestione("V"); dtbOrdt.setFlagPrzIva(ordine.getWdtbOrdt().getFlagPrzIva()); - String whereCondOrdini = "wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - "wdtb_ordt.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + - "wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - "wdtb_ordt.serie = " + UtilityDB.valueToString(serie); - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD String query = " SELECT wdtb_ordr.*, mtb_aart.flag_stato as flag_stato_art " + " FROM wdtb_ordr LEFT OUTER JOIN mtb_aart on wdtb_ordr.cod_mart = mtb_aart.cod_mart " + + " WHERE wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + "wdtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + "wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + "wdtb_ordr.serie = " + UtilityDB.valueToString(serie) + " ORDER BY wdtb_ordr.pos_riga , wdtb_ordr.riga_ord "; if (codFornTD != null) { query = UtilityDB.addwhereCond(query, "EXISTS (SELECT * FROM mtb_aart_anag WHERE wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND mtb_aart_anag.cod_anag = " + UtilityDB.valueToString(codFornTD), false); } - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); + List righeOrd = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, ImportOrdiniWebRowDTO.class); boolean generateOrdTrasfMerce = false; @@ -396,7 +402,6 @@ public class OrdiniWebImportService { if (dataConsRich == null) { dataConsRich = UtilityDate.dateAdd(dataCons, ggCons); - } } @@ -404,7 +409,6 @@ public class OrdiniWebImportService { dtbOrdt.setDataRifScad(dataConsRich); } - dtbOrdt.setGestione("V") .setFlagAnnulla(ordine.getWdtbOrdt().getFlagAnnulla()) .setEanFidelity(ordine.getWdtbOrdt().getEanFidelity()) @@ -447,11 +451,13 @@ public class OrdiniWebImportService { dtbOrdt.setCodVvet(ordine.getWdtbOrdt().getCodVvet()); // Aggiunta riga descrittiva acconto - if (ordine.getFlagTd().equalsIgnoreCase("N") && !UtilityBigDecimal.isNullOrZero(ordine.getWdtbOrdt().getAcconto())) { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setDescrizione("IMPORTO ACCONTO " + ordine.getWdtbOrdt().getCodDivi() + " " + ordine.getWdtbOrdt().getAcconto().setScale(2, RoundingMode.HALF_UP).toString()); - dtbOrdr.setDescrizioneEstesa(dtbOrdr.getDescrizione()); - dtbOrdr.setQtaOrd(BigDecimal.ZERO); + if (ordine.getFlagTd().equalsIgnoreCase("N") && + !UtilityBigDecimal.isNullOrZero(ordine.getWdtbOrdt().getAcconto())) { + String descrizioneAcconto = "IMPORTO ACCONTO " + ordine.getWdtbOrdt().getCodDivi() + " " + ordine.getWdtbOrdt().getAcconto().setScale(2, RoundingMode.HALF_UP).toString(); + DtbOrdr dtbOrdr = new DtbOrdr() + .setDescrizione(descrizioneAcconto) + .setDescrizioneEstesa(descrizioneAcconto) + .setQtaOrd(BigDecimal.ZERO); dtbOrdt.getDtbOrdr().add(dtbOrdr); } @@ -460,7 +466,6 @@ public class OrdiniWebImportService { if (ordine.getFlagTd().equalsIgnoreCase("N")) { generateOrdTrasfMerce = righeOrd.stream().noneMatch(x -> x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); } - } for (ImportOrdiniWebRowDTO riga : righeOrd) { @@ -470,150 +475,8 @@ public class OrdiniWebImportService { if (riga.getWdtbOrdr().getQtaOrd().compareTo(BigDecimal.ZERO) != 0) { // GESTIONE RIGA BATTISCOPA PER IME if (importOrdLav && riga.getWdtbOrdr().getIdArt() != null && riga.getWdtbOrdr().getIdArt() != 0) { - query = "SELECT wdtb_ordt.cod_jcom as cod_jcom," + - " wdtb_ordr.cod_mart as cod_mart," + - " wdtb_ordr.unt_ord as unt_ord," + - " wdtb_ordr.qta_ord as qta_ord," + - " ((a.val_unt*wdtb_ordr.qta_ord2)/wdtb_ordr.qta_ord + wdtb_ordr.val_unt) as val_unt, " + - " wdtb_ordr.cod_aliq as cod_aliq, " + - " wdtb_ordr.cod_asso as cod_asso, " + - " wdtb_ordr.gruppo_cons as gruppo_cons, " + - " wdtb_ordr.sconto5 as sconto5, " + - " wdtb_ordr.sconto6 as sconto6, " + - " wdtb_ordr.sconto7 as sconto7, " + - " wdtb_ordr.sconto8 as sconto8, " + - " wdtb_ordr.note as note, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.descrizione_estesa +' '+ a.descrizione +' ('+wdtb_ordr.unt_ord2 + ' '+ Convert(varchar(13),Convert(decimal(10,2),wdtb_ordr.qta_ord2)) +')' as descrizione_estesa, " + - " wdtb_ordr.data_cons as data_cons, " + - " wdtb_ordr.cod_alis as cod_alis, " + - " wdtb_ordr.cod_art_for as cod_art_for, " + - " wdtb_ordr.unt_ord2 as unt_ord2," + - " Wdtb_ordr.qta_ord2 as qta_ord2," + - " a.cod_mart as cod_mart_mate," + - " a.unt_ord as unt_ord_mate, " + - " a.qta_ord - wdtb_ordr.qta_ord2 as residuo, " + - " a.cod_aliq as cod_aliq_mate, " + - " a.cod_asso as cod_asso_mate," + - " a.gruppo_cons as gruppo_cons_mate, " + - " a.sconto5 as sconto5_mate," + - " a.sconto6 as sconto6_mate, " + - " a.sconto7 as sconto7_mate," + - " a.sconto8 as sconto8_mate," + - " a.note as note_mate," + - " a.descrizione_estesa as descr_estesa_mate," + - " a.data_cons as data_cons_mate," + - " a.cod_alis as cod_alis_mate," + - " a.cod_art_for as cod_art_for_mate, " + - " a.val_unt as val_unt_mate, " + - " wdtb_ordr.qta_cnf as qta_cnf, " + - " wdtb_ordr.num_cnf as num_cnf, " + - " a.qta_cnf as qta_cnf_mate " + - " FROM wdtb_ordt, wdtb_ordr , jtb_cicl , " + - " (SELECT wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.val_unt, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord," + - " cod_aliq," + - " cod_asso," + - " gruppo_cons," + - " sconto5," + - " sconto6, " + - " sconto7, " + - " sconto8," + - " wdtb_ordr.note," + - " wdtb_ordr.descrizione_estesa," + - " data_cons," + - " cod_alis," + - " cod_art_for, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.cod_mart, " + - " wdtb_ordr.qta_cnf" + - " FROM wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + - " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.flag_elaborato ='N' AND " + - " wdtb_ordr.id_art <> 0 AND " + - " jtb_cicl.cod_prod is null ) a " + - " WHERE a.data_ord = wdtb_ordr.data_ord AND " + - " a.num_ord = wdtb_ordr.num_ord AND " + - " a.gestione = wdtb_ordr.gestione AND " + - " a.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " a.id_art = wdtb_ordr.id_art AND " + - " wdtb_ordr.cod_mart = jtb_cicl.cod_prod AND " + - " wdtb_ordr.id_art = " + UtilityDB.valueToString(riga.getWdtbOrdr().getIdArt()) + " AND " + - " wdtb_ordr.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); - - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); - PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - DtbOrdr dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart"))); - dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); - dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord"))); - dtbOrdr.setQtaOrd(res.getBigDecimal("qta_ord")); - dtbOrdr.setUntOrd2(UtilityString.streNull(res.getString("unt_ord2"))); - dtbOrdr.setQtaOrd2(res.getBigDecimal("qta_ord2")); - dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq"))); - dtbOrdr.setNote(UtilityString.streNull(res.getString("note"))); - dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons"))); - dtbOrdr.setValUnt(res.getBigDecimal("val_unt")); - dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione"))); - dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descrizione_estesa"), 255))); - dtbOrdr.setSconto5(res.getBigDecimal("sconto5")); - dtbOrdr.setSconto6(res.getBigDecimal("sconto6")); - dtbOrdr.setSconto7(res.getBigDecimal("sconto7")); - dtbOrdr.setSconto8(res.getBigDecimal("sconto8")); - dtbOrdr.setIdArt(riga.getWdtbOrdr().getIdArt()); - if (res.getDate("data_cons") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons")); - } - dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis"))); - dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for"))); - dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf")); - dtbOrdr.setNumCnf(res.getBigDecimal("num_cnf")); - - dtbOrdt.getDtbOrdr().add(dtbOrdr); - - if (res.getBigDecimal("residuo").compareTo(BigDecimal.ZERO) > 0 && UtilityString.streNull(res.getString("unt_ord2")).compareTo(UtilityString.streNull(res.getString("unt_ord_mate"))) == 0) { - dtbOrdr = new DtbOrdr(); - dtbOrdr.setCodMart(UtilityString.streNull(res.getString("cod_mart_mate"))); - dtbOrdr.setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))); - dtbOrdr.setUntOrd(UtilityString.streNull(res.getString("unt_ord_mate"))); - dtbOrdr.setQtaOrd(res.getBigDecimal("residuo")); - dtbOrdr.setQtaCnf(res.getBigDecimal("qta_cnf_mate")); - dtbOrdr.setCodAliq(UtilityString.streNull(res.getString("cod_aliq_mate"))); - dtbOrdr.setNote(UtilityString.streNull(res.getString("note_mate"))); - dtbOrdr.setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons_mate"))); - dtbOrdr.setValUnt(res.getBigDecimal("val_unt_mate")); - //dtbOrdr.setDescrizione(UtilityString.streNull(res.getString("descrizione_mate"))); - dtbOrdr.setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descr_estesa_mate"), 255))); - dtbOrdr.setSconto5(res.getBigDecimal("sconto5_mate")); - dtbOrdr.setSconto6(res.getBigDecimal("sconto6_mate")); - dtbOrdr.setSconto7(res.getBigDecimal("sconto7_mate")); - dtbOrdr.setSconto8(res.getBigDecimal("sconto8_mate")); - if (res.getDate("data_cons_mate") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons_mate")); - } - dtbOrdr.setCodAlis(UtilityString.streNull(res.getString("cod_alis_mate"))); - dtbOrdr.setCodArtFor(UtilityString.streNull(res.getString("cod_art_for_mate"))); - - dtbOrdt.getDtbOrdr().add(dtbOrdr); - } - } - res.close(); - info.close(); + List righeBattiscopa = getRowBattiscopa(riga, gestione, dataOrd, numOrd, serie); + dtbOrdt.getDtbOrdr().addAll(righeBattiscopa); } else { DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaOmg(), false, false, codAliqOmg); dtbOrdr @@ -623,106 +486,24 @@ public class OrdiniWebImportService { .setCodAsso(riga.getWdtbOrdr().getCodAsso()) .setGruppoCons(riga.getWdtbOrdr().getGruppoCons()) .setCodOann(riga.getWdtbOrdr().getCodOann()) - .setPartitaMag(riga.getWdtbOrdr().getPartitaMag()); + .setPartitaMag(riga.getWdtbOrdr().getPartitaMag()) + .setValUntIva(riga.getWdtbOrdr().getValUntIva()) + .setCodAlis(riga.getWdtbOrdr().getCodAlis()) + .setCodArtFor(riga.getWdtbOrdr().getCodArtFor()); + String flagEvaso = riga.getWdtbOrdr().getFlagEvaso(); if (riga.getFlagStatoArt() != null && riga.getFlagStatoArt().equalsIgnoreCase("I")) flagEvaso = "A"; dtbOrdr.setFlagEvaso(FlagEvaso.from(flagEvaso)); - dtbOrdr.setValUntIva(riga.getWdtbOrdr().getValUntIva()); - - - String codAlis = riga.getWdtbOrdr().getCodAlis(); - String codArtForn = riga.getWdtbOrdr().getCodArtFor(); + if (calcQtaDaListino) { /* PER LE AZIENDE FLOROVIVAISTICHE E' NECESSARIO: 1) CHE QTA_CNF, RAP_CONV2 E RAP_CONV3 SIANO LETTI RICALCOLATI DAL LISTINO DI VENDITA SE PRESENTE IN BASE ALLE ALTEZZE SPECIFICATE* 2) CHE VENGA VALORIZZATO COD_ALIS E COD_ART_FORN DELL'ORDINE OVE PRESENTE */ - String partitaMagAlis = null; -// if (calcQtaDaListino) { -// query = "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + -// " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + -// " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + -// " mtb_aart.unt_mis2, " + -// " mtb_aart.unt_mis3, " + -// " listVend.posizione " + -// " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + -// UtilityDB.valueToString(ordine.getWdtbOrdt().getListino()) + ", " + -// UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + -// " listVend.tipo_variazione <> 'D' " + -// " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); -// PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); -// ResultSet res = info.executeQuery(); -// BigDecimal qtaCnf = null, qtaOrd2 = null, qtaOrd3 = null; -// String untMis2 = "", untMis3 = "", posizioneListino; -// while (res.next()) { -// qtaCnf = res.getBigDecimal(1); -// BigDecimal colliStrato = res.getBigDecimal(2); -// BigDecimal colliPedana = res.getBigDecimal(3); -// untMis2 = res.getString(4); -// untMis3 = res.getString(5); -// posizioneListino = res.getString(6); -// BigDecimal rapConv2 = colliStrato.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); -// BigDecimal rapConv3 = colliPedana.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); -// qtaOrd2 = riga.getWdtbOrdr().getQtaOrd().divide(rapConv2, 2, RoundingMode.HALF_UP); -// qtaOrd3 = riga.getWdtbOrdr().getQtaOrd().divide(rapConv3, 2, RoundingMode.HALF_UP); -// } -// res.close(); -// info.close(); -// -// dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola -// dtbOrdr.setQtaCnf(qtaCnf); -// dtbOrdr.setUntOrd2(untMis2); -// dtbOrdr.setQtaOrd2(qtaOrd2); -// dtbOrdr.setUntOrd3(untMis3); -// dtbOrdr.setQtaOrd3(qtaOrd3); -// -// // ACQUISIZIONE DATI FORNITORE PREFERENZIALE -// codAlis = ""; -// codArtForn = ""; -// query = "SELECT ISNULL(listiniAcq.cod_alis, ''), " + -// " ISNULL(listiniAcq.cod_art_for, ''), " + -// " ISNULL(listiniAcq.partita_mag, '') " + -// " from ( SELECT listino.* " + -// " FROM atb_forn, " + -// " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + -// " (SELECT value_string as cod_atip " + -// " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + -// " WHERE atb_forn.cod_alis = listino.cod_alis AND " + -// " atb_forn.cod_atip = stp.cod_atip AND " + -// " cod_mart IS NOT NULL AND " + -// " tipo_variazione <> 'D' " + -// " UNION " + -// " SELECT listino.* " + -// " FROM atb_forn, vtb_dest, " + -// " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + -// " (SELECT value_string as cod_atip " + -// " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + -// " WHERE atb_forn.cod_atip = stp.cod_atip AND " + -// " atb_forn.cod_anag = vtb_dest.cod_anag AND " + -// " vtb_dest.cod_alis = listino.cod_alis AND " + -// " cod_mart IS NOT NULL AND " + -// " tipo_variazione <> 'D')listiniAcq " + -// " WHERE cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); -// -// info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); -// res = info.executeQuery(); -// partitaMagAlis = ""; -// while (res.next()) { -// codAlis = res.getString(1); -// codArtForn = res.getString(2); -// partitaMagAlis = res.getString(3); -// } -// res.close(); -// info.close(); -// } - dtbOrdr.setCodAlis(codAlis); - dtbOrdr.setCodArtFor(codArtForn); - if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { - dtbOrdr.setPartitaMag(partitaMagAlis); + getDatiListino(dataOrd, ordine.getWdtbOrdt().getListino(), riga.getWdtbOrdr().getCodMart(), riga.getWdtbOrdr().getQtaOrd(), dtbOrdr); } dtbOrdt.getDtbOrdr().add(dtbOrdr); - } } @@ -746,73 +527,290 @@ public class OrdiniWebImportService { " wdtb_ords.importo, " + " wdtb_ords.cod_aliq, " + " wdtb_ords.importo_iva " + - " FROM wdtb_ords, wdtb_ordt " + - " WHERE wdtb_ords.gestione = wdtb_ordt.gestione AND " + + " FROM wdtb_ords INNER JOIN wdtb_ordt ON wdtb_ords.gestione = wdtb_ordt.gestione AND " + " wdtb_ords.data_ord = wdtb_ordt.data_ord AND " + " wdtb_ords.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ords.serie = wdtb_ordt.serie "; + " wdtb_ords.serie = wdtb_ordt.serie " + + " WHERE wdtb_ords.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + "wdtb_ords.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + "wdtb_ords.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + "wdtb_ords.serie = " + UtilityDB.valueToString(serie); - query = UtilityDB.addwhereCond(query, whereCondOrdini, true); - PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - Integer idRiga = res.getInt(1); - String codSpes = res.getString(2); - String descrizioneSpes = res.getString(3); - BigDecimal importo = res.getBigDecimal(4); - String codAliq = res.getString(5); - - DtbOrds ords = new DtbOrds(); - ords.setOperation(OperationType.INSERT); - ords.setIdRiga(idRiga); - ords.setCodSpes(codSpes); - ords.setDescrizione(descrizioneSpes); - ords.setImporto(importo); - ords.setCodAliq(codAliq); - ords.setImportoIva(res.getBigDecimal("importo_iva")); - dtbOrdt.getDtbOrds().add(ords); + List> spese = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + for (HashMap spesa : spese) { + DtbOrds dtbOrds = new DtbOrds(); + dtbOrds.setOperation(OperationType.INSERT); + dtbOrds.setIdRiga((Integer) spesa.get("id_riga")); + dtbOrds.setCodSpes((String) spesa.get("cod_spes")); + dtbOrds.setDescrizione((String) spesa.get("descrizione")); + dtbOrds.setImporto((BigDecimal) spesa.get("importo")); + dtbOrds.setCodAliq((String) spesa.get("cod_aliq")); + dtbOrds.setImportoIva((BigDecimal) spesa.get("importo_iva")); + dtbOrdt.getDtbOrds().add(dtbOrds); } - info.close(); - res.close(); - - entityProcessor.processEntity(dtbOrdt, true, multiDBTransactionManager); + dtbOrdt.dataCompleting(multiDBTransactionManager.getPrimaryConnection()); orderEntities.add(dtbOrdt); // Creazione collo di reso if (creaColloReso) { - ServiceRestResponse importColliDiResoResponse = importColli(multiDBTransactionManager, requestDataDTO.getUsername(), gestione, dataOrd, numOrd, ordine.getWdtbOrdt().getSerie(), - new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(dtbOrdt.getDataOrd()), dtbOrdt.getNumOrd(), codFornTD, ordine.getWdtbOrdt().getCodMdep()); - if (importColliDiResoResponse.getEsito().equals(EsitoType.OK)) { - if (importColliDiResoResponse.getEntity() != null) - orderEntities.add(importColliDiResoResponse.getEntity()); - } else { - throw new Exception(importColliDiResoResponse.getErrorMessage()); - } + MtbColt mtbColt = importColli(requestDataDTO.getUsername(), gestione, dataOrd, numOrd, serie, + dtbOrdt.getDataOrd(), dtbOrdt.getNumOrd(), codFornTD, ordine.getWdtbOrdt().getCodMdep()); + orderEntities.add(mtbColt); } // Importazione Ordine di lavoro per articoli con distinta senza righe if (importOrdLav) { - ServiceRestResponse importOrdLavResponse = importOrdLav(multiDBTransactionManager, gestione, dataOrd, numOrd, ordine.getWdtbOrdt().getSerie(), ordine.getWdtbOrdt().getCodMdep()); - if (importOrdLavResponse.getEsito().equals(EsitoType.OK)) { - if (importOrdLavResponse.getEntityList() != null) - orderEntities.addAll(importOrdLavResponse.getEntityList()); - } else { - throw new Exception(importOrdLavResponse.getErrorMessage()); - } + List listordLav = importOrdLav(gestione, dataOrd, numOrd, serie, ordine.getWdtbOrdt().getCodMdep()); + if (listordLav != null && !listordLav.isEmpty()) + orderEntities.addAll(listordLav); } // Creazione ordine trasferimento merce if (generateOrdTrasfMerce) { - ServiceRestResponse importTrasfMerce = importOrdineTrasfMerce(multiDBTransactionManager, gestione, dataOrd, serie, numOrd, ordine.getWdtbOrdt().getCodMdep(), importdate); - if (importTrasfMerce.getEsito().equals(EsitoType.OK)) { - if (importTrasfMerce.getEntity() != null) - orderEntities.add(importTrasfMerce.getEntity()); - } else { - throw new Exception(importTrasfMerce.getErrorMessage()); + List ordiniA = importOrdineTrasfMerce(gestione, dataOrd, serie, numOrd, ordine.getWdtbOrdt().getCodMdep(), importdate, dtbOrdLogImportList); + if (ordiniA != null && !ordiniA.isEmpty()) { + orderEntities.addAll(ordiniA); } } - return null; + return orderEntities; + } + + private void getDatiListino(Date dataOrd, String codVlis, String codMart, BigDecimal qtaOrd, DtbOrdr dtbOrdr) throws Exception { + String query = "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + + " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + + " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + + " mtb_aart.unt_mis2, " + + " mtb_aart.unt_mis3, " + + " listVend.posizione " + + " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + + UtilityDB.valueToString(codVlis) + ", " + + UtilityDB.valueToString(codMart) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + + " listVend.tipo_variazione <> 'D' " + + " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(codMart); + + PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); + ResultSet res = info.executeQuery(); + BigDecimal qtaCnf = null, qtaOrd2 = null, qtaOrd3 = null; + String untMis2 = "", untMis3 = "", posizioneListino = ""; + while (res.next()) { + qtaCnf = res.getBigDecimal(1); + BigDecimal colliStrato = res.getBigDecimal(2); + BigDecimal colliPedana = res.getBigDecimal(3); + untMis2 = res.getString(4); + untMis3 = res.getString(5); + posizioneListino = res.getString(6); + BigDecimal rapConv2 = colliStrato.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); + BigDecimal rapConv3 = colliPedana.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); + qtaOrd2 = qtaOrd.divide(rapConv2, 2, RoundingMode.HALF_UP); + qtaOrd3 = qtaOrd.divide(rapConv3, 2, RoundingMode.HALF_UP); + } + res.close(); + info.close(); + + dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola + dtbOrdr.setQtaCnf(qtaCnf); + dtbOrdr.setUntOrd2(untMis2); + dtbOrdr.setQtaOrd2(qtaOrd2); + dtbOrdr.setUntOrd3(untMis3); + dtbOrdr.setQtaOrd3(qtaOrd3); + + // ACQUISIZIONE DATI FORNITORE PREFERENZIALE + String codAlis = ""; + String codArtForn = ""; + query = "SELECT ISNULL(listiniAcq.cod_alis, ''), " + + " ISNULL(listiniAcq.cod_art_for, ''), " + + " ISNULL(listiniAcq.partita_mag, '') " + + " from ( SELECT listino.* " + + " FROM atb_forn, " + + " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + + " (SELECT value_string as cod_atip " + + " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + + " WHERE atb_forn.cod_alis = listino.cod_alis AND " + + " atb_forn.cod_atip = stp.cod_atip AND " + + " cod_mart IS NOT NULL AND " + + " tipo_variazione <> 'D' " + + " UNION " + + " SELECT listino.* " + + " FROM atb_forn, vtb_dest, " + + " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + + " (SELECT value_string as cod_atip " + + " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + + " WHERE atb_forn.cod_atip = stp.cod_atip AND " + + " atb_forn.cod_anag = vtb_dest.cod_anag AND " + + " vtb_dest.cod_alis = listino.cod_alis AND " + + " cod_mart IS NOT NULL AND " + + " tipo_variazione <> 'D')listiniAcq " + + " WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); + + info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); + res = info.executeQuery(); + String partitaMagAlis = ""; + while (res.next()) { + codAlis = res.getString(1); + codArtForn = res.getString(2); + partitaMagAlis = res.getString(3); + } + res.close(); + info.close(); + dtbOrdr.setCodAlis(codAlis) + .setCodArtFor(codArtForn); + if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { + dtbOrdr.setPartitaMag(partitaMagAlis); + } + } + + + private List getRowBattiscopa(ImportOrdiniWebRowDTO riga, String gestione, Date dataOrd, Integer numOrd, String serie) throws SQLException, PrimaryDatabaseNotPresentException, IOException { + List righeBattiscopa = new ArrayList<>(); + String query = "SELECT wdtb_ordt.cod_jcom as cod_jcom," + + " wdtb_ordr.cod_mart as cod_mart," + + " wdtb_ordr.unt_ord as unt_ord," + + " wdtb_ordr.qta_ord as qta_ord," + + " ((a.val_unt*wdtb_ordr.qta_ord2)/wdtb_ordr.qta_ord + wdtb_ordr.val_unt) as val_unt, " + + " wdtb_ordr.cod_aliq as cod_aliq, " + + " wdtb_ordr.cod_asso as cod_asso, " + + " wdtb_ordr.gruppo_cons as gruppo_cons, " + + " wdtb_ordr.sconto5 as sconto5, " + + " wdtb_ordr.sconto6 as sconto6, " + + " wdtb_ordr.sconto7 as sconto7, " + + " wdtb_ordr.sconto8 as sconto8, " + + " wdtb_ordr.note as note, " + + " wdtb_ordr.descrizione as descrizione, " + + " wdtb_ordr.descrizione_estesa +' '+ a.descrizione +' ('+wdtb_ordr.unt_ord2 + ' '+ Convert(varchar(13),Convert(decimal(10,2),wdtb_ordr.qta_ord2)) +')' as descrizione_estesa, " + + " wdtb_ordr.data_cons as data_cons, " + + " wdtb_ordr.cod_alis as cod_alis, " + + " wdtb_ordr.cod_art_for as cod_art_for, " + + " wdtb_ordr.unt_ord2 as unt_ord2," + + " Wdtb_ordr.qta_ord2 as qta_ord2," + + " a.cod_mart as cod_mart_mate," + + " a.unt_ord as unt_ord_mate, " + + " a.qta_ord - wdtb_ordr.qta_ord2 as residuo, " + + " a.cod_aliq as cod_aliq_mate, " + + " a.cod_asso as cod_asso_mate," + + " a.gruppo_cons as gruppo_cons_mate, " + + " a.sconto5 as sconto5_mate," + + " a.sconto6 as sconto6_mate, " + + " a.sconto7 as sconto7_mate," + + " a.sconto8 as sconto8_mate," + + " a.note as note_mate," + + " a.descrizione_estesa as descr_estesa_mate," + + " a.data_cons as data_cons_mate," + + " a.cod_alis as cod_alis_mate," + + " a.cod_art_for as cod_art_for_mate, " + + " a.val_unt as val_unt_mate, " + + " wdtb_ordr.qta_cnf as qta_cnf, " + + " wdtb_ordr.num_cnf as num_cnf, " + + " a.qta_cnf as qta_cnf_mate " + + " FROM wdtb_ordt, wdtb_ordr , jtb_cicl , " + + " (SELECT wdtb_ordr.gestione, " + + " wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art, " + + " wdtb_ordr.val_unt, " + + " wdtb_ordr.unt_ord, " + + " wdtb_ordr.qta_ord," + + " cod_aliq," + + " cod_asso," + + " gruppo_cons," + + " sconto5," + + " sconto6, " + + " sconto7, " + + " sconto8," + + " wdtb_ordr.note," + + " wdtb_ordr.descrizione_estesa," + + " data_cons," + + " cod_alis," + + " cod_art_for, " + + " wdtb_ordr.descrizione as descrizione, " + + " wdtb_ordr.cod_mart, " + + " wdtb_ordr.qta_cnf" + + " FROM wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + + " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.flag_elaborato ='N' AND " + + " wdtb_ordr.id_art <> 0 AND " + + " jtb_cicl.cod_prod is null ) a " + + " WHERE a.data_ord = wdtb_ordr.data_ord AND " + + " a.num_ord = wdtb_ordr.num_ord AND " + + " a.gestione = wdtb_ordr.gestione AND " + + " a.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " a.id_art = wdtb_ordr.id_art AND " + + " wdtb_ordr.cod_mart = jtb_cicl.cod_prod AND " + + " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " wdtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + " wdtb_ordr.serie = " + UtilityDB.valueToString(serie) + " AND " + + " wdtb_ordr.id_art = " + UtilityDB.valueToString(riga.getWdtbOrdr().getIdArt()) + " AND " + + " wdtb_ordr.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); + + PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); + ResultSet res = info.executeQuery(); + while (res.next()) { + DtbOrdr dtbOrdr = new DtbOrdr() + .setCodMart(UtilityString.streNull(res.getString("cod_mart"))) + .setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))) + .setUntOrd(UtilityString.streNull(res.getString("unt_ord"))) + .setQtaOrd(res.getBigDecimal("qta_ord")) + .setUntOrd2(UtilityString.streNull(res.getString("unt_ord2"))) + .setQtaOrd2(res.getBigDecimal("qta_ord2")) + .setCodAliq(UtilityString.streNull(res.getString("cod_aliq"))) + .setNote(UtilityString.streNull(res.getString("note"))) + .setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons"))) + .setValUnt(res.getBigDecimal("val_unt")) + .setDescrizione(UtilityString.streNull(res.getString("descrizione"))) + .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descrizione_estesa"), 255))) + .setSconto5(res.getBigDecimal("sconto5")) + .setSconto6(res.getBigDecimal("sconto6")) + .setSconto7(res.getBigDecimal("sconto7")) + .setSconto8(res.getBigDecimal("sconto8")) + .setIdArt(riga.getWdtbOrdr().getIdArt()) + .setCodAlis(UtilityString.streNull(res.getString("cod_alis"))) + .setCodArtFor(UtilityString.streNull(res.getString("cod_art_for"))) + .setQtaCnf(res.getBigDecimal("qta_cnf")) + .setNumCnf(res.getBigDecimal("num_cnf")); + if (res.getDate("data_cons") != null) { + dtbOrdr.setDataCons(res.getDate("data_cons")); + } + + righeBattiscopa.add(dtbOrdr); + + if (res.getBigDecimal("residuo").compareTo(BigDecimal.ZERO) > 0 && UtilityString.streNull(res.getString("unt_ord2")).compareTo(UtilityString.streNull(res.getString("unt_ord_mate"))) == 0) { + dtbOrdr = new DtbOrdr() + .setCodMart(UtilityString.streNull(res.getString("cod_mart_mate"))) + .setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))) + .setUntOrd(UtilityString.streNull(res.getString("unt_ord_mate"))) + .setQtaOrd(res.getBigDecimal("residuo")) + .setQtaCnf(res.getBigDecimal("qta_cnf_mate")) + .setCodAliq(UtilityString.streNull(res.getString("cod_aliq_mate"))) + .setNote(UtilityString.streNull(res.getString("note_mate"))) + .setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons_mate"))) + .setValUnt(res.getBigDecimal("val_unt_mate")) + .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descr_estesa_mate"), 255))) + .setSconto5(res.getBigDecimal("sconto5_mate")) + .setSconto6(res.getBigDecimal("sconto6_mate")) + .setSconto7(res.getBigDecimal("sconto7_mate")) + .setSconto8(res.getBigDecimal("sconto8_mate")) + .setCodAlis(UtilityString.streNull(res.getString("cod_alis_mate"))) + .setCodArtFor(UtilityString.streNull(res.getString("cod_art_for_mate"))); + + if (res.getDate("data_cons_mate") != null) { + dtbOrdr.setDataCons(res.getDate("data_cons_mate")); + } + righeBattiscopa.add(dtbOrdr); + } + } + res.close(); + info.close(); + + return righeBattiscopa; } private DtbOrdr getRowOrd(WdtbOrdr riga, BigDecimal qtaOrd, boolean isOmaggio, boolean sostituzione, String codAliqOmg) { @@ -888,31 +886,34 @@ public class OrdiniWebImportService { * @return */ - private DtbOrdt existOrderDef(MultiDBTransactionManager multiDBTransactionManager, Connection connection, String username, - String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, Date dataImport) throws Exception { + private List existOrderDef(String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, Date dataImport, List dtbOrdLogImportList) throws Exception { + List ordini = new ArrayList<>(); - String sqlCodFornCond; + String whereCondFornTD; if (codFornTD == null) { - sqlCodFornCond = (" IS NULL AND"); + whereCondFornTD = "cod_forn_td IS NULL"; } else { - sqlCodFornCond = (String.format(" = %s AND", UtilityDB.valueToString(codFornTD))); + whereCondFornTD = "cod_forn_td = " + UtilityDB.valueToString(codFornTD); } // CONTROLLO SE L'ORDINE E' GIA' STATO IMPORTATO IN AZIENDA, SE GIA' PRESENTE E NON E' STATO EVASO NEPPURE // PARZIALMENTE ALLORA L'ORDINE DEVE ESSERE CANCELLATO E SOVRASCRITTO CON LO STESSO NUMERO EFFETTIVO, // ALTRIMENTI SE E' STATO EVASO ANCHE SOLO PARZIALAMENTE L'ORDINE NON DEVE ESSERE PIU' IMPORTATO - String query = "SELECT data_ord, " + - " num_ord," + - " serie " + - " FROM dtb_ordt " + - " WHERE gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " serie = " + UtilityDB.valueToString(serOrd) + " AND " + - " num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + - " cod_forn_td " + sqlCodFornCond + - " DATEPART(year, data_ord) = " + UtilityDB.valueToString(UtilityDate.datePart(Calendar.YEAR, dataOrdProvv)); + String query = + Query.format( + "SELECT data_ord, " + + " num_ord," + + " serie " + + " FROM dtb_ordt " + + " WHERE gestione = %s AND " + + " serie = %s AND " + + " num_ord_provv = %s AND " + + " DATEPART(year, data_ord) = %s", + gestione, serOrd, numOrdProvv, codFornTD, UtilityDate.datePart(Calendar.YEAR, dataOrdProvv)); - HashMap datiOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(connection, query); + query = UtilityDB.addwhereCond(query, whereCondFornTD, true); + HashMap datiOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); if (UtilityHashMap.isPresent(datiOrd)) { Date dataOrd = (Date) datiOrd.get("data_ord"); @@ -934,7 +935,7 @@ public class OrdiniWebImportService { " dtb_ordt.flag_annulla = 'S' OR " + " dtb_ordt.flag_sospeso = 'S') "; - boolean existsRowOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query); + boolean existsRowOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); // SE NON E' STATO EVASO\ANNULLATO ALLORA VERRA' SOVRASCRITTO ALTRIMENTI NON VERRA' IMPORTATO if (existsRowOrd) { @@ -945,7 +946,7 @@ public class OrdiniWebImportService { numOrd, new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd)); - insertLog(connection, gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); + insertLog(gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); throw new Exception(errorMessage); } else { // Se non si tratta di un cliente in TD è necessario verificare se esiste un ordine di trasferimento associato @@ -965,7 +966,7 @@ public class OrdiniWebImportService { " dtb_ordt.num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + " dtb_ordt.serie = " + UtilityDB.valueToString(serie); - HashMap datiOrdAcq = UtilityDB.executeSimpleQueryOnlyFirstRow(connection, query); + HashMap datiOrdAcq = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); if (UtilityHashMap.isPresent(datiOrdAcq)) { String gestioneAcq = (String) datiOrdAcq.get("gestione"); @@ -979,7 +980,7 @@ public class OrdiniWebImportService { dtbOrdt.setDataOrd(dataOrdAcq); dtbOrdt.setNumOrd(numOrdAcq); dtbOrdt.setOperation(OperationType.DELETE); - entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); + ordini.add(dtbOrdt); } } } @@ -990,28 +991,11 @@ public class OrdiniWebImportService { dtbOrdt.setDataOrd(dataOrd); dtbOrdt.setNumOrd(numOrd); dtbOrdt.setOperation(OperationType.DELETE); - entityProcessor.processEntity(dtbOrdt, true, true, username, multiDBTransactionManager); - return dtbOrdt; + ordini.add(dtbOrdt); + return ordini; } } - query = "SELECT flag_elaborato from wdtb_ordt " + - "WHERE gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " data_ord = " + UtilityDB.valueDateToString(dataOrdProvv, CommonConstants.DATE_FORMAT_YMD) + " AND " + - " num_ord_provv = " + UtilityDB.valueToString(numOrdProvv) + " AND " + - " serie = " + UtilityDB.valueToString(serOrd); - - String flagElaborato = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query); - if (flagElaborato != null && flagElaborato.equalsIgnoreCase("S")) { - String errorMessage = - String.format("ORDINE PROVVISORIO N° %d del %s NON IMPORTATO. ORDINE IN FASE DI ELABORAZIONE DA UN ALTRO UTENTE", - numOrdProvv, - new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrdProvv) - ); - - insertLog(connection, gestione, dataOrdProvv, serOrd, numOrdProvv, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); - throw new Exception(errorMessage); - } return null; } @@ -1019,7 +1003,6 @@ public class OrdiniWebImportService { /** * Inserimento riga di log * - * @param multiDBTransactionManager * @param gestione * @param dataOrd * @param serie @@ -1030,170 +1013,94 @@ public class OrdiniWebImportService { * @throws Exception */ - private ServiceRestResponse importOrdineTrasfMerce(MultiDBTransactionManager multiDBTransactionManager, String gestione, Date dataOrd, String serie, Integer numOrd, String codMdep, Date dataImport) throws Exception { - String query, codMdepRowOld = "", codMdepRow, codMart, untOrd, codJcom, gestioneAcq = "A", codAnag = null, codVdes = null; - BigDecimal qtaOrd; - ResultSet res, resDati = null; - PreparedStatement info, infoDati = null; - DtbOrdt ordA = new DtbOrdt(); - ServiceRestResponse serviceRestResponse = new ServiceRestResponse(); + private List importOrdineTrasfMerce(String gestione, Date dataOrd, String serie, Integer numOrd, String codMdep, Date dataImport, + List dtbOrdLogImportList) throws Exception { - try { - // CONNESSIONE AL DATABASE - Connection connection = multiDBTransactionManager.getPrimaryDatasource().getConnection(); - serviceRestResponse.setEsito(EsitoType.OK); + // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD + String query = " SELECT wdtb_ordr.cod_mdep, " + + " wdtb_ordr.cod_mart, " + + " wdtb_ordr.unt_ord, " + + " wdtb_ordr.qta_ord, " + + " wdtb_ordt.cod_jcom " + + " FROM wdtb_ordr, " + + " wdtb_ordt " + + " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + + " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + + " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + + " wdtb_ordr.serie = wdtb_ordt.serie AND " + + " wdtb_ordt.flag_elaborato = 'N' AND " + + " wdtb_ordr.qta_ord <> 0 AND " + + " wdtb_ordr.cod_mdep <> " + UtilityDB.valueToString(codMdep) + " AND " + + " wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " wdtb_ordt.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + + " wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + + " wdtb_ordt.serie = " + UtilityDB.valueToString(serie) + " " + + " ORDER BY wdtb_ordr.cod_mdep"; - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD - query = " SELECT wdtb_ordr.cod_mdep, " + - " wdtb_ordr.cod_mart, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord, " + - " wdtb_ordt.cod_jcom " + - " FROM wdtb_ordr, " + - " wdtb_ordt " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordt.flag_elaborato = 'N' AND " + - " wdtb_ordr.qta_ord <> 0 AND " + - " wdtb_ordr.cod_mdep <> " + UtilityDB.valueToString(codMdep) + " AND " + - " wdtb_ordt.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordt.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + - " wdtb_ordt.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - " wdtb_ordt.serie = " + UtilityDB.valueToString(serie) + " " + - " ORDER BY wdtb_ordr.cod_mdep"; + List> datiOrd = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); - info = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - res = info.executeQuery(); - int rows = UtilityDB.countRow(res); - int i = 0; - while (res.next()) { - codMdepRow = res.getString(1); - codMart = res.getString(2); - untOrd = res.getString(3); - qtaOrd = res.getBigDecimal(4); - codJcom = res.getString(5); - i++; + if (datiOrd != null && !datiOrd.isEmpty()) { + List ordini = new ArrayList<>(); + Map>> ordDepo = datiOrd.stream().collect(groupingBy(x -> (String) x.get("cod_mdep"))); - if (!codMdepRow.equals(codMdepRowOld)) { - // Acquisizione dati anagrafici deposito - query = - "SELECT cod_anag, " + - " cod_vdes " + - "FROM mtb_depo " + - "WHERE cod_mdep = " + UtilityDB.valueToString(codMdepRow); - infoDati = connection.prepareStatement(query); - resDati = infoDati.executeQuery(); - while (resDati.next()) { - codAnag = resDati.getString(1); - codVdes = resDati.getString(2); - } - resDati.close(); - infoDati.close(); + for (String codMdepRow : ordDepo.keySet()) { + List> datiOrdPerDeposito = ordDepo.get(codMdepRow); - if (codAnag == null) { - String errorMessage = String.format("Il deposito " + codMdepRow + " non è associato ad alcun destinatario, non è possibile generare l'ordine di trasferimento merce"); - serviceRestResponse.setEsito(EsitoType.KO); - serviceRestResponse.setErrorMessage(errorMessage); - insertLog(connection, gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D"); - break; - } - - ordA = new DtbOrdt(); - ordA.setOperation(OperationType.INSERT); - ordA.setGestione(gestioneAcq); - ordA.setDataOrd(dataOrd); - ordA.setNumOrdProvv(numOrd); - ordA.setSerie(serie); - ordA.setCodMdep(codMdep); - ordA.setCodAnag(codAnag); - ordA.setCodVdes(codVdes); - ordA.setCodJcom(codJcom); + query = + "SELECT cod_anag, " + + " cod_vdes " + + "FROM mtb_depo " + + "WHERE cod_mdep = " + UtilityDB.valueToString(codMdepRow); + HashMap datiDepo = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); + String codAnag, codVdes; + if (UtilityHashMap.isPresent(datiDepo)) { + codAnag = (String) datiDepo.get("cod_anag"); + codVdes = (String) datiDepo.get("cod_vdes"); + } else { + String errorMessage = String.format("Il deposito " + codMdepRow + " non è associato ad alcun destinatario, non è possibile generare l'ordine di trasferimento merce"); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serie, numOrd, errorMessage, "2", BigDecimal.ZERO, dataImport, "D")); + throw new Exception(errorMessage); } - DtbOrdr ordR = new DtbOrdr(); - ordR.setCodMart(codMart); - ordR.setUntOrd(untOrd); - ordR.setQtaOrd(qtaOrd); - ordR.setCodJcom(codJcom); - ordA.getDtbOrdr().add(ordR); - codMdepRowOld = codMdepRow; - boolean isLast = false; - if (i == rows) { - isLast = true; - } - if (res.next() || isLast) { - if (!isLast) { - codMdepRow = res.getString(1); - } - res.previous(); + String codJcom = (String) datiOrdPerDeposito.get(0).get("cod_jcom"); + DtbOrdt ordA = new DtbOrdt() + .setGestione("A") + .setDataOrd(dataOrd) + .setNumOrdProvv(numOrd) + .setSerie(serie) + .setCodMdep(codMdep) + .setCodAnag(codAnag) + .setCodVdes(codVdes) + .setCodJcom(codJcom); + ordA.setOperation(OperationType.INSERT); + ordini.add(ordA); + for (HashMap r : datiOrdPerDeposito) { - if (!codMdepRow.equals(codMdepRowOld) || isLast) { - entityProcessor.processEntity(ordA, true, multiDBTransactionManager); - serviceRestResponse.setEntity(ordA); - } + DtbOrdr ordR = new DtbOrdr(); + ordR.setCodMart((String) r.get("cod_mart")); + ordR.setUntOrd((String) r.get("unt_ord")); + ordR.setQtaOrd((BigDecimal) r.get("qta_ord")); + ordR.setCodJcom(codJcom); + ordA.getDtbOrdr().add(ordR); } } - res.close(); - info.close(); - - } catch (Exception e) { - serviceRestResponse.setErrorMessage(e.getMessage()); - serviceRestResponse.setEsito(EsitoType.KO); - logger.error(e.getMessage(), e); + return ordini; } - return serviceRestResponse; + + return null; } - private ServiceRestResponse importColli(MultiDBTransactionManager multiDBTransactionManager, String userName, String gestione, Date dataOrd, int numOrd, String serOrd, String dataOrdDef, int numOrdDef, String codFornTD, String codMdep) { - String ls_codMart, ls_codAnag, ls_codVdes, ls_rifOrd, ls_serCollo; - double lc_qtaReso; - int li_segno; - ResultSet resOrdine; - PreparedStatement infoOrdine; - String isResoRivendibile = "R"; - String isResoNonRivendibile = "S"; - String formattedDataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd); - ServiceRestResponse serviceRestResponse = new ServiceRestResponse(); + private MtbColt importColli(String userName, String gestione, Date dataOrd, int numOrd, String serOrd, Date dataOrdDef, + int numOrdDef, String codFornTD, String codMdep) throws Exception { - try { - // CONNESSIONE AL DATABASE PER LA NAVIGAZIONE DEL FILE - Connection connection = multiDBTransactionManager.getPrimaryDatasource().getConnection(); + // E' NECESSARIO DEFINIRE UN CONTROLLO DI ESISTENZA COLLO GIA' AGGANCIATO + // ALL'ORDINE PER EVITARE CHE VENGA IMPORTATO NUOVAMENTE IL COLLO + final String isResoRivendibile = "R"; + final String isResoNonRivendibile = "S"; - // E' NECESSARIO DEFINIRE UN CONTROLLO DI ESISTENZA COLLO GIA' AGGANCIATO - // ALL'ORDINE PER EVITARE CHE VENGA IMPORTATO NUOVAMENTE IL COLLO - MtbColt mtbColt = new MtbColt(); - mtbColt.setOperation(OperationType.INSERT_OR_UPDATE); - - String query; - if (codFornTD == null) { - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD - query = " SELECT wdtb_ordr.cod_mart, " + - " wdtb_ordr.data_cons, " + - " wdtb_ordt.cod_anag, " + - " wdtb_ordt.cod_vdes, " + - " wdtb_ordr.qta_reso, " + - " wdtb_ordr.flag_reso_riv " + - " FROM wdtb_ordr, " + - " wdtb_ordt " + - " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordt.flag_elaborato = 'N' AND " + - " wdtb_ordr.qta_reso <> 0 AND " + - " (wdtb_ordr.flag_reso_riv = '" + isResoRivendibile + "' OR " + - " wdtb_ordr.flag_reso_riv = '" + isResoNonRivendibile + "') AND " + - " wdtb_ordt.gestione = '" + gestione + "' AND " + - " wdtb_ordt.data_ord = '" + formattedDataOrd + "' AND " + - " wdtb_ordt.num_ord = " + numOrd + " AND " + - " wdtb_ordt.serie = '" + serOrd + "' AND " + - " wdtb_ordr.flag_reso_riv <> 'O' "; - } else { - // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE DIRETTO - query = + String query = + Query.format( " SELECT wdtb_ordr.cod_mart, " + " wdtb_ordr.data_cons, " + " wdtb_ordt.cod_anag, " + @@ -1201,355 +1108,293 @@ public class OrdiniWebImportService { " wdtb_ordr.qta_reso, " + " wdtb_ordr.flag_reso_riv " + " FROM wdtb_ordr, " + - " wdtb_ordt, " + - " mtb_aart_anag " + + " wdtb_ordt " + " WHERE wdtb_ordr.gestione = wdtb_ordt.gestione AND " + " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie AND " + - " wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND " + + " wdtb_ordr.serie = wdtb_ordt.serie AND " + + " wdtb_ordt.flag_elaborato = 'N' AND " + " wdtb_ordr.qta_reso <> 0 AND " + - " (wdtb_ordr.flag_reso_riv = '" + isResoRivendibile + "' OR " + - " wdtb_ordr.flag_reso_riv = '" + isResoNonRivendibile + "') AND " + - " mtb_aart_anag.cod_anag = '" + codFornTD + "' AND" + - " wdtb_ordt.gestione = '" + gestione + "' AND " + - " wdtb_ordt.data_ord = '" + dataOrd + "' AND " + - " wdtb_ordt.num_ord = " + numOrd + " AND " + - " wdtb_ordt.serie = '" + serOrd + "' AND " + - " wdtb_ordr.flag_reso_riv <> 'O' "; + " (wdtb_ordr.flag_reso_riv = %s OR " + + " wdtb_ordr.flag_reso_riv = %s) AND " + + " wdtb_ordt.gestione = %s AND " + + " wdtb_ordt.data_ord = %s AND " + + " wdtb_ordt.num_ord = %s AND " + + " wdtb_ordt.serie = %a AND " + + " wdtb_ordr.flag_reso_riv <> 'O' ", + isResoRivendibile, isResoNonRivendibile, gestione, dataOrd, numOrd, serOrd); + + if (codFornTD != null) { + query = UtilityDB.addwhereCond(query, "EXISTS (SELECT * FROM mtb_aart_anag WHERE wdtb_ordr.cod_mart = mtb_aart_anag.cod_mart AND mtb_aart_anag.cod_anag = " + UtilityDB.valueToString(codFornTD), false); + } + + List> dati = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + + if (dati != null && !dati.isEmpty()) { + MtbColt mtbColt = new MtbColt(); + mtbColt.setOperation(OperationType.INSERT_OR_UPDATE); + + // DEFINIZIONE DATI RIGA + String codMdepReso = setupGest.getImportSetup(multiDBTransactionManager.getPrimaryConnection(), "ORDINI", "WBA", "COD_MDEP_RESO_DEPO_" + codMdep); + if (codMdepReso == null) { + throw new Exception("Codice deposito resi non configurato"); + } + LocalDate dataCons = UtilityLocalDate.localDateFromDate((Date) dati.get(0).get("data_cons")); + String flagResoRiv = (String) dati.get(0).get("flag_reso_riv"); + if (flagResoRiv.compareTo(isResoNonRivendibile) == 0) { + codMdep = codMdepReso; + } + String serCollo; + if (serOrd.length() > 2) { + serCollo = serOrd.substring(serOrd.length() - 2); + } else { + serCollo = serOrd; } - // INIZIALIZZAZIONE VARIABILI - ls_rifOrd = "ORD.PROV. N. " + numOrd + " del " + dataOrd; + String codAnag = (String) dati.get(0).get("cod_anag"); + String codVdes = (String) dati.get(0).get("cod_vdes"); + String rifOrd = "ORD.PROV. N. " + numOrd + " del " + new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd); + mtbColt.setGestione(gestione) + .setDataCollo(dataCons) + .setSerCollo(serCollo) + .setSegno(1) + .setCodAnag(codAnag) + .setCodVdes(codVdes) + .setCodMdep(codMdep) + .setRifOrd(rifOrd) + .setDataOrd(UtilityLocalDate.localDateFromDate(dataOrdDef)) + .setNumOrd(numOrdDef); + mtbColt.setMtbColr(new ArrayList<>()); // ACQUISIZIONE RIGHE ORDINE - infoOrdine = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - resOrdine = infoOrdine.executeQuery(); - int rows = 0; - - while (resOrdine.next()) { - // ACQUISIZIONE DATI RIGA ORDINE - ls_codMart = resOrdine.getString(1); - LocalDate dataCons = UtilityLocalDate.localDateFromDate(resOrdine.getDate(2)); - ls_codAnag = resOrdine.getString(3); - ls_codVdes = resOrdine.getString(4); - lc_qtaReso = resOrdine.getDouble(5); - String ls_flagResoRiv = resOrdine.getString(6); - - // DEFINIZIONE DATI RIGA - li_segno = 1; - String codMdepReso = setupGest.getImportSetup(multiDBTransactionManager.getPrimaryConnection(), "ORDINI", "WBA", "COD_MDEP_RESO_DEPO_" + codMdep); - if (codMdepReso == null) { - throw new Exception("Codice deposito resi non configurato"); - } - if (ls_flagResoRiv.compareTo(isResoNonRivendibile) == 0) { - codMdep = codMdepReso; - } - if (serOrd.length() > 2) { - ls_serCollo = serOrd.substring(serOrd.length() - 2); - } else { - ls_serCollo = serOrd; - } - - // -------------------------------------------- - // CREAZIONE ENTITY COLLI DI RESO - // -------------------------------------------- - if (resOrdine.getRow() == 1) { - mtbColt.setGestione(gestione); - mtbColt.setDataCollo(dataCons); - mtbColt.setSerCollo(ls_serCollo); - mtbColt.setSegno(li_segno); - mtbColt.setCodAnag(ls_codAnag); - mtbColt.setCodVdes(ls_codVdes); - mtbColt.setCodMdep(codMdep); - mtbColt.setRifOrd(ls_rifOrd); - mtbColt.setDataOrd(LocalDate.parse(dataOrdDef, CommonConstants.DATETIME_DMY_DASHED_FORMATTER)); - mtbColt.setNumOrd(numOrdDef); - mtbColt.setMtbColr(new ArrayList()); - } - - // INSERIMENTO RIGHE - if (lc_qtaReso != 0) { - MtbColr mtbColr = new MtbColr(); - mtbColr.setCodMart(ls_codMart); - mtbColr.setQtaCol(BigDecimal.valueOf(lc_qtaReso)); - mtbColr.setDataOrd(LocalDate.parse(dataOrdDef, CommonConstants.DATETIME_DMY_DASHED_FORMATTER)); - mtbColr.setNumOrd(numOrdDef); - mtbColt.getMtbColr().add(mtbColr); - } - - if (resOrdine.isLast()) { - rows = resOrdine.getRow(); - } + for (HashMap riga : dati) { + MtbColr mtbColr = + new MtbColr() + .setCodMart((String) riga.get("cod_mart")) + .setQtaCol((BigDecimal) riga.get("qta_reso")) + .setDataOrd(UtilityLocalDate.localDateFromDate(dataOrdDef)) + .setNumOrd(numOrdDef); + mtbColt.getMtbColr().add(mtbColr); } - resOrdine.close(); - infoOrdine.close(); - - if (rows > 0) { - entityProcessor.processEntity(mtbColt, true, true, userName, multiDBTransactionManager); - serviceRestResponse.setEntity(mtbColt); - } else { - logger.info("NON CI SONO COLLI DA IMPORTARE"); - } - - serviceRestResponse.setEsito(EsitoType.OK); - - } catch (Exception e) { - serviceRestResponse.setErrorMessage(e.getMessage()); - serviceRestResponse.setEsito(EsitoType.KO); - logger.error(e.getMessage(), e); + return mtbColt; } - - return serviceRestResponse; + return null; } - private ServiceRestResponse importOrdLav(MultiDBTransactionManager multiDBTransactionManager, String gestione, Date dataOrd, int numOrd, String serOrd, String codMdep) { - String gestioneAcq = "A", gestioneLav = "L", query; - ResultSet resOrdine; - PreparedStatement infoOrdine; - String formattedDataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd); - Integer numOrdProd = 0; - BigDecimal qtaOrd = BigDecimal.ZERO; - BigDecimal qtaOrd2 = BigDecimal.ZERO; - BigDecimal prezzoAcqNetto = BigDecimal.ZERO; - BigDecimal valUntSpes = BigDecimal.ZERO; - BigDecimal qtaCnf = BigDecimal.ZERO; - int idArt = 0, idArtOld = 0, count = 0, rigaOrdRif = 0; - ServiceRestResponse serviceRestResponse = new ServiceRestResponse(); - - + private List importOrdLav(String gestione, Date dataOrd, int numOrd, String serOrd, String codMdep) throws Exception { List arrayOrd = new ArrayList(); - try { - DtbOrdt ordA = new DtbOrdt(); - DtbOrdt ordL = new DtbOrdt(); - DtbOrdr ordR = new DtbOrdr(); - DtbOrds ordS = new DtbOrds(); + DtbOrdt ordA = new DtbOrdt(); + DtbOrdt ordL = new DtbOrdt(); - // CONNESSIONE AL DATABASE PER LA NAVIGAZIONE DEL FILE - Connection connection = multiDBTransactionManager.getPrimaryDatasource().getConnection(); - serviceRestResponse.setEsito(EsitoType.OK); - - DateFormat df = new SimpleDateFormat("yy"); // Just the year, with 2 digits + DtbOrdr ordR = new DtbOrdr(); + DtbOrds ordS = new DtbOrds(); - query = " SELECT wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.gestione, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordr.cod_mart, " + - " CASE WHEN jtb_cicl.cod_prod IS NULL THEN 'S' ELSE 'N' END as 'cod_mate', " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord, " + - " min(isnull(atb_forn.cod_anag, vtb_dest.cod_anag)) as cod_anag, " + - " lisa.prz_acq_netto, " + - " min(isnull(atb_forn.cod_alis, vtb_dest.cod_alis)), " + - " jtb_dist_clav_dir.cod_jcos_dir," + - " jtb_dist_clav_dir.val_unt, " + - " jtb_dist_clav_dir.unt_mis as 'unt_mis_spes'," + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordr.unt_ord2, " + - " wdtb_ordr.qta_ord2," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordr.qta_cnf " + - " from wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + - " LEFT OUTER JOIN jtb_dist_mate ON jtb_cicl.cod_prod = jtb_dist_mate.cod_prod AND " + - " jtb_dist_mate.cod_mart is null" + - " LEFT OUTER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod AND " + - " jtb_dist_clav_dir.flag_fase_pref = 'S' " + - " LEFT OUTER JOIN dbo.getListinoAcquisto('" + formattedDataOrd + "',null,null, null,'N',null ) lisa ON lisa.cod_mart = wdtb_ordr.cod_mart AND " + - " lisa.flag_forn_pref = 'S' " + - " LEFT OUTER JOIN atb_forn ON lisa.cod_alis = atb_forn.cod_alis" + - " LEFT OUTER JOIN vtb_dest ON lisa.cod_alis = vtb_dest.cod_alis, " + - " (SELECT wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art " + - " FROM wdtb_ordt, wdtb_ordr" + - " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.flag_elaborato ='N' AND " + - " wdtb_ordr.id_art <> 0 " + - " GROUP BY wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art " + - " HAVING count(*) > 1) a " + - " WHERE a.data_ord = wdtb_ordr.data_ord AND " + - " a.num_ord = wdtb_ordr.num_ord AND " + - " a.gestione = wdtb_ordr.gestione AND " + - " a.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " a.id_art = wdtb_ordr.id_art AND " + - " lisa.cod_mart = wdtb_ordr.cod_mart AND " + - " lisa.cod_alis = isnull(atb_forn.cod_alis, vtb_dest.cod_alis) AND " + - " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordr.data_ord = " + UtilityDB.valueToString(formattedDataOrd) + " AND " + - " wdtb_ordr.num_ord = " + numOrd + " AND " + - " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + - " GROUP BY wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.gestione, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordr.cod_mart, " + - " jtb_cicl.cod_prod, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord, " + - " lisa.prz_acq_netto, " + - " jtb_dist_clav_dir.cod_jcos_dir," + - " jtb_dist_clav_dir.val_unt, " + - " jtb_dist_clav_dir.unt_mis," + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordr.unt_ord2, " + - " wdtb_ordr.qta_ord2, " + - " wdtb_ordt.rif_ord, " + - " wdtb_ordr.qta_cnf " + - " ORDER BY wdtb_ordr.id_art, cod_mate "; + String query = " SELECT wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.gestione, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art, " + + " wdtb_ordt.cod_jcom, " + + " wdtb_ordr.cod_mart, " + + " CASE WHEN jtb_cicl.cod_prod IS NULL THEN 'S' ELSE 'N' END as 'cod_mate', " + + " wdtb_ordr.unt_ord, " + + " wdtb_ordr.qta_ord, " + + " min(isnull(atb_forn.cod_anag, vtb_dest.cod_anag)) as cod_anag, " + + " lisa.prz_acq_netto, " + + " min(isnull(atb_forn.cod_alis, vtb_dest.cod_alis)), " + + " jtb_dist_clav_dir.cod_jcos_dir," + + " jtb_dist_clav_dir.val_unt, " + + " jtb_dist_clav_dir.unt_mis as 'unt_mis_spes'," + + " wdtb_ordr.cod_art_for, " + + " wdtb_ordr.cod_alis, " + + " wdtb_ordr.descrizione_estesa, " + + " wdtb_ordr.unt_ord2, " + + " wdtb_ordr.qta_ord2," + + " wdtb_ordt.rif_ord, " + + " wdtb_ordr.qta_cnf " + + " from wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + + " LEFT OUTER JOIN jtb_dist_mate ON jtb_cicl.cod_prod = jtb_dist_mate.cod_prod AND " + + " jtb_dist_mate.cod_mart is null" + + " LEFT OUTER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod AND " + + " jtb_dist_clav_dir.flag_fase_pref = 'S' " + + " LEFT OUTER JOIN dbo.getListinoAcquisto(" + UtilityDB.valueToString(dataOrd) + ",null,null, null,'N',null ) lisa ON lisa.cod_mart = wdtb_ordr.cod_mart AND " + + " lisa.flag_forn_pref = 'S' " + + " LEFT OUTER JOIN atb_forn ON lisa.cod_alis = atb_forn.cod_alis" + + " LEFT OUTER JOIN vtb_dest ON lisa.cod_alis = vtb_dest.cod_alis, " + + " (SELECT wdtb_ordr.gestione, " + + " wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art " + + " FROM wdtb_ordt, wdtb_ordr" + + " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.flag_elaborato ='N' AND " + + " wdtb_ordr.id_art <> 0 " + + " GROUP BY wdtb_ordr.gestione, " + + " wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art " + + " HAVING count(*) > 1) a " + + " WHERE a.data_ord = wdtb_ordr.data_ord AND " + + " a.num_ord = wdtb_ordr.num_ord AND " + + " a.gestione = wdtb_ordr.gestione AND " + + " a.serie = wdtb_ordr.serie AND " + + " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + + " wdtb_ordt.serie = wdtb_ordr.serie AND " + + " a.id_art = wdtb_ordr.id_art AND " + + " lisa.cod_mart = wdtb_ordr.cod_mart AND " + + " lisa.cod_alis = isnull(atb_forn.cod_alis, vtb_dest.cod_alis) AND " + + " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + + " wdtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + + " wdtb_ordr.num_ord = " + numOrd + " AND " + + " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + + " GROUP BY wdtb_ordr.data_ord, " + + " wdtb_ordr.num_ord, " + + " wdtb_ordr.gestione, " + + " wdtb_ordr.serie, " + + " wdtb_ordr.id_art, " + + " wdtb_ordt.cod_jcom, " + + " wdtb_ordr.cod_mart, " + + " jtb_cicl.cod_prod, " + + " wdtb_ordr.unt_ord, " + + " wdtb_ordr.qta_ord, " + + " lisa.prz_acq_netto, " + + " jtb_dist_clav_dir.cod_jcos_dir," + + " jtb_dist_clav_dir.val_unt, " + + " jtb_dist_clav_dir.unt_mis," + + " wdtb_ordr.cod_art_for, " + + " wdtb_ordr.cod_alis, " + + " wdtb_ordr.descrizione_estesa, " + + " wdtb_ordr.unt_ord2, " + + " wdtb_ordr.qta_ord2, " + + " wdtb_ordt.rif_ord, " + + " wdtb_ordr.qta_cnf " + + " ORDER BY wdtb_ordr.id_art, cod_mate "; - infoOrdine = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - resOrdine = infoOrdine.executeQuery(); - int rows = UtilityDB.countRow(resOrdine); - if (rows == 0) { - serviceRestResponse.setEsito(EsitoType.OK); + List> datiOrd = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + + int count = 0; + int idArtOld = 0; + int rigaOrdRif = 0; + for (HashMap dati : datiOrd) { + String gestioneAcq = (String) dati.get("gestione"); + Date dataOrdAcq = (Date) dati.get("data_ord"); + Integer numOrdProd = (Integer) dati.get("num_ord"); + String serOrdAcq = (String) dati.get("serie"); + Integer idArt = (Integer) dati.get("id_art"); + String codJcom = (String) dati.get("cod_jcom"); + String codMart = (String) dati.get("cod_mart"); + String flagMate = (String) dati.get("cod_mate"); + String untOrd = (String) dati.get("unt_ord"); + BigDecimal qtaOrd = (BigDecimal) dati.get("qta_ord"); + String codAnag = (String) dati.get("cod_anag"); + String codSpes = (String) dati.get("cod_jcos_dir"); + String codAlis = (String) dati.get("cod_alis"); + String codArtFor = (String) dati.get("cod_art_for"); + String descrizioneEstesa = (String) dati.get("descrizione_estesa"); + BigDecimal qtaOrd2 = (BigDecimal) dati.get("unt_ord2"); + BigDecimal qtaCnf = (BigDecimal) dati.get("qta_cnf"); + BigDecimal valUntSpes = (BigDecimal) dati.get("val_unt"); + String untMisSpes = (String) dati.get("unt_mis_spes"); + String rifOrd = (String) dati.get("rif_ord"); + count++; + + BigDecimal numCnfOrdA = qtaOrd.divide(qtaCnf, RoundingMode.HALF_UP).setScale(0, RoundingMode.CEILING); + + if (count == 1 && flagMate.compareTo("N") == 0) { + qtaOrd2 = (BigDecimal) dati.get("qta_ord2"); + } else if (count == 1 && flagMate.compareTo("S") == 0) { + break; } else { - while (resOrdine.next()) { - count++; - String codMart = resOrdine.getString("cod_mart"); - String codAnag = resOrdine.getString("cod_anag"); - String codJcom = resOrdine.getString("cod_jcom"); - String untOrd = resOrdine.getString("unt_ord"); - String flagMate = resOrdine.getString("cod_mate"); - qtaOrd = resOrdine.getBigDecimal("qta_ord"); - String codSpes = resOrdine.getString("cod_jcos_dir"); - valUntSpes = resOrdine.getBigDecimal("val_unt"); - String codAlis = resOrdine.getString("cod_alis"); - String untMisSpes = resOrdine.getString("unt_mis_spes"); - String codArtFor = resOrdine.getString("cod_art_for"); - String descrizioneEstesa = resOrdine.getString("descrizione_estesa"); - String rifOrd = resOrdine.getString("rif_ord"); - qtaCnf = resOrdine.getBigDecimal("qta_cnf"); - BigDecimal numCnfOrdA = qtaOrd.divide(qtaCnf, RoundingMode.HALF_UP).setScale(0, RoundingMode.CEILING); - - if (count == 1 && flagMate.compareTo("N") == 0) { - qtaOrd2 = resOrdine.getBigDecimal("qta_ord2"); - } - if (count == 1 && flagMate.compareTo("S") == 0) { - break; - } else { - idArt = resOrdine.getInt("id_art"); - prezzoAcqNetto = resOrdine.getBigDecimal("prz_acq_netto"); - if (idArt != idArtOld) { - numOrdProd = OrderRules.completeNumOrd(connection, gestioneAcq, dataOrd, gestioneAcq); - rigaOrdRif = 0; - ordA = new DtbOrdt(); - ordA.setOperation(OperationType.INSERT); - ordA.setGestione(gestioneAcq); - ordA.setDataOrd(dataOrd); - ordA.setNumOrd(numOrdProd); - ordA.setSerie(serOrd); - ordA.setGestioneRif(gestioneAcq); - ordA.setDataOrdRif(dataOrd); - ordA.setNumOrdRif(numOrdProd); - ordA.setCodMdep(codMdep); - ordA.setCodAnag(codAnag); - ordA.setCodJcom(codJcom); - ordA.setRifOrd(rifOrd); - ordA.setListino(codAlis); - arrayOrd.add(ordA); - } - if (flagMate.compareTo("N") == 0) { - DatiPartitaMagDTO datiPartita = new DatiPartitaMagDTO(); - datiPartita.setCodMart(codMart); - datiPartita.setPartitaMag(df.format(dataOrd)); - String partialCode = datiPartita.getParmSuggestCode(); - - String sql = String.format("SELECT dbo.f_suggestCodePartitaMag(%s, 4) AS suggested_code", UtilityDB.valueToString(partialCode)); - String suggestedPartita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql); - - ordL = new DtbOrdt(); - rigaOrdRif++; - ordL.setOperation(OperationType.INSERT); - ordL.setGestione(gestioneLav); - ordL.setDataOrd(dataOrd); - ordL.setGestioneRif(gestioneAcq); - ordL.setDataOrdRif(dataOrd); - ordL.setNumOrdRif(numOrdProd); - ordL.setRigaOrdRif(rigaOrdRif); - ordL.setRifOrd(rifOrd); - ordL.setCodMdep(codMdep); - ordL.setCodAnag(codAnag); - ordL.setCodJcom(codJcom); - ordL.setCodProd(codMart); - ordL.setPartitaMag(suggestedPartita); - ordL.setDescrEstesaProd(descrizioneEstesa); - ordL.setQtaProd(qtaOrd); - ordL.setFlagSospeso("S"); - ordL.setNumCnfProd(numCnfOrdA); - if (codSpes != null) { - ordS = new DtbOrds(); - ordS.setCodSpes(codSpes); - ordS.setUntMis(untMisSpes); - ordS.setQta(qtaOrd); - ordS.setValUnt(valUntSpes); - ordS.setImporto(valUntSpes.multiply(qtaOrd).setScale(EmsRestConstants.cifreDecMax, RoundingMode.HALF_UP)); - ordL.getDtbOrds().add(ordS); - } - } else { - count = 0; - - BigDecimal residuo = qtaOrd.subtract(qtaOrd2); - if (residuo.compareTo(BigDecimal.ZERO) >= 0) { - ordR = new DtbOrdr(); - ordR.setCodMart(codMart); - ordR.setCodArtFor(codArtFor); - ordR.setCodAlis(codAlis); - ordR.setUntOrd(untOrd); - ordR.setQtaOrd(qtaOrd2); - ordR.setQtaCnf(qtaCnf); - ordR.setValUnt(prezzoAcqNetto); - ordR.setCodJcom(codJcom); - ordL.getDtbOrdr().add(ordR); - } - arrayOrd.add(ordL); - } - idArtOld = idArt; - } + BigDecimal prezzoAcqNetto = (BigDecimal) dati.get("prz_acq_netto"); + if (idArt != idArtOld) { + numOrdProd = OrderRules.completeNumOrd(multiDBTransactionManager.getPrimaryConnection(), gestioneAcq, dataOrd, gestioneAcq); + rigaOrdRif = 0; + ordA = new DtbOrdt(); + ordA.setOperation(OperationType.INSERT); + ordA.setGestione(gestioneAcq); + ordA.setDataOrd(dataOrd); + ordA.setNumOrd(numOrdProd); + ordA.setSerie(serOrd); + ordA.setGestioneRif(gestioneAcq); + ordA.setDataOrdRif(dataOrd); + ordA.setNumOrdRif(numOrdProd); + ordA.setCodMdep(codMdep); + ordA.setCodAnag(codAnag); + ordA.setCodJcom(codJcom); + ordA.setRifOrd(rifOrd); + ordA.setListino(codAlis); + arrayOrd.add(ordA); } - resOrdine.close(); - infoOrdine.close(); - if (!arrayOrd.isEmpty()) { - entityProcessor.processEntityList(arrayOrd, true); - serviceRestResponse.setEntityList(arrayOrd); + if (flagMate.compareTo("N") == 0) { + DatiPartitaMagDTO datiPartita = new DatiPartitaMagDTO(); + datiPartita.setCodMart(codMart); + datiPartita.setPartitaMag(new SimpleDateFormat("YY").format(dataOrd)); + String partialCode = datiPartita.getParmSuggestCode(); + + String sql = String.format("SELECT dbo.f_suggestCodePartitaMag(%s, 4) AS suggested_code", UtilityDB.valueToString(partialCode)); + String suggestedPartita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + + ordL = new DtbOrdt(); + rigaOrdRif++; + ordL.setOperation(OperationType.INSERT); + ordL.setGestione("L"); + ordL.setDataOrd(dataOrd); + ordL.setGestioneRif(gestioneAcq); + ordL.setDataOrdRif(dataOrd); + ordL.setNumOrdRif(numOrdProd); + ordL.setRigaOrdRif(rigaOrdRif); + ordL.setRifOrd(rifOrd); + ordL.setCodMdep(codMdep); + ordL.setCodAnag(codAnag); + ordL.setCodJcom(codJcom); + ordL.setCodProd(codMart); + ordL.setPartitaMag(suggestedPartita); + ordL.setDescrEstesaProd(descrizioneEstesa); + ordL.setQtaProd(qtaOrd); + ordL.setFlagSospeso("S"); + ordL.setNumCnfProd(numCnfOrdA); + if (codSpes != null) { + ordS = new DtbOrds(); + ordS.setCodSpes(codSpes); + ordS.setUntMis(untMisSpes); + ordS.setQta(qtaOrd); + ordS.setValUnt(valUntSpes); + ordS.setImporto(valUntSpes.multiply(qtaOrd).setScale(EmsRestConstants.cifreDecMax, RoundingMode.HALF_UP)); + ordL.getDtbOrds().add(ordS); + } } else { - logger.info("NON CI SONO LAVORAZIONI"); + count = 0; + + BigDecimal residuo = qtaOrd.subtract(qtaOrd2); + if (residuo.compareTo(BigDecimal.ZERO) >= 0) { + ordR = new DtbOrdr(); + ordR.setCodMart(codMart); + ordR.setCodArtFor(codArtFor); + ordR.setCodAlis(codAlis); + ordR.setUntOrd(untOrd); + ordR.setQtaOrd(qtaOrd2); + ordR.setQtaCnf(qtaCnf); + ordR.setValUnt(prezzoAcqNetto); + ordR.setCodJcom(codJcom); + ordL.getDtbOrdr().add(ordR); + } + arrayOrd.add(ordL); } + idArtOld = idArt; } - - - } catch (Exception e) { - serviceRestResponse.setErrorMessage(e.getMessage()); - serviceRestResponse.setEsito(EsitoType.KO); - logger.error(e.getMessage(), e); } - - return serviceRestResponse; + return arrayOrd; } public List importOrdiniWebYocabe(String type, String format, ImportRequestDTO body) throws Exception { From d94bd75770aba7ce9e10f44ee59e387f596560bb Mon Sep 17 00:00:00 2001 From: MinaR Date: Tue, 29 Jul 2025 18:23:31 +0200 Subject: [PATCH 03/28] revisione importazione ordini web --- .../service/OrdiniWebImportService.java | 120 +++++++++--------- 1 file changed, 59 insertions(+), 61 deletions(-) diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java index 3895207ebb..c83becb000 100644 --- a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java @@ -19,6 +19,7 @@ import it.integry.ems.rules.completing.dto.DatiPartitaMagDTO; import it.integry.ems.service.EntityProcessor; import it.integry.ems.sync.MultiDBTransaction.Connection; 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.config.EmsRestConstants; import it.integry.ems_model.entity.*; @@ -42,6 +43,7 @@ import java.sql.SQLException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import static java.util.stream.Collectors.groupingBy; @@ -80,6 +82,7 @@ public class OrdiniWebImportService { .setDescrizione(errorMessage) .setTotOrd(1) .setTotQtaOrd(qtaTotale); + dtbOrdLogImport.setOperation(OperationType.INSERT); return dtbOrdLogImport; } @@ -98,57 +101,42 @@ public class OrdiniWebImportService { private List checkOrder(Date dataOrd, Integer numOrd, String serOrd, String gestione, String codVlis, BigDecimal qtaTot, Date dataImport) throws Exception { String query = - "SELECT vtb_list.cod_vlis, " + - " tmp_list.cod_mart as 'cod_mart', " + - " IsNull(mtb_lisv_data.prz_vend, mtb_lisv.prz_vend) as prz_vend," + - " wdtb_ordr.val_unt," + - " wdtb_ordr.riga_ord," + - " CASE WHEN mtb_aart.descrizione_estesa IS NULL THEN mtb_aart.descrizione ELSE mtb_aart.descrizione_estesa END as descr_estesa_art " + - " FROM (SELECT IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis) as cod_vlis, " + - " mtb_lisv.cod_mart, " + - " max(case when vtb_list_data.versione is null then null else Convert(varchar(10), vtb_list_data.data_iniz, 111) + ' ' + replicate('0', 4 - len(vtb_list_data.versione)) + Convert(varchar(5), vtb_list_data.versione) end ) as max_lisv " + - " FROM vtb_list,mtb_aart, " + - " mtb_lisv LEFT OUTER JOIN mtb_lisv_data ON mtb_lisv.cod_vlis = mtb_lisv_data.cod_vlis AND " + - " mtb_lisv.cod_mart = mtb_lisv_data.cod_mart " + - " LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND " + - " mtb_lisv_data.versione = vtb_list_data.versione and " + - " vtb_list_data.cod_promo is null AND " + - " vtb_list_data.data_iniz <= " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + "" + - " WHERE IsNull(vtb_list.cod_vlis_rif, vtb_list.cod_vlis) = mtb_lisv.cod_vlis AND " + - " mtb_lisv.cod_mart = mtb_aart.cod_mart " + - " GROUP BY IsNull(vtb_list.cod_vlis_rif,vtb_list.cod_vlis), " + - " mtb_lisv.cod_mart) tmp_list LEFT OUTER JOIN mtb_lisv on tmp_list.cod_vlis = mtb_lisv.cod_vlis AND " + - " tmp_list.cod_mart = mtb_lisv.cod_mart AND " + - " tmp_list.max_lisv is null " + - " LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis = mtb_lisv_data.cod_vlis AND " + - " tmp_list.cod_mart = mtb_lisv_data.cod_mart AND " + - " Convert(int, right( tmp_list.max_lisv, 4)) = mtb_lisv_data.versione, " + - " vtb_list, " + - " gtb_divi, " + - " mtb_aart," + - " wdtb_ordr " + - " WHERE wdtb_ordr.data_ord = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " and " + - " wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " and " + - " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + " and " + - " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " and " + - " vtb_list.cod_vlis = " + UtilityDB.valueToString(codVlis) + " and " + - " IsNull(tipo_variazione, '') <> 'D' AND mtb_aart.flag_stato = 'A' and " + - " vtb_list.cod_vlis = tmp_list.cod_vlis and " + - " gtb_divi.cod_divi = vtb_list.cod_divi and " + - " tmp_list.cod_mart = mtb_aart.cod_mart and " + - " wdtb_ordr.cod_mart = tmp_list.cod_mart " + - " ORDER BY vtb_list.cod_vlis"; + Query.format( + "WITH listino AS (SELECT *\n" + + " FROM dbo.getlistinovendita(%s, %s, NULL) l\n" + + " WHERE ISNULL(tipo_variazione, '') <> 'D'\n" + + " AND EXISTS (SELECT *\n" + + " FROM mtb_aart\n" + + " WHERE mtb_aart.cod_mart = l.cod_mart\n" + + " AND mtb_aart.flag_stato = 'A'))\n" + + "SELECT wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.val_unt,\n" + + " listino.prz_vend,\n" + + " mtb_aart.descrizione_estesa as descrizione_estesa_art\n" + + "FROM wdtb_ordr\n" + + " INNER JOIN listino ON wdtb_ordr.cod_mart = listino.cod_mart\n" + + " INNER JOIN mtb_aart ON wdtb_ordr.cod_mart = mtb_aart.cod_mart\n" + + "WHERE listino.prz_vend <> wdtb_ordr.val_unt\n" + + " AND wdtb_ordr.data_ord = %s\n" + + " AND wdtb_ordr.num_ord = %s\n" + + " AND wdtb_ordr.serie = %s\n" + + " AND wdtb_ordr.gestione = %s", + dataOrd, codVlis, dataOrd, numOrd, serOrd, gestione); List> datiOrdine = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); - return datiOrdine.stream().filter(x -> x.get("val_unt") != x.get("prz_vend")) - .map( - x -> { - String errMsg = x.get("cod_mart") + " " + - UtilityString.streNull(x.get("descrizione_estesa_art").toString()) + - " prz. listino: " + String.valueOf((double) x.get("prz_vend")) + - " - prz. applicato: " + String.valueOf((double) x.get("val_unt")); - return insertLog(gestione, dataOrd, serOrd, numOrd, errMsg, "2", qtaTot, dataImport, "P"); - }).collect(Collectors.toList()); + if (datiOrdine == null || datiOrdine.isEmpty()) { + return Collections.emptyList(); + } else { + return datiOrdine.stream() + .map( + x -> { + String errMsg = x.get("cod_mart") + " " + + UtilityString.streNull(x.get("descrizione_estesa_art").toString()) + + " prz. listino: " + String.valueOf((double) x.get("prz_vend")) + + " - prz. applicato: " + String.valueOf((double) x.get("val_unt")); + return insertLog(gestione, dataOrd, serOrd, numOrd, errMsg, "2", qtaTot, dataImport, "P"); + }).collect(Collectors.toList()); + } } @@ -321,22 +309,27 @@ public class OrdiniWebImportService { String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd) + " " + e.getException().getMessage(); dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errorMessage, "2", qtaOrdTot, importDate, "P")); - multiDBTransactionManager.rollbackAll(); } + multiDBTransactionManager.rollbackAll(); } else { wdtbOrdts.add(wdtbOrdt); + multiDBTransactionManager.commitAll(); + String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); if (ApplicationName.WINGEST.toString().equals(applName)) { dtbOrdLogImportList.addAll(checkOrder(dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate)); } - dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P")); - multiDBTransactionManager.commitAll(); + //dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P")); } } } - entityProcessor.processEntityList(dtbOrdLogImportList, multiDBTransactionManager, false); - multiDBTransactionManager.commitAll(); + if ( dtbOrdLogImportList != null && !dtbOrdLogImportList.isEmpty()) { + AtomicInteger i = new AtomicInteger(); + dtbOrdLogImportList.stream().forEach(x->x.setIdRiga(i.getAndIncrement())); + UtilityEntity.throwEntitiesException(entityProcessor.processEntityList(dtbOrdLogImportList, multiDBTransactionManager, false)); + multiDBTransactionManager.commitAll(); + } } postSave(wdtbOrdts); @@ -464,7 +457,11 @@ public class OrdiniWebImportService { // Se non si tratta di un cliente TD e vi è un deposito sulla riga diverso dal deposito // dell'ordine allora dovrà essere generato un ordine di trasferimento merce if (ordine.getFlagTd().equalsIgnoreCase("N")) { - generateOrdTrasfMerce = righeOrd.stream().noneMatch(x -> x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); + generateOrdTrasfMerce = + righeOrd + .stream() + .filter(x->x.getWdtbOrdr().getCodMdep() != null) + .anyMatch(x -> !x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); } } @@ -478,7 +475,7 @@ public class OrdiniWebImportService { List righeBattiscopa = getRowBattiscopa(riga, gestione, dataOrd, numOrd, serie); dtbOrdt.getDtbOrdr().addAll(righeBattiscopa); } else { - DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaOmg(), false, false, codAliqOmg); + DtbOrdr dtbOrdr = getRowOrd(riga.getWdtbOrdr(), riga.getWdtbOrdr().getQtaOrd(), false, false, codAliqOmg); dtbOrdr .setPercProv(riga.getWdtbOrdr().getPercProv()) .setNote(riga.getWdtbOrdr().getNote()) @@ -549,11 +546,13 @@ public class OrdiniWebImportService { dtbOrdt.getDtbOrds().add(dtbOrds); } - dtbOrdt.dataCompleting(multiDBTransactionManager.getPrimaryConnection()); orderEntities.add(dtbOrdt); // Creazione collo di reso - if (creaColloReso) { + if (creaColloReso && righeOrd.stream().anyMatch(x->x.getWdtbOrdr().getQtaReso() != null && x.getWdtbOrdr().getQtaReso().compareTo(BigDecimal.ZERO) > 0)) { + //Ci serve creare il numero ordine per assegnarlo nel collo + numOrd = OrderRules.completeNumOrd(multiDBTransactionManager.getPrimaryConnection(), "V", dataOrd, null); + dtbOrdt.setNumOrd(numOrd); MtbColt mtbColt = importColli(requestDataDTO.getUsername(), gestione, dataOrd, numOrd, serie, dtbOrdt.getDataOrd(), dtbOrdt.getNumOrd(), codFornTD, ordine.getWdtbOrdt().getCodMdep()); orderEntities.add(mtbColt); @@ -1075,7 +1074,6 @@ public class OrdiniWebImportService { ordA.setOperation(OperationType.INSERT); ordini.add(ordA); for (HashMap r : datiOrdPerDeposito) { - DtbOrdr ordR = new DtbOrdr(); ordR.setCodMart((String) r.get("cod_mart")); ordR.setUntOrd((String) r.get("unt_ord")); @@ -1120,7 +1118,7 @@ public class OrdiniWebImportService { " wdtb_ordt.gestione = %s AND " + " wdtb_ordt.data_ord = %s AND " + " wdtb_ordt.num_ord = %s AND " + - " wdtb_ordt.serie = %a AND " + + " wdtb_ordt.serie = %s AND " + " wdtb_ordr.flag_reso_riv <> 'O' ", isResoRivendibile, isResoNonRivendibile, gestione, dataOrd, numOrd, serOrd); @@ -1183,7 +1181,7 @@ public class OrdiniWebImportService { } private List importOrdLav(String gestione, Date dataOrd, int numOrd, String serOrd, String codMdep) throws Exception { - List arrayOrd = new ArrayList(); + List arrayOrd = new ArrayList<>(); DtbOrdt ordA = new DtbOrdt(); From 90f3a636db6fbe3074275de552f3ab60a438eae3 Mon Sep 17 00:00:00 2001 From: MinaR Date: Wed, 27 Aug 2025 16:57:45 +0200 Subject: [PATCH 04/28] modifiche per importazione ordini web ed elimiazione trigger ordl --- .../model/Migration_20250827114912.java | 23 + .../model/Migration_20250827151739.java | 23 + .../ems/rules/completing/DocOrdRules.java | 13 +- .../ems/rules/completing/OrderRules.java | 45 + .../it/integry/ems_model/base/EntityBase.java | 1 - .../business_logic/GeneraOrdLav.java | 118 +- .../business_logic/dto/DatiMaterialiDTO.java | 51 + .../ems_model/entity/DtbOrdLogImport.java | 93 +- .../it/integry/ems_model/entity/DtbOrdr.java | 29 +- ems-core/src/main/resources/rules/OrdL.drl | 3 +- .../src/main/resources/rules/post_calc.drl | 3 + .../order/Import/dto/ImporOrdiniWebDTO.java | 14 +- .../service/OrdiniWebImportService.java | 1032 ++++++++--------- .../service/MesProductionServiceV2.java | 4 +- 14 files changed, 813 insertions(+), 639 deletions(-) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827114912.java create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java create mode 100644 ems-core/src/main/java/it/integry/ems_model/business_logic/dto/DatiMaterialiDTO.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827114912.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827114912.java new file mode 100644 index 0000000000..fa468ad082 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827114912.java @@ -0,0 +1,23 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.IntegryCustomerDB; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250827114912 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if (isCustomerDb(IntegryCustomerDB.Ime_ImeTe) || isCustomerDb(IntegryCustomerDB.Materica_ImeBa)) { + updateSetupValue("W_PORDI_RC", "SETUP", "CHECK_DEP_TERZISTA", "S"); + updateSetupValue("DTB_ORDT", "SETUP", "DISABLE_TRIGGER_ORDL", "S"); + } + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java new file mode 100644 index 0000000000..505ce134da --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java @@ -0,0 +1,23 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250827151739 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + + executeStatement( + "exec dropPrimaryKey 'dtb_ord_log_import'", + "alter table dtb_ord_log_import add id bigint identity", + "alter table dtb_ord_log_import add constraint pk_dtb_ord_log_import primary key (id)"); + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdRules.java index 33c37bb93a..a54c6d359c 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdRules.java @@ -5,6 +5,7 @@ import com.annimon.stream.Stream; import it.integry.common.var.CommonConstants; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.base.EntityInterface; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.db.ResultSetMapper; import it.integry.ems_model.entity.*; @@ -366,6 +367,7 @@ public class DocOrdRules extends QueryRules { } + if (isOrdine) { sql = "SELECT gtb_spes.descrizione, " + " CAST(0 AS NUMERIC(20, 5)) as qta, " @@ -377,6 +379,7 @@ public class DocOrdRules extends QueryRules { + " gtb_divi " + " WHERE gtb_divi.cod_divi = " + UtilityDB.valueToString(codDivi) + " and " + " gtb_spes.cod_spes = " + UtilityDB.valueToString(codSpes); + } else { sql = "SELECT gtb_spes.descrizione, " + " CAST(0 AS NUMERIC(20, 5)) as qta, " @@ -418,6 +421,8 @@ public class DocOrdRules extends QueryRules { } else if (columnName.equals("untMis")) { columnValue = untMisServ; } + } else if (spese instanceof DtbOrds && ((DtbOrds) spese).getValUnt() != null && columnName.equals("importo")) { + valueEntity = ((DtbOrds) spese).getValUnt().multiply(((DtbOrds) spese).getQta()); } if (valueEntity == null) { @@ -974,12 +979,12 @@ public class DocOrdRules extends QueryRules { .setGeneraOrdLavDaProd(false); dtbOrdtProd.setOperation(OperationType.NO_OP); - /* +/* BigDecimal valUnt = new BigDecimal(0); if (dtbOrdt.getQtaProd().compareTo(BigDecimal.ZERO) > 0) { valUnt = dtbOrdt.getTotImponib().divide(dtbOrdt.getQtaProd(), 5, BigDecimal.ROUND_HALF_UP); - }*/ - + } +*/ DtbOrdr dtbOrdrProd = new DtbOrdr().setRigaOrd(dtbOrdt.getRigaOrdRif()); if (dtbOrdt.getOperation() == OperationType.DELETE) { @@ -995,7 +1000,7 @@ public class DocOrdRules extends QueryRules { .setRapConv(dtbOrdt.getRapConvProd()) .setQtaOrd(dtbOrdt.getQtaProd()) .setQtaEvasa(dtbOrdt.getQtaEvasaProd()) - /*.setValUnt(valUnt)*/ + //.setValUnt(valUnt) .setSconto5(dtbOrdt.getSconto1()) .setSconto6(dtbOrdt.getSconto2()) .setSconto7(dtbOrdt.getSconto3()) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/OrderRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/OrderRules.java index 57a50f9eb3..49a94f60a5 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/OrderRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/OrderRules.java @@ -3,10 +3,12 @@ package it.integry.ems.rules.completing; import it.integry.common.var.CommonConstants; import it.integry.ems.sync.MultiDBTransaction.Connection; +import it.integry.ems_model.base.EntityInterface; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.entity.*; import it.integry.ems_model.entity.common.DtbDocOrdT; import it.integry.ems_model.entity.common.DtbOrdCommonR; +import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.ApplicationName; import it.integry.ems_model.types.OperationType; import it.integry.ems_model.utility.*; @@ -523,4 +525,47 @@ public class OrderRules extends QueryRules { } } } + + + public static void completeImportoRigaOrdProd(Connection connection, DtbOrdt dtbOrdt) throws Exception { + SetupGest setup = new SetupGest(); + boolean disableTriggerOrdl = setup.getSetupBoolean(connection, "DTB_ORDT", "SETUP", "DISABLE_TRIGGER_ORDL"); + + if (!disableTriggerOrdl) return; + + String sql = Query.format( + "SELECT importo_riga FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s AND riga_ord = %s ", + dtbOrdt.getGestioneRif(), + dtbOrdt.getDataOrdRif(), + dtbOrdt.getNumOrdRif(), + dtbOrdt.getRigaOrdRif() + ); + + BigDecimal importoRigaOrdP = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql); + BigDecimal importoSpese = dtbOrdt.getDtbOrds().stream().map(x-> x.getImporto()).reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal valUnt = new BigDecimal(0); + if (dtbOrdt.getQtaProd().compareTo(BigDecimal.ZERO) > 0) { + valUnt = importoSpese.divide(dtbOrdt.getQtaProd().multiply(dtbOrdt.getRapConvProd()), 5, BigDecimal.ROUND_HALF_UP); + } + + if (UtilityBigDecimal.equalsTo(importoSpese, importoRigaOrdP)) return; + + DtbOrdt dtbOrdtProd = + new DtbOrdt() + .setGestione(dtbOrdt.getGestioneRif()) + .setDataOrd(dtbOrdt.getDataOrdRif()) + .setNumOrd(dtbOrdt.getNumOrdRif()) + .setGeneraOrdLavDaProd(false); + dtbOrdtProd.setOperation(OperationType.NO_OP); + DtbOrdr dtbOrdrProd = + new DtbOrdr() + .setRigaOrd(dtbOrdt.getRigaOrdRif()) + .setValUnt(valUnt) + .setImportoRiga(importoSpese); + dtbOrdrProd.setOperation(OperationType.UPDATE); + dtbOrdtProd.addDtbOrdr(dtbOrdrProd); + dtbOrdt.setDtbOrdtProd(dtbOrdtProd); + + } } \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems_model/base/EntityBase.java b/ems-core/src/main/java/it/integry/ems_model/base/EntityBase.java index 2617d65a8d..0da5b6bca1 100644 --- a/ems-core/src/main/java/it/integry/ems_model/base/EntityBase.java +++ b/ems-core/src/main/java/it/integry/ems_model/base/EntityBase.java @@ -1447,7 +1447,6 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter insertSqlTrace.append(")"); logger.trace("Query tracing: {}", insertSqlTrace); - long insertedRowCount = insertBulkPs.executeLargeUpdate(); if (insertedRowCount > 0 && containsIdentity) { ResultSet rs = insertBulkPs.getGeneratedKeys(); diff --git a/ems-core/src/main/java/it/integry/ems_model/business_logic/GeneraOrdLav.java b/ems-core/src/main/java/it/integry/ems_model/business_logic/GeneraOrdLav.java index f586cc5659..c433f506f3 100644 --- a/ems-core/src/main/java/it/integry/ems_model/business_logic/GeneraOrdLav.java +++ b/ems-core/src/main/java/it/integry/ems_model/business_logic/GeneraOrdLav.java @@ -8,10 +8,7 @@ import it.integry.ems.rules.completing.OrderRules; import it.integry.ems.rules.completing.dto.DatiPartitaMagDTO; import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems_model.base.EntityBase; -import it.integry.ems_model.business_logic.dto.ActivityCicloProdDTO; -import it.integry.ems_model.business_logic.dto.CommessaDTO; -import it.integry.ems_model.business_logic.dto.ExplodeDistDTO; -import it.integry.ems_model.business_logic.dto.OrdProdSetupDTO; +import it.integry.ems_model.business_logic.dto.*; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.db.ResultSetMapper; import it.integry.ems_model.entity.*; @@ -220,7 +217,7 @@ public class GeneraOrdLav { qtaProdDist = UtilityHashMap.getValueIfExists(datiDistinta, "qta_prod"); } - if ( row.getDistinta() != null && !row.getDistinta().isEmpty()) { + if (row.getDistinta() != null && !row.getDistinta().isEmpty()) { datiDistinta.put("qta_prod", row.getQta()); datiDistinta.put("rap_conv_prod", row.getRapConv()); } @@ -333,9 +330,16 @@ public class GeneraOrdLav { .setColliPedana(row.getColliPedana()) .setCodTcolUl(row.getCodTcolUl()) .setCodTcolUi(row.getCodTcolUi()) - .setFlagEvasoProd(flagEvasoProd!=null?flagEvasoProd.getValue().toString():null) + .setFlagEvasoProd(flagEvasoProd != null ? flagEvasoProd.getValue().toString() : null) .setGeneraOrdLavDaProd(dtbOrdt.isGeneraOrdLavDaProd()); + if (row.getFlagSospesoOrdl() !=null) { + ordT.setFlagSospeso(row.getFlagSospesoOrdl()); + } + if (row.getRifOrdOrdl() !=null) { + ordT.setRifOrd(row.getRifOrdOrdl()); + } + String flagAnnulla = "N"; if (row.getFlagEvaso() == FlagEvaso.ANNULLATO) { flagAnnulla = "S"; @@ -876,7 +880,7 @@ public class GeneraOrdLav { BigDecimal rapporto = qtaProd.divide(qtaProdDist, EmsRestConstants.cifreDecMax, RoundingMode.HALF_UP); List artDist = new ArrayList<>(); - List jtbDistMates; + List jtbDistMates; String sql; Integer durataFasiPrec = 0; if (((DtbOrdr) dtbOrdr).getDistinta() == null) { @@ -896,7 +900,7 @@ public class GeneraOrdLav { "WHERE is_foglia = 1\n" + "ORDER BY item_id", codProd); - jtbDistMates = UtilityDB.executeSimpleQueryDTO(conn, sql, JtbDistMate.class); + jtbDistMates = UtilityDB.executeSimpleQueryDTO(conn, sql, DatiMaterialiDTO.class); } else { jtbDistMates = ((DtbOrdr) dtbOrdr).getDistinta(); @@ -911,13 +915,13 @@ public class GeneraOrdLav { .setDataCons(dataConsDist) ); } else { - for (JtbDistMate mp : jtbDistMates) { - Integer numFase = mp.getNumFase(); - String codProdPri = mp.getCodProdPri(); - String descrMate = mp.getDescrizione(); - String descrEstesaMate = mp.getDescrizioneEstesa(); - BigDecimal qtaMate = mp.getQtaStd(); - String untMisMate = mp.getUntMisDist(); + for (DatiMaterialiDTO mp : jtbDistMates) { + Integer numFase = mp.getJtbDistMate().getNumFase(); + String codProdPri = mp.getJtbDistMate().getCodProdPri(); + String descrMate = mp.getJtbDistMate().getDescrizione(); + String descrEstesaMate = mp.getJtbDistMate().getDescrizioneEstesa(); + BigDecimal qtaMate = mp.getJtbDistMate().getQtaStd(); + String untMisMate = mp.getJtbDistMate().getUntMisDist(); BigDecimal qta = qtaMate.multiply(rapporto); String flagUMDig = @@ -929,24 +933,27 @@ public class GeneraOrdLav { qta = qta.setScale(0, RoundingMode.CEILING); } - if (mp.getCodMart() != null) { - existCodMart(conn, mp.getCodMart()); + if (mp.getJtbDistMate().getCodMart() != null) { + existCodMart(conn, mp.getJtbDistMate().getCodMart()); } if (descrMate == null) descrMate = UtilityString.left(descrEstesaMate, 40); // Inserimento riga materiale nell'ordine di lavorazione DtbOrdr ordR = new DtbOrdr() - .setCodMart(mp.getCodMart()) + .setCodMart(mp.getJtbDistMate().getCodMart()) .setCodJcom(ordT.getCodJcom()) .setDescrizione(descrMate) .setDescrizioneEstesa(descrEstesaMate) .setQtaOrd(qta) .setUntOrd(untMisMate) - .setRapConv(mp.getRapConvDist()) - .setNumFase(numFase); + .setRapConv(mp.getJtbDistMate().getRapConvDist()) + .setNumFase(numFase) + .setValUnt(mp.getValUnt()) + .setCodAlis(mp.getCodAlis()) + .setCodArtFor(mp.getCodArtForn()); - if (visNoteRigaDist) ordR.setNote(mp.getNote()); + if (visNoteRigaDist) ordR.setNote(mp.getJtbDistMate().getNote()); // Calcolo data consegna materiali per fase di lavoro @@ -973,15 +980,15 @@ public class GeneraOrdLav { sql = Query.format( "SELECT cod_jfas FROM jtb_cicl WHERE cod_prod = %s", - mp.getCodProdPri()); + mp.getJtbDistMate().getCodProdPri()); String codJfasSL = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql); isSameLav = !UtilityString.equalsIgnoreCase(codJfasDist, codJfasSL); if (!isSameLav) { - artDist.add(new ExplodeDistDTO().setCodProd(mp.getCodProdPri()).setRoot(false).setNumFase(numFase) + artDist.add(new ExplodeDistDTO().setCodProd(mp.getJtbDistMate().getCodProdPri()).setRoot(false).setNumFase(numFase) .setQtaProd(qta) .setUntMis(untMisMate) .setCodJfasRow(codJfasSL) - .setRapConv(mp.getRapConvDist()) + .setRapConv(mp.getJtbDistMate().getRapConvDist()) .setDataCons(ordR.getDataCons()) ); } @@ -1482,8 +1489,8 @@ public class GeneraOrdLav { List dtbOrdSteps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class); dtbOrdSteps.stream().forEach(x -> { - x.setDataIniz(x.getDataIniz()!=null?UtilityDate.dateAdd(x.getDataIniz(), ggDiff):null); - x.setDataFine(x.getDataFine() != null ?UtilityDate.dateAdd(x.getDataFine(), ggDiff):null); + x.setDataIniz(x.getDataIniz() != null ? UtilityDate.dateAdd(x.getDataIniz(), ggDiff) : null); + x.setDataFine(x.getDataFine() != null ? UtilityDate.dateAdd(x.getDataFine(), ggDiff) : null); x.setOperation(OperationType.UPDATE); }); @@ -1553,12 +1560,15 @@ public class GeneraOrdLav { sql = UtilityDB.addwhereCond(sql, ordT.getPkWhereCond(), true); List dtbOrdSteps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class); - dtbOrdSteps.forEach(x -> { - x.setQtaProd(x.getQtaProd().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)); - x.setOperation(OperationType.UPDATE); - }); + if (dtbOrdSteps != null) { - ordT.setDtbOrdSteps(dtbOrdSteps); + dtbOrdSteps.forEach(x -> { + x.setQtaProd(x.getQtaProd().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)); + x.setOperation(OperationType.UPDATE); + }); + + ordT.setDtbOrdSteps(dtbOrdSteps); + } } sql = "SELECT * FROM dtb_ords"; @@ -1635,7 +1645,7 @@ public class GeneraOrdLav { private static HashMap checkOrdLav(Connection conn, boolean checkLockProd, String gestione, Date dataOrd, Integer numOrd, Integer rigaOrd) throws Exception { // Controllo se l'ordine di lavorazione è stato avviato String sql = "select distinct " + - " CAST(case when dtb_ordt.flag_evaso_prod = 'E' or dtb_ordt.flag_evaso_forzato = 'S' or ordSteps.prodAvviata <> 0 then 1 else 0 end as bit) as flag_lock, " + + " CAST(case when dtb_ordt.flag_evaso_prod = 'E' or dtb_ordt.flag_evaso_forzato = 'S' or iSnULL(ordSteps.prodAvviata,0) <> 0 then 1 else 0 end as bit) as flag_lock, " + " dtb_ordt.data_ord, " + " dtb_ordt.num_ord " + "from (select gestione, data_ord, num_ord " + @@ -1643,11 +1653,14 @@ public class GeneraOrdLav { " where dtb_ordt.gestione_rif = " + UtilityDB.valueToString(gestione) + " AND " + " dtb_ordt.data_ord_rif = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + " dtb_ordt.num_ord_rif = " + UtilityDB.valueToString(numOrd) + " AND " + - " dtb_ordt.riga_ord_rif = " + UtilityDB.valueToString(rigaOrd) + ") ordlav, " + - " dtb_ordt left outer join dtb_ordr on dtb_ordr.gestione = dtb_ordt.gestione " + + " dtb_ordt.riga_ord_rif = " + UtilityDB.valueToString(rigaOrd) + ") ordlav " + + " INNER JOIN dtb_ordt on ordLav.gestione = dtb_ordt.gestione and \n" + + " ordLav.data_ord = dtb_ordt.data_ord and \n" + + " ordLav.num_ord = dtb_ordt.num_ord " + + " left outer join dtb_ordr on dtb_ordr.gestione = dtb_ordt.gestione " + " AND dtb_ordr.data_ord = dtb_ordt.data_ord " + - " AND dtb_ordr.num_ord = dtb_ordt.num_ord," + - " ( select dtb_ordt.gestione, " + + " AND dtb_ordr.num_ord = dtb_ordt.num_ord " + + " LEFT OUTER JOIN ( select dtb_ordt.gestione, " + " dtb_ordt.data_ord, " + " dtb_ordt.num_ord, " + " sum(case when id_step <> 0 then 1 else 0 end) as prodAvviata " + @@ -1662,11 +1675,7 @@ public class GeneraOrdLav { " dtb_ordt.riga_ord_rif = " + UtilityDB.valueToString(rigaOrd) + " " + " group by dtb_ordt.gestione, " + " dtb_ordt.data_ord, " + - " dtb_ordt.num_ord)ordSteps " + - "where ordLav.gestione = dtb_ordt.gestione and " + - " ordLav.data_ord = dtb_ordt.data_ord and " + - " ordLav.num_ord = dtb_ordt.num_ord and " + - " dtb_ordt.gestione = ordSteps.gestione and " + + " dtb_ordt.num_ord)ordSteps on dtb_ordt.gestione = ordSteps.gestione and " + " dtb_ordt.data_ord = ordSteps.data_ord and " + " dtb_ordt.num_ord = ordSteps.num_ord"; @@ -1678,20 +1687,21 @@ public class GeneraOrdLav { if (flagLock && checkLockProd) { throw new Exception("La produzione num. " + numOrdLav + " del " + (new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrdLav)) + " è stata già avviata, non è pertanto possibile apportare modifiche"); } - } - // Acquisizione fase da testa ordine di lavorazione - sql = " select cod_jfas, activity_id, cod_jflav from dtb_ordt " - + "WHERE gestione_rif = " + UtilityDB.valueToString(gestione) + " AND " - + " data_ord_rif = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " - + " num_ord_rif = " + UtilityDB.valueToString(numOrd.toString()) + " AND " - + " riga_ord_rif = " + UtilityDB.valueToString(rigaOrd.toString()); - HashMap dati = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); - if (UtilityHashMap.isPresent(dati)) { - String activityID = UtilityHashMap.getValueIfExists(datiOrdine, "activity_id"); - datiOrdine.put("activity_id", activityID); - String codJflavLav = UtilityHashMap.getValueIfExists(datiOrdine, "cod_jflav"); - datiOrdine.put("cod_jflav", codJflavLav); + + // Acquisizione fase da testa ordine di lavorazione + sql = " select cod_jfas, activity_id, cod_jflav from dtb_ordt " + + "WHERE gestione_rif = " + UtilityDB.valueToString(gestione) + " AND " + + " data_ord_rif = " + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + " AND " + + " num_ord_rif = " + UtilityDB.valueToString(numOrd.toString()) + " AND " + + " riga_ord_rif = " + UtilityDB.valueToString(rigaOrd.toString()); + HashMap dati = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); + if (UtilityHashMap.isPresent(dati)) { + String activityID = UtilityHashMap.getValueIfExists(dati, "activity_id"); + datiOrdine.put("activity_id", activityID); + String codJflavLav = UtilityHashMap.getValueIfExists(dati, "cod_jflav"); + datiOrdine.put("cod_jflav", codJflavLav); + } } return datiOrdine; } diff --git a/ems-core/src/main/java/it/integry/ems_model/business_logic/dto/DatiMaterialiDTO.java b/ems-core/src/main/java/it/integry/ems_model/business_logic/dto/DatiMaterialiDTO.java new file mode 100644 index 0000000000..056e0338a5 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems_model/business_logic/dto/DatiMaterialiDTO.java @@ -0,0 +1,51 @@ +package it.integry.ems_model.business_logic.dto; + +import it.integry.ems_model.annotation.SqlField; +import it.integry.ems_model.entity.JtbDistMate; + +import java.math.BigDecimal; + +public class DatiMaterialiDTO { + @SqlField + private JtbDistMate jtbDistMate; + + private BigDecimal valUnt; + private String codAlis; + private String codArtForn; + + public JtbDistMate getJtbDistMate() { + return jtbDistMate; + } + + public DatiMaterialiDTO setJtbDistMate(JtbDistMate jtbDistMate) { + this.jtbDistMate = jtbDistMate; + return this; + } + + public BigDecimal getValUnt() { + return valUnt; + } + + public DatiMaterialiDTO setValUnt(BigDecimal valUnt) { + this.valUnt = valUnt; + return this; + } + + public String getCodAlis() { + return codAlis; + } + + public DatiMaterialiDTO setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public String getCodArtForn() { + return codArtForn; + } + + public DatiMaterialiDTO setCodArtForn(String codArtForn) { + this.codArtForn = codArtForn; + return this; + } +} diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java index 2c77689557..5b29b53899 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdLogImport.java @@ -1,46 +1,55 @@ package it.integry.ems_model.entity; -import com.fasterxml.jackson.annotation.JsonTypeName; -import it.integry.ems_model.annotation.*; -import it.integry.ems_model.base.EntityBase; import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.kie.api.definition.type.PropertyReactive; -import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; +import java.util.ArrayList; +import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.annotation.Master; +import org.kie.api.definition.type.PropertyReactive; +import it.integry.ems_model.annotation.Table; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.apache.logging.log4j.Logger; +import java.util.Date; +import it.integry.ems_model.annotation.SqlField; +import java.math.BigDecimal; +import it.integry.ems_model.annotation.PK; +import it.integry.ems_model.annotation.Identity; -@Master -@PropertyReactive -@Table(DtbOrdLogImport.ENTITY) -@JsonTypeName(DtbOrdLogImport.ENTITY) +@Master() +@PropertyReactive() +@Table(value = DtbOrdLogImport.ENTITY) +@JsonTypeName(value = DtbOrdLogImport.ENTITY) public class DtbOrdLogImport extends EntityBase { - private static final long serialVersionUID = 1L; + public final static String ENTITY = "dtb_ord_log_import"; + + private final static Long serialVersionUID = 1L; private final static Logger logger = LogManager.getLogger(); - public static final String ENTITY = "dtb_ord_log_import"; + public DtbOrdLogImport() { + super(logger); + } - @PK @SqlField(value = "data_import", nullable = false) private LocalDateTime dataImport; - @PK - @SqlDetailId - @SqlField(value = "id_riga", nullable = false) + @SqlField(value = "id_riga", nullable = false, defaultObjectValue = "0") private Integer idRiga; - @SqlField(value = "gestione", maxLength = 1) + @SqlField(value = "gestione", maxLength = 1, nullable = true) private String gestione; - @SqlField(value = "data_ord") - private LocalDateTime dataOrd; + @SqlField(value = "data_ord", nullable = true) + private LocalDate dataOrd; - @SqlField(value = "num_ord") + @SqlField(value = "num_ord", nullable = true) private Integer numOrd; - @SqlField(value = "flag_tipo_ord", maxLength = 1) + @SqlField(value = "flag_tipo_ord", maxLength = 1, nullable = true) private String flagTipoOrd; @SqlField(value = "flag_tipo_log", maxLength = 1, nullable = false) @@ -59,17 +68,18 @@ public class DtbOrdLogImport extends EntityBase { private BigDecimal totQtaOrd; @SqlField(value = "tot_qta_omg", nullable = false) - private BigDecimal totQuaOmg; + private BigDecimal totQtaOmg; @SqlField(value = "tot_qta_resi", nullable = false) - private BigDecimal totQuaResi; + private BigDecimal totQtaResi; - @SqlField(value = "serie", maxLength = 5) + @SqlField(value = "serie", maxLength = 5, nullable = true) private String serie; - public DtbOrdLogImport() { - super(logger); - } + @PK() + @Identity() + @SqlField(value = "id", nullable = false) + private Long id; public LocalDateTime getDataImport() { return dataImport; @@ -98,11 +108,11 @@ public class DtbOrdLogImport extends EntityBase { return this; } - public LocalDateTime getDataOrd() { + public LocalDate getDataOrd() { return dataOrd; } - public DtbOrdLogImport setDataOrd(LocalDateTime dataOrd) { + public DtbOrdLogImport setDataOrd(LocalDate dataOrd) { this.dataOrd = dataOrd; return this; } @@ -170,21 +180,21 @@ public class DtbOrdLogImport extends EntityBase { return this; } - public BigDecimal getTotQuaOmg() { - return totQuaOmg; + public BigDecimal getTotQtaOmg() { + return totQtaOmg; } - public DtbOrdLogImport setTotQuaOmg(BigDecimal totQuaOmg) { - this.totQuaOmg = totQuaOmg; + public DtbOrdLogImport setTotQtaOmg(BigDecimal totQtaOmg) { + this.totQtaOmg = totQtaOmg; return this; } - public BigDecimal getTotQuaResi() { - return totQuaResi; + public BigDecimal getTotQtaResi() { + return totQtaResi; } - public DtbOrdLogImport setTotQuaResi(BigDecimal totQuaResi) { - this.totQuaResi = totQuaResi; + public DtbOrdLogImport setTotQtaResi(BigDecimal totQtaResi) { + this.totQtaResi = totQtaResi; return this; } @@ -196,4 +206,13 @@ public class DtbOrdLogImport extends EntityBase { this.serie = serie; return this; } + + public Long getId() { + return id; + } + + public DtbOrdLogImport setId(Long id) { + this.id = id; + return this; + } } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdr.java b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdr.java index 5554e9d0a3..ec4b14f340 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdr.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/DtbOrdr.java @@ -7,6 +7,7 @@ import it.integry.common.var.CommonConstants; import it.integry.ems.rules.completing.dto.UntMisDTO; import it.integry.ems_model.annotation.*; import it.integry.ems_model.base.EquatableEntityInterface; +import it.integry.ems_model.business_logic.dto.DatiMaterialiDTO; import it.integry.ems_model.entity._enum.FlagEvaso; import it.integry.ems_model.entity.common.DtbDocOrdR; import it.integry.ems_model.entity.common.DtbOrdCommonR; @@ -347,6 +348,10 @@ public class DtbOrdr extends DtbOrdCommonR implements EquatableEntityInterface stbActivityList; - private List distinta; + private List distinta; private HashMap datiListino; @@ -1359,6 +1364,24 @@ public class DtbOrdr extends DtbOrdCommonR implements EquatableEntityInterface getDistinta() { + public List getDistinta() { return distinta; } - public DtbOrdr setDistinta(List distinta) { + public DtbOrdr setDistinta(List distinta) { this.distinta = distinta; return this; } diff --git a/ems-core/src/main/resources/rules/OrdL.drl b/ems-core/src/main/resources/rules/OrdL.drl index 14ce88f6ce..116d490f7c 100644 --- a/ems-core/src/main/resources/rules/OrdL.drl +++ b/ems-core/src/main/resources/rules/OrdL.drl @@ -8,6 +8,7 @@ import it.integry.ems.rules.util.* import it.integry.ems.rules.completing.* import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems_model.utility.UtilityDB +import it.integry.ems_model.base.EntityInterface global Connection conn global String username @@ -138,7 +139,7 @@ then modify($entity){ setDtbOrdtProd(dtbOrdtProd) } - end + diff --git a/ems-core/src/main/resources/rules/post_calc.drl b/ems-core/src/main/resources/rules/post_calc.drl index a2287af9cb..2fac473eaf 100644 --- a/ems-core/src/main/resources/rules/post_calc.drl +++ b/ems-core/src/main/resources/rules/post_calc.drl @@ -65,6 +65,9 @@ then DocOrdCalTotaliRules.calcTotali(conn, $testata); OrderRules.sospendiOrdine(conn, $testata); } + if ($testata.getGestione().equalsIgnoreCase("L") && $testata.getGestioneRif() != null && $testata.getGestioneRif().equalsIgnoreCase("A") && $testata.getDtbOrds().size() > 0) { + OrderRules.completeImportoRigaOrdProd(conn, $testata); + } end rule "completeCalcTotaliDoc" diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java index 17bbf3aedc..713c48b1c1 100644 --- a/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/dto/ImporOrdiniWebDTO.java @@ -18,6 +18,9 @@ public class ImporOrdiniWebDTO { @SqlField(value = "cod_vlis_dest") private String codVlisDest; + @SqlField(value = "new_clie") + private Boolean newClie; + public WdtbOrdt getWdtbOrdt() { return wdtbOrdt; } @@ -28,7 +31,7 @@ public class ImporOrdiniWebDTO { } public String getFlagTd() { - return flagTd; + return flagTd==null?"N":flagTd; } public ImporOrdiniWebDTO setFlagTd(String flagTd) { @@ -53,4 +56,13 @@ public class ImporOrdiniWebDTO { this.codVlisDest = codVlisDest; return this; } + + public Boolean getNewClie() { + return newClie; + } + + public ImporOrdiniWebDTO setNewClie(Boolean newClie) { + this.newClie = newClie; + return this; + } } diff --git a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java index 4d66f93bd8..49a42acf21 100644 --- a/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/order/Import/service/OrdiniWebImportService.java @@ -21,6 +21,7 @@ import it.integry.ems.sync.MultiDBTransaction.Connection; 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.business_logic.dto.DatiMaterialiDTO; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.entity.*; import it.integry.ems_model.entity._enum.FlagEvaso; @@ -42,6 +43,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -70,11 +72,11 @@ public class OrdiniWebImportService { private WooCommerceRestService restService; - private DtbOrdLogImport insertLog(String gestione, Date dataOrd, String serie, Integer numOrd, String errorMessage, String flagTipoLog, BigDecimal qtaTotale, Date dataImport, String flagTipoOrd) { + private DtbOrdLogImport insertLog(String gestione, Date dataOrd, String serie, Integer numOrd, String errorMessage, String flagTipoLog, BigDecimal qtaTotale, LocalDateTime dataImport, String flagTipoOrd) { DtbOrdLogImport dtbOrdLogImport = new DtbOrdLogImport() - .setDataImport(UtilityLocalDate.localDateTimeFromDate(dataImport)) + .setDataImport(dataImport) .setGestione(gestione) - .setDataOrd(UtilityLocalDate.localDateTimeFromDate(dataOrd)) + .setDataOrd(UtilityLocalDate.localDateFromDate(dataOrd)) .setSerie(serie) .setNumOrd(numOrd) .setFlagTipoOrd(flagTipoOrd) @@ -99,32 +101,32 @@ public class OrdiniWebImportService { * @return */ - private List checkOrder(Date dataOrd, Integer numOrd, String serOrd, String gestione, String codVlis, BigDecimal qtaTot, Date dataImport) throws Exception { + private List checkOrder(Date dataOrd, Integer numOrd, String serOrd, String gestione, String codVlis, BigDecimal qtaTot, LocalDateTime dataImport) throws Exception { String query = Query.format( - "WITH listino AS (SELECT *\n" + - " FROM dbo.getlistinovendita(%s, %s, NULL) l\n" + - " WHERE ISNULL(tipo_variazione, '') <> 'D'\n" + - " AND EXISTS (SELECT *\n" + - " FROM mtb_aart\n" + - " WHERE mtb_aart.cod_mart = l.cod_mart\n" + - " AND mtb_aart.flag_stato = 'A'))\n" + - "SELECT wdtb_ordr.cod_mart,\n" + - " wdtb_ordr.val_unt,\n" + - " listino.prz_vend,\n" + - " mtb_aart.descrizione_estesa as descrizione_estesa_art\n" + - "FROM wdtb_ordr\n" + - " INNER JOIN listino ON wdtb_ordr.cod_mart = listino.cod_mart\n" + - " INNER JOIN mtb_aart ON wdtb_ordr.cod_mart = mtb_aart.cod_mart\n" + - "WHERE listino.prz_vend <> wdtb_ordr.val_unt\n" + - " AND wdtb_ordr.data_ord = %s\n" + - " AND wdtb_ordr.num_ord = %s\n" + - " AND wdtb_ordr.serie = %s\n" + - " AND wdtb_ordr.gestione = %s", - dataOrd, codVlis, dataOrd, numOrd, serOrd, gestione); + "WITH listino AS (SELECT *\n" + + " FROM dbo.getlistinovendita(%s, %s, NULL) l\n" + + " WHERE ISNULL(tipo_variazione, '') <> 'D'\n" + + " AND EXISTS (SELECT *\n" + + " FROM mtb_aart\n" + + " WHERE mtb_aart.cod_mart = l.cod_mart\n" + + " AND mtb_aart.flag_stato = 'A'))\n" + + "SELECT wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.val_unt,\n" + + " listino.prz_vend,\n" + + " mtb_aart.descrizione_estesa as descrizione_estesa_art\n" + + "FROM wdtb_ordr\n" + + " INNER JOIN listino ON wdtb_ordr.cod_mart = listino.cod_mart\n" + + " INNER JOIN mtb_aart ON wdtb_ordr.cod_mart = mtb_aart.cod_mart\n" + + "WHERE listino.prz_vend <> wdtb_ordr.val_unt\n" + + " AND wdtb_ordr.data_ord = %s\n" + + " AND wdtb_ordr.num_ord = %s\n" + + " AND wdtb_ordr.serie = %s\n" + + " AND wdtb_ordr.gestione = %s", + dataOrd, codVlis, dataOrd, numOrd, serOrd, gestione); List> datiOrdine = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); - if (datiOrdine == null || datiOrdine.isEmpty()) { + if (datiOrdine == null || datiOrdine.isEmpty()) { return Collections.emptyList(); } else { return datiOrdine.stream() @@ -132,8 +134,8 @@ public class OrdiniWebImportService { x -> { String errMsg = x.get("cod_mart") + " " + UtilityString.streNull(x.get("descrizione_estesa_art").toString()) + - " prz. listino: " + String.valueOf((double) x.get("prz_vend")) + - " - prz. applicato: " + String.valueOf((double) x.get("val_unt")); + " prz. listino: " + (BigDecimal) x.get("prz_vend") + + " - prz. applicato: " + (BigDecimal) x.get("val_unt"); return insertLog(gestione, dataOrd, serOrd, numOrd, errMsg, "2", qtaTot, dataImport, "P"); }).collect(Collectors.toList()); } @@ -195,7 +197,8 @@ public class OrdiniWebImportService { "SELECT wdtb_ordt.*, " + " vtb_clie.cod_vlis as cod_vlis_clie, " + " vtb_dest.cod_vlis as cod_vlis_dest, " + - " vtb_clie.flag_td " + + " vtb_clie.flag_td, " + + " CAST(IIF(wdtb_ordt.tipo_anag = 'P' OR ( wdtb_new_cli_ord.data_ord IS not NULL AND wdtb_new_cli_ord.cod_anag_imported IS NULL), 1,0) as BIT) as new_clie " + "FROM wdtb_ordt LEFT OUTER JOIN wdtb_new_cli_ord ON wdtb_ordt.gestione = wdtb_new_cli_ord.gestione AND " + " wdtb_ordt.data_ord = wdtb_new_cli_ord.data_ord AND" + " wdtb_ordt.num_ord = wdtb_new_cli_ord.num_ord AND " + @@ -223,110 +226,116 @@ public class OrdiniWebImportService { List ordiniWeb = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), queryWebOrd, ImporOrdiniWebDTO.class); List dtbOrdLogImportList; - Date importDate = new Date(); + LocalDateTime importDate = UtilityLocalDate.getNowTime(); for (ImporOrdiniWebDTO ordine : ordiniWeb) { String gestione = ordine.getWdtbOrdt().getGestione(); Date dataOrd = ordine.getWdtbOrdt().getDataOrd(); Integer numOrd = ordine.getWdtbOrdt().getNumOrd(); String serOrd = ordine.getWdtbOrdt().getSerie(); - if (!UtilityString.isNullOrEmpty(flagSospeso)) - ordine.getWdtbOrdt().setFlagSospeso(flagSospeso); - if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodMdep())) - ordine.getWdtbOrdt().setCodMdep(codMdep); - - if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getListino())) - ordine.getWdtbOrdt().setListino(UtilityString.isNull(ordine.getCodVlisDest(), ordine.getCodVlisClie())); - - String codVlis = ordine.getWdtbOrdt().getListino(); - query = - Query.format( - "SELECT sum(wdtb_ordr.qta_ord) FROM wdtb_ordr WHERe gestione = %s and data_ord = %s and num_ord = %s and serie = %s", - gestione, dataOrd, numOrd, serOrd); - - BigDecimal qtaOrdTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); - dtbOrdLogImportList = new ArrayList<>(); - List ordiniList = new ArrayList<>(); - - // Inizializzazione entity ordine web da aggiornare - WdtbOrdt wdtbOrdt = new WdtbOrdt() - .setGestione(gestione) - .setDataOrd(dataOrd) - .setNumOrd(numOrd) - .setSerie(serOrd); - - // ACQUISIZIONE ELENCO FORNITORI TD DELL'ORDINE (SOLO SE IL CLIENTE E' IN TD) - // ALTRIMENTI IL FORNITORE VIENE IMPOSTATO A NULL - List codFornTDList = new ArrayList<>(); - if (ordine.getFlagTd().equalsIgnoreCase("S")) { - query = "SELECT DISTINCT mtb_aart_anag.cod_anag " + - " FROM wdtb_ordt inner JOIN wdtb_ordr on wdtb_ordr.gestione = wdtb_ordt.gestione AND " + - " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + - " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + - " wdtb_ordr.serie = wdtb_ordt.serie " + - " inner join mtb_aart_anag on mtb_aart_anag.cod_mart = wdtb_ordr.cod_mart " + - " WHERE wdtb_ordt.gestione = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getGestione()) + " AND " + - " wdtb_ordt.data_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getDataOrd()) + " AND " + - " wdtb_ordt.num_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getNumOrd()) + " AND " + - " wdtb_ordt.serie = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getSerie()); - codFornTDList = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + if (ordine.getNewClie()){ + String errore = String.format("Ordine %s %s %d %s non importato. Inserireil nuovo cliente.", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd), numOrd, serOrd); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errore, "2", BigDecimal.ZERO, importDate, "P")); } else { - codFornTDList.add(null); - } - for (String codFornTD : codFornTDList) { - List entitySave = saveDtbOrdt(ordine, codFornTD, setDecorrenza, calcDataCons, controllatoDa, importOrdLav, calcQtaDaListino, codAliqOmg, creaColloReso, - importDate, dtbOrdLogImportList); + if (!UtilityString.isNullOrEmpty(flagSospeso)) + ordine.getWdtbOrdt().setFlagSospeso(flagSospeso); + if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getCodMdep())) + ordine.getWdtbOrdt().setCodMdep(codMdep); - if (entitySave != null && !entitySave.isEmpty()) { - ordiniList.addAll(entitySave); - } - } - if (ordiniList != null && !ordiniList.isEmpty()) { - //Verifico se nel frattempo è stato importato da un altra procedura - query = "SELECT cast(IIF(flag_elaborato='S',1,0) as bit) " + - " FROM wdtb_ordt " + - " WHERE gestione = " + UtilityDB.valueToString(gestione) + - " AND data_ord = " + UtilityDB.valueToString(dataOrd) + - " AND num_ord = " + UtilityDB.valueToString(numOrd) + - " AND serie = " + UtilityDB.valueToString(serOrd); + if (UtilityString.isNullOrEmpty(ordine.getWdtbOrdt().getListino())) + ordine.getWdtbOrdt().setListino(UtilityString.isNull(ordine.getCodVlisDest(), ordine.getCodVlisClie())); - boolean isElaborato = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); - if (isElaborato) { - String errore = String.format("Ordine %s %s %d %s già importato", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd), numOrd, serOrd); - dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errore, "2", qtaOrdTot, importDate, "P")); + String codVlis = ordine.getWdtbOrdt().getListino(); + query = + Query.format( + "SELECT sum(wdtb_ordr.qta_ord) FROM wdtb_ordr WHERe gestione = %s and data_ord = %s and num_ord = %s and serie = %s", + gestione, dataOrd, numOrd, serOrd); + + BigDecimal qtaOrdTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + + + List ordiniList = new ArrayList<>(); + + // Inizializzazione entity ordine web da aggiornare + WdtbOrdt wdtbOrdt = new WdtbOrdt() + .setGestione(gestione) + .setDataOrd(dataOrd) + .setNumOrd(numOrd) + .setSerie(serOrd); + + // ACQUISIZIONE ELENCO FORNITORI TD DELL'ORDINE (SOLO SE IL CLIENTE E' IN TD) + // ALTRIMENTI IL FORNITORE VIENE IMPOSTATO A NULL + List codFornTDList = new ArrayList<>(); + if (ordine.getFlagTd().equalsIgnoreCase("S")) { + query = "SELECT DISTINCT mtb_aart_anag.cod_anag " + + " FROM wdtb_ordt inner JOIN wdtb_ordr on wdtb_ordr.gestione = wdtb_ordt.gestione AND " + + " wdtb_ordr.data_ord = wdtb_ordt.data_ord AND " + + " wdtb_ordr.num_ord = wdtb_ordt.num_ord AND " + + " wdtb_ordr.serie = wdtb_ordt.serie " + + " inner join mtb_aart_anag on mtb_aart_anag.cod_mart = wdtb_ordr.cod_mart " + + " WHERE wdtb_ordt.gestione = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getGestione()) + " AND " + + " wdtb_ordt.data_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getDataOrd()) + " AND " + + " wdtb_ordt.num_ord = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getNumOrd()) + " AND " + + " wdtb_ordt.serie = " + UtilityDB.valueToString(ordine.getWdtbOrdt().getSerie()); + codFornTDList = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); } else { - wdtbOrdt.setOperation(OperationType.UPDATE); - wdtbOrdt.setFlagElaborato("S"); + codFornTDList.add(null); + } + for (String codFornTD : codFornTDList) { + List entitySave = saveDtbOrdt(ordine, codFornTD, setDecorrenza, calcDataCons, controllatoDa, importOrdLav, calcQtaDaListino, codAliqOmg, creaColloReso, + importDate, dtbOrdLogImportList); - ordiniList.add(wdtbOrdt); - List entityRet = entityProcessor.processEntityList(ordiniList, multiDBTransactionManager, false); + if (entitySave != null && !entitySave.isEmpty()) { + ordiniList.addAll(entitySave); + } + } + if (ordiniList != null && !ordiniList.isEmpty()) { + //Verifico se nel frattempo è stato importato da un altra procedura + query = "SELECT cast(IIF(flag_elaborato='S',1,0) as bit) " + + " FROM wdtb_ordt " + + " WHERE gestione = " + UtilityDB.valueToString(gestione) + + " AND data_ord = " + UtilityDB.valueToString(dataOrd) + + " AND num_ord = " + UtilityDB.valueToString(numOrd) + + " AND serie = " + UtilityDB.valueToString(serOrd); - List error = entityRet.stream().filter(x -> x.getException() != null).collect(Collectors.toList()); - if (error != null && !error.isEmpty()) { - for (EntityBase e : error) { - String errorMessage = - String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, - new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd) + " " + e.getException().getMessage(); - dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errorMessage, "2", qtaOrdTot, importDate, "P")); - } - multiDBTransactionManager.rollbackAll(); + boolean isElaborato = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query); + if (isElaborato) { + String errore = String.format("Ordine %s %s %d %s già importato", gestione, new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd), numOrd, serOrd); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errore, "2", qtaOrdTot, importDate, "P")); } else { - wdtbOrdts.add(wdtbOrdt); - multiDBTransactionManager.commitAll(); + wdtbOrdt.setOperation(OperationType.UPDATE); + wdtbOrdt.setFlagElaborato("S"); - String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); - if (ApplicationName.WINGEST.toString().equals(applName)) { - dtbOrdLogImportList.addAll(checkOrder(dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate)); + ordiniList.add(wdtbOrdt); + List entityRet = entityProcessor.processEntityList(ordiniList, multiDBTransactionManager, true); + + List error = entityRet.stream().filter(x -> x.getException() != null).collect(Collectors.toList()); + if (error != null && !error.isEmpty()) { + for (EntityBase e : error) { + String errorMessage = + String.format("Errore durante l'importazione dell'ordine [Gestione:%s, Data: %s, Numero: %d]", gestione, + new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(dataOrd), numOrd) + " " + e.getException().getMessage(); + dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, errorMessage, "2", qtaOrdTot, importDate, "P")); + } + multiDBTransactionManager.rollbackAll(); + } else { + wdtbOrdts.add(wdtbOrdt); + multiDBTransactionManager.commitAll(); + + String applName = CommonRules.getApplicationName(multiDBTransactionManager.getPrimaryConnection()); + if (ApplicationName.WINGEST.toString().equals(applName)) { + //dtbOrdLogImportList.addAll(checkOrder(dataOrd, numOrd, serOrd, gestione, codVlis, qtaOrdTot, importDate)); + } + //dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P")); } - //dtbOrdLogImportList.add(insertLog(gestione, dataOrd, serOrd, numOrd, "Ordine importato", "4", qtaOrdTot, importDate, "P")); } } } - if ( dtbOrdLogImportList != null && !dtbOrdLogImportList.isEmpty()) { + if (dtbOrdLogImportList != null && !dtbOrdLogImportList.isEmpty()) { AtomicInteger i = new AtomicInteger(); - dtbOrdLogImportList.stream().forEach(x->x.setIdRiga(i.getAndIncrement())); + dtbOrdLogImportList.stream().forEach(x -> x.setIdRiga(i.getAndIncrement())); UtilityEntity.throwEntitiesException(entityProcessor.processEntityList(dtbOrdLogImportList, multiDBTransactionManager, false)); multiDBTransactionManager.commitAll(); } @@ -339,7 +348,7 @@ public class OrdiniWebImportService { private List saveDtbOrdt(ImporOrdiniWebDTO ordine, String codFornTD, boolean setDecorrenza, boolean calcDataCons, String controllatoDa, boolean importOrdLav, boolean calcQtaDaListino, String codAliqOmg, boolean creaColloReso, - Date importdate, List dtbOrdLogImportList) throws Exception { + LocalDateTime importdate, List dtbOrdLogImportList) throws Exception { List orderEntities = new ArrayList<>(); String gestione = ordine.getWdtbOrdt().getGestione(); @@ -459,9 +468,9 @@ public class OrdiniWebImportService { if (ordine.getFlagTd().equalsIgnoreCase("N")) { generateOrdTrasfMerce = righeOrd - .stream() - .filter(x->x.getWdtbOrdr().getCodMdep() != null) - .anyMatch(x -> !x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); + .stream() + .filter(x -> x.getWdtbOrdr().getCodMdep() != null) + .anyMatch(x -> !x.getWdtbOrdr().getCodMdep().equalsIgnoreCase(ordine.getWdtbOrdt().getCodMdep())); } } @@ -484,6 +493,7 @@ public class OrdiniWebImportService { .setGruppoCons(riga.getWdtbOrdr().getGruppoCons()) .setCodOann(riga.getWdtbOrdr().getCodOann()) .setPartitaMag(riga.getWdtbOrdr().getPartitaMag()) + .setValUnt(riga.getWdtbOrdr().getValUnt()) .setValUntIva(riga.getWdtbOrdr().getValUntIva()) .setCodAlis(riga.getWdtbOrdr().getCodAlis()) .setCodArtFor(riga.getWdtbOrdr().getCodArtFor()); @@ -535,21 +545,21 @@ public class OrdiniWebImportService { List> spese = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); for (HashMap spesa : spese) { - DtbOrds dtbOrds = new DtbOrds(); + DtbOrds dtbOrds = new DtbOrds() + .setIdRiga((Integer) spesa.get("id_riga")) + .setCodSpes((String) spesa.get("cod_spes")) + .setDescrizione((String) spesa.get("descrizione")) + .setImporto((BigDecimal) spesa.get("importo")) + .setCodAliq((String) spesa.get("cod_aliq")) + .setImportoIva((BigDecimal) spesa.get("importo_iva")); dtbOrds.setOperation(OperationType.INSERT); - dtbOrds.setIdRiga((Integer) spesa.get("id_riga")); - dtbOrds.setCodSpes((String) spesa.get("cod_spes")); - dtbOrds.setDescrizione((String) spesa.get("descrizione")); - dtbOrds.setImporto((BigDecimal) spesa.get("importo")); - dtbOrds.setCodAliq((String) spesa.get("cod_aliq")); - dtbOrds.setImportoIva((BigDecimal) spesa.get("importo_iva")); dtbOrdt.getDtbOrds().add(dtbOrds); } orderEntities.add(dtbOrdt); // Creazione collo di reso - if (creaColloReso && righeOrd.stream().anyMatch(x->x.getWdtbOrdr().getQtaReso() != null && x.getWdtbOrdr().getQtaReso().compareTo(BigDecimal.ZERO) > 0)) { + if (creaColloReso && righeOrd.stream().anyMatch(x -> x.getWdtbOrdr().getQtaReso() != null && x.getWdtbOrdr().getQtaReso().compareTo(BigDecimal.ZERO) > 0)) { //Ci serve creare il numero ordine per assegnarlo nel collo numOrd = OrderRules.completeNumOrd(multiDBTransactionManager.getPrimaryConnection(), "V", dataOrd, null); dtbOrdt.setNumOrd(numOrd); @@ -557,6 +567,7 @@ public class OrdiniWebImportService { dtbOrdt.getDataOrd(), dtbOrdt.getNumOrd(), codFornTD, ordine.getWdtbOrdt().getCodMdep()); orderEntities.add(mtbColt); } + // Importazione Ordine di lavoro per articoli con distinta senza righe if (importOrdLav) { List listordLav = importOrdLav(gestione, dataOrd, numOrd, serie, ordine.getWdtbOrdt().getCodMdep()); @@ -576,243 +587,244 @@ public class OrdiniWebImportService { } private void getDatiListino(Date dataOrd, String codVlis, String codMart, BigDecimal qtaOrd, DtbOrdr dtbOrdr) throws Exception { - String query = "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + - " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + - " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + - " mtb_aart.unt_mis2, " + - " mtb_aart.unt_mis3, " + - " listVend.posizione " + - " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + - UtilityDB.valueToString(codVlis) + ", " + - UtilityDB.valueToString(codMart) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + - " listVend.tipo_variazione <> 'D' " + - " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(codMart); + String query = + "SELECT ISNULL(listVend.qta_cnf, mtb_aart.qta_cnf) as qta_cnf, " + + " ISNULL(listVend.colli_strato, mtb_aart.colli_strato) as colli_strato, " + + " ISNULL(listVend.colli_pedana, mtb_aart.colli_pedana) as colli_pedana, " + + " mtb_aart.unt_mis2, " + + " mtb_aart.unt_mis3, " + + " listVend.posizione " + + " FROM mtb_aart LEFT OUTER JOIN getListinoVendita(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", " + + UtilityDB.valueToString(codVlis) + ", " + + UtilityDB.valueToString(codMart) + ")listVend ON mtb_aart.cod_mart = listVend.cod_mart AND " + + " listVend.tipo_variazione <> 'D' " + + " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(codMart); - PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); - ResultSet res = info.executeQuery(); - BigDecimal qtaCnf = null, qtaOrd2 = null, qtaOrd3 = null; - String untMis2 = "", untMis3 = "", posizioneListino = ""; - while (res.next()) { - qtaCnf = res.getBigDecimal(1); - BigDecimal colliStrato = res.getBigDecimal(2); - BigDecimal colliPedana = res.getBigDecimal(3); - untMis2 = res.getString(4); - untMis3 = res.getString(5); - posizioneListino = res.getString(6); + HashMap datiLisv = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); + + if (UtilityHashMap.isPresent(datiLisv)) { + BigDecimal qtaCnf = (BigDecimal) datiLisv.get("qta_cnf"); + BigDecimal colliStrato = (BigDecimal) datiLisv.get("colli_strato"); + BigDecimal colliPedana = (BigDecimal) datiLisv.get("colli_pedana"); + String untMis2 = (String) datiLisv.get("unt_mis2"); + String untMis3 = (String) datiLisv.get("unt_mis3"); + String posizioneListino = (String) datiLisv.get("posizione"); BigDecimal rapConv2 = colliStrato.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); BigDecimal rapConv3 = colliPedana.multiply(qtaCnf).setScale(5, RoundingMode.HALF_UP); - qtaOrd2 = qtaOrd.divide(rapConv2, 2, RoundingMode.HALF_UP); - qtaOrd3 = qtaOrd.divide(rapConv3, 2, RoundingMode.HALF_UP); - } - res.close(); - info.close(); + BigDecimal qtaOrd2 = qtaOrd.divide(rapConv2, 2, RoundingMode.HALF_UP); + BigDecimal qtaOrd3 = qtaOrd.divide(rapConv3, 2, RoundingMode.HALF_UP); - dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola - dtbOrdr.setQtaCnf(qtaCnf); - dtbOrdr.setUntOrd2(untMis2); - dtbOrdr.setQtaOrd2(qtaOrd2); - dtbOrdr.setUntOrd3(untMis3); - dtbOrdr.setQtaOrd3(qtaOrd3); + dtbOrdr.setNumCnf(null); //viene annullato lo calcolerà la regola + dtbOrdr.setQtaCnf(qtaCnf); + dtbOrdr.setUntOrd2(untMis2); + dtbOrdr.setQtaOrd2(qtaOrd2); + dtbOrdr.setUntOrd3(untMis3); + dtbOrdr.setQtaOrd3(qtaOrd3); - // ACQUISIZIONE DATI FORNITORE PREFERENZIALE - String codAlis = ""; - String codArtForn = ""; - query = "SELECT ISNULL(listiniAcq.cod_alis, ''), " + - " ISNULL(listiniAcq.cod_art_for, ''), " + - " ISNULL(listiniAcq.partita_mag, '') " + - " from ( SELECT listino.* " + - " FROM atb_forn, " + - " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + - " (SELECT value_string as cod_atip " + - " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + - " WHERE atb_forn.cod_alis = listino.cod_alis AND " + - " atb_forn.cod_atip = stp.cod_atip AND " + - " cod_mart IS NOT NULL AND " + - " tipo_variazione <> 'D' " + - " UNION " + - " SELECT listino.* " + - " FROM atb_forn, vtb_dest, " + - " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + - " (SELECT value_string as cod_atip " + - " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + - " WHERE atb_forn.cod_atip = stp.cod_atip AND " + - " atb_forn.cod_anag = vtb_dest.cod_anag AND " + - " vtb_dest.cod_alis = listino.cod_alis AND " + - " cod_mart IS NOT NULL AND " + - " tipo_variazione <> 'D')listiniAcq " + - " WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); - info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); - res = info.executeQuery(); - String partitaMagAlis = ""; - while (res.next()) { - codAlis = res.getString(1); - codArtForn = res.getString(2); - partitaMagAlis = res.getString(3); - } - res.close(); - info.close(); - dtbOrdr.setCodAlis(codAlis) - .setCodArtFor(codArtForn); - if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { - dtbOrdr.setPartitaMag(partitaMagAlis); + // ACQUISIZIONE DATI FORNITORE PREFERENZIALE + + query = "SELECT ISNULL(listiniAcq.cod_alis, '') as cod_alis, " + + " ISNULL(listiniAcq.cod_art_for, '') as cod_art_for, " + + " ISNULL(listiniAcq.partita_mag, '') as partita_mag " + + " from ( SELECT listino.* " + + " FROM atb_forn, " + + " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + + " (SELECT value_string as cod_atip " + + " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + + " WHERE atb_forn.cod_alis = listino.cod_alis AND " + + " atb_forn.cod_atip = stp.cod_atip AND " + + " cod_mart IS NOT NULL AND " + + " tipo_variazione <> 'D' " + + " UNION " + + " SELECT listino.* " + + " FROM atb_forn, vtb_dest, " + + " dbo.Getlistinoacquisto(" + UtilityDB.valueDateToString(dataOrd, CommonConstants.DATE_FORMAT_YMD) + ", NULL, NULL, NULL, NULL, NULL) listino, " + + " (SELECT value_string as cod_atip " + + " FROM dbo.parseStringIntoArray(dbo.getGestSetup('PVM','PRICELIST_UPDATE', 'FILTRO_COD_ATIP' ), '|') ) stp " + + " WHERE atb_forn.cod_atip = stp.cod_atip AND " + + " atb_forn.cod_anag = vtb_dest.cod_anag AND " + + " vtb_dest.cod_alis = listino.cod_alis AND " + + " cod_mart IS NOT NULL AND " + + " tipo_variazione <> 'D')listiniAcq " + + " WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " and left(descrizione, 15) = " + UtilityDB.valueToString(posizioneListino); + + HashMap datiLisa = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); + if (UtilityHashMap.isPresent(datiLisa)) { + dtbOrdr.setCodAlis(UtilityHashMap.getValueIfExists(datiLisa, "cod_alis")) + .setCodArtFor(UtilityHashMap.getValueIfExists(datiLisa, "cod_art_for")); + String partitaMagAlis = UtilityHashMap.getValueIfExists(datiLisa, "partita_mag"); + if (!UtilityString.isNullOrEmpty(partitaMagAlis)) { + dtbOrdr.setPartitaMag(partitaMagAlis); + } + } + } else { + logger.error("Dati Listino di vendita non trovati per articolo " + codMart + " listino " + codVlis + " data " + new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd)); } } - private List getRowBattiscopa(ImportOrdiniWebRowDTO riga, String gestione, Date dataOrd, Integer numOrd, String serie) throws SQLException, PrimaryDatabaseNotPresentException, IOException { + private List getRowBattiscopa(ImportOrdiniWebRowDTO riga, String gestione, Date dataOrd, Integer numOrd, String serie) throws Exception { List righeBattiscopa = new ArrayList<>(); - String query = "SELECT wdtb_ordt.cod_jcom as cod_jcom," + - " wdtb_ordr.cod_mart as cod_mart," + - " wdtb_ordr.unt_ord as unt_ord," + - " wdtb_ordr.qta_ord as qta_ord," + - " ((a.val_unt*wdtb_ordr.qta_ord2)/wdtb_ordr.qta_ord + wdtb_ordr.val_unt) as val_unt, " + - " wdtb_ordr.cod_aliq as cod_aliq, " + - " wdtb_ordr.cod_asso as cod_asso, " + - " wdtb_ordr.gruppo_cons as gruppo_cons, " + - " wdtb_ordr.sconto5 as sconto5, " + - " wdtb_ordr.sconto6 as sconto6, " + - " wdtb_ordr.sconto7 as sconto7, " + - " wdtb_ordr.sconto8 as sconto8, " + - " wdtb_ordr.note as note, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.descrizione_estesa +' '+ a.descrizione +' ('+wdtb_ordr.unt_ord2 + ' '+ Convert(varchar(13),Convert(decimal(10,2),wdtb_ordr.qta_ord2)) +')' as descrizione_estesa, " + - " wdtb_ordr.data_cons as data_cons, " + - " wdtb_ordr.cod_alis as cod_alis, " + - " wdtb_ordr.cod_art_for as cod_art_for, " + - " wdtb_ordr.unt_ord2 as unt_ord2," + - " Wdtb_ordr.qta_ord2 as qta_ord2," + - " a.cod_mart as cod_mart_mate," + - " a.unt_ord as unt_ord_mate, " + - " a.qta_ord - wdtb_ordr.qta_ord2 as residuo, " + - " a.cod_aliq as cod_aliq_mate, " + - " a.cod_asso as cod_asso_mate," + - " a.gruppo_cons as gruppo_cons_mate, " + - " a.sconto5 as sconto5_mate," + - " a.sconto6 as sconto6_mate, " + - " a.sconto7 as sconto7_mate," + - " a.sconto8 as sconto8_mate," + - " a.note as note_mate," + - " a.descrizione_estesa as descr_estesa_mate," + - " a.data_cons as data_cons_mate," + - " a.cod_alis as cod_alis_mate," + - " a.cod_art_for as cod_art_for_mate, " + - " a.val_unt as val_unt_mate, " + - " wdtb_ordr.qta_cnf as qta_cnf, " + - " wdtb_ordr.num_cnf as num_cnf, " + - " a.qta_cnf as qta_cnf_mate " + - " FROM wdtb_ordt, wdtb_ordr , jtb_cicl , " + - " (SELECT wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordr.val_unt, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord," + - " cod_aliq," + - " cod_asso," + - " gruppo_cons," + - " sconto5," + - " sconto6, " + - " sconto7, " + - " sconto8," + - " wdtb_ordr.note," + - " wdtb_ordr.descrizione_estesa," + - " data_cons," + - " cod_alis," + - " cod_art_for, " + - " wdtb_ordr.descrizione as descrizione, " + - " wdtb_ordr.cod_mart, " + - " wdtb_ordr.qta_cnf" + - " FROM wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + - " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.flag_elaborato ='N' AND " + - " wdtb_ordr.id_art <> 0 AND " + - " jtb_cicl.cod_prod is null ) a " + - " WHERE a.data_ord = wdtb_ordr.data_ord AND " + - " a.num_ord = wdtb_ordr.num_ord AND " + - " a.gestione = wdtb_ordr.gestione AND " + - " a.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " a.id_art = wdtb_ordr.id_art AND " + - " wdtb_ordr.cod_mart = jtb_cicl.cod_prod AND " + - " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + - " wdtb_ordr.num_ord = " + UtilityDB.valueToString(numOrd) + " AND " + - " wdtb_ordr.serie = " + UtilityDB.valueToString(serie) + " AND " + - " wdtb_ordr.id_art = " + UtilityDB.valueToString(riga.getWdtbOrdr().getIdArt()) + " AND " + - " wdtb_ordr.cod_mart = " + UtilityDB.valueToString(riga.getWdtbOrdr().getCodMart()); + String query = + Query.format( + "SELECT wdtb_ordt.cod_jcom AS cod_jcom,\n" + + " wdtb_ordr.cod_mart AS cod_mart,\n" + + " wdtb_ordr.unt_ord AS unt_ord,\n" + + " wdtb_ordr.qta_ord AS qta_ord,\n" + + " ((a.val_unt * wdtb_ordr.qta_ord2) / wdtb_ordr.qta_ord + wdtb_ordr.val_unt) AS val_unt,\n" + + " wdtb_ordr.cod_aliq AS cod_aliq,\n" + + " wdtb_ordr.cod_asso AS cod_asso,\n" + + " wdtb_ordr.gruppo_cons AS gruppo_cons,\n" + + " wdtb_ordr.sconto5 AS sconto5,\n" + + " wdtb_ordr.sconto6 AS sconto6,\n" + + " wdtb_ordr.sconto7 AS sconto7,\n" + + " wdtb_ordr.sconto8 AS sconto8,\n" + + " wdtb_ordr.note AS note,\n" + + " wdtb_ordr.descrizione AS descrizione,\n" + + " wdtb_ordr.descrizione_estesa + ' ' + a.descrizione + ' (' + wdtb_ordr.unt_ord2 + ' ' +\n" + + " CONVERT(VARCHAR(13), CONVERT(DECIMAL(10, 2), wdtb_ordr.qta_ord2)) + ')' AS descrizione_estesa,\n" + + " wdtb_ordr.data_cons AS data_cons,\n" + + " wdtb_ordr.cod_alis AS cod_alis,\n" + + " wdtb_ordr.cod_art_for AS cod_art_for,\n" + + " wdtb_ordr.unt_ord2 AS unt_ord2,\n" + + " wdtb_ordr.qta_ord2 AS qta_ord2,\n" + + " a.cod_mart AS cod_mart_mate,\n" + + " a.unt_ord AS unt_ord_mate,\n" + + " a.qta_ord - wdtb_ordr.qta_ord2 AS residuo,\n" + + " a.cod_aliq AS cod_aliq_mate,\n" + + " a.cod_asso AS cod_asso_mate,\n" + + " a.gruppo_cons AS gruppo_cons_mate,\n" + + " a.sconto5 AS sconto5_mate,\n" + + " a.sconto6 AS sconto6_mate,\n" + + " a.sconto7 AS sconto7_mate,\n" + + " a.sconto8 AS sconto8_mate,\n" + + " a.note AS note_mate,\n" + + " a.descrizione_estesa AS descr_estesa_mate,\n" + + " a.data_cons AS data_cons_mate,\n" + + " a.cod_alis AS cod_alis_mate,\n" + + " a.cod_art_for AS cod_art_for_mate,\n" + + " a.val_unt AS val_unt_mate,\n" + + " wdtb_ordr.qta_cnf AS qta_cnf,\n" + + " wdtb_ordr.num_cnf AS num_cnf,\n" + + " a.qta_cnf AS qta_cnf_mate\n" + + "FROM wdtb_ordt\n" + + " INNER JOIN wdtb_ordr ON wdtb_ordt.data_ord = wdtb_ordr.data_ord AND\n" + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND\n" + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND\n" + + " wdtb_ordt.serie = wdtb_ordr.serie\n" + + " INNER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod\n" + + " INNER JOIN\n" + + " (SELECT wdtb_ordr.gestione,\n" + + " wdtb_ordr.data_ord,\n" + + " wdtb_ordr.num_ord,\n" + + " wdtb_ordr.serie,\n" + + " wdtb_ordr.id_art,\n" + + " wdtb_ordr.val_unt,\n" + + " wdtb_ordr.unt_ord,\n" + + " wdtb_ordr.qta_ord,\n" + + " cod_aliq,\n" + + " cod_asso,\n" + + " gruppo_cons,\n" + + " sconto5,\n" + + " sconto6,\n" + + " sconto7,\n" + + " sconto8,\n" + + " wdtb_ordr.note,\n" + + " wdtb_ordr.descrizione_estesa,\n" + + " data_cons,\n" + + " cod_alis,\n" + + " cod_art_for,\n" + + " wdtb_ordr.descrizione AS descrizione,\n" + + " wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.qta_cnf\n" + + " FROM wdtb_ordt\n" + + " INNER JOIN wdtb_ordr ON\n" + + " wdtb_ordt.gestione = wdtb_ordr.gestione\n" + + " AND wdtb_ordt.data_ord = wdtb_ordr.data_ord\n" + + " AND wdtb_ordt.num_ord = wdtb_ordr.num_ord\n" + + " AND wdtb_ordt.serie = wdtb_ordr.serie\n" + + " WHERE wdtb_ordt.flag_elaborato = 'N'\n" + + " AND wdtb_ordr.id_art <> 0\n" + + " AND NOT EXISTS (SELECT * FROM jtb_cicl WHERE wdtb_ordr.cod_mart = jtb_cicl.cod_prod)) a\n" + + " ON a.data_ord = wdtb_ordr.data_ord AND\n" + + " a.num_ord = wdtb_ordr.num_ord AND\n" + + " a.gestione = wdtb_ordr.gestione AND\n" + + " a.serie = wdtb_ordr.serie AND\n" + + " a.id_art = wdtb_ordr.id_art\n" + + "WHERE wdtb_ordr.gestione = %s\n" + + " AND wdtb_ordr.data_ord = %s\n" + + " AND wdtb_ordr.num_ord = %s\n" + + " AND wdtb_ordr.serie = %s\n" + + " AND wdtb_ordr.id_art = %s\n" + + " AND wdtb_ordr.cod_mart = %S\n", + gestione, dataOrd, numOrd, serie, riga.getWdtbOrdr().getIdArt(), riga.getWdtbOrdr().getCodMart()); - PreparedStatement info = multiDBTransactionManager.getPrimaryConnection().prepareStatement(query); - ResultSet res = info.executeQuery(); - while (res.next()) { - DtbOrdr dtbOrdr = new DtbOrdr() - .setCodMart(UtilityString.streNull(res.getString("cod_mart"))) - .setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))) - .setUntOrd(UtilityString.streNull(res.getString("unt_ord"))) - .setQtaOrd(res.getBigDecimal("qta_ord")) - .setUntOrd2(UtilityString.streNull(res.getString("unt_ord2"))) - .setQtaOrd2(res.getBigDecimal("qta_ord2")) - .setCodAliq(UtilityString.streNull(res.getString("cod_aliq"))) - .setNote(UtilityString.streNull(res.getString("note"))) - .setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons"))) - .setValUnt(res.getBigDecimal("val_unt")) - .setDescrizione(UtilityString.streNull(res.getString("descrizione"))) - .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descrizione_estesa"), 255))) - .setSconto5(res.getBigDecimal("sconto5")) - .setSconto6(res.getBigDecimal("sconto6")) - .setSconto7(res.getBigDecimal("sconto7")) - .setSconto8(res.getBigDecimal("sconto8")) - .setIdArt(riga.getWdtbOrdr().getIdArt()) - .setCodAlis(UtilityString.streNull(res.getString("cod_alis"))) - .setCodArtFor(UtilityString.streNull(res.getString("cod_art_for"))) - .setQtaCnf(res.getBigDecimal("qta_cnf")) - .setNumCnf(res.getBigDecimal("num_cnf")); - if (res.getDate("data_cons") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons")); - } + HashMap rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query); - righeBattiscopa.add(dtbOrdr); + if (!UtilityHashMap.isPresent(rigaOrd)) return new ArrayList<>(); - if (res.getBigDecimal("residuo").compareTo(BigDecimal.ZERO) > 0 && UtilityString.streNull(res.getString("unt_ord2")).compareTo(UtilityString.streNull(res.getString("unt_ord_mate"))) == 0) { - dtbOrdr = new DtbOrdr() - .setCodMart(UtilityString.streNull(res.getString("cod_mart_mate"))) - .setCodJcom(UtilityString.streNull(res.getString("cod_jcom"))) - .setUntOrd(UtilityString.streNull(res.getString("unt_ord_mate"))) - .setQtaOrd(res.getBigDecimal("residuo")) - .setQtaCnf(res.getBigDecimal("qta_cnf_mate")) - .setCodAliq(UtilityString.streNull(res.getString("cod_aliq_mate"))) - .setNote(UtilityString.streNull(res.getString("note_mate"))) - .setGruppoCons(UtilityString.streNull(res.getString("gruppo_cons_mate"))) - .setValUnt(res.getBigDecimal("val_unt_mate")) - .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(res.getString("descr_estesa_mate"), 255))) - .setSconto5(res.getBigDecimal("sconto5_mate")) - .setSconto6(res.getBigDecimal("sconto6_mate")) - .setSconto7(res.getBigDecimal("sconto7_mate")) - .setSconto8(res.getBigDecimal("sconto8_mate")) - .setCodAlis(UtilityString.streNull(res.getString("cod_alis_mate"))) - .setCodArtFor(UtilityString.streNull(res.getString("cod_art_for_mate"))); + String untOrd2 = UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("unt_ord2"))); + DtbOrdr dtbOrdr = new DtbOrdr() + .setCodMart(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, "cod_mart"))) + .setCodJcom(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_jcom")))) + .setUntOrd(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("unt_ord")))) + .setQtaOrd(UtilityHashMap.getValueIfExists(rigaOrd, "qta_ord")) + .setUntOrd2(untOrd2) + .setQtaOrd2(UtilityHashMap.getValueIfExists(rigaOrd, "qta_ord2")) + .setCodAliq(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_aliq")))) + .setNote(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("note")))) + .setGruppoCons(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("gruppo_cons")))) + .setValUnt(UtilityHashMap.getValueIfExists(rigaOrd, "val_unt")) + .setDescrizione(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("descrizione")))) + .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(UtilityHashMap.getValueIfExists(rigaOrd, ("descrizione_estesa")), 255))) + .setSconto5(UtilityHashMap.getValueIfExists(rigaOrd, "sconto5")) + .setSconto6(UtilityHashMap.getValueIfExists(rigaOrd, "sconto6")) + .setSconto7(UtilityHashMap.getValueIfExists(rigaOrd, "sconto7")) + .setSconto8(UtilityHashMap.getValueIfExists(rigaOrd, "sconto8")) + .setIdArt(riga.getWdtbOrdr().getIdArt()) + .setCodAlis(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_alis")))) + .setCodArtFor(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_art_for")))) + .setQtaCnf(UtilityHashMap.getValueIfExists(rigaOrd, "qta_cnf")) + .setNumCnf(UtilityHashMap.getValueIfExists(rigaOrd, "num_cnf")); - if (res.getDate("data_cons_mate") != null) { - dtbOrdr.setDataCons(res.getDate("data_cons_mate")); - } - righeBattiscopa.add(dtbOrdr); - } + Date dataCons = (Date) rigaOrd.get("data_cons"); + if (dataCons != null) { + dtbOrdr.setDataCons(dataCons); + } + righeBattiscopa.add(dtbOrdr); + + BigDecimal residuo = UtilityHashMap.getValueIfExists(rigaOrd, "residuo"); + String untOrdMate = UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("unt_ord_mate"))); + if (UtilityBigDecimal.greaterThan(residuo, BigDecimal.ZERO) && untOrd2.equalsIgnoreCase(untOrdMate)) { + dtbOrdr = new DtbOrdr() + .setCodMart(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_mart_mate")))) + .setCodJcom(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_jcom")))) + .setUntOrd(untOrdMate) + .setQtaOrd(residuo) + .setQtaCnf(UtilityHashMap.getValueIfExists(rigaOrd, "qta_cnf_mate")) + .setCodAliq(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_aliq_mate")))) + .setNote(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("note_mate")))) + .setGruppoCons(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("gruppo_cons_mate")))) + .setValUnt(UtilityHashMap.getValueIfExists(rigaOrd, "val_unt_mate")) + .setDescrizioneEstesa(UtilityString.streNull(UtilityString.left(UtilityHashMap.getValueIfExists(rigaOrd, ("descr_estesa_mate")), 255))) + .setSconto5(UtilityHashMap.getValueIfExists(rigaOrd, "sconto5_mate")) + .setSconto6(UtilityHashMap.getValueIfExists(rigaOrd, "sconto6_mate")) + .setSconto7(UtilityHashMap.getValueIfExists(rigaOrd, "sconto7_mate")) + .setSconto8(UtilityHashMap.getValueIfExists(rigaOrd, "sconto8_mate")) + .setCodAlis(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_alis_mate")))) + .setCodArtFor(UtilityString.streNull(UtilityHashMap.getValueIfExists(rigaOrd, ("cod_art_for_mate")))); + + dataCons = (Date) rigaOrd.get("data_cons_mate"); + if (dataCons != null) dtbOrdr.setDataCons(dataCons); + righeBattiscopa.add(dtbOrdr); } - res.close(); - info.close(); return righeBattiscopa; } private DtbOrdr getRowOrd(WdtbOrdr riga, BigDecimal qtaOrd, boolean isOmaggio, boolean sostituzione, String codAliqOmg) { + BigDecimal cento = new BigDecimal(100); DtbOrdr dtbOrdr = new DtbOrdr(); dtbOrdr.setCodMart(riga.getCodMart()); dtbOrdr.setDescrizione(riga.getDescrizione()); @@ -826,8 +838,8 @@ public class OrdiniWebImportService { dtbOrdr.setQtaOrd(qtaOrd); BigDecimal sconto5 = riga.getSconto5(); if (sostituzione) { - sconto5 = new BigDecimal(100); - } else if (codAliqOmg != null) { + sconto5 = cento; + } else if (UtilityBigDecimal.equalsTo(sconto5, cento) && codAliqOmg != null) { dtbOrdr.setCodAliq(codAliqOmg); } dtbOrdr.setSconto5(sconto5); @@ -885,7 +897,8 @@ public class OrdiniWebImportService { * @return */ - private List existOrderDef(String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, Date dataImport, List dtbOrdLogImportList) throws Exception { + private List existOrderDef(String gestione, Date dataOrdProvv, String serOrd, Integer numOrdProvv, String codFornTD, LocalDateTime dataImport, + List dtbOrdLogImportList) throws Exception { List ordini = new ArrayList<>(); @@ -1012,7 +1025,7 @@ public class OrdiniWebImportService { * @throws Exception */ - private List importOrdineTrasfMerce(String gestione, Date dataOrd, String serie, Integer numOrd, String codMdep, Date dataImport, + private List importOrdineTrasfMerce(String gestione, Date dataOrd, String serie, Integer numOrd, String codMdep, LocalDateTime dataImport, List dtbOrdLogImportList) throws Exception { // ACQUISIZIONE ELENCO RIGHE ORDINE CLIENTE TD @@ -1181,160 +1194,116 @@ public class OrdiniWebImportService { } private List importOrdLav(String gestione, Date dataOrd, int numOrd, String serOrd, String codMdep) throws Exception { - List arrayOrd = new ArrayList<>(); - - - DtbOrdt ordA = new DtbOrdt(); - DtbOrdt ordL = new DtbOrdt(); - - DtbOrdr ordR = new DtbOrdr(); - DtbOrds ordS = new DtbOrds(); - - - String query = " SELECT wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.gestione, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordr.cod_mart, " + - " CASE WHEN jtb_cicl.cod_prod IS NULL THEN 'S' ELSE 'N' END as 'cod_mate', " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord, " + - " min(isnull(atb_forn.cod_anag, vtb_dest.cod_anag)) as cod_anag, " + - " lisa.prz_acq_netto, " + - " min(isnull(atb_forn.cod_alis, vtb_dest.cod_alis)), " + - " jtb_dist_clav_dir.cod_jcos_dir," + - " jtb_dist_clav_dir.val_unt, " + - " jtb_dist_clav_dir.unt_mis as 'unt_mis_spes'," + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordr.unt_ord2, " + - " wdtb_ordr.qta_ord2," + - " wdtb_ordt.rif_ord, " + - " wdtb_ordr.qta_cnf " + - " from wdtb_ordt, wdtb_ordr LEFT OUTER JOIN jtb_cicl ON wdtb_ordr.cod_mart = jtb_cicl.cod_prod " + - " LEFT OUTER JOIN jtb_dist_mate ON jtb_cicl.cod_prod = jtb_dist_mate.cod_prod AND " + - " jtb_dist_mate.cod_mart is null" + - " LEFT OUTER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod AND " + - " jtb_dist_clav_dir.flag_fase_pref = 'S' " + - " LEFT OUTER JOIN dbo.getListinoAcquisto(" + UtilityDB.valueToString(dataOrd) + ",null,null, null,'N',null ) lisa ON lisa.cod_mart = wdtb_ordr.cod_mart AND " + - " lisa.flag_forn_pref = 'S' " + - " LEFT OUTER JOIN atb_forn ON lisa.cod_alis = atb_forn.cod_alis" + - " LEFT OUTER JOIN vtb_dest ON lisa.cod_alis = vtb_dest.cod_alis, " + - " (SELECT wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art " + - " FROM wdtb_ordt, wdtb_ordr" + - " WHERE wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.flag_elaborato ='N' AND " + - " wdtb_ordr.id_art <> 0 " + - " GROUP BY wdtb_ordr.gestione, " + - " wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art " + - " HAVING count(*) > 1) a " + - " WHERE a.data_ord = wdtb_ordr.data_ord AND " + - " a.num_ord = wdtb_ordr.num_ord AND " + - " a.gestione = wdtb_ordr.gestione AND " + - " a.serie = wdtb_ordr.serie AND " + - " wdtb_ordt.data_ord = wdtb_ordr.data_ord AND " + - " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND " + - " wdtb_ordt.gestione = wdtb_ordr.gestione AND " + - " wdtb_ordt.serie = wdtb_ordr.serie AND " + - " a.id_art = wdtb_ordr.id_art AND " + - " lisa.cod_mart = wdtb_ordr.cod_mart AND " + - " lisa.cod_alis = isnull(atb_forn.cod_alis, vtb_dest.cod_alis) AND " + - " wdtb_ordr.gestione = " + UtilityDB.valueToString(gestione) + " AND " + - " wdtb_ordr.data_ord = " + UtilityDB.valueToString(dataOrd) + " AND " + - " wdtb_ordr.num_ord = " + numOrd + " AND " + - " wdtb_ordr.serie = " + UtilityDB.valueToString(serOrd) + - " GROUP BY wdtb_ordr.data_ord, " + - " wdtb_ordr.num_ord, " + - " wdtb_ordr.gestione, " + - " wdtb_ordr.serie, " + - " wdtb_ordr.id_art, " + - " wdtb_ordt.cod_jcom, " + - " wdtb_ordr.cod_mart, " + - " jtb_cicl.cod_prod, " + - " wdtb_ordr.unt_ord, " + - " wdtb_ordr.qta_ord, " + - " lisa.prz_acq_netto, " + - " jtb_dist_clav_dir.cod_jcos_dir," + - " jtb_dist_clav_dir.val_unt, " + - " jtb_dist_clav_dir.unt_mis," + - " wdtb_ordr.cod_art_for, " + - " wdtb_ordr.cod_alis, " + - " wdtb_ordr.descrizione_estesa, " + - " wdtb_ordr.unt_ord2, " + - " wdtb_ordr.qta_ord2, " + - " wdtb_ordt.rif_ord, " + - " wdtb_ordr.qta_cnf " + - " ORDER BY wdtb_ordr.id_art, cod_mate "; + String query = + Query.format( + "SELECT wdtb_ordr.id_art,\n" + + " wdtb_ordt.cod_jcom,\n" + + " wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.unt_ord,\n" + + " wdtb_ordr.qta_ord,\n" + + " wdtb_ordr.qta_ord2,\n" + + " wdtb_ordr.num_cnf,\n" + + " wdtb_ordr.descrizione_estesa,\n" + + " MIN(ISNULL(atb_forn.cod_anag, vtb_dest.cod_anag)) AS cod_anag,\n" + + " wdtb_ordr.cod_alis,\n" + + " wdtb_ordt.rif_ord\n" + + "FROM wdtb_ordt\n" + + " INNER JOIN wdtb_ordr ON wdtb_ordt.data_ord = wdtb_ordr.data_ord AND\n" + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND\n" + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND\n" + + " wdtb_ordt.serie = wdtb_ordr.serie\n" + + " INNER JOIN mtb_lisa ON mtb_lisa.cod_mart = wdtb_ordr.cod_mart AND mtb_lisa.flag_forn_pref = 'S'\n" + + " LEFT OUTER JOIN atb_forn ON mtb_lisa.cod_alis = atb_forn.cod_alis\n" + + " LEFT OUTER JOIN vtb_dest ON mtb_lisa.cod_alis = vtb_dest.cod_alis\n" + + "WHERE wdtb_ordr.gestione = %s\n" + + " AND wdtb_ordr.data_ord = %S\n" + + " AND wdtb_ordr.num_ord = %s\n" + + " AND wdtb_ordr.serie = %s\n" + + " AND IsNull(wdtb_ordr.id_art,0) <> 0\n" + + " AND exists (SELECT * from jtb_cicl WHERE jtb_cicl.cod_mart = Wdtb_ordr.cod_mart)\n" + + "GROUP BY wdtb_ordr.id_art,\n" + + " wdtb_ordt.cod_jcom,\n" + + " wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.unt_ord,\n" + + " wdtb_ordr.qta_ord,\n" + + " wdtb_ordr.qta_ord2,\n" + + " wdtb_ordr.num_cnf,\n" + + " wdtb_ordr.descrizione_estesa,\n" + + " wdtb_ordr.cod_alis,\n" + + " wdtb_ordt.rif_ord\n" + + "ORDER BY wdtb_ordr.id_art", + gestione, dataOrd, numOrd, serOrd + ); List> datiOrd = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); - int count = 0; - int idArtOld = 0; - int rigaOrdRif = 0; - for (HashMap dati : datiOrd) { - String gestioneAcq = (String) dati.get("gestione"); - Date dataOrdAcq = (Date) dati.get("data_ord"); - Integer numOrdProd = (Integer) dati.get("num_ord"); - String serOrdAcq = (String) dati.get("serie"); - Integer idArt = (Integer) dati.get("id_art"); - String codJcom = (String) dati.get("cod_jcom"); - String codMart = (String) dati.get("cod_mart"); - String flagMate = (String) dati.get("cod_mate"); - String untOrd = (String) dati.get("unt_ord"); - BigDecimal qtaOrd = (BigDecimal) dati.get("qta_ord"); - String codAnag = (String) dati.get("cod_anag"); - String codSpes = (String) dati.get("cod_jcos_dir"); - String codAlis = (String) dati.get("cod_alis"); - String codArtFor = (String) dati.get("cod_art_for"); - String descrizioneEstesa = (String) dati.get("descrizione_estesa"); - BigDecimal qtaOrd2 = (BigDecimal) dati.get("unt_ord2"); - BigDecimal qtaCnf = (BigDecimal) dati.get("qta_cnf"); - BigDecimal valUntSpes = (BigDecimal) dati.get("val_unt"); - String untMisSpes = (String) dati.get("unt_mis_spes"); - String rifOrd = (String) dati.get("rif_ord"); - count++; + Map, List>> ordiniProd = + datiOrd.stream() + .collect(groupingBy(x -> { + HashMap map = new HashMap<>(); + map.put("codAnag", x.get("cod_anag")); + map.put("codJcom", x.get("cod_jcom")); + map.put("rifOrd", x.get("rif_ord")); + map.put("codAlis", x.get("cod_alis")); + return map; + })); - BigDecimal numCnfOrdA = qtaOrd.divide(qtaCnf, RoundingMode.HALF_UP).setScale(0, RoundingMode.CEILING); + List entityList = new ArrayList<>(); + for (HashMap key : ordiniProd.keySet()) { + List> datiOrdPerOrdine = ordiniProd.get(key); + String codJcom = (String) key.get("codJcom"); + String rifOrd = (String) key.get("rifOrd"); + DtbOrdt ordA = new DtbOrdt() + .setGestione("A") + .setDataOrd(dataOrd) + .setGestioneRif("A") + .setDataOrdRif(dataOrd) + .setCodMdep(codMdep) + .setCodAnag((String) key.get("codAnag")) + .setCodJcom(codJcom) + .setRifOrd(rifOrd) + .setListino((String) key.get("codAlis")) + .setNote(String.format("Preventivo n. %s del %s", numOrd, new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dataOrd))); + ordA.setOperation(OperationType.INSERT); + entityList.add(ordA); - if (count == 1 && flagMate.compareTo("N") == 0) { - qtaOrd2 = (BigDecimal) dati.get("qta_ord2"); - } else if (count == 1 && flagMate.compareTo("S") == 0) { - break; - } else { - BigDecimal prezzoAcqNetto = (BigDecimal) dati.get("prz_acq_netto"); - if (idArt != idArtOld) { - numOrdProd = OrderRules.completeNumOrd(multiDBTransactionManager.getPrimaryConnection(), gestioneAcq, dataOrd, gestioneAcq); - rigaOrdRif = 0; - ordA = new DtbOrdt(); - ordA.setOperation(OperationType.INSERT); - ordA.setGestione(gestioneAcq); - ordA.setDataOrd(dataOrd); - ordA.setNumOrd(numOrdProd); - ordA.setSerie(serOrd); - ordA.setGestioneRif(gestioneAcq); - ordA.setDataOrdRif(dataOrd); - ordA.setNumOrdRif(numOrdProd); - ordA.setCodMdep(codMdep); - ordA.setCodAnag(codAnag); - ordA.setCodJcom(codJcom); - ordA.setRifOrd(rifOrd); - ordA.setListino(codAlis); - arrayOrd.add(ordA); - } - if (flagMate.compareTo("N") == 0) { + for (HashMap riga : datiOrdPerOrdine) { + String codMart = (String) riga.get("cod_mart"); + String untOrd = (String) riga.get("unt_ord"); + BigDecimal qtaOrd = (BigDecimal) riga.get("qta_ord"); + BigDecimal qtaOrdProdMq = (BigDecimal) riga.get("qta_ord2"); + Integer idArt = (Integer) riga.get("id_art"); + String descrizioneEstesa = (String) riga.get("descrizione_estesa"); + + query = Query.format( + "SELECT wdtb_ordr.serie,\n" + + " wdtb_ordt.cod_jcom,\n" + + " wdtb_ordr.cod_mart,\n" + + " wdtb_ordr.qta_ord,\n" + + " lisa.prz_acq_netto,\n" + + " wdtb_ordr.cod_art_for,\n" + + " wdtb_ordr.cod_alis,\n" + + " wdtb_ordr.qta_cnf\n" + + "FROM wdtb_ordt\n" + + " INNER JOIN wdtb_ordr ON wdtb_ordt.data_ord = wdtb_ordr.data_ord AND\n" + + " wdtb_ordt.num_ord = wdtb_ordr.num_ord AND\n" + + " wdtb_ordt.gestione = wdtb_ordr.gestione AND\n" + + " wdtb_ordt.serie = wdtb_ordr.serie\n" + + " LEFT OUTER JOIN dbo.getlistinoacquisto(%s, NULL, NULL, NULL, 'N', NULL) lisa\n" + + " ON lisa.cod_mart = wdtb_ordr.cod_mart AND lisa.cod_alis = Wdtb_ordr.cod_alis and lisa.flag_forn_pref = 'S'\n" + + "WHERE wdtb_ordr.gestione = %s\n" + + " AND wdtb_ordr.data_ord = %s\n" + + " AND wdtb_ordr.num_ord = %s\n" + + " AND wdtb_ordr.serie = %s\n" + + " AND wdtb_ordr.id_art = %s\n" + + " AND wdtb_ordr.qta_ord - %s >= 0\n" + + " AND not exists (SELECT * from jtb_cicl WHERE jtb_cicl.cod_mart = Wdtb_ordr.cod_mart)\n" + + "ORDER BY wdtb_ordr.pos_riga", + dataOrd, gestione, dataOrd, numOrd, serOrd, idArt, qtaOrdProdMq); + + List> listaMateriali = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + + if (!listaMateriali.isEmpty()) { DatiPartitaMagDTO datiPartita = new DatiPartitaMagDTO(); datiPartita.setCodMart(codMart); datiPartita.setPartitaMag(new SimpleDateFormat("YY").format(dataOrd)); @@ -1343,56 +1312,45 @@ public class OrdiniWebImportService { String sql = String.format("SELECT dbo.f_suggestCodePartitaMag(%s, 4) AS suggested_code", UtilityDB.valueToString(partialCode)); String suggestedPartita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); - ordL = new DtbOrdt(); - rigaOrdRif++; - ordL.setOperation(OperationType.INSERT); - ordL.setGestione("L"); - ordL.setDataOrd(dataOrd); - ordL.setGestioneRif(gestioneAcq); - ordL.setDataOrdRif(dataOrd); - ordL.setNumOrdRif(numOrdProd); - ordL.setRigaOrdRif(rigaOrdRif); - ordL.setRifOrd(rifOrd); - ordL.setCodMdep(codMdep); - ordL.setCodAnag(codAnag); - ordL.setCodJcom(codJcom); - ordL.setCodProd(codMart); - ordL.setPartitaMag(suggestedPartita); - ordL.setDescrEstesaProd(descrizioneEstesa); - ordL.setQtaProd(qtaOrd); - ordL.setFlagSospeso("S"); - ordL.setNumCnfProd(numCnfOrdA); - if (codSpes != null) { - ordS = new DtbOrds(); - ordS.setCodSpes(codSpes); - ordS.setUntMis(untMisSpes); - ordS.setQta(qtaOrd); - ordS.setValUnt(valUntSpes); - ordS.setImporto(valUntSpes.multiply(qtaOrd).setScale(EmsRestConstants.cifreDecMax, RoundingMode.HALF_UP)); - ordL.getDtbOrds().add(ordS); - } - } else { - count = 0; + MtbPartitaMag mtbPartitaMag = new MtbPartitaMag() + .setCodMart(codMart) + .setPartitaMag(suggestedPartita); + mtbPartitaMag.setOperation(OperationType.INSERT_OR_UPDATE); - BigDecimal residuo = qtaOrd.subtract(qtaOrd2); - if (residuo.compareTo(BigDecimal.ZERO) >= 0) { - ordR = new DtbOrdr(); - ordR.setCodMart(codMart); - ordR.setCodArtFor(codArtFor); - ordR.setCodAlis(codAlis); - ordR.setUntOrd(untOrd); - ordR.setQtaOrd(qtaOrd2); - ordR.setQtaCnf(qtaCnf); - ordR.setValUnt(prezzoAcqNetto); - ordR.setCodJcom(codJcom); - ordL.getDtbOrdr().add(ordR); + DtbOrdr ordR = new DtbOrdr() + .setCodMart(codMart) + .setPartitaMag(suggestedPartita) + .setUntOrd(untOrd) + .setQtaOrd(qtaOrd) + .setNumCnf((BigDecimal) riga.get("num_cnf")) + .setDescrizioneEstesa(descrizioneEstesa) + .setCodJcom(codJcom ) + .setFlagSospesoOrdl("S") + .setRifOrdOrdl(rifOrd) + .setMtbPartitaMag(mtbPartitaMag) + .setDistinta(new ArrayList<>()); + ordA.addDtbOrdr(ordR); + + for(HashMap m:listaMateriali) { + JtbDistMate jtbDistMate = + new JtbDistMate() + .setCodMart((String) m.get("cod_mart")) + .setQtaStd(qtaOrdProdMq) + .setUntMisDist((String) m.get("unt_ord")); + DatiMaterialiDTO datiMateriali = + new DatiMaterialiDTO() + .setJtbDistMate(jtbDistMate) + .setCodAlis((String) m.get("cod_alis")) + .setCodArtForn((String) m.get("cod_art_for")) + .setValUnt((BigDecimal) m.get("prz_acq_netto")); + + ordR.getDistinta().add(datiMateriali); } - arrayOrd.add(ordL); + } - idArtOld = idArt; } } - return arrayOrd; + return entityList; } public List importOrdiniWebYocabe(String type, String format, ImportRequestDTO body) throws Exception { diff --git a/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java b/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java index b1cce55e1a..edef6f844b 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java +++ b/ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java @@ -38,6 +38,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityEntity; import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.business_logic.dto.DatiMaterialiDTO; import it.integry.ems_model.config.EmsRestConstants; import it.integry.ems_model.db.ResultSetMapper; import it.integry.ems_model.entity.*; @@ -2341,9 +2342,10 @@ public class MesProductionServiceV2 { jtbDistMate.setOperation(OperationType.INSERT); + DatiMaterialiDTO datiMaterialiDTO = new DatiMaterialiDTO().setJtbDistMate(jtbDistMate); ordLav .getDistinta() - .add(jtbDistMate); + .add(datiMaterialiDTO); } entityProcessor.processEntity(ordProd, true, multiDBTransactionManager); From 9033da0bf272ef7753e7b8c2fc28c570e83b32af Mon Sep 17 00:00:00 2001 From: CarlaD Date: Mon, 20 Oct 2025 09:07:33 +0200 Subject: [PATCH 05/28] modificata vista: inserito progressivo_ul della materia prima --- .../model/Migration_20251020090242.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java new file mode 100644 index 0000000000..74f847f45d --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java @@ -0,0 +1,118 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251020090242 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + + createOrUpdateView("[vw_tracciabUDCProd]", "CREATE VIEW [dbo].[vw_tracciabUDCProd] AS\n" + + "SELECT mtb_colr.data_ord AS dataOrdProd,\n" + + " mtb_colr.num_ord AS numOrdProd,\n" + + " mtb_colt.cod_anag AS codAnag,\n" + + " gtb_anag.rag_soc AS produttore,\n" + + " mtb_colt.cod_jfas AS linea,\n" + + " mtb_colr.datetime_row AS dataOraProd,\n" + + " mtb_colt.cod_dtip AS codDtip,\n" + + " mtb_colt.data_doc AS dataDoc,\n" + + " mtb_colt.ser_doc AS serDoc,\n" + + " mtb_colt.num_doc AS numDoc,\n" + + " mtb_colt.segno,\n" + + " dtb_ordt.cod_prod AS codProd,\n" + + " dtb_ordt.descrizione_prod AS DescrizioneProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_colr.partita_mag, NULL) AS lottoProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_colt.progressivo_ul, NULL) AS numUDCProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_colr.barcode_ul_in, NULL) AS UDCProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_aart.unt_mis, NULL) AS untMisProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_colr.qta_col, 0) AS qtaProd,\n" + + " IIF(mtb_colt.segno = 1, mtb_colr.num_cnf, 0) AS colliProd,\n" + + " IIF(mtb_colt.segno = -1, mtb_colr.cod_mart, NULL) AS codMP,\n" + + " IIF(mtb_colt.segno = -1, mtb_aart.descrizione_estesa, NULL) AS DescrizioneMP,\n" + + " IIF(mtb_colt.segno = -1, mtb_colr.partita_mag, NULL) AS lottoMP,\n" + + " IIF(mtb_colt.segno = -1, udc.progressivo_ul, NULL) AS numUDCMP,\n" + + " IIF(mtb_colt.segno = -1, mtb_colr.barcode_ul_out, NULL) AS UDCMP,\n" + + " IIF(mtb_colt.segno = -1, mtb_aart.unt_mis, NULL) AS untMisMP,\n" + + " IIF(mtb_colt.segno = -1, mtb_colr.qta_col, 0) AS qtaScar\n" + + "FROM mtb_colt\n" + + " INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND\n" + + " mtb_colt.data_collo = mtb_colr.data_collo AND\n" + + " mtb_colt.ser_collo = mtb_colr.ser_collo AND\n" + + " mtb_colt.num_collo = mtb_colr.num_collo\n" + + " LEFT OUTER JOIN mtb_colt udc ON udc.gestione = mtb_colr.gestione_rif AND\n" + + " udc.data_collo = mtb_colr.data_collo_rif AND\n" + + " udc.ser_collo = mtb_colr.ser_collo_rif AND\n" + + " udc.num_collo = mtb_colr.num_collo_rif\n" + + " INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" + + " INNER JOIN gtb_anag ON mtb_colt.cod_anag = gtb_anag.cod_anag\n" + + " LEFT OUTER JOIN dtb_ordt ON mtb_colt.gestione = dtb_ordt.gestione AND mtb_colt.data_ord = dtb_ordt.data_ord AND\n" + + " mtb_colt.num_ord = dtb_ordt.num_ord\n" + + "WHERE mtb_colt.gestione = 'L'\n" + + " AND mtb_colr.data_ord IS NOT NULL\n" + + "UNION ALL\n" + + "SELECT dtb_doct.data_ord AS dataOrdProd,\n" + + " dtb_doct.num_ord AS num_ordProd,\n" + + " dtb_doct.cod_anag,\n" + + " gtb_anag.rag_soc,\n" + + " dtb_doct.cod_jfas,\n" + + " step_ordine.data_iniz AS dataOraProd,\n" + + " dtb_doct.cod_Dtip,\n" + + " dtb_doct.data_doc,\n" + + " dtb_doct.ser_doc,\n" + + " dtb_doct.num_doc,\n" + + " -1 AS segno,\n" + + " dtb_doct.cod_prod AS codProd,\n" + + " dtb_ordt.descrizione_prod AS descrizioneProd,\n" + + " NULL AS LottoProd,\n" + + " NULL AS NumUdcProd,\n" + + " NULL AS UDCProd,\n" + + " NULL AS untMisProd,\n" + + " NULL AS qtaProd,\n" + + " NULL AS colliProd,\n" + + " dtb_docr.cod_mart AS codMp,\n" + + " dtb_docr.descrizione AS DescrizioneMP,\n" + + " dtb_docr.partita_mag AS LottMP,\n" + + " NULL AS numUDCMP,\n" + + " NULL AS UDCMP,\n" + + " dtb_docr.unt_doc AS UntMisMP,\n" + + " dtb_docr.qta_doc AS qtaScar\n" + + "FROM dtb_doct\n" + + " INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" + + " dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" + + " dtb_doct.data_doc = dtb_docr.data_doc AND\n" + + " dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" + + " dtb_doct.num_doc = dtb_docr.num_doc\n" + + " INNER JOIN gtb_anag ON dtb_doct.cod_anag = gtb_anag.cod_anag\n" + + " INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart AND mtb_aart.flag_tracciabilita = 'S'\n" + + " INNER JOIN mtb_grup ON mtb_aart.cod_mgrp = mtb_grup.cod_mgrp AND mtb_grup.tipo_mgrp = 'IMB'\n" + + " INNER JOIN dtb_ordt ON dtb_ordt.gestione = dtb_doct.gestione AND dtb_ordt.data_ord = dtb_doct.data_ord AND\n" + + " dtb_ordt.num_ord = dtb_doct.num_ord\n" + + " INNER JOIN (SELECT gestione, data_ord, num_ord, MIN(data_iniz) AS data_iniz\n" + + " FROM dtb_ord_steps\n" + + " WHERE gestione = 'L'\n" + + " GROUP BY gestione, data_ord, num_ord) step_ordine\n" + + " ON step_ordine.gestione = dtb_doct.gestione AND step_ordine.data_ord = dtb_doct.data_ord AND\n" + + " step_ordine.num_ord = dtb_doct.num_ord\n" + + " INNER JOIN (SELECT cod_anag, cod_dtip, data_doc, ser_doc, num_doc\n" + + " FROM dtb_doct\n" + + " WHERE dtb_doct.cod_dtip IN ('H2', 'SLAV')\n" + + " EXCEPT\n" + + " SELECT cod_anag, cod_Dtip, data_doc, ser_doc, num_doc\n" + + " FROM mtb_colt\n" + + " WHERE cod_dtip IN ('H2', 'SLAV')) DocNoPackList ON dtb_doct.cod_anag = DocNoPackList.cod_anag AND\n" + + " dtb_doct.cod_Dtip = DocNoPackList.cod_Dtip AND\n" + + " dtb_doct.data_doc = DocNoPackList.data_doc AND\n" + + " dtb_doct.ser_doc = DocNoPackList.ser_doc AND\n" + + " dtb_doct.num_doc = DocNoPackList.num_doc"); + } + + @Override + public void down() throws Exception { + + } + +} From 8413be30a0c6202f5a9bc09e17db282de8378ffc Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 20 Oct 2025 09:20:31 +0200 Subject: [PATCH 06/28] Aggiunto controllo su email valida nelle persone di riferimento. --- .../it/integry/ems_model/utility/UtilityString.java | 3 +-- ems-core/src/main/resources/rules/check_cond.drl | 13 ++++++++++++- .../ems/system/controller/SystemController.java | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java index cb05fa0fa8..1bb4146658 100644 --- a/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java +++ b/ems-core/src/main/java/it/integry/ems_model/utility/UtilityString.java @@ -747,10 +747,9 @@ public class UtilityString { } public static boolean isEmail(String email) { - String regex = "^(.+)@(.+)$"; + String regex = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(email); return matcher.matches(); - } } \ No newline at end of file diff --git a/ems-core/src/main/resources/rules/check_cond.drl b/ems-core/src/main/resources/rules/check_cond.drl index f1c95ae326..0d9c5c9ea6 100644 --- a/ems-core/src/main/resources/rules/check_cond.drl +++ b/ems-core/src/main/resources/rules/check_cond.drl @@ -444,4 +444,15 @@ when $vtbDist : VtbDist(numCmov !=null && operation == OperationType.DELETE ) then throw new CheckConstraintException("Non è possibile cancellare una distinta già registrata."); -end \ No newline at end of file +end + +rule "checkEmailAnag" +no-loop +when + eval(checkRulesEnabled) + $vtbCliePersRif : VtbCliePersRif (eMail !=null && operation != OperationType.DELETE ) + eval(!UtilityString.isEmail($vtbCliePersRif.geteMail())) +then + throw new CheckConstraintException(String.format("Attenzione! Email non valida per la persona di riferimento %s.", + $vtbCliePersRif.getPersonaRif())); +end diff --git a/ems-engine/src/main/java/it/integry/ems/system/controller/SystemController.java b/ems-engine/src/main/java/it/integry/ems/system/controller/SystemController.java index 20cc4ecac1..2a5e4b3fc4 100644 --- a/ems-engine/src/main/java/it/integry/ems/system/controller/SystemController.java +++ b/ems-engine/src/main/java/it/integry/ems/system/controller/SystemController.java @@ -675,6 +675,9 @@ public class SystemController { activity.setActivityTypeId("TICKET"); } + if (activity.getParentActivityId() == null) + throw new Exception( "Attenzione, 'parentActivityId' obbligatorio"); + activity.setActivityDescription(HtmlUtils.htmlUnescape(activity.getActivityDescription())); String notificationType; From 785b03455ec74a8676e421515d2a5b9c913f3f39 Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 20 Oct 2025 10:31:20 +0200 Subject: [PATCH 07/28] Aggiunto completamento automatico del codice pagamento per documenti di tipo V --- .../ems/rules/completing/DocumentRules.java | 9 +++++++++ ems-core/src/main/resources/rules/DocV.drl | 14 +++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java index 6fa795ba30..e8aa0a0a90 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java @@ -40,6 +40,15 @@ public class DocumentRules extends QueryRules { return dataRicezione; } + public static String getCodPagaDocV(DtbDoct dtbDoct) { + if (!UtilityString.isNullOrEmpty(dtbDoct.getDtbTipi().getCodPaga())) { + return dtbDoct.getDtbTipi().getCodPaga(); + } else if (UtilityString.isNullOrEmpty(dtbDoct.getVtbClie().getCodPaga())) { + return dtbDoct.getVtbClie().getCodPaga(); + } + return null; + } + public static void completeIdRigaDrlTipiNoteDoc(Connection conn, DtbNoteDoc dtbNoteDoc) throws SQLException { if (!dtbNoteDoc.getDrlTipiNoteDoc().isEmpty()) { for (DrlTipiNoteDoc drlTipiNoteDoc : dtbNoteDoc.getDrlTipiNoteDoc()) { diff --git a/ems-core/src/main/resources/rules/DocV.drl b/ems-core/src/main/resources/rules/DocV.drl index ff643baf87..8b9261ccad 100644 --- a/ems-core/src/main/resources/rules/DocV.drl +++ b/ems-core/src/main/resources/rules/DocV.drl @@ -37,7 +37,6 @@ then setCodVage(QueryRules.getEntityData(dati.getCodVage(), $docT.getCodVage())), setCodVzon(QueryRules.getEntityData(dati.getCodVzon(), $docT.getCodVzon())), setCodBanc(QueryRules.getEntityData(dati.getCodBanc(), $docT.getCodBanc())), - setCodPaga(QueryRules.getEntityData(dati.getCodPaga(), $docT.getCodPaga())), setPorto(QueryRules.getEntityData(dati.getPorto(), $docT.getPorto())), setMezzo(QueryRules.getEntityData(dati.getMezzo(), $docT.getMezzo())), setSconto1(QueryRules.getEntityData(dati.getSconto1(), $docT.getSconto1())), @@ -51,6 +50,19 @@ then } end + +rule "completeCodPagaTipoDocV" +no-loop +when + eval(completeRulesEnabled) + $docT : DtbDoct(gestione == "V" && dtbTipi != null && vtbClie != null && codPaga == null) +then + String codPaga = DocumentRules.getCodPagaDocV($docT); + modify($docT){ + setCodPaga(codPaga) + } +end + rule "completeCodLinguaDocV" no-loop when From 597c2fe2a2fd12335b3831f88debe46a71a859ae Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 20 Oct 2025 12:42:02 +0200 Subject: [PATCH 08/28] elimintato metodo non usato --- .../ems/rules/completing/DocumentRules.java | 116 ------------------ 1 file changed, 116 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java index e8aa0a0a90..a36aeaa129 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java @@ -86,122 +86,6 @@ public class DocumentRules extends QueryRules { return numDocNew; } - public static Boolean chkNumeroFuoriSequenza(Connection conn, DtbDoct entity) { - Boolean numeroFuoriSequenza = false; - /* - int li_annoDoc, li_numIreg, li_numDoc, li_count; - String ls_codIreg, ls_tipoNumeraz, ls_serDoc; - Date ld_dataDoc = null; - ResultSet res; - boolean lb_returnVal; - PreparedStatement Info; - SimpleDateFormat annoFormat = new SimpleDateFormat("yyyy"); - return_class lcl_return = new return_class(); - - try{ - - // ACQUISIZIONE DATI DOCUMENTO - li_annoDoc = Integer.valueOf(annoFormat.format(getDataDoc())).intValue(); - li_numDoc = getNumDoc().intValue(); - ls_serDoc = getSerDoc(); - - // ACQUISIZIONE DATI TIPO DOCUMENTO - lb_returnVal = true; - ls_codIreg = getValueTipoDoc(nameFieldsTipiDoc.is_codIreg); - li_numIreg = utilityNumber.StringToInt(getValueTipoDoc(nameFieldsTipiDoc.is_numIreg)); - ls_tipoNumeraz = getValueTipoDoc(nameFieldsTipiDoc.is_tipoNumeraz); - - - if (ls_tipoNumeraz.compareTo(nameFieldsTipiDoc.is_tipoNumMANUALE) != 0){ - if (li_numDoc > 1){ - // CONTROLLO PRESENZA DOCUMENTO PRECEDENTE ALL'ATTUALE - li_count = 0; - is_query = - "SELECT data_doc, " + - " ser_doc, " + - " num_doc " + - " FROM dtb_doct, " + - " dtb_tipi" + - " WHERE dtb_doct.cod_dtip = dtb_tipi.cod_dtip and " + - " dtb_tipi.cod_ireg = " + utilityDB.valueToString(ls_codIreg) + " AND " + - " dtb_tipi.num_ireg = " + utilityDB.valueIntToString(li_numIreg) + " AND " + - " Datepart(year, dtb_doct.data_doc) = " + utilityDB.valueIntToString(li_annoDoc) + " AND " + - " ser_doc = " + utilityDB.valueToString(ls_serDoc) + " AND " + - " num_doc = " + utilityDB.valueIntToString(li_numDoc -1); - - Info = connect.prepareStatement(is_query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - res = Info.executeQuery(); - while(res.next()){ - li_count++; - ld_dataDoc = res.getDate(1); - ls_serDoc = res.getString(2); - li_numDoc = res.getInt(3); - } - res.close();Info.close(); - - - if (li_count == 0){ - // ERRORE: NON ESISTE IL DOCUMENTO PRECEDENTE - lb_returnVal = false; - }else{ - if (ld_dataDoc.after(getDataDoc())){ - // ERRORE: IL DOCUMENTO PRECEDENTE HA DATA MAGGIORE - lb_returnVal = false; - } - } - } - - if (lb_returnVal == true){ - // CONTROLLO DELLA PRESENZA DEL DOCUMENTO SUCCESSIVO - li_count = 0; - is_query = - "SELECT data_doc, " + - " ser_doc, " + - " num_doc " + - " FROM dtb_doct, " + - " dtb_tipi " + - " WHERE dtb_doct.cod_dtip = dtb_tipi.cod_dtip and " + - " dtb_tipi.cod_ireg = " + utilityDB.valueToString(ls_codIreg) + " AND " + - " dtb_tipi.num_ireg = " + utilityDB.valueIntToString(li_numIreg) + " AND " + - " Datepart(year, dtb_doct.data_doc) = " + utilityDB.valueIntToString(li_annoDoc) + " AND " + - " ser_doc = " + utilityDB.valueToString(ls_serDoc) + " AND " + - " num_doc = " + utilityDB.valueIntToString(li_numDoc + 1); - - Info = connect.prepareStatement(is_query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); - res = Info.executeQuery(); - while(res.next()){ - li_count++; - ld_dataDoc = res.getDate(1); - ls_serDoc = res.getString(2); - li_numDoc = res.getInt(3); - } - res.close();Info.close(); - - if (li_count == 0){ - // NON ESISTE IL DOCUMENTO SUCCESSIVO - if (ld_dataDoc != null){ - if (getDataDoc().before(ld_dataDoc)){ - // ERRORE: IL DOCUMENTO SUCCESSIVO A DATA MINORE - lb_returnVal = false; - } - } - } - } - - // SEGNALAZIONE ERRORE - if (lb_returnVal == false){ - lcl_return.setReturnId(GlobalVariables.stateKO); - lcl_return.setErrorText("DOCUMENTO INTESTATO A " + getCodAnag() + " - " + getCodDtip() + " N° " + utilityString.IntegerToString(getNumDoc()) + "/" + getSerDoc() + " DEL " + utilityString.DateToString(getDataDoc(), "dd-MM-yyyy") + " FUORI SEQUENZA"); - } - } - }catch (Exception e){ - lcl_return = utilityOBJ.GetExceptionMessage(utilityOBJ.GetCurrentClassName(this), utilityOBJ.GetCurrentMethodName(this), getProfileDB(), e, is_query); - } - return lcl_return; - */ - return numeroFuoriSequenza; - } - public static Integer nextNumDoc(Connection conn, Date dataDoc, String codIreg, String serDoc, Integer numIreg, Integer numDoc) throws SQLException { Short anno = new Short(new SimpleDateFormat("yyyy").format(dataDoc)); From 7a15a94b388a4089eb7d9b4af1d37db67f787150 Mon Sep 17 00:00:00 2001 From: LisaS Date: Mon, 20 Oct 2025 15:55:32 +0200 Subject: [PATCH 09/28] =?UTF-8?q?Tolto=20controllo=20su=20per=5Faliq<>0=20?= =?UTF-8?q?anche=20quando=20=C3=A8=20presente=20il=20destinatario=20e=20no?= =?UTF-8?q?n=20ha=20una=20sua=20aliquota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/Migration_20251020155222.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java new file mode 100644 index 0000000000..e7d89fbad4 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java @@ -0,0 +1,64 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251020155222 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + + createOrUpdateFunction("f_getCodAliq", "CREATE FUNCTION [dbo].[f_getCodAliq](@gestione varchar(1),\n" + + " @codMart varchar(15), \n" + + " @codAnag varchar(5), \n" + + " @codVdes varchar(5), \n" + + " @codDtip varchar(5), \n" + + " @codPromo varchar(10),\n" + + " @sconto5 numeric(5,2),\n" + + " @sconto6 numeric(5,2),\n" + + " @sconto7 numeric(5,2),\n" + + " @sconto8 numeric(5,2))\n" + + "RETURNS varchar(5) \n" + + "AS\n" + + "BEGIN\n" + + " -- Declare the return variable here\n" + + " DECLARE @codAliq varchar(5)\n" + + " DECLARE @percAliq numeric(20,5)\n" + + " DECLARE @codAliqEsenz varchar(5)\n" + + " select @codAliq = CASE WHEN (select flag_prz_iva FROM dtb_tipi where cod_dtip = @codDtip) = 'S' THEN mtb_aart.cod_aliq \n" + + " WHEN (select tipo_iva FROM gtb_aliq WHERE gtb_aliq.cod_aliq = mtb_aart.cod_aliq ) = 'NON ESPOSTA' THEN mtb_aart.cod_aliq \n" + + " WHEN ( @sconto5 = 100 OR @sconto6 = 100 OR @sconto7 = 100 OR @sconto8 = 100 ) AND @gestione = 'V' and @codPromo is not null THEN (select case when cod_aliq is null then case when azienda.flag_set_iva_omaggi = 'S' and azienda.cod_iva_omaggi is not null then cod_iva_omaggi else mtb_aart.cod_aliq end else cod_aliq end from vtb_promo where cod_promo = @codPromo) \n" + + " WHEN ( @sconto5 = 100 OR @sconto6 = 100 OR @sconto7 = 100 OR @sconto8 = 100 ) and @gestione = 'V' and @codPromo is null and azienda.flag_set_iva_omaggi = 's' and azienda.cod_iva_omaggi is not null THEN azienda.cod_iva_omaggi \n" + + " WHEN ( @sconto5 = 100 OR @sconto6 = 100 OR @sconto7 = 100 OR @sconto8 = 100 ) and @gestione = 'V' and @codPromo is null and azienda.flag_set_iva_omaggi = 'N' THEN null\n" + + " WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is not null and vtb_dest.cod_aliq_out is not null and (vtb_dest.cod_aliq_in = mtb_aart.cod_aliq OR vtb_dest.cod_aliq_in = anag.cod_aliq) THEN vtb_dest.cod_aliq_out \n" + + " WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is not null and vtb_dest.cod_aliq_out is not null and (vtb_dest.cod_aliq_in = mtb_aart.cod_aliq OR vtb_dest.cod_aliq_in = anag.cod_aliq) THEN vtb_dest.cod_aliq_out \n" + + " WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is null and vtb_dest.cod_aliq_out is not null THEN vtb_dest.cod_aliq_out \n" + + " --WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is null and vtb_dest.cod_aliq_out is null and vtb_dest.cod_aliq is not null then vtb_dest.cod_aliq\n" + + " WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is null and vtb_dest.cod_aliq_out is null and vtb_dest.cod_aliq is not null then CASE WHEN gtb_aliq.perc_aliq <> 0 THEN vtb_dest.cod_aliq ELSE mtb_aart.cod_aliq END /*l'eventuale esenzione deve essere impostata solo l'iva non ha già un'esenzione*/\n" + + " WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is null and vtb_dest.cod_aliq_out is null and vtb_dest.cod_aliq is null AND anag.cod_aliq is not null then anag.cod_aliq \n" + + " --WHEN @codVdes is not null AND vtb_dest.cod_aliq_in is null and vtb_dest.cod_aliq_out is null and vtb_dest.cod_aliq is null AND anag.cod_aliq is not null then CASE WHEN gtb_aliq.perc_aliq <> 0 THEN anag.cod_aliq ELSE mtb_aart.cod_aliq END /*l'eventuale esenzione deve essere impostata solo l'iva non ha già un'esenzione*/\n" + + " WHEN @codVdes is null AND anag.cod_aliq is not null then anag.cod_aliq\n" + + " ELSE mtb_aart.cod_aliq \n" + + " END\n" + + " from mtb_aart left outer join gtb_aliq on mtb_aart.cod_aliq = gtb_aliq.cod_aliq,\n" + + " azienda\n" + + " left outer join (select cod_anag, cod_aliq from vtb_clie where cod_anag = @codAnag and @gestione = 'V' \n" + + " union\n" + + " select cod_anag, cod_aliq from atb_forn where cod_anag = @codAnag and @gestione <> 'v' ) anag on anag.cod_anag = @codAnag\n" + + " left outer join vtb_dest on anag.cod_anag = vtb_dest.cod_anag and vtb_dest.cod_vdes = @codVdes\n" + + " where mtb_aart.cod_mart = @codMart;\n" + + "\n" + + " -- Return the result of the function\n" + + " RETURN @codAliq;\n" + + "END"); + } + + @Override + public void down() throws Exception { + + } + +} From dae03dc91fec208b304be0342e46d8ae5a29c5a7 Mon Sep 17 00:00:00 2001 From: FabioN Date: Mon, 20 Oct 2025 18:06:17 +0200 Subject: [PATCH 10/28] Gestione formato CSV e EXCEL su export ANAGRAFICHE ARTICOLI --- .../it/integry/ems/product/export/ArticoliExporter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ems-engine/src/main/java/it/integry/ems/product/export/ArticoliExporter.java b/ems-engine/src/main/java/it/integry/ems/product/export/ArticoliExporter.java index 8e2e1bcdca..64c3482992 100644 --- a/ems-engine/src/main/java/it/integry/ems/product/export/ArticoliExporter.java +++ b/ems-engine/src/main/java/it/integry/ems/product/export/ArticoliExporter.java @@ -2,6 +2,7 @@ package it.integry.ems.product.export; import it.integry.ems.export.base.BaseEntityExporter; import it.integry.ems.export.base.EntityExportResponse; +import it.integry.ems.export.base.ExportFromQuery; import it.integry.ems.export.base.IEntityExporter; import it.integry.ems.product.export.services.*; import org.springframework.web.context.ContextLoader; @@ -34,6 +35,10 @@ public class ArticoliExporter extends BaseEntityExporter implements IEntityExpor case SLIM2K: Slim2kService slim2kService = context.getBean(Slim2kService.class); return slim2kService.export(type, format); + case EXCEL: + case CSV: + ExportFromQuery expq = ContextLoader.getCurrentWebApplicationContext().getBean(ExportFromQuery.class); + return expq.export(username, type, format, whereCond); default: throw new Exception(String.format("Formato %s non supportato", format)); } @@ -49,7 +54,9 @@ public class ArticoliExporter extends BaseEntityExporter implements IEntityExpor WBC_STOCK_LIST("GET_STOCK_LIST"), YOCABE("YOCABE"), SLIM2K("SLIM2K"), - WOOCOMMERCE_STOCK("WOOCOMMERCE_STOCK"); + WOOCOMMERCE_STOCK("WOOCOMMERCE_STOCK"), + EXCEL("EXCEL"), + CSV("CSV"); private String text; From 853470701bd2172b2d6b7a745ce53fdcfb7c31e9 Mon Sep 17 00:00:00 2001 From: MinaR Date: Mon, 20 Oct 2025 18:22:32 +0200 Subject: [PATCH 11/28] Add ScontriniController and update ScontriniService for delete functionality --- .../controller/ScontriniController.java | 44 +++++++++++++++++++ .../ems/retail/service/ScontriniService.java | 25 +++++++++++ 2 files changed, 69 insertions(+) create mode 100644 ems-engine/src/main/java/it/integry/ems/retail/controller/ScontriniController.java diff --git a/ems-engine/src/main/java/it/integry/ems/retail/controller/ScontriniController.java b/ems-engine/src/main/java/it/integry/ems/retail/controller/ScontriniController.java new file mode 100644 index 0000000000..196844a243 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/retail/controller/ScontriniController.java @@ -0,0 +1,44 @@ +package it.integry.ems.retail.controller; + +import it.integry.common.var.CommonConstants; +import it.integry.ems.product.controller.ListiniVenditaController; +import it.integry.ems.response.ServiceRestResponse; +import it.integry.ems.response.StatusResponse; +import it.integry.ems.retail.service.ScontriniService; +import it.integry.ems.status.ServiceChecker; +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 java.lang.reflect.Method; +import java.util.List; + +@RestController +@Scope(value = "request") +@RequestMapping("scontrini") +public class ScontriniController { + @Autowired + private ServiceChecker serviceChecker; + @Autowired + private ScontriniService scontriniService; + + @RequestMapping(value = "status", method = RequestMethod.GET) + public @ResponseBody + List status(HttpServletRequest request) { + + Class clazz = ListiniVenditaController.class; + Method[] methods = clazz.getDeclaredMethods(); + return serviceChecker.getServiceStatus(methods, clazz); + } + + @RequestMapping(value = "delete", method = RequestMethod.POST) + public @ResponseBody + ServiceRestResponse delete(HttpServletRequest request, + @RequestParam(CommonConstants.PROFILE_DB) String configuration, + @RequestParam("whereCond") String whereCond, + @RequestParam (required = false) boolean deleteAll) throws Exception { + return ServiceRestResponse.createEntityPositiveResponse(scontriniService.delete(whereCond, deleteAll)); + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/retail/service/ScontriniService.java b/ems-engine/src/main/java/it/integry/ems/retail/service/ScontriniService.java index ddd037d24e..2dc6ccd896 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/service/ScontriniService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/service/ScontriniService.java @@ -3,8 +3,10 @@ package it.integry.ems.retail.service; import it.integry.common.var.CommonConstants; 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.db.ResultSetMapper; +import it.integry.ems_model.entity.NtbDoct; import it.integry.ems_model.entity.NtbDoctChk; import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.types.OperationType; @@ -43,4 +45,27 @@ public class ScontriniService { return entityList; } + + public List delete(String whereCond, boolean deleteAll) throws Exception { + String sql = + "SELECT cod_mdep, cod_cassa, data_doc " + + " FROM ntb_doct "; + sql = UtilityDB.addwhereCond(sql, whereCond, false); + if (!deleteAll) { + sql += "AND ntb_doct.data_doc_val is null"; + } + + List ntbDocts = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, NtbDoct.class); + + if (ntbDocts == null || ntbDocts.isEmpty()) { + throw new Exception("Non ci sono scontrini da eliminare"); + } + + ntbDocts.stream().forEach(ntbDoct -> {ntbDoct.setOperation(OperationType.DELETE);}); + + UtilityEntity.throwEntitiesException(entityProcessor.processEntityList(ntbDocts, false)); + + return ntbDocts; + + } } From 5b40bd478035d024146e5ab06e4fb2dea5dedf1b Mon Sep 17 00:00:00 2001 From: FabioN Date: Tue, 21 Oct 2025 16:54:30 +0200 Subject: [PATCH 12/28] Modifica per DMS --- .../integry/ems/migration/model/Migration_20251020090242.java | 2 ++ .../integry/ems/migration/model/Migration_20251020155222.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java index 74f847f45d..1e03daba59 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020090242.java @@ -10,6 +10,8 @@ public class Migration_20251020090242 extends BaseMigration implements Migration if (isHistoryDB()) return; + if (isDMS()) + return; createOrUpdateView("[vw_tracciabUDCProd]", "CREATE VIEW [dbo].[vw_tracciabUDCProd] AS\n" + "SELECT mtb_colr.data_ord AS dataOrdProd,\n" + diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java index e7d89fbad4..c9a6ef93be 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251020155222.java @@ -10,6 +10,8 @@ public class Migration_20251020155222 extends BaseMigration implements Migration if (isHistoryDB()) return; + if (isDMS()) + return; createOrUpdateFunction("f_getCodAliq", "CREATE FUNCTION [dbo].[f_getCodAliq](@gestione varchar(1),\n" + " @codMart varchar(15), \n" + From 7a6ddde702a1e7b1163d6523323e708ada636e0b Mon Sep 17 00:00:00 2001 From: AnthonyS Date: Wed, 22 Oct 2025 11:14:59 +0200 Subject: [PATCH 13/28] Rimosso json property errato su cod divi in VtbListData --- .../src/main/java/it/integry/ems_model/entity/VtbListData.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/VtbListData.java b/ems-core/src/main/java/it/integry/ems_model/entity/VtbListData.java index 0fa3953f62..ea88a5ca45 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/VtbListData.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/VtbListData.java @@ -92,7 +92,6 @@ public class VtbListData extends EntityBase { @JsonProperty private String descrizione; - @JsonProperty("cod_divi") private String codDivi; private Boolean datiLogistici; From dabf6a0a54ed76f354c6d6e7453eaa94c4f093fc Mon Sep 17 00:00:00 2001 From: AnthonyS Date: Wed, 22 Oct 2025 17:29:22 +0200 Subject: [PATCH 14/28] Creata setup per disabilitare controllo su tutti i range di un colore in ordikids --- .../model/Migration_20251022124614.java | 24 +++++++++++++++++++ .../integry/ems/ordikids/dto/UtenteDTO.java | 10 ++++++++ .../ems/ordikids/service/OrdikidsService.java | 1 + 3 files changed, 35 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022124614.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022124614.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022124614.java new file mode 100644 index 0000000000..f51f8738c7 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022124614.java @@ -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_20251022124614 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'"); + createSetup("ORDIKIDS", "SETUP", "RANGE_TAGLIE_SOLO_CON_QTA", "S", + "Indica se considerare tutti i range taglia in aggiunta di un articolo", false, "SI_NO", false, false, + false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'"); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/ordikids/dto/UtenteDTO.java b/ems-engine/src/main/java/it/integry/ems/ordikids/dto/UtenteDTO.java index acdd02cbdb..f760646e6c 100644 --- a/ems-engine/src/main/java/it/integry/ems/ordikids/dto/UtenteDTO.java +++ b/ems-engine/src/main/java/it/integry/ems/ordikids/dto/UtenteDTO.java @@ -43,6 +43,7 @@ public class UtenteDTO implements Serializable { private String recTelObbligatorio; @SqlField private String nomeNegozioRequired; + private Boolean rangeTaglieSoloConQta; public UtenteDTO(String user_name, String full_name, String user_code, String cod_vlis_newclie, String cod_anag_newclie, BigDecimal sc1, BigDecimal sc2, String cod_paga) { @@ -196,4 +197,13 @@ public class UtenteDTO implements Serializable { public void setNomeNegozioRequired(String nomeNegozioRequired) { this.nomeNegozioRequired = nomeNegozioRequired; } + + public Boolean getRangeTaglieSoloConQta() { + return rangeTaglieSoloConQta; + } + + public UtenteDTO setRangeTaglieSoloConQta(Boolean rangeTaglieSoloConQta) { + this.rangeTaglieSoloConQta = rangeTaglieSoloConQta; + return this; + } } \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/ordikids/service/OrdikidsService.java b/ems-engine/src/main/java/it/integry/ems/ordikids/service/OrdikidsService.java index 9d15be91af..522404dd98 100644 --- a/ems-engine/src/main/java/it/integry/ems/ordikids/service/OrdikidsService.java +++ b/ems-engine/src/main/java/it/integry/ems/ordikids/service/OrdikidsService.java @@ -122,6 +122,7 @@ public class OrdikidsService { utente.setMoltipl_barcodemode(UtilityHashMap.getValueIfExists(setupSection, "MOLTIP_BARCODEMODE", "S")); utente.setVend_asso_obbligatorio(UtilityHashMap.getValueIfExists(setupSection, "VEND_ASSO_OBBLIGATORIO")); utente.setRecTelObbligatorio(UtilityHashMap.getValueIfExists(setupSection, "REC_TEL_OBBLIGATORIO")); + utente.setRangeTaglieSoloConQta(((String) UtilityHashMap.getValueIfExists(setupSection, "RANGE_TAGLIE_SOLO_CON_QTA")).equalsIgnoreCase("S")); sql = "SELECT gtb_paga.cod_paga,\n" + " gtb_paga.descrizione,\n" + From 2831137dac27ed70218850fa2c339c9beac67972 Mon Sep 17 00:00:00 2001 From: MinaR Date: Thu, 23 Oct 2025 10:22:53 +0200 Subject: [PATCH 15/28] aggiunto id_art_equi in getListinoVendita --- .../model/Migration_20251022125946.java | 281 ++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022125946.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022125946.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022125946.java new file mode 100644 index 0000000000..2765dcb2e0 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251022125946.java @@ -0,0 +1,281 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251022125946 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + + createOrUpdateFunction("getListinoVendita", "CREATE FUNCTION [dbo].[getListinoVendita](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15))\n" + + " RETURNS TABLE AS\n" + + " RETURN\n" + + " SELECT vtb_list.cod_vlis,\n" + + " vtb_list.descrizione,\n" + + " CASE\n" + + " WHEN tmp_list.max_lisv IS NULL THEN NULL\n" + + " ELSE CONVERT(DATETIME, LEFT(tmp_list.max_lisv, 10)) END AS data_iniz,\n" + + " CASE\n" + + " WHEN tmp_list.max_lisv IS NULL THEN NULL\n" + + " ELSE CONVERT(INT, RIGHT(tmp_list.max_lisv, 4)) END AS versione,\n" + + " vtb_list.cod_divi,\n" + + " vtb_list.cambio,\n" + + " vtb_list.flag_arr_prz_iva,\n" + + " vtb_list.arr_ric,\n" + + " vtb_list.flag_list_iva_inclusa,\n" + + " vtb_list.flag_lisv_margine,\n" + + " vtb_list.flag_add_trasp,\n" + + " tmp_list.cod_mart AS 'cod_mart',\n" + + " mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" + + " ISNULL(mtb_lisv_data.rap_conv, 1) AS rap_conv,\n" + + " ISNULL(mtb_lisv_data.prz_base, 0) AS prz_base,\n" + + " ISNULL(mtb_lisv_data.ricarica, 0) AS ricarico,\n" + + " CASE\n" + + " WHEN mtb_lisv_data.prz_vend IS NOT NULL AND mtb_lisv_data.prz_vend <> 0 THEN\n" + + " ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" + + " (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" + + " ISNULL(mtb_lisv_data.prz_vend, 0) * 100, 2)\n" + + " ELSE 0 END AS margine_eff,\n" + + " --dbo.f_calcMargineEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) as margine_eff,\n" + + " --dbo.f_calcRicaricoEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) ricarico_eff, \n" + + " CASE\n" + + " WHEN mtb_lisv_data.prz_base IS NOT NULL AND mtb_lisv_data.prz_base <> 0 THEN\n" + + " ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" + + " (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" + + " (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100)) * 100, 2)\n" + + " ELSE 0 END AS ricarico_eff,\n" + + "\n" + + " ISNULL(mtb_lisv_data.magg_prz_vend, 0) AS magg_prz_vend,\n" + + " ISNULL(mtb_lisv_data.prz_vend, 0) AS prz_vend,\n" + + " ISNULL(mtb_lisv_data.prz_vend_iva, 0) AS prz_vend_iva,\n" + + " ISNULL(mtb_lisv_data.perc_sco1, 0) AS perc_sco1,\n" + + " ISNULL(mtb_lisv_data.perc_sco2, 0) AS perc_sco2,\n" + + " ISNULL(mtb_lisv_data.perc_sco3, 0) AS perc_sco3,\n" + + " ISNULL(mtb_lisv_data.perc_sco4, 0) AS perc_sco4,\n" + + " ISNULL(mtb_lisv_data.perc_prov, 0) AS perc_prov,\n" + + " ISNULL(mtb_lisv_data.fisso_prov, 0) AS fisso_prov,\n" + + " ISNULL(mtb_lisv_data.posizione, '') AS posizione,\n" + + " ISNULL(mtb_lisv_data.perc_gest, 0) AS perc_gest,\n" + + " ISNULL(mtb_lisv_data.val_gest, 0) AS val_gest,\n" + + " mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" + + " ISNULL(mtb_lisv_data.perc_ispe, 0) AS perc_ispe,\n" + + " ISNULL(mtb_lisv_data.val_ispe, 0) AS val_ispe,\n" + + " ISNULL(mtb_lisv_data.perc_promo, 0) AS perc_promo,\n" + + " ISNULL(mtb_lisv_data.val_promo, 0) AS val_promo,\n" + + " ISNULL(mtb_lisv_data.perc_oneri, 0) AS perc_oneri,\n" + + " ISNULL(mtb_lisv_data.val_oneri, 0) AS val_oneri,\n" + + " mtb_lisv_data.tipo_variazione AS tipo_variazione,\n" + + " mtb_lisv_data.note AS note,\n" + + " mtb_lisv_data.aggiornato_da AS aggiornato_da,\n" + + " mtb_lisv_data.prz_vend * (1 - mtb_lisv_data.perc_sco1 / 100) * (1 - mtb_lisv_data.perc_sco2 / 100) *\n" + + " (1 - mtb_lisv_data.perc_sco3 / 100) *\n" + + " (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" + + " CASE\n" + + " WHEN ISNULL(mtb_lisv_data.colli_pedana, 0) <> 0 THEN mtb_lisv_data.colli_pedana\n" + + " ELSE mtb_aart.colli_pedana END AS colli_pedana,\n" + + " mtb_lisv_data.cod_tcol_ul AS cod_tcol_ul,\n" + + " mtb_lisv_data.cod_tcol_ui AS cod_tcol_ui,\n" + + " ISNULL(mtb_lisv_data.prz_vend_sug, 0) AS prz_vend_sug,\n" + + " CASE\n" + + " WHEN ISNULL(mtb_lisv_data.qta_cnf, 0) <> 0\n" + + " AND dbo.getGestSetup('VTB_LIST', 'SETUP', 'QTA_CNF_LISTINO') = 'S' \n" + + " THEN mtb_lisv_data.qta_cnf\n" + + " ELSE mtb_aart.qta_cnf / ISNULL(mtb_lisv_data.rap_conv, 1) END AS qta_cnf,\n" + + " CASE\n" + + " WHEN ISNULL(mtb_lisv_data.colli_strato, 0) <> 0 THEN mtb_lisv_data.colli_strato\n" + + " ELSE mtb_aart.colli_strato END AS colli_strato,\n" + + " mtb_lisv_data.descrizione_html AS descrizione_html,\n" + + " mtb_lisv_data.colli_pedana AS colli_pedana_lisv,\n" + + " mtb_lisv_data.qta_cnf AS qta_cnf_lisv,\n" + + " mtb_lisv_data.colli_strato AS colli_strato_lisv,\n" + + " mtb_lisv_data.sconto_cartoni,\n" + + " mtb_lisv_data.sconto_strato,\n" + + " mtb_lisv_data.sconto_pedane,\n" + + " vtb_list.flag_attivo,\n" + + " vtb_list_data.note AS note_testata,\n" + + " ISNULL(mtb_lisv_data.flag_prz_bloccato, 'N') AS flag_prz_bloccato,\n" + + " vtb_list_data.porto AS porto,\n" + + " mtb_lisv_data.system_note,\n" + + " mtb_lisv.add_val_spese,\n" + + " mtb_lisv.add_ric_spese,\n" + + " mtb_lisv.add_sco_spese,\n" + + " mtb_aart.flag_incl_listino,\n" + + " mtb_lisv.flag_primario,\n" + + " mtb_aart.id_art_equi\n" + + " FROM (SELECT vtb_list.cod_vlis AS cod_vlis,\n" + + " mtb_lisv_data.cod_mart,\n" + + " MAX(CASE\n" + + " WHEN vtb_list_data.versione IS NULL THEN NULL\n" + + " ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" + + " REPLICATE('0', 5 - LEN(vtb_list_data.versione)) +\n" + + " CONVERT(VARCHAR(5), vtb_list_data.versione) END) AS max_lisv,\n" + + " vtb_list.cod_vlis AS 'cod_vlis_rif'\n" + + " FROM vtb_list\n" + + " INNER JOIN mtb_lisv_data ON vtb_list.cod_vlis = mtb_lisv_data.cod_vlis\n" + + " LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND\n" + + " mtb_lisv_data.versione = vtb_list_data.versione AND\n" + + " vtb_list_data.cod_promo IS NULL AND\n" + + " vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" + + " WHERE vtb_list.cod_vlis_rif IS NULL\n" + + " GROUP BY vtb_list.cod_vlis,\n" + + " mtb_lisv_data.cod_mart\n" + + " UNION\n" + + " SELECT vtb_list.cod_vlis AS cod_vlis,\n" + + " mtb_lisv_data.cod_mart,\n" + + " MAX(CASE\n" + + " WHEN vtb_list_data.versione IS NULL THEN NULL\n" + + " ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" + + " REPLICATE('0', 5 - LEN(vtb_list_data.versione_rif)) +\n" + + " CONVERT(VARCHAR(5), vtb_list_data.versione_rif) END) AS max_lisv,\n" + + " vtb_list.cod_vlis_rif AS 'cod_vlis_rif'\n" + + " FROM vtb_list\n" + + " INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" + + " INNER JOIN vtb_list_data vtb_list_data_rif\n" + + " ON vtb_list_data.versione_rif = vtb_list_data_rif.versione AND\n" + + " vtb_list_data.cod_vlis_rif = vtb_list_data_rif.cod_vlis\n" + + " INNER JOIN mtb_lisv_data ON vtb_list_data_rif.cod_vlis = mtb_lisv_data.cod_vlis AND\n" + + " vtb_list_data_rif.versione = mtb_lisv_data.versione\n" + + "\n" + + " WHERE vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" + + " AND vtb_list.cod_vlis_rif IS NOT NULL\n" + + " GROUP BY vtb_list.cod_vlis,\n" + + " mtb_lisv_data.cod_mart,\n" + + " vtb_list.cod_vlis_rif) tmp_list\n" + + " INNER JOIN vtb_list ON vtb_list.cod_vlis = tmp_list.cod_vlis\n" + + " INNER JOIN mtb_lisv\n" + + " ON tmp_list.cod_vlis_rif = mtb_lisv.cod_vlis AND tmp_list.cod_mart = mtb_lisv.cod_mart\n" + + " INNER JOIN mtb_aart ON tmp_list.cod_mart = mtb_aart.cod_mart\n" + + " LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis_rif = mtb_lisv_data.cod_vlis AND\n" + + " tmp_list.cod_mart = mtb_lisv_data.cod_mart AND\n" + + " CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = mtb_lisv_data.versione\n" + + " LEFT OUTER JOIN vtb_list_data ON tmp_list.cod_vlis = vtb_list_data.cod_vlis AND\n" + + " CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = vtb_list_data.versione\n" + + "\n" + + " WHERE (@codmart IS NULL OR tmp_list.cod_mart = @codmart)\n" + + " AND (@codvlis IS NULL OR tmp_list.cod_vlis = @codvlis)"); + + createOrUpdateFunction("getListinoVenditaPedane", "CREATE FUNCTION [dbo].[getListinoVenditaPedane](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15), @pedane INT)\n" + + " RETURNS TABLE AS\n" + + " RETURN\n" + + " WITH trasp AS (SELECT mtb_lisv_data_spese.cod_vlis,\n" + + " mtb_lisv_data_spese.versione,\n" + + " mtb_lisv_data_spese.cod_spes,\n" + + " mtb_lisv_data_spese.perc_ricarico,\n" + + " mtb_lisv_data_spese.val_ricarico,\n" + + " mtb_lisv_data_spese.perc_sconto,\n" + + " mtb_lisv_data_spese.da,\n" + + " mtb_lisv_data_spese.a\n" + + " FROM vtb_list_data\n" + + " --riga Sotto Aggiunta da Massimo 08/01/25 per non fare uscire i range pedane quando il prezzo non deve essere addizionato del costo dei trasporti\n" + + " --inner join vtb_list on vtb_list_data.cod_vlis = vtb_list.cod_vlis and vtb_list.flag_add_trasp = 1\n" + + " INNER JOIN mtb_lisv_data_spese\n" + + " ON vtb_list_data.cod_vlis = mtb_lisv_data_spese.cod_vlis AND\n" + + " vtb_list_data.versione = mtb_lisv_data_spese.versione\n" + + " CROSS APPLY (SELECT MAX(id_listino) AS max_id_listino\n" + + " FROM vtb_list_data t\n" + + " WHERE t.data_iniz <= ISNULL(@datavalidita, CAST(GETDATE() AS DATE))\n" + + " AND vtb_list_data.cod_vlis = t.cod_vlis) max_lisv\n" + + " WHERE vtb_list_data.id_listino = max_lisv.max_id_listino)\n" + + "\n" + + " SELECT list.cod_vlis,\n" + + " list.descrizione,\n" + + " list.data_iniz,\n" + + " list.versione,\n" + + " list.cod_divi,\n" + + " list.cambio,\n" + + " list.flag_arr_prz_iva,\n" + + " list.arr_ric,\n" + + " list.flag_list_iva_inclusa,\n" + + " list.flag_lisv_margine,\n" + + " list.flag_add_trasp,\n" + + " list.cod_mart,\n" + + " list.unt_mis_ven,\n" + + " list.rap_conv,\n" + + " list.prz_base,\n" + + " list.ricarico,\n" + + " list.margine_eff,\n" + + " list.ricarico_eff,\n" + + " list.magg_prz_vend,\n" + + " list.prz_vend,\n" + + " list.prz_vend_iva,\n" + + " list.perc_sco1,\n" + + " list.perc_sco2,\n" + + " list.perc_sco3,\n" + + " list.perc_sco4,\n" + + " list.perc_prov,\n" + + " list.fisso_prov,\n" + + " list.posizione,\n" + + " list.perc_gest,\n" + + " list.val_gest,\n" + + " list.data_agg_prz,\n" + + " list.perc_ispe,\n" + + " list.val_ispe,\n" + + " list.perc_promo,\n" + + " list.val_promo,\n" + + " list.perc_oneri,\n" + + " list.val_oneri,\n" + + " list.tipo_variazione,\n" + + " list.note,\n" + + " list.aggiornato_da,\n" + + " list.prz_vend_netto,\n" + + " list.colli_pedana,\n" + + " list.cod_tcol_ul,\n" + + " list.cod_tcol_ui,\n" + + " list.prz_vend_sug,\n" + + " list.qta_cnf,\n" + + " list.colli_strato,\n" + + " list.descrizione_html,\n" + + " list.colli_pedana_lisv,\n" + + " list.qta_cnf_lisv,\n" + + " list.colli_strato_lisv,\n" + + " list.sconto_cartoni,\n" + + " list.sconto_strato,\n" + + " list.sconto_pedane,\n" + + " list.flag_attivo,\n" + + " list.note_testata,\n" + + " list.flag_prz_bloccato,\n" + + " list.porto,\n" + + " list.system_note,\n" + + " list.add_val_spese,\n" + + " list.add_ric_spese,\n" + + " list.add_sco_spese,\n" + + " list.flag_incl_listino,\n" + + " list.flag_primario,\n" + + " list.id_art_equi,\n" + + " trasp.cod_spes,\n" + + " trasp.perc_ricarico,\n" + + " trasp.val_ricarico,\n" + + " trasp.perc_sconto,\n" + + " trasp.da,\n" + + " trasp.a,\n" + + " (list.prz_vend +\n" + + " IIF(list.flag_add_trasp = 1, --Questa condizione si potrebbe togliere per la modifica fatta l'8/01/25\n" + + " ((ISNULL(val_ricarico, 0)) * list.add_val_spese) /\n" + + " IIF(ISNULL(list.colli_pedana, 1) = 0, 1, list.colli_pedana), 0)) +\n" + + " ((ISNULL(perc_ricarico, 0) * list.add_ric_spese * list.prz_vend) / 100) *\n" + + " (1 - (ISNULL(perc_sconto, 0) * list.add_sco_spese) / 100) prz_vend_trasp,\n" + + " ((list.prz_vend +\n" + + " IIF(list.flag_add_trasp = 1, --Questa condizione si potrebbe togliere per la modifica fatta l'8/01/25\n" + + " ((ISNULL(val_ricarico, 0)) * list.add_val_spese) /\n" + + " IIF(ISNULL(list.colli_pedana, 1) = 0, 1, list.colli_pedana), 0)) +\n" + + " ((ISNULL(perc_ricarico, 0) * list.add_ric_spese * list.prz_vend) / 100) *\n" + + " (1 - (ISNULL(perc_sconto, 0) * list.add_sco_spese) / 100)) * (1 - list.perc_sco1 / 100) *\n" + + " (1 - list.perc_sco2 / 100) *\n" + + " (1 - list.perc_sco3 / 100) *\n" + + " (1 - list.perc_sco4 / 100) AS prz_vend_trasp_netto\n" + + " FROM getlistinovendita(@datavalidita, @codvlis, @codmart) list\n" + + " LEFT OUTER JOIN trasp ON list.cod_vlis = trasp.cod_vlis AND\n" + + " (@pedane IS NULL OR @pedane BETWEEN da AND a OR\n" + + " (@pedane IS NOT NULL AND da = 0 AND a = 0))"); + } + + @Override + public void down() throws Exception { + + } + +} From ab956b4a6e9c4073baba2f3857cdd04082a6ade7 Mon Sep 17 00:00:00 2001 From: MinaR Date: Thu, 23 Oct 2025 10:36:57 +0200 Subject: [PATCH 16/28] Sistemata Migration_20250827151739 --- .../it/integry/ems/migration/model/Migration_20250827151739.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java index 505ce134da..3779c113ef 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250827151739.java @@ -10,6 +10,7 @@ public class Migration_20250827151739 extends BaseMigration implements Migration if (isHistoryDB()) return; + if (existsColumn("dtb_ord_log_import", "id")) return; executeStatement( "exec dropPrimaryKey 'dtb_ord_log_import'", From 6b80520d8d6d1f24a1528283adc4eb4cc3ffe76d Mon Sep 17 00:00:00 2001 From: MinaR Date: Thu, 23 Oct 2025 11:33:40 +0200 Subject: [PATCH 17/28] modificata la regola che assegna la versione e eliminta regola non usata --- .../ems/rules/completing/DocumentRules.java | 11 +---------- ems-core/src/main/resources/rules/retail.drl | 17 ----------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java index a36aeaa129..cf4a2b3ac2 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java @@ -512,20 +512,11 @@ public class DocumentRules extends QueryRules { " AND ser_doc = " + UtilityDB.valueToString(dtbDocPdf.getSerDoc()) + " AND num_doc = " + UtilityDB.valueToString(dtbDocPdf.getNumDoc()); - PreparedStatement ps = conn.prepareStatement(sql); - ResultSet rs = ps.executeQuery(); - Integer versione = null; - - if (rs.next()) { - versione = rs.getInt("next_versione"); - } - rs.close(); - ps.close(); + Integer versione = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql); if (versione == null) { versione = 0; } return versione; - } public static String completeFileName(DtbDocPdf docPdf) { diff --git a/ems-core/src/main/resources/rules/retail.drl b/ems-core/src/main/resources/rules/retail.drl index 5fa7e56b9a..8b67da93f0 100644 --- a/ems-core/src/main/resources/rules/retail.drl +++ b/ems-core/src/main/resources/rules/retail.drl @@ -86,23 +86,6 @@ then modify($entity){ setCodDivi(codDivi)} end -//SCONTRINI ROW -/*rule "completeUntMisNtbDocr" -no-loop -when - eval(completeRulesEnabled) - $entity : NtbDocr(untMis == null && codMart != null && codMdep !=null && codVlis != null ) -then - String sql = - "SELECT unt_mis_ven " + - " FROM dbo.getListinoVendita('" + new SimpleDateFormat("yyyy/MM/dd").format($entity.getDataDoc()) + "', " + - "'" + $entity.getCodVlis() + "', "+ - "'" + $entity.getCodMart() + "') "; - String untMis = (String) QueryRules.getSingleValue(conn, sql); - - modify ( $entity ) { setUntMis(untMis) } -end*/ - rule "completeDescrizioneNtbDocr" no-loop when From 0bebf87fa4040a461b5bdaec06bc9c06fa9f4ea0 Mon Sep 17 00:00:00 2001 From: AnthonyS Date: Thu, 23 Oct 2025 11:59:09 +0200 Subject: [PATCH 18/28] Rimosso default PVM ad integryApplication --- .../src/main/java/it/integry/ems/javabeans/RequestDataDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ems-core/src/main/java/it/integry/ems/javabeans/RequestDataDTO.java b/ems-core/src/main/java/it/integry/ems/javabeans/RequestDataDTO.java index d5c29242a1..e90213f2ca 100644 --- a/ems-core/src/main/java/it/integry/ems/javabeans/RequestDataDTO.java +++ b/ems-core/src/main/java/it/integry/ems/javabeans/RequestDataDTO.java @@ -42,7 +42,7 @@ public class RequestDataDTO { private String password; private boolean includeNulls = false; - private IntegryApplicationEnum integryApplication = IntegryApplicationEnum.PVM; + private IntegryApplicationEnum integryApplication; private UserDTO userDTO; From 673de9d9b1d4b0b9eb01522fb9c6ca9e53af0df4 Mon Sep 17 00:00:00 2001 From: CarlaD Date: Thu, 23 Oct 2025 12:12:21 +0200 Subject: [PATCH 19/28] aggiungo campo id pk nella tabella gramm_simulatore_coan --- .../model/Migration_20251023114821.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023114821.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023114821.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023114821.java new file mode 100644 index 0000000000..87544199a5 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023114821.java @@ -0,0 +1,22 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.IntegryCustomer; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251023114821 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + if(isCustomer(IntegryCustomer.Gramm)) { + executeStatement(" alter table gramm_simulatore_coan add id bigint identity not null\n" + + " CONSTRAINT PK_drl_tipi_mod_stampa PRIMARY KEY (id)"); + } + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file From 3606aa99d9bbf83d8dd8ef26624916885e900167 Mon Sep 17 00:00:00 2001 From: CarlaD Date: Thu, 23 Oct 2025 12:13:48 +0200 Subject: [PATCH 20/28] aggiornata vista gramm olapfermimacchina con controllo che le date non siano nulle --- .../model/Migration_20251023115642.java | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023115642.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023115642.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023115642.java new file mode 100644 index 0000000000..a94b158317 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251023115642.java @@ -0,0 +1,119 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.IntegryCustomer; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251023115642 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if(isCustomer(IntegryCustomer.Gramm)) { + createOrUpdateView("olapfermimacchina", "CREATE view [dbo].[OlapFermiMacchina] as \n" + + "\n" + + " WITH controlli_qualita AS (SELECT [Data Inizio],[Data Fine], [Operatore], [Descrizione del Fermo] as Note, gestione, data_ord, num_ord, num_rip\n" + + " FROM (\n" + + " select controllo, valore_ril, DTB_ORDT.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord, dtb_ord_cqr.num_rip\n" + + " \n" + + "from dtb_ord_cqr inner join dtb_ord_cq on dtb_ord_cqr.gestione=dtb_ord_cq.gestione and \n" + + " dtb_ord_cqr.data_ord=dtb_ord_cq.data_ord and dtb_ord_cqr.num_ord=dtb_ord_cq.num_ord \n" + + " and dtb_ord_cqr.id_riga=dtb_ord_cq.id_riga\n" + + " inner join dtb_ordt on dtb_ord_cqr.gestione=dtb_ordt.gestione and \n" + + " dtb_ord_cqr.data_ord=dtb_ordt.data_ord and \n" + + " dtb_ord_cqr.num_ord=dtb_ordt.num_ord\n" + + " \n" + + "where dtb_ord_cqr.gestione='L' and dtb_ord_cqr.data_ord >'2024/01/01' and dtb_ordt.cod_mdep in('34','01','33')\n" + + " ) cq\n" + + " PIVOT\n" + + " (max(valore_ril)\n" + + " FOR controllo IN ([Data Inizio],[Data Fine], [Operatore],[Descrizione del Fermo])\n" + + " ) AS pivottable)\n" + + "\n" + + "select dtb_ordt.cod_mdep,\n" + + " dtb_ord_steps.cod_jfas,\n" + + " dtb_ordt.data_ord, \n" + + " dtb_ordt.num_ord,\n" + + " dtb_ordt.cod_prod,\n" + + " mtb_aart.descrizione,\n" + + " mtb_aart.marchio,\n" + + " dtb_ordt.partita_mag,\n" + + " dtb_ordt.unt_mis_prod,\n" + + " dtb_ordt.qta_evasa_prod,\n" + + " try_convert(datetime, controlli_qualita.[Data Inizio], 103) as Data_inz_fermo,\n" + + " try_convert(datetime, controlli_qualita.[Data Fine], 103) as Data_fine_fermo,\n" + + " controlli_qualita.Operatore,\n" + + " controlli_qualita.Note,\n" + + " SUM(\n" + + " CASE\n" + + " WHEN TRY_CONVERT(datetime, controlli_qualita.[Data Inizio], 103) IS NOT NULL\n" + + " AND TRY_CONVERT(datetime, controlli_qualita.[Data Fine], 103) IS NOT NULL\n" + + " THEN DATEDIFF(\n" + + " MINUTE,\n" + + " TRY_CONVERT(datetime, controlli_qualita.[Data Inizio], 103),\n" + + " TRY_CONVERT(datetime, controlli_qualita.[Data Fine], 103)\n" + + " )\n" + + " ELSE 0\n" + + " END\n" + + ") AS min_lav, -- min_fermo (non è stato cambiato il nome del campo perchè ci sono diversi report che leggono da questa vista)\n" + + "\n" + + "0 AS h_lav,\n" + + "\n" + + "SUM(\n" + + " CASE\n" + + " WHEN TRY_CONVERT(datetime, controlli_qualita.[Data Inizio], 103) IS NOT NULL\n" + + " AND TRY_CONVERT(datetime, controlli_qualita.[Data Fine], 103) IS NOT NULL\n" + + " THEN DATEDIFF(\n" + + " HOUR,\n" + + " TRY_CONVERT(datetime, controlli_qualita.[Data Inizio], 103),\n" + + " TRY_CONVERT(datetime, controlli_qualita.[Data Fine], 103)\n" + + " )\n" + + " ELSE 0\n" + + " END\n" + + ") OVER (PARTITION BY dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord) AS h_fermo\n" + + "\n" + + "\n" + + " \n" + + "from controlli_qualita inner join dtb_ordt on controlli_qualita.gestione=dtb_ordt.gestione and \n" + + " controlli_qualita.data_ord=dtb_ordt.data_ord and \n" + + " controlli_qualita.num_ord=dtb_ordt.num_ord\n" + + " \n" + + " inner join mtb_aart on dtb_ordt.cod_prod=mtb_aart.cod_mart\n" + + " left outer join ( select num_ord, data_ord, gestione, cod_jfas\n" + + " from \n" + + " (select num_ord, data_ord, gestione, data_iniz, cod_jfas,\n" + + " ROW_NUMBER() OVER (PARTITION BY gestione, data_ord, num_ord ORDER BY data_iniz ASC) AS num\n" + + " from dtb_ord_steps\n" + + " where data_iniz IS NOT NULL) step\n" + + " where num='1') dtb_ord_steps ON dtb_ordt.gestione = dtb_ord_steps.gestione\n" + + " AND dtb_ordt.data_ord = dtb_ord_steps.data_ord\n" + + " AND dtb_ordt.num_ord = dtb_ord_steps.num_ord\n" + + "where dtb_ordt.gestione='L' and dtb_ordt.data_ord>'2024/01/01' and dtb_ordt.cod_mdep in('34','01','33') \n" + + "\n" + + "group by dtb_ordt.cod_mdep,\n" + + " dtb_ord_steps.cod_jfas,\n" + + " dtb_ordt.data_ord, \n" + + " dtb_ordt.num_ord,\n" + + " dtb_ordt.cod_prod,\n" + + " mtb_aart.descrizione,\n" + + " mtb_aart.marchio,\n" + + " dtb_ordt.partita_mag,\n" + + " dtb_ordt.unt_mis_prod,\n" + + " dtb_ordt.qta_prod,\n" + + " dtb_ordt.qta_evasa_prod,\n" + + " controlli_qualita.[Data Inizio],\n" + + " controlli_qualita.[Data Fine],\n" + + " controlli_qualita.Operatore,\n" + + " controlli_qualita.Note,\n" + + " dtb_ordt.gestione"); + } + } + + @Override + public void down() throws Exception { + + } + +} From d9d2b5bef720b5ec2f6d92b9b83bc72128d72f92 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 23 Oct 2025 13:36:09 +0200 Subject: [PATCH 21/28] Fix check licenza --- .../ems/license/LicenseCheckInterceptor.java | 11 ++++------- .../it/integry/ems/license/LicenseComponent.java | 14 ++++++++++---- .../it/integry/ems/license/LicenseStatusDTO.java | 3 +++ .../integry/ems/system/service/SystemService.java | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java b/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java index 72dda3b645..350bec6384 100644 --- a/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java +++ b/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java @@ -1,6 +1,6 @@ package it.integry.ems.license; -import it.integry.common.var.CommonConstants; +import it.integry.ems.javabeans.RequestDataDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; @@ -11,6 +11,8 @@ import java.util.Random; public class LicenseCheckInterceptor extends HandlerInterceptorAdapter { + @Autowired + private RequestDataDTO requestData; @Autowired private LicenseComponent licenseComponent; @@ -20,12 +22,7 @@ public class LicenseCheckInterceptor extends HandlerInterceptorAdapter { HttpServletResponse response, Object handler) { - String profileDB = null; - if (request != null && request.getQueryString() != null && request.getQueryString().contains(CommonConstants.PROFILE_DB)) { - profileDB = request.getParameter(CommonConstants.PROFILE_DB); - } else if (request != null && request.getHeader(CommonConstants.PROFILE_DB) != null) { - profileDB = request.getHeader(CommonConstants.PROFILE_DB); - } + String profileDB = requestData.getProfileDB(); LicenseStatusDTO licenseStatusDTO = null; if (profileDB != null) licenseStatusDTO = licenseComponent.getLicenseStatus(profileDB); diff --git a/ems-core/src/main/java/it/integry/ems/license/LicenseComponent.java b/ems-core/src/main/java/it/integry/ems/license/LicenseComponent.java index b21bed4b30..98b03e9b77 100644 --- a/ems-core/src/main/java/it/integry/ems/license/LicenseComponent.java +++ b/ems-core/src/main/java/it/integry/ems/license/LicenseComponent.java @@ -25,6 +25,7 @@ import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; @Component @@ -105,14 +106,19 @@ public class LicenseComponent { } else { List licenses = response.getDTO(new TypeReference>() { }); - if (licenses == null) return; + if (licenses == null || licenses.isEmpty()) return; listAziende.forEach((key, value) -> { cachedLicenseStatus.remove(key); - licenses.stream().filter(x -> x.getPartIva().equalsIgnoreCase(value)) - .findFirst() - .ifPresent(license -> cachedLicenseStatus.put(key, license)); + final Optional licenseSearch = licenses.stream().filter(x -> x.getPartIva().equalsIgnoreCase(value)) + .findFirst(); + + if (licenseSearch.isPresent()) { + cachedLicenseStatus.put(key, licenseSearch.get()); + } else { + cachedLicenseStatus.put(key, licenses.get(0)); + } }); } diff --git a/ems-core/src/main/java/it/integry/ems/license/LicenseStatusDTO.java b/ems-core/src/main/java/it/integry/ems/license/LicenseStatusDTO.java index 0b86c5f44c..c26efd0bdb 100644 --- a/ems-core/src/main/java/it/integry/ems/license/LicenseStatusDTO.java +++ b/ems-core/src/main/java/it/integry/ems/license/LicenseStatusDTO.java @@ -10,10 +10,13 @@ import java.util.Date; public class LicenseStatusDTO { @SqlField("part_iva") private String partIva; + @SqlField("classe_merito") private Quality quality; + @SqlField private Status status; + @SqlField("data_scad_license") private Date expiringDate; diff --git a/ems-engine/src/main/java/it/integry/ems/system/service/SystemService.java b/ems-engine/src/main/java/it/integry/ems/system/service/SystemService.java index 6ff2fe5c88..617acf5a23 100644 --- a/ems-engine/src/main/java/it/integry/ems/system/service/SystemService.java +++ b/ems-engine/src/main/java/it/integry/ems/system/service/SystemService.java @@ -1915,7 +1915,7 @@ public class SystemService { " ELSE 0 END AS status,\n" + " CAST(gg_scoperto AS INT) AS gg_scoperto,\n" + " data_scad_license,\n" + - " CAST(classe_merito AS INT) AS classe_merito\n" + + " IIF(CAST(classe_merito AS INT) > 0, 0, CAST(classe_merito AS INT)) AS classe_merito\n" + "FROM (SELECT DISTINCT crl_part_iva_cod_fatt.part_iva,\n" + " ISNULL(max(DATEDIFF(day, ctb_scad.data_scad, GETDATE()))\n" + " OVER (PARTITION BY crl_part_iva_cod_fatt.cod_anag_fatt),\n" + From 3e069d1c397b2bf67b9bc2e193ab58844c446f7d Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 23 Oct 2025 14:59:20 +0200 Subject: [PATCH 22/28] Fix check licenza --- .../java/it/integry/ems/license/LicenseCheckInterceptor.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java b/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java index 350bec6384..a404fbfd61 100644 --- a/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java +++ b/ems-core/src/main/java/it/integry/ems/license/LicenseCheckInterceptor.java @@ -2,6 +2,7 @@ package it.integry.ems.license; import it.integry.ems.javabeans.RequestDataDTO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.context.ContextLoader; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; @@ -11,9 +12,6 @@ import java.util.Random; public class LicenseCheckInterceptor extends HandlerInterceptorAdapter { - @Autowired - private RequestDataDTO requestData; - @Autowired private LicenseComponent licenseComponent; @@ -21,6 +19,7 @@ public class LicenseCheckInterceptor extends HandlerInterceptorAdapter { HttpServletRequest request, HttpServletResponse response, Object handler) { + RequestDataDTO requestData = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class); String profileDB = requestData.getProfileDB(); From 307840c2363093098eb5587b05ed0ddf2affd01a Mon Sep 17 00:00:00 2001 From: MinaR Date: Thu, 23 Oct 2025 18:18:09 +0200 Subject: [PATCH 23/28] moifiche a registrazione movimenti doc finance --- .../ems/rules/completing/AccountingRules.java | 8 +--- .../dto/MovimentiContabiliDocfinanceDTO.java | 2 +- .../Import/service/ContabilImportService.java | 48 +++++++++++-------- .../MovimentiContabiliController.java | 8 ++++ .../service/MovimentiContabiliServices.java | 19 ++++++++ 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/AccountingRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/AccountingRules.java index 52a82b4a31..1962eb2a2c 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/AccountingRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/AccountingRules.java @@ -683,13 +683,9 @@ public class AccountingRules extends QueryRules { Query.format( "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 " + - "anno_part = %s AND " + - "ser_doc = %s AND " + - "num_doc = %s AND " + + " WHERE num_cmov = %s AND " + "id_riga = %s ", - ctbMovr.getCodAnag(), ctbMovr.getTipoAnag(), ctbMovr.getAnnoPart(), ctbMovr.getSerDoc(), ctbMovr.getNumDoc(), ctbMovr.getIdRiga()); + ctbMovr.getNumCmov(), ctbMovr.getIdRiga()); boolean existRow = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql); diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/Import/dto/MovimentiContabiliDocfinanceDTO.java b/ems-engine/src/main/java/it/integry/ems/contabil/Import/dto/MovimentiContabiliDocfinanceDTO.java index 894644a9cd..4583fa543b 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/Import/dto/MovimentiContabiliDocfinanceDTO.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/Import/dto/MovimentiContabiliDocfinanceDTO.java @@ -501,6 +501,6 @@ public class MovimentiContabiliDocfinanceDTO { .setCodCcau(mov.getCausaleCoge()) .setDescrizioneCaus(String.valueOf(mov.hashCode())) .setNumDoc(Integer.valueOf(mov.getMovimento())) - .setRifImport(mov.getAnnoCoge() + "_" + mov.getNumeroRitornoCoge()); + .setRifImport(mov.getAnnoCoge() + "_" + mov.getMovimento() + "_" + mov.getNumeroRitornoCoge()); } } diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/Import/service/ContabilImportService.java b/ems-engine/src/main/java/it/integry/ems/contabil/Import/service/ContabilImportService.java index 635a55b8cd..813670fecd 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/Import/service/ContabilImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/Import/service/ContabilImportService.java @@ -16,6 +16,7 @@ import it.integry.ems.service.EntityProcessor; import it.integry.ems.service.MailService; import it.integry.ems.sync.MultiDBTransaction.Connection; 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.db.ResultSetMapper; import it.integry.ems_model.entity.*; @@ -596,23 +597,22 @@ public class ContabilImportService { .setFieldsSplitChar(""); List deserialize = txtMapper.deserialize(lines, MovimentiContabiliDocfinanceDTO.class); - - String sql = - Query.format( - "SELECT CAST(count(*) as bit ) FROM ctb_movt WHERE rif_import = %s", - deserialize.get(0).getAnnoCoge() + "_" + deserialize.get(0).getNumeroRitornoCoge() - ); - - - if (UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql)) - throw new Exception("Impossibile importare questo file, movimenti già importati"); - - Map> movimenti = deserialize.stream().collect(Collectors.groupingBy(MovimentiContabiliDocfinanceDTO::fromMovimenti)); List ctbMovtList = new ArrayList<>(); for (CtbMovt ctbMovt : movimenti.keySet()) { + String sql = + Query.format( + "SELECT CAST(count(*) as bit ) FROM ctb_movt WHERE rif_import = %s", + ctbMovt.getRifImport() + ); + + boolean existsMov =UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); + if (existsMov){ + //throw new Exception("Impossibile importare questo file, movimenti già importati"); + continue; + } String codCcau = ctbMovt.getCodCcau(); sql = Query.format("SELECT CAST(COUNT(*) AS BIT) FROM ctb_caus WHERE cod_ccau = %s", codCcau); @@ -670,10 +670,9 @@ public class ContabilImportService { sql = Query.format( "SELECT *\n" + "FROM ctb_scad\n" + - "WHERE (intercode = %s\n" + - " OR dbo.f_getChiaveCogeDocFinace(anno_part, ser_doc, num_doc, id_riga, tipo_anag) = %s)" + + "WHERE isnull(intercode,dbo.f_getChiaveCogeDocFinace(anno_part, ser_doc, num_doc, id_riga, tipo_anag)) = %s " + " AND cod_anag = %s AND tipo_anag = %s AND data_pag IS NULL" - , chiaveCoge, chiaveCoge, codAnag, tipoAnag + , chiaveCoge, codAnag, tipoAnag ); List ctbScadList = UtilityDB.executeSimpleQueryDTO(conn, sql, CtbScad.class); if (ctbScadList == null || ctbScadList.isEmpty()) { @@ -701,14 +700,23 @@ public class ContabilImportService { if (!ctbMovt.getCtbMovr().isEmpty() && !existsAnomalia) { ctbMovt.setDescrizioneCaus(null) .setOperation(OperationType.INSERT); - ctbMovtList.add(ctbMovt); + //ctbMovtList.add(ctbMovt); + if (listAnomalie.isEmpty() || listAnomalie.stream().noneMatch(AnomalieDTO::isError)) { + entityProcessor.processEntity(ctbMovt, false, multiDBTransactionManager); + if (ctbMovt.getException() == null) { + ctbMovtList.add(ctbMovt); + } else { + throw new Exception(ctbMovt.getException()); + } + } } } - if (listAnomalie.isEmpty() || listAnomalie.stream().noneMatch(AnomalieDTO::isError)) { - return entityProcessor.processEntityList(ctbMovtList, true); - } - return new ArrayList<>(); +// if (listAnomalie.isEmpty() || listAnomalie.stream().noneMatch(AnomalieDTO::isError)) { +// return entityProcessor.processEntityList(ctbMovtList, true); +// } + return UtilityEntity.toCustomEntity(ctbMovtList); + //return new ArrayList<>(); } public List importTassiDiCambio(String type, String format) throws Exception { diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java b/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java index 641dfd698b..7bea62a433 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java @@ -36,4 +36,12 @@ public class MovimentiContabiliController { return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.setTipoBene(numCmov, riga, tipoBene)); } + @PostMapping(value = "delete") + public @ResponseBody + ServiceRestResponse delete(HttpServletRequest request, + @RequestParam String whereCond) throws Exception { + + return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.delete(whereCond)); + } + } diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java b/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java index 77a694b400..8ee5712eec 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java @@ -89,4 +89,23 @@ public class MovimentiContabiliServices { return save(ctbMovt); } + + public List delete(String whereCond) throws Exception { + String sql = "SELECT num_cmov " + + " FROM " + CtbMovt.ENTITY + + " WHERE " + whereCond; + + List ctbMovts = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, CtbMovt.class); + + if ( ctbMovts == null || ctbMovts.isEmpty()) { + throw new Exception("Impossibile nessun movimento da cancellare."); + } + + ctbMovts.stream().forEach(x->{x.setOperation(OperationType.DELETE);}); + + List entityBaseList = entityProcessor.processEntityList(ctbMovts, false); + + UtilityEntity.throwEntitiesException(entityBaseList); + return ctbMovts; + } } From 532aa91b239367b790a8c697a91294ab29eae965 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 24 Oct 2025 16:14:23 +0200 Subject: [PATCH 24/28] Aggiunti campi su CtbAmac --- .../it/integry/ems_model/entity/CtbAmac.java | 26 +++++++++++++++++++ .../it/integry/ems_model/entity/CtbCoan.java | 1 + 2 files changed, 27 insertions(+) diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java b/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java index 10ce5666f9..500254d7f4 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java @@ -65,6 +65,14 @@ public class CtbAmac extends EntityBase { @SqlField(value = "flag_attivo", nullable = false, defaultObjectValue = "1") private Boolean flagAttivo; + @SqlField(value = "cod_mdep") + @FK(tableName = MtbDepoPosizioni.ENTITY) + private String codMdep; + + @SqlField(value = "posizione") + @FK(tableName = MtbDepoPosizioni.ENTITY) + private String posizione; + @EntityChild private List crlAmacArt = new ArrayList<>(); @@ -234,6 +242,24 @@ public class CtbAmac extends EntityBase { return this; } + public String getCodMdep() { + return codMdep; + } + + public CtbAmac setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public CtbAmac setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + @Override protected void insertChilds() throws Exception { for (CrlAmacArt crlAmacArt : getCrlAmacArt()) { diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/CtbCoan.java b/ems-core/src/main/java/it/integry/ems_model/entity/CtbCoan.java index fe842d16d3..f29bb9f333 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/CtbCoan.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/CtbCoan.java @@ -36,6 +36,7 @@ public class CtbCoan extends EntityBase { @SqlField(value = "cod_prod", maxLength = 15, nullable = false) @FK(tableName = MtbAart.ENTITY, columnName = "cod_mart") + @FK(tableName = MtbPartitaMag.ENTITY, columnName = "cod_mart") private String codProd; @SqlField(value = "partita_mag_prod", maxLength = 20, nullable = true) From b666064d15d06f7ec286de1914ccbf87847d7562 Mon Sep 17 00:00:00 2001 From: FabioN Date: Fri, 24 Oct 2025 18:12:04 +0200 Subject: [PATCH 25/28] Condizione per Florapulia di gestione esenzione articolo prima del cliente (DA CANCELLARE QUANDO NON SARANNO PIU' NOSTRTI CLIENTI) --- .../model/Migration_20251024153544.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024153544.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024153544.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024153544.java new file mode 100644 index 0000000000..306feb00a1 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024153544.java @@ -0,0 +1,23 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251024153544 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetup("GTB_ALIQ", "SETUP", "FLAG_PREC_ESENZIONE_ARTICOLO", "N", +"Se impostato a S allora quando c'è l'esenzione del cliente e quella dell'articolo ha precedenza quella dell'articolo", false, null, false, false, +false, false, false, null, false, null); + } + + @Override + public void down() throws Exception { + + } + +} From 797c5c7736cbc75a3640f3a6aa5fa9c8d97ab8e9 Mon Sep 17 00:00:00 2001 From: MinaR Date: Fri, 24 Oct 2025 19:19:54 +0200 Subject: [PATCH 26/28] Refactor Depositi and MovimentiContabili services and controllers; add migration for foreign key constraints --- .../model/Migration_20251024175524.java | 30 +++++++ .../ems/rules/completing/PackagesRules.java | 10 ++- .../it/integry/ems_model/entity/CtbAmac.java | 1 - .../it/integry/ems_model/entity/MtbDepo.java | 4 +- .../ems_model/entity/MtbDepoPosizioni.java | 26 ++++-- .../MovimentiContabiliController.java | 13 +-- ...es.java => MovimentiContabiliService.java} | 24 ++--- .../controller/DepositiController.java | 32 +++++++ .../ems/logistic/service/DepositiService.java | 88 +++++++++++++++++++ 9 files changed, 197 insertions(+), 31 deletions(-) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024175524.java rename ems-engine/src/main/java/it/integry/ems/contabil/service/{MovimentiContabiliServices.java => MovimentiContabiliService.java} (86%) create mode 100644 ems-engine/src/main/java/it/integry/ems/logistic/controller/DepositiController.java create mode 100644 ems-engine/src/main/java/it/integry/ems/logistic/service/DepositiService.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024175524.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024175524.java new file mode 100644 index 0000000000..e41ce342f3 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251024175524.java @@ -0,0 +1,30 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20251024175524 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement( + "exec DropForeignKey 'ctb_amac', 'mtb_depo_posizioni'", + "exec DropForeignKey 'jrl_fase_posizioni', 'mtb_depo_posizioni'", + "exec DropPrimaryKey 'mtb_depo_posizioni'"); + + dropIndex("mtb_depo_posizioni", "ix_mtb_depo_posizioni_unique"); + + executeStatement("alter table mtb_depo_posizioni add constraint pk_mtb_depo_posizioni primary key ( posizione)", + "alter table ctb_amac add constraint fk_ctb_amac_mtb_depo_posizioni foreign key (posizione) references mtb_depo_posizioni(posizione)", + "alter table jrl_fase_posizioni add constraint fk_jrl_fase_posizioni_mtb_depo_posizioni foreign key (posizione) references mtb_depo_posizioni(posizione)" + ); + + } + + @Override + public void down() throws Exception { + } +} \ No newline at end of file diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java index d95046a6a5..6aefea3be2 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java @@ -332,14 +332,19 @@ public class PackagesRules extends QueryRules { } public static HashMap calcPeso(Connection conn, MtbColr entity) throws Exception { - String sql = + String sql = "select cifre_dec from mtb_unt_mis where flag_unita_kg = 'S'"; + Integer cifreDec = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql); + + if ( cifreDec == null ) { cifreDec = 5; } + + sql = "SELECT mtb_aart.unt_mis, " + " mtb_aart.tara_kg, " + " mtb_aart.peso_kg, " + " case when mtb_aart.flag_peso_egalizzato = 1 THEN mtb_aart.qta_cnf ELSE 1 END * mtb_aart.peso_kg as 'peso_egalizzato', " + " mtb_unt_mis.flag_unita_kg, " + " mtb_aart.flag_peso_egalizzato, " + - " ISNULL((select cifre_dec from mtb_unt_mis where flag_unita_kg = 'S'), 5) as cifre_dec " + + " ISNULL((), 5) as cifre_dec " + " FROM mtb_aart INNER JOIN mtb_unt_mis ON mtb_aart.unt_mis = mtb_unt_mis.unt_mis " + " WHERE mtb_aart.cod_mart = " + UtilityDB.valueToString(entity.getCodMart()); @@ -352,7 +357,6 @@ public class PackagesRules extends QueryRules { String flagUnitaKg = (String) queryResults.get("flag_unita_kg"); BigDecimal pesoKGEgalizzato = (BigDecimal) queryResults.get("peso_egalizzato"); Boolean pesoEgalizzato = (Boolean) queryResults.get("flag_peso_egalizzato"); - int cifreDec = ((BigDecimal) queryResults.get("cifre_dec")).intValue(); if ("S".equalsIgnoreCase(flagUnitaKg)) { pesoNetto = entity.getQtaCol(); diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java b/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java index 500254d7f4..327b7a3a77 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/CtbAmac.java @@ -66,7 +66,6 @@ public class CtbAmac extends EntityBase { private Boolean flagAttivo; @SqlField(value = "cod_mdep") - @FK(tableName = MtbDepoPosizioni.ENTITY) private String codMdep; @SqlField(value = "posizione") diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepo.java b/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepo.java index 294f6e8b15..ff4a01fdac 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepo.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepo.java @@ -138,7 +138,7 @@ public class MtbDepo extends EntityBase { @EntityChild private List mtbDepoIntercode = new ArrayList<>(); - @EntityChild + @EntityChild(value = 0) private List mtbDepoPosizioni = new ArrayList<>(); @EntityChild @@ -591,4 +591,6 @@ public class MtbDepo extends EntityBase { WtbDepo wtbDepo = new WtbDepo(); wtbDepo.deleteAllEntities(connection, this); } + + } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepoPosizioni.java b/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepoPosizioni.java index 7ca24f9b57..7355f842d5 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepoPosizioni.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/MtbDepoPosizioni.java @@ -10,6 +10,7 @@ import org.apache.logging.log4j.Logger; import org.kie.api.definition.type.PropertyReactive; import java.math.BigDecimal; +import java.util.Objects; @PropertyReactive @Table(MtbDepoPosizioni.ENTITY) @@ -22,7 +23,6 @@ public class MtbDepoPosizioni extends EntityBase { private static final long serialVersionUID = 1L; - @PK @SqlField(value = "cod_mdep", maxLength = 5, nullable = false) private String codMdep; @@ -62,6 +62,8 @@ public class MtbDepoPosizioni extends EntityBase { @SqlField(value = "tipo_prelievo") private TipoPrelievo tipoPrelievo; + private String posIsChanged; + @Priority(1) private StbPosizioni stbPosizioni; @@ -180,6 +182,15 @@ public class MtbDepoPosizioni extends EntityBase { return this; } + public String getPosIsChanged() { + return posIsChanged; + } + + public MtbDepoPosizioni setPosIsChanged(String posIsChanged) { + this.posIsChanged = posIsChanged; + return this; + } + public StbPosizioni getStbPosizioni() { return stbPosizioni; } @@ -190,10 +201,15 @@ public class MtbDepoPosizioni extends EntityBase { } @Override - protected void insertChilds() throws Exception { - // stbPosizioni.manageWithParentConnection(connection, dataCompleting); - // - // this.setIdPosizione(stbPosizioni.getId()); + public boolean equals(Object o) { + if (!(o instanceof MtbDepoPosizioni)) return false; + MtbDepoPosizioni that = (MtbDepoPosizioni) o; + return Objects.equals(getCodMdep(), that.getCodMdep()) && Objects.equals(getPosizione(), that.getPosizione()) && Objects.equals(getDescrizione(), that.getDescrizione()) && Objects.equals(isFlagMonoCollo(), that.isFlagMonoCollo()) && Objects.equals(getPriorita(), that.getPriorita()) && Objects.equals(getFlagSilosLiquidi(), that.getFlagSilosLiquidi()) && Objects.equals(getCapacita(), that.getCapacita()) && Objects.equals(getIdPosizione(), that.getIdPosizione()) && Objects.equals(getTipoMagazAutomatico(), that.getTipoMagazAutomatico()) && Objects.equals(getPostiPallet(), that.getPostiPallet()) && Objects.equals(getCodArea(), that.getCodArea()) && getTipoPrelievo() == that.getTipoPrelievo() && Objects.equals(getPosIsChanged(), that.getPosIsChanged()); + } + + @Override + public int hashCode() { + return Objects.hash(getCodMdep(), getPosizione(), getDescrizione(), isFlagMonoCollo(), getPriorita(), getFlagSilosLiquidi(), getCapacita(), getIdPosizione(), getTipoMagazAutomatico(), getPostiPallet(), getCodArea(), getTipoPrelievo(), getPosIsChanged()); } public enum TipoPrelievo implements IBaseEnum { diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java b/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java index 7bea62a433..e11d5d13ab 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/controller/MovimentiContabiliController.java @@ -1,8 +1,9 @@ package it.integry.ems.contabil.controller; import it.integry.common.var.CommonConstants; -import it.integry.ems.contabil.service.MovimentiContabiliServices; +import it.integry.ems.contabil.service.MovimentiContabiliService; import it.integry.ems.response.ServiceRestResponse; +import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems_model.entity.CtbMovt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; @@ -15,7 +16,9 @@ import javax.servlet.http.HttpServletRequest; @RequestMapping("movimenti-contabili") public class MovimentiContabiliController { @Autowired - private MovimentiContabiliServices movimentiContabiliServices; + private MovimentiContabiliService movimentiContabiliServices; + @Autowired + private MultiDBTransactionManager multiDBTransactionManager; @PostMapping(value = "save") public @ResponseBody @@ -23,7 +26,7 @@ public class MovimentiContabiliController { @RequestParam(CommonConstants.PROFILE_DB) String configuration, @RequestBody CtbMovt ctbMovt) throws Exception { - return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.save(ctbMovt)); + return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.save(multiDBTransactionManager, ctbMovt)); } @PostMapping(value = "setTipoBene") @@ -33,7 +36,7 @@ public class MovimentiContabiliController { @RequestParam Integer riga, @RequestParam (required = false) String tipoBene) throws Exception { - return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.setTipoBene(numCmov, riga, tipoBene)); + return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.setTipoBene(multiDBTransactionManager,numCmov, riga, tipoBene)); } @PostMapping(value = "delete") @@ -41,7 +44,7 @@ public class MovimentiContabiliController { ServiceRestResponse delete(HttpServletRequest request, @RequestParam String whereCond) throws Exception { - return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.delete(whereCond)); + return ServiceRestResponse.createPositiveResponse(movimentiContabiliServices.delete(multiDBTransactionManager,whereCond)); } } diff --git a/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java b/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliService.java similarity index 86% rename from ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java rename to ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliService.java index 8ee5712eec..b1eb272c10 100644 --- a/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliServices.java +++ b/ems-engine/src/main/java/it/integry/ems/contabil/service/MovimentiContabiliService.java @@ -1,15 +1,11 @@ package it.integry.ems.contabil.service; -import it.integry.ems.javabeans.RequestDataDTO; import it.integry.ems.service.EntityProcessor; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; -import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityEntity; import it.integry.ems_model.base.EntityBase; -import it.integry.ems_model.base.EntityInterface; import it.integry.ems_model.config.EmsRestConstants; 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.springframework.beans.factory.annotation.Autowired; @@ -17,19 +13,15 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.List; @Service -@Scope("request") -public class MovimentiContabiliServices { + +public class MovimentiContabiliService { @Autowired private EntityProcessor entityProcessor; - @Autowired - private MultiDBTransactionManager multiDBTransactionManager; - - public CtbMovt save(CtbMovt ctbMovt) throws Exception { + public CtbMovt save(MultiDBTransactionManager multiDBTransactionManager, CtbMovt ctbMovt) throws Exception { List entitiesToSave = new ArrayList<>(); if (ctbMovt.getNumCmov() != null && ctbMovt.getOperation() != OperationType.DELETE) { @@ -68,14 +60,14 @@ public class MovimentiContabiliServices { entitiesToSave = Collections.singletonList(ctbMovt); } - List entityRet = entityProcessor.processEntityList(entitiesToSave, true); + List entityRet = entityProcessor.processEntityList(entitiesToSave, multiDBTransactionManager, true); UtilityEntity.throwEntitiesException(entityRet); CtbMovt ctbMovtRet = entityRet.stream().filter(x->x instanceof CtbMovt).map(x->(CtbMovt)x).findFirst().orElse(null); return ctbMovtRet; } - public CtbMovt setTipoBene(Integer numCmov, Integer riga, String tipoBene) throws Exception { + public CtbMovt setTipoBene(MultiDBTransactionManager multiDBTransactionManager, Integer numCmov, Integer riga, String tipoBene) throws Exception { CtbMovt ctbMovt = new CtbMovt() .setNumCmov(numCmov); @@ -87,10 +79,10 @@ public class MovimentiContabiliServices { ctbMovi.setOperation(OperationType.UPDATE); ctbMovt.getCtbMovi().add(ctbMovi); - return save(ctbMovt); + return save(multiDBTransactionManager, ctbMovt); } - public List delete(String whereCond) throws Exception { + public List delete(MultiDBTransactionManager multiDBTransactionManager, String whereCond) throws Exception { String sql = "SELECT num_cmov " + " FROM " + CtbMovt.ENTITY + " WHERE " + whereCond; @@ -103,7 +95,7 @@ public class MovimentiContabiliServices { ctbMovts.stream().forEach(x->{x.setOperation(OperationType.DELETE);}); - List entityBaseList = entityProcessor.processEntityList(ctbMovts, false); + List entityBaseList = entityProcessor.processEntityList(ctbMovts, multiDBTransactionManager, false); UtilityEntity.throwEntitiesException(entityBaseList); return ctbMovts; diff --git a/ems-engine/src/main/java/it/integry/ems/logistic/controller/DepositiController.java b/ems-engine/src/main/java/it/integry/ems/logistic/controller/DepositiController.java new file mode 100644 index 0000000000..7474bb11b7 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/logistic/controller/DepositiController.java @@ -0,0 +1,32 @@ +package it.integry.ems.logistic.controller; + +import it.integry.common.var.CommonConstants; +import it.integry.ems.logistic.service.DepositiService; +import it.integry.ems.response.ServiceRestResponse; +import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; +import it.integry.ems_model.entity.MtbDepo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RestController +@Scope("request") +@RequestMapping("depositi") +public class DepositiController { + @Autowired + private DepositiService depositiService; + @Autowired + private MultiDBTransactionManager multiDBTransactionManager; + + @PostMapping(value = "save") + public @ResponseBody + ServiceRestResponse save(HttpServletRequest request, + @RequestParam(CommonConstants.PROFILE_DB) String configuration, + @RequestBody MtbDepo mtbDepo) throws Exception { + + return ServiceRestResponse.createPositiveResponse(depositiService.save(multiDBTransactionManager, mtbDepo)); + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/logistic/service/DepositiService.java b/ems-engine/src/main/java/it/integry/ems/logistic/service/DepositiService.java new file mode 100644 index 0000000000..1a1b207f7f --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/logistic/service/DepositiService.java @@ -0,0 +1,88 @@ +package it.integry.ems.logistic.service; + +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.types.OperationType; +import it.integry.ems_model.utility.UtilityDB; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class DepositiService { + @Autowired + private EntityProcessor entityProcessor; + + public MtbDepo save(MultiDBTransactionManager multiDBTransactionManager, MtbDepo mtbDepo) throws Exception { + List entityToSave = new ArrayList<>(); + + mtbDepo.getMtbDepoPosizioni().stream() + .forEach(x->x.setOperation(OperationType.INSERT_OR_UPDATE)); + + List posizioni = + mtbDepo. + getMtbDepoPosizioni().stream().filter(x -> x.getPosIsChanged() != null && x.getPosIsChanged().equalsIgnoreCase("S")) + .map(MtbDepoPosizioni::getPosizione) + .collect(Collectors.toList()); + + if (!posizioni.isEmpty()) { + + String sql = String.format( + "SELECT * FROM jrl_fase_posizioni WHERE posizione IN (%s)", + UtilityDB.listValueToString(posizioni)); + + List jrlFasePosizionis = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, JrlFasePosizioni.class); + + if (jrlFasePosizionis != null) { + jrlFasePosizionis.forEach(x -> + x + .setCodMdep(mtbDepo.getCodMdep()) + .setOperation(OperationType.UPDATE)); + entityToSave.addAll(jrlFasePosizionis); + } + sql = String.format( + "SELECT cod_cmac, cod_mdep, posizione FROM ctb_amac WHERE posizione IN (%s)", + UtilityDB.listValueToString(posizioni)); + + List ctbAmacs = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, CtbAmac.class); + + if (ctbAmacs != null) { + ctbAmacs.forEach(x -> + x + .setCodMdep(mtbDepo.getCodMdep()) + .setOperation(OperationType.UPDATE)); + entityToSave.addAll(ctbAmacs); + } + } + + List aree = mtbDepo.getMtbDepoArea().stream().map(x -> x.getCodArea()).collect(Collectors.toList()); + List mtbDepoAreas = mtbDepo.getMtbDepoPosizioni() + .stream() + .filter(x -> x.getCodArea() != null && !aree.contains(x.getCodArea())) + .map(x -> { + MtbDepoArea area = + new MtbDepoArea().setCodMdep(x.getCodMdep()) + .setCodArea(x.getCodArea()); + area.setOperation(OperationType.INSERT_OR_UPDATE); + return area; + }).collect(Collectors.toList()); + + + if (!mtbDepoAreas.isEmpty()) { + mtbDepo.getMtbDepoArea().addAll(mtbDepoAreas); + } + entityToSave.add(mtbDepo); + + List entityRet = entityProcessor.processEntityList(entityToSave, multiDBTransactionManager, true); + UtilityEntity.throwEntitiesException(entityRet); + + MtbDepo mtbDepoRet = entityRet.stream().filter(x -> x instanceof MtbDepo).map(x -> (MtbDepo) x).findFirst().orElse(null); + return mtbDepoRet; + } +} From 5848f82e4a85797eb80d0b154f31f5b81c0071ad Mon Sep 17 00:00:00 2001 From: MinaR Date: Fri, 24 Oct 2025 19:22:22 +0200 Subject: [PATCH 27/28] Refactor Depositi and MovimentiContabili services and controllers; add migration for foreign key constraints --- .../ems_model/entity/JrlFasePosizioni.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems_model/entity/JrlFasePosizioni.java diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/JrlFasePosizioni.java b/ems-core/src/main/java/it/integry/ems_model/entity/JrlFasePosizioni.java new file mode 100644 index 0000000000..d8e3a4b44a --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems_model/entity/JrlFasePosizioni.java @@ -0,0 +1,84 @@ +package it.integry.ems_model.entity; + +import org.apache.logging.log4j.LogManager; +import java.util.List; +import java.util.ArrayList; +import it.integry.ems_model.base.EntityBase; +import it.integry.ems_model.annotation.Master; +import org.kie.api.definition.type.PropertyReactive; +import it.integry.ems_model.annotation.Table; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.apache.logging.log4j.Logger; +import it.integry.ems_model.annotation.PK; +import it.integry.ems_model.annotation.Identity; +import it.integry.ems_model.annotation.SqlField; +import it.integry.ems_model.annotation.FK; + +@Master() +@PropertyReactive() +@Table(value = JrlFasePosizioni.ENTITY) +@JsonTypeName(value = JrlFasePosizioni.ENTITY) +public class JrlFasePosizioni extends EntityBase { + + public final static String ENTITY = "jrl_fase_posizioni"; + + private final static Long serialVersionUID = 1L; + + private final static Logger logger = LogManager.getLogger(); + + public JrlFasePosizioni() { + super(logger); + } + + @PK() + @Identity() + @SqlField(value = "id", nullable = false) + private Integer id; + + @SqlField(value = "cod_jfas", maxLength = 5, nullable = false) + @FK(tableName = JtbFasi.ENTITY, columnName = "cod_jfas") + private String codJfas; + + @SqlField(value = "cod_mdep", maxLength = 5, nullable = false) + private String codMdep; + + @SqlField(value = "posizione", maxLength = 40, nullable = false) + @FK(tableName = MtbDepoPosizioni.ENTITY, columnName = "posizione") + private String posizione; + + public Integer getId() { + return id; + } + + public JrlFasePosizioni setId(Integer id) { + this.id = id; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public JrlFasePosizioni setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public JrlFasePosizioni setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public JrlFasePosizioni setPosizione(String posizione) { + this.posizione = posizione; + return this; + } +} From 74dcedeba9d8e4ebbfaa7732ea925d3d0089c5cb Mon Sep 17 00:00:00 2001 From: AnthonyS Date: Fri, 24 Oct 2025 19:37:52 +0200 Subject: [PATCH 28/28] Fix ricalcolo peso netto e lordo mtb_colr se modificate le qta col --- .../it/integry/ems/rules/completing/PackagesRules.java | 8 ++++++++ ems-core/src/main/resources/rules/logistic.drl | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java index 6aefea3be2..d88de57a7c 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/PackagesRules.java @@ -350,6 +350,14 @@ public class PackagesRules extends QueryRules { HashMap queryResults = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); + if (((MtbColr) entity.getOriginalEntity()).getPesoNettoKg() != null && ((MtbColr) entity.getOriginalEntity()).getPesoLordoKg() != null) { + HashMap pesi = new HashMap(); + pesi.put("peso_netto", entity.getPesoNettoKg()); + pesi.put("peso_lordo", entity.getPesoLordoKg()); + + return pesi; + } + BigDecimal pesoNetto = BigDecimal.ZERO, pesoLordo = BigDecimal.ZERO; if (queryResults != null) { BigDecimal taraKg = (BigDecimal) queryResults.get("tara_kg"); diff --git a/ems-core/src/main/resources/rules/logistic.drl b/ems-core/src/main/resources/rules/logistic.drl index a0ac582f0d..cda3bfb3c0 100644 --- a/ems-core/src/main/resources/rules/logistic.drl +++ b/ems-core/src/main/resources/rules/logistic.drl @@ -349,7 +349,7 @@ rule "completePesoMtbColr" no-loop when eval(completeRulesEnabled) - $entity: MtbColr((pesoNettoKg == null || pesoLordoKg == null) && qtaCol != null && numCnf != null && qtaCnf != null && operation != OperationType.DELETE) + $entity: MtbColr(qtaCol != null && numCnf != null && qtaCnf != null && operation != OperationType.DELETE) then HashMap dati = PackagesRules.calcPeso(conn, $entity); modify ( $entity ) {