From d02f44237e46c13867a0ed0924f89848df59a6dd Mon Sep 17 00:00:00 2001 From: CarlaD Date: Fri, 21 Nov 2025 18:05:40 +0100 Subject: [PATCH] modificata funzione getSchedaCosti --- .../model/Migration_20251121165211.java | 288 ++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251121165211.java diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251121165211.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251121165211.java new file mode 100644 index 0000000000..1c46795409 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20251121165211.java @@ -0,0 +1,288 @@ +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_20251121165211 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + if(isCustomer(IntegryCustomer.Biolevante)) { + createOrUpdateFunction("[getSchedaCosti]", "CREATE FUNCTION [dbo].[getSchedaCosti](@CodProd VARCHAR(15), @DataCosto DATETIME, @codVlis VARCHAR(5),\n" + + " @tipoCosto VARCHAR(2))\n" + + " RETURNS TABLE\n" + + " AS\n" + + " RETURN\n" + + " (\n" + + "/*\n" + + "\n" + + "declare @CodProd VARCHAR(15), @DataCosto DATETIME, @codVlis VARCHAR(5), @tipoCosto varchar(2)\n" + + "\n" + + "set @codProd = 'ccondib1lev'\n" + + "set @dataCosto = Cast(getDAte() as date)\n" + + "set @tipoCosto = 'UC';\n" + + "set @codVlis = '0036';\n" + + "*/\n" + + "/*tipoCosto: \n" + + " UC = Ultimo costo\n" + + " CM = Costo di mercato */\n" + + " WITH gruppi_merc AS (SELECT cod_mgrp,\n" + + " descrizione,\n" + + " tipo_mgrp,\n" + + " CASE tipo_mgrp\n" + + " WHEN 'MP' THEN '01'\n" + + " WHEN 'IMB' THEN '02'\n" + + " WHEN 'ACC' THEN '03'\n" + + " WHEN 'SL' THEN '04'\n" + + " WHEN 'PF' THEN '04'\n" + + " ELSE 11 END AS sort_categ,\n" + + " CASE tipo_mgrp\n" + + " WHEN 'MP' THEN 'MATERIE PRIME'\n" + + " WHEN 'IMB' THEN 'IMBALLAGGI'\n" + + " WHEN 'ACC' THEN 'MATERIALE ACCESSORIO'\n" + + " WHEN 'SL' THEN 'COSTO LAVORAZIONI'\n" + + " WHEN 'PF' THEN 'COSTO LAVORAZIONI'\n" + + " ELSE tipo_mgrp\n" + + " END AS categoria,\n" + + " CASE WHEN tipo_mgrp IN ('MP', 'IMB', 'ACC') THEN 1 ELSE 0 END AS isMateriaPrima\n" + + " from mtb_grup)\n" + + " ,explode_dist AS (\n" + + " SELECT CASE WHEN sfuso.cod_mart IS NOT NULL THEN 1 ELSE 0 END AS isSfuso,\n" + + " ISNULL(ISNULL(sfuso.cod_mart, dist.cod_prod), mtb_aart.cod_mart) AS cod_mart,\n" + + " dist.flag_foglia,\n" + + " dist.unt_mis_prod AS unt_mis_art,\n" + + " mtb_aart.unt_mis AS unt_mis_prod,\n" + + " dist.qta_prod * ISNULL(sfuso.PercProd, 1) AS qta_prod,\n" + + " case when sfuso.cod_mart IS not null \n" + + " then\n" + + " /*se si tratta di un mix pendiamo il costo dei materiali dalla mtb_aart*/\n" + + " sfuso_art.val_ult_car\n" + + " else\n" + + " ROUND(ISNULL(dist.costo_materiali, 0) / dist.qta_prod *\n" + + " ISNULL(sfuso.PercProd, 1),\n" + + " 5) end AS costo_unt,\n" + + " ISNULL( (case \n" + + " when sfuso.cod_mart IS not null \n" + + " then sfuso_art.val_ult_car * dist.qta_prod \n" + + " else dist.costo_materiali end ) \n" + + " * ISNULL(sfuso.PercProd, 1), 0) AS costo_materiali,\n" + + " \n" + + " ISNULL(dist.costo_manodopera, 0) +\n" + + " ISNULL(dist.costo_manodopera_magaz, 0) +\n" + + " ISNULL(dist.costo_servizi, 0) \n" + + " AS altri_costi\n" + + " FROM dbo.f_explodedist(@codprod, 1, 'U', @datacosto, 'S', 'S') dist\n" + + " INNER JOIN mtb_aart\n" + + " ON mtb_aart.cod_mart = ISNULL(dist.cod_prod_pri, dist.cod_prod) \n" + + " LEFT OUTER JOIN olvw_miscele_olio miscele ON dist.cod_prod = miscele.cod_mart\n" + + " LEFT OUTER JOIN olvw_distinta_sfuso sfuso\n" + + " ON dist.cod_prod_pri = sfuso.cod_prod AND\n" + + " dist.cod_prod = miscele.cod_mart\n" + + " LEFT OUTER JOIN mtb_aart sfuso_art on sfuso.cod_mart = sfuso_art.cod_mart\n" + + "\n" + + " )\n" + + " , distinta_base AS (\n" + + " SELECT 1 AS sort,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 THEN gruppi_merc.sort_categ ELSE '4' END as sort_categ,\n" + + " gruppi_merc.tipo_mgrp,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 THEN gruppi_merc.categoria ELSE 'COSTO LAVORAZIONI' END as categoria,\n" + + " mtb_aart.cod_msgr, \n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" + + " THEN mtb_aart.descrizione\n" + + " ELSE 'MANO DOPERA E ALTRI COSTI DI PRODUZIONE (' + gruppi_merc.tipo_mgrp + ')' END AS descr_costo,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" + + " THEN explode_dist.cod_mart\n" + + " END AS cod_mart,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" + + " THEN explode_dist.unt_mis_art\n" + + " ELSE explode_dist.unt_mis_prod END AS unt_mis,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" + + " THEN explode_dist.qta_prod\n" + + " ELSE 1 END AS qta_prod,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1 \n" + + " THEN\n" + + " CASE\n" + + " WHEN @tipoCosto = 'CM' THEN ISNULL(lisa.costo_mercato, 0)\n" + + " ELSE explode_dist.costo_unt END\n" + + " ELSE explode_dist.altri_costi END AS costo_unit,\n" + + " CASE\n" + + " WHEN explode_dist.flag_foglia = 1 THEN\n" + + " CASE\n" + + " WHEN @tipoCosto = 'CM'\n" + + " THEN ISNULL(lisa.costo_mercato, 0) * explode_dist.qta_prod\n" + + " ELSE explode_dist.costo_materiali END +\n" + + " --ISNULL(oneri_acq.costo_kg * explode_dist.qta_prod, 0)\n" + + " CASE WHEN @tipoCosto = 'CM'\n" + + " THEN ISNULL(oneri_acq.costo_kg * explode_dist.qta_prod, 0)\n" + + " ELSE 0 END\n" + + " ELSE explode_dist.altri_costi END costo_materiali,\n" + + " CONVERT(VARCHAR(4), 'VAL') AS qualificatore,\n" + + " CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" + + " dati_listino.dati AS dati_listino\n" + + " FROM explode_dist\n" + + " INNER JOIN mtb_aart ON explode_dist.cod_mart = mtb_aart.cod_mart\n" + + " INNER JOIN gruppi_merc ON mtb_aart.cod_mgrp = gruppi_merc.cod_mgrp\n" + + " OUTER APPLY (SELECT LISA.COD_MART,\n" + + " AVG(prz_acq_netto_um) AS costo_mercato\n" + + " FROM dbo.getListinoAcquisto(DATEADD(MONTH, 1, @DataCosto),\n" + + " NULL, NULL, mtb_aart.cod_mart,\n" + + " 'S', NULL) lisa\n" + + " WHERE ( Lisa.tipo_variazione is null OR lisa.tipo_variazione <> 'D' )\n" + + " AND lisa.flag_attivo = 'S'\n" + + " AND lisa.flag_forn_pref = 'S'\n" + + " AND @tipoCosto = 'CM'\n" + + " GROUP BY lisa.cod_mart) lisa\n" + + " OUTER APPLY (SELECT STUFF((SELECT '~' + lisa.cod_alis + ' - ' +\n" + + " lisa.descrizione + ' DEL ' +\n" + + " CONVERT(VARCHAR(10), lisa.data_iniz, 103) +\n" + + " ' PREZZO: ' +\n" + + " FORMAT(prz_acq_netto_um, '#,##0.00###') +\n" + + " '€' AS [text()]\n" + + " FROM dbo.getListinoAcquisto(\n" + + " DATEADD(WEEK, 1, @DataCosto),\n" + + " NULL, NULL, mtb_aart.cod_mart,\n" + + " 'S', NULL) lisa\n" + + " WHERE lisa.tipo_variazione <> 'D'\n" + + " AND lisa.flag_attivo = 'S'\n" + + " AND lisa.flag_forn_pref = 'S'\n" + + " AND @tipoCosto = 'CM'\n" + + " FOR XML PATH('')), 1, 1,\n" + + " '') AS dati) dati_listino\n" + + " OUTER APPLY (SELECT SUM(conai.costo_kg * mtb_spes.qta_spes) AS costo_kg\n" + + " FROM mtb_aart arti\n" + + " INNER JOIN mtb_spes ON arti.cod_mart = mtb_spes.cod_mart\n" + + " LEFT OUTER JOIN (SELECT cod_conai,\n" + + " da_data,\n" + + " LEAD(\n" + + " DATEADD(DAY, -1, da_data),\n" + + " 1,\n" + + " CAST(GETDATE() AS DATE))\n" + + " OVER (PARTITION BY cod_conai ORDER BY da_data) AS a_data,\n" + + " costo_kg\n" + + " FROM gtb_conai_costi) conai\n" + + " ON mtb_spes.cod_spes =\n" + + " conai.cod_conai AND\n" + + " CAST(GETDATE() AS DATE) BETWEEN da_data AND a_data\n" + + " WHERE arti.cod_mart = mtb_aart.cod_mart) AS oneri_acq )\n" + + "\n" + + "\n" + + " SELECT sort,\n" + + " sort_categ AS group_categ,\n" + + " sort_categ,\n" + + " tipo_mgrp,\n" + + " categoria,\n" + + " cod_msgr,\n" + + " descr_costo,\n" + + " cod_mart,\n" + + " unt_mis,\n" + + " ROUND(qta_prod, 4) AS qta_prod,\n" + + " /*costo_unit,*/\n" + + " CASE\n" + + " WHEN qta_prod > 0 THEN ROUND(ISNULL(costo_materiali, 0) / qta_prod, 5)\n" + + " ELSE 0 END AS costo_unit,\n" + + " ROUND(ISNULL(costo_materiali, 0), 5) AS valore,\n" + + " qualificatore,\n" + + " tipo_calcolo,\n" + + " dati_listino\n" + + " FROM distinta_base\n" + + " UNION ALL\n" + + " SELECT CASE WHEN tipo_calcolo = 'LAVORAZIONE' THEN 1 ELSE 2 END AS sort,\n" + + " CASE WHEN tipo_calcolo = 'LAVORAZIONE' THEN 4 ELSE 5 END AS group_categ,\n" + + " 20,\n" + + " NULL,\n" + + " CASE\n" + + " WHEN tipo_calcolo = 'LAVORAZIONE' THEN 'COSTO LAVORAZIONI'\n" + + " ELSE 'COSTI DIRETTI COMMERCIALI E CONSEGNA' END,\n" + + " NULL,\n" + + " jtb_dist_clav_dir.descrizione,\n" + + " jtb_dist_clav_dir.cod_prod,\n" + + " jtb_dist_clav_dir.unt_mis,\n" + + " jtb_dist_clav_dir.qta_lav / jtb_cicl.qta_prod / jtb_cicl.rap_conv_prod AS qta_lav,\n" + + " jtb_dist_clav_dir.val_unt,\n" + + " (jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.qta_prod /\n" + + " jtb_cicl.rap_conv_prod),\n" + + " CONVERT(VARCHAR(4), 'VAL') AS qualificatore,\n" + + " CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" + + " NULL AS dati_listino\n" + + " FROM jtb_dist_clav_dir\n" + + " INNER JOIN jtb_cicl ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" + + " INNER JOIN gtb_spes ON jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes\n" + + " WHERE jtb_dist_clav_dir.cod_prod = (@codprod)\n" + + " AND gtb_spes.tipo_calcolo IN ('TRASPORTO PER KG', 'TRASPORTO PER COLLO', 'COMMERCIALI', 'LAVORAZIONE')\n" + + " AND jtb_dist_clav_dir.flag_fase_pref = 'S'\n" + + " UNION ALL\n" + + " SELECT 2,\n" + + " 5 AS group_categ,\n" + + " 21,\n" + + " NULL,\n" + + " 'COSTI DIRETTI COMMERCIALI E CONSEGNA',\n" + + " NULL,\n" + + " jtb_clav_ind.descrizione,\n" + + " NULL,\n" + + " NULL,\n" + + " NULL,\n" + + " NULL,\n" + + " jtb_dist_clav_ind.perc_cost,\n" + + " CONVERT(VARCHAR(4), 'PERC') AS qualificatore,\n" + + " jtb_clav_ind.tipo_calcolo AS tipo_calcolo,\n" + + " NULL AS dati_listino\n" + + " FROM jtb_dist_clav_ind\n" + + " INNER JOIN jtb_clav_ind ON jtb_clav_ind.cod_jcos_ind = jtb_dist_clav_ind.cod_jcos_ind\n" + + " WHERE jtb_dist_clav_ind.cod_prod = (@codprod)\n" + + " UNION ALL\n" + + " SELECT sort,\n" + + " group_categ,\n" + + " sort_categ,\n" + + " tipo_mgrp,\n" + + " categoria,\n" + + " cod_msgr,\n" + + " descr_costo,\n" + + " cod_mart,\n" + + " unt_mis,\n" + + " ROUND(qta_prod, 4) AS qta_prod,\n" + + " costo_unit,\n" + + " valore,\n" + + " qualificatore,\n" + + " tipo_calcolo,\n" + + " dati_listino\n" + + " FROM dbo.getSchedaCosti_DatiCommerciali(@codprod, @DataCosto, @codvlis) AS dati_commerciali\n" + + " UNION ALL\n" + + " SELECT 3,\n" + + " 6 AS group_categ,\n" + + " 31,\n" + + " NULL,\n" + + " 'COSTI INDIRETTI',\n" + + " NULL,\n" + + " 'COSTI GENERALI INCIDENZA A PERCENTUALE',\n" + + " jtb_cicl.cod_mart,\n" + + " NULL,\n" + + " NULL,\n" + + " NULL,\n" + + " ISNULL(jtb_cicl.perc_cost_gen, 0) AS perc_costi_gen,\n" + + " CONVERT(VARCHAR(4), 'PERC') AS qualificatore,\n" + + " CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" + + " NULL AS dati_listino\n" + + " FROM mtb_aart\n" + + " INNER JOIN jtb_cicl ON mtb_aart.cod_mart = jtb_cicl.cod_prod \n" + + " WHERE mtb_aart.cod_mart = (@codprod) \n" + + " )"); + } + } + + @Override + public void down() throws Exception { + + } + +}