From f64c816bf3d68ab478d5023c1e09d9f9b8ba5ce3 Mon Sep 17 00:00:00 2001 From: MinaR Date: Wed, 23 Oct 2024 18:03:58 +0200 Subject: [PATCH] correzione su aggancio html su importaizone fatture elettroniche per rosso gargano --- .../model/Migration_20241022184011.java | 23 +++++ .../model/Migration_20241023090257.java | 72 ++++++++++++++ .../model/Migration_20241023132242.java | 34 +++++++ .../services/PassiveInvoiceService.java | 98 ++++++++++--------- 4 files changed, 180 insertions(+), 47 deletions(-) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241022184011.java create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023090257.java create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023132242.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241022184011.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241022184011.java new file mode 100644 index 0000000000..c328073d3e --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241022184011.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_20241022184011 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + executeStatement("alter table stb_files_attached add file_ext as ( IIF( CHARINDEX('.', REVERSE(file_name)) > 0, \n" + + " SUBSTRING(file_name, LEN(file_name) - CHARINDEX('.', REVERSE(file_name)) + 2, LEN(file_name)), \n" + + " '') ) PERSISTED "); + } + + @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_20241023090257.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023090257.java new file mode 100644 index 0000000000..e47717c6a3 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023090257.java @@ -0,0 +1,72 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20241023090257 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if ( !existsColumn("dtb_fatture_passive", "cod_dtip") ) { + dropColumn("dtb_fatture_passive", "cod_anag"); + dropColumn("dtb_fatture_passive", "identificativo_sdi"); + executeStatement("alter table dtb_fatture_passive add cod_dtip varchar(5)", + "alter table dtb_fatture_passive add cod_anag varchar(5)", + "alter table dtb_fatture_passive add identificativo_sdi varchar(15)" + ); + } + + + if ( !existsColumn("dtb_fatture_passive_scad", "cod_paga_fe") ) { + dropTable("dtb_fatture_passive_scad"); + executeStatement( + "CREATE TABLE [dbo].[dtb_fatture_passive_scad](\n" + + "\t[id_attach] [varchar](40) NOT NULL,\n" + + "\t[data_scad] [datetime] NOT NULL,\n" + + "\t[importo] [numeric](20, 5) NOT NULL,\n" + + "\t[cod_paga_fe] [varchar](4) NULL,\n" + + "\t[id_riga] [bigint] IDENTITY(1,1) NOT NULL,\n" + + " CONSTRAINT [pk_dtb_fatture_passive_scad] PRIMARY KEY CLUSTERED \n" + + "(\n" + + "\t[id_riga] ASC\n" + + ") ON [PRIMARY]\n" + + ") ON [PRIMARY]" + ); + } + + + createOrUpdateView("svw_fattura_elettronica_files", "CREATE View [dbo].[svw_fattura_elettronica_files] as \n" + + "WITH setup AS (SELECT CONVERT(DATETIME,\n" + + " dbo.getgestsetup('dati_azienda', 'fatturazione_elettronica', 'DATA_MIN_VIEW_FATTURE'),\n" + + " 103) data_min)\n" + + "SELECT description,\n" + + " stb_files_attached.id_attach,\n" + + " datetime_attach,\n" + + " dtb_fatture_passive.part_iva,\n" + + " dtb_fatture_passive.data_doc,\n" + + " dtb_fatture_passive.num_doc,\n" + + " dtb_fatture_passive.tot_doc,\n" + + " dtb_fatture_passive.iban,\n" + + " dtb_fatture_passive.cod_dtip,\n" + + " (SELECT TOP 1 cod_paga_fe\n" + + " FROM dtb_fatture_passive_scad\n" + + " WHERE dtb_fatture_passive_scad.id_attach = dtb_fatture_passive.id_attach) AS cod_paga_fe\n" + + "FROM stb_files_attached\n" + + " INNER JOIN dtb_fatture_passive ON stb_files_attached.parent_id_attach = dtb_fatture_passive.id_attach,\n" + + " setup\n" + + "WHERE file_ext IN ('P7M', 'XML')\n" + + " AND type_attach = 'FP'\n" + + " AND stb_files_attached.id_attach = parent_id_attach\n" + + " AND (setup.data_min IS NULL OR datetime_attach >= setup.data_min)\n"); + + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023132242.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023132242.java new file mode 100644 index 0000000000..fa876adcd7 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241023132242.java @@ -0,0 +1,34 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20241023132242 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createOrUpdateView("jvw_timbrature", + "create view jvw_timbrature as \n" + + "select cod_jflav, data_lav, ingresso, uscita\n" + + "from (\n" + + "select jtb_rlavr.cod_jflav,\n" + + "jtb_rlavr.data_lav,\n" + + "jtb_rlavr.da_ora as ingresso,\n" + + "lead(jtb_rlavr.a_ora) over (partition by jtb_rlavr.cod_jflav, jtb_rlavr.data_lav order by IsNull(jtb_rlavr.da_ora,jtb_rlavr.a_ora)) uscita\n" + + "from jtb_rlavt \n" + + "inner join jtb_rlavr on jtb_rlavt.cod_jflav = jtb_rlavr.cod_jflav and jtb_rlavt.data_lav = jtb_rlavr.data_lav\n" + + "where \n" + + "((jtb_rlavr.da_ora is not null and jtb_rlavr.a_ora is null ) or (jtb_rlavr.da_ora is null and jtb_rlavr.a_ora is not null ))\n" + + " ) t\n" + + "where ingresso is not null"); + } + + @Override + public void down() throws Exception { + + } + +} \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java b/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java index 3c5d811d1e..92f8e185b1 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/fatture/services/PassiveInvoiceService.java @@ -206,7 +206,7 @@ public class PassiveInvoiceService { } try { - StbFilesAttached stbFilesAttached = saveAttachment(fileName, fileContentSigned, fileDesc, message, additionalAttachmentInfo); + StbFilesAttached stbFilesAttached = saveAttachment(fileName, fileContentSigned, fileDesc, message, additionalAttachmentInfo, null); FpxToPdfDTO.FpxToPdfFile file = new FpxToPdfDTO.FpxToPdfFile(); file.setFileContentBytes(fileContentSigned); @@ -219,7 +219,8 @@ public class PassiveInvoiceService { for (int i = 0; i < pdfs.size(); i++) { FpxToPdfDTO.FpxToPdfFile pdf = pdfs.get(i); - StbFilesAttached pdfStbFilesAttached = saveAttachment(pdf.getFileName(), pdf.getFileContentBytes(), prefixDesc + " " + pdf.getDescription(), message, additionalAttachmentInfo); + StbFilesAttached pdfStbFilesAttached = saveAttachment(pdf.getFileName(), pdf.getFileContentBytes(), prefixDesc + " " + pdf.getDescription(), message, additionalAttachmentInfo, + stbFilesAttached.getParentIdAttach()); digitalInvoiceManager.getPassiveInvoices().get(fileName).put(pdfStbFilesAttached.getIdAttach(), pdf); } @@ -356,7 +357,9 @@ public class PassiveInvoiceService { mailService.sendMail(null, "notifica-errore", emailDest, null, null, errorMailSubject, errorMailText, false, attachments, false); } - private StbFilesAttached saveAttachment(String fileName, byte[] fileContent, String description, Message originalMessage, HashMap additionalInfo) throws Exception { + private StbFilesAttached saveAttachment(String fileName, + byte[] fileContent, String description, Message originalMessage, HashMap additionalInfo, + String parentId) throws Exception { Date receivedDate = null; if (originalMessage != null && originalMessage.getReceivedDate() != null) { @@ -373,46 +376,46 @@ public class PassiveInvoiceService { } // Recupero allegato parent - String parentId = null; - String regexName = ".{0,}([A-Z]{2}[a-z,A-Z,0-9]{2,28}[_][a-z,A-Z,0-9]{1,5}).{0,}"; - Pattern pattern = Pattern.compile(regexName); - Matcher matcher = pattern.matcher(description); - String codDtip = UtilityHashMap.getValueIfExists(additionalInfo, COD_DTIP_KEY); - Date dataDoc = UtilityHashMap.getValueIfExists(additionalInfo, DATA_DOC_KEY); - String numDoc = UtilityHashMap.getValueIfExists(additionalInfo, NUM_DOC_KEY); - if (matcher.matches()) { - String invoiceName = matcher.group(1); - String sqlParentId = - "SELECT max(stb_files_attached.parent_id_attach) as parent_id_attach " + - " FROM stb_files_attached INNER JOIN dtb_fatture_passive ON stb_files_attached.parent_id_attach = dtb_fatture_passive.id_attach " + - " WHERE stb_files_attached.file_name LIKE '%" + invoiceName + "%' AND " + - "dtb_fatture_passive.num_doc = " + UtilityDB.valueToString(numDoc) + " AND " + - "dtb_fatture_passive.data_doc = " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD); - PreparedStatement psParentId = multiDBTransactionManager.prepareStatement(sqlParentId); - ResultSet rsParentId = psParentId.executeQuery(); - if (rsParentId.next()) { - parentId = rsParentId.getString("parent_id_attach"); + String codDtip = UtilityHashMap.getValueIfExists(additionalInfo, COD_DTIP_KEY); + Date dataDoc = UtilityHashMap.getValueIfExists(additionalInfo, DATA_DOC_KEY); + String numDoc = UtilityHashMap.getValueIfExists(additionalInfo, NUM_DOC_KEY); + + if ( parentId == null ) { + String regexName = ".{0,}([A-Z]{2}[a-z,A-Z,0-9]{2,28}[_][a-z,A-Z,0-9]{1,5}).{0,}"; + Pattern pattern = Pattern.compile(regexName); + Matcher matcher = pattern.matcher(description); + if (matcher.matches()) { + String invoiceName = matcher.group(1); + String sqlParentId = + "SELECT max(stb_files_attached.parent_id_attach) as parent_id_attach " + + " FROM stb_files_attached INNER JOIN dtb_fatture_passive ON stb_files_attached.parent_id_attach = dtb_fatture_passive.id_attach " + + " WHERE stb_files_attached.file_name LIKE '%" + invoiceName + "%' AND " + + "dtb_fatture_passive.num_doc = " + UtilityDB.valueToString(numDoc) + " AND " + + "dtb_fatture_passive.data_doc = " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD); + + parentId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sqlParentId); } - rsParentId.close(); - psParentId.close(); } List entityList = new ArrayList<>(); - String idAttach = getNextIdAttach(); - StbFilesAttached stbFilesAttached = new StbFilesAttached(); - stbFilesAttached.setIdAttach(idAttach); - stbFilesAttached.setOperation(OperationType.INSERT); fileName = fileName.replaceAll("'", "''"); - stbFilesAttached.setFileName(fileName); - stbFilesAttached.setDatetimeAttach(receivedDate); - stbFilesAttached.setDescription(description); - stbFilesAttached.setUserName(requestDataDTO.getUsername()); - stbFilesAttached.setFileSize(new BigDecimal(fileContent.length)); - stbFilesAttached.setFlagLock("S"); - stbFilesAttached.setTypeAttach("FP"); + String idAttach = getNextIdAttach(); String parentActivityId = UtilityString.isNullOrEmpty(parentId) ? idAttach : parentId; - stbFilesAttached.setParentIdAttach(parentActivityId); - stbFilesAttached.setContent(fileContent); + + StbFilesAttached stbFilesAttached = + new StbFilesAttached() + .setIdAttach(idAttach) + .setFileName(fileName) + .setDatetimeAttach(receivedDate) + .setDescription(description) + .setUserName(requestDataDTO.getUsername()) + .setFileSize(new BigDecimal(fileContent.length)) + .setFlagLock("S") + .setTypeAttach("FP") + .setParentIdAttach(parentActivityId) + .setContent(fileContent); + + stbFilesAttached.setOperation(OperationType.INSERT); entityList.add(stbFilesAttached); if (UtilityString.isNullOrEmpty(parentId)) { @@ -431,17 +434,18 @@ public class PassiveInvoiceService { codAnag_FP = rifAutofattura.getCodAnag(); } - DtbFatturePassive fatturePassive = new DtbFatturePassive(); + DtbFatturePassive fatturePassive = new DtbFatturePassive() + .setIdAttach(parentActivityId) + .setPartIva(UtilityHashMap.getValueIfExists(additionalInfo, PART_IVA_KEY)) + .setDataDoc(dataDoc_FP) + .setNumDoc(numDoc_FP) + .setTotDoc(UtilityHashMap.getValueIfExists(additionalInfo, TOT_DOC_KEY)) + .setIban(UtilityHashMap.getValueIfExists(additionalInfo, IBAN_KEY)) + .setCodDtip(codDtip_FP) + .setCodAnag(codAnag_FP) + .setIdentificativoSdi(UtilityHashMap.getValueIfExists(additionalInfo, RECEIVED_IDENTIFIER_SDI)); + fatturePassive.setOperation(OperationType.INSERT_OR_UPDATE); - fatturePassive.setIdAttach(parentActivityId); - fatturePassive.setPartIva(UtilityHashMap.getValueIfExists(additionalInfo, PART_IVA_KEY)); - fatturePassive.setDataDoc(dataDoc_FP); - fatturePassive.setNumDoc(numDoc_FP); - fatturePassive.setTotDoc(UtilityHashMap.getValueIfExists(additionalInfo, TOT_DOC_KEY)); - fatturePassive.setIban(UtilityHashMap.getValueIfExists(additionalInfo, IBAN_KEY)); - fatturePassive.setCodDtip(codDtip_FP); - fatturePassive.setCodAnag(codAnag_FP); - fatturePassive.setIdentificativoSdi(UtilityHashMap.getValueIfExists(additionalInfo, RECEIVED_IDENTIFIER_SDI)); List scadenze = UtilityHashMap.>getValueIfExists(additionalInfo, SCADENZE_KEY); if (scadenze != null && scadenze.size() > 0) {