Gestito versamento con data scad ed aggiunta partita mag prod in mes getworkorders

This commit is contained in:
2025-04-11 18:26:35 +02:00
parent 69a1a6906e
commit fef719b4da
7 changed files with 923 additions and 143 deletions

View File

@@ -2,6 +2,12 @@ package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.entity.WtbGestSetupUser;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import java.util.List;
public class Migration_20250404180134 extends BaseMigration implements MigrationModelInterface {
@@ -10,15 +16,40 @@ public class Migration_20250404180134 extends BaseMigration implements Migration
if (isHistoryDB())
return;
createSetup("PVM", "MONITORAGGIO_LINEE_V2", "ENABLE_MODIFICA_SCADENZA_LOTTO", "N",
String sql =
"SELECT value\n" +
"FROM stb_gest_setup\n" +
"WHERE key_section = 'ENABLE_MODIFICA_LOTTO_SUGGERITO'";
String value = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(this.advancedDataSource.getConnection(), sql);
if (UtilityString.isNullOrEmpty(value)) {
value = "N";
}
createSetup("PVM", "MONITORAGGIO_LINEE_V2", "ENABLE_MODIFICA_SCADENZA_LOTTO", value,
"Se abilitato permette la modifica della data di scadenza del lotto proposto in fase di assegnazione all'ordine.",
false, "SI_NO", false, false,
true, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("MES", "SETUP", "COD_MGRP_SCADENZA_MULTIPLA", null,
"Setup per identificare i tipi di articoli della quale attivare la logica di generazione dei lotti con scadenza multipla.",
false, "SI_NO", false, false,
false, false, false, "mtb_grup", false, "SELECT 'S' UNION ALL SELECT 'N'");
// Sposto setup esistente a nuova
sql =
"SELECT user_name, gest_name, section, key_section, value\n" +
"FROM wtb_gest_setup_user\n" +
"WHERE key_section = 'ENABLE_MODIFICA_LOTTO_SUGGERITO'";
List<WtbGestSetupUser> userSetupConfig = UtilityDB.executeSimpleQueryDTO(advancedDataSource.getConnection(), sql, WtbGestSetupUser.class);
if (userSetupConfig != null && !userSetupConfig.isEmpty()) {
for (WtbGestSetupUser userSetup : userSetupConfig) {
userSetup
.setKeySection("ENABLE_MODIFICA_SCADENZA_LOTTO");
userSetup.setOperation(OperationType.INSERT_OR_UPDATE);
userSetup.manageWithParentConnection(advancedDataSource.getConnection());
}
}
}
@Override

View File

@@ -0,0 +1,41 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250410130507 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("MES", "SETUP", "CONTROLLO_SCADENZA_MULTIPLA", null,
"Se true sulle linee scelte attiva la logica di generazione dei lotti con scadenza multipla.",
false, "SI_NO", false, false,
false, false, false, "jtb_fasi", false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano)) {
executeStatement(
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'A3', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B3', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B4', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B5', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B6', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'B7', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C1', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C2', N'S');\n" +
"INSERT INTO stb_gest_setup_det (gest_name, section, key_section, tipo_setup, val_col_rif, value) VALUES (N'MES', N'SETUP', N'CONTROLLO_SCADENZA_MULTIPLA', N'jtb_fasi', N'C3', N'S');"
);
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,605 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250411123155 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 TABLE\n" +
" AS RETURN\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" +
"--Funzione per calcolare la sequenza di ordini su una linea e il RunTimeEND\n" +
" WITH setup AS (SELECT ISNULL(@dateStart, DATEADD(DAY, -14, GETDATE())) AS date_start,\n" +
" ISNULL(@dateEnd, GETDATE()) AS date_end,\n" +
" ISNULL(@flagEvaso, 'I') AS flag_evaso,\n" +
" @codJfas AS cod_jfas,\n" +
" @codAnag AS cod_anag),\n" +
"\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" +
"\n" +
" setup_run_time AS (SELECT value AS flag_restart\n" +
" FROM stb_gest_setup\n" +
" WHERE gest_name = 'PVM'\n" +
" AND section = 'MONITORAGGIO_LINEE_V2'\n" +
" AND key_section = 'RESTART_RUN_TIME_END'),\n" +
"\n" +
" mtb_colr_sum_filtered_rows AS (SELECT gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" ser_collo,\n" +
" cod_mart,\n" +
" data_ord,\n" +
" num_ord,\n" +
" qta_col,\n" +
" num_cnf\n" +
" FROM mtb_colr\n" +
" WHERE gestione_rif IS NULL\n" +
" AND data_collo_rif IS NULL\n" +
" AND ser_collo_rif IS NULL\n" +
" AND num_collo_rif IS NULL),\n" +
"\n" +
" mtb_colr_sum_valid_colli AS (SELECT DISTINCT gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo\n" +
" FROM mtb_colt\n" +
" CROSS APPLY setup\n" +
" WHERE segno = 1\n" +
" AND data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" mtb_colr_sum AS (SELECT colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord,\n" +
" SUM(colr.qta_col) AS qta_col,\n" +
" SUM(colr.num_cnf) AS num_cnf\n" +
" FROM mtb_colr_sum_valid_colli colt\n" +
" INNER JOIN mtb_colr_sum_filtered_rows colr\n" +
" ON colr.gestione = colt.gestione\n" +
" AND colr.data_collo = colt.data_collo\n" +
" AND colr.num_collo = colt.num_collo\n" +
" AND colr.ser_collo = colt.ser_collo\n" +
" GROUP BY colr.gestione,\n" +
" colr.data_collo,\n" +
" colr.num_collo,\n" +
" colr.ser_collo,\n" +
" colr.cod_mart,\n" +
" colr.data_ord,\n" +
" colr.num_ord),\n" +
"\n" +
" machine_last_event AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" cod_cmac,\n" +
" MAX(data_mov) AS max_data_mov\n" +
" FROM dtb_ord_macc\n" +
" GROUP BY gestione, data_ord, num_ord, cod_cmac),\n" +
"\n" +
" machine_event_values AS (SELECT evento,\n" +
" IIF(tipologia = 'ENTRATA', 1, -1) AS value\n" +
" FROM dtb_ord_macc_eventi),\n" +
"\n" +
" in_production_machines AS (SELECT dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord,\n" +
" LAST_VALUE(dtb.data_mov) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS max_data_mov,\n" +
" LAST_VALUE(ev.value) OVER (ORDER BY dtb.gestione,\n" +
" dtb.data_ord,\n" +
" dtb.num_ord) AS final_value\n" +
" FROM dtb_ord_macc dtb\n" +
" INNER JOIN machine_last_event le\n" +
" ON dtb.data_ord = le.data_ord\n" +
" AND dtb.num_ord = le.num_ord\n" +
" AND dtb.gestione = le.gestione\n" +
" AND dtb.cod_cmac = le.cod_cmac\n" +
" AND dtb.data_mov = le.max_data_mov\n" +
" INNER JOIN machine_event_values ev\n" +
" ON dtb.evento = ev.evento\n" +
" CROSS APPLY setup\n" +
" WHERE dtb.data_ord BETWEEN setup.date_start AND setup.date_end),\n" +
"\n" +
" dtb_ord_with_max_step AS (SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" id_step AS id_step,\n" +
" MAX(id_step) OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" dtb_ord_steps.cod_jfas,\n" +
" dtb_ord_steps.num_fase) AS max_id_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" +
" dtb_ord_steps.flag_step_attivo,\n" +
" dtb_ord_steps.data_iniz,\n" +
" dtb_ord_steps.data_fine,\n" +
" dtb_ord_steps.qta_lav,\n" +
" dtb_ord_steps.qta_prod,\n" +
" dtb_ord_steps.hr_num,\n" +
" dtb_ord_steps.descrizione_attivita,\n" +
" SUM(CAST(DATEDIFF(S, data_iniz, ISNULL(data_fine, GETDATE())) AS BIGINT))\n" +
" OVER (PARTITION BY gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" num_fase,\n" +
" dtb_ord_steps.cod_jfas) 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" +
" AND gestione = 'L'),\n" +
"\n" +
" dtb_ord_max_step AS (SELECT DISTINCT IIF(in_production_machines.max_data_mov IS NOT NULL AND\n" +
" (dtb_ord_with_max_step.id_step = 0 OR\n" +
" (dtb_ord_with_max_step.id_step > 0 AND\n" +
" dtb_ord_with_max_step.data_fine IS NOT NULL AND\n" +
" DATEDIFF(MINUTE,\n" +
" dtb_ord_with_max_step.data_fine,\n" +
" in_production_machines.max_data_mov) >\n" +
" 5)), 1, 0) AS starting_machines,\n" +
" dtb_ord_with_max_step.*\n" +
" FROM dtb_ord_with_max_step\n" +
" LEFT OUTER JOIN in_production_machines\n" +
" ON dtb_ord_with_max_step.data_ord =\n" +
" in_production_machines.data_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.num_ord =\n" +
" in_production_machines.num_ord\n" +
" AND\n" +
" dtb_ord_with_max_step.gestione =\n" +
" in_production_machines.gestione\n" +
" AND in_production_machines.final_value = 1\n" +
"\n" +
" WHERE max_id_step = id_step),\n" +
"\n" +
" riga_ord_prod_w_materia_prima 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()),\n" +
" '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 /\n" +
" 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 /\n" +
" 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'),\n" +
" 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_ordr.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 mtb_aart mtb_aart_prod ON mtb_aart_prod.cod_mart = dtb_ordr.cod_mart\n" +
" WHERE dtb_ordr.gestione = 'A'),\n" +
"\n" +
" ord_lav AS (SELECT dtb_ordt.cod_jcom,\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv,\n" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv2\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord2 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3, mtb_partita_mag.rap_conv3)\n" +
" END\n" +
" END\n" +
" AS rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.partita_mag IS NULL THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" ELSE CASE\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis THEN\n" +
" riga_ord_prod_w_materia_prima.rap_conv3\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis2 THEN\n" +
" IIF(mtb_partita_mag.rap_conv2 IS NULL OR mtb_partita_mag.rap_conv2 = 0,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2, mtb_partita_mag.rap_conv2)\n" +
" WHEN riga_ord_prod_w_materia_prima.unt_ord3 = mtb_aart.unt_mis3 THEN\n" +
" IIF(mtb_partita_mag.rap_conv3 IS NULL OR mtb_partita_mag.rap_conv3 = 0,\n" +
" riga_ord_prod_w_materia_prima.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" +
" riga_ord_prod_w_materia_prima.num_cnf *\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf AS num_pezzi,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" riga_ord_prod_w_materia_prima.gg_scad_partita,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.colli_pedana,\n" +
" riga_ord_prod_w_materia_prima.num_cnf /\n" +
" riga_ord_prod_w_materia_prima.colli_pedana AS num_pedane,\n" +
" riga_ord_prod_w_materia_prima.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(riga_ord_prod_w_materia_prima.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" +
" ISNULL(mtb_partita_mag.partita_mag_prod,\n" +
" mtb_partita_mag.partita_mag) AS partita_mag_prod,\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" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.num_fase,\n" +
" IIF(mtb_aart.flag_qta_cnf_fissa = 'S' AND\n" +
" (mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.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 riga_ord_prod_w_materia_prima.colli_pedana > 1),\n" +
" riga_ord_prod_w_materia_prima.colli_pedana, jtb_cicl.qta_prod)\n" +
" AS qta_batch_prod,\n" +
" IIF(mtb_aart.qta_cnf > 1 OR riga_ord_prod_w_materia_prima.colli_pedana > 1,\n" +
" 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" +
" dtb_ord_steps.elapsed_time,\n" +
" SUM(ISNULL(mtb_colr_carico.qta_col, 0)) AS qta_trasferite,\n" +
" COUNT(mtb_colr_carico.num_collo) AS udc_trasferiti,\n" +
" COUNT(colli_lotto.num_collo) AS uds_scaricati,\n" +
" CASE\n" +
" WHEN dtb_ord_steps.id_step = 0\n" +
" THEN IIF(dtb_ord_steps.starting_machines = 1, 'IN AVVIO', 'PROGRAMMATO')\n" +
" WHEN dtb_ord_steps.data_fine IS NULL\n" +
" THEN 'IN CORSO'\n" +
" ELSE 'IN PAUSA'\n" +
" END AS stato,\n" +
" CONVERT(INT, SUM(ISNULL(\n" +
" mtb_colr_carico.qta_col / riga_ord_prod_w_materia_prima.calc_rap_conv,\n" +
" 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_carico.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_carico.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_max_step 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_carico\n" +
" ON dtb_ordt.data_ord = mtb_colr_carico.data_ord AND\n" +
" dtb_ordt.gestione = mtb_colr_carico.gestione AND\n" +
" dtb_ordt.num_ord = mtb_colr_carico.num_ord AND\n" +
" dtb_ordt.cod_prod = mtb_colr_carico.cod_mart\n" +
" LEFT OUTER JOIN jtb_comt ON dtb_ordt.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN riga_ord_prod_w_materia_prima\n" +
" ON riga_ord_prod_w_materia_prima.gestione_ord_prod =\n" +
" dtb_ordt.gestione_rif AND\n" +
" riga_ord_prod_w_materia_prima.data_ord_prod =\n" +
" dtb_ordt.data_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod =\n" +
" dtb_ordt.num_ord_rif AND\n" +
" riga_ord_prod_w_materia_prima.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 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 dtb_ord_steps.data_ord BETWEEN setup.date_start AND setup.date_end\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_ordt.cod_jfas = setup.cod_jfas)\n" +
" AND (setup.cod_anag IS NULL\n" +
" OR dtb_ordt.cod_anag = setup.cod_anag)\n" +
" GROUP BY riga_ord_prod_w_materia_prima.data_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.num_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.riga_ord_prod,\n" +
" riga_ord_prod_w_materia_prima.flag_avviabile,\n" +
" riga_ord_prod_w_materia_prima.flag_tracciabilita,\n" +
" riga_ord_prod_w_materia_prima.unt_ord,\n" +
" mtb_partita_mag.rap_conv2,\n" +
" mtb_partita_mag.rap_conv3,\n" +
" dtb_ordt.note,\n" +
" riga_ord_prod_w_materia_prima.rap_conv,\n" +
" dtb_ordt.descrizione_prod,\n" +
" dtb_ordt.descr_estesa_prod,\n" +
" riga_ord_prod_w_materia_prima.num_cnf,\n" +
" mtb_aart.qta_cnf,\n" +
" mtb_aart.gg_scad_partita,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" riga_ord_prod_w_materia_prima.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.partita_mag_prod,\n" +
" mtb_partita_mag.data_scad,\n" +
" dtb_ordt.cod_prod,\n" +
" dtb_ordt.data_iniz_prod,\n" +
" dtb_ord_steps.id_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" +
" riga_ord_prod_w_materia_prima.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" +
" dtb_ord_steps.elapsed_time,\n" +
" riga_ord_prod_w_materia_prima.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" +
" riga_ord_prod_w_materia_prima.unt_ord2,\n" +
" riga_ord_prod_w_materia_prima.unt_ord3,\n" +
" riga_ord_prod_w_materia_prima.qta_ord,\n" +
" riga_ord_prod_w_materia_prima.qta_ord2,\n" +
" riga_ord_prod_w_materia_prima.qta_ord3,\n" +
" riga_ord_prod_w_materia_prima.rap_conv2,\n" +
" riga_ord_prod_w_materia_prima.rap_conv3,\n" +
" riga_ord_prod_w_materia_prima.qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.cal_qta_cnf,\n" +
" riga_ord_prod_w_materia_prima.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" +
" dtb_ord_steps.num_fase, dtb_ord_steps.qta_lav,\n" +
" jl.id_lotto, jlt.data_lotto, mtb_aart.peso_kg, dtb_ordt.data_cons_prod_max,\n" +
" dtb_ord_steps.id_step,\n" +
" dtb_ord_steps.max_fase,\n" +
" dtb_ord_steps.starting_machines)\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" +
" partita_mag_prod,\n" +
" note_lav,\n" +
" data_scad,\n" +
" cod_prod,\n" +
" descrizione_commessa,\n" +
" data_iniz_prod,\n" +
" id_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() AND (data_iniz IS NULL OR data_fine IS NOT NULL))\n" +
" 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" +
" CROSS APPLY setup_run_time");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -7,6 +7,8 @@ public class InsertPartitaMagRequestDTO {
private String partitaMag;
private String partitaMagProd;
private Date dataScad;
private String codJfas;
@@ -37,6 +39,15 @@ public class InsertPartitaMagRequestDTO {
return this;
}
public String getPartitaMagProd() {
return partitaMagProd;
}
public InsertPartitaMagRequestDTO setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public Date getDataScad() {
return dataScad;
}

View File

@@ -152,6 +152,11 @@ public class OrdineLavorazioneDTO {
@JsonSerialize
private String partitaMag;
@SqlField(value = "partita_mag_prod")
@JsonProperty("partitaMagProd")
@JsonSerialize
private String partitaMagProd;
@SqlField(value = "data_scad")
@JsonProperty("dataScad")
@JsonSerialize(using = JsonDateAdapterSerializer.class)
@@ -639,6 +644,15 @@ public class OrdineLavorazioneDTO {
return this;
}
public String getPartitaMagProd() {
return partitaMagProd;
}
public OrdineLavorazioneDTO setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public Date getDataScad() {
return dataScad;
}

View File

@@ -43,6 +43,7 @@ import it.integry.ems_model.utility.BarcodeEan128.Ean128Model;
import it.integry.ems_model.utility.BarcodeEan128.UtilityBarcodeEan128;
import it.integry.ems_model.utility.*;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.http.entity.ContentType;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -1335,14 +1336,31 @@ public class MesProductionServiceV2 {
DtbOrdt ordineLav = completeDatiOrdine(dto.getOrdine());
MtbPartitaMag partitaMagOrdine = null;
if (!UtilityString.isNullOrEmpty(ordineLav.getPartitaMag())) {
partitaMagOrdine = new MtbPartitaMag();
partitaMagOrdine.setCodMart(ordineLav.getCodProd())
.setPartitaMag(ordineLav.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaMagOrdine, true, multiDBTransactionManager);
}
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL");
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
List<MtbAart> arts = rows.stream().map(MtbColr::getCodMart).map(MtbAart::fromCodMart).distinct().collect(java.util.stream.Collectors.toList());
if (arts.size() > 1)
throw new Exception("Impossibile versare a produzione una pedana mista!");
final MtbAart rowArt = entityProcessor.processEntity(arts.get(0), true, multiDBTransactionManager);
GiacenzaArtInBarcodeDTO invDto = new GiacenzaArtInBarcodeDTO();
invDto
.setBarcodeUl(dto.getBarcode())
.setCodMart(rowArt.getCodMart())
@@ -1355,6 +1373,7 @@ public class MesProductionServiceV2 {
.setNumCnf(BigDecimal.ZERO);
entityProcessor.processEntityList(arts, true);
for (MtbColr row : rows) {
DtbOrdr rowOrdine = ordineLav.getDtbOrdr().stream().filter(ordRow -> ordRow.getCodMart().equalsIgnoreCase(rowArt.getCodMart())).findFirst().orElse(null);
if (rowOrdine == null) {
@@ -1363,11 +1382,33 @@ public class MesProductionServiceV2 {
// continue;
}
if (rowArt.getCodMgrp().equalsIgnoreCase(codMgrpSL) &&
matchLottoSlToOrdine &&
!UtilityString.isNullOrEmpty(ordineLav.getPartitaMag()) &&
!ordineLav.getPartitaMag().startsWith(row.getPartitaMag())) {
response.getAnomalie().add(AnomalieDTO.warning(String.format("La partita di semilavorato che si vuole versare (%s) non corrisponde a quella dell'ordine (%s), per concludere la procedura di versamento verrà creato un nuovo ordine di lavorazione con la partita selezionata!", row.getPartitaMag(), ordineLav.getPartitaMag())));
MtbPartitaMag partitaMagRow = new MtbPartitaMag();
partitaMagRow
.setCodMart(row.getCodMart())
.setPartitaMag(row.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaMagRow, true, multiDBTransactionManager);
if (rowArt.getCodMgrp().equalsIgnoreCase(codMgrpSL)
&& matchLottoSlToOrdine
&& !UtilityString.isNullOrEmpty(ordineLav.getPartitaMag())
&& (!partitaMagRow.getPartitaMagProd().equalsIgnoreCase(partitaMagOrdine.getPartitaMagProd())
|| !DateUtils.isSameDay(partitaMagRow.getDataScad(), partitaMagOrdine.getDataScad()))) {
if (!partitaMagRow.getPartitaMagProd().equalsIgnoreCase(partitaMagOrdine.getPartitaMagProd())) {
response.getAnomalie().add(AnomalieDTO.warning(String.format(
"Lotto di produzione (%s) diverso da quello in lavorazione (%s).\nVuoi creare un nuovo ordine?",
partitaMagRow.getPartitaMag(),
partitaMagOrdine.getPartitaMagProd())));
} else {
response.getAnomalie().add(AnomalieDTO.warning(String.format(
"La data di scadenza del lotto versato (%s) è diversa da quella del lotto di lavorazione (%s).\nVuoi creare un nuovo ordine?",
UtilityDate.formatDate(partitaMagRow.getDataScad(), CommonConstants.DATE_FORMAT_DMY),
UtilityDate.formatDate(partitaMagOrdine.getDataScad(), CommonConstants.DATE_FORMAT_DMY)
)));
}
response.setNewOrderRequired(true);
}
invDto.setPartitaMag(row.getPartitaMag())
@@ -1441,134 +1482,181 @@ public class MesProductionServiceV2 {
}
public Object versaMaterialeSuOrdine(VersamentoMaterialeSuOrdineDTO dto) throws Exception {
MtbColt colloDaVersare = pvmService.getColloByBarcode(dto.getMtbColt().getBarcodeUl(), true);
colloDaVersare.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(colloDaVersare, multiDBTransactionManager);
List<MvwSitArtUdcDetInventarioDTO> contenuto = wmsGenericService.getGiacenzaCollo(colloDaVersare);
if (UtilityList.isNullOrEmpty(contenuto)) {
throw new Exception("La UL seleionata non contiene alcun articolo da versare!");
throw new Exception("La UL selezionata non contiene alcun articolo da versare!");
}
DtbOrdt ordine = dto.getOrdine();
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
if (dto.isCloneOrdine()) {
String sql = Query.format("SELECT dtb_ordr.* from dtb_ordr\n" +
" inner join dtb_ordt on dtb_ordr.data_ord = dtb_ordt.data_ord_rif and dtb_ordr.gestione = gestione_rif and dtb_ordr.num_ord = num_ord_rif\n" +
" where dtb_ordt.gestione = {} and dtb_ordt.data_ord = {} and dtb_ordt.num_ord = {} and dtb_ordr.cod_mart = {}", ordine.getGestione(), ordine.getDataOrd(), ordine.getNumOrd(), ordine.getCodProd());
DtbOrdr oldRow = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
CreaOrdineProdDTO newOrdDTO = new CreaOrdineProdDTO();
newOrdDTO.setCodAnag(ordine.getCodAnag())
.setDataOrd(LocalDate.now())
.setUntOrd(oldRow.getUntOrd())
.setCodMart(oldRow.getCodMart())
.setCodMdep(ordine.getCodMdep())
.setNumCnf(oldRow.getNumCnf())
.setQtaOrd(ordine.getQtaProd())
.setCodJfas(ordine.getCodJfas())
.setColliPedana(oldRow.getColliPedana());
ordine = productionService.saveOrdineProd(newOrdDTO);
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
}
List<CreateUDSRequestOrderDTO> ordini = new ArrayList<>();
MaterialeVersatoSuOrdineDTO versamentoEsistente = getVersamentoBarcodeSuOrdine(dto.getOrdine(), colloDaVersare.getBarcodeUl());
MtbColt uds;
if (versamentoEsistente == null) {
CreateUDSRequestOrderDTO orderDTO = new CreateUDSRequestOrderDTO()
.setNumOrd(ordine.getNumOrd())
.setDataOrd(ordine.getDataOrd().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate())
.setGestione(ordine.getGestione());
ordini.add(orderDTO);
CreateUDSRequestDTO requestDTO = new CreateUDSRequestDTO()
.setCodMdep(ordine.getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setSegno(-1)
.setOrders(ordini);
uds = wmsLavorazioneService.createUDS(requestDTO);
} else {
uds = new MtbColt(versamentoEsistente.getGestione(), versamentoEsistente.getDataCollo(), versamentoEsistente.getNumCollo(), versamentoEsistente.getSerCollo());
}
try {
if (dto.isCloneOrdine()) {
String sql = Query.format("SELECT dtb_ordr.* from dtb_ordr\n" +
" inner join dtb_ordt on dtb_ordr.data_ord = dtb_ordt.data_ord_rif and dtb_ordr.gestione = gestione_rif and dtb_ordr.num_ord = num_ord_rif\n" +
" where dtb_ordt.gestione = {} and dtb_ordt.data_ord = {} and dtb_ordt.num_ord = {} and dtb_ordr.cod_mart = {}", ordine.getGestione(), ordine.getDataOrd(), ordine.getNumOrd(), ordine.getCodProd());
DtbOrdr oldRow = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
for (MvwSitArtUdcDetInventarioDTO scarico : contenuto) {
String sql = "SELECT riga_ord\n" +
"from dtb_ordr\n" +
"where data_ord = " + UtilityDB.valueToString(ordine.getDataOrd()) + "\n" +
" and num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + "\n" +
" and gestione = " + UtilityDB.valueToString(ordine.getGestione()) + "\n" +
" and cod_mart = " + UtilityDB.valueToString(scarico.getCodMart());
Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
CreaOrdineProdDTO newOrdDTO = new CreaOrdineProdDTO();
newOrdDTO.setCodAnag(ordine.getCodAnag())
.setDataOrd(LocalDate.now())
.setUntOrd(oldRow.getUntOrd())
.setCodMart(oldRow.getCodMart())
.setCodMdep(ordine.getCodMdep())
.setNumCnf(oldRow.getNumCnf())
.setQtaOrd(ordine.getQtaProd())
.setCodJfas(ordine.getCodJfas())
.setColliPedana(oldRow.getColliPedana());
ordine = productionService.saveOrdineProd(newOrdDTO);
MtbColr sourceMtbColr = new MtbColr();
sourceMtbColr
.setNumCollo(scarico.getNumCollo())
.setSerCollo(scarico.getSerCollo())
.setDataCollo(scarico.getDataCollo())
.setGestione(scarico.getGestione())
.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag())
.setPesoLordoKg(scarico.getPesoLordoKG())
.setPesoNettoKg(scarico.getPesoNettoKG());
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
}
InsertUDSRowRequestDTO insertRequestDto = new InsertUDSRowRequestDTO()
.setCodMart(scarico.getCodMart())
.setQtaTot(UtilityBigDecimal.isNull(dto.getQtaVersamento(), scarico.getQtaCol()))
.setPartitaMag(scarico.getPartitaMag())
.setSourceMtbColr(sourceMtbColr)
.setTargetMtbColt(uds)
.setQtaCnf(scarico.getQtaCnf())
.setDataOrd(ordine.getDataOrd())
.setRigaOrd(rigaOrd)
.setNumOrd(ordine.getNumOrd());
wmsLavorazioneService.insertUDSRow(insertRequestDto);
List<CreateUDSRequestOrderDTO> ordini = new ArrayList<>();
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL");
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
MaterialeVersatoSuOrdineDTO versamentoEsistente = getVersamentoBarcodeSuOrdine(dto.getOrdine(), colloDaVersare.getBarcodeUl());
if (versamentoEsistente == null) {
CreateUDSRequestOrderDTO orderDTO = new CreateUDSRequestOrderDTO()
.setNumOrd(ordine.getNumOrd())
.setDataOrd(ordine.getDataOrd().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate())
.setGestione(ordine.getGestione());
ordini.add(orderDTO);
CreateUDSRequestDTO requestDTO = new CreateUDSRequestDTO()
.setCodMdep(ordine.getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setSegno(-1)
.setOrders(ordini);
uds = wmsLavorazioneService.createUDS(requestDTO);
} else {
uds = new MtbColt(versamentoEsistente.getGestione(), versamentoEsistente.getDataCollo(), versamentoEsistente.getNumCollo(), versamentoEsistente.getSerCollo());
}
for (MvwSitArtUdcDetInventarioDTO scarico : contenuto) {
String sql = "SELECT riga_ord\n" +
"from dtb_ordr\n" +
"where data_ord = " + UtilityDB.valueToString(ordine.getDataOrd()) + "\n" +
" and num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + "\n" +
" and gestione = " + UtilityDB.valueToString(ordine.getGestione()) + "\n" +
" and cod_mart = " + UtilityDB.valueToString(scarico.getCodMart());
Integer rigaOrd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
MtbColr sourceMtbColr = new MtbColr();
sourceMtbColr
.setNumCollo(scarico.getNumCollo())
.setSerCollo(scarico.getSerCollo())
.setDataCollo(scarico.getDataCollo())
.setGestione(scarico.getGestione())
.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag())
.setPesoLordoKg(scarico.getPesoLordoKG())
.setPesoNettoKg(scarico.getPesoNettoKG());
InsertUDSRowRequestDTO insertRequestDto = new InsertUDSRowRequestDTO()
.setCodMart(scarico.getCodMart())
.setQtaTot(UtilityBigDecimal.isNull(dto.getQtaVersamento(), scarico.getQtaCol()))
.setPartitaMag(scarico.getPartitaMag())
.setSourceMtbColr(sourceMtbColr)
.setTargetMtbColt(uds)
.setQtaCnf(scarico.getQtaCnf())
.setDataOrd(ordine.getDataOrd())
.setRigaOrd(rigaOrd)
.setNumOrd(ordine.getNumOrd());
wmsLavorazioneService.insertUDSRow(insertRequestDto);
String codMgrpSL = setupGest.getSetup("w_lpianoprod_rc", "SETUP", "GRUPPO_SL");
boolean matchLottoSlToOrdine = setupGest.getSetupDetBoolean("MES", "SETUP", "VINCOLA_LOTTO_ORDINE_A_SL", dto.getCodJfas());
if (UtilityString.isNullOrEmpty(ordine.getPartitaMag()) && scarico.getCodGruppo().equalsIgnoreCase(codMgrpSL) && matchLottoSlToOrdine) {
MtbPartitaMag partitaSL = new MtbPartitaMag();
partitaSL.setCodMart(scarico.getCodMart())
.setPartitaMag(scarico.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaSL, multiDBTransactionManager);
entityProcessor.processEntity(partitaSL, true, multiDBTransactionManager);
String partitaMagPf = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), Query.format("with datiPartita as (\n" +
" select MAX(ASCII(right(partita_mag,LEN(partita_mag) - LEN({})))) + 1 as nextProgressivo\n" +
" from mtb_partita_mag where cod_mart = {} and partita_mag like {}\n" +
")\n" +
"select concat({},ISNULL(CHAR(nextProgressivo),'A'))\n" +
"from datiPartita", partitaSL.getPartitaMag(), ordine.getCodProd(), partitaSL.getPartitaMag() + "%", partitaSL.getPartitaMag()));
partitaMagPf = UtilityString.isNull(partitaMagPf, partitaSL.getPartitaMag());
MtbPartitaMag partitaPf = new MtbPartitaMag();
partitaPf.setCodMart(ordine.getCodProd())
.setPartitaMag(partitaMagPf)
.setDataScad(partitaSL.getDataScad())
.setOperation(OperationType.INSERT_OR_UPDATE);
entityProcessor.processEntity(partitaPf, true, multiDBTransactionManager);
ordine.setPartitaMag(partitaMagPf)
.setOperation(OperationType.UPDATE);
MtbPartitaMag partitaOrdine = null;
entityProcessor.processEntity(ordine, true, multiDBTransactionManager);
// Controllo se esiste partita con stesso lotto e scadenza
if (!UtilityString.isNullOrEmpty(ordine.getPartitaMag())) {
partitaOrdine = new MtbPartitaMag();
partitaOrdine
.setCodMart(ordine.getCodProd())
.setPartitaMag(ordine.getPartitaMag())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(partitaOrdine, true, multiDBTransactionManager);
}
// Assegna una nuova partita se l'ordine non ha nessuna partita o se il semilavorato ha diversa partitaMagProd o data scadenza
if (matchLottoSlToOrdine
&& scarico.getCodGruppo().equalsIgnoreCase(codMgrpSL)
&& (UtilityString.isNullOrEmpty(ordine.getPartitaMag())
|| !partitaOrdine.getPartitaMagProd().equalsIgnoreCase(partitaSL.getPartitaMagProd())
|| !DateUtils.isSameDay(partitaOrdine.getDataScad(), partitaSL.getDataScad()))) {
sql = Query.format(
"WITH datiPartita\n" +
" AS (SELECT MAX(ASCII(RIGHT(partita_mag, LEN(partita_mag) - LEN(%s)))) + 1 AS nextProgressivo\n" +
" FROM mtb_partita_mag\n" +
" WHERE cod_mart = %s\n" +
" AND partita_mag_prod = %s)\n" +
"SELECT CONCAT(%s, ISNULL(CHAR(nextProgressivo), 'A'))\n" +
"FROM datiPartita",
partitaSL.getPartitaMagProd(),
ordine.getCodProd(),
partitaSL.getPartitaMagProd(),
partitaSL.getPartitaMagProd()
);
String partitaMagPf = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
partitaMagPf = UtilityString.isNull(partitaMagPf, partitaSL.getPartitaMagProd());
MtbPartitaMag partitaPf = new MtbPartitaMag();
partitaPf
.setCodMart(ordine.getCodProd())
.setPartitaMag(partitaMagPf)
.setPartitaMagProd(partitaSL.getPartitaMagProd())
.setDataProd(partitaSL.getDataProd())
.setDataScad(partitaSL.getDataScad())
.setOperation(OperationType.INSERT_OR_UPDATE);
entityProcessor.processEntity(partitaPf, true, multiDBTransactionManager);
ordine.setPartitaMag(partitaMagPf)
.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(ordine, true, multiDBTransactionManager);
}
}
if (dto.isStartOrdine() || dto.isCloneOrdine()) {
openStep(ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0, null, null, null, true);
}
multiDBTransactionManager.commitAll();
} catch (Exception e) {
multiDBTransactionManager.rollbackAll();
throw e;
}
if (dto.isStartOrdine() || dto.isCloneOrdine()) {
openStep(ordine.getDataOrd(), ordine.getNumOrd(), ordine.getGestione(), dto.getCodJfas(), 0);
}
return uds;
}

View File

@@ -1045,7 +1045,7 @@ public class ProductionService {
}
}
entityProcessor.processEntity(ordLav, multiDBTransactionManager);
entityProcessor.processEntity(ordLav, true, multiDBTransactionManager);
UtilityEntity.throwEntityException(ordLav);
}
}
@@ -1617,15 +1617,15 @@ public class ProductionService {
}
}
public StbGestSetupDet getConfigCodMgrpScadenzaMultipla(String codMgrp) throws Exception {
List<StbGestSetupDet> setupDetList = setupGest.getSetupDetList("MES", "SETUP", "COD_MGRP_SCADENZA_MULTIPLA");
public StbGestSetupDet getConfigControlloScadenzaMultipla(String codJfas) throws Exception {
List<StbGestSetupDet> setupDetList = setupGest.getSetupDetList("MES", "SETUP", "CONTROLLO_SCADENZA_MULTIPLA");
if (setupDetList == null) {
return null;
}
java.util.Optional<StbGestSetupDet> stbGestSetupDetOptional = setupDetList.stream()
.filter(stbGestSetupDet -> stbGestSetupDet.getValColRif().equalsIgnoreCase(codMgrp))
.filter(stbGestSetupDet -> stbGestSetupDet.getValColRif().equalsIgnoreCase(codJfas))
.findFirst();
return stbGestSetupDetOptional.orElse(null);
@@ -1634,39 +1634,29 @@ public class ProductionService {
public List<EntityBase> insertPartitaMag(InsertPartitaMagRequestDTO dto, boolean saveEntity) throws Exception {
String codMart = dto.getCodMart();
String partitaMag = dto.getPartitaMag();
String partitaMagProd = partitaMag;
String partitaMagProd = UtilityString.isNull(dto.getPartitaMagProd(), partitaMag);
Date dataScad = dto.getDataScad();
String sql = Query.format(
"SELECT mg.cod_mgrp\n" +
"FROM mtb_grup mg\n" +
"INNER JOIN mtb_aart ma ON mg.cod_mgrp = ma.cod_mgrp\n" +
"WHERE ma.cod_mart = %s",
dto.getCodMart()
);
StbGestSetupDet configControlloScadenzaMultipla = this.getConfigControlloScadenzaMultipla(dto.getCodJfas());
String codMgrp = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
StbGestSetupDet configCodMgrpScadenzaMultipla = this.getConfigCodMgrpScadenzaMultipla(codMgrp);
if (configCodMgrpScadenzaMultipla != null && configCodMgrpScadenzaMultipla.getValue().equalsIgnoreCase("S")) {
// Controllo se esiste articolo con stesso lotto e scadenze
sql = Query.format(
"SELECT partita_mag\n" +
"FROM mtb_partita_mag\n" +
"WHERE cod_mart = %s\n" +
"AND partita_mag_prod = %s\n" +
"AND data_scad = %s\n",
codMart,
partitaMag,
dataScad
);
String partitaMagQuery = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (partitaMagQuery == null) {
if (configControlloScadenzaMultipla != null && configControlloScadenzaMultipla.getValue().equalsIgnoreCase("S")) {
// Controllo se esiste partita con stesso lotto e scadenza
// sql = Query.format(
// "SELECT partita_mag\n" +
// "FROM mtb_partita_mag\n" +
// "WHERE cod_mart = %s\n" +
// "AND partita_mag_prod = %s\n" +
// "AND data_scad = %s\n",
// codMart,
// partitaMag,
// dataScad
// );
//
// String partitaMagQuery = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
//
// if (partitaMagQuery == null) {
// La partita per data scad non esiste, leggere l'ultima e creane una nuova
sql = Query.format(
String sql = Query.format(
"SELECT MAX(partita_mag)\n" +
"FROM mtb_partita_mag\n" +
"WHERE cod_mart = %s\n" +
@@ -1688,9 +1678,9 @@ public class ProductionService {
partitaMag += lastPartitaChar;
}
} else {
partitaMag = partitaMagQuery;
}
// } else {
// partitaMag = partitaMagQuery;
// }
}
MtbPartitaMag mtbPartitaMag = new MtbPartitaMag()