diff --git a/ems-core/src/main/java/it/integry/ems/file_formatter/csv/CsvMapper.java b/ems-core/src/main/java/it/integry/ems/file_formatter/csv/CsvMapper.java index e126fbdc98..42bd8bb88b 100644 --- a/ems-core/src/main/java/it/integry/ems/file_formatter/csv/CsvMapper.java +++ b/ems-core/src/main/java/it/integry/ems/file_formatter/csv/CsvMapper.java @@ -74,6 +74,7 @@ public class CsvMapper { public List deserialize(String csv, Class dtoClass, String splitChar) throws Exception { List outputList = null; String[] headers = null; + Integer rows = 0; String delimiter = UtilityString.identifyLineDelimiter(csv); ByteBuffer byteBuffer = ByteBuffer.wrap(csv.getBytes()); @@ -83,6 +84,7 @@ public class CsvMapper { for (int i = 0; i < byteBuffer.capacity(); i++) { line.append((char) byteBuffer.get()); if (line.toString().endsWith(delimiter)) { + rows++; if (firstLine) { firstLine = false; headers = line.toString().replace(delimiter, "").split(splitChar); @@ -105,37 +107,44 @@ public class CsvMapper { line = new StringBuilder(); continue; } - String[] datas = line.toString().replace(delimiter, "").split(splitChar); - T bean = (T) dtoClass.newInstance(); - for (int j = 0; j < datas.length; j++) { - String header = headers[j].trim(); - if (header.compareTo("") != 0) { - Field field = map.get(header.toLowerCase()); - if (field != null) { + try { + String[] datas = line.toString().replace(delimiter, "").split(splitChar); + T bean = (T) dtoClass.newInstance(); + for (int j = 0; j < datas.length; j++) { + String header = headers[j].trim(); + if (header.compareTo("") != 0) { + Field field = map.get(header.toLowerCase()); - DtoField dtoField = field.getAnnotation(DtoField.class); + if (field != null) { - field.setAccessible(true); + DtoField dtoField = field.getAnnotation(DtoField.class); + + field.setAccessible(true); + + Object columnValue; + if (field.getGenericType() != String.class && UtilityString.isNullOrEmpty(datas[j].trim())) { + columnValue = null; + } else { + columnValue = datas[j].trim(); + } + + Object o = SqlFieldHolder.applyConvert(columnValue, field.getGenericType()); + field.set(bean, o); - Object columnValue; - if (field.getGenericType() != String.class && UtilityString.isNullOrEmpty(datas[j].trim())) { - columnValue = null; - } else { - columnValue = datas[j].trim(); } - - Object o = SqlFieldHolder.applyConvert(columnValue, field.getGenericType()); - field.set(bean, o); - } } + line = new StringBuilder(); + if (outputList == null) { + outputList = new ArrayList(); + } + outputList.add(bean); + + } catch(Exception e) { + throw new Exception("ERRORE DI SINTASSI SU RIGA " + rows); } - line = new StringBuilder(); - if (outputList == null) { - outputList = new ArrayList(); - } - outputList.add(bean); + } } byteBuffer.clear(); diff --git a/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomer.java b/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomer.java index e6b202db88..683d4decbc 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomer.java +++ b/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomer.java @@ -18,7 +18,8 @@ public enum IntegryCustomer { IntegryCustomerDB.Auricchio_Ind05, IntegryCustomerDB.Auricchio_AuricchioSons), Biolevante(IntegryCustomerDB.Biolevante_Biolevante, - IntegryCustomerDB.Biolevante_BiolevanteStorico), + IntegryCustomerDB.Biolevante_BiolevanteStorico, + IntegryCustomerDB.Biolevante_TenutaSanMartino), Carelli(IntegryCustomerDB.Carelli_Carelli, IntegryCustomerDB.Carelli_GestFood, IntegryCustomerDB.Carelli_Chiuso, @@ -68,7 +69,8 @@ public enum IntegryCustomer { Frudis(IntegryCustomerDB.Frudis_Frudis), Gramm(IntegryCustomerDB.Gramm_Gramm, IntegryCustomerDB.Gramm_PrimeOlive, - IntegryCustomerDB.Gramm_ProveStage), + IntegryCustomerDB.Gramm_ProveStage, + IntegryCustomerDB.Gramm_2MHolding), Idrotecnica(IntegryCustomerDB.Idrotecnica_Idrotecnica), Igood(IntegryCustomerDB.Igood_Aida, IntegryCustomerDB.Igood_Igood, diff --git a/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomerDB.java b/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomerDB.java index 6cf423f0f2..7ef4c97fab 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomerDB.java +++ b/ems-core/src/main/java/it/integry/ems/migration/_base/IntegryCustomerDB.java @@ -22,6 +22,7 @@ public enum IntegryCustomerDB { Biolevante_Biolevante("biolevante_peppe"), Biolevante_BiolevanteStorico("biolevante_storico"), + Biolevante_TenutaSanMartino("tenutasanmartino"), Carelli_Carelli("carelli"), @@ -90,6 +91,7 @@ public enum IntegryCustomerDB { Gramm_Gramm("gramm_peppe"), Gramm_PrimeOlive("primeolive"), Gramm_ProveStage("grammprovestage"), + Gramm_2MHolding("2M_HOLDING"), Idrotecnica_Idrotecnica("idrotecnica"), diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250522150750.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250522150750.java index 2c32f1acf8..0d310f2769 100644 --- a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250522150750.java +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250522150750.java @@ -10,8 +10,6 @@ public class Migration_20250522150750 extends BaseMigration implements Migration if (isHistoryDB()) return; - if (isDMS()) return; - if (!existsTable( "stb_multiplier")) { executeStatement( "CREATE TABLE stb_multiplier\n" + "(\n" + @@ -21,6 +19,8 @@ public class Migration_20250522150750 extends BaseMigration implements Migration "INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)"); } + if (isDMS()) return; + createOrUpdateView("mvw_mtb_colr_storico_mov", "create view mvw_mtb_colr_storico_mov as \n" + "SELECT IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" + " mtb_colr.barcode_ul_in) AS barcode_ul,\n" + diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609130610.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609130610.java new file mode 100644 index 0000000000..d0a6c115e6 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609130610.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_20250609130610 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetup("w_mgiac_part_disp", "CB_AZZERAGIAC", "VISIBLE", "N", +"Impostare S/N per visualizzare o meno il pulsante Azzera Giacenza", false, null, false, false, +false, false, false, null, false, null); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609144558.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609144558.java new file mode 100644 index 0000000000..3f27f192ce --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609144558.java @@ -0,0 +1,52 @@ +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; +import it.integry.ems_model.utility.dto.IndexTableDTO; + +import java.util.ArrayList; +import java.util.List; + +public class Migration_20250609144558 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("alter table mtb_shelf_life_tolerance add cod_mgrp varchar(5);\n", + "alter table mtb_shelf_life_tolerance add constraint fk_mtb_shelf_life_tolerance_mtb_grup FOREIGN KEY (cod_mgrp) REFERENCES mtb_grup\n"); + + if (isCustomerDb(IntegryCustomerDB.Carelli_Format)){ + executeStatement("update mtb_shelf_life_tolerance set cod_mgrp = '02'\n", + "insert into mtb_shelf_life_tolerance (shelf_life_min, shelf_life_max, rate_to_tolerance, cod_mgrp)\n" + + "select mtb_shelf_life_tolerance.shelf_life_min, \n" + + "mtb_shelf_life_tolerance.shelf_life_max, \n" + + "mtb_shelf_life_tolerance.rate_to_tolerance, \n" + + "mtb_grup.cod_mgrp\n" + + "from mtb_grup cross apply mtb_shelf_life_tolerance\n" + + "where tipo_mgrp is null\n" + + "and exists (select * from mtb_aart where mtb_aart.cod_mgrp = mtb_grup.cod_mgrp and mtb_aart.gg_scad_partita >0)\n" + + "and mtb_grup.cod_mgrp not in (select cod_mgrp from mtb_shelf_life_tolerance)"); + } + + executeStatement("alter table mtb_shelf_life_tolerance alter column cod_mgrp varchar(5) not null;"); + + List columnsIndex = new ArrayList<>(); + columnsIndex.add(new IndexTableDTO.ColumnIndex("cod_mgrp")); + columnsIndex.add(new IndexTableDTO.ColumnIndex("shelf_life_min")); + IndexTableDTO indexTableDTO = new IndexTableDTO() + .setTableName("mtb_shelf_life_tolerance") + .setIndexName("idx_mtb_shelf_life_tolerance_unique") + .setColumnsIndex(columnsIndex) + .setUnique(true) + .setOverride(true); + createIndex(indexTableDTO); + + } + + @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_20250609185006.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609185006.java new file mode 100644 index 0000000000..3b1d28a18f --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250609185006.java @@ -0,0 +1,22 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; +import it.integry.ems_model.utility.Query; + +public class Migration_20250609185006 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + String descrizione = "Questa setup indica i giorni di scadenza da controllore, è configurabile per tipo documento. Può contenere un numero oppure un json con questa struttura [{\"codMgrp\":\"02\",\"gg\":5}] per differenziare la setup per gruppo merceologico."; + executeStatement(Query.format("update stb_gest_setup SET description = %S where gest_name = %S AND section = %S AND KEY_SECTION = %S", + descrizione, "PVM","DOC_INTERNI","DAYS_TO_EXP")); + } + + @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_20250610105414.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610105414.java new file mode 100644 index 0000000000..0c60652665 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610105414.java @@ -0,0 +1,28 @@ +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_20250610105414 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("WINACCESS", "SETUP", "FILTRA_REPARTI_LAV", "N", +"filtra i reparti disponibili controllando il reparto assegnato all'utente", false, "SI_NO", false, false, +false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'"); + if (isCustomer(IntegryCustomer.Smetar)) { + updateSetupValue("WINACCESS", "SETUP", "FILTRA_REPARTI_LAV", "S"); + } + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610125552.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610125552.java new file mode 100644 index 0000000000..e4d63dcb7f --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610125552.java @@ -0,0 +1,19 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250610125552 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + enableSaveToRest("mdepo"); + } + + @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_20250610152544.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610152544.java new file mode 100644 index 0000000000..a327e33ad4 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610152544.java @@ -0,0 +1,267 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250610152544 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if (isDMS()) return; + + createOrUpdateView("[dbo].[vvw_sit_consegneXcommessa]", "CREATE VIEW [dbo].[vvw_sit_consegneXcommessa] as \n" + + "SELECT \n" + + " ordv.gestione AS gestione,\n" + + " ordv.cod_jcom AS cod_jcom, \n" + + " ordv.data_ord AS data_ord,\n" + + " ordv.num_ord AS num_ord,\n" + + " ordv.rif_ord AS rif_ord,\n" + + " ordv.id_viaggio AS id_viaggio,\n" + + " ordv.cod_mart AS cod_mart,\n" + + " ordv.cod_alis AS cod_alis,\n" + + " ISNULL(ordv.cod_art_for, ordv.cod_mart) AS cod_art_for,\n" + + " ISNULL(ordv.descrizione_estesa, ordv.descrizione) AS descrizione,\n" + + " SUM(ordv.qta_ord) AS qta_ord,\n" + + " ISNULL(orda.qta_da_evadere, 0) AS qta_acq,\n" + + " CASE WHEN ISNULL(orda.qta_da_evadere, 0) = 0 THEN NULL ELSE MAX(orda.data_cons) END AS data_cons_acq,\n" + + " ISNULL(colv.qta_col, 0) AS qta_riservata,\n" + + " CASE\n" + + " WHEN ISNULL(mtb_part.qta_esistente, 0) < 0 THEN SUM(ISNULL(cola.qta_col, 0))\n" + + " ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END AS qta_disp,\n" + + " SUM(ordv.qta_evasa) AS qta_consegnata,\n" + + " SUM(ordv.importoinevaso) AS importoinevaso,\n" + + " SUM(ordv.importoinevasoivato) AS importoinevasoivato,\n" + + " CASE\n" + + " WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= SUM(ISNULL(colv.qta_col, 0)) + (CASE\n" + + " WHEN ISNULL(mtb_part.qta_esistente, 0) < 0\n" + + " THEN SUM(ISNULL(cola.qta_col, 0))\n" + + " ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END)\n" + + " THEN SUM(ordv.importoinevaso)\n" + + " ELSE (SUM(ISNULL(colv.qta_col, 0)) + (CASE\n" + + " WHEN SUM(ISNULL(cola.qta_col, 0)) +\n" + + " ISNULL(mtb_part.qta_esistente, 0) > 0\n" + + " THEN SUM(ISNULL(cola.qta_col, 0)) + ISNULL(mtb_part.qta_esistente, 0)\n" + + " ELSE 0 END)) * SUM(ordv.importoinevaso) /\n" + + " (SUM(ordv.qta_ord) - SUM(ordv.qta_evasa)) END AS importoevadibile,\n" + + " ordv.unt_ord AS unt_ord,\n" + + " ordv.term_cons,\n" + + " jtb_comt.descrizione AS commessa,\n" + + " CASE\n" + + " WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= 0 THEN 'CONSEGNATO'\n" + + " WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= SUM(ISNULL(colv.qta_col, 0)) + CASE\n" + + " WHEN ISNULL(mtb_part.qta_esistente, 0) < 0\n" + + " THEN SUM(ISNULL(cola.qta_col, 0))\n" + + " ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END\n" + + " THEN 'DISPONIBILE'\n" + + " ELSE 'NON DISPONIBILE' END AS statoriga,\n" + + " SUM(ordv.importorigaord) AS importoriga,\n" + + " ordv.data_cons AS data_cons_vend,\n" + + " gtb_anag.rag_soc AS cliente,\n" + + " ISNULL(vtb_dest.indirizzo, gtb_anag.indirizzo) AS indirizzo,\n" + + " CASE WHEN vtb_dest.indirizzo IS NULL THEN gtb_anag.citta ELSE vtb_dest.citta END AS citta,\n" + + " CASE\n" + + " WHEN ISNULL(vtb_dest.destinatario, '') <> gtb_anag.rag_soc AND vtb_dest.destinatario IS NOT NULL\n" + + " THEN vtb_dest.destinatario\n" + + " ELSE NULL END AS destinatario,\n" + + " ordv.cod_vage,\n" + + " vtb_agen.rag_soc AS agente,\n" + + " ordv.partita_mag,\n" + + " orda.gestione_rif,\n" + + " gtb_anag.cod_anag AS cod_anag,\n" + + " ordv.num_ord_provv AS num_ord_provv,\n" + + " ordv.flag_sospeso AS flag_sospeso,\n" + + " MIN(ordv.pos_riga) AS pos_riga,\n" + + " ordv.controllato_da AS controllato_da,\n" + + " gtb_anag.e_mail AS e_mail,\n" + + " ordv.data_ins_ord,\n" + + " ordv.flag_evaso,\n" + + " ordv.cod_paga,\n" + + " ordv.descrizione_paga,\n" + + " ordv.cod_vdes \n" + + " \n" + + "FROM gtb_anag,\n" + + " (SELECT dtb_ordt.gestione,\n" + + " cod_vage,\n" + + " cod_anag,\n" + + " cod_vdes,\n" + + " term_cons,\n" + + " dtb_ordr.unt_ord,\n" + + " dtb_ordr.cod_jcom,\n" + + " dtb_ordr.cod_mart,\n" + + " dtb_ordr.cod_alis,\n" + + " dtb_ordr.cod_art_for,\n" + + " dtb_ordt.data_ord,\n" + + " dtb_ordt.num_ord,\n" + + " dtb_ordt.rif_ord,\n" + + " dtb_ordr.descrizione,\n" + + " dtb_ordr.descrizione_estesa,\n" + + " dtb_ordr.data_cons,\n" + + " dtb_ordr.riga_ord,\n" + + " dtb_ordr.qta_ord,\n" + + " dtb_ordr.qta_evasa,\n" + + " dtb_ordr.cod_mdep,\n" + + " dtb_ordr.flag_evaso,\n" + + " SUM(dtb_ordr.qta_ord * dtb_ordr.val_unt * (1 - sconto1 / 100) * (1 - sconto2 / 100) * (1 - sconto3 / 100) *\n" + + " (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) * (1 - sconto7 / 100) *\n" + + " (1 - sconto8 / 100)) AS importorigaord,\n" + + " SUM(CASE\n" + + " WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" + + " (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt * (1 - sconto1 / 100) *\n" + + " (1 - sconto2 / 100) * (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) *\n" + + " (1 - sconto6 / 100) * (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" + + " ELSE 0 END) AS importoinevaso,\n" + + " SUM(CASE\n" + + " WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" + + " (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" + + " (1 + gtb_aliq.perc_aliq / 100) * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" + + " (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" + + " (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" + + " ELSE 0 END) AS importoinevasoivato,\n" + + " dtb_ordr.partita_mag,\n" + + " dtb_ordt.num_ord_provv,\n" + + " dtb_ordt.flag_sospeso,\n" + + " dtb_ordr.pos_riga,\n" + + " dtb_ordt.controllato_da,\n" + + " dtb_ordt.data_ins_ord,\n" + + " dtb_ordr.id_viaggio,\n" + + " dtb_ordt.cod_paga,\n" + + " dtb_ordt.descrizione_paga\n" + + " FROM dtb_ordt,\n" + + " dtb_ordr\n" + + " LEFT OUTER JOIN gtb_aliq ON dtb_ordr.cod_aliq = gtb_aliq.cod_aliq\n" + + " WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" + + " AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" + + " AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" + + " AND dtb_ordt.gestione = 'V'\n" + + " AND dtb_ordr.cod_mart IS NOT NULL\n" + + " AND dtb_ordt.flag_annulla = 'N'\n" + + " AND dtb_ordr.flag_evaso <> 'A'\n" + + " GROUP BY dtb_ordt.gestione, cod_vage, cod_anag, cod_vdes, term_cons, dtb_ordr.unt_ord, dtb_ordr.cod_jcom,\n" + + " dtb_ordr.cod_mart, dtb_ordr.cod_alis, dtb_ordr.cod_art_for, dtb_ordt.data_ord, dtb_ordt.num_ord,\n" + + " dtb_ordt.rif_ord, dtb_ordr.descrizione, dtb_ordr.descrizione_estesa, dtb_ordr.data_cons,\n" + + " dtb_ordr.riga_ord, dtb_ordr.qta_ord, dtb_ordr.qta_evasa, dtb_ordr.cod_mdep, dtb_ordr.flag_evaso,\n" + + " dtb_ordr.partita_mag, dtb_ordt.num_ord_provv, dtb_ordt.flag_sospeso, dtb_ordr.pos_riga,\n" + + " dtb_ordt.controllato_da, dtb_ordt.data_ins_ord, dtb_ordr.id_viaggio, dtb_ordt.cod_paga,\n" + + " dtb_ordt.descrizione_paga) ordv\n" + + " LEFT OUTER JOIN vtb_dest ON ordv.cod_anag = vtb_dest.cod_anag AND ordv.cod_vdes = vtb_dest.cod_vdes\n" + + " LEFT OUTER JOIN vtb_agen ON ordv.cod_vage = vtb_agen.cod_vage\n" + + " LEFT OUTER JOIN jtb_comt ON ordv.cod_jcom = jtb_comt.cod_jcom\n" + + " LEFT OUTER JOIN ( /*Ordini di acquisto a fornitori*/ SELECT dtb_ordr.gestione,\n" + + " dtb_ordr.flag_evaso,\n" + + " MAX(dtb_ordr.data_cons) AS data_cons,\n" + + " dtb_ordr.cod_mart,\n" + + " dtb_ordr.cod_col,\n" + + " dtb_ordr.cod_tagl,\n" + + " dtb_ordr.cod_jcom,\n" + + " SUM(qta_ord - qta_evasa) AS qta_da_evadere,\n" + + " dtb_ordt.gestione_rif\n" + + " FROM dtb_ordt,\n" + + " dtb_ordr\n" + + " WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" + + " AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" + + " AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" + + " AND dtb_ordt.gestione = 'A'\n" + + " AND dtb_ordt.flag_sospeso = 'N'\n" + + " AND dtb_ordt.flag_annulla = 'N'\n" + + " AND dtb_ordr.flag_evaso = 'I'\n" + + " AND dtb_ordr.qta_ord > dtb_ordr.qta_evasa\n" + + " GROUP BY dtb_ordr.gestione,\n" + + " dtb_ordr.flag_evaso, /*dtb_ordr.data_cons,*/\n" + + " dtb_ordr.cod_mart, dtb_ordr.cod_col,\n" + + " dtb_ordr.cod_tagl, dtb_ordr.cod_jcom,\n" + + " dtb_ordt.gestione_rif) orda\n" + + " ON ordv.cod_jcom = orda.cod_jcom AND ordv.cod_mart = orda.cod_mart AND orda.gestione = 'A' AND\n" + + " orda.flag_evaso = 'I'\n" + + " LEFT OUTER JOIN ( /*Colli di vendita già preparati e accantonati per commessa*/ SELECT cod_mart,\n" + + " isnull(mtb_colr.cod_jcom, dtb_ordt.cod_jcom) as cod_jcom,\n" + + " mtb_colr.data_ord,\n" + + " mtb_colr.num_ord,\n" + + " riga_ord,\n" + + " mtb_colt.gestione,\n" + + " SUM(qta_col) AS qta_col\n" + + " FROM mtb_colr inner join mtb_colt on mtb_colr.gestione = mtb_colt.gestione and\n" + + " mtb_colr.data_collo = mtb_colt.data_collo and\n" + + " mtb_colr.ser_collo = mtb_colt.ser_collo and\n" + + " mtb_colr.num_collo = mtb_colt.num_collo\n" + + " inner join dtb_ordt on dtb_ordt.data_ord=mtb_colr.data_ord and\n" + + " dtb_ordt.num_ord=mtb_colr.num_ord and\n" + + " dtb_ordt.gestione=mtb_colr.gestione\n" + + " \n" + + " WHERE mtb_colt.gestione = 'V'\n" + + " AND mtb_colt.cod_dtip IS NULL\n" + + " \n" + + " \n" + + " GROUP BY cod_mart, mtb_colr.cod_jcom, dtb_ordt.cod_jcom,\n" + + " mtb_colr.data_ord,\n" + + " mtb_colr.num_ord,\n" + + " riga_ord,\n" + + " mtb_colt.gestione) colv\n" + + " ON ordv.gestione = colv.gestione AND ordv.data_ord = colv.data_ord AND\n" + + " ordv.num_ord = colv.num_ord AND ordv.riga_ord = colv.riga_ord AND\n" + + " ordv.cod_mart = colv.cod_mart AND ordv.cod_jcom = colv.cod_jcom\n" + + " LEFT OUTER JOIN ( /*Colli di acquisto o produzione in giacenza con commessa esclusi quelli di reso a fornitore o posizionati in aree escluse dal picking*/ SELECT cod_mart, cod_mdep, cod_jcom AS cod_jcom, SUM(qta_col) AS qta_col\n" + + " FROM mvw_sitart_udc_det_inventario\n" + + " WHERE (gestione = 'A' OR gestione = 'L')\n" + + " AND ISNULL(cod_jcom, 'MAG') <> 'MAG'\n" + + " AND ISNULL(priorita, 0) >= 0\n" + + " AND segno = 1\n" + + " GROUP BY cod_mart, cod_mdep, cod_jcom) cola\n" + + " ON ordv.cod_mdep = cola.cod_mdep AND ordv.cod_mart = cola.cod_mart AND\n" + + " ordv.cod_jcom = cola.cod_jcom\n" + + " LEFT OUTER JOIN ( /*Colli di acquisto o produzione in giacenza senza commessa, esclusi quelli di reso a fornitore o posizionati in aree escluse dal picking*/ SELECT cod_mart, cod_mdep, SUM(qta_col) AS qta_esistente\n" + + " FROM mvw_sitart_udc_det_inventario\n" + + " WHERE (gestione = 'A' OR gestione = 'L')\n" + + " AND (cod_jcom IS NULL OR cod_jcom = 'MAG')\n" + + " AND ISNULL(priorita, 0) >= 0\n" + + " AND segno = 1\n" + + " GROUP BY cod_mart, cod_mdep) mtb_part\n" + + " ON ordv.cod_mdep = mtb_part.cod_mdep AND ordv.cod_mart = mtb_part.cod_mart\n" + + "WHERE gtb_anag.cod_anag = ordv.cod_anag\n" + + "GROUP BY ordv.gestione ,\n" + + " ordv.cod_jcom ,\n" + + " ordv.data_ord ,\n" + + " ordv.num_ord ,\n" + + " ordv.rif_ord ,\n" + + " ordv.id_viaggio ,\n" + + " ordv.cod_mart ,\n" + + " ordv.cod_alis ,\n" + + " ISNULL(ordv.cod_art_for, ordv.cod_mart) ,\n" + + " ISNULL(ordv.descrizione_estesa, ordv.descrizione),\n" + + " ISNULL(orda.qta_da_evadere, 0) ,\n" + + " ISNULL(colv.qta_col, 0) ,\n" + + " mtb_part.qta_esistente ,\n" + + " ordv.unt_ord ,\n" + + " ordv.term_cons,\n" + + " jtb_comt.descrizione ,\n" + + " ordv.data_cons,\n" + + " gtb_anag.rag_soc,\n" + + " ISNULL(vtb_dest.indirizzo, gtb_anag.indirizzo),\n" + + " vtb_dest.indirizzo,\n" + + " vtb_dest.destinatario,\n" + + " gtb_anag.citta,\n" + + " vtb_dest.citta,\n" + + " ordv.cod_vage,\n" + + " vtb_agen.rag_soc ,\n" + + " ordv.partita_mag,\n" + + " orda.gestione_rif,\n" + + " gtb_anag.cod_anag ,\n" + + " ordv.num_ord_provv ,\n" + + " ordv.flag_sospeso ,\n" + + " ordv.controllato_da ,\n" + + " gtb_anag.e_mail ,\n" + + " ordv.data_ins_ord,\n" + + " ordv.flag_evaso,\n" + + " ordv.cod_paga,\n" + + " ordv.descrizione_paga,\n" + + " ordv.cod_vdes"); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610153451.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610153451.java new file mode 100644 index 0000000000..f168903837 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610153451.java @@ -0,0 +1,69 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250610153451 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if (isDMS()) return; + + createOrUpdateView("mvw_mtb_colr_storico_mov", "CREATE view [dbo].[mvw_mtb_colr_storico_mov] as \n" + + "SELECT IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" + + " mtb_colr.barcode_ul_in) AS barcode_ul,\n" + + " IIF(moltiplicatore = -1, mtb_colr.cod_mdep_out,\n" + + " mtb_colr.cod_mdep_in) AS cod_mdep,\n" + + " IIF(moltiplicatore = -1, mtb_colr.posizione_out,\n" + + " mtb_colr.posizione_in) AS posizione,\n" + + " (mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" + + " (IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" + + " moltiplicatore) AS num_cnf,\n" + + " mtb_colr.cod_mart,\n" + + " mtb_colr.cod_col,\n" + + " mtb_colr.cod_tagl,\n" + + " mtb_colr.partita_mag,\n" + + " (mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" + + " (mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" + + " IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" + + " mtb_aart.flag_qta_cnf_fissa,\n" + + " mtb_aart.unt_mis,\n" + + " mtb_aart.diacod,\n" + + " mtb_aart.descrizione_estesa,\n" + + " mtb_aart.cod_mgrp,\n" + + " mtb_aart.cod_msgr,\n" + + " mtb_aart.cod_mtip,\n" + + " mtb_aart.cod_mstp,\n" + + " mtb_aart.cod_msfa,\n" + + " mtb_aart.qta_cnf AS qta_cnf_anag,\n" + + " mtb_colt.data_vers,\n" + + " mtb_colr.datetime_row,\n" + + " mtb_colt.cod_anag,\n" + + " mtb_colt.cod_dtip,\n" + + " mtb_colt.data_doc,\n" + + " mtb_colt.ser_doc,\n" + + " mtb_colt.num_doc,\n" + + " mtb_colt.gestione,\n" + + " mtb_colt.data_collo,\n" + + " mtb_colt.num_collo,\n" + + " mtb_colt.ser_collo\n" + + "FROM dbo.mtb_colr\n" + + " INNER JOIN dbo.stb_multiplier ON (moltiplicatore = 1 AND mtb_colr.barcode_ul_in IS NOT NULL) OR\n" + + " (moltiplicatore = -1 AND mtb_colr.barcode_ul_out IS NOT NULL)\n" + + " INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" + + " INNER JOIN dbo.mtb_colt 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" + + "WHERE (segno = 1 or (segno = -1 and (moltiplicatore = -1 or (moltiplicatore = 1 AND isnull(mtb_colt.barcode_ul,'') <> IsNull(mtb_colr.barcode_ul_in,'')) )))"); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610161207.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610161207.java new file mode 100644 index 0000000000..8bf821f2b7 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250610161207.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_20250610161207 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("create table vtb_offr_storico \n" + + "(id_offerta bigint not null, \n" + + "cod_mart varchar(15) not null, \n" + + "qta_ord numeric(20,5) default 0 not null,\n" + + "qta_doc numeric(20,5) default 0 not null )\n", + "alter table vtb_offr_storico add constraint pk_vtb_offr_storico primary key (id_offerta, cod_mart)"); + } + + @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/DocOrdCalTotaliRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java index f488f04092..1fcfe612ea 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java @@ -522,7 +522,7 @@ public class DocOrdCalTotaliRules extends QueryRules { } boolean flagIvaInclusa = testata.getFlagPrzIva().equalsIgnoreCase("S"); - if (flagPrezziScontati) { + if (!flagPrezziScontati) { if (sconto1.compareTo(BigDecimal.ZERO) > 0) { sconti.add(sconto1); } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/MtbShelfLifeTolerance.java b/ems-core/src/main/java/it/integry/ems_model/entity/MtbShelfLifeTolerance.java index acf92161fe..4ad55c5fd7 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/MtbShelfLifeTolerance.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/MtbShelfLifeTolerance.java @@ -44,6 +44,9 @@ public class MtbShelfLifeTolerance extends EntityBase { @SqlField(value = "rate_to_tolerance", nullable = false) private BigDecimal rateToTolerance; + @SqlField(value = "cod_mgrp", nullable = false) + private String codMgrp; + public Long getId() { return id; } @@ -79,4 +82,13 @@ public class MtbShelfLifeTolerance extends EntityBase { this.rateToTolerance = rateToTolerance; return this; } + + public String getCodMgrp() { + return codMgrp; + } + + public MtbShelfLifeTolerance setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + return this; + } } diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/VtbOffrStorico.java b/ems-core/src/main/java/it/integry/ems_model/entity/VtbOffrStorico.java new file mode 100644 index 0000000000..0907e905c6 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems_model/entity/VtbOffrStorico.java @@ -0,0 +1,105 @@ +package it.integry.ems_model.entity; + +import it.integry.ems_model.base.EquatableEntityInterface; +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.SqlField; +import java.math.BigDecimal; +import java.util.Objects; + +@Master() +@PropertyReactive() +@Table(value = VtbOffrStorico.ENTITY) +@JsonTypeName(value = VtbOffrStorico.ENTITY) +public class VtbOffrStorico extends EntityBase implements EquatableEntityInterface { + public final static String ENTITY = "vtb_offr_storico"; + + private final static Long serialVersionUID = 1L; + + private final static Logger logger = LogManager.getLogger(); + + public VtbOffrStorico() { + super(logger); + } + + @PK() + @SqlField(value = "id_offerta", nullable = false) + private Long idOfferta; + + @PK() + @SqlField(value = "cod_mart", maxLength = 15, nullable = false) + private String codMart; + + @SqlField(value = "qta_ord", nullable = false) + private BigDecimal qtaOrd; + + @SqlField(value = "qta_doc", nullable = false) + private BigDecimal qtaDoc; + + public Long getIdOfferta() { + return idOfferta; + } + + public VtbOffrStorico setIdOfferta(Long idOfferta) { + this.idOfferta = idOfferta; + return this; + } + + public String getCodMart() { + return codMart; + } + + public VtbOffrStorico setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public VtbOffrStorico setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getQtaDoc() { + return qtaDoc; + } + + public VtbOffrStorico setQtaDoc(BigDecimal qtaDoc) { + this.qtaDoc = qtaDoc; + return this; + } + + @Override + public int hashCodeKey() { + return Objects.hash(getIdOfferta(), getCodMart()); + } + + @Override + public boolean equalsKey(VtbOffrStorico that) { + return Objects.equals(getIdOfferta(), that.getIdOfferta()) && Objects.equals(getCodMart(), that.getCodMart()); + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof VtbOffrStorico)) return false; + VtbOffrStorico that = (VtbOffrStorico) o; + return Objects.equals(getIdOfferta(), that.getIdOfferta()) && Objects.equals(getCodMart(), that.getCodMart()) && Objects.equals(getQtaOrd(), that.getQtaOrd()) && Objects.equals(getQtaDoc(), that.getQtaDoc()); + } + + @Override + public int hashCode() { + return Objects.hash(getIdOfferta(), getCodMart(), getQtaOrd(), getQtaDoc()); + } +} diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/VtbOfft.java b/ems-core/src/main/java/it/integry/ems_model/entity/VtbOfft.java index 49d34c733c..51dddef4c5 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/VtbOfft.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/VtbOfft.java @@ -78,6 +78,9 @@ public class VtbOfft extends EntityBase implements EquatableEntityInterface vtbOffr = new ArrayList<>(); + @EntityChild + private List vtbOffrStorico = new ArrayList<>(); + @Priority(1) private StbActivity stbActivity; @@ -228,6 +231,15 @@ public class VtbOfft extends EntityBase implements EquatableEntityInterface getVtbOffrStorico() { + return vtbOffrStorico; + } + + public VtbOfft setVtbOffrStorico(List vtbOffrStorico) { + this.vtbOffrStorico = vtbOffrStorico; + return this; + } + @Override public int hashCodeKey() { return Objects.hash(getIdOfferta()); diff --git a/ems-engine/src/main/java/it/integry/ems/product/export/services/Slim2kService.java b/ems-engine/src/main/java/it/integry/ems/product/export/services/Slim2kService.java index 0d0c346fe0..25ef400759 100644 --- a/ems-engine/src/main/java/it/integry/ems/product/export/services/Slim2kService.java +++ b/ems-engine/src/main/java/it/integry/ems/product/export/services/Slim2kService.java @@ -107,7 +107,8 @@ public class Slim2kService { " IIF(mtb_part.scorta_min IS NULL, 0, mtb_part.scorta_min) AS scorta_min " + "FROM format.dbo.mtb_aart" + " LEFT OUTER JOIN format.dbo.mtb_part ON mtb_aart.cod_mart = mtb_part.cod_mart AND mtb_part.cod_mdep = " + UtilityDB.valueToString(codMdep) + - " LEFT OUTER JOIN format.dbo.mtb_shelf_life_tolerance ON mtb_aart.gg_scad_partita between mtb_shelf_life_tolerance.shelf_life_min and mtb_shelf_life_tolerance.shelf_life_max " + + " LEFT OUTER JOIN format.dbo.mtb_shelf_life_tolerance ON mtb_aart.cod_mgrp = mtb_shelf_life_tolerance.cod_mgrp AND \n" + + " mtb_aart.gg_scad_partita between mtb_shelf_life_tolerance.shelf_life_min and mtb_shelf_life_tolerance.shelf_life_max " + " WHERE mtb_aart.flag_stato = 'A'" + " AND mtb_aart.cod_mart NOT IN" + " ('130100014', '040200962', '011000513', '011000475', '011000298', '011000252', '011000254', '011000819')"; diff --git a/ems-engine/src/main/java/it/integry/ems/product/importaz/dto/GriglieVenditaExcelDTO.java b/ems-engine/src/main/java/it/integry/ems/product/importaz/dto/GriglieVenditaExcelDTO.java index 36f7db9d79..66d35e71be 100644 --- a/ems-engine/src/main/java/it/integry/ems/product/importaz/dto/GriglieVenditaExcelDTO.java +++ b/ems-engine/src/main/java/it/integry/ems/product/importaz/dto/GriglieVenditaExcelDTO.java @@ -30,32 +30,38 @@ public class GriglieVenditaExcelDTO { } public GriglieVenditaExcelDTO addRiga(Integer ggSettimana, String codMart) { - LocalDate nextMonday = LocalDate.now().with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.MONDAY));; + LocalDate today = LocalDate.now(); LocalDate dataGriglia; - switch (ggSettimana) { - case 1: // Lunedì - dataGriglia = nextMonday; - break; - case 2: // Martedì - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.TUESDAY)); - break; - case 3: // Mercoledì - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); - break; - case 4: // Giovedì - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.THURSDAY)); - break; - case 5: // Venerdì - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.FRIDAY)); - break; - case 6: // Sabato - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SATURDAY)); - break; - case 7: // Domenica - dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SUNDAY)); - break; - default: - throw new IllegalArgumentException("Giorno della settimana non valido: " + ggSettimana); + + + if (today.getDayOfWeek().getValue() == ggSettimana.intValue()) { + dataGriglia = today; + } else { + switch (ggSettimana) { + case 1: // Lunedì + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.MONDAY)); + break; + case 2: // Martedì + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.TUESDAY)); + break; + case 3: // Mercoledì + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.WEDNESDAY)); + break; + case 4: // Giovedì + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.THURSDAY)); + break; + case 5: // Venerdì + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.FRIDAY)); + break; + case 6: // Sabato + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SATURDAY)); + break; + case 7: // Domenica + dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SUNDAY)); + break; + default: + throw new IllegalArgumentException("Giorno della settimana non valido: " + ggSettimana); + } } DatiGriglia riga = new DatiGriglia() .setCodMart(codMart) diff --git a/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java b/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java index f1b7be13e2..b9a7ea2198 100644 --- a/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java +++ b/ems-engine/src/main/java/it/integry/ems/product/service/ContrattiDiVenditaHandlerService.java @@ -95,57 +95,66 @@ public class ContrattiDiVenditaHandlerService { public List updateProgressivi(MultiDBTransactionManager multiDBTransactionManager) throws Exception { String sql = "WITH art as (\n" + - " select mtb_aart.cod_mart, IsNull(mtb_aart.id_art_equi, mtb_aart.cod_mart) as id_art_equi\n" + - " from mtb_aart left outer join mtb_aart_equi on mtb_aart.id_art_equi = mtb_aart_equi.id_art_equi and flag_equi_prezzo in ('T', 'V', 'P')\n" + - " ),\n" + - " ord AS\n" + - " (SELECT dtb_ordr.id_contratto,\n" + - " art.id_art_equi,\n" + - " SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" + - " FROM dtb_ordt\n" + - " INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" + - " dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" + - " dtb_ordt.num_ord = dtb_ordr.num_ord\n" + - " inner join art on dtb_ordr.cod_mart = art.cod_mart\n" + - " WHERE dtb_ordt.gestione = 'V'\n" + - " AND dtb_ordt.flag_annulla = 'N'\n" + - " AND dtb_ordt.flag_sospeso = 'N'\n" + - " AND dtb_ordr.flag_evaso = 'I'\n" + - " AND dtb_ordr.id_contratto IS NOT NULL\n" + - " GROUP BY dtb_ordr.id_contratto,\n" + - " art.id_art_equi\n" + - " )\n" + - " , doc AS (SELECT dtb_docr.id_contratto,\n" + - " art.id_art_equi,\n" + - " SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" + - " SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\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 dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" + - " inner join art on dtb_docr.cod_mart = art.cod_mart\n" + - " WHERE dtb_doct.gestione = 'V'\n" + - " AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" + - " AND dtb_docr.id_contratto IS NOT NULL\n" + - " GROUP BY dtb_docr.id_contratto,\n" + - " art.id_art_equi )\n" + - "SELECT DISTINCT vtb_offr.id_offerta,\n" + - " vtb_offr.cod_mart,\n" + - " ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) AS qta_ord,\n" + - " ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) AS qta_doc,\n" + - " ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" + - "FROM vtb_offr\n" + - " INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n" + - " inner join art on vtb_offr.cod_mart = art.cod_mart\n" + - " LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND art.id_art_equi = ord.id_art_equi\n" + - " LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND art.id_art_equi = doc.id_art_equi\n" + - "WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" + - " vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" + - " vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" + - " vtb_offt.stato_offerta = 3"; + " select mtb_aart.cod_mart, IsNull(mtb_aart.id_art_equi, mtb_aart.cod_mart) as id_art_equi\n" + + " from mtb_aart left outer join mtb_aart_equi on mtb_aart.id_art_equi = mtb_aart_equi.id_art_equi and flag_equi_prezzo in ('T', 'V', 'P')\n" + + " ),\n" + + " ord AS\n" + + " (SELECT dtb_ordr.id_contratto,\n" + + " art.id_art_equi,\n" + + " SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" + + " FROM dtb_ordt\n" + + " INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" + + " dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" + + " dtb_ordt.num_ord = dtb_ordr.num_ord\n" + + " inner join art on dtb_ordr.cod_mart = art.cod_mart\n" + + " WHERE dtb_ordt.gestione = 'V'\n" + + " AND dtb_ordt.flag_annulla = 'N'\n" + + " AND dtb_ordt.flag_sospeso = 'N'\n" + + " AND dtb_ordr.flag_evaso = 'I'\n" + + " AND dtb_ordr.id_contratto IS NOT NULL\n" + + " GROUP BY dtb_ordr.id_contratto,\n" + + " art.id_art_equi\n" + + " )\n" + + " , doc AS (SELECT dtb_docr.id_contratto,\n" + + " art.id_art_equi,\n" + + " SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" + + " SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\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 dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" + + " inner join art on dtb_docr.cod_mart = art.cod_mart\n" + + " WHERE dtb_doct.gestione = 'V'\n" + + " AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" + + " AND dtb_docr.id_contratto IS NOT NULL\n" + + " GROUP BY dtb_docr.id_contratto,\n" + + " art.id_art_equi )\n" + + ", storico AS (SELECT vtb_offr_storico.id_offerta,\n" + + " art.id_art_equi,\n" + + " sum(vtb_offr_storico.qta_ord) as qta_ord,\n" + + " sum(vtb_offr_storico.qta_doc) as qta_doc\n" + + " FROM vtb_offr_storico\n" + + " inner join art on vtb_offr_storico.cod_mart = art.cod_mart\n" + + " GROUP BY vtb_offr_storico.id_offerta,\n" + + " art.id_art_equi ) \n" + + "SELECT DISTINCT vtb_offr.id_offerta,\n" + + " vtb_offr.cod_mart,\n" + + " ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) + IsNull(storico.qta_ord, 0) AS qta_ord,\n" + + " ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) + IsNull(storico.qta_doc, 0) AS qta_doc,\n" + + " ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" + + "FROM vtb_offr\n" + + " INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n" + + " inner join art on vtb_offr.cod_mart = art.cod_mart\n" + + " LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND art.id_art_equi = ord.id_art_equi\n" + + " LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND art.id_art_equi = doc.id_art_equi\n" + + " LEFT OUTER JOIN storico ON vtb_offr.id_offerta = storico.id_offerta AND art.id_art_equi = storico.id_art_equi\n" + + "WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" + + " vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" + + " vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" + + " vtb_offt.stato_offerta = 3"; List vtbOffrs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, VtbOffr.class, OperationType.UPDATE); diff --git a/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/controller/PvmController.java b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/controller/PvmController.java index f5b2e58e6f..3ef6aea856 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/controller/PvmController.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/controller/PvmController.java @@ -38,6 +38,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -394,7 +396,7 @@ public class PvmController { } try { - List anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO); + List anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO); if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty()) return ServiceRestResponse.createEntityPositiveResponse(pvmServiceSave.saveDocFromPicking(docFromPickingDTO)); else { @@ -418,7 +420,7 @@ public class PvmController { } try { - List anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO); + List anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO); if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty()) return ServiceRestResponse.createPositiveResponse(); else { @@ -809,4 +811,17 @@ public class PvmController { } + @RequestMapping(value = "pvm/updateDataCons", method = RequestMethod.POST) + public @ResponseBody + ServiceRestResponse updateDataCons( + @RequestParam(CommonConstants.PROFILE_DB) String profileDB, + @RequestParam String gestione, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataOrd , + @RequestParam Integer numOrd, + @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataCons) throws Exception { + + return ServiceRestResponse.createPositiveResponse(pvmService.updateDataCons(gestione, dataOrd, numOrd, dataCons)); + + } + } \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/dto/CheckDocInterniShelfLifeDTO.java b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/dto/CheckDocInterniShelfLifeDTO.java new file mode 100644 index 0000000000..3c1aa78931 --- /dev/null +++ b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/dto/CheckDocInterniShelfLifeDTO.java @@ -0,0 +1,24 @@ +package it.integry.ems.retail.pvmRetail.dto; + +public class CheckDocInterniShelfLifeDTO { + private String codMgrp; + private Integer gg; + + public String getCodMgrp() { + return codMgrp; + } + + public CheckDocInterniShelfLifeDTO setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + return this; + } + + public Integer getGg() { + return gg; + } + + public CheckDocInterniShelfLifeDTO setGg(Integer gg) { + this.gg = gg; + return this; + } +} diff --git a/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java index 12b416d8b7..0a67822cc3 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java @@ -38,7 +38,6 @@ import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.system.service.SystemService; import it.integry.ems.user.UserSession; -import it.integry.ems.utility.UtilityDebug; import it.integry.ems.utility.UtilityEntity; import it.integry.ems_model.base.EntityBase; import it.integry.ems_model.coollection.Coollection; @@ -171,7 +170,7 @@ public class PvmService { " WHERE STB_GEST_SETUP_DEPO.citta_cons like '%" + citta + "%' " + " GROUP BY num_range, dstart, dEnd, num_cons_max, CITTA_CONS "; - List ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn,sql, OrdChkConsDTO.class); + List ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn, sql, OrdChkConsDTO.class); return ordChkConsDTO; @@ -1818,7 +1817,7 @@ public class PvmService { return mtbColtsToReturn; } - public List checkDocReso(DocFromPickingDTO docFromPickingDTO) throws Exception { + public List checkDocumentiInterni(DocFromPickingDTO docFromPickingDTO) throws Exception { List anomalieResiDTO = new ArrayList<>(); String codMdep = getCodMdep(requestDataDTO.getUsername()); @@ -1866,12 +1865,21 @@ public class PvmService { if (chkTracciabilita) { List> setupSectionDet = setupGest.getSetupSectionDet(multiDBTransactionManager.getPrimaryConnection(), "PVM", "DOC_INTERNI", "DAYS_TO_EXP", "dtb_tipi"); - String gg =""; + List checkDocInterniShelfLifeDTOS = new ArrayList<>(); + Integer gg = null; if (setupSectionDet != null && !setupSectionDet.isEmpty()) { - gg = setupSectionDet + String ret = setupSectionDet .stream() .filter(x -> x.get("val_col_rif") != null && ((String) x.get("val_col_rif")).equalsIgnoreCase(codDtip)) - .findFirst().map(x -> (String) x.get("value")).orElse(null); + .findFirst().map(x -> (String) x.get("value")).orElse(null); + if (!UtilityString.isNullOrEmpty(ret) ) { + try { + gg = Integer.parseInt(ret); + } catch (NumberFormatException ex) { + checkDocInterniShelfLifeDTOS = Arrays.asList(jsonObjectMapper.readValue(ret, CheckDocInterniShelfLifeDTO[].class)); + + } + } } sql = Query.format( @@ -1975,7 +1983,8 @@ public class PvmService { " movi.data_scad AS data_scad_acq,\n" + " movi.suddivisione,\n" + " mtb_aart.gg_scad_partita,\n" + - " movi.data_doc\n" + + " movi.data_doc,\n" + + " mtb_aart.cod_mgrp\n " + "FROM colli\n" + " INNER JOIN mtb_aart ON colli.cod_mart = mtb_aart.cod_mart\n" + " LEFT OUTER JOIN setup ON mtb_aart.cod_mgrp = setup.cod_mgrp\n" + @@ -1989,6 +1998,14 @@ public class PvmService { for (HashMap lotto : partiteErrate) { String codMart = UtilityHashMap.getValueIfExists(lotto, "cod_mart"); Date dataScad = UtilityHashMap.getValueIfExists(lotto, "data_scad"); + String codMgrp = UtilityHashMap.getValueIfExists(lotto, "cod_mgrp"); + + if (checkDocInterniShelfLifeDTOS != null && !checkDocInterniShelfLifeDTOS.isEmpty()) { + gg = checkDocInterniShelfLifeDTOS + .stream() + .filter(x -> x.getCodMgrp().equalsIgnoreCase(codMgrp)) + .map(x -> x.getGg()).findFirst().orElse(null); + } if (dataScad == null) { anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Inserire la data scadenza.")); continue; @@ -2005,7 +2022,7 @@ public class PvmService { continue; } - if (!UtilityString.isNullOrEmpty(gg) && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, Integer.parseInt(gg), UtilityDate.getTodayWithoutTime())) > 0) { + if (gg != null && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, gg, UtilityDate.getTodayWithoutTime())) > 0) { anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Impossibile effetture un reso di un articolo sotto scadenza.")); continue; } @@ -2028,8 +2045,8 @@ public class PvmService { if (qtaAcq != null && UtilityBigDecimal.greaterThan(UtilityHashMap.getValueIfExists(lotto, "qta_col"), qtaAcq)) { anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Quantità resa maggiore di quantità acquistata %s", qtaAcq))); } - } else if (!UtilityString.isNullOrEmpty(gg)) { - if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > Integer.parseInt(gg)) { + } else if (gg != null && !gestioneDoc.equalsIgnoreCase("A")) { + if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > gg) { anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Impossibile effetture un %S di un articolo con scadenza %s.", codDtip, UtilityDate.formatDate(dataScad, CommonConstants.DATE_FORMAT_DMY)))); continue; } @@ -2225,7 +2242,7 @@ public class PvmService { Integer numOrd = inputValue.get("numOrd").asInt() != 0 ? inputValue.get("numOrd").asInt() : null; if (numOrd == null) { - dataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(new Date()); + dataOrd = new SimpleDateFormat(DATE_FORMAT_YMD).format(new Date()); } String query = "SELECT mtb_depo.cod_anag, mtb_depo.cod_vdes " + @@ -2247,7 +2264,7 @@ public class PvmService { info.close(); wdtbOrdt.setGestione(gestione); - wdtbOrdt.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd)); + wdtbOrdt.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd)); wdtbOrdt.setNumOrd(numOrd); wdtbOrdt.setSerie(serie); wdtbOrdt.setCodAnag(codAnag); @@ -2271,7 +2288,7 @@ public class PvmService { //Letta la riga ord direttamente dal db. query = "SELECT riga_ord " + "FROM wdtb_ordr " - + "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd), CommonConstants.DATE_FORMAT_YMD) + " AND " + + "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd), DATE_FORMAT_YMD) + " AND " + " num_ord = " + numOrd + " AND " + " cod_mart = " + UtilityDB.valueToString(codStyle) + " AND " + " cod_col = " + UtilityDB.valueToString(codCol) + " AND " @@ -2292,7 +2309,7 @@ public class PvmService { if (rigaOrd != null) { wdtbOrdr.setOperation(OperationType.DELETE); - wdtbOrdr.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd)); + wdtbOrdr.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd)); wdtbOrdr.setNumOrd(numOrd); wdtbOrdr.setGestione(gestione); wdtbOrdr.setSerie(serie); @@ -2643,4 +2660,32 @@ public class PvmService { return null; return permessi.stream().collect(Collectors.groupingBy(PvmAuthorizationDTO::getUsername)); } + + public DtbOrdt updateDataCons(String gestione, Date dataOrd, Integer numOrd, Date dataCons) throws Exception { + if (dataCons == null) { + throw new Exception("Data di consegna non valida"); + } + + String sql = Query.format("SELECT * FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s", + gestione, dataOrd, numOrd); + + List dtbOrdrList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class); + + dtbOrdrList.stream().forEach(x -> { + x.setDataCons(dataCons); + x.setOperation(OperationType.UPDATE); + } + ); + + DtbOrdt dtbOrdt = new DtbOrdt() + .setGestione(gestione) + .setDataOrd(dataOrd) + .setNumOrd(numOrd) + .setDtbOrdr(dtbOrdrList); + dtbOrdt.setOperation(OperationType.NO_OP); + + entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager); + return dtbOrdt; + } + } \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/system/exchange/service/ExchangeContrattiImportService.java b/ems-engine/src/main/java/it/integry/ems/system/exchange/service/ExchangeContrattiImportService.java index 27c3d095de..940b419396 100644 --- a/ems-engine/src/main/java/it/integry/ems/system/exchange/service/ExchangeContrattiImportService.java +++ b/ems-engine/src/main/java/it/integry/ems/system/exchange/service/ExchangeContrattiImportService.java @@ -8,6 +8,7 @@ import it.integry.ems.system.exchange.service.structure.ExchangeImportDataManage import it.integry.ems.system.exchange.service.structure.ExchangeImportSchemaManagerService; import it.integry.ems_model.base.EquatableEntityInterface; import it.integry.ems_model.entity.VtbOffr; +import it.integry.ems_model.entity.VtbOffrStorico; import it.integry.ems_model.entity.VtbOfft; import it.integry.ems_model.exception.EntityException; import org.apache.logging.log4j.LogManager; @@ -63,10 +64,12 @@ public class ExchangeContrattiImportService { String testataTableName = null; String righeTableName = null; + String storicoTableName = null; if (schemaType == ExchangeImportSchemaManagerService.SchemaType.ContrattiVendita) { testataTableName = "vtb_offt_vend"; righeTableName = "vtb_offr_vend"; + storicoTableName = "vtb_offr_storico_vend"; } exchangeImportDataManagerService.prepareData(exchangeMultiDb.getPrimaryConnection(), useTempTable, @@ -76,11 +79,11 @@ public class ExchangeContrattiImportService { final List exchangeImportedData = retrieveContratti( exchangeMultiDb.getPrimaryConnection(), - true, false, testataTableName, righeTableName); + true, false, testataTableName, righeTableName, storicoTableName); final List exchangeUpdatedData = retrieveContratti( exchangeMultiDb.getPrimaryConnection(), - false, useTempTable, testataTableName, righeTableName); + false, useTempTable, testataTableName, righeTableName, storicoTableName); List allData = exchangeImportDataManagerService .runSync(VtbOfft.class, exchangeImportedData, exchangeUpdatedData); @@ -97,6 +100,7 @@ public class ExchangeContrattiImportService { singleUpdateImported(exchangeMultiDb.getPrimaryConnection(), (VtbOfft) dataToSave, useTempTable, testataTableName); singleUpdateImported(exchangeMultiDb.getPrimaryConnection(), ((VtbOfft) dataToSave).getVtbOffr(), useTempTable, righeTableName); + singleUpdateStoricoImported(exchangeMultiDb.getPrimaryConnection(), ((VtbOfft) dataToSave).getVtbOffrStorico(), useTempTable, storicoTableName); internalMultiDb.commitAll(); exchangeMultiDb.commitAll(); @@ -122,10 +126,11 @@ public class ExchangeContrattiImportService { private List retrieveContratti(Connection connection, boolean retrieveAlreadyImported, boolean useTempTable, - String testataOriginalName, String righeOriginalName) throws Exception { + String testataOriginalName, String righeOriginalName, String storicoOriginalName) throws Exception { String testataTableName = testataOriginalName + (useTempTable ? "_tmp" : ""); String righeTableName = righeOriginalName + (useTempTable ? "_tmp" : ""); + String storicoTableName = storicoOriginalName + (useTempTable ? "_tmp" : ""); final List testate = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOfft.class, @@ -134,6 +139,9 @@ public class ExchangeContrattiImportService { final List righe = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOffr.class, righeTableName, null, retrieveAlreadyImported); + final List storico = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOffrStorico.class, + storicoTableName, null, retrieveAlreadyImported); + testate .parallelStream() @@ -141,7 +149,11 @@ public class ExchangeContrattiImportService { x.setVtbOffr(righe.parallelStream() .filter(y -> Objects.hash(x.getIdOfferta()) == Objects.hash(y.getIdOfferta()) && (Objects.equals(x.getIdOfferta(), y.getIdOfferta()))) - .collect(Collectors.toList())); + .collect(Collectors.toList())) + .setVtbOffrStorico(storico.parallelStream() + .filter(y -> Objects.hash(x.getIdOfferta()) == Objects.hash(y.getIdOfferta()) && + (Objects.equals(x.getIdOfferta(), y.getIdOfferta()))) + .collect(Collectors.toList())); }); return testate; @@ -166,4 +178,15 @@ public class ExchangeContrattiImportService { exchangeImportDataManagerService.updateImportedStatus(connection, tableName, importedRowKeys, useTempTable); } + + private void singleUpdateStoricoImported(Connection connection, List imported, boolean useTempTable, String tableName) throws Exception { + final List> importedRowKeys = imported.stream() + .map(x -> new HashMap() {{ + put("id_offerta", x.getIdOfferta()); + put("cod_mart", x.getCodMart()); + }}) + .collect(Collectors.toList()); + + exchangeImportDataManagerService.updateImportedStatus(connection, tableName, importedRowKeys, useTempTable); + } } diff --git a/ems-engine/src/main/java/it/integry/ems/system/exchange/service/structure/ExchangeImportSchemaManagerService.java b/ems-engine/src/main/java/it/integry/ems/system/exchange/service/structure/ExchangeImportSchemaManagerService.java index 21a6fbe743..8563676fee 100644 --- a/ems-engine/src/main/java/it/integry/ems/system/exchange/service/structure/ExchangeImportSchemaManagerService.java +++ b/ems-engine/src/main/java/it/integry/ems/system/exchange/service/structure/ExchangeImportSchemaManagerService.java @@ -147,6 +147,7 @@ public class ExchangeImportSchemaManagerService { put(SchemaType.ContrattiVendita, new HashMap>() {{ put("vtb_offt_vend", VtbOfft.class); put("vtb_offr_vend", VtbOffr.class); + put("vtb_offr_storico_vend", VtbOffrStorico.class); }}); put(SchemaType.DistinteBase, new HashMap>() {{ put("jtb_cicl", JtbCicl.class);