Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-10-30 10:19:41 +01:00
12 changed files with 846 additions and 178 deletions

View File

@@ -0,0 +1,25 @@
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_20241029114048 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isCustomer(IntegryCustomer.Smetar)) {
updateSetupValue("w_cscadfor_disp", "DATAWINDOW", "d_cscadfor_rep", "d_cscadfor_orizzontale_rep");
updateSetupValue("w_cscadfor_disp", "DATAWINDOW", "d_cscadfor_nobanca_rep", "d_cscadfor_nobanca_orizzontale_rep");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,613 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20241029163507 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("MES_GetWorkOrders",
"CREATE FUNCTION [dbo].[MES_GetWorkOrders](@codJfas VARCHAR(50), @dateStart DATE, @dateEnd DATE, @flagEvaso VARCHAR(1),\n" +
" @codAnag VARCHAR(5))\n" +
" RETURNS @val TABLE\n" +
" (\n" +
" [sort] [int] NULL,\n" +
" [cod_jcom] [varchar](10) NULL,\n" +
" [data_ord_prod] [datetime] NULL,\n" +
" [num_ord_prod] [int] NULL,\n" +
" [riga_ord_prod] [int] NULL,\n" +
" [flag_avviabile] [varchar](1) NULL,\n" +
" [flag_tracciabilita] [varchar](1) NULL,\n" +
" [unt_ord] [varchar](3) NULL,\n" +
" [rap_conv] [numeric](20, 10) NULL,\n" +
" [unt_ord2] [varchar](3) NULL,\n" +
" [rap_conv2] [numeric](20, 5) NULL,\n" +
" [unt_ord3] [varchar](3) NULL,\n" +
" [rap_conv3] [numeric](20, 5) NULL,\n" +
" [descrizione_prod] [varchar](255) NULL,\n" +
" [num_pezzi] [numeric](38, 6) NULL,\n" +
" [num_cnf] [numeric](20, 5) NULL,\n" +
" [gg_scad_partita] [int] NULL,\n" +
" [qta_cnf] [numeric](15, 5) NULL,\n" +
" [colli_pedana] [numeric](20, 5) NULL,\n" +
" [num_pedane] [numeric](38, 18) NULL,\n" +
" [pos_riga] [int] NULL,\n" +
" [flag_evaso_prod] [varchar](1) NULL,\n" +
" [flag_evaso_forzato] [varchar](1) NOT NULL,\n" +
" [flag_ordine_evaso] [varchar](1) NULL,\n" +
" [gestione] [varchar](1) NOT NULL,\n" +
" [data_ord] [datetime] NOT NULL,\n" +
" [cod_tcol_UL] [varchar](5) NULL,\n" +
" [descrizione_tcol] [varchar](40) NULL,\n" +
" [cod_anag] [varchar](5) NOT NULL,\n" +
" [rag_soc_anag] [varchar](40) NULL,\n" +
" [part_iva] [varchar](20) NULL,\n" +
" [rif_ord] [varchar](40) NULL,\n" +
" [cod_vdes] [varchar](5) NULL,\n" +
" [cod_mdep] [varchar](5) NOT NULL,\n" +
" [cod_mdep_prod] [varchar](5) NOT NULL,\n" +
" [num_ord] [int] NOT NULL,\n" +
" [cod_jfas] [varchar](5) NOT NULL,\n" +
" [cod_jfas_lav] [varchar](5) NOT NULL,\n" +
" [partita_mag] [varchar](20) NULL,\n" +
" [note_lav] [varchar](255) NULL,\n" +
" [data_scad] [datetime] NULL,\n" +
" [cod_prod] [varchar](15) NULL,\n" +
" [descrizione_commessa] [varchar](40) NULL,\n" +
" [data_iniz_prod] [datetime] NULL,\n" +
" [max_step] [int] NULL,\n" +
" [unt_mis_prod] [varchar](5) NULL,\n" +
" [qta_batch_prod] [numeric](15, 5) NULL,\n" +
" [rap_conv_prod] [numeric](20, 10) NULL,\n" +
" [data_iniz] [datetime] NULL,\n" +
" [data_fine] [datetime] NULL,\n" +
" [qta_prod] [decimal](20, 5) NULL,\n" +
" [qta_lav] [decimal](20, 5) NULL,\n" +
" [max_fase] [int] NULL,\n" +
" [num_fase] [int] NULL,\n" +
" [hr_num] [int] NOT NULL,\n" +
" [descrizione_attivita] [varchar](1024) NULL,\n" +
" [prod_std] [numeric](38, 21) NULL,\n" +
" [elapsed_time] [int] NULL,\n" +
" [qta_trasferite] [numeric](38, 5) NULL,\n" +
" [udc_trasferiti] [int] NULL,\n" +
" [uds_scaricati] [int] NULL,\n" +
" [stato] [varchar](11) NOT NULL,\n" +
" [pz_trasferiti] [int] NULL,\n" +
" [run_time_sec] [numeric](38, 6) NULL,\n" +
" [cumulative_run_time_sec] [numeric](38, 6) NULL,\n" +
" [run_time_hour] [int] NULL,\n" +
" [run_time_min] [numeric](38, 6) NULL,\n" +
" [run_time_end] [datetime] NULL,\n" +
" [id_lotto] [int] NULL,\n" +
" [data_lotto] [datetime] NULL,\n" +
" [peso_kg] [numeric](20, 5) NULL,\n" +
" [data_cons_prod_max] [datetime] NULL\n" +
" ) AS\n" +
"BEGIN\n" +
"\n" +
" -- DECLARE @codJfas VARCHAR(5) = 'L1'\n" +
"-- DECLARE @dateStart DATE = DATEADD(MONTH, -1, GETDATE())\n" +
"-- DECLARE @dateEnd DATE = DATEADD(MONTH, 1, GETDATE())\n" +
"-- DECLARE @flagEvaso VARCHAR(1) = 'I'\n" +
"-- DECLARE @codAnag VARCHAR(5) = null;\n" +
"\n" +
" SET @dateStart = ISNULL(@dateStart, DATEADD(DAY, -14, GETDATE()));\n" +
" SET @dateEND = ISNULL(@dateEnd, GETDATE());\n" +
" SET @flagEvaso = ISNULL(@flagEvaso, 'I');\n" +
"\n" +
"--Funzione per calcolare la sequenza di ordini su una linea e il RunTimeEND\n" +
" WITH setup AS (SELECT @dateStart AS date_start,\n" +
" @dateEnd AS date_end,\n" +
" @flagEvaso AS flag_evaso,\n" +
" @codJfas AS cod_jfas,\n" +
" @codAnag AS cod_anag),\n" +
" setup_jfas AS (SELECT value_string AS cod_jfas\n" +
" FROM dbo.ParseStringIntoArray(@codJfas, '|')),\n" +
" setup_depo AS (SELECT cod_mdep, value AS flag_carico_scarico_immediato\n" +
" FROM stb_gest_setup_depo\n" +
" WHERE gest_name = 'CARICO_SCARICO_PF'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'GENERA_CARICO_SCARICO_IMMEDIATO'),\n" +
" setup_run_time\n" +
" AS (SELECT dbo.getGestSetup('PVM', 'MONITORAGGIO_LINEE_V2', 'RESTART_RUN_TIME_END') AS flag_restart),\n" +
" mtb_colr_sum AS (SELECT mtb_colr.gestione,\n" +
" mtb_colr.data_collo,\n" +
" mtb_colr.num_collo,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" SUM(mtb_colr.qta_col) AS qta_col,\n" +
" SUM(mtb_colr.num_cnf) AS num_cnf\n" +
" FROM mtb_colr\n" +
" WHERE mtb_colr.gestione_rif IS NULL\n" +
" AND mtb_colr.data_collo_rif IS NULL\n" +
" AND mtb_colr.ser_collo_rif IS NULL\n" +
" AND mtb_colr.num_collo_rif IS NULL\n" +
" AND EXISTS(SELECT *\n" +
" FROM mtb_colt\n" +
" WHERE mtb_colr.gestione = mtb_colt.gestione\n" +
" AND mtb_colr.data_collo = mtb_colt.data_collo\n" +
" AND mtb_colr.ser_collo = mtb_colt.ser_collo\n" +
" AND mtb_colr.num_collo = mtb_colt.num_collo\n" +
" AND mtb_colt.segno = 1)\n" +
" GROUP BY mtb_colr.gestione,\n" +
" mtb_colr.data_collo,\n" +
" mtb_colr.num_collo,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord),\n" +
" in_production_machines AS (SELECT DISTINCT dtb_ord_macc.gestione,\n" +
" dtb_ord_macc.data_ord,\n" +
" dtb_ord_macc.num_ord,\n" +
" MAX(dtb_ord_macc.data_mov) AS max_data_mov\n" +
" FROM dtb_ord_macc\n" +
" INNER JOIN (SELECT gestione, data_ord, num_ord, cod_cmac, MAX(data_mov) AS data_mov\n" +
" FROM dtb_ord_macc\n" +
" GROUP BY gestione, data_ord, num_ord, cod_cmac) last_event\n" +
" ON dtb_ord_macc.data_ord = last_event.data_ord AND\n" +
" dtb_ord_macc.num_ord = last_event.num_ord AND\n" +
" dtb_ord_macc.gestione = last_event.gestione AND\n" +
" dtb_ord_macc.cod_cmac = last_event.cod_cmac AND\n" +
" dtb_ord_macc.data_mov = last_event.data_mov\n" +
" INNER JOIN (SELECT evento, IIF(tipologia = 'ENTRATA', 1, -1) AS value\n" +
" FROM dtb_ord_macc_eventi) dtb_ord_macc_eventi\n" +
" ON dtb_ord_macc.evento = dtb_ord_macc_eventi.evento\n" +
" WHERE value = 1\n" +
" GROUP BY dtb_ord_macc.num_ord, dtb_ord_macc.data_ord, dtb_ord_macc.gestione),\n" +
" dtb_ord_max_step AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" MAX(id_step) AS max_step,\n" +
" num_fase,\n" +
" MAX(num_fase) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord) AS max_fase,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" SUM(CAST(DATEDIFF(S, data_iniz, ISNULL(data_fine, GETDATE())) AS BIGINT)) AS elapsed_time\n" +
" FROM dtb_ord_steps\n" +
" CROSS APPLY setup\n" +
" WHERE data_ord BETWEEN setup.date_start AND setup.date_end\n" +
" GROUP BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" num_fase,\n" +
" dtb_ord_steps.cod_jfas),\n" +
" dtb_ordr_prod_with_art AS (SELECT dtb_ordr.data_ord AS data_ord_prod,\n" +
" dtb_ordr.num_ord AS num_ord_prod,\n" +
" dtb_ordr.riga_ord AS riga_ord_prod,\n" +
" dtb_ordr.gestione AS gestione_ord_prod,\n" +
" IIF(CONVERT(DATE, dtb_ordr.data_ord) >= CONVERT(DATE, GETDATE()), 'S',\n" +
" 'N') AS flag_avviabile,\n" +
" mtb_aart_prod.flag_tracciabilita,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.rap_conv,\n" +
" dtb_ordr.unt_ord2,\n" +
" CAST(ROUND(dtb_ordr.qta_ord2 / ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv2,\n" +
" dtb_ordr.unt_ord3,\n" +
" CAST(ROUND(dtb_ordr.qta_ord3 / ISNULL(NULLIF(dtb_ordr.qta_ord, 0), 1),\n" +
" 5) AS NUMERIC(20, 5)) AS rap_conv3,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_ord2,\n" +
" dtb_ordr.qta_ord3,\n" +
" dtb_ordr.num_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), mtb_aart_prod.qta_cnf,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR'), mtb_aart_prod.qta_cnf /\n" +
" ISNULL(NULLIF(mtb_aart_prod.rap_conv2, 0), 1),\n" +
" mtb_aart_prod.qta_cnf)) AS cal_qta_cnf,\n" +
" IIF(dtb_ordr.colli_pedana = 0 OR dtb_ordr.colli_pedana = 1,\n" +
" IIF(mtb_aart_prod.colli_pedana = 0, 1, mtb_aart_prod.colli_pedana),\n" +
" dtb_ordr.colli_pedana)\n" +
" AS colli_pedana,\n" +
" dtb_ordr.pos_riga,\n" +
" dtb_ordt.cod_mdep,\n" +
"\n" +
" IIF(mtb_aart_prod.unt_mis IN ('PZ', 'NR'), 1,\n" +
" IIF(mtb_aart_prod.unt_mis2 IN ('PZ', 'NR') AND\n" +
" NULLIF(mtb_aart_prod.rap_conv2, 0) IS NOT NULL,\n" +
" mtb_aart_prod.rap_conv2,\n" +
" 1)) AS calc_rap_conv,\n" +
" mtb_aart_prod.gg_scad_partita,\n" +
" mtb_aart_prod.qta_cnf\n" +
" FROM dtb_ordr\n" +
" INNER JOIN dtb_ordt ON dtb_ordr.gestione = dtb_ordt.gestione AND\n" +
" dtb_ordr.data_ord = dtb_ordt.data_ord AND\n" +
" dtb_ordr.num_ord = dtb_ordt.num_ord\n" +
" INNER JOIN mtb_aart mtb_aart_prod ON mtb_aart_prod.cod_mart = dtb_ordr.cod_mart),\n" +
" ord_lav AS (SELECT dtb_ordt.cod_jcom,\n" +
" dtb_ordr_prod_with_art.data_ord_prod,\n" +
" dtb_ordr_prod_with_art.num_ord_prod,\n" +
" dtb_ordr_prod_with_art.riga_ord_prod,\n" +
" dtb_ordr_prod_with_art.flag_avviabile,\n" +
" dtb_ordr_prod_with_art.flag_tracciabilita,\n" +
" dtb_ordr_prod_with_art.unt_ord,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" dtb_ordr_prod_with_art.rap_conv\n" +
" ELSE CASE\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord = mtb_aart.unt_mis THEN\n" +
" dtb_ordr_prod_with_art.rap_conv\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv,\n" +
" dtb_ordr_prod_with_art.unt_ord2,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" dtb_ordr_prod_with_art.rap_conv2\n" +
" ELSE CASE\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord2 = mtb_aart.unt_mis THEN\n" +
" dtb_ordr_prod_with_art.rap_conv2\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord2 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord2 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv2,\n" +
" dtb_ordr_prod_with_art.unt_ord3,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" dtb_ordr_prod_with_art.rap_conv3\n" +
" ELSE CASE\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord3 = mtb_aart.unt_mis THEN\n" +
" dtb_ordr_prod_with_art.rap_conv3\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord3 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN dtb_ordr_prod_with_art.unt_ord3 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" dtb_ordr_prod_with_art.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv3,\n" +
" ISNULL(dtb_ordt.descr_estesa_prod, dtb_ordt.descrizione_prod) AS descrizione_prod,\n" +
" dtb_ordr_prod_with_art.num_cnf * dtb_ordr_prod_with_art.cal_qta_cnf AS num_pezzi,\n" +
" dtb_ordr_prod_with_art.num_cnf,\n" +
" dtb_ordr_prod_with_art.gg_scad_partita,\n" +
" dtb_ordr_prod_with_art.qta_cnf,\n" +
" dtb_ordr_prod_with_art.colli_pedana,\n" +
" dtb_ordr_prod_with_art.num_cnf / dtb_ordr_prod_with_art.colli_pedana AS num_pedane,\n" +
" dtb_ordr_prod_with_art.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" CASE\n" +
" WHEN (dtb_ordt.flag_evaso_prod = 'I' OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S' AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" THEN 'I'\n" +
" WHEN flag_evaso_prod <> 'I' AND dtb_ordt.flag_evaso_forzato = 'S'\n" +
" THEN flag_evaso_prod\n" +
" END AS flag_ordine_evaso,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" mtb_tcol.descrizione AS descrizione_tcol,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc AS rag_soc_anag,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" ISNULL(dtb_ordr_prod_with_art.cod_mdep, dtb_ordt.cod_mdep) AS cod_mdep_prod,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas AS cod_jfas_lav,\n" +
" mtb_partita_mag.partita_mag,\n" +
" dtb_ordt.note AS note_lav,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" jtb_comt.descrizione AS descrizione_commessa,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" q.max_step,\n" +
" q.max_fase,\n" +
" q.num_fase,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR dtb_ordr_prod_with_art.colli_pedana > 1), 'Colli',\n" +
" jtb_cicl.unt_mis_prod)\n" +
" AS unt_mis_prod,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR dtb_ordr_prod_with_art.colli_pedana > 1),\n" +
" dtb_ordr_prod_with_art.colli_pedana, jtb_cicl.qta_prod)\n" +
" AS qta_batch_prod,\n" +
" IIF(mtb_aart.qta_cnf > 1 OR dtb_ordr_prod_with_art.colli_pedana > 1, mtb_aart.qta_cnf,\n" +
" jtb_cicl.rap_conv_prod) AS rap_conv_prod,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav AS qta_lav,\n" +
" IIF(dtb_ord_steps.qta_prod <> 0, dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod) AS qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" 3600 / (ISNULL(NULLIF(jtb_dist_clav_dir.duration, 0), 1) /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) AS prod_std,\n" +
" q.elapsed_time,\n" +
" SUM(ISNULL(mtb_colr.qta_col, 0)) AS qta_trasferite,\n" +
" COUNT(mtb_colr.num_collo) AS udc_trasferiti,\n" +
" COUNT(colli_lotto.num_collo) AS uds_scaricati,\n" +
" CASE\n" +
" WHEN (in_production_machines.max_data_mov IS NOT NULL AND (q.max_step = 0 OR\n" +
" (q.max_step > 0 AND\n" +
" dtb_ord_steps.data_fine IS NOT NULL AND\n" +
" DATEDIFF(MINUTE,\n" +
" dtb_ord_steps.data_fine,\n" +
" in_production_machines.max_data_mov) >\n" +
" 5)))\n" +
" THEN 'IN AVVIO'\n" +
" WHEN q.max_step = 0\n" +
" THEN 'PROGRAMMATO'\n" +
" WHEN data_fine IS NULL\n" +
" THEN 'IN CORSO'\n" +
" ELSE 'IN PAUSA'\n" +
" END\n" +
" AS stato,\n" +
" CONVERT(INT, SUM(ISNULL(mtb_colr.qta_col / dtb_ordr_prod_with_art.calc_rap_conv, 0))) AS pz_trasferiti,\n" +
" CASE\n" +
" WHEN (jtb_dist_clav_dir.duration / ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr.qta_col, 0))) > 0\n" +
" THEN\n" +
" (jtb_dist_clav_dir.duration /\n" +
" ISNULL(NULLIF(jtb_cicl.rap_conv_prod, 0), 1)) *\n" +
" (dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod -\n" +
" SUM(ISNULL(mtb_colr.qta_col, 0)))\n" +
" ELSE 0 END AS run_time_sec,\n" +
" jl.id_lotto,\n" +
" jlt.data_lotto,\n" +
" mtb_aart.peso_kg,\n" +
" dtb_ordt.data_cons_prod_max\n" +
" FROM dtb_ord_steps\n" +
" INNER JOIN dtb_ordt ON dtb_ord_steps.data_ord = dtb_ordt.data_ord\n" +
" AND dtb_ord_steps.num_ord = dtb_ordt.num_ord\n" +
" AND dtb_ord_steps.gestione = dtb_ordt.gestione\n" +
" LEFT OUTER JOIN setup_depo setupCaricoImmediato\n" +
" ON dtb_ordt.cod_mdep = setupCaricoImmediato.cod_mdep\n" +
" LEFT OUTER JOIN jtb_dist_clav_dir\n" +
" ON dtb_ordt.cod_prod = jtb_dist_clav_dir.cod_prod AND\n" +
" dtb_ordt.cod_jfas = jtb_dist_clav_dir.cod_jfas\n" +
" LEFT OUTER JOIN mtb_partita_mag\n" +
" ON dtb_ordt.partita_mag = mtb_partita_mag.partita_mag AND\n" +
" dtb_ordt.cod_prod = mtb_partita_mag.cod_mart AND\n" +
" mtb_partita_mag.flag_stato = 'A'\n" +
" LEFT OUTER JOIN mtb_colr_sum mtb_colr ON dtb_ordt.data_ord = mtb_colr.data_ord AND\n" +
" dtb_ordt.gestione = mtb_colr.gestione AND\n" +
" dtb_ordt.num_ord = mtb_colr.num_ord AND\n" +
" dtb_ordt.cod_prod = mtb_colr.cod_mart\n" +
" LEFT OUTER JOIN jtb_comt ON dtb_ordt.cod_jcom = jtb_comt.cod_jcom\n" +
" INNER JOIN dtb_ord_max_step q ON dtb_ord_steps.gestione = q.gestione AND\n" +
" dtb_ord_steps.data_ord = q.data_ord AND\n" +
" dtb_ord_steps.num_ord = q.num_ord AND\n" +
" dtb_ord_steps.id_step = q.max_step AND\n" +
" dtb_ord_steps.cod_jfas = q.cod_jfas\n" +
" LEFT OUTER JOIN dtb_ordr_prod_with_art\n" +
" ON dtb_ordr_prod_with_art.gestione_ord_prod =\n" +
" dtb_ordt.gestione_rif AND\n" +
" dtb_ordr_prod_with_art.data_ord_prod = dtb_ordt.data_ord_rif AND\n" +
" dtb_ordr_prod_with_art.num_ord_prod = dtb_ordt.num_ord_rif AND\n" +
" dtb_ordr_prod_with_art.riga_ord_prod = dtb_ordt.riga_ord_rif\n" +
" LEFT OUTER JOIN jtb_cicl ON jtb_cicl.cod_prod = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN mtb_aart ON mtb_aart.cod_mart = dtb_ordt.cod_prod\n" +
" LEFT OUTER JOIN gtb_anag ON dtb_ordt.cod_anag = gtb_anag.cod_anag\n" +
" LEFT OUTER JOIN mtb_tcol ON dtb_ordt.cod_tcol_UL = mtb_tcol.cod_tcol\n" +
" LEFT OUTER JOIN in_production_machines\n" +
" ON dtb_ord_steps.data_ord = in_production_machines.data_ord\n" +
" AND dtb_ord_steps.num_ord = in_production_machines.num_ord\n" +
" AND dtb_ord_steps.gestione = in_production_machines.gestione\n" +
" LEFT OUTER JOIN jtb_lotr jl\n" +
" ON dtb_ord_steps.cod_jfas = jl.cod_jfas AND\n" +
" dtb_ordt.gestione = jl.gestione AND\n" +
" dtb_ordt.data_ord = jl.data_ord AND\n" +
" dtb_ordt.num_ord = jl.num_ord\n" +
" LEFT OUTER JOIN jtb_lott jlt\n" +
" ON jl.cod_jfas = jlt.cod_jfas AND jl.id_lotto = jlt.id_lotto\n" +
" LEFT OUTER JOIN mtb_colt colli_lotto ON jlt.id_lotto = colli_lotto.id_lotto\n" +
"\n" +
" CROSS APPLY setup\n" +
" WHERE dtb_ordt.flag_annulla = 'N'\n" +
" AND (setup.flag_evaso IS NULL\n" +
" OR (\n" +
" (setup.flag_evaso = 'I'\n" +
" AND\n" +
" dtb_ord_steps.flag_step_attivo = 'S'\n" +
" AND (flag_evaso_prod = 'I'\n" +
" OR\n" +
" (setupCaricoImmediato.flag_carico_scarico_immediato = 'S'\n" +
" AND\n" +
" flag_evaso_prod = 'E'))\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" )\n" +
" OR (setup.flag_evaso = 'E '\n" +
" AND (flag_evaso_prod = 'E' OR jlt.data_chiusura IS NOT NULL))\n" +
" )\n" +
" )\n" +
" AND (setup.cod_jfas IS NULL\n" +
" OR dtb_ord_steps.cod_jfas IN (SELECT cod_jfas FROM setup_jfas))\n" +
" AND (setup.cod_anag IS NULL\n" +
" OR dtb_ordt.cod_anag = setup.cod_anag)\n" +
" GROUP BY dtb_ordr_prod_with_art.data_ord_prod,\n" +
" dtb_ordr_prod_with_art.num_ord_prod,\n" +
" dtb_ordr_prod_with_art.riga_ord_prod,\n" +
" dtb_ordr_prod_with_art.flag_avviabile,\n" +
" dtb_ordr_prod_with_art.flag_tracciabilita,\n" +
" dtb_ordr_prod_with_art.unt_ord,\n" +
" mtb_partita_mag.rap_conv2,\n" +
" mtb_partita_mag.rap_conv3,\n" +
" dtb_ordt.note,\n" +
" dtb_ordr_prod_with_art.rap_conv,\n" +
" dtb_ordt.descrizione_prod,\n" +
" dtb_ordt.descr_estesa_prod,\n" +
" dtb_ordr_prod_with_art.num_cnf,\n" +
" mtb_aart.qta_cnf,\n" +
" mtb_aart.gg_scad_partita,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" dtb_ordr_prod_with_art.pos_riga,\n" +
" dtb_ordt.flag_evaso_prod,\n" +
" dtb_ordt.flag_evaso_forzato,\n" +
" dtb_ordt.gestione,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ordt.cod_jfas,\n" +
" dtb_ordt.cod_jcom,\n" +
" mtb_partita_mag.partita_mag,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" q.max_step,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ordt.cod_tcol_UL,\n" +
" dtb_ordt.cod_anag,\n" +
" gtb_anag.rag_soc,\n" +
" gtb_anag.part_iva,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" dtb_ordt.cod_mdep,\n" +
" dtb_ordr_prod_with_art.cod_mdep,\n" +
" mtb_aart.colli_pedana,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ordt.qta_prod,\n" +
" jtb_dist_clav_dir.duration,\n" +
" jtb_comt.descrizione,\n" +
" q.elapsed_time,\n" +
" dtb_ordr_prod_with_art.colli_pedana,\n" +
" dtb_ord_steps.hr_num,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.unt_mis2,\n" +
" mtb_aart.rap_conv2,\n" +
" mtb_aart.unt_mis3,\n" +
" mtb_aart.rap_conv3,\n" +
" dtb_ordr_prod_with_art.unt_ord2,\n" +
" dtb_ordr_prod_with_art.unt_ord3,\n" +
" dtb_ordr_prod_with_art.qta_ord,\n" +
" dtb_ordr_prod_with_art.qta_ord2,\n" +
" dtb_ordr_prod_with_art.qta_ord3,\n" +
" dtb_ordr_prod_with_art.rap_conv2,\n" +
" dtb_ordr_prod_with_art.rap_conv3,\n" +
" dtb_ordr_prod_with_art.qta_cnf,\n" +
" dtb_ordr_prod_with_art.cal_qta_cnf,\n" +
" dtb_ordr_prod_with_art.gg_scad_partita,\n" +
" jtb_cicl.qta_prod,\n" +
" jtb_cicl.rap_conv_prod,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" jtb_cicl.unt_mis_prod,\n" +
" mtb_tcol.descrizione,\n" +
" dtb_ordt.qta_prod,\n" +
" dtb_ordt.rap_conv_prod,\n" +
" setupCaricoImmediato.flag_carico_scarico_immediato,\n" +
" in_production_machines.max_data_mov, q.num_fase, dtb_ord_steps.qta_lav, q.max_fase,\n" +
" jl.id_lotto, jlt.data_lotto, mtb_aart.peso_kg, dtb_ordt.data_cons_prod_max)\n" +
" INSERT\n" +
" INTO @val\n" +
" SELECT ROW_NUMBER() OVER (ORDER BY data_ord, num_ord_prod, pos_riga, num_ord) AS sort,\n" +
" cod_jcom,\n" +
" data_ord_prod,\n" +
" num_ord_prod,\n" +
" riga_ord_prod,\n" +
" flag_avviabile,\n" +
" flag_tracciabilita,\n" +
" unt_ord,\n" +
" rap_conv,\n" +
" unt_ord2,\n" +
" rap_conv2,\n" +
" unt_ord3,\n" +
" rap_conv3,\n" +
" descrizione_prod,\n" +
" num_pezzi,\n" +
" num_cnf,\n" +
" gg_scad_partita,\n" +
" qta_cnf,\n" +
" colli_pedana,\n" +
" num_pedane,\n" +
" pos_riga,\n" +
" flag_evaso_prod,\n" +
" flag_evaso_forzato,\n" +
" flag_ordine_evaso,\n" +
" gestione,\n" +
" data_ord,\n" +
" cod_tcol_UL,\n" +
" descrizione_tcol,\n" +
" cod_anag,\n" +
" rag_soc_anag,\n" +
" part_iva,\n" +
" rif_ord,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" cod_mdep_prod,\n" +
" num_ord,\n" +
" cod_jfas,\n" +
" cod_jfas_lav,\n" +
" partita_mag,\n" +
" note_lav,\n" +
" data_scad,\n" +
" cod_prod,\n" +
" descrizione_commessa,\n" +
" data_iniz_prod,\n" +
" max_step,\n" +
" unt_mis_prod,\n" +
" qta_batch_prod,\n" +
" rap_conv_prod,\n" +
" data_iniz,\n" +
" data_fine,\n" +
" qta_prod,\n" +
" qta_lav,\n" +
" max_fase,\n" +
" num_fase,\n" +
" hr_num,\n" +
" descrizione_attivita,\n" +
" prod_std,\n" +
" elapsed_time,\n" +
" qta_trasferite,\n" +
" udc_trasferiti,\n" +
" uds_scaricati,\n" +
" stato,\n" +
" pz_trasferiti,\n" +
" run_time_sec,\n" +
" SUM(run_time_sec) OVER (PARTITION BY cod_jfas, data_ord_prod) AS cumulative_run_time_sec,\n" +
" CONVERT(INT, run_time_sec / 3600) AS run_time_hour,\n" +
" ROUND((run_time_sec / 3600 - CONVERT(INT, run_time_sec / 3600)) * 60, 0) AS run_time_min,\n" +
" CASE\n" +
" WHEN setup_run_time.flag_restart = 'S' THEN\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas, data_ord_prod ORDER BY stato, cod_jfas, data_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" CASE\n" +
" WHEN data_ord_prod > GETDATE() THEN DATEADD(HH, 7, data_ord_prod)\n" +
" ELSE GETDATE() END)\n" +
" ELSE\n" +
" DATEADD(SECOND, SUM(run_time_sec)\n" +
" OVER (PARTITION BY cod_jfas ORDER BY stato, cod_jfas, data_ord_prod, num_ord_prod, pos_riga ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),\n" +
" GETDATE())\n" +
" END AS run_time_end,\n" +
" id_lotto,\n" +
" data_lotto,\n" +
" peso_kg,\n" +
" data_cons_prod_max\n" +
" FROM ord_lav,\n" +
" setup_run_time\n" +
" ORDER BY ord_lav.data_ord,\n" +
" ord_lav.num_ord_prod,\n" +
" ord_lav.pos_riga,\n" +
" ord_lav.num_ord\n" +
" RETURN\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -14,7 +14,8 @@ import it.integry.ems.media.MimeTypesHandler;
import it.integry.ems.response.FileItem;
import it.integry.ems.rules.completing.CommonRules;
import it.integry.ems.service.dto.CustomEmailDTO;
import it.integry.ems.service.dto.MailTemplateDataDTO;
import it.integry.ems.service.dto.GenericComunicationMailTemplateDataDTO;
import it.integry.ems.service.dto.TicketNotificationMailTemplateDataDTO;
import it.integry.ems.settings.Model.MailConfigurationModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -307,6 +308,14 @@ public class MailService {
return sendMailPrimary(null, null, to, cc, null, subject, msg, false, false, null, null, null);
}
public void sendTicketNotificationMail(final MultiDBTransactionManager multiDBTransactionManager, final String to, final String cc, final String ccn, final String subject, final TicketNotificationMailTemplateDataDTO mailData) throws Exception {
String htmlMailContent = mailTemplateService.getTicketNotificationEmailTemplate(mailData);
// SEND
this.sendMailPrimary(multiDBTransactionManager, "noreply@integry.it", "Integry Ticketing", to, cc, ccn,
subject, htmlMailContent, true, false, null, null,
null, false, null);
}
public void sendErrorMailByGestNameSection(MultiDBTransactionManager multiDBTransactionManager, String gestName, String section,
String mailTitle, List<EntityBase> entitiesList, List<EmailFileAttachment> attachments, List<AnomalieDTO> anomalie, List<Exception> customExceptions) throws Exception {
@@ -340,11 +349,11 @@ public class MailService {
subject = String.format("[%s] %s", nomeAzienda, subject);
final MailTemplateDataDTO mailTemplateData = new MailTemplateDataDTO()
final GenericComunicationMailTemplateDataDTO mailTemplateData = new GenericComunicationMailTemplateDataDTO()
.setTitle(subject)
.setContent(mailMessage.toString());
String htmlMailText = mailTemplateService.getGenericEmailTemplate(Level.ERROR, mailTemplateData);
String htmlMailText = mailTemplateService.getGenericComunicationEmailTemplate(Level.ERROR, mailTemplateData);
// SEND
this.sendMailPrimary(multiDBTransactionManager, null, null, emailDestination, null, null,
@@ -394,7 +403,7 @@ public class MailService {
String subject = String.format("[%s] Errore durante operazione di %s su %s", nomeAzienda, action, InetAddress.getLocalHost().getHostName());
final MailTemplateDataDTO mailTemplateData = new MailTemplateDataDTO()
final GenericComunicationMailTemplateDataDTO mailTemplateData = new GenericComunicationMailTemplateDataDTO()
.setTitle(mailTitle)
.setContent(mailMessage.toString());
@@ -437,7 +446,7 @@ public class MailService {
attachedFiles.add(new EmailFileAttachment("stackTrace.txt", stacktrace.getBytes()));
String htmlMailText = mailTemplateService.getGenericEmailTemplate(Level.ERROR, mailTemplateData);
String htmlMailText = mailTemplateService.getGenericComunicationEmailTemplate(Level.ERROR, mailTemplateData);
if (attachments != null && !attachments.isEmpty())
attachedFiles.addAll(attachments);
@@ -521,7 +530,7 @@ public class MailService {
private void internalSendSystemMail(Level mailLevel, String mailSubject, String mailTitle, String mailContent, Date footerDate) throws Exception {
String htmlEmail = mailTemplateService.getGenericEmailTemplate(mailLevel, new MailTemplateDataDTO()
String htmlEmail = mailTemplateService.getGenericComunicationEmailTemplate(mailLevel, new GenericComunicationMailTemplateDataDTO()
.setTitle(mailTitle)
.setContent(mailContent));

View File

@@ -1,13 +1,15 @@
package it.integry.ems.service;
import it.integry.common.var.CommonConstants;
import it.integry.ems.service.dto.MailTemplateDataDTO;
import it.integry.ems.service.dto.GenericComunicationMailTemplateDataDTO;
import it.integry.ems.service.dto.TicketNotificationMailTemplateDataDTO;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -17,14 +19,21 @@ import java.util.List;
@Service
public class MailTemplateService {
private final String baseUrl = "https://www2.studioml.it/ems-api/mail_models/";
public String getGenericEmailTemplate(MailService.Level level, MailTemplateDataDTO mailTemplateData) throws Exception {
URL url = new URL("https://www2.studioml.it/ems-api/mail_models/integry-generic-communication-mail-template.html");
private String downloadTemplate(String fileName) throws IOException {
URL url = new URL(baseUrl + fileName);
InputStream inputStream = url.openStream();
String htmlMailBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
String htmlMailBody = IOUtils.toString(inputStream, StandardCharsets.ISO_8859_1);
inputStream.close();
return htmlMailBody;
}
public String getGenericComunicationEmailTemplate(MailService.Level level, GenericComunicationMailTemplateDataDTO mailTemplateData) throws Exception {
String htmlMailBody = downloadTemplate("integry-generic-communication-mail-template.html");
String bannerBgColor;
switch (level) {
@@ -84,6 +93,21 @@ public class MailTemplateService {
return htmlMailBody;
}
public String getTicketNotificationEmailTemplate(TicketNotificationMailTemplateDataDTO data) throws Exception {
String htmlMailBody = downloadTemplate("integry-ticket-notification-mail-template.html");
String personaRif = "";
if (data.getPersonaRif() != null)
personaRif = " " + data.getPersonaRif();
htmlMailBody = htmlMailBody.replace("#PERSONA_RIF#", personaRif);
htmlMailBody = htmlMailBody.replace("#ACTIVITY_ID#", data.getActivityId());
htmlMailBody = htmlMailBody.replace("#HELPDESK_URL#", data.getHelpdeskUrl());
return htmlMailBody;
}
public List<String> renderExceptionsToHtml(List<Exception> exceptions, boolean applyConsoleStyle) {
List<String> renderedExceptions = new ArrayList<>();
@@ -95,7 +119,6 @@ public class MailTemplateService {
return renderedExceptions;
}
public String renderExceptionToHtml(Exception ex, boolean applyConsoleStyle) {
StringBuilder htmlContent = new StringBuilder();

View File

@@ -3,7 +3,7 @@ package it.integry.ems.service.dto;
import java.util.ArrayList;
import java.util.List;
public class MailTemplateDataDTO {
public class GenericComunicationMailTemplateDataDTO {
private String title;
private String subtitle;
@@ -17,7 +17,7 @@ public class MailTemplateDataDTO {
return title;
}
public MailTemplateDataDTO setTitle(String title) {
public GenericComunicationMailTemplateDataDTO setTitle(String title) {
this.title = title;
return this;
}
@@ -26,7 +26,7 @@ public class MailTemplateDataDTO {
return subtitle;
}
public MailTemplateDataDTO setSubtitle(String subtitle) {
public GenericComunicationMailTemplateDataDTO setSubtitle(String subtitle) {
this.subtitle = subtitle;
return this;
}
@@ -35,7 +35,7 @@ public class MailTemplateDataDTO {
return content;
}
public MailTemplateDataDTO setContent(String content) {
public GenericComunicationMailTemplateDataDTO setContent(String content) {
this.content = content;
return this;
}
@@ -44,7 +44,7 @@ public class MailTemplateDataDTO {
return exceptions;
}
public MailTemplateDataDTO setExceptions(List<Exception> exceptions) {
public GenericComunicationMailTemplateDataDTO setExceptions(List<Exception> exceptions) {
this.exceptions = exceptions;
return this;
}

View File

@@ -0,0 +1,30 @@
package it.integry.ems.service.dto;
public class TicketNotificationMailTemplateDataDTO {
private final String activityId;
private final String personaRif;
private String helpdeskUrl;
public TicketNotificationMailTemplateDataDTO(String activityId, String personaRif) {
this.activityId = activityId;
this.personaRif = personaRif;
}
public String getActivityId() {
return activityId;
}
public String getPersonaRif() {
return personaRif;
}
public String getHelpdeskUrl() {
return helpdeskUrl;
}
public TicketNotificationMailTemplateDataDTO setHelpdeskUrl(String helpdeskUrl) {
this.helpdeskUrl = helpdeskUrl;
return this;
}
}

View File

@@ -339,6 +339,7 @@ public class GeneraOrdLav {
}
row.getOrdLav().add(ordT);
ordT.setParent(row);
// Funzione ricorsiva di esplosione distinta base
if (existDist && !existOrd) {
@@ -360,22 +361,12 @@ public class GeneraOrdLav {
}
if (isTerzista && !UtilityString.isNullOrEmpty(ordProdSetupDTO.getCodSpesaTerzista())) {
sql = Query.format(
"SELECT id_riga FROM dtb_ords WHERE gestione = %s AND data_ord = %s AND num_ord = %s AND cod_spes = %s",
ordT.getGestione(), ordT.getDataOrd(), ordT.getNumOrd(), ordProdSetupDTO.getCodSpesaTerzista()
);
Integer idRiga = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
DtbOrds dtbOrds = new DtbOrds()
.setIdRiga(idRiga)
.setQta(row.getQta())
.setUntMis(row.getUntMis())
.setValUnt(row.getValUnt())
.setImporto(row.getImportoRiga())
.setCodSpes(ordProdSetupDTO.getCodSpesaTerzista());
if (idRiga != null) {
dtbOrds.setOperation(OperationType.UPDATE);
}
ordT.getDtbOrds().add(dtbOrds);
}
@@ -384,7 +375,7 @@ public class GeneraOrdLav {
insertServizio(conn, codJfas, qtaProd, valUnt, ordT);
} else {
riproporzionaQtaOrd(conn, gestione, dataOrd, numOrd, rigaOrd, qtaProd, rapConv, ordT);
riproporzionaQtaOrd(conn, gestione, dataOrd, numOrd, rigaOrd, qtaProd, rapConv, ordT, valUnt);
aggornaDataInizProd(conn, gestione, dataOrd, numOrd, rigaOrd, ordT, row, assegnaAttivita);
}
}
@@ -1495,7 +1486,7 @@ public class GeneraOrdLav {
}
}
private static void riproporzionaQtaOrd(Connection conn, String gestione, Date dataOrd, Integer numOrd, Integer rigaOrd, BigDecimal qtaProd, BigDecimal rapConv, DtbOrdt ordT) throws SQLException, IllegalAccessException, DataConverterNotFoundException, InstantiationException {
private static void riproporzionaQtaOrd(Connection conn, String gestione, Date dataOrd, Integer numOrd, Integer rigaOrd, BigDecimal qtaProd, BigDecimal rapConv, DtbOrdt ordT, BigDecimal valUntProd) throws SQLException, IllegalAccessException, DataConverterNotFoundException, InstantiationException {
String sql;
sql =
Query.format(
@@ -1520,7 +1511,7 @@ public class GeneraOrdLav {
List<DtbOrdr> dtbOrdrL = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdr.class);
if (dtbOrdrL != null && !dtbOrdrL.isEmpty()) {
dtbOrdrL.stream().forEach(x -> {
dtbOrdrL.forEach(x -> {
x.setQtaOrd(x.getQtaOrd().multiply(moltiplicatore).setScale(5, RoundingMode.HALF_UP));
/*Necessario per farsi che vengano ricalcolate tutte le quantità in funzione della nuova quantità ordinata */
@@ -1538,13 +1529,26 @@ public class GeneraOrdLav {
sql = UtilityDB.addwhereCond(sql, ordT.getPkWhereCond(), true);
List<DtbOrdSteps> dtbOrdSteps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class);
dtbOrdSteps.stream().forEach(x -> {
dtbOrdSteps.forEach(x -> {
x.setQtaProd(x.getQtaProd().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP));
x.setOperation(OperationType.UPDATE);
});
ordT.setDtbOrdSteps(dtbOrdSteps);
}
sql = "SELECT * FROM dtb_ords";
sql = UtilityDB.addwhereCond(sql, ordT.getPkWhereCond(), true);
List<DtbOrds> dtbOrds = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrds.class);
if (dtbOrds != null && !dtbOrds.isEmpty()) {
dtbOrds.forEach(x -> {
x.setQta(x.getQta().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)).setValUnt(valUntProd).setImporto((x.getQta().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)).multiply(valUntProd));
x.setOperation(OperationType.UPDATE);
});
ordT.setDtbOrds(dtbOrds);
}
}
private static List<DtbOrds> setSpese(Connection conn, BigDecimal qtaProd, BigDecimal qtaProdDist, String codProd, String codSpesaTerzista) throws Exception {

View File

@@ -145,6 +145,6 @@ public class JtbFasiImpMesi extends EntityBase {
protected void deleteChilds() throws Exception {
JtbFasiImpMesiDett jtbFasiImpMesiDett = new JtbFasiImpMesiDett();
jtbFasiImpMesiDett.deleteAllEntities(connection, this);
jtbFasiImpMesiDett.deleteAllEntities(connection, "id_fasi_imp_mesi = " + this.getId());
}
}

View File

@@ -3,25 +3,20 @@ package it.integry.ems.order.Import.service;
import com.annimon.stream.Stream;
import com.fasterxml.jackson.databind.ObjectMapper;
import it.integry.common.var.CommonConstants;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.Import.dto.ImportRequestDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.order.Import.dto.DialogoJsonDTO;
import it.integry.ems.rules.completing.QueryRules;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.service.MailTemplateService;
import it.integry.ems.service.MapService;
import it.integry.ems.service.dto.MailTemplateDataDTO;
import it.integry.ems.service.dto.GenericComunicationMailTemplateDataDTO;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDirs;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems.utility.UtilityFile;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.DtbOrdr;
import it.integry.ems_model.entity.DtbOrdt;
import it.integry.ems_model.entity.WdtbOrdt;
import it.integry.ems_model.exception.EntityException;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
@@ -31,7 +26,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -286,10 +280,10 @@ public class OrdiniImportService {
mailMessage.append(String.format("<p style=\"color: red; font-weight:bold\">%s<br/></p>", alreadyExists));
}
final MailTemplateDataDTO mailTemplateData = new MailTemplateDataDTO()
final GenericComunicationMailTemplateDataDTO mailTemplateData = new GenericComunicationMailTemplateDataDTO()
.setTitle(subject)
.setContent(String.valueOf(mailMessage));
String htmlMailText = mailTemplateService.getGenericEmailTemplate(MailService.Level.SUCCESS, mailTemplateData);
String htmlMailText = mailTemplateService.getGenericComunicationEmailTemplate(MailService.Level.SUCCESS, mailTemplateData);
mailService.sendMailPrimary(multiDBTransactionManager, null, null, emailDestination, null, null,
subject, htmlMailText, true, false, null, null,

View File

@@ -241,6 +241,11 @@ public class OrdineLavorazioneDTO {
@JsonSerialize
private BigDecimal udcTrasferiti;
@SqlField(value = "uds_scaricati")
@JsonProperty("udsScaricati")
@JsonSerialize
private BigDecimal udsScaricati;
@SqlField(value = "stato")
@JsonProperty("stato")
@JsonSerialize
@@ -797,6 +802,15 @@ public class OrdineLavorazioneDTO {
return this;
}
public BigDecimal getUdsScaricati() {
return udsScaricati;
}
public OrdineLavorazioneDTO setUdsScaricati(BigDecimal udsScaricati) {
this.udsScaricati = udsScaricati;
return this;
}
public String getStato() {
return stato;
}

View File

@@ -18,7 +18,7 @@ import it.integry.ems.report.dto.JasperDTO;
import it.integry.ems.report.dto.PairsDTO;
import it.integry.ems.rules.completing.DocumentRules;
import it.integry.ems.service.*;
import it.integry.ems.service.dto.MailTemplateDataDTO;
import it.integry.ems.service.dto.GenericComunicationMailTemplateDataDTO;
import it.integry.ems.service.exception.EmptyReportException;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
@@ -1058,11 +1058,11 @@ public class MesProductionServiceV2 {
String subject = "Pedane in Quarantena";
final MailTemplateDataDTO mailTemplateData = new MailTemplateDataDTO()
final GenericComunicationMailTemplateDataDTO mailTemplateData = new GenericComunicationMailTemplateDataDTO()
.setTitle(subject)
.setContent(testoMailQuarantena);
String htmlMailText = mailTemplateService.getGenericEmailTemplate(MailService.Level.INFO, mailTemplateData);
String htmlMailText = mailTemplateService.getGenericComunicationEmailTemplate(MailService.Level.INFO, mailTemplateData);
// SEND
mailService.sendMailPrimary(multiDBTransactionManager, null, null, Arrays.asList(indirizziQuarantena.split("\\|")), null, null,

View File

@@ -22,6 +22,7 @@ import it.integry.ems.service.MailService;
import it.integry.ems.service.PrinterService;
import it.integry.ems.service.ReportProcessor;
import it.integry.ems.service.dto.CustomEmailDTO;
import it.integry.ems.service.dto.TicketNotificationMailTemplateDataDTO;
import it.integry.ems.service.exception.EmptyReportException;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
@@ -51,7 +52,6 @@ import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.sftp.SFTPClient;
import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.apache.logging.log4j.LogManager;
@@ -65,10 +65,8 @@ import org.springframework.web.util.HtmlUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
@@ -742,7 +740,7 @@ public class SystemController {
emailTo = emailPersRif;
}
List<String> listEmailCcn= new ArrayList<>();
List<String> listEmailCcn = new ArrayList<>();
if (!activity.getUserCreator().equals(activity.getUserName())) {
// SE SONO DIVERSI (E NON E' "CC") MANDA UN EMAIL AD
// "ASSEGNATO A"
@@ -755,10 +753,10 @@ public class SystemController {
String emailAssegnatoA = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
if (!UtilityString.isNullOrEmpty(emailAssegnatoA)) {
if (UtilityString.isNullOrEmpty(emailTo) )
if (UtilityString.isNullOrEmpty(emailTo))
emailTo = UtilityString.streNull(emailAssegnatoA);
else
listEmailCcn.add( emailAssegnatoA );
listEmailCcn.add(emailAssegnatoA);
}
}
@@ -769,7 +767,7 @@ public class SystemController {
"from jtb_comt \n" +
"inner join jrl_flav_users on jtb_comt.cod_jflav_tec = jrl_flav_users.cod_jflav and jrl_flav_users.flag_jflav_default = 's'\n" +
"inner join stb_user on jrl_flav_users.user_name =stb_user.user_name " +
"where cod_jcom = %S ", activity.getCodJcom()) ;
"where cod_jcom = %S ", activity.getCodJcom());
String emailResponsabile = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
if (!UtilityString.isNullOrEmpty(emailResponsabile) && !listEmailCcn.contains(emailResponsabile))
@@ -929,142 +927,100 @@ public class SystemController {
public void notifica(String activityID, String personaRif, String emailPersRif, String inseritoDa,
String ccn, String azione, String note, MultiDBTransactionManager multiDBTransactionManager) throws Exception {
/**
* IL PARAMETRO 'azione' PUO' ASSUMERE I SEGUENTI VALORI: 'A' -
* Apertura, 'B' - Apertura da Cliente, 'U' - Cambio Stato, 'C' -
* Chiusura, 'F' - Note feedback, 'S' - Sollecito
*/String htmlNotifyMail, subject, codAnag = "", includeFb = "", activityResultId, emailUtente = "", emailTo = "", query;
String webUrl = "https://www.studioml.it/integry/";
String taskUrl = "https://task.studioml.it/";
* IL PARAMETRO 'azione' PUO' ASSUMERE I SEGUENTI VALORI:
* 'A' - Apertura,
* 'B' - Apertura da Cliente,
* 'U' - Cambio Stato,
* 'C' - Chiusura,
* 'F' - Note feedback,
* 'S' - Sollecito
*
*/
String emailUtente = "";
String taskUrl = "https://task.studioml.it/ViewTicket/" + activityID;
String emailHelpdesk = "helpdesk@integry.it";
PreparedStatement info;
ResultSet res;
/** VALUTARE SE IL SEGUENTE CONTROLLO LO SI DEBBA FARE IN WINACT: */
// CONTROLLO PER INSERIRE LINK FEEDBACK DEL CLIENTE SE ...
includeFb = "";
if ("C".equals(azione)) { // ... MESSAGGIO DI CHIUSURA TICKET
includeFb = "&linkfb=1";
String subject = "Integry - Ticket n. " + activityID;
if ("A".equals(azione)) {
subject = "Integry - Apertura attivita n. " + activityID;
} else if ("B".equals(azione)) {
subject = "Integry - Nuova attivita da " + personaRif + " ticket n. " + activityID;
} else if ("F".equals(azione)) {
subject = "Integry - Feedback negativo da " + personaRif + " ticket n. " + activityID;
} else if ("S".equals(azione)) {
subject = "Integry - Sollecito da " + personaRif + " per ticket n. " + activityID;
} else if ("U".equals(azione)) {
// ... OPPURE AGG. A STATO "RISCONTRO CLIE."
query = " SELECT activity_result_id FROM stb_activity WHERE activity_id = "
+ UtilityDB.valueToString(activityID);
info = multiDBTransactionManager.prepareStatement(query);
res = info.executeQuery();
if (res.next()) {
activityResultId = res.getString(1);
if ("RISCONTRO CLIE.".equals(activityResultId)) {
includeFb = "&linkfb=1";
}
}
res.close();
info.close();
} else if ("F".equals(azione) || "S".equals(azione)) {
// RECUPERA EMAIL UTENTE PER INVIO NOTIFICA FEEDBACK NEGATIVO O
// SOLLECITO
query = "SELECT e_mail " +
"FROM stb_activity INNER JOIN jtb_flav ON cod_jflav = user_name " +
"WHERE activity_id = " + UtilityDB.valueToString(activityID);
info = multiDBTransactionManager.prepareStatement(query);
res = info.executeQuery();
if (res.next()) {
emailUtente = res.getString(1);
}
if (emailUtente.length() == 0) {
emailUtente = emailHelpdesk;
}
res.close();
info.close();
subject = "Integry - Aggiornamento attivita n. " + activityID;
} else if ("C".equals(azione)) {
subject = "Integry - Chiusura attivita n. " + activityID;
}
URL url = new URL(webUrl + "mail_models/ticket_mail.php?act=" + azione + includeFb);
InputStream is = url.openStream();
htmlNotifyMail = IOUtils.toString(is);
String emailTo;
if (!UtilityString.isNullOrEmpty(htmlNotifyMail)) {
htmlNotifyMail = htmlNotifyMail.replace("%%ACTIVITY_ID%%", activityID);
htmlNotifyMail = htmlNotifyMail.replace("%%PERSONA_RIF%%", personaRif == null ? "" : personaRif);
htmlNotifyMail = htmlNotifyMail.replace("%%EXTERNAL_URL%%", taskUrl);
htmlNotifyMail = htmlNotifyMail.replace("%%NOTE%%", note == null ? "" : note);
subject = "Integry - Ticket n. " + activityID;
if ("A".equals(azione)) {
subject = "Integry - Apertura attivita n. " + activityID;
} else if ("B".equals(azione)) {
subject = "Integry - Nuova attivita da " + personaRif + " ticket n. " + activityID;
} else if ("F".equals(azione)) {
subject = "Integry - Feedback negativo da " + personaRif + " ticket n. " + activityID;
} else if ("S".equals(azione)) {
subject = "Integry - Sollecito da " + personaRif + " per ticket n. " + activityID;
} else if ("U".equals(azione)) {
subject = "Integry - Aggiornamento attivita n. " + activityID;
} else if ("C".equals(azione)) {
subject = "Integry - Chiusura attivita n. " + activityID;
}
if ("B".equals(azione)) {
emailTo = emailHelpdesk;
} else if ("F".equals(azione) || "S".equals(azione)) {
emailTo = emailUtente;
} else {
emailTo = emailPersRif;
}
if (!emailTo.isEmpty()) {
mailService.sendMailPrimary("noreply@integry.it", "Integry Ticketing", emailTo, null, ccn, subject, htmlNotifyMail, true, true, null, null, null);
StbActivity activity = new StbActivity();
activity.setOperation(OperationType.NO_OP);
activity.setActivityId(activityID);
StbActivityNotification activityNotification = new StbActivityNotification();
activity.getStbActivityNotification().add(activityNotification);
activityNotification.setOperation(OperationType.INSERT);
activityNotification.setActivityId(activityID);
activityNotification.setNotificationDate(new Date());
activityNotification.setNotificationType(azione);
if (note != null) {
activityNotification.setNotificationNote(note);
}
query = "SELECT stb_activity.cod_anag "
+ "FROM stb_activity LEFT OUTER JOIN vtb_clie_pers_rif ON stb_activity.cod_anag = vtb_clie_pers_rif.cod_anag AND "
+ " stb_activity.persona_rif = vtb_clie_pers_rif.persona_rif AND "
+ " vtb_clie_pers_rif.e_mail IS NULL " + "WHERE stb_activity.activity_id = "
+ UtilityDB.valueToString(activityID) + " AND "
+ " vtb_clie_pers_rif.e_mail IS NULL";
info = multiDBTransactionManager.prepareStatement(query);
res = info.executeQuery();
if (res.next())
codAnag = res.getString(1);
res.close();
info.close();
String domainIntegry = "integry.it";
if (!UtilityString.isNullOrEmpty(codAnag) && !UtilityString.isNullOrEmpty(personaRif)
&& !UtilityString.isNullOrEmpty(emailPersRif) && !emailPersRif.toUpperCase().contains(domainIntegry.toUpperCase())) {
GtbAnag gtbAnag = new GtbAnag();
gtbAnag.setCodAnag(codAnag);
List<VtbCliePersRif> vtbCliePersRifs = new ArrayList<VtbCliePersRif>();
VtbCliePersRif persRif = new VtbCliePersRif();
persRif.setOperation(OperationType.INSERT_OR_UPDATE);
persRif.setCodAnag(codAnag);
persRif.setPersonaRif(personaRif);
persRif.seteMail(emailPersRif);
vtbCliePersRifs.add(persRif);
gtbAnag.setVtbCliePersRif(vtbCliePersRifs);
entityProcessor.processEntity(gtbAnag, multiDBTransactionManager);
}
entityProcessor.processEntity(activity, multiDBTransactionManager);
} else {
throw new Exception("Email destinatario non specificata");
}
if ("B".equals(azione)) {
emailTo = emailHelpdesk;
} else if ("F".equals(azione) || "S".equals(azione)) {
emailTo = emailUtente;
} else {
throw new Exception("Modello mail non trovato in url " + webUrl);
emailTo = emailPersRif;
}
if (!emailTo.isEmpty()) {
TicketNotificationMailTemplateDataDTO mailData = new TicketNotificationMailTemplateDataDTO(activityID, personaRif)
.setHelpdeskUrl(taskUrl);
mailService.sendTicketNotificationMail(multiDBTransactionManager, emailTo, null, ccn, subject, mailData);
StbActivity activity = new StbActivity();
activity.setOperation(OperationType.NO_OP);
activity.setActivityId(activityID);
StbActivityNotification activityNotification = new StbActivityNotification();
activity.getStbActivityNotification().add(activityNotification);
activityNotification.setOperation(OperationType.INSERT);
activityNotification.setActivityId(activityID);
activityNotification.setNotificationDate(new Date());
activityNotification.setNotificationType(azione);
if (note != null) {
activityNotification.setNotificationNote(note);
}
String query = "SELECT stb_activity.cod_anag "
+ "FROM stb_activity LEFT OUTER JOIN vtb_clie_pers_rif ON stb_activity.cod_anag = vtb_clie_pers_rif.cod_anag AND "
+ " stb_activity.persona_rif = vtb_clie_pers_rif.persona_rif AND "
+ " vtb_clie_pers_rif.e_mail IS NULL " + "WHERE stb_activity.activity_id = "
+ UtilityDB.valueToString(activityID) + " AND "
+ " vtb_clie_pers_rif.e_mail IS NULL";
String codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
String domainIntegry = "integry.it";
if (!UtilityString.isNullOrEmpty(codAnag) &&
!UtilityString.isNullOrEmpty(personaRif) &&
!UtilityString.isNullOrEmpty(emailPersRif) &&
!emailPersRif.toUpperCase().contains(domainIntegry.toUpperCase())) {
GtbAnag gtbAnag = new GtbAnag()
.setCodAnag(codAnag);
VtbCliePersRif persRif = new VtbCliePersRif()
.setCodAnag(codAnag)
.setPersonaRif(personaRif)
.seteMail(emailPersRif);
persRif.setOperation(OperationType.INSERT_OR_UPDATE);
gtbAnag.getVtbCliePersRif().add(persRif);
entityProcessor.processEntity(gtbAnag, multiDBTransactionManager);
}
entityProcessor.processEntity(activity, multiDBTransactionManager);
} else {
throw new Exception("Email destinatario non specificata");
}
}