Migrations funzione calcolo costo totale distinte

This commit is contained in:
2025-03-13 09:30:33 +01:00
parent e503116fca
commit 2a4e257344

View File

@@ -1,15 +1,732 @@
package it.integry.ems.migration.model;import it.integry.ems.migration._base.BaseMigration;
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_20250311105226 extends BaseMigration implements MigrationModelInterface{
public class Migration_20250311105226 extends BaseMigration implements MigrationModelInterface {
@Override
public void up()throws Exception {
if(isHistoryDB())
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createOrUpdateFunction("f_ExplodeDistProdCosti", "CREATE Function [dbo].[f_ExplodeDistProdCosti] ( @as_codPArent varchar(15), \n" +
" @as_codProd varchar(15), \n" +
" @ac_qtaProd decimal(20,5), \n" +
" @ai_idRiga integer, \n" +
" @ai_livello integer, \n" +
" @as_itemID varchar(1024), \n" +
" @as_tipoCalc varchar(1), \n" +
" @adt_data datetime,\n" +
" @as_flagIgnoraPRI varchar(1),\n" +
" @as_codProdPRI varchar(15), \n" +
" @ai_livelloPRI integer, \n" +
" @as_flagIgnoraChkLastProd varchar(1),\n" +
" @as_flagPRI varchar(1),\n" +
" @as_untMisProd varchar(3), \n" +
" @ac_rapConvProd decimal(20,10)) \n" +
"RETURNS @distinta TABLE(cod_parent varchar(15), \n" +
" cod_prod varchar(15), \n" +
" descrizione varchar(40), \n" +
" descrizione_estesa varchar(1024),\n" +
" unt_mis_prod varchar(3),\n" +
" rap_conv_prod decimal(20,10),\n" +
" qta_prod decimal(20,5), \n" +
" flag_foglia varchar(1), \n" +
" livello integer,\n" +
" item_id varchar(1024),\n" +
" costo_materiali decimal(20,5),\n" +
" costo_servizi decimal(20,5),\n" +
" costo_manodopera decimal(20,5),\n" +
" costo_manodopera_magaz decimal(20,5),\n" +
" costo_semilavorato decimal(20,5),\n" +
" tempo_lavoro decimal(20,5),\n" +
" risorse_umane decimal(20,5),\n" +
" flag_pri varchar(1),\n" +
" cod_prod_pri varchar(15), \n" +
" livello_pri integer,\n" +
" setup_time decimal(20,5),\n" +
" hr_time decimal(20,5),\n" +
" note_riga varchar(4096),\n" +
" data_ult_acq datetime,\n" +
" costo_ult_acq decimal(20,5)) AS\n" +
"BEGIN\n" +
" DECLARE \n" +
" @li_count INTEGER,\n" +
" @ls_descrizione varchar(40),\n" +
" @ls_descrizioneEstesa varchar(1024),\n" +
" @ls_untMisProd varchar(3), \n" +
" @lc_rapConvProd decimal(20,10),\n" +
" @li_flagFoglia integer,\n" +
" @li_livello integer, \n" +
" @ls_itemID varchar(1024), \n" +
" @lc_costoMateriali decimal(20,5), \n" +
" @lc_costoServizio decimal(20,5), \n" +
" @lc_costoServizioPerc decimal(20,5),\n" +
" @lc_costoManodopera decimal(20,5),\n" +
" @lc_costoManodoperaDir decimal(20,5),\n" +
" @lc_costoManodoperaMagaz decimal(20,5),\n" +
" @lc_tempoLav decimal(20,5), \n" +
" @lc_costoSemilavorato decimal(20,5),\n" +
" @li_countLavInterna integer,\n" +
" @li_countLavEsterna integer,\n" +
" @li_countLavInternaIniz integer,\n" +
" @li_countLavEsternaIniz integer,\n" +
" @lc_qtaProdDist decimal(20,5),\n" +
" @lc_rapporto decimal(20,5),\n" +
" @li_idRiga integer,\n" +
" @ls_codMate varchar(15),\n" +
" @ls_untMisMate varchar(3),\n" +
" @lc_qtaMate decimal(20,5),\n" +
" @ls_flagPRI varchar(1),\n" +
" @ls_flagPRIMate varchar(1),\n" +
" @lc_risorseUmane decimal(20,5),\n" +
" @ls_codProdPRI varchar(15),\n" +
" @li_livelloPRI integer,\n" +
" @ls_lastProdIsAcq varchar(1), \n" +
" @ls_gestione varchar(1),\n" +
" @lc_costo decimal(20,5),\n" +
" @lc_setupTime decimal(20,5),\n" +
" @lc_hrTime decimal(20,5),\n" +
" @li_hrTimePRI decimal(20,5),\n" +
" @lc_costoManodoperaPRI decimal(20,5),\n" +
" @li_lenItemID integer,\n" +
" @ls_itemIDPRI varchar(1024),\n" +
" @ls_codJfas varchar(5),\n" +
" @ls_codJfasChecked varchar(10),\n" +
" @ls_untMis varchar(3),\n" +
" @lc_rapConv decimal(20,10),\n" +
" @li_existFasiNoCheck int,\n" +
" @li_numOrd int,\n" +
" @ls_existProdEsterna varchar(1),\n" +
" @ldt_dataOrd datetime,\n" +
" @ls_elencoDocCheckCriterioProd varchar(1024),\n" +
" @ls_noteRiga varchar(4096),\n" +
" @ls_errMsg varchar(4096),\n" +
" @ldt_dataUltAcq datetime,\n" +
" @lc_costoUltAcq decimal(20,5), \n" +
" @ls_calcCostoRisorse varchar(1),\n" +
" @isMiscela bit;\n" +
" \n" +
" /*Inizializzazione variabili*/\n" +
" SELECT @li_lenItemID = 6;\n" +
" SELECT @li_livello = @ai_livello;\n" +
" SELECT @lc_costoMateriali = 0; \n" +
" SELECT @lc_costoServizio = 0; \n" +
" SELECT @lc_costoManodopera = 0;\n" +
" SELECT @lc_costoManodoperaMagaz = 0;\n" +
" SELECT @lc_costoSemilavorato = 0;\n" +
" SELECT @lc_tempoLav = 0;\n" +
" SELECT @li_countLavInterna = 0;\n" +
" SELECT @li_countLavEsterna = 0;\n" +
" SELECT @li_count = 0;\n" +
" SELECT @ls_lastProdIsAcq = 'N';\n" +
" SELECT @lc_setupTime = 0;\n" +
" SELECT @lc_hrTime = 0;\n" +
" SELECT @li_existFasiNoCheck = 0;\n" +
" SELECT @ls_existProdEsterna = 'N';\n" +
"\n" +
" /* Se il tipo calcolo è diverso da M = COSTO MEDIO, L = COSTO LISTINO allora si tratta di costo ultimo */\n" +
" IF @as_tipoCalc <> 'M' AND @as_tipoCalc <> 'L' \n" +
" SELECT @as_tipoCalc = 'U'\n" +
"\n" +
" \n" +
" /* Verifica se si tratta di una distinta base o di una materia prima*/\n" +
" SELECT @lc_qtaProdDist = round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5),\n" +
" @li_count = count(*),\n" +
" @li_countLavEsternaIniz = sum(CASE WHEN jtb_dist_clav_dir.cod_jfas is null AND gtb_spes.tipo_calcolo = 'LAVORAZIONE' THEN 1 ELSE 0 END),\n" +
" @li_countLavInternaIniz = sum(CASE WHEN jtb_dist_clav_dir.cod_jfas is not null OR ( jtb_dist_clav_dir.cod_jfas is null and gtb_spes.tipo_calcolo = 'MANO D OPERA') THEN 1 ELSE 0 END),\n" +
" @ls_codJfas = jtb_cicl.cod_jfas\n" +
" FROM jtb_cicl LEFT OUTER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" +
" LEFT OUTER join gtb_spes on jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes \n" +
" WHERE jtb_cicl.cod_prod = @as_CodProd\n" +
" GROUP BY jtb_cicl.qta_prod,\n" +
" jtb_cicl.rap_conv_prod,\n" +
" jtb_cicl.cod_jfas;\n" +
"\n" +
" SELECT @isMiscela = Cast(count(*) as BIT)\n" +
" from dbo.ParseStringIntoArray((select dbo.getGestSetup('DTB_DOCT','MOVIMENTAZIONE_OLIO','COD_MART_MISCELA')), '|')\n" +
" WHERE value_string = @as_codProd\n" +
" \n" +
" SELECT @li_countLavEsterna = @li_countLavEsternaIniz;\n" +
" SELECT @li_countLavInterna = @li_countLavInternaIniz;\n" +
" SELECT @ls_codJfasChecked = '|' + @ls_codJfas + '|';\n" +
"\n" +
" /* Acquisizione elenco documenti su cui effettuare eventualmente la verifica sul criterio \n" +
" produttivo direttamente da ordine se la distinta prevede solo lavorazione esterna*/\n" +
" SELECT @ls_elencoDocCheckCriterioProd = value\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'TIPO_DOC_CHECK_CRITERIO_PROD';\n" +
"\n" +
" /* Verifica esistenza gestione risorse nel calcolo del costo di prodotto */\n" +
" SELECT @ls_calcCostoRisorse = value\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'GESTISTI_RISORSE_IN_CALC_COSTO';\n" +
"\n" +
" /* Verifica esistenza fasi di cui acquisire direttamente acquisto e servizio*/\n" +
" SELECT @li_existFasiNoCheck = COUNT(*)\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'FASI_DA_NON_VERIFICARE' AND\n" +
" CHARINDEX(@ls_codJfasChecked, value) <> 0; \n" +
" \n" +
" if @li_count > 0 AND @isMiscela = 0 AND IsNull(@as_codPArent, '') <> @as_codProd\n" +
" begin\n" +
" SELECT @li_flagFoglia = 0;\n" +
" if (@lc_qtaProdDist != 0 )\n" +
" SELECT @lc_rapporto = round(@ac_qtaProd / @lc_qtaProdDist, 5);\n" +
" else\n" +
" SELECT @lc_rapporto = 0;\n" +
" \n" +
" SELECT @lc_risorseUmane = 0;\n" +
" \n" +
" /**********************************************************************************\n" +
" Acquizione dati distinta base prodotto\n" +
" Se il paramentro ai_idRiga = null allora vuol dire che si tratta della distinta \n" +
" padre in tal caso i dati anagrafici dovranno essere presi direttamente dalla \n" +
" distinta padre, altrimenti dovranno essere presi dalla riga della distinta base\n" +
" **********************************************************************************/\n" +
" if @ai_idRiga is null\n" +
" begin\n" +
" SELECT @ls_flagPRI = 'N';\n" +
" SELECT @ls_itemID = '00001';\n" +
" SELECT @ls_descrizione = descrizione_prod, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_prod, \n" +
" @lc_rapConvProd = rap_conv_prod\n" +
" FROM jtb_cicl\n" +
" WHERE cod_prod = @as_CodProd;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_itemID = @as_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @ai_idRiga))) + CONVERT(varchar(15), @ai_idRiga);\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_dist, \n" +
" @lc_rapConvProd = rap_conv_dist,\n" +
" @ls_flagPRI = flag_pri\n" +
" FROM jtb_dist_mate\n" +
" WHERE cod_prod = @as_CodParent and\n" +
" id_riga = @ai_idRiga;\n" +
" \n" +
" /*Se non restituisce nessun dato allora i dati devono essere presei da jtb_cicl e qta e rap_conv da parametri passati*/ \n" +
" if @ls_descrizione is null\n" +
" begin\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = @as_untMisProd, \n" +
" @lc_rapConvProd = @ac_rapConvProd,\n" +
" @ls_flagPRI = 'N'\n" +
" FROM jtb_cicl\n" +
" WHERE cod_prod = @as_CodParent;\n" +
" end\n" +
" end\n" +
" \n" +
" /**************************************************************************\n" +
" Se si tratta di una fase particolare allora viene presa in considerazione\n" +
" la lavorazione esterna direttamente \n" +
" ***************************************************************************/\n" +
" if (@li_existFasiNoCheck <> 0)\n" +
" begin\n" +
" SELECT @li_countLavEsterna = 1;\n" +
" SELECT @li_countLavInterna = 0;\n" +
" end\n" +
" \n" +
" /**********************************************************************\n" +
" Acquisizione eventuali servizi associati alla distinta (num_fase = 0), \n" +
" se c'è una lavorazioni interne allora viene privileggiata quest'ultima\n" +
" in caso contrario se c'è una lavorazione esterna viene presa questa\n" +
" **********************************************************************/\n" +
" if @li_countLavEsterna <> 0 \n" +
" begin\n" +
" if @as_flagIgnoraChkLastProd = 'N' \n" +
" begin\n" +
" SELECT @ls_gestione = ISNULL(gestione,'L'), @lc_costo = ISNULL(costo, 0)\n" +
" FROM dbo.GetCostoTipoUltLavProd(@as_codProd, @adt_data); \n" +
" if @ls_gestione = 'L'\n" +
" begin\n" +
" /*SOLO SERVIZIO DI LAVORAZIONE*/\n" +
" SELECT @lc_costoServizio = round(@lc_costo * @ac_qtaProd, 5);\n" +
" SELECT @ls_lastProdIsAcq = 'N';\n" +
" end\n" +
" else\n" +
" begin\n" +
" /*PRODOTTO ACQUISTATO*/\n" +
" SELECT @lc_costoServizio = 0;\n" +
" SELECT @lc_costoMateriali = round(@lc_costo * @ac_qtaProd, 5);\n" +
" SELECT @ls_lastProdIsAcq = 'S';\n" +
" end\n" +
" end \n" +
" else \n" +
" begin\n" +
" if (@li_countLavEsterna <> 0 and @li_countLavInterna <> 0)\n" +
" select @lc_costoServizio = dbo.f_getCostoServizi(@as_codProd, @adt_data)\n" +
" else\n" +
" select @lc_costoServizio = 0\n" +
" end\n" +
"\n" +
" /*Se il costo servizi è uguale a zero allora viene letto il costo dalla distinta se presente*/ \n" +
" IF @lc_costoServizio = 0 --AND @ls_lastProdIsAcq = 'N'\n" +
" begin\n" +
" SELECT @lc_costoServizio = round(sum(jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.cambio_divi_cont)/jtb_cicl.qta_prod/jtb_cicl.rap_conv_prod * @ac_qtaProd, 5) \n" +
" FROM jtb_dist_clav_dir, \n" +
" jtb_cicl, gtb_spes\n" +
" WHERE jtb_cicl.cod_prod = @as_CodProd AND\n" +
" gtb_spes.tipo_calcolo IN ('LAVORAZIONE', 'LAVORAZIONE INDI', 'MATERIALI') AND\n" +
" jtb_dist_clav_dir.num_fase = 0 AND\n" +
" jtb_dist_clav_dir.cod_prod = jtb_cicl.cod_prod AND\n" +
" jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes AND\n" +
" jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.qta_prod, jtb_cicl.rap_conv_prod; \n" +
" end \n" +
"\n" +
" \n" +
" /**********************************************************************\n" +
" Se si tratta di una fase particolare perÃÆÃ² non c'è stata alcuna \n" +
" produzione esterna allora ritorna la logica iniziale della lavorazione interna\n" +
" **********************************************************************/\n" +
" if (@li_existFasiNoCheck <> 0) and @ls_lastProdIsAcq = 'N'\n" +
" begin\n" +
" SELECT @li_countLavEsterna = @li_countLavEsternaIniz;\n" +
" SELECT @li_countLavInterna = @li_countLavInternaIniz;\n" +
" end\n" +
" \n" +
" end\n" +
" /*********************************************************************************/\n" +
" /* Acquisizione eventuali attivitÃÆÃ  assoicate alla distinta (num_fae <> 0) */\n" +
" /* il costo della manodopera viene distinto tra costo di magazzino, relativo */ \n" +
" /* a prodotti realizzati a magazzino e prodotti realizzati per commessa */\n" +
" /*********************************************************************************/\n" +
" if (@li_countLavInterna <> 0) \n" +
" begin\n" +
" \n" +
" SELECT @lc_costoManodopera = CASE WHEN ISNULL(jtb_cicl.flag_tipo_prod, '') <> 'S' THEN ISNULL(sum(ISNULL(hr_time, 0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))/ 3600 * jtb_dist_clav_dir.val_unt ),0) ELSE 0 END ,\n" +
" @lc_costoManodoperaMagaz = CASE WHEN ISNULL(jtb_cicl.flag_tipo_prod, '') = 'S' THEN ISNULL(sum(ISNULL(hr_time, 0)*(round( @ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))/ 3600 * jtb_dist_clav_dir.val_unt ),0) ELSE 0 END ,\n" +
" @lc_tempoLav = ISNULL(sum(ISNULL(setup_time,0) + (ISNULL(hr_time,0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5)))),0) ,\n" +
" @lc_risorseUmane = ISNULL(sum(ISNULL(hr_num, 0)),0) ,\n" +
" @lc_setupTime = sum(ISNULL(setup_time,0)) ,\n" +
" @lc_hrTime = sum(ISNULL(hr_time,0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))) \n" +
" FROM jtb_cicl INNER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" +
" WHERE jtb_dist_clav_dir.cod_prod = @as_CodProd \n" +
" AND jtb_dist_clav_dir.cod_jfas is not null\n" +
" AND jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.flag_tipo_prod;\n" +
"\n" +
" /*Aggiunta manodopera come costo a valore */\n" +
" SELECT @lc_costoManodoperaDir = Isnull(round(sum(jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.cambio_divi_cont)/jtb_cicl.qta_prod/jtb_cicl.rap_conv_prod * @ac_qtaProd, 5) , 0) \n" +
" FROM jtb_cicl INNER JOIN jtb_dist_clav_dir 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 = @as_CodProd \n" +
" AND jtb_dist_clav_dir.cod_jfas is null and gtb_spes.tipo_calcolo = 'MANO D OPERA' \n" +
" AND jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.qta_prod, jtb_cicl.rap_conv_prod;\n" +
"\n" +
" SET @lc_costoManodopera = @lc_costoManodopera + @lc_costoManodoperaDir;\n" +
" \n" +
" /*\n" +
" SELECT @lc_costoManodopera = costo_mdo,\n" +
" @lc_costoManodoperaMagaz = costo_mdo_magaz,\n" +
" @lc_tempoLav = tempo_lav,\n" +
" @lc_risorseUmane = num_risorse,\n" +
" @lc_setupTime = tempo_setup,\n" +
" @lc_hrTime = tempo_uomo\n" +
" from dbo.getDatiMDODistinta(@as_CodProd, @ac_qtaProd);\n" +
" */\n" +
"\n" +
" end \n" +
"\n" +
" /*Calcolo costi a percentuale */\n" +
" SELECT @lc_costoServizioPerc = round( CASE jtb_clav_ind.tipo_calcolo \n" +
" WHEN 'M' THEN \n" +
" @lc_costoMateriali\n" +
" WHEN 'D' THEN \n" +
" @lc_costoMateriali + @lc_costoManodopera + @lc_costoServizio\n" +
" END * jtb_dist_clav_ind.perc_cost / 100, 5) \n" +
" FROM jtb_dist_clav_ind, jtb_clav_ind\n" +
" WHERE jtb_dist_clav_ind.cod_prod = @as_CodProd AND \n" +
" tipo_costo in ( 'MATERIALI', 'LAVORAZIONE','LAVORAZIONE INDI') AND \n" +
" jtb_dist_clav_ind.cod_jcos_ind = jtb_clav_ind.cod_jcos_ind\n" +
"\n" +
" IF @lc_costoServizioPerc > 0\n" +
" begin \n" +
" set @lc_costoServizio = @lc_costoServizio + @lc_costoServizioPerc\n" +
" end\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' \n" +
" SELECT @ls_flagPRI = 'N';\n" +
" \n" +
" /*Inserimento prodotto padre */\n" +
" insert into @distinta values(@as_codParent, \n" +
" @as_codProd, \n" +
" @ls_descrizione,\n" +
" @ls_descrizioneEstesa,\n" +
" @ls_untMisProd, \n" +
" @lc_rapConvProd,\n" +
" @ac_qtaProd, \n" +
" @li_flagFoglia,\n" +
" @li_livello, \n" +
" @ls_itemID, \n" +
" @lc_costoMateriali, \n" +
" @lc_costoServizio, \n" +
" @lc_costoManodopera, \n" +
" @lc_costoManodoperaMagaz,\n" +
" @lc_costoSemilavorato,\n" +
" @lc_tempoLav,\n" +
" @lc_risorseUmane, \n" +
" @ls_flagPRI,\n" +
" @as_codProdPRI, \n" +
" @ai_livelloPRI,\n" +
" @lc_setupTime, \n" +
" @lc_hrTime, \n" +
" null,\n" +
" null,\n" +
" null);\n" +
" \n" +
" if @ls_lastProdIsAcq = 'N' OR @as_flagIgnoraChkLastProd = 'S' OR (@li_countLavEsterna <> 0 and @li_countLavInterna = 0 and @ls_lastProdIsAcq = 'N')\n" +
" begin\n" +
" /*Se il semilavorato ha la sola lavorazione esterna allora è necessario acquisire il criterio \n" +
" produttivo direttamente dall'ultima produzione fatta per il semilavorato in questione se il tipo \n" +
" documento è tra quelli su cui effettare tale controllo*/\n" +
" if @li_countLavEsterna <> 0 and @li_countLavInterna = 0\n" +
" begin\n" +
" /*Acquisizione ultima produzione esterna effettuata*/\n" +
" select @li_numOrd = null;\n" +
" select TOP 1 @ls_gestione = dtb_tipi.gestione, \n" +
" @ldt_dataOrd = dtb_docr.data_ord,\n" +
" @li_numOrd = dtb_docr.num_ord\n" +
" from dtb_docr, \n" +
" dtb_tipi \n" +
" where cod_mart = @as_CodProd and\n" +
" dtb_docr.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.segno_qta_car = 1 and\n" +
" dtb_tipi.gestione = 'L' and\n" +
" dtb_tipi.tipo_emissione = 'DIRETTA' and\n" +
" dtb_docr.data_doc <= @adt_data and \n" +
" CHARINDEX('|' + dtb_docr.cod_dtip + '|', @ls_elencoDocCheckCriterioProd) <> 0\n" +
" order by data_doc desc, num_doc desc\n" +
" \n" +
" if @li_numOrd is not null\n" +
" begin\n" +
" /*Acquisizione criterio produttivo ultima produzione esterna */\n" +
" select @ls_existProdEsterna = 'S';\n" +
" Declare csr_righeDist Cursor LOCAL SCROLL FOR\n" +
" select ROW_NUMBER() over (partition by dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord order by dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord) * 1000 as id_riga, \n" +
" dtb_ordr.cod_mart,\n" +
" (dtb_ordr.qta_ord * dtb_ordr.rap_conv / dtb_ordt.qta_prod) * @lc_rapporto as qta,\n" +
" 'N' as flag_pri,\n" +
" unt_ord, \n" +
" rap_conv\n" +
" from dtb_ordr, \n" +
" dtb_ordt\n" +
" where dtb_ordr.gestione = @ls_gestione and\n" +
" dtb_ordr.data_ord = @ldt_dataOrd and\n" +
" dtb_ordr.num_ord = @li_numOrd and\n" +
" dtb_ordt.gestione = dtb_ordr.gestione and\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord and\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord and\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordr.flag_evaso <> 'A';\n" +
" end\n" +
" end\n" +
" \n" +
" if @ls_existProdEsterna = 'N'\n" +
" begin\n" +
" /*Acquisizione righe distinte*/\n" +
" Declare csr_righeDist Cursor LOCAL SCROLL FOR\n" +
" SELECT jtb_dist_mate.id_riga,\n" +
" jtb_dist_mate.cod_mart, \n" +
" jtb_dist_mate.qta_std * jtb_dist_mate.rap_conv_dist * @lc_rapporto * (1 + jtb_dist_mate.perc_sfrido/100),\n" +
" jtb_dist_mate.flag_pri, \n" +
" jtb_dist_mate.unt_mis_dist,\n" +
" jtb_dist_mate.rap_conv_dist\n" +
" FROM jtb_dist_mate\n" +
" WHERE jtb_dist_mate.cod_prod = @as_codProd \n" +
" end\n" +
" \n" +
" OPEN csr_righeDist\n" +
" FETCH NEXT FROM csr_righeDist INTO @li_idRiga, @ls_codMate, @lc_qtaMate, @ls_flagPRIMate, @ls_untMis, @lc_rapConv\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" /*Solo se non si tratta di produzione inscinbile oppure si è deciso di ignnorare \n" +
" la produzione inscindibile allora il livello deve essere incrementato */\n" +
" --if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" if @ls_flagPRI = 'N' or @as_flagIgnoraPRI = 'S'\n" +
" SELECT @li_livello = @ai_livello + 1;\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codParent; /*@as_codProd*/\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" else\n" +
" begin\n" +
" IF @as_codProdPRI IS NOT NULL\n" +
" BEGIN\n" +
" if @as_flagPRI = 'S' AND @ls_flagPRIMate = 'S'\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProdPRI;\n" +
" SELECT @li_livelloPRI = @ai_livelloPRI;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProd;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" END \n" +
" ELSE\n" +
" BEGIN\n" +
" SELECT @ls_codProdPRI = @as_codProd;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" END\n" +
" end \n" +
" \n" +
" /*Invocazione funzione ricorsiva*/ \n" +
" INSERT INTO @distinta \n" +
" SELECT dist.cod_parent, \n" +
" dist.cod_prod, \n" +
" dist.descrizione, \n" +
" dist.descrizione_estesa,\n" +
" dist.unt_mis_prod,\n" +
" dist.rap_conv_prod,\n" +
" dist.qta_prod, \n" +
" dist.flag_foglia,\n" +
" dist.livello,\n" +
" dist.item_id,\n" +
" dist.costo_materiali,\n" +
" dist.costo_servizi,\n" +
" dist.costo_manodopera, \n" +
" dist.costo_manodopera_magaz,\n" +
" dist.costo_semilavorato,\n" +
" dist.tempo_lavoro, \n" +
" dist.risorse_umane,\n" +
" dist.flag_pri,\n" +
" dist.cod_prod_pri, \n" +
" dist.livello_pri,\n" +
" dist.setup_time, \n" +
" dist.hr_time,\n" +
" dist.note_riga,\n" +
" dist.data_ult_acq,\n" +
" dist.costo_ult_acq\n" +
" FROM dbo.f_explodeDistProdCosti(@as_codProd,@ls_codMate, @lc_qtaMate, @li_idRiga, @li_livello, @ls_itemID, @as_tipoCalc, @adt_data, @as_flagIgnoraPRI, @ls_codProdPRI, @li_livelloPRI, @as_flagIgnoraChkLastProd, @ls_flagPRIMate, @ls_untMis, @lc_rapConv ) dist\n" +
" \n" +
" /*Calcolo costo semilavorato*/\n" +
" SELECT @lc_costoSemilavorato = 0;\n" +
" if @as_flagPRI = 'S' AND @as_flagIgnoraPRI = 'N'\n" +
" begin\n" +
" SELECT @lc_costoSemilavorato = sum(ISNULL(costo_materiali, 0) + ISNULL(costo_servizi, 0))\n" +
" FROM @distinta\n" +
" WHERE item_id like @ls_itemID + '%' AND\n" +
" livello = @li_livello AND\n" +
" ISNULL(cod_parent,'') <> ISNULL(cod_prod, '');\n" +
" \n" +
" end\n" +
" else \n" +
" begin\n" +
" SELECT @lc_costoSemilavorato = sum(ISNULL(costo_materiali, 0) + ISNULL(costo_servizi, 0) + ISNULL(costo_manodopera, 0) + ISNULL(costo_manodopera_magaz, 0) + ISNULL(costo_semilavorato, 0))\n" +
" FROM @distinta\n" +
" WHERE item_id like @ls_itemID + '%' AND\n" +
" livello = @li_livello AND\n" +
" ISNULL(cod_parent,'') <> ISNULL(cod_prod, '');\n" +
" end \n" +
" \n" +
" /*Aggiornamento costo semilavorato*/ \n" +
" UPDATE @distinta\n" +
" SET costo_semilavorato = @lc_costoSemilavorato\n" +
" WHERE item_id = @ls_itemID AND\n" +
" livello = @li_livello -1 /*AND\n" +
" flag_pri = 'N'*/;\n" +
" IF @@ERROR <> 0 \n" +
" SELECT @ls_errMsg = ERROR_MESSAGE(); \n" +
" \n" +
" \n" +
" /* Aggiornamento codice padre materiali semilavorato inscindibile */\n" +
" if @ls_flagPRIMate = 'S' and @as_flagIgnoraPRI = 'N'\n" +
" UPDATE @distinta \n" +
" SET cod_parent = @as_codProd\n" +
" WHERE item_id like @ls_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @li_idRiga))) + CONVERT(varchar(15), @li_idRiga) + '_%' AND\n" +
" livello = @li_livello; \n" +
" IF @@ERROR <> 0 \n" +
" SELECT @ls_errMsg = ERROR_MESSAGE(); \n" +
" \n" +
"\n" +
" FETCH NEXT FROM csr_righeDist INTO @li_idRiga, @ls_codMate, @lc_qtaMate, @ls_flagPRIMate, @ls_untMis, @lc_rapConv\n" +
" END\n" +
" close csr_righeDist\n" +
" deallocate csr_righeDist\n" +
" \n" +
" if @as_codPArent is null and @as_flagIgnoraPRI = 'N'\n" +
" begin\n" +
" Declare csr_dist_pri Cursor LOCAL SCROLL FOR\n" +
" SELECT cod_prod_pri, \n" +
" livello_pri,\n" +
" item_id,\n" +
" sum(costo_servizi),\n" +
" sum(tempo_lavoro),\n" +
" sum(risorse_umane),\n" +
" sum(costo_manodopera),\n" +
" sum(costo_manodopera_magaz),\n" +
" sum(setup_time), \n" +
" sum(hr_time)\n" +
" FROM @distinta\n" +
" WHERE flag_pri = 'S' \n" +
" GROUP BY cod_prod_pri, \n" +
" livello_pri,\n" +
" item_id;\n" +
" \n" +
" OPEN csr_dist_pri\n" +
" FETCH NEXT FROM csr_dist_pri INTO @ls_codProdPRI, @li_livelloPRI, @ls_itemIDPRI, @lc_costoServizio, @lc_tempoLav, @lc_risorseUmane, @lc_costoManodopera, @lc_costoManodoperaMagaz, @lc_setupTime, @lc_hrTime\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" UPDATE @distinta\n" +
" SET costo_semilavorato = costo_semilavorato - @lc_costoManodopera,\n" +
" costo_servizi = costo_servizi + @lc_costoServizio,\n" +
" tempo_lavoro = tempo_lavoro + @lc_tempoLav, \n" +
" risorse_umane = risorse_umane + @lc_risorseUmane,\n" +
" costo_manodopera = costo_manodopera + @lc_costoManodopera,\n" +
" costo_manodopera_magaz = costo_manodopera_magaz + @lc_costoManodoperaMagaz,\n" +
" setup_time = setup_time + @lc_setupTime,\n" +
" hr_time = hr_time + @lc_hrTime\n" +
" FROM @distinta\n" +
" WHERE cod_prod = @ls_codProdPRI and\n" +
" livello = @li_livelloPRI and\n" +
" item_id like left(@ls_itemIDPRI, @li_livelloPRI * @li_lenItemID - 1) + '%';\n" +
" \n" +
" FETCH NEXT FROM csr_dist_pri INTO @ls_codProdPRI, @li_livelloPRI, @ls_itemIDPRI, @lc_costoServizio, @lc_tempoLav, @lc_risorseUmane, @lc_costoManodopera, @lc_costoManodoperaMagaz, @lc_setupTime, @lc_hrTime\n" +
" END\n" +
" close csr_dist_pri\n" +
" deallocate csr_dist_pri\n" +
" \n" +
" DELETE FROM @distinta\n" +
" WHERE flag_pri = 'S';\n" +
" end\n" +
" end\n" +
" end\n" +
" else\n" +
" begin\n" +
" /*Inizializzazione variabili*/\n" +
" SELECT @li_flagFoglia = 1;\n" +
" IF @as_tipoCalc = 'U'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.costo,mtb_aart.val_ult_car) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = costo.data_ult_car, \n" +
" @lc_costoUltAcq = costo.costo\n" +
" FROM (\n" +
" SELECT costoUlt.data_ult_car, \n" +
" costoUlt.costo\n" +
" FROM dbo.GetCostoUltArt(@as_codProd, @adt_data) costoUlt\n" +
" WHERE @isMiscela = 0\n" +
" UNION ALL\n" +
" SELECT null as data_ult_car, jtb_dist_mate.costo_unt\n" +
" FROM jtb_dist_mate\n" +
" where jtb_dist_mate.cod_mart = @as_codProd AND \n" +
" jtb_dist_mate.cod_prod = @as_codPArent AND\n" +
" @isMiscela = 1\n" +
" ) costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END \n" +
" ELSE IF @as_tipoCalc = 'M'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.costoMed,0) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = null, \n" +
" @lc_costoUltAcq = null\n" +
" FROM (\n" +
" SELECT dbo.f_GetCostoMedio(@adt_data, null, @as_codProd) costoMed) costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END \n" +
" ELSE IF @as_tipoCalc = 'L'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.prz_acq,0) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = null,\n" +
" @lc_costoUltAcq = null\n" +
" FROM ( select prz_acq from getListinoAcquisto(@adt_data, null, null, @as_codProd, 'S',null)costoList\n" +
" where flag_forn_pref = 'S') costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END\n" +
"\n" +
"\n" +
" SELECT @ls_itemID = @as_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @ai_idRiga))) + CONVERT(varchar(15), @ai_idRiga);\n" +
" \n" +
" /*Acquisizione dati materia prima */\n" +
" SELECT @ls_noteRiga = null;\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_dist, \n" +
" @lc_rapConvProd = rap_conv_dist, \n" +
" @ls_flagPRIMate = flag_pri,\n" +
" @ls_noteRiga = note\n" +
" FROM jtb_dist_mate\n" +
" WHERE cod_prod = @as_CodParent and\n" +
" id_riga = @ai_idRiga;\n" +
" \n" +
" /* Se non viene trovata la materia prima allora vuol dire che il padre è stata prodotto esternamente oppore \n" +
" è stato incluso in una produzione esterna e quindi bisognerÃÆÃ  acquisire le informazioni da anagrafica articolo */\n" +
" if @ls_descrizione is null\n" +
" begin\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = @as_untMisProd, \n" +
" @lc_rapConvProd = @ac_rapConvProd, \n" +
" @ls_flagPRIMate = 'N'\n" +
" FROM mtb_aart\n" +
" WHERE cod_mart = @as_CodProd;\n" +
" end\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" begin\n" +
" SELECT @ls_flagPRI = 'N';\n" +
" SELECT @ls_codProdPRI = @as_codParent;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProdPRI;\n" +
" SELECT @li_livelloPRI = @ai_livelloPRI;\n" +
" end \n" +
" \n" +
" /*Inserimento materia prima */ \n" +
" insert into @distinta values(@as_codParent, \n" +
" @as_codProd, \n" +
" @ls_descrizione,\n" +
" @ls_descrizioneEstesa,\n" +
" @ls_untMisProd, \n" +
" @lc_rapConvProd,\n" +
" @ac_qtaProd, \n" +
" @li_flagFoglia,\n" +
" @li_livello, \n" +
" @ls_itemID, \n" +
" @lc_costoMateriali, \n" +
" 0, \n" +
" 0, \n" +
" 0,\n" +
" 0,\n" +
" 0, \n" +
" 0,\n" +
" @ls_flagPRIMate, \n" +
" @ls_codProdPRI,\n" +
" @li_livelloPRI, \n" +
" 0,\n" +
" 0,\n" +
" @ls_noteRiga,\n" +
" @ldt_dataUltAcq,\n" +
" @lc_costoUltAcq);\n" +
" end\n" +
" return \n" +
"END ");
}
@Override
public void down()throws Exception {
public void down() throws Exception {
}
}