Merge branch 'develop' into feature/Feature-ImportScontriniMMPOS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-10-01 15:38:41 +02:00
27 changed files with 2010 additions and 544 deletions

View File

@@ -1,10 +1,10 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Tomcat 9 (RistoCash)" type="Remote">
<configuration default="false" name="Tomcat 9 (AnydeskTunnel)" type="Remote">
<module name="ems-engine" />
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" />
<option name="HOST" value="127.0.0.1" />
<option name="HOST" value="localhost" />
<option name="PORT" value="8001" />
<option name="AUTO_RESTART" value="false" />
<RunnerSettings RunnerId="Debug">

View File

@@ -1,16 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Tomcat (AnydeskTunnel)" type="Remote">
<module name="ems-engine" />
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" />
<option name="HOST" value="servertomcat" />
<option name="PORT" value="8001" />
<option name="AUTO_RESTART" value="false" />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="8001" />
<option name="LOCAL" value="false" />
</RunnerSettings>
<method v="2" />
</configuration>
</component>

View File

@@ -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_20250929103228 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("alter table jtb_rlavt add note_agg varchar(max)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -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_20250929103932 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_jriep_presenze_dip_disp", "CB_AGGNOTE", "VISIBLE", "N",
null, false, null, false, false,
false, false, false, null, false, null);
if (isCustomer(IntegryCustomer.Integry)) {
updateSetupValue("w_jriep_presenze_dip_disp", "CB_AGGNOTE", "VISIBLE", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,40 @@
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_20250929111320 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
deleteSetup("w_jriep_presenze_dip_disp", "CB_AGGNOTE", "VISIBLE");
executeStatement("create table mtb_var_lisv_log (\n" +
"id bigint identity,\n" +
"datetime_var datetime not null,\n" +
"user_name varchar(40),\n" +
"cod_vlis varchar(5) not null, \n" +
"versione int not null,\n" +
"cod_promo varchar(10), \n" +
"data_iniz datetime,\n" +
"data_fine datetime,\n" +
"cod_mart varchar(15),\n" +
"note varchar(max))\n" ,
"alter table mtb_var_lisv_log add constraint pk_mtb_var_lisv_log primary key ( id ) ");
if (isCustomer(IntegryCustomer.Carelli)) {
executeStatement("update stb_abil set flag_abil = 'R'\n" +
"where gest_name = 'vpromo'\n" +
"and user_name not in ('Apapapicco', 'Gmezzapesa')\n" +
"and flag_abil not in ('N', 'R')");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,481 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250929124316 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table vtb_dest alter column cod_affiliazione varchar(40)");
createOrUpdateFunction("getDocuPrint_generica", "CREATE FUNCTION [dbo].[getDocuPrint_generica]\n" +
"( \n" +
" @codAnag varchar(5), @codDtip varchar(5), @dataDoc datetime, @serDoc varchar(2), @numDoc int\n" +
")\n" +
"RETURNS TABLE \n" +
"AS\n" +
"RETURN \n" +
"\n" +
"WITH righe_doc as (\n" +
" /*righe documento diretto */\n" +
" select dtb_docr.cod_anag, dtb_docr.cod_dtip, dtb_docr.data_doc, dtb_docr.ser_doc, dtb_docr.num_doc, id_riga, null as tipo_cessione, \n" +
" dtb_docr.cod_mart, mtb_aart.tipo_codice as tipo_codice_ean, mtb_aart.bar_code, \n" +
" CASE WHEN len(dtb_docr.descrizione_estesa)>0 then dtb_docr.descrizione_estesa ELSE dtb_docr.descrizione END as descrizione, dtb_docr.descrizione as descrizione_breve, \n" +
" convert(varchar(5), null) as cod_spes, dtb_docr.unt_doc, dtb_docr.qta_doc, dtb_docr.qta_cnf, dtb_docr.num_cnf, dtb_docr.val_unt, dtb_docr.val_unt_iva, \n" +
" dtb_docr.sconto5, dtb_docr.sconto6, dtb_docr.sconto7, dtb_docr.sconto8, dtb_docr.importo_riga as importo_riga, \n" +
" dtb_docr.cod_aliq, gtb_aliq.perc_aliq, CASE WHEN dtb_docr.cod_aliq is null THEN 'N2.2' ELSE gtb_aliq.natura END as natura, \n" +
" dtb_docr.cod_kit, composto.descrizione as descr_kit, dtb_docr.partita_mag, dtb_docr.matricola, dtb_docr.data_iniz_comp, dtb_docr.data_fine_comp, dtb_docr.cod_jcom, \n" +
" dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord, dtb_ordt.rif_ord, dtb_ordt.rif_data_ord, dtb_ordt.rif_num_ord, \n" +
" dtb_doct.cod_dtip_val, dtb_doct.data_doc_val, dtb_doct.ser_doc_val, dtb_doct.num_doc_val, dtb_doct.num_doc_forn\n" +
" from dtb_docr inner join dtb_doct \n" +
" on dtb_docr.cod_anag = dtb_doct.cod_anag \n" +
" and dtb_docr.cod_dtip = dtb_doct.cod_dtip\n" +
" and dtb_docr.data_doc = dtb_doct.data_doc\n" +
" and dtb_docr.ser_doc = dtb_doct.ser_doc\n" +
" and dtb_docr.num_doc = dtb_doct.num_doc \n" +
" left outer join dtb_ordt \n" +
" on dtb_doct.gestione = dtb_ordt.gestione \n" +
" and dtb_docr.data_ord = dtb_ordt.data_ord\n" +
" and dtb_docr.num_ord = dtb_ordt.num_ord\n" +
" left outer join gtb_aliq \n" +
" on dtb_docr.cod_aliq = gtb_aliq.cod_aliq \n" +
" left outer join (select cod_mart, descrizione, articolo_composto from mtb_aart) as composto \n" +
" on composto.cod_mart = dtb_docr.cod_kit\n" +
" left outer join mtb_aart on dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" where dtb_doct.cod_anag = @codAnag and \n" +
" dtb_doct.cod_dtip_val = @codDtip and \n" +
" dtb_doct.data_doc_val = @dataDoc and \n" +
" dtb_doct.ser_doc_val = @serDoc and \n" +
" dtb_doct.num_doc_val = @numDoc and\n" +
" /*esclusione degli articoli composti che vengono esplosi nel documento*/\n" +
" not((composto.articolo_composto = 'S' and dtb_docr.cod_mart is null AND dtb_docr.qta_doc <> 0 and cod_kit is not null) OR \n" +
" (composto.articolo_composto = 'N' and dtb_docr.cod_mart is NOT null AND dtb_docr.qta_doc <> 0 and cod_kit is not null and gtb_aliq.tipo_iva = 'IVA COMPOSTA') )\n" +
" AND dtb_docr.descrizione NOT LIKE 'DDT N. %' \n" +
" AND dtb_docr.descrizione NOT LIKE 'BOLLA N. %' \n" +
" AND dtb_docr.descrizione NOT LIKE 'Rif.N.%' \n" +
" UNION ALL \n" +
" select dtb_docr.cod_anag, dtb_docr.cod_dtip, dtb_docr.data_doc, dtb_docr.ser_doc, dtb_docr.num_doc, id_riga, 'SC' as tipo_cessione, null as cod_mart, null as tipo_codice_ean, null as bar_code,\n" +
" 'Omaggio con Rivalsa IVA -' + dtb_docr.descrizione, dtb_docr.descrizione as descrizione_breve, null as cod_spes,\n" +
" null as unt_doc, 1 as qta_doc, null as qta_cnf, null as num_cnf, dtb_docr.qta_doc * dtb_docr.val_unt as val_unt, \n" +
" dtb_docr.qta_doc * dtb_docr.val_unt_iva as val_unt_iva, 0 as sconto5, 0 as sconto6, 0 as sconto7, 0 as sconto8, dtb_docr.qta_doc * dtb_docr.val_unt as importo_riga, \n" +
" dtb_docr.cod_aliq, gtb_aliq.perc_aliq, gtb_aliq.natura, \n" +
" null as cod_kit, null as descr_kit, null as partita_mag, null as matricola, null as data_iniz_comp, null as data_fine_comp, null as cod_jcom,\n" +
" dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord, dtb_ordt.rif_ord, dtb_ordt.rif_data_ord, dtb_ordt.rif_num_ord, \n" +
" dtb_doct.cod_dtip_val, dtb_doct.data_doc_val, dtb_doct.ser_doc_val, dtb_doct.num_doc_val, dtb_doct.num_doc_forn\n" +
" from dtb_docr inner join dtb_doct \n" +
" on dtb_docr.cod_anag = dtb_doct.cod_anag \n" +
" and dtb_docr.cod_dtip = dtb_doct.cod_dtip \n" +
" and dtb_docr.data_doc = dtb_doct.data_doc \n" +
" and dtb_docr.ser_doc = dtb_doct.ser_doc \n" +
" and dtb_docr.num_doc = dtb_doct.num_doc \n" +
" left outer join dtb_ordt \n" +
" on dtb_doct.gestione = dtb_ordt.gestione \n" +
" and dtb_docr.data_ord = dtb_ordt.data_ord \n" +
" and dtb_docr.num_ord = dtb_ordt.num_ord \n" +
" left outer join gtb_aliq \n" +
" on dtb_docr.cod_aliq = gtb_aliq.cod_aliq \n" +
" where dtb_doct.cod_anag = @codAnag \n" +
" and dtb_doct.cod_dtip_val = @codDtip \n" +
" and dtb_doct.data_doc_val = @dataDoc \n" +
" and dtb_doct.ser_doc_val = @serDoc \n" +
" and dtb_doct.num_doc_val = @numDoc \n" +
" and (dtb_docr.sconto5 = 100 OR dtb_docr.sconto6 = 100 ) and gtb_aliq.perc_aliq >0\n" +
" ) ,\n" +
" \n" +
" righe_doc_val as (\n" +
" /*acquisizione dell'id_riga delle bolle in caso di documento differito per riportare lo stesso ordinamento */\n" +
" select id_riga, dtb_docr.cod_anag, SUBSTRING(descrizione_estesa, 1, CHARINDEX( 'N.', descrizione_estesa, 1) - 2 ) as cod_dtip, \n" +
" convert (datetime,\n" +
" CASE WHEN CHARINDEX(' Rif.', descrizione_estesa) > 0 THEN \n" +
" SUBSTRING(CASE WHEN CHARINDEX(' Dest.', descrizione_estesa) > 0 THEN \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , CHARINDEX(' Dest.', descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ) -1 ) ELSE \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , len(descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ))\n" +
" END, 1, CHARINDEX(' Rif.', CASE WHEN CHARINDEX(' Dest.', descrizione_estesa) > 0 THEN \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , CHARINDEX(' Dest.', descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ) -1 ) ELSE \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , len(descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ))\n" +
" END) - 1 )\n" +
" ELSE \n" +
" CASE WHEN CHARINDEX(' Dest.', descrizione_estesa) > 0 THEN \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , CHARINDEX(' Dest.', descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ) -1 ) ELSE \n" +
" SUBSTRING(descrizione_estesa, CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') +1 , len(descrizione_estesa) - ( CHARINDEX( ' DEL', descrizione_estesa, 1) + len (' DEL') ))\n" +
" END\n" +
" END , 103) as data_doc, \n" +
" cast (SUBSTRING(SUBSTRING(descrizione_estesa, CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 , CHARINDEX(' DEL', descrizione_estesa) - ( CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 ) ), 1 , CHARINDEX( ' ', SUBSTRING(descrizione_estesa, CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 , CHARINDEX(' DEL', descrizione_estesa) - ( CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 ) )) -1 ) as int ) AS num_doc, \n" +
" SUBSTRING(SUBSTRING(descrizione_estesa, CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 , CHARINDEX(' DEL', descrizione_estesa) - ( CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 ) ), CHARINDEX( ' ', SUBSTRING(descrizione_estesa, CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 , CHARINDEX(' DEL', descrizione_estesa) - ( CHARINDEX( 'N.', descrizione_estesa, 1) + len ('N.') + 1 ) ))+ 1 , 2 ) AS ser_doc \n" +
" \n" +
" from dtb_docr \n" +
" where dtb_docr.descrizione LIKE 'BOLLA N. %'\n" +
" AND descrizione_estesa is not null and CHARINDEX( 'N.', descrizione_estesa, 1) > 0\n" +
" AND cod_anag = @codAnag and cod_dtip = @codDtip and data_doc = @dataDoc and ser_doc = @serDoc and num_doc = @numDoc \n" +
" ) \n" +
"\n" +
"\n" +
"select dtb_docr_print.cod_anag,\n" +
" dtb_docr_print.cod_dtip,\n" +
" dtb_docr_print.data_doc,\n" +
" dtb_docr_print.ser_doc,\n" +
" dtb_docr_print.num_doc,\n" +
" convert(varchar(2), null) as tipo_cessione, \n" +
" dtb_docr_print.id_riga,\n" +
" dtb_docr_print.cod_mart,\n" +
" convert(varchar(4096), dtb_docr_print.descrizione) as descrizione,\n" +
" convert(varchar(40), null) as descrizione_breve,\n" +
" convert(varchar(5), null) as cod_spes,\n" +
" convert(varchar(35), null) as tipo_codice_ean,\n" +
" convert(varchar(40), null) as valore_codice_ean,\n" +
" convert(varchar(35), null) as tipo_codice_forn,\n" +
" convert(varchar(40), null) as valore_codice_forn,\n" +
" convert(varchar(35), null) as tipo_codice_clie,\n" +
" convert(varchar(40), null) as valore_codice_clie,\n" +
" convert(varchar(10), null) as tipodato_ct_art,\n" +
" convert(int, null) as rifNumero_ct_art,\n" +
" convert(varchar(60), null) as rifTesto_ct_art,\n" +
" convert(varchar(10), null) as tipodato_pz_art,\n" +
" convert(int, null) as rifNumero_pz_art,\n" +
" convert(varchar(60), null) as rifTesto_pz_art,\n" +
" convert(varchar(40), null) as bar_code,\n" +
" dtb_docr_print.unt_doc,\n" +
" dtb_docr_print.qta_doc,\n" +
" convert(numeric(15,5), null) as qta_cnf, \n" +
" convert(numeric(20,5), null) as num_cnf,\n" +
" convert(numeric(20,5), dtb_docr_print.val_unt) as val_unt,\n" +
" convert(numeric(5,2), 0) as sconto1,\n" +
" convert(numeric(5,2), 0) as sconto2,\n" +
" convert(numeric(5,2), 0) as sconto3,\n" +
" convert(numeric(5,2), 0) as sconto4,\n" +
" dtb_docr_print.sconto5,\n" +
" dtb_docr_print.sconto6,\n" +
" dtb_docr_print.sconto7,\n" +
" dtb_docr_print.sconto8,\n" +
" dtb_docr_print.importo_riga,\n" +
" dtb_docr_print.cod_aliq,\n" +
" convert(numeric(5,2), gtb_aliq.perc_aliq) as perc_aliq, \n" +
" convert(varchar(5), gtb_aliq.natura) as natura, \n" +
" convert(datetime, null) as data_iniz_comp, \n" +
" convert(datetime, null) as data_fine_comp,\n" +
" convert(varchar(15), null) as cod_kit,\n" +
" convert(varchar(40), null) as descr_kit,\n" +
" convert(varchar(20), null ) as partita_mag, \n" +
" convert(varchar(20), null ) as matricola,\n" +
" convert(varchar(10), null) as tipodato_lotto,\n" +
" convert(varchar(60), null) as rifTesto_lotto,\n" +
" convert(varchar(10), null) as tipodato_dest,\n" +
" convert(varchar(40), null) as rifNumero_dest,\n" +
" convert(varchar(60), null) as rifTesto_dest, \n" +
" convert(varchar(5), null) as cod_vdes,\n" +
" convert(varchar(40), null) as cod_affiliazione,\n" +
" convert(varchar(40), null) as cod_ean_dest,\n" +
" convert(varchar(255), null ) as indirizzo_dest, \n" +
" convert(varchar(5), null) as cod_dtip_ddt,\n" +
" convert(int, null ) as num_doc_ddt,\n" +
" convert(varchar(2), null) as ser_doc_ddt,\n" +
" convert(datetime, null) as data_ddt, \n" +
" convert(varchar(20), null) as num_ddt,\n" +
" convert(varchar(1), null) as gestione_ord,\n" +
" convert(datetime, null) as data_ord,\n" +
" convert(int, null ) as num_ord,\n" +
" convert(varchar(40), null ) as rif_ord, \n" +
" dtb_docr_print.rif_data_ord, \n" +
" dtb_docr_print.rif_num_ord, \n" +
" convert(varchar(10), null) as cod_jcom, \n" +
" dtb_docr_print.id_riga as id_riga_orig,\n" +
" CONVERT(varchar(60), null) as rifTesto_numDocCli, \n" +
" CONVERT(varchar(40), null) as tipoDato_numDocCli\n" +
"from dtb_docr_print left outer join gtb_aliq on dtb_docr_print.cod_aliq = gtb_aliq.cod_aliq \n" +
"where cod_anag = @codAnag and cod_Dtip = @codDtip and\n" +
"data_doc = @dataDoc and ser_doc = @serDoc and num_doc = @numDoc\n" +
"union all\n" +
"SELECT docu_tab.cod_anag,\n" +
" docu_tab.cod_dtip_val,\n" +
" docu_tab.data_doc_val, \n" +
" docu_tab.ser_doc_val,\n" +
" docu_tab.num_doc_val,\n" +
" docu_tab.tipo_cessione,\n" +
" cast(ROW_NUMBER() over(order by docu_tab.cod_anag,\n" +
" docu_tab.cod_dtip_val, \n" +
" docu_tab.data_doc_val, \n" +
" docu_tab.ser_doc_val,\n" +
" docu_tab.num_doc_val, \n" +
" --docu_tab.data_ddt, \n" +
" --docu_tab.num_ddt,\n" +
" docu_tab.id_riga_doc_val, \n" +
" docu_tab.id_riga ) as integer) as id_riga,\n" +
" docu_tab.cod_mart,\n" +
" docu_tab.descrizione,\n" +
" docu_tab.descrizione_breve,\n" +
" docu_tab.cod_spes,\n" +
" docu_tab.tipo_codice_ean,\n" +
" docu_tab.valore_codice_ean,\n" +
" docu_tab.tipo_codice_forn,\n" +
" docu_tab.valore_codice_forn,\n" +
" docu_tab.tipo_codice_clie,\n" +
" docu_tab.valore_codice_clie,\n" +
" docu_tab.tipodato_ct_art,\n" +
" docu_tab.rifNumero_ct_art,\n" +
" docu_tab.rifTesto_ct_art,\n" +
" docu_tab.tipodato_pz_art,\n" +
" docu_tab.rifNumero_pz_art,\n" +
" docu_tab.rifTesto_pz_art,\n" +
" docu_tab.bar_code,\n" +
" docu_tab.unt_doc,\n" +
" docu_tab.qta_doc,\n" +
" docu_tab.qta_cnf, \n" +
" docu_tab.num_cnf,\n" +
" convert(numeric(20,5), isNull(docu_tab.val_unt, 0)) as val_unt,\n" +
" docu_tab.sconto1,\n" +
" docu_tab.sconto2,\n" +
" docu_tab.sconto3,\n" +
" docu_tab.sconto4,\n" +
" docu_tab.sconto5,\n" +
" docu_tab.sconto6,\n" +
" docu_tab.sconto7,\n" +
" docu_tab.sconto8,\n" +
" convert(numeric(20,5), isNull(docu_tab.importo_riga, 0) ) as importo_riga,\n" +
" docu_tab.cod_aliq,\n" +
" docu_tab.perc_aliq, \n" +
" docu_tab.natura, \n" +
" docu_tab.data_iniz_comp, \n" +
" docu_tab.data_fine_comp,\n" +
" docu_tab.cod_kit,\n" +
" docu_tab.descr_kit,\n" +
" docu_tab.partita_mag,\n" +
" docu_tab.matricola,\n" +
" docu_tab.tipodato_lotto,\n" +
" docu_tab.rifTesto_lotto,\n" +
" docu_tab.tipodato_dest,\n" +
" docu_tab.rifNumero_dest,\n" +
" docu_tab.rifTesto_dest, \n" +
" docu_tab.cod_vdes,\n" +
" docu_tab.cod_affiliazione,\n" +
" docu_tab.cod_ean_dest,\n" +
" docu_tab.indirizzo_dest,\n" +
" docu_tab.cod_dtip_ddt,\n" +
" docu_tab.num_doc_ddt, \n" +
" docu_tab.ser_doc_ddt, \n" +
" docu_tab.data_ddt, \n" +
" docu_tab.num_ddt,\n" +
" docu_tab.gestione_ord, \n" +
" docu_tab.data_ord, \n" +
" docu_tab.num_ord, \n" +
" docu_tab.rif_ord,\n" +
" docu_tab.rif_data_ord, \n" +
" docu_tab.rif_num_ord, \n" +
" docu_tab.cod_jcom,\n" +
" docu_tab.id_riga as id_riga_orig, \n" +
" docu_tab.rifTesto_numDocCli, \n" +
" docu_tab.tipodato_numDocCli\n" +
"FROM \n" +
"(\n" +
" SELECT dtb_doct.cod_anag,\n" +
" dtb_doct.cod_dtip_val, \n" +
" dtb_doct.data_doc_val, \n" +
" dtb_doct.ser_doc_val,\n" +
" dtb_doct.num_doc_val,\n" +
" righe_doc.tipo_cessione,\n" +
" righe_doc_val.id_riga as id_riga_doc_val, \n" +
" righe_doc.id_riga,\n" +
" righe_doc.cod_mart,\n" +
" righe_doc.descrizione, \n" +
" righe_doc.descrizione_breve, \n" +
" righe_doc.cod_spes,\n" +
" CASE WHEN PATINDEX('%EAN%', righe_doc.tipo_codice_ean ) > 0 THEN 'EAN' ELSE NULL END as tipo_codice_ean,\n" +
" CASE WHEN PATINDEX('%EAN%', righe_doc.tipo_codice_ean ) > 0 THEN righe_doc.bar_code ELSE NULL END as valore_codice_ean,\n" +
" CASE WHEN righe_doc.cod_mart IS NOT NULL THEN 'COD.ART.FORNIT' ELSE null END as tipo_codice_forn,\n" +
" righe_doc.cod_mart as valore_codice_forn,\n" +
" convert(varchar(35), null) as tipo_codice_clie,\n" +
" convert(varchar(40), null) as valore_codice_clie,\n" +
" convert(varchar(10), null) as tipodato_ct_art,\n" +
" convert(int, null) as rifNumero_ct_art,\n" +
" convert(varchar(60), null) as rifTesto_ct_art,\n" +
" convert(varchar(10), null) as tipodato_pz_art,\n" +
" convert(int, null) as rifNumero_pz_art,\n" +
" convert(varchar(60), null) as rifTesto_pz_art,\n" +
" righe_doc.bar_code,\n" +
" righe_doc.unt_doc,\n" +
" righe_doc.qta_doc \n" +
" * CASE WHEN (dtb_tipi.segno_val_scar * dtb_tipi_val.segno_val_scar) = 0 THEN 1 ELSE (dtb_tipi.segno_val_scar * dtb_tipi_val.segno_val_scar) END \n" +
" as qta_doc,\n" +
" righe_doc.qta_cnf, \n" +
" righe_doc.num_cnf,\n" +
" CASE WHEN dtb_tipi.flag_prz_iva = 'S' THEN Round( Round(righe_doc.qta_doc * righe_doc.val_unt_iva, 2) / (1 + perc_aliq /100) / CASE WHEN righe_doc.qta_doc = 0 THEN 1 ELSE righe_doc.qta_doc END, 5) ELSE righe_doc.val_unt END \n" +
" * isNull(dvw_tipi_integrazioni.segno, 1) as val_unt, \n" +
" CASE WHEN flag_prz_scontati = 'S' THEN 0 ELSE dtb_doct.sconto1 END as sconto1 , \n" +
" CASE WHEN flag_prz_scontati = 'S' THEN 0 ELSE dtb_doct.sconto2 END as sconto2 , \n" +
" CASE WHEN flag_prz_scontati = 'S' THEN 0 ELSE dtb_doct.sconto3 END as sconto3 ,\n" +
" CASE WHEN flag_prz_scontati = 'S' THEN 0 ELSE dtb_doct.sconto4 END as sconto4 , \n" +
" righe_doc.sconto5,\n" +
" righe_doc.sconto6,\n" +
" righe_doc.sconto7,\n" +
" righe_doc.sconto8,\n" +
" round(CASE WHEN dtb_tipi.flag_prz_iva = 'S' THEN Round( Round(righe_doc.qta_doc * righe_doc.val_unt_iva * (1 - righe_doc.sconto5 / 100) * (1 - righe_doc.sconto6 / 100) * (1 - righe_doc.sconto7 / 100) * (1 - righe_doc.sconto8 / 100), 2) / (1 + perc_aliq /100), 5) ELSE righe_doc.importo_riga END \n" +
" * CASE WHEN flag_prz_scontati <> 'S' THEN (1 - dtb_doct.sconto1 / 100) * (1 - dtb_doct.sconto2 / 100) * (1 - dtb_doct.sconto3 / 100) * (1 - dtb_doct.sconto4 / 100) ELSE 1 END * CASE WHEN (dtb_tipi.segno_val_scar * dtb_tipi_val.segno_val_scar) = 0 THEN 1 ELSE (dtb_tipi.segno_val_scar * dtb_tipi_val.segno_val_scar) END\n" +
" * isNull(dvw_tipi_integrazioni.segno, 1) \n" +
" ,\n" +
" CASE WHEN dtb_tipi.flag_prz_iva = 'S' THEN 5 ELSE 2 END ) as importo_riga,\n" +
" righe_doc.cod_aliq,\n" +
" isnull(righe_doc.perc_aliq, 0) as perc_aliq, \n" +
" righe_doc.natura,\n" +
" righe_doc.data_iniz_comp, \n" +
" righe_doc.data_fine_comp,\n" +
" righe_doc.cod_kit,\n" +
" righe_doc.descr_kit, \n" +
" righe_doc.partita_mag, \n" +
" righe_doc.matricola, \n" +
" CASE WHEN len(righe_doc.partita_mag ) > 0 THEN 'LOTTO' ELSE null END as tipodato_lotto,\n" +
" CASE WHEN len(righe_doc.partita_mag ) > 0 THEN righe_doc.partita_mag ELSE null END as rifTesto_lotto,\n" +
" CASE WHEN len(vtb_dest.cod_affiliazione) > 0 THEN 'PV' ELSE \n" +
" CASE WHEN len(dtb_doct.cod_vdes) > 0 THEN 'PV.FORNIT' ELSE null END END as tipodato_dest,\n" +
" CASE WHEN len(vtb_dest.cod_affiliazione) > 0 AND ISNUMERIC(vtb_dest.cod_affiliazione) = 1 THEN vtb_dest.cod_affiliazione ELSE null END as rifNumero_dest,\n" +
" CASE WHEN len(vtb_dest.cod_affiliazione) > 0 THEN \n" +
" CASE WHEN ISNUMERIC(vtb_dest.cod_affiliazione) = 1 THEN vtb_dest.indirizzo ELSE vtb_dest.cod_affiliazione END\n" +
" ELSE \n" +
" CASE WHEN len(dtb_doct.cod_vdes) > 0 THEN dtb_doct.cod_vdes + ' - '+ vtb_dest.indirizzo ELSE null END\n" +
" END as rifTesto_dest,\n" +
" dtb_doct.cod_vdes, \n" +
" vtb_dest.cod_affiliazione,\n" +
" vtb_dest.cod_ean as cod_ean_dest,\n" +
" vtb_dest.indirizzo as indirizzo_dest,\n" +
" CASE WHEN dtb_doct.cod_dtip_val <> dtb_doct.cod_dtip THEN dtb_doct.cod_dtip ELSE null END as cod_dtip_ddt, \n" +
" CASE WHEN dtb_doct.cod_dtip_val <> dtb_doct.cod_dtip THEN dtb_doct.num_doc ELSE null END as num_doc_ddt,\n" +
" CASE WHEN dtb_doct.cod_dtip_val <> dtb_doct.cod_dtip THEN dtb_doct.ser_doc ELSE null END as ser_doc_ddt,\n" +
" CASE WHEN dtb_doct.cod_dtip_val <> dtb_doct.cod_dtip THEN dtb_doct.data_doc ELSE null END as data_ddt ,\n" +
" CASE WHEN dtb_doct.cod_dtip_val <> dtb_doct.cod_dtip THEN cast(dtb_doct.num_doc as varchar) + ' '+ dtb_doct.ser_doc ELSE null END as num_ddt, \n" +
" righe_doc.gestione as gestione_ord, righe_doc.data_ord, righe_doc.num_ord, \n" +
" righe_doc.rif_ord, righe_doc.rif_data_ord, righe_doc.rif_num_ord, righe_doc.cod_jcom , righe_doc.num_doc_forn as rifTesto_numDocCli, 'N.DOC.CLI.' as tipodato_numDocCli\n" +
" FROM dtb_doct inner join dtb_tipi \n" +
" on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_tipi as dtb_tipi_val \n" +
" on dtb_doct.cod_dtip_val = dtb_tipi_val.cod_dtip\n" +
" inner join righe_doc \n" +
" on dtb_doct.cod_anag = righe_doc.cod_anag \n" +
" and dtb_doct.cod_dtip = righe_doc.cod_dtip \n" +
" and dtb_doct.data_doc = righe_doc.data_doc \n" +
" and dtb_doct.ser_doc = righe_doc.ser_doc \n" +
" and dtb_doct.num_doc = righe_doc.num_doc \n" +
" left outer join righe_doc_val \n" +
" on righe_doc.cod_anag = righe_doc_val.cod_anag \n" +
" and righe_doc.cod_dtip = righe_doc_val.cod_dtip \n" +
" and righe_doc.data_doc = righe_doc_val.data_doc \n" +
" and righe_doc.ser_doc = righe_doc_val.ser_doc \n" +
" and righe_doc.num_doc =righe_doc_val.num_doc\n" +
" left outer join vtb_dest \n" +
" on dtb_doct.cod_anag = vtb_dest.cod_anag \n" +
" and dtb_doct.cod_vdes = vtb_dest.cod_vdes\n" +
" left outer join ctb_caus \n" +
" on dtb_tipi_val.cod_ccau = ctb_caus.cod_ccau\n" +
" left outer join dvw_tipi_integrazioni \n" +
" on dtb_doct.cod_dtip = dvw_tipi_integrazioni.cod_dtip\n" +
" WHERE dtb_tipi.tipo_emissione ='DIRETTA' and \n" +
" dtb_doct.cod_anag = @codAnag and \n" +
" dtb_doct.cod_dtip_val = @codDtip and \n" +
" dtb_doct.data_doc_val = @dataDoc and \n" +
" dtb_doct.ser_doc_val = @serDoc and \n" +
" dtb_doct.num_doc_val = @numDoc \n" +
"UNION ALL\n" +
" SELECT dtb_doct.cod_anag,\n" +
" dtb_doct.cod_dtip_val, \n" +
" dtb_doct.data_doc_val, \n" +
" dtb_doct.ser_doc_val,\n" +
" dtb_doct.num_doc_val,\n" +
" 'AC' as tipo_cessione, \n" +
" (SELECT Max(id_riga) id FROM dtb_docr as docr\n" +
" WHERE docr.cod_anag = dtb_doct.cod_anag AND docr.cod_dtip = dtb_doct.cod_dtip \n" +
" AND docr.data_doc = dtb_doct.data_doc \n" +
" AND docr.ser_doc = dtb_doct.ser_doc \n" +
" AND docr.num_doc = dtb_doct.num_doc) as id_riga_doc_val ,\n" +
" dtb_docs.riga as id_riga , \n" +
" convert(varchar(15), null) as cod_mart,\n" +
" convert(varchar(4096), dtb_docs.descrizione) as descrizione, \n" +
" convert(varchar(40), dtb_docs.descrizione) as descrizione_breve, \n" +
" dtb_docs.cod_spes ,\n" +
" convert(varchar(35), null) as tipo_codice_ean,\n" +
" convert(varchar(40), null) as valore_codice_ean,\n" +
" convert(varchar(35), null) as tipo_codice_forn,\n" +
" convert(varchar(40), null) as valore_codice_forn,\n" +
" convert(varchar(35), null) as tipo_codice_clie,\n" +
" convert(varchar(40), null) as valore_codice_clie,\n" +
" convert(varchar(10), null) as tipodato_ct_art,\n" +
" convert(int, null) as rifNumero_ct_art,\n" +
" convert(varchar(60), null) as rifTesto_ct_art,\n" +
" convert(varchar(10), null) as tipodato_pz_art,\n" +
" convert(int, null) as rifNumero_pz_art,\n" +
" convert(varchar(60), null) as rifTesto_pz_art,\n" +
" convert(varchar(40), null) as bar_code,\n" +
" dtb_docs.unt_mis as unt_doc,\n" +
" 1 as qta_doc,\n" +
" convert(numeric(15,5), null) as qta_cnf, \n" +
" convert(numeric(20,5), null) as num_cnf,\n" +
" convert(numeric(20,5), CASE WHEN flag_prz_iva = 'S' THEN Round( dtb_docs.importo / (1 + perc_aliq /100), 5) ELSE dtb_docs.importo END ) as val_unt,\n" +
" convert(numeric(5,2), 0) as sconto1,\n" +
" convert(numeric(5,2), 0) as sconto2,\n" +
" convert(numeric(5,2), 0) as sconto3,\n" +
" convert(numeric(5,2), 0) as sconto4,\n" +
" convert(numeric(5,2), 0) as sconto5,\n" +
" convert(numeric(5,2), 0) as sconto6,\n" +
" convert(numeric(5,2), 0) as sconto7,\n" +
" convert(numeric(5,2), 0) as sconto8, \n" +
" convert(numeric(20,5), CASE WHEN flag_prz_iva = 'S' THEN Round( dtb_docs.importo / (1 + perc_aliq /100), 5) ELSE dtb_docs.importo END) as importo_riga,\n" +
" dtb_docs.cod_aliq,\n" +
" isnull(gtb_aliq.perc_aliq, 0) as perc_aliq, \n" +
" gtb_aliq.natura,\n" +
" convert(datetime, null) as data_iniz_comp, \n" +
" convert(datetime, null) as data_fine_comp,\n" +
" convert(varchar(15), null) as cod_kit,\n" +
" convert(varchar(40), null) as descr_kit,\n" +
" convert(varchar(20), null ) as partita_mag, \n" +
" convert(varchar(20), null ) as matricola, \n" +
" convert(varchar(10), null) as tipodato_lotto,\n" +
" convert(varchar(60), null) as rifTesto_lotto,\n" +
" convert(varchar(10), null) as tipodato_dest,\n" +
" convert(varchar(40), null) as rifNumero_dest,\n" +
" convert(varchar(60), null) as rifTesto_dest, \n" +
" convert(varchar(5), null) as cod_vdes,\n" +
" convert(varchar(10), null) as cod_affiliazione,\n" +
" convert(varchar(40), null) as cod_ean_dest,\n" +
" convert(varchar(255), null ) as indirizzo_dest, \n" +
" convert(varchar(5), null) as cod_dtip_ddt,\n" +
" convert(int, null ) as num_doc_ddt,\n" +
" convert(varchar(2), null) as ser_doc_ddt,\n" +
" convert(datetime, null) as data_ddt, \n" +
" convert(varchar(20), null) as num_ddt,\n" +
" convert(varchar(1), null) as gestione_ord,\n" +
" convert(datetime, null) as data_ord,\n" +
" convert(int, null ) as num_ord,\n" +
" convert(varchar(40), null) as rif_ord,\n" +
" convert(datetime, null) as rif_data_ord, \n" +
" convert(varchar(20), null) as rif_num_ord,\n" +
" convert(varchar(10), null) as cod_jcom,\n" +
" CONVERT(varchar(60), null) as rifTesto_numDocCli, \n" +
" CONVERT(varchar(40), null) as tipodato_numDocCli\n" +
" FROM dtb_doct inner join dtb_docs on dtb_docs.cod_anag = dtb_doct.cod_anag and \n" +
" dtb_docs.cod_dtip = dtb_doct.cod_dtip and \n" +
" dtb_docs.data_doc = dtb_doct.data_doc and \n" +
" dtb_docs.ser_doc = dtb_doct.ser_doc and \n" +
" dtb_docs.num_doc = dtb_doct.num_doc \n" +
" INNER JOIN dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" left outer join gtb_aliq on dtb_docs.cod_aliq = gtb_aliq.cod_aliq \n" +
" WHERE dtb_doct.cod_anag = @codAnag and \n" +
" dtb_doct.cod_dtip = @codDtip and \n" +
" dtb_doct.data_doc = @dataDoc and \n" +
" dtb_doct.ser_doc = @serDoc and \n" +
" dtb_doct.num_doc = @numDoc ) as docu_tab left outer join dtb_docr_print on docu_tab.cod_anag = dtb_docr_print.cod_anag AND\n" +
" docu_tab.cod_dtip_val = dtb_docr_print.cod_dtip AND\n" +
" docu_tab.data_doc_val = dtb_docr_print.data_doc AND\n" +
" docu_tab.ser_doc_val = dtb_docr_print.ser_doc AND\n" +
" docu_tab.num_doc_val = dtb_docr_print.num_doc\n" +
"WHERE dtb_docr_print.cod_anag is null");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,216 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250930121417 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isDMS())
return;
createOrUpdateProcedure("UpdProgOrdini", "CREATE PROCEDURE [dbo].[UpdProgOrdini](\n" +
" @codAnag varchar(5),\n" +
" @codDtip varchar(5),\n" +
" @dataDoc dateTime,\n" +
" @serDoc varchar(2),\n" +
" @numDoc integer,\n" +
" @segno integer,\n" +
" @Operation varchar(1))\n" +
" /***DESCRIZIONE: Questa storedProcedure aggiorna la quantitÃÆÃ†â€™Ãƒâ€šÃ  evasa degli ordini e anche il \n" +
" numero di pezzi, non contiene una serie di logiche particolarti tipo la \n" +
" sostuzione dell'articolo nell'ordine\n" +
" \n" +
" */\n" +
"AS\n" +
"BEGIN\n" +
" SET NOCOUNT ON;\n" +
" \n" +
"\n" +
" UPDATE dtb_ordr\n" +
" SET dtb_ordr.qta_evasa = \n" +
" CASE WHEN (SELECT application_name from azienda ) = 'WINGEST' THEN \n" +
" dtb_ordr.qta_evasa + \n" +
" (@segno * \n" +
" (CASE dtb_ordr.unt_ord\n" +
" when doc.unt_doc then doc.qta_doc\n" +
" when doc.unt_doc2 then doc.qta_doc2\n" +
" when doc.unt_doc3 then doc.qta_doc3\n" +
" else \n" +
" Round(((doc.qta_doc_no_um / dtb_ordr.rap_conv)),mtb_unt_mis.cifre_dec) \n" +
" end ))\n" +
" ELSE \n" +
" dtb_ordr.qta_evasa \n" +
" END, \n" +
" dtb_ordr.num_cnf_evasa = dtb_ordr.num_cnf_evasa + (@segno * doc.num_cnf),\n" +
" dtb_ordr.flag_evaso_forzato = CASE WHEN @Operation = 'D' THEN 'N' ELSE doc.flag_evaso_forzato END,\n" +
" dtb_ordr.flag_evaso = CASE WHEN @Operation = 'D' THEN 'I'\n" +
" WHEN doc.flag_evaso_forzato = 'S' THEN 'E' ELSE dtb_ordr.flag_evaso END \n" +
" FROM dtb_ordr INNER JOIN mtb_unt_mis ON dtb_ordr.unt_ord = mtb_unt_mis.unt_mis\n" +
" INNER JOIN \n" +
" (SELECT dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" ( dtb_doct.gestione <> 'L' AND (dtb_tipi.segno_qta_car = 1 OR dtb_tipi.segno_qta_scar = 1 ) OR \n" +
" ( dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_scar = 1 ))\n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 \n" +
" UNION ALL\n" +
" SELECT dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif, \n" +
" dtb_ordt.num_ord_rif, \n" +
" dtb_ordt.riga_ord_rif,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" left outer join dtb_ordt ON dtb_tipi.gestione = dtb_ordt.gestione and\n" +
" dtb_docr.data_ord = dtb_ordt.data_ord and\n" +
" dtb_docr.num_ord = dtb_ordt.num_ord\n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_car = 1 AND\n" +
" (SELECT application_name from azienda ) = 'WINGEST'\n" +
" GROUP BY dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif,\n" +
" dtb_ordt.num_ord_rif,\n" +
" dtb_ordt.riga_ord_rif, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 ) doc ON\n" +
" dtb_ordr.gestione = doc.gestione AND\n" +
" dtb_ordr.data_ord = doc.data_ord AND\n" +
" dtb_ordr.num_ord = doc.num_ord AND\n" +
" dtb_ordr.riga_ord = doc.riga_ord;\n" +
" \n" +
" UPDATE dtb_ordt\n" +
" SET dtb_ordt.qta_evasa_prod = dtb_ordt.qta_evasa_prod + (@segno * (doc.qta_doc / case when dtb_ordt.rap_conv_prod = 0 then 1 ELSE dtb_ordt.rap_conv_prod END)),\n" +
" dtb_ordt.flag_evaso_prod = \n" +
" CASE WHEN dtb_ordt.flag_evaso_prod = 'A' THEN dtb_ordt.flag_evaso_prod\n" +
" WHEN @segno = -1 THEN CASE WHEN dtb_ordt.flag_evaso_forzato ='S' and dtb_ordt.flag_evaso_prod <> 'A' THEN 'E' ELSE 'I' END\n" +
" WHEN @segno = 1 THEN \n" +
" CASE WHEN doc.flag_evaso_forzato ='S' and dtb_ordt.flag_evaso_prod <> 'A' THEN 'E' \n" +
" WHEN dtb_ordt.qta_evasa_prod + (@segno * (doc.qta_doc / case when dtb_ordt.rap_conv_prod = 0 then 1 ELSE dtb_ordt.rap_conv_prod END)) = dtb_ordt.qta_prod then 'E' \n" +
" ELSE dtb_ordt.flag_evaso_prod END\n" +
" END\n" +
" FROM dtb_ordt INNER JOIN \n" +
" (SELECT dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" Sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc,\n" +
" Sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND \n" +
" dtb_tipi.segno_qta_car = 1 \n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord\n" +
" UNION ALL\n" +
" SELECT dtb_doct.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" Sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc,\n" +
" Sum(dtb_docr.num_cnf) as num_cnf,\n" +
" case when (SELECT application_name from azienda ) = 'WINGEST' THEN min (CASE WHEN dtb_docr.qta_doc >= ord_prod.qta_ord OR (dtb_docr.qta_doc < ord_prod.qta_ord AND dtb_docr.flag_evaso_forzato = 'S' ) THEN 'S' ELSE 'N' END ) ELSE 'N' END as flag_evaso_forzato \n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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_ordr ord_prod on dtb_docr.data_ord = ord_prod.data_ord and\n" +
" dtb_docr.num_ord = ord_prod.num_ord and\n" +
" dtb_docr.riga_ord = ord_prod.riga_ord and\n" +
" ord_prod.gestione = 'A'\n" +
" inner join dtb_ordt on dtb_docr.data_ord = dtb_ordt.data_ord_rif and\n" +
" dtb_docr.num_ord = dtb_ordt.num_ord_rif and\n" +
" dtb_ordt.gestione = 'L' \n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND (dtb_tipi.segno_qta_car = 0 AND dtb_tipi.segno_val_car = 1)\n" +
" \n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord \n" +
" ) doc ON\n" +
" dtb_ordt.gestione = doc.gestione AND\n" +
" dtb_ordt.data_ord = doc.data_ord AND\n" +
" dtb_ordt.num_ord = doc.num_ord ;\n" +
" \n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,27 @@
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_20250930122122 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_ddocu_ord_rc", "SETUP", "CHK_DATA_DECORRENZA", "S",
"Verifica che la data decorrenza sia precedente alla data del documento", false, null, false, false,
false, false, false, null, false, null);
if(isCustomer(IntegryCustomer.RossoGargano))
updateSetupValue("w_ddocu_ord_rc", "SETUP", "CHK_DATA_DECORRENZA", "N");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,86 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250930151328 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isDMS())
return;
createOrUpdateFunction("[GetDatiProvv]", "CREATE FUNCTION [dbo].[GetDatiProvv](@codVlis varchar(5), \n" +
" @dataValidita datetime, \n" +
" @codAnag varchar(5), \n" +
" @codVdes varchar(5), \n" +
" @codVage varchar(5), \n" +
" @codMart varchar(15), \n" +
" @codDivi varchar(5), \n" +
" @cambio numeric(20,5))\n" +
" RETURNS TABLE AS\n" +
" RETURN(\n" +
"WITH lisv AS (SELECT lisv.cod_vlis,\n" +
" lisv.cod_mart,\n" +
" ISNULL(promo.perc_ispe, lisv.perc_ispe) AS perc_ispe,\n" +
" ISNULL(promo.val_ispe, lisv.val_ispe) AS val_ispe,\n" +
" ISNULL(promo.perc_prov, lisv.perc_prov) AS perc_prov,\n" +
" ISNULL(promo.fisso_prov, lisv.fisso_prov) AS fisso_prov,\n" +
" cambio\n" +
" FROM dbo.getlistinovendita(@datavalidita, @codvlis, @codmart) lisv\n" +
" LEFT OUTER JOIN dbo.getpromozionevendita(@datavalidita, @datavalidita, @codvlis, NULL,\n" +
" @codmart) promo ON lisv.cod_vlis = promo.cod_vlis AND\n" +
" lisv.cod_mart = promo.cod_mart)\n" +
"\n" +
" , scon AS (SELECT *\n" +
" FROM vtb_scon\n" +
" WHERE\n" +
" vtb_scon.cod_sco_art = (SELECT mtb_aart.cod_sco_art FROM mtb_aart WHERE mtb_aart.cod_mart = @codmart)\n" +
" AND vtb_scon.cod_sco_cli = (SELECT ISNULL(vtb_dest.cod_sco_cli, vtb_clie.cod_sco_cli)\n" +
" FROM vtb_clie\n" +
" LEFT OUTER JOIN vtb_dest\n" +
" ON vtb_clie.cod_anag = vtb_dest.cod_anag AND\n" +
" vtb_dest.cod_vdes = @codvdes\n" +
" WHERE vtb_clie.cod_anag = @codanag))\n" +
" , scon_age AS (SELECT *\n" +
" FROM vtb_agen_prov\n" +
" WHERE vtb_agen_prov.cod_sco_art =\n" +
" (SELECT mtb_aart.cod_sco_art FROM mtb_aart WHERE mtb_aart.cod_mart = @codmart)\n" +
" AND vtb_agen_prov.cod_sco_cli = (SELECT ISNULL(vtb_dest.cod_sco_cli, vtb_clie.cod_sco_cli)\n" +
" FROM vtb_clie\n" +
" LEFT OUTER JOIN vtb_dest ON vtb_clie.cod_anag =\n" +
" vtb_dest.cod_anag AND\n" +
" vtb_dest.cod_vdes = @codvdes\n" +
" WHERE vtb_clie.cod_anag = @codanag)\n" +
" AND vtb_agen_prov.cod_vage = @codvage)\n" +
"\n" +
"\n" +
"/*Acquisizione provvigioni agente e ispettore */\n" +
"/* @percProv = round(CASE WHEN vtb_agen_prov.cod_vage IS NULL THEN (CASE WHEN vtb_scon.cod_sco_cli IS NULL THEN (CASE WHEN mtb_lisv.cod_mart IS NULL THEN CASE WHEN vtb_clie.perc_prov = 0 THEN ISNULL(vtb_agen.perc_prov_age, 0) ELSE vtb_Clie.perc_prov END ELSE mtb_lisv.perc_prov END) ELSE vtb_scon.perc_prov END) ELSE vtb_agen_prov.perc_prov END, 5), */\n" +
"/* 6.2.2018 (FABIO): implementata nuovamente la logica della provvigione da cliente e agente se presente in anagrafica, ma senza provviggioni */\n" +
"/* 14/10/2021 (FABIO): abbiamo aggiunto il campo perc_prov_age nella VTB_AGEN in modo da non leggere da vtb_agen.perc_prov_age che invece è la provvigione dell'ispettore */\n" +
"SELECT ROUND(IIF(vtb_agen_prov.cod_vage IS NULL, (IIF(vtb_scon.cod_sco_cli IS NULL, (IIF(mtb_lisv.cod_mart IS NULL, IIF(vtb_clie.perc_prov = 0, ISNULL(vtb_agen.perc_prov_age, 0), vtb_clie.perc_prov), IIF(mtb_lisv.perc_prov = 0 OR mtb_lisv.perc_prov IS NULL, IIF(vtb_clie.perc_prov <> 0, vtb_clie.perc_prov, ISNULL(vtb_agen.perc_prov_age, 0)), mtb_lisv.perc_prov))), vtb_scon.perc_prov)), vtb_agen_prov.perc_prov), 5) AS perc_prov,\n" +
" ROUND(IIF(vtb_agen_prov.cod_vage IS NULL, (IIF(vtb_scon.cod_sco_cli IS NULL, (IIF(mtb_lisv.cod_mart IS NULL, 0, mtb_lisv.fisso_prov * @cambio / mtb_lisv.cambio)), vtb_scon.fisso_prov * @cambio / vtb_scon.cambio_divi_cont)), vtb_agen_prov.fisso_prov * @cambio / vtb_agen_prov.cambio_divi_cont), 5) AS val_prov,\n" +
" ROUND(IIF(vtb_agen_prov.cod_vage IS NULL, (IIF(vtb_scon.cod_sco_cli IS NULL, (IIF(mtb_lisv.cod_mart IS NULL, 0, mtb_lisv.perc_ispe)), vtb_scon.perc_ispe)), vtb_agen_prov.perc_ispe), 5) AS perc_ispe,\n" +
" ROUND(IIF(vtb_agen_prov.cod_vage IS NULL, (IIF(vtb_scon.cod_sco_cli IS NULL, (IIF(mtb_lisv.cod_mart IS NULL, 0, mtb_lisv.val_ispe * @cambio / mtb_lisv.cambio)), vtb_scon.val_ispe * @cambio / vtb_scon.cambio_divi_cont)), vtb_agen_prov.val_ispe * @cambio / vtb_agen_prov.cambio_divi_cont), 5) AS val_ispe,\n" +
" ISNULL(vtb_clie.perc_prov2, 0) AS perc_prov2\n" +
"\n" +
"FROM vtb_clie\n" +
" OUTER APPLY scon vtb_scon\n" +
" OUTER APPLY scon_age vtb_agen_prov\n" +
" OUTER APPLY (SELECT * FROM vtb_agen WHERE vtb_agen.cod_vage = @codvage) vtb_agen\n" +
" OUTER APPLY lisv mtb_lisv\n" +
"WHERE vtb_clie.cod_anag = @codanag\n" +
" \n" +
")");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,214 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250930152326 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isDMS())
return;
createOrUpdateProcedure("UpdProgOrdini", "CREATE PROCEDURE [dbo].[UpdProgOrdini](\n" +
" @codAnag varchar(5),\n" +
" @codDtip varchar(5),\n" +
" @dataDoc dateTime,\n" +
" @serDoc varchar(2),\n" +
" @numDoc integer,\n" +
" @segno integer,\n" +
" @Operation varchar(1))\n" +
" /***DESCRIZIONE: Questa storedProcedure aggiorna la quantitÃÆÃ†â€™Ãƒâ€šÃ  evasa degli ordini e anche il \n" +
" numero di pezzi, non contiene una serie di logiche particolarti tipo la \n" +
" sostuzione dell'articolo nell'ordine\n" +
" \n" +
" */\n" +
"AS\n" +
"BEGIN\n" +
" SET NOCOUNT ON;\n" +
" \n" +
"\n" +
" UPDATE dtb_ordr\n" +
" SET dtb_ordr.qta_evasa = \n" +
" CASE WHEN (SELECT application_name from azienda ) = 'WINGEST' THEN \n" +
" dtb_ordr.qta_evasa + \n" +
" (@segno * \n" +
" (CASE dtb_ordr.unt_ord\n" +
" when doc.unt_doc then doc.qta_doc\n" +
" when doc.unt_doc2 then doc.qta_doc2\n" +
" when doc.unt_doc3 then doc.qta_doc3\n" +
" else \n" +
" Round(((doc.qta_doc_no_um / dtb_ordr.rap_conv)),mtb_unt_mis.cifre_dec) \n" +
" end ))\n" +
" ELSE \n" +
" dtb_ordr.qta_evasa \n" +
" END, \n" +
" dtb_ordr.num_cnf_evasa = dtb_ordr.num_cnf_evasa + (@segno * doc.num_cnf),\n" +
" dtb_ordr.flag_evaso_forzato = CASE WHEN @Operation = 'D' THEN 'N' ELSE doc.flag_evaso_forzato END,\n" +
" dtb_ordr.flag_evaso = CASE WHEN @Operation = 'D' THEN 'I'\n" +
" WHEN doc.flag_evaso_forzato = 'S' THEN 'E' ELSE dtb_ordr.flag_evaso END \n" +
" FROM dtb_ordr INNER JOIN mtb_unt_mis ON dtb_ordr.unt_ord = mtb_unt_mis.unt_mis\n" +
" INNER JOIN \n" +
" (SELECT dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" ( dtb_doct.gestione <> 'L' AND (dtb_tipi.segno_qta_car = 1 OR dtb_tipi.segno_qta_scar = 1 ) OR \n" +
" ( dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_scar = 1 ))\n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 \n" +
" UNION ALL\n" +
" SELECT dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif, \n" +
" dtb_ordt.num_ord_rif, \n" +
" dtb_ordt.riga_ord_rif,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" left outer join dtb_ordt ON dtb_tipi.gestione = dtb_ordt.gestione and\n" +
" dtb_docr.data_ord = dtb_ordt.data_ord and\n" +
" dtb_docr.num_ord = dtb_ordt.num_ord\n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_car = 1 AND\n" +
" (SELECT application_name from azienda ) = 'WINGEST'\n" +
" GROUP BY dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif,\n" +
" dtb_ordt.num_ord_rif,\n" +
" dtb_ordt.riga_ord_rif, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 ) doc ON\n" +
" dtb_ordr.gestione = doc.gestione AND\n" +
" dtb_ordr.data_ord = doc.data_ord AND\n" +
" dtb_ordr.num_ord = doc.num_ord AND\n" +
" dtb_ordr.riga_ord = doc.riga_ord;\n" +
" \n" +
" UPDATE dtb_ordt\n" +
" SET dtb_ordt.qta_evasa_prod = dtb_ordt.qta_evasa_prod + (@segno * (doc.qta_doc / case when dtb_ordt.rap_conv_prod = 0 then 1 ELSE dtb_ordt.rap_conv_prod END)),\n" +
" dtb_ordt.flag_evaso_prod = \n" +
" CASE WHEN dtb_ordt.flag_evaso_prod = 'A' THEN dtb_ordt.flag_evaso_prod\n" +
" WHEN @segno = -1 THEN CASE WHEN dtb_ordt.flag_evaso_forzato ='S' and dtb_ordt.flag_evaso_prod <> 'A' THEN 'E' ELSE 'I' END\n" +
" WHEN @segno = 1 THEN \n" +
" CASE WHEN doc.flag_evaso_forzato ='S' and dtb_ordt.flag_evaso_prod <> 'A' THEN 'E' \n" +
" WHEN dtb_ordt.qta_evasa_prod + (@segno * (doc.qta_doc / case when dtb_ordt.rap_conv_prod = 0 then 1 ELSE dtb_ordt.rap_conv_prod END)) = dtb_ordt.qta_prod then 'E' \n" +
" ELSE dtb_ordt.flag_evaso_prod END\n" +
" END\n" +
" FROM dtb_ordt INNER JOIN \n" +
" (SELECT dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" Sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc,\n" +
" Sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND \n" +
" dtb_tipi.segno_qta_car = 1 \n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord\n" +
" UNION ALL\n" +
" SELECT dtb_doct.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" Sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc,\n" +
" Sum(dtb_docr.num_cnf) as num_cnf,\n" +
" case when (SELECT application_name from azienda ) = 'WINGEST' THEN min (CASE WHEN dtb_docr.qta_doc >= ord_prod.qta_ord OR (dtb_docr.qta_doc < ord_prod.qta_ord AND dtb_docr.flag_evaso_forzato = 'S' ) THEN 'S' ELSE 'N' END ) ELSE 'N' END as flag_evaso_forzato \n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag 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_ordr ord_prod on dtb_docr.data_ord = ord_prod.data_ord and\n" +
" dtb_docr.num_ord = ord_prod.num_ord and\n" +
" dtb_docr.riga_ord = ord_prod.riga_ord and\n" +
" ord_prod.gestione = 'A'\n" +
" inner join dtb_ordt on dtb_docr.data_ord = dtb_ordt.data_ord_rif and\n" +
" dtb_docr.num_ord = dtb_ordt.num_ord_rif and\n" +
" dtb_ordt.gestione = 'L' \n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND (dtb_tipi.segno_qta_car = 0 AND dtb_tipi.segno_val_car = 1)\n" +
" \n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord \n" +
" ) doc ON\n" +
" dtb_ordt.gestione = doc.gestione AND\n" +
" dtb_ordt.data_ord = doc.data_ord AND\n" +
" dtb_ordt.num_ord = doc.num_ord ;\n" +
" \n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250930182717 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("w_jriep_presenze_dip_disp", "CBX_VISUALIZZANOTEAGG", "VISIBLE", "N",
"Inserire S/N se si vuole o meno visualizzare il flag", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -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_20251001103200 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update stb_gest_setup set key_section = 'FLAG_COSTO_DISTINTA_NO_MDO' where key_section = 'COSTO_DA_DISTINTA_SENZA_MDO' and gest_name = 'w_mriassegna_costo_dlg'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -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_20251001104616 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update stb_gest_setup set section = 'SETUP' where key_section = 'FLAG_COSTO_DISTINTA_NO_MDO'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -15,7 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.File;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -31,7 +31,7 @@ public class CleanDirectoryComponent {
private SetupGest setupGest;
@Scheduled(fixedDelay = 12, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void cleanDirectory() throws Exception {
public void cleanDirectory() throws Exception {
if (!UtilityDebug.isDebugExecution()) {
List<AvailableConnectionsModel> databases = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
@@ -89,7 +89,7 @@ public class CleanDirectoryComponent {
// UtilityFile.cleanDirectory(UtilityDirs.getTempDirectoryPath(), 1, "");
//Cancello i log di Tomcat
String logsPath = String.format("%s%slogs", UtilityDirs.getCatalinaHome(), File.separator);
String logsPath = Paths.get(UtilityDirs.getCatalinaHome(), "logs").toString();
UtilityFile.cleanDirectory(logsPath, settingsModel.getLoggerConfiguration().getDeleteDays(), "");

View File

@@ -87,8 +87,6 @@ public class SyncManager {
entityToSave.manageWithParentConnection(connection);
proceedSyncronization(entitySource, entityCloned, lastProfileUsed, multiDBTransactionManager);
multiDBTransactionManager.commitAll();
logger.debug("Fine sincronizzazione per " + entitySource.getTableName() + " su " + multiDBTransactionManager.getDistributoreProfileName());
} catch (Exception e) {
multiDBTransactionManager.rollbackAll();

View File

@@ -76,8 +76,8 @@ public class UtilityUser {
String sql = "SELECT md.* FROM " + MtbDepo.ENTITY + " md " +
" INNER JOIN " + WtbDepo.ENTITY + " wd " +
" ON md.cod_mdep = wd.cod_mdep" +
" WHERE wd.user_name = " + UtilityDB.valueToString(userDTO.getUsername()+
" order by wd.default_depo desc");
" WHERE wd.user_name = " + UtilityDB.valueToString(userDTO.getUsername()) +
" order by wd.default_depo desc";
List<MtbDepo> depos = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, MtbDepo.class);

View File

@@ -1,472 +1,480 @@
package it.integry.ems.utility;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.task.TaskExecutorService;
import it.integry.ems.utility.enums.DigitalSignatureType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.NodeList;
import javax.validation.constraints.NotNull;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.security.Security;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class UtilityFile {
private static Logger logger = LogManager.getLogger();
/**
* Questo metodo ritorna una lista contenente le righe estrapolate dal file di input
*
* @param file
* @return
* @throws Exception
*/
public static List<String> readLinesFromFile(File file) throws Exception {
List<String> lines = new ArrayList<String>();
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
br.close();
return lines;
}
public static Boolean directoryCreate(String directory) {
Boolean created = true;
directory = directory.replaceAll("\\\\", "/");
File dir = new File(directory);
if (!dir.exists()) {
created = dir.mkdirs();
}
return created;
}
public static void writeFileRenameDuplicate(String folder, String fileName,
byte[] content) throws Exception {
String pathComplete = folder + fileName;
if (new File(pathComplete).exists()) {
String[] tokens = fileName.split("\\.(?=[^\\.]+$)"); // SEPARA NOME FILE ED ESTENSIONE E LI RICOMBINA COL NUOVO NOME DEL FILE
String ext = tokens[1];
fileName = tokens[0] + "(1)." + ext;
pathComplete = folder + fileName;
}
FileUtils.writeByteArrayToFile(new File(pathComplete), content);
}
public static void cleanDirectory(@NotNull final String pathFile, int days, String regex) throws ExecutionException, InterruptedException, TimeoutException {
GregorianCalendar calendar = new GregorianCalendar();
calendar.add(Calendar.DAY_OF_YEAR, -1 * days);
cleanDirectory(pathFile, calendar.getTime(), regex);
}
public static void cleanDirectory(@NotNull final String pathFile, @NotNull final Date fromDate, final String regex) throws ExecutionException, InterruptedException, TimeoutException {
final TaskExecutorService taskExecutorService = ApplicationContextProvider.getApplicationContext().getBean(TaskExecutorService.class);
taskExecutorService.executeTask(() -> {
File directory = new File(pathFile);
if (!directory.exists()) return;
final long purgeTime = fromDate.getTime();
final Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
try {
// Prima passata: elimina i file secondo il criterio
Files.walkFileTree(Paths.get(pathFile), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
File f = file.toFile();
Matcher m = p.matcher(f.getName());
if (m.find() && f.lastModified() < purgeTime) {
f.delete();
}
return FileVisitResult.CONTINUE;
}
});
// Seconda passata: elimina tutte le directory vuote partendo dal basso
Files.walkFileTree(Paths.get(pathFile), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
try {
if (!Files.list(dir).findAny().isPresent()) {
Files.delete(dir);
}
} catch (IOException e) {
logger.error("Errore durante la cancellazione della directory vuota: " + dir, e);
}
return FileVisitResult.CONTINUE;
}
});
} catch (Exception e) {
logger.error(e.getMessage());
}
}, true);
}
public static boolean directoryExists(String directory) {
boolean lb_exists;
lb_exists = fileExists(directory);
return lb_exists;
}
public static boolean fileExists(String filePath) {
return (new File(filePath)).exists();
}
public static boolean fileDelete(String filePath) {
File f = new File(filePath);
if (f.exists()) {
f.delete();
}
return true;
}
public static void createFile(String filePath) throws Exception {
File file = new File(filePath);
if (!file.exists()) {
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
}
public static void saveFile(String path, String name, String data) throws Exception {
saveFile(path, name, data.getBytes());
}
public static String saveFile(String path, String name, byte[] data) throws IOException {
//CONTROLLO SULL'ULTIMO CARATTERE DEL PERCORSO, VIENE AGGIUNTO LO SLASH SE MANCANTE
if (!path.endsWith(File.separator)) {
path += File.separator;
}
if (!new File(path).exists()) {
directoryCreate(path);
}
String pathFile = path + name;
FileOutputStream fos = new FileOutputStream(pathFile);
IOUtils.write(data, fos);
IOUtils.closeQuietly(fos);
return pathFile;
}
public static byte[] convertToByteArray(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int) length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file " + file.getName());
}
is.close();
return bytes;
}
public static String convertToBase64(File file) throws IOException {
return new String(convertToByteArray(file));
}
public static void writeStringToFile(String string, File destinationFile) throws IOException {
FileOutputStream fos = new FileOutputStream(destinationFile);
IOUtils.write(string.getBytes(), fos);
fos.flush();
IOUtils.closeQuietly(fos);
}
/**
* Rimozione firma elettronica da file xml
*
* @param inputFileName Nome file da convertire
* @param inputContent Contenuto file codificato in Base64
* @return byte array del file privo di firma elettronica
* @throws Exception
*/
public static byte[] removeDigitalSign(String inputFileName, byte[] inputContent) throws Exception {
ByteArrayInputStream xmlInputStream1 = new ByteArrayInputStream(inputContent);
ByteArrayInputStream xmlInputStream2 = new ByteArrayInputStream(inputContent);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DigitalSignatureType type;
if (inputFileName.toUpperCase().endsWith(".P7M")) {
type = DigitalSignatureType.CADESBES;
} else if (inputFileName.toUpperCase().endsWith(".XML")) {
type = DigitalSignatureType.XADESBES;
} else {
throw new Exception(String.format("File %s non compatibile. Formato richiesto .xml/.p7m", inputFileName));
}
try {
switch (type) {
case CADESBES:
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
CMSSignedData cmsSignedData;
String inputString = IOUtils.toString(xmlInputStream1);
if (Base64.isBase64(inputString)) {
cmsSignedData = new CMSSignedData(Base64.decodeBase64(inputString));
} else {
cmsSignedData = new CMSSignedData(IOUtils.toByteArray(xmlInputStream2));
}
if (cmsSignedData.getSignedContent() == null) {
throw new Exception(String.format("Contenuto file %s non trovato", inputFileName));
} else {
cmsSignedData.getSignedContent().write(outputStream);
}
break;
case XADESBES:
/* Formato ENVELOPED Signature conforme alla fatturazione elettronica */
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
org.w3c.dom.Document doc = dbf.newDocumentBuilder().parse(xmlInputStream1);
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
if (nl.getLength() > 0) {
nl.item(0).getParentNode().removeChild(nl.item(0));
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer simpleTransformer = transformerFactory.newTransformer();
simpleTransformer.transform(new DOMSource(doc), new StreamResult(outputStream));
break;
}
} catch (Exception ex) {
throw new Exception(String.format("Errore durante l'estrazione della firma digitale dal file %s: %s", inputFileName, ex.getMessage()), ex);
}
return outputStream.toByteArray();
}
/**
* Metodo che restituisce il nuovo progressivo da associare alla fattura elettronica
*
* @param key Chiave della tabella dtb_doc_xml che indica se il progressivo è relativo al file oppure all'archivio. <br>
* Valori ammessi: <i>prog_sdi, prog_archivio</i>
* @return
* @throws Exception
*/
public static String getProgressivoSDI(String key) throws Exception {
return getProgressivoSDI(key, null);
}
public static String getProgressivoSDI(String key, String progSdi) throws Exception {
List<Character> charSequence = new ArrayList<Character>(); // Successione caratteri
for (int i = 48; i <= 57; i++) { // 0 - 9
charSequence.add((char) i);
}
for (int i = 65; i <= 90; i++) { // A - Z
charSequence.add((char) i);
}
List<String> acceptedkey = Arrays.asList("prog_sdi", "prog_archivio");
if (!acceptedkey.contains(key)) {
throw new Exception("Valore chiave non ammesso");
}
String progressivoSDI;
if (UtilityString.isNullOrEmpty(progSdi)) {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
Connection connection = multiDBTransactionManager.getPrimaryConnection();
String query = String.format("SELECT MAX( %s ) FROM dtb_doc_xml WHERE %s IS NOT NULL ", key, key);
progressivoSDI = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query);
if (progressivoSDI != null) {
if (progressivoSDI.equalsIgnoreCase("ZZZZZ")) {
throw new Exception("Raggiunto numero limite di fatture/archivi inviabili allo SDI");
}
} else {
progressivoSDI = "00000";
}
} else {
progressivoSDI = progSdi;
}
boolean incremented = true;
char[] chars = progressivoSDI.toCharArray();
for (int i = progressivoSDI.length() - 1; i > 0; i--) {
if (incremented) {
char c = chars[i];
int index = charSequence.indexOf(c);
if (index == charSequence.size() - 1) {
chars[i] = charSequence.get(0);
incremented = true;
} else {
chars[i] = charSequence.get(index + 1);
incremented = false;
}
}
}
progressivoSDI = new String(chars);
return progressivoSDI;
}
/**
* Conversione file HTML in formato PDF
*
* @param htmlOutputStream {@link ByteArrayOutputStream} del file HTML in ingresso
* @param pdfTable Eventuale tabella da inserire nel documento
* @return {@link ByteArrayOutputStream} del PDF generato
* @throws Exception
*/
public static ByteArrayOutputStream htmlToPdf(ByteArrayOutputStream htmlOutputStream, PdfPTable pdfTable) throws
Exception {
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, pdfOutputStream);
document.setMargins(5, 5, 5, 5);
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(htmlOutputStream.toByteArray()));
if (pdfTable != null) {
document.add(pdfTable);
}
document.close();
return pdfOutputStream;
}
final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
static {
Arrays.sort(illegalChars);
}
public static String sanitizeFileName(String fileName) {
return sanitizeFileName(fileName, '_');
}
public static String sanitizeFileName(String fileName, Character replaceChar) {
StringBuilder cleanName = new StringBuilder();
int len = fileName.codePointCount(0, fileName.length());
for (int i = 0; i < len; i++) {
int c = fileName.codePointAt(i);
cleanName.appendCodePoint(Arrays.binarySearch(illegalChars, c) < 0 ? c : replaceChar);
}
return cleanName.toString();
}
public static void moveFile(@NotNull String path, @NotNull String newPath, @NotNull String fileName, String
newFileName) throws Exception {
if (!path.endsWith("\\") || !path.endsWith("/"))
path = path + File.separator;
if (!newPath.endsWith("\\") || !newPath.endsWith("/"))
newPath = newPath + File.separator;
if (newFileName == null)
newFileName = fileName;
try {
FileUtils.moveFile(new File(path + fileName), new File(newPath + newFileName));
} catch (Exception e) {
throw new Exception("Impossibile spostare il file");
}
}
public static File createZipFromMultipartFile(String pathFile, String fileName, MultipartFile... files) throws
IOException {
// Nome del file ZIP da creare
if (!UtilityFile.directoryExists(pathFile))
UtilityFile.directoryCreate(pathFile);
String zipFileName = UtilityString.isNullOrEmpty(fileName) ? "output.zip" : fileName;
File zipFile = new File(pathFile + zipFileName);
for (MultipartFile file : files) {
// Crea un output stream per scrivere il file ZIP
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos)) {
// Aggiungi il file come una nuova entry nello ZIP
ZipEntry zipEntry = new ZipEntry(file.getOriginalFilename());
zos.putNextEntry(zipEntry);
// Scrivi il contenuto del file nel file ZIP
zos.write(file.getBytes());
zos.closeEntry();
}
}
return zipFile;
}
}
package it.integry.ems.utility;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.task.TaskExecutorService;
import it.integry.ems.utility.enums.DigitalSignatureType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.NodeList;
import javax.validation.constraints.NotNull;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.security.Security;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class UtilityFile {
private static Logger logger = LogManager.getLogger();
/**
* Questo metodo ritorna una lista contenente le righe estrapolate dal file di input
*
* @param file
* @return
* @throws Exception
*/
public static List<String> readLinesFromFile(File file) throws Exception {
List<String> lines = new ArrayList<String>();
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
br.close();
return lines;
}
public static Boolean directoryCreate(String directory) {
Boolean created = true;
directory = directory.replaceAll("\\\\", "/");
File dir = new File(directory);
if (!dir.exists()) {
created = dir.mkdirs();
}
return created;
}
public static void writeFileRenameDuplicate(String folder, String fileName,
byte[] content) throws Exception {
String pathComplete = folder + fileName;
if (new File(pathComplete).exists()) {
String[] tokens = fileName.split("\\.(?=[^\\.]+$)"); // SEPARA NOME FILE ED ESTENSIONE E LI RICOMBINA COL NUOVO NOME DEL FILE
String ext = tokens[1];
fileName = tokens[0] + "(1)." + ext;
pathComplete = folder + fileName;
}
FileUtils.writeByteArrayToFile(new File(pathComplete), content);
}
public static void cleanDirectory(@NotNull final String pathFile, int days, String regex) throws ExecutionException, InterruptedException, TimeoutException {
cleanDirectory(pathFile, LocalDate.now().minusDays(days), regex);
}
public static void cleanDirectory(@NotNull final String pathFile, @NotNull final LocalDate fromDate, final String regex) throws ExecutionException, InterruptedException, TimeoutException {
final TaskExecutorService taskExecutorService = ApplicationContextProvider.getApplicationContext().getBean(TaskExecutorService.class);
// taskExecutorService.executeTask(() -> {
File directory = new File(pathFile);
if (!directory.exists()) return;
final long purgeTime = fromDate.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
final Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
try {
// Prima passata: elimina i file secondo il criterio
Files.walkFileTree(Paths.get(pathFile), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
File f = file.toFile();
Matcher m = p.matcher(f.getName());
if (m.find() && f.lastModified() < purgeTime) {
f.delete();
}
return FileVisitResult.CONTINUE;
}
});
// Seconda passata: elimina tutte le directory vuote partendo dal basso
Files.walkFileTree(Paths.get(pathFile), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
if (exc != null) {
logger.error("Errore durante la cancellazione della directory vuota: " + dir, exc);
return FileVisitResult.SKIP_SUBTREE;
}
File d = dir.toFile();
if (d.listFiles().length == 0) {
d.delete();
}
return FileVisitResult.CONTINUE;
}
});
} catch (Exception e) {
logger.error(String.format("Errore durante la clean della directory: %s", pathFile), e);
}
// }, true);
}
public static boolean directoryExists(String directory) {
boolean lb_exists;
lb_exists = fileExists(directory);
return lb_exists;
}
public static boolean fileExists(String filePath) {
return (new File(filePath)).exists();
}
public static boolean fileDelete(String filePath) {
File f = new File(filePath);
if (f.exists()) {
f.delete();
}
return true;
}
public static void createFile(String filePath) throws Exception {
File file = new File(filePath);
if (!file.exists()) {
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
}
public static void saveFile(String path, String name, String data) throws Exception {
saveFile(path, name, data.getBytes());
}
public static String saveFile(String path, String name, byte[] data) throws IOException {
//CONTROLLO SULL'ULTIMO CARATTERE DEL PERCORSO, VIENE AGGIUNTO LO SLASH SE MANCANTE
if (!path.endsWith(File.separator)) {
path += File.separator;
}
if (!new File(path).exists()) {
directoryCreate(path);
}
String pathFile = path + name;
FileOutputStream fos = new FileOutputStream(pathFile);
IOUtils.write(data, fos);
IOUtils.closeQuietly(fos);
return pathFile;
}
public static byte[] convertToByteArray(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int) length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file " + file.getName());
}
is.close();
return bytes;
}
public static String convertToBase64(File file) throws IOException {
return new String(convertToByteArray(file));
}
public static void writeStringToFile(String string, File destinationFile) throws IOException {
FileOutputStream fos = new FileOutputStream(destinationFile);
IOUtils.write(string.getBytes(), fos);
fos.flush();
IOUtils.closeQuietly(fos);
}
/**
* Rimozione firma elettronica da file xml
*
* @param inputFileName Nome file da convertire
* @param inputContent Contenuto file codificato in Base64
* @return byte array del file privo di firma elettronica
* @throws Exception
*/
public static byte[] removeDigitalSign(String inputFileName, byte[] inputContent) throws Exception {
ByteArrayInputStream xmlInputStream1 = new ByteArrayInputStream(inputContent);
ByteArrayInputStream xmlInputStream2 = new ByteArrayInputStream(inputContent);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DigitalSignatureType type;
if (inputFileName.toUpperCase().endsWith(".P7M")) {
type = DigitalSignatureType.CADESBES;
} else if (inputFileName.toUpperCase().endsWith(".XML")) {
type = DigitalSignatureType.XADESBES;
} else {
throw new Exception(String.format("File %s non compatibile. Formato richiesto .xml/.p7m", inputFileName));
}
try {
switch (type) {
case CADESBES:
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
Security.addProvider(new BouncyCastleProvider());
}
CMSSignedData cmsSignedData;
String inputString = IOUtils.toString(xmlInputStream1);
if (Base64.isBase64(inputString)) {
cmsSignedData = new CMSSignedData(Base64.decodeBase64(inputString));
} else {
cmsSignedData = new CMSSignedData(IOUtils.toByteArray(xmlInputStream2));
}
if (cmsSignedData.getSignedContent() == null) {
throw new Exception(String.format("Contenuto file %s non trovato", inputFileName));
} else {
cmsSignedData.getSignedContent().write(outputStream);
}
break;
case XADESBES:
/* Formato ENVELOPED Signature conforme alla fatturazione elettronica */
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
org.w3c.dom.Document doc = dbf.newDocumentBuilder().parse(xmlInputStream1);
NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
if (nl.getLength() > 0) {
nl.item(0).getParentNode().removeChild(nl.item(0));
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer simpleTransformer = transformerFactory.newTransformer();
simpleTransformer.transform(new DOMSource(doc), new StreamResult(outputStream));
break;
}
} catch (Exception ex) {
throw new Exception(String.format("Errore durante l'estrazione della firma digitale dal file %s: %s", inputFileName, ex.getMessage()), ex);
}
return outputStream.toByteArray();
}
/**
* Metodo che restituisce il nuovo progressivo da associare alla fattura elettronica
*
* @param key Chiave della tabella dtb_doc_xml che indica se il progressivo è relativo al file oppure all'archivio. <br>
* Valori ammessi: <i>prog_sdi, prog_archivio</i>
* @return
* @throws Exception
*/
public static String getProgressivoSDI(String key) throws Exception {
return getProgressivoSDI(key, null);
}
public static String getProgressivoSDI(String key, String progSdi) throws Exception {
List<Character> charSequence = new ArrayList<Character>(); // Successione caratteri
for (int i = 48; i <= 57; i++) { // 0 - 9
charSequence.add((char) i);
}
for (int i = 65; i <= 90; i++) { // A - Z
charSequence.add((char) i);
}
List<String> acceptedkey = Arrays.asList("prog_sdi", "prog_archivio");
if (!acceptedkey.contains(key)) {
throw new Exception("Valore chiave non ammesso");
}
String progressivoSDI;
if (UtilityString.isNullOrEmpty(progSdi)) {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
Connection connection = multiDBTransactionManager.getPrimaryConnection();
String query = String.format("SELECT MAX( %s ) FROM dtb_doc_xml WHERE %s IS NOT NULL ", key, key);
progressivoSDI = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query);
if (progressivoSDI != null) {
if (progressivoSDI.equalsIgnoreCase("ZZZZZ")) {
throw new Exception("Raggiunto numero limite di fatture/archivi inviabili allo SDI");
}
} else {
progressivoSDI = "00000";
}
} else {
progressivoSDI = progSdi;
}
boolean incremented = true;
char[] chars = progressivoSDI.toCharArray();
for (int i = progressivoSDI.length() - 1; i > 0; i--) {
if (incremented) {
char c = chars[i];
int index = charSequence.indexOf(c);
if (index == charSequence.size() - 1) {
chars[i] = charSequence.get(0);
incremented = true;
} else {
chars[i] = charSequence.get(index + 1);
incremented = false;
}
}
}
progressivoSDI = new String(chars);
return progressivoSDI;
}
/**
* Conversione file HTML in formato PDF
*
* @param htmlOutputStream {@link ByteArrayOutputStream} del file HTML in ingresso
* @param pdfTable Eventuale tabella da inserire nel documento
* @return {@link ByteArrayOutputStream} del PDF generato
* @throws Exception
*/
public static ByteArrayOutputStream htmlToPdf(ByteArrayOutputStream htmlOutputStream, PdfPTable pdfTable) throws
Exception {
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, pdfOutputStream);
document.setMargins(5, 5, 5, 5);
document.open();
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(htmlOutputStream.toByteArray()));
if (pdfTable != null) {
document.add(pdfTable);
}
document.close();
return pdfOutputStream;
}
final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
static {
Arrays.sort(illegalChars);
}
public static String sanitizeFileName(String fileName) {
return sanitizeFileName(fileName, '_');
}
public static String sanitizeFileName(String fileName, Character replaceChar) {
StringBuilder cleanName = new StringBuilder();
int len = fileName.codePointCount(0, fileName.length());
for (int i = 0; i < len; i++) {
int c = fileName.codePointAt(i);
cleanName.appendCodePoint(Arrays.binarySearch(illegalChars, c) < 0 ? c : replaceChar);
}
return cleanName.toString();
}
public static void moveFile(@NotNull String path, @NotNull String newPath, @NotNull String fileName, String
newFileName) throws Exception {
if (!path.endsWith("\\") || !path.endsWith("/"))
path = path + File.separator;
if (!newPath.endsWith("\\") || !newPath.endsWith("/"))
newPath = newPath + File.separator;
if (newFileName == null)
newFileName = fileName;
try {
FileUtils.moveFile(new File(path + fileName), new File(newPath + newFileName));
} catch (Exception e) {
throw new Exception("Impossibile spostare il file");
}
}
public static File createZipFromMultipartFile(String pathFile, String fileName, MultipartFile... files) throws
IOException {
// Nome del file ZIP da creare
if (!UtilityFile.directoryExists(pathFile))
UtilityFile.directoryCreate(pathFile);
String zipFileName = UtilityString.isNullOrEmpty(fileName) ? "output.zip" : fileName;
File zipFile = new File(pathFile + zipFileName);
for (MultipartFile file : files) {
// Crea un output stream per scrivere il file ZIP
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos)) {
// Aggiungi il file come una nuova entry nello ZIP
ZipEntry zipEntry = new ZipEntry(file.getOriginalFilename());
zos.putNextEntry(zipEntry);
// Scrivi il contenuto del file nel file ZIP
zos.write(file.getBytes());
zos.closeEntry();
}
}
return zipFile;
}
}

View File

@@ -84,6 +84,9 @@ public class JtbRLavt extends EntityBase {
@SqlField(value = "data_controllo")
private Date dataControllo;
@SqlField(value = "note_agg")
private String noteAgg;
@EntityChild
private List<JtbRLavr> jtbRlavr = new ArrayList<>();
@@ -265,6 +268,15 @@ public class JtbRLavt extends EntityBase {
return this;
}
public String getNoteAgg() {
return noteAgg;
}
public JtbRLavt setNoteAgg(String noteAgg) {
this.noteAgg = noteAgg;
return this;
}
public List<JtbRLavr> getJtbRlavr() {
return jtbRlavr;
}

View File

@@ -0,0 +1,50 @@
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;
@Master
@PropertyReactive
@Table(MrlAartClieBlacklist.ENTITY)
@JsonTypeName(MrlAartClieBlacklist.ENTITY)
public class MrlAartClieBlacklist extends EntityBase {
public static final String ENTITY = "mrl_aart_clie_blacklist";
private static final Logger logger = LogManager.getLogger();
private static final long serialVersionUID = 1L;
public MrlAartClieBlacklist() {
super(logger);
}
@PK
@SqlField(value = "cod_anag", maxLength = 5, nullable = false)
private String codAnag;
@PK
@SqlField(value = "cod_mart", maxLength = 15, nullable = false)
private String codMart;
public String getCodAnag() {
return codAnag;
}
public MrlAartClieBlacklist setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodMart() {
return codMart;
}
public MrlAartClieBlacklist setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
}

View File

@@ -0,0 +1,158 @@
package it.integry.ems_model.entity;
import it.integry.common.var.CommonConstants;
import org.apache.logging.log4j.LogManager;
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 it.integry.ems_model.annotation.PK;
import it.integry.ems_model.annotation.Identity;
import it.integry.ems_model.annotation.SqlField;
import java.util.Date;
@Master()
@PropertyReactive()
@Table(value = MtbVarLisvLog.ENTITY)
@JsonTypeName(value = MtbVarLisvLog.ENTITY)
public class MtbVarLisvLog extends EntityBase {
public final static String ENTITY = "mtb_var_lisv_log";
private final static Long serialVersionUID = 1L;
private final static Logger logger = LogManager.getLogger();
public MtbVarLisvLog() {
super(logger);
}
@PK()
@Identity()
@SqlField(value = "id", nullable = false)
private Long id;
@SqlField(value = "datetime_var", nullable = false, defaultObjectValue = CommonConstants.TIMESTAMP)
private LocalDateTime datetimeVar;
@SqlField(value = "user_name", maxLength = 40, nullable = true)
private String userName;
@SqlField(value = "cod_vlis", maxLength = 5, nullable = false)
private String codVlis;
@SqlField(value = "versione", nullable = false)
private Integer versione;
@SqlField(value = "cod_promo", maxLength = 10, nullable = true)
private String codPromo;
@SqlField(value = "data_iniz", nullable = true)
private LocalDate dataIniz;
@SqlField(value = "data_fine", nullable = true)
private LocalDate dataFine;
@SqlField(value = "cod_mart", maxLength = 15, nullable = true)
private String codMart;
@SqlField(value = "note", nullable = true)
private String note;
public Long getId() {
return id;
}
public MtbVarLisvLog setId(Long id) {
this.id = id;
return this;
}
public LocalDateTime getDatetimeVar() {
return datetimeVar;
}
public MtbVarLisvLog setDatetimeVar(LocalDateTime datetimeVar) {
this.datetimeVar = datetimeVar;
return this;
}
public String getUserName() {
return userName;
}
public MtbVarLisvLog setUserName(String userName) {
this.userName = userName;
return this;
}
public String getCodVlis() {
return codVlis;
}
public MtbVarLisvLog setCodVlis(String codVlis) {
this.codVlis = codVlis;
return this;
}
public Integer getVersione() {
return versione;
}
public MtbVarLisvLog setVersione(Integer versione) {
this.versione = versione;
return this;
}
public String getCodPromo() {
return codPromo;
}
public MtbVarLisvLog setCodPromo(String codPromo) {
this.codPromo = codPromo;
return this;
}
public LocalDate getDataIniz() {
return dataIniz;
}
public MtbVarLisvLog setDataIniz(LocalDate dataIniz) {
this.dataIniz = dataIniz;
return this;
}
public LocalDate getDataFine() {
return dataFine;
}
public MtbVarLisvLog setDataFine(LocalDate dataFine) {
this.dataFine = dataFine;
return this;
}
public String getCodMart() {
return codMart;
}
public MtbVarLisvLog setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getNote() {
return note;
}
public MtbVarLisvLog setNote(String note) {
this.note = note;
return this;
}
}

View File

@@ -96,7 +96,7 @@ public class VtbDest extends EntityBase implements EquatableEntityInterface<VtbD
@SqlField(value = "part_iva", maxLength = 20)
private String partIva;
@SqlField(value = "cod_affiliazione", maxLength = 10)
@SqlField(value = "cod_affiliazione", maxLength = 40)
private String codAffiliazione;
@SqlField(value = "indirizzo_legale", maxLength = 255)

File diff suppressed because one or more lines are too long

View File

@@ -179,20 +179,50 @@ public class DigitalInvoiceService {
Azienda datiAzienda = this.getDatiAzienda(data);
// GET Dati Testata
String queryDatiHeader = "SELECT dtb_doct.num_cmov, dtb_doct.gestione, dtb_doct.num_doc, isNull(vtb_dest.cuu_pa, gtb_anag.cuu_pa ) as cuu_pa, IsNull(vtb_dest.e_mail_pec, gtb_anag.e_mail_pec) as e_mail_pec, gtb_anag.flag_persona_fg, naziAnag.cod_nazi_alpha_2 as nazione, " +
" gtb_anag.part_iva, gtb_anag.rag_soc + isNull(' ' + gtb_anag.rag_soc2, '') as rag_soc, gtb_anag.cod_fisc, gtb_anag.nome, " +
" gtb_anag.cognome, gtb_anag.indirizzo, gtb_anag.cap, gtb_anag.citta, gtb_anag.prov, gtb_anag.reg_fisc, vtb_dest.destinatario as rag_soc_dest, vtb_dest.indirizzo AS indirizzo_dest, " +
" vtb_dest.citta AS citta_dest, vtb_dest.cap AS cap_dest, vtb_dest.prov AS prov_dest, naziDest.cod_nazi_alpha_2 AS nazione_dest, " +
" vtb_dest.part_iva AS part_iva_dest, CASE WHEN Len(isNull(vtb_dest.cuu_pa, gtb_anag.cuu_pa )) = 6 THEN 'FPA12' ELSE 'FPR12' END AS formato, isNull(vtb_dest.flag_stabile_org, 'N') as flag_stabile_org " +
"FROM dtb_doct " +
" LEFT OUTER JOIN gtb_anag ON gtb_anag.cod_anag = dtb_doct.cod_anag " +
" LEFT OUTER JOIN (select gtb_nazi.nazione, gtb_nazi_iso.cod_nazione_iso, gtb_nazi_iso.cod_nazi_alpha_2 " +
" from gtb_nazi left outer join gtb_nazi_iso on gtb_nazi.cod_nazione_iso = gtb_nazi_iso.cod_nazione_iso) naziAnag ON gtb_anag.nazione = naziAnag.nazione " +
" LEFT OUTER JOIN vtb_dest " +
" ON vtb_dest.cod_anag = dtb_doct.cod_anag " +
" AND vtb_dest.cod_vdes = dtb_doct.cod_vdes " +
" LEFT OUTER JOIN (select gtb_nazi.nazione, gtb_nazi_iso.cod_nazione_iso, gtb_nazi_iso.cod_nazi_alpha_2 " +
" from gtb_nazi left outer join gtb_nazi_iso on gtb_nazi.cod_nazione_iso = gtb_nazi_iso.cod_nazione_iso) naziDest ON vtb_dest.nazione = naziDest.nazione " +
String queryDatiHeader = "SELECT dtb_doct.num_cmov,\n" +
" dtb_doct.gestione,\n" +
" dtb_doct.num_doc,\n" +
" IIF(ISNULL(dtb_tipi_fe.flag_integrazione, 0) = 1, azienda.cod_sdi_ditta,\n" +
" ISNULL(vtb_dest.cuu_pa, gtb_anag.cuu_pa)) AS cuu_pa,\n" +
" ISNULL(vtb_dest.e_mail_pec, gtb_anag.e_mail_pec) AS e_mail_pec,\n" +
" gtb_anag.flag_persona_fg,\n" +
" naziAnag.cod_nazi_alpha_2 AS nazione,\n" +
" gtb_anag.part_iva,\n" +
" gtb_anag.rag_soc + ISNULL(' ' + gtb_anag.rag_soc2, '') AS rag_soc,\n" +
" gtb_anag.cod_fisc,\n" +
" gtb_anag.nome,\n" +
" gtb_anag.cognome,\n" +
" gtb_anag.indirizzo,\n" +
" IIF(ISNULL(dtb_tipi_fe.flag_integrazione, 0) = 1, '00000', gtb_anag.cap) AS cap,\n" +
" gtb_anag.citta,\n" +
" gtb_anag.prov,\n" +
" gtb_anag.reg_fisc,\n" +
" vtb_dest.destinatario AS rag_soc_dest,\n" +
" vtb_dest.indirizzo AS indirizzo_dest,\n" +
" vtb_dest.citta AS citta_dest,\n" +
" vtb_dest.cap AS cap_dest,\n" +
" vtb_dest.prov AS prov_dest,\n" +
" naziDest.cod_nazi_alpha_2 AS nazione_dest,\n" +
" vtb_dest.part_iva AS part_iva_dest,\n" +
" IIF(LEN(ISNULL(vtb_dest.cuu_pa, gtb_anag.cuu_pa)) = 6, 'FPA12', 'FPR12') AS formato,\n" +
" ISNULL(vtb_dest.flag_stabile_org, 'N') AS flag_stabile_org\n" +
"FROM dtb_doct\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" LEFT OUTER JOIN ctb_caus ON dtb_tipi.cod_ccau = ctb_caus.cod_ccau\n" +
" LEFT OUTER JOIN dtb_tipi_fe ON ctb_caus.cod_dtip_ccau = dtb_tipi_fe.cod_dtip_ccau\n" +
" LEFT OUTER JOIN gtb_anag ON gtb_anag.cod_anag = dtb_doct.cod_anag\n" +
" LEFT OUTER JOIN (SELECT gtb_nazi.nazione, gtb_nazi_iso.cod_nazione_iso, gtb_nazi_iso.cod_nazi_alpha_2\n" +
" FROM gtb_nazi\n" +
" LEFT OUTER JOIN gtb_nazi_iso ON gtb_nazi.cod_nazione_iso = gtb_nazi_iso.cod_nazione_iso) naziAnag\n" +
" ON gtb_anag.nazione = naziAnag.nazione\n" +
" LEFT OUTER JOIN vtb_dest\n" +
" ON vtb_dest.cod_anag = dtb_doct.cod_anag\n" +
" AND vtb_dest.cod_vdes = dtb_doct.cod_vdes\n" +
" LEFT OUTER JOIN (SELECT gtb_nazi.nazione, gtb_nazi_iso.cod_nazione_iso, gtb_nazi_iso.cod_nazi_alpha_2\n" +
" FROM gtb_nazi\n" +
" LEFT OUTER JOIN gtb_nazi_iso ON gtb_nazi.cod_nazione_iso = gtb_nazi_iso.cod_nazione_iso) naziDest\n" +
" ON vtb_dest.nazione = naziDest.nazione\n" +
" CROSS APPLY azienda\n" +
"WHERE dtb_doct.cod_anag = " + UtilityDB.valueToString(codAnag) +
" AND dtb_doct.cod_dtip = " + UtilityDB.valueToString(codDtip) +
" AND dtb_doct.data_doc = " + UtilityDB.valueToString(dataDoc) +

View File

@@ -67,6 +67,14 @@ public class DocumentiDirettiService {
dtbDoc.setIdRiga(null);
});
}
if (UtilityString.isNullOrEmpty(dtbDoct.getCodAnag() )) {
throw new Exception("Codice cliente/fornitore obbligatorio");
}
if (UtilityString.isNullOrEmpty(dtbDoct.getCodDtip() )) {
throw new Exception("Tipo documento obbligatorio");
}
entityList.add(dtbDoct);
String sql =
@@ -122,12 +130,21 @@ public class DocumentiDirettiService {
entityRet = entityProcessor.processEntityList(mtbLisaCostoData, true);
UtilityEntity.throwEntitiesException(entityRet);
}
} else if (gestione.equalsIgnoreCase("V") && !UtilityString.isNullOrEmpty(dtbDoct.getCodFornTrasp()) &&
} else if (gestione.equalsIgnoreCase("V") &&
TipoEmissione.valueOf(UtilityHashMap.getValueIfExists(datiTipoDoc, "tipo_emissione")) == TipoEmissione.DIRETTA &&
!dtbDoct.getDtbDocImb().isEmpty() && salvaImballiAttiva) {
DtbDoct dtbDoctSave =
entityRet.stream().filter(x -> x instanceof DtbDoct && ((DtbDoct) x).getCodDtip().equals(dtbDoct.getCodDtip())).map(x -> (DtbDoct) x).findFirst().orElse(null);
saveDocImballi(dtbDoctSave, isInsert);
sql =
Query.format(
"SELECT costo FROM gtb_porto WHERE porto = %s",
dtbDoct.getIncoterms());
GtbPorto porto = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, GtbPorto.class);
if ((porto != null && porto.getCosto() == GtbPorto.Costo.ACQUIRENTE) || !UtilityString.isNullOrEmpty(dtbDoct.getCodFornTrasp())) {
DtbDoct dtbDoctSave =
entityRet.stream().filter(x -> x instanceof DtbDoct && ((DtbDoct) x).getCodDtip().equals(dtbDoct.getCodDtip())).map(x -> (DtbDoct) x).findFirst().orElse(null);
saveDocImballi(dtbDoctSave, isInsert);
}
}
multiDBTransactionManager.commitAll();

View File

@@ -535,6 +535,30 @@ public class ListiniVenditaServices {
}
entities.addAll(getVtbListData(listini));
if ( userSession.getCurrentUser() != null ) {
List<MtbVarLisvLog> chiusuraPromo = listini
.stream()
.map(
l -> {
MtbVarLisvLog log = new MtbVarLisvLog()
.setUserName(userSession.getUsername())
.setVersione(l.getVersione())
.setCodVlis(l.getCodVlis())
.setDataIniz(UtilityLocalDate.localDateFromDate(l.getDataIniz()))
.setDataFine(UtilityLocalDate.localDateFromDate(l.getDataFine()))
.setCodPromo(l.getCodPromo())
.setCodMart(l.getCodMart())
.setNote("Chiusura Promo");
log.setOperation(OperationType.INSERT);
return log;
}
).collect(Collectors.toList());
entities.addAll(chiusuraPromo);
}
if (saveEntity) {
entities = entityProcessor.processEntityList(entities, true);

View File

@@ -14,10 +14,7 @@ import it.integry.ems_model.entity.*;
import it.integry.ems_model.entity.common.DtbBaseDocT;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@@ -224,22 +221,30 @@ public class PvmAccettazioneService {
}
}
if ("S".equals(accettazioneDTO.getEvadiOrdine()) && !accettazioneDTO.getOrdine().isEmpty()) {
List<DtbOrdt> ordini =
Stream
.of(accettazioneDTO.getOrdine())
.map(
x -> {
DtbOrdt dtbOrdt = new DtbOrdt()
.setDataOrd(x.getDataOrd())
.setNumOrd(x.getNumOrd())
.setGestione(gestione)
.setFlagEvasoForzato("S")
.setModificatoDa("EVASIONE DA ACCETTAZIONE");
dtbOrdt.setOperation(OperationType.UPDATE);
return dtbOrdt;
}
).toList();
if ("S".equals(accettazioneDTO.getEvadiOrdine())) {
String sql =
Query.format(
"SELECT DISTINCT dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord\n" +
"FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON 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" +
"WHERE dtb_ordt.cod_mdep = %S\n" +
" AND dtb_ordt.cod_anag = %s\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" AND dtb_ordr.data_cons BETWEEN DATEADD(WEEK, -1, %s) AND %s",
codMdep, accettazioneDTO.getDocumento().getCodAnag(),
accettazioneDTO.getDocumento().getDataDoc(),
accettazioneDTO.getDocumento().getDataDoc());
List<DtbOrdt> ordini = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdt.class);
ordini.stream().forEach(x -> {
x.setFlagEvasoForzato("S")
.setModificatoDa("EVASIONE DA ACCETTAZIONE");
x.setOperation(OperationType.UPDATE);
}
);
entityList.addAll(ordini);
}
@@ -457,9 +462,9 @@ public class PvmAccettazioneService {
// }
//
// } else {
righeNew.add(insertRowBolla(articolo, riga.getIdRiga(), null, riga.getQtaDoc(), riga.getValUnt()));
riga.setQtaDoc(BigDecimal.ZERO);
// }
righeNew.add(insertRowBolla(articolo, riga.getIdRiga(), null, riga.getQtaDoc(), riga.getValUnt()));
riga.setQtaDoc(BigDecimal.ZERO);
// }
} while (riga.getQtaDoc().doubleValue() > 0);
}

View File

@@ -21,10 +21,7 @@ import it.integry.ems.report.dto.PairsDTO;
import it.integry.ems.response.*;
import it.integry.ems.retail.ReportVariazioni.dto.VariazioniDettaglioDTO;
import it.integry.ems.rules.completing.ConfigActivityRules;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.service.PrinterService;
import it.integry.ems.service.ReportProcessor;
import it.integry.ems.service.*;
import it.integry.ems.service.dto.CustomEmailDTO;
import it.integry.ems.service.dto.TicketNotificationMailTemplateDataDTO;
import it.integry.ems.service.exception.EmptyReportException;
@@ -120,6 +117,8 @@ public class SystemController {
private RequestDataDTO requestDataDTO;
@Autowired
private NotificationService notificationService;
@Autowired
private CleanDirectoryComponent cleanDirectoryComponent;
@GetMapping(value = "/system/ok")
@@ -1831,4 +1830,12 @@ public class SystemController {
return ServiceRestResponse.createPositiveResponse("Fixate " + processedEntities.size() + " entity");
}
@GetMapping(value = "system/clean-temp-dir")
public ServiceRestResponse validate() throws Exception {
cleanDirectoryComponent.cleanDirectory();
return ServiceRestResponse.createPositiveResponse();
}
}