From b2e69977e69f93e8d0daf3fad7f29384d72409ef Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 29 Sep 2014 11:17:05 +0200 Subject: [PATCH] Aggiunto deploy x C2P_Report su DEMO... --- C2P/bin/NLog.dll | Bin 439808 -> 431616 bytes C2P_Project/bin/Output/C2P_DB.dacpac | Bin 0 -> 149772 bytes C2P_Project/bin/Output/C2P_DB_Create.sql | 20306 ++++++++++++++++ C2P_Project/bin/Output/C2P_Project.dll | Bin 0 -> 3584 bytes C2P_Report/C2P_Report.csproj | 4 + .../Properties/PublishProfiles/DEMO.pubxml | 40 + C2P_Report/Reports/ReportOffers_Q.rdlc | 2 +- C2P_Report/Reports/ReportOffers_S.rdlc | 2 +- C2P_Report/Web.DEMO.config | 38 + C2P_Report/bin/C2P_Report.dll | Bin 1582592 -> 1582592 bytes 10 files changed, 20390 insertions(+), 2 deletions(-) create mode 100644 C2P_Project/bin/Output/C2P_DB.dacpac create mode 100644 C2P_Project/bin/Output/C2P_DB_Create.sql create mode 100644 C2P_Project/bin/Output/C2P_Project.dll create mode 100644 C2P_Report/Properties/PublishProfiles/DEMO.pubxml create mode 100644 C2P_Report/Web.DEMO.config diff --git a/C2P/bin/NLog.dll b/C2P/bin/NLog.dll index 5a2f14520e962c345837899a703240f479f6a240..11a5469baef2392fcb26f3ad1451cd9e0bedc343 100644 GIT binary patch delta 162303 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 literal 439808 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
    Pyejz$QjXoDMBir<(l*Dhx? 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 z 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 diff --git a/C2P_Project/bin/Output/C2P_DB.dacpac b/C2P_Project/bin/Output/C2P_DB.dacpac new file mode 100644 index 0000000000000000000000000000000000000000..5728065bbab3316155ca86aa6c2b9cdc802e9432 GIT binary patch literal 149772 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 0) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @output = CodPackag + FROM Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + + RETURN @output + +END +GO +PRINT N'Creating [dbo].[f_padLeft]...'; + + +GO + +/*************************************** +* FUNCTION f_padLeft +* +* fornisce una stringa della lunghezza desiderata aggiungendo a sx il carattere richiesto alla @string originale +* +* Steamware, S.E.L. +* mod: 2010.03.19 +* +****************************************/ +CREATE FUNCTION [dbo].[f_padLeft] (@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1)) +RETURNS VARCHAR(255) AS +BEGIN + + -- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character + RETURN CASE + WHEN LEN(@string) < @desired_length + THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string + ELSE @string + END + +END +GO +PRINT N'Creating [dbo].[f_padRight]...'; + + +GO +/*************************************** +* FUNCTION f_padRight +* +* fornisce una stringa della lunghezza desiderata aggiungendo a sx il carattere richiesto alla @string originale +* +* Steamware, S.E.L. +* mod: 2010.03.19 +* +****************************************/ +CREATE FUNCTION [dbo].[f_padRight] (@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1)) +RETURNS VARCHAR(255) AS +BEGIN + + -- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character + RETURN CASE + WHEN LEN(@string) < @desired_length + THEN @string + REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + ELSE @string + END + +END +GO +PRINT N'Creating [dbo].[f_getSubstring]...'; + + +GO +-- ================================================================ +-- Author : Steamware +-- Create date: 2014-01-17 +-- +-- Description: Data una stringa con una serie di valori separati da un separatore ( es. ; ) +-- ritorna l'elemento nella posizione richiesta +-- +-- esempio : SELECT dbo.f_GetSubstring('asda-fff-bbb','-' , 2) +-- ================================================================ +CREATE FUNCTION [dbo].[f_getSubstring] +( + @str_in NVARCHAR(4000), @separator NVARCHAR(4)= '-', @PosizValue INT = 1 +) +RETURNS NVARCHAR(4000) +AS +BEGIN + + DECLARE @Occurrences INT, + @Counter INT, + @tmpStr NVARCHAR(4000), + @str_out NVARCHAR(4000) + + IF RIGHT(@str_in, DATALENGTH(@separator)/2 ) <> @separator + SET @str_out = @str_in + @separator ; + ELSE + SET @str_out = @str_in ; + + -- calcolo il numero di elementi della nella stringa + SET @Occurrences = ( (DATALENGTH( REPLACE(@str_out, @separator, @separator+'#')) - DATALENGTH(@str_out)) ) / 2 + + -- se l'elemento richiesto esiste proseguo altrimenti ritorno NULL + IF @Occurrences >= @PosizValue AND @PosizValue <> 0 + BEGIN + + SET @tmpStr = @str_out ; + SET @Counter = 1 ; + + WHILE @Counter <= @PosizValue + BEGIN + SET @Counter = @Counter + 1 ; + SET @str_out = SUBSTRING( @tmpStr, 1, CHARINDEX(@separator,@tmpStr) - 1) ; + -- metto via il resto della stringa + SET @tmpStr = SUBSTRING( @tmpStr, CHARINDEX(@separator,@tmpStr) + DATALENGTH(@separator)/2, 4000) ; + + IF DATALENGTH(@tmpStr) = 0 + BREAK + END + + -- pulisco da caratteri NON voluti + --SET @str_out = REPLACE(@str_out, char(13), '') ; -- carriage return + --SET @str_out = REPLACE(@str_out, char(10), '') ; -- line feed + --SET @str_out = REPLACE(@str_out, char(9), '') ; -- tab + --SET @str_out = LTRIM ( RTRIM (@str_out) ) ; -- blank + END + ELSE + SET @str_out = NULL ; + + RETURN @str_out + +END +GO +PRINT N'Creating [dbo].[f_getNewCodQuote]...'; + + +GO +-- ============================================= +-- Author: S.E.Locatelli +-- Create date: 2014.02.21 +-- Description: Retituisce un codice offerta valido da yyMMdd + incr +-- ============================================= +CREATE FUNCTION [dbo].[f_getNewCodQuote] +( +) +RETURNS INT +AS +BEGIN + + DECLARE @output INT + DECLARE @oggi DATETIME = GETDATE() + + + SELECT @output = ISNULL(MAX(CodQuote) + 1,CAST(RIGHT(YEAR(@oggi),2) AS NVARCHAR) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0')+'0001') + FROM QuoteList + WHERE codquote LIKE CAST(RIGHT(YEAR(@oggi),2) AS NVARCHAR) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0') + '%' + AND (QuoteType = 'Q' OR QuoteType = 'S') + + RETURN @output + + /* altra modalità (valutare...) + -- calcolo prox valori "free" x cod Quote (QuoteRev parte a zero...) + SELECT @CodQuote = ISNULL(CodQuote, 0) + FROM QuoteList + WHERE QuoteType = 'Q' + AND CodQuote LIKE dbo.fnFormatDate (getdate(), 'YYMMDD') +'%' + + -- se è vuoto prendo primo valore... + IF(@CodQuote = 0) + BEGIN + SELECT @CodQuote = dbo.fnFormatDate (getdate(), 'YYMMDD0000') + END + + + */ + + +END +GO +PRINT N'Creating [dbo].[fnFormatDate]...'; + + +GO +----------------------------------------------------------------------------- +-- SQL Server date formatting function – convert datetime to string +----------------------------------------------------------------------------- +-- SQL datetime functions +-- SQL Server date formats +-- T-SQL convert dates +-- Formatting dates sql server +CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32)) +RETURNS VARCHAR(32) +AS +BEGIN + DECLARE @StringDate VARCHAR(32) + SET @StringDate = @FormatMask + IF (CHARINDEX ('YYYY',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'YYYY', + DATENAME(YY, @Datetime)) + IF (CHARINDEX ('YY',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'YY', + RIGHT(DATENAME(YY, @Datetime),2)) + IF (CHARINDEX ('Month',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'Month', + DATENAME(MM, @Datetime)) + IF (CHARINDEX ('MON',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0) + SET @StringDate = REPLACE(@StringDate, 'MON', + LEFT(UPPER(DATENAME(MM, @Datetime)),3)) + IF (CHARINDEX ('Mon',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'Mon', + LEFT(DATENAME(MM, @Datetime),3)) + IF (CHARINDEX ('MM',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'MM', + RIGHT('0'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2)) + IF (CHARINDEX ('M',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'M', + CONVERT(VARCHAR,DATEPART(MM, @Datetime))) + IF (CHARINDEX ('DD',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'DD', + RIGHT('0'+DATENAME(DD, @Datetime),2)) + IF (CHARINDEX ('D',@StringDate) > 0) + SET @StringDate = REPLACE(@StringDate, 'D', + DATENAME(DD, @Datetime)) +RETURN @StringDate +END +GO +PRINT N'Creating [dbo].[f_prt_getParameter]...'; + + +GO +-- ============================================= +-- Author: G:A:R +-- Create date: +-- Description: estrazione valore del paramento passato +-- ============================================= +CREATE FUNCTION f_prt_getParameter +( + @par AS VARCHAR(50) + ,@val AS VARCHAR(50) + ,@endSepar AS VARCHAR(10) = '&' +) +RETURNS VARCHAR(50) +AS +BEGIN + + DECLARE @Result VARCHAR(50) + DECLARE @Inizio INT; + DECLARE @Fine INT; + + SET @par = '%'+ @par + '=%' -- '%QuoteType=%' + + --;WITH CTE AS + --( + -- SELECT *, ( PATINDEX(@campo , Chiave) + LEN(@campo) - 2 ) As Inizio , CHARINDEX ( '&' ,Chiave , PATINDEX(@campo , Chiave) ) As Fine + -- FROM dbo.ReportPrintTicket + -- WHERE Ticket = 1 AND PATINDEX(@campo , Chiave) > 0 + --) + + SET @Inizio = PATINDEX(@par , @val ) + + IF @Inizio > 0 + BEGIN + SET @Inizio = @Inizio + LEN(@par) - 2 + SET @Fine = CASE WHEN ( CHARINDEX ( @endSepar , @val , @Inizio ) ) = 0 + THEN LEN(@val) + ELSE CHARINDEX ( @endSepar , @val , @Inizio ) + END ; + + SELECT @Result = SUBSTRING( @val, @Inizio, @Fine-@Inizio ) + END + + RETURN @Result +END +GO +PRINT N'Creating [dbo].[f_getDataCodPackag]...'; + + +GO + + + + +-- ============================================= +-- Author: Steamware +-- Create date: 2014-01-30 +-- Description: Ritorna l'imballo e i dati associati ( sostituita da stored ma lasciata nel caso di query on-line ) +-- ============================================= +CREATE FUNCTION [dbo].[f_getDataCodPackag] +( + @CodItem NVARCHAR(50), + @CodClient NVARCHAR(50) +) +RETURNS +@Table TABLE +( + [CodItem] [nvarchar](50) NOT NULL, + [CodClient] [nvarchar](50) NOT NULL, + [CodPackag] [nvarchar](50) NOT NULL, + [TotQta] [decimal](18, 3) NOT NULL, + [Weight] [decimal](18, 6) NOT NULL, + [Tare] [decimal](18, 6) NOT NULL, + [NumImb] [decimal](9, 6) NOT NULL, + [Durata] [decimal](18, 6) NOT NULL, + [LivPackag] [nvarchar](50) NOT NULL, + [LivPackagDet] [nvarchar](50) NOT NULL +) +AS +BEGIN + + DECLARE @output NVARCHAR(50) + DECLARE @trovati INT = 0 + -- setup iniziale: imposto a zero... + SET @output = '0' + + -- SELECT @trovati = COUNT(*) FROM Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + --IF(@trovati > 0) + + IF EXISTS ( SELECT * FROM dbo.Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Client-Package', @CodItem + '-' + @CodClient + '-' + CodPackag + FROM dbo.Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE IF EXISTS ( SELECT * FROM Package2Item WHERE CodItem = @CodItem ) + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 CodItem, 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Item-Package', @CodItem + '-' + CodPackag + FROM dbo.Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + INSERT @Table + SELECT TOP 1 'ND', 'ND' AS CodClient , CodPackag, TotQta, Weight, Tare, NumImb, Durata + ,'Package', CodPackag + FROM dbo.Package2 WHERE CodPackag = 0 + END + + RETURN +END +GO +PRINT N'Creating [dbo].[v_selClient]...'; + + +GO +CREATE VIEW dbo.v_selClient +AS +SELECT CodClient AS value, CASE WHEN LEN(ClientName) > 40 THEN SUBSTRING(ClientName, 0, 40) + '...' ELSE ClientName END + ' [' + CodClient + ']' AS label +FROM dbo.ClientDet +WHERE (CodClient <> '') +GO +PRINT N'Creating [dbo].[v_selIncoterms]...'; + + +GO +CREATE VIEW dbo.v_selIncoterms +AS +SELECT CodInco AS value, CodInco + ' - ' + Descript AS label +FROM dbo.Incoterms +GO +PRINT N'Creating [dbo].[v_selCons]...'; + + +GO +CREATE VIEW dbo.v_selCons +AS +SELECT CodInco AS value, CodInco + ' - ' + Descript AS label +FROM dbo.Incoterms +GO +PRINT N'Creating [dbo].[v_selRawMat]...'; + + +GO + +CREATE VIEW dbo.v_selRawMat +AS +SELECT RawMat AS value, RawMat AS label +FROM dbo.RawMatDet +WHERE (RawMat <> '') +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q]...'; + + +GO +CREATE VIEW dbo.v_QuoteFull_Q +AS +SELECT Vers + , QuoteType + , CodQuote + , QuoteRev + , IdxQState + , CodClient + , ClientName + , CodItem + , CodItemGroup + , RawMat + , UnitWeight + , BatchQty + , CodInco + , TranspZone + , KeyAM + , Note + , PriceOff + , CodClientAssoc + , ClientNameAssoc + , ItemDescr + , CodifProfilo + , ClasseMerc + , TipoDies + , CodDiesGroup + , DiamDies + , HoleNumDies + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAMIL + , KgTeo + , NumSMED + , QuotaMan + , PRMWeight + , PWeight + , PTare + , LivPackage + , LivPackageDett + , RawMatCost + , RawMatExtraCost + , RawMatFullCost + , CodPackag + , PkgDesc + , FSR + , ProvvCost + , EECost + , GasCost + , DiesCost + , PackCost + , TranspCost + , SellCost01 + , RefCost01 + , SellCost04 + , RefCost04 + , WSR01 + , MSR01 + , NetProd01 + , FC4UG01 + , VC4UG01 + , OH4UG01 + , SC4UG01 + , DSR + , NetProd04 + , FC4UG04 + , VC4UG04 + , FVC + , Charge + , FVC + RawMatFullCost AS P_FVC + , FC4UG01 + OH4UG01 AS CPS + , FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS + , FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04 + , FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost + , FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) AS P_MinPrice + , PriceOff + RawMatFullCost AS P_PriceOff + , PriceOff - (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS NetMar + , CASE + WHEN (FC4UG01 + OH4UG01 + FC4UG04) = 0 + THEN 0 + ELSE (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) + END AS FCShield + , CASE + WHEN PWeight = 0 + THEN 0 + ELSE (PRMWeight - PTare) * (PriceOff + RawMatFullCost) / PWeight + END AS PckSur + , valid + , errorScore + , DiesPrice_sim + , SamplePrice + , DiesFullCost + , DiesPriceClientQuote + , DiesTecLife + , DiesCommLife + , MonthSalesPrev + , SalesPrevCost + , DiesFinCost + , ClientQuoteReven + , ExtraDiscountDies + , WSR01_sim + , MSR01_sim + , NetProd01_sim + , DSR_sim + , FVC + FC4UG01 + OH4UG01 + FC4UG04 - PriceOff - ExtraDiscountDies AS NetMar_sim + , (PriceOff - FVC - ExtraDiscountDies) / (FC4UG01 + OH4UG01 + FC4UG04) AS FCShield_sim + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) + ExtraDiscountDies AS MinPrice_sim + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) + ExtraDiscountDies AS P_MinPrice_sim +FROM dbo.QuoteFull_S + +UNION + +SELECT Vers + , QuoteType + , CodQuote + , QuoteRev + , IdxQState + , CodClient + , ClientName + , CodItem + , CodItemGroup + , RawMat + , UnitWeight + , BatchQty + , CodInco + , TranspZone + , KeyAM + , Note + , PriceOff + , CodClientAssoc + , ClientNameAssoc + , ItemDescr + , CodifProfilo + , ClasseMerc + , TipoDies + , CodDiesGroup + , DiamDies + , HoleNumDies + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAMIL + , KgTeo + , NumSMED + , QuotaMan + , PRMWeight + , PWeight + , PTare + , LivPackage + , LivPackageDett + , RawMatCost + , RawMatExtraCost + , RawMatFullCost + , CodPackag + , PkgDesc + , FSR + , ProvvCost + , EECost + , GasCost + , DiesCost + , PackCost + , TranspCost + , SellCost01 + , RefCost01 + , SellCost04 + , RefCost04 + , WSR01 + , MSR01 + , NetProd01 + , FC4UG01 + , VC4UG01 + , OH4UG01 + , SC4UG01 + , DSR + , NetProd04 + , FC4UG04 + , VC4UG04 + , FVC + , Charge + , FVC + RawMatFullCost AS P_FVC + , FC4UG01 + OH4UG01 AS CPS + , FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS + , FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04 + , FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost + , FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice + , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) AS P_MinPrice + , PriceOff + RawMatFullCost AS P_PriceOff + , PriceOff - (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS NetMar + , CASE + WHEN (FC4UG01 + OH4UG01 + FC4UG04) = 0 + THEN 0 + ELSE (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) + END AS FCShield + , CASE + WHEN PWeight = 0 + THEN 0 + ELSE (PRMWeight - PTare) * (PriceOff + RawMatFullCost) / PWeight + END AS PckSur + , valid + , errorScore + , 0.0 AS DiesPrice_sim + , 0.0 AS SamplePrice + , 0.0 AS DiesFullCost + , 0.0 AS DiesPriceClientQuote + , 0.0 AS DiesTecLife + , 0.0 AS DiesCommLife + , 0.0 AS MonthSalesPrev + , 0.0 AS SalesPrevCost + , 0.0 AS DiesFinCost + , 0.0 AS ClientQuoteReven + , 0.0 AS ExtraDiscountDies + , 0.0 AS WSR01_sim + , 0.0 AS MSR01_sim + , 0.0 AS NetProd01_sim + , 0.0 AS DSR_sim + , 0.0 AS NetMar_sim + , 0.0 AS FCShield_sim + , 0.0 AS MinPrice_sim + , 0.0 AS P_MinPrice_sim +FROM dbo.QuoteFull_Q +GO +PRINT N'Creating [dbo].[v_selItems]...'; + + +GO +CREATE VIEW dbo.v_selItems +AS +SELECT CodItem AS value, CodItem + ' - ' + ItemDescr AS label +FROM dbo.ItemDet +WHERE (CodItem <> '') +GO +PRINT N'Creating [dbo].[v_pivot]...'; + + +GO + +CREATE VIEW [dbo].[v_pivot] +AS + +WITH ctePivotQuoteP +AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Descr + , Parameter + FROM dbo.QuoteParam + ) AS SourceTable + + PIVOT(MIN(Parameter) FOR Descr IN ( + ItemDescr + , CodifProfilo + , ClasseMerc + , CodClientAssoc + , ClientNameAssoc + , CodDiesGroup + , TipoDies + , DiamDies + , HoleNumDies + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAM + , KeyAMIL + , NumSMED + , KgTeo + , KgProdotti + , QuotaMan + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , PkgDesc + , PRMWeight + , PWeight + , PTare + , TareStRatio + , LivPackage + , LivPackageDett + -- START nuovi campi x SIM + , DiesPrice_sim + , SamplePrice + , DiesFullCost + , DiesPriceClientQuote + , DiesTecLife + , DiesCommLife + , MonthSalesPrev + , SalesPrevCost + , DiesFinCost + , ClientQuoteReven + , ExtraDiscountDies + , WSR01_sim + , MSR01_sim + , NetProd01_sim + , DSR_sim + -- end nuovi campi x SIM + ) + ) AS PivotData +), +-- ================================================= +-- PIVOT TABELLA QuoteOC +-- ================================================= +ctePivotQuoteOC AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Class01 + ProcessNum AS ClassProc + , C4UG + FROM dbo.QuoteOC + ) AS SourceTable + PIVOT(SUM(C4UG) FOR ClassProc IN + ( EE01 + , GAS01 + , MATRICE01 + , VENDITA01 + , ROTTAME01 + , VENDITA04 + , ROTTAME04 + , IMBALLO04 + , TRASPORTI04 + , PROVVIGIONI04 + ) + ) AS PivotData +) +-- ================================================= +-- MAIN Select Tabella con INTO temp table +-- ================================================= +SELECT 'V14.1' AS Vers + , QL.QuoteType + , QL.CodQuote + , QL.QuoteRev + , QL.IdxQState + , QL.CodClient + , CD.ClientName + , QL.CodItem + , QL.CodItemGroup + , QL.RawMat + , QL.UnitWeight + , QL.BatchQty + , QL.CodInco + , CD.TranspZone + , QL.KeyAM + , QL.Note + , QL.PriceOff + , QL.OrdDate + , QL.OrdNum + , QL.OrdRow + , QL.OrdPrice + , QL.OrdQty + , pQP.CodClientAssoc + , pQP.ClientNameAssoc + , pQP.ItemDescr + , pQP.CodifProfilo + , pQP.ClasseMerc + , pQP.TipoDies + , pQP.CodDiesGroup + , CONVERT(DECIMAL(18,6),pQP.DiamDies) AS DiamDies + , CONVERT(INT,pQP.HoleNumDies) AS HoleNumDies + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPrice),0) AS DiesPrice + , CONVERT(DECIMAL(18,6),pQP.DiesExpLife) AS DiesExpLife + , CONVERT(DECIMAL(18,6),pQP.DiesEOLife) AS DiesEOLife + , CONVERT(BIT, ISNULL(pQP.DiesByClass,0)) AS DiesByClass + , CONVERT(DECIMAL(18,6),pQP.NumDiesInList) AS NumDiesInList + , CONVERT(DECIMAL(18,6),pQP.NumDiesExaust) AS NumDiesExaust + , pQP.CodPlant + , pQP.KeyAMIL + , CONVERT(DECIMAL(18,6),pQP.KgTeo) AS KgTeo + , CONVERT(DECIMAL(18,6),pQP.NumSMED) AS NumSMED + , CONVERT(DECIMAL(18,6),pQP.QuotaMan) AS QuotaMan + , CONVERT(DECIMAL(18,6),pQP.PRMWeight) AS PRMWeight + , CONVERT(DECIMAL(18,6),pQP.PWeight) AS PWeight + , CONVERT(DECIMAL(18,6),pQP.PTare) AS PTare + , pQP.LivPackage + , pQP.LivPackageDett + -- START nuovi campi x SIM + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPrice_sim),0) AS DiesPrice_sim + , ISNULL(CONVERT(DECIMAL(18,6),pQP.SamplePrice),0) AS SamplePrice + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesFullCost),0) AS DiesFullCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPriceClientQuote),0) AS DiesPriceClientQuote + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesTecLife),0) AS DiesTecLife + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesCommLife),1) AS DiesCommLife + , ISNULL(CONVERT(INT,pQP.MonthSalesPrev),0) AS MonthSalesPrev + , ISNULL(CONVERT(DECIMAL(18,6),pQP.SalesPrevCost),0) AS SalesPrevCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesFinCost),0) AS DiesFinCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.ClientQuoteReven),0) AS ClientQuoteReven + , ISNULL(CONVERT(DECIMAL(18,6),pQP.ExtraDiscountDies),0) AS ExtraDiscountDies + , ISNULL(CONVERT(DECIMAL(9,8),pQP.WSR01_sim),0) AS WSR01_sim + , ISNULL(CONVERT(DECIMAL(9,8),pQP.MSR01_sim),0) AS MSR01_sim + , ISNULL(CONVERT(DECIMAL(9,3),pQP.NetProd01_sim),0) AS NetProd01_sim + , ISNULL(CONVERT(DECIMAL(9,8),pQP.DSR_sim),0) AS DSR_sim + -- end nuovi campi x SIM + , QRM.RawMatCost + , QRM.RawMatExtraCost + , QRM.RawMatCost + QRM.RawMatExtraCost AS RawMatFullCost -- fare campo calcolato ?!? + , QRM.CodPackag + , pQP.PkgDesc + , QRM.FSR + , ISNULL(pQOC.PROVVIGIONI04, 0) AS ProvvCost + , ISNULL(pQOC.EE01, 0) AS EECost + , ISNULL(pQOC.GAS01, 0) AS GasCost + , ISNULL(pQOC.MATRICE01, 0) AS DiesCost + , ISNULL(pQOC.IMBALLO04, 0) AS PackCost + , ISNULL(pQOC.TRASPORTI04, 0) AS TranspCost + , ISNULL(pQOC.VENDITA01, 0) AS SellCost01 + , ISNULL(pQOC.ROTTAME01, 0) AS RefCost01 + , ISNULL(pQOC.VENDITA04, 0) AS SellCost04 + , ISNULL(pQOC.ROTTAME04, 0) AS RefCost04 + , QWI01.WSR AS WSR01 + , QWI01.MSR AS MSR01 + , QWI01.NetProd AS NetProd01 + , QWI01.FC4UG AS FC4UG01 + , QWI01.VC4UG AS VC4UG01 + , QWI01.OH4UG AS OH4UG01 + , QWI01.SC4UG AS SC4UG01 + , 1 - (QWI01.DYR * QWI02.DYR * QWI03.DYR * QWI04.DYR) AS DSR + , QWI04.NetProd AS NetProd04 + , QWI04.FC4UG AS FC4UG04 + , QWI04.VC4UG AS VC4UG04 + , ISNULL(pQOC.VENDITA01, 0) + ISNULL(pQOC.ROTTAME01, 0) + ISNULL(pQOC.VENDITA04, 0) + ISNULL(pQOC.ROTTAME04, 0) + ISNULL(pQOC.EE01, 0) + ISNULL(pQOC.GAS01, 0) + ISNULL(pQOC.MATRICE01, 0) + ISNULL(pQOC.IMBALLO04, 0) + ISNULL(pQOC.PROVVIGIONI04, 0) + ISNULL(pQOC.TRASPORTI04, 0) + QWI01.VC4UG + QWI04.VC4UG + QWI01.SC4UG AS FVC + , PD.Charge + , QL.valid + , QL.errorScore + +FROM dbo.QuoteList AS QL + +INNER JOIN dbo.ClientDet CD + ON QL.CodClient = CD.CodClient + +INNER JOIN ctePivotQuoteP AS pQP + ON QL.QuoteType = pQP.QuoteType + AND QL.CodQuote = pQP.CodQuote + AND QL.QuoteRev = pQP.QuoteRev + +INNER JOIN dbo.QuoteRM AS QRM + ON QL.QuoteType = QRM.QuoteType + AND QL.CodQuote = QRM.CodQuote + AND QL.QuoteRev = QRM.QuoteRev + AND QL.rawmat = QRM.RawMat + +INNER JOIN ctePivotQuoteOC AS pQOC + ON QL.QuoteType = pQOC.QuoteType + AND QL.CodQuote = pQOC.CodQuote + AND QL.QuoteRev = pQOC.QuoteRev + +INNER JOIN dbo.QuoteWorkInt AS QWI01 + ON QL.QuoteType = QWI01.QuoteType + AND QL.CodQuote = QWI01.CodQuote + AND QL.QuoteRev = QWI01.QuoteRev + AND QWI01.ProcessNum = '01' +INNER JOIN dbo.QuoteWorkInt AS QWI02 + ON QL.QuoteType = QWI02.QuoteType + AND QL.CodQuote = QWI02.CodQuote + AND QL.QuoteRev = QWI02.QuoteRev + AND QWI02.ProcessNum = '02' +INNER JOIN dbo.QuoteWorkInt AS QWI03 + ON QL.QuoteType = QWI03.QuoteType + AND QL.CodQuote = QWI03.CodQuote + AND QL.QuoteRev = QWI03.QuoteRev + AND QWI03.ProcessNum = '03' +INNER JOIN dbo.QuoteWorkInt AS QWI04 + ON QL.QuoteType = QWI04.QuoteType + AND QL.CodQuote = QWI04.CodQuote + AND QL.QuoteRev = QWI04.QuoteRev + AND QWI04.ProcessNum = '04' +INNER JOIN dbo.PlantsDet AS PD + ON PD.CodPlant = pQP.CodPlant +GO +PRINT N'Creating [dbo].[v_selDateStdCost]...'; + + +GO +CREATE VIEW dbo.v_selDateStdCost +AS +SELECT DISTINCT CONVERT(date, LEFT(CodQuote, 6)) AS label, LEFT(CodQuote, 6) AS value +FROM dbo.QuoteFull_C +GO +PRINT N'Creating [dbo].[v_selPackage]...'; + + +GO +CREATE VIEW dbo.v_selPackage +AS +SELECT CodPackag AS value, PackagDesc AS label +FROM dbo.PackagDet +GO +PRINT N'Creating [dbo].[v_selPlant]...'; + + +GO +CREATE VIEW dbo.v_selPlant +AS +SELECT CodPlant AS value, Descript AS label +FROM dbo.PlantsDet +GO +PRINT N'Creating [dbo].[v_StdCostList]...'; + + +GO +CREATE VIEW dbo.v_StdCostList +AS +SELECT LEFT(CodQuote, 6) AS DataRif, Class01, Class02, CodItem, RawMat, CodPlant, CodDiesGroup, CodPackag, batchQty, CodInco, RawMatFullCost, FVC, FullCost +FROM dbo.QuoteFull_C +GO +PRINT N'Creating [dbo].[v_listinoArticoli]...'; + + +GO +CREATE VIEW dbo.v_listinoArticoli +AS +SELECT DISTINCT + GETDATE() AS DataRif, 'C' AS QuoteType, '' AS CodClient, dbo.DiesDet.CodItem, CASE WHEN dbo.ProductionLog.RawMat = '' THEN '6060' ELSE dbo.ProductionLog.RawMat END AS RawMat, + 2.00 + dbo.RawMatDet.ExtraMatCost AS RawMatCost, 1000 AS batchQty, 'EXW' AS CodInco +FROM dbo.DiesDet INNER JOIN + dbo.ProductionLog ON dbo.DiesDet.CodDies = dbo.ProductionLog.CodDies INNER JOIN + dbo.RawMatDet ON dbo.ProductionLog.RawMat = dbo.RawMatDet.RawMat +GO +PRINT N'Creating [dbo].[v_MarginReport]...'; + + +GO + + +CREATE VIEW [dbo].[v_MarginReport] +AS +SELECT Vers, CodClient, CodItem, RawMat, BatchQty, CodInco, KeyAM, CodDiesGroup, DiesPrice, DiesExpLife, DiesEOLife, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, + QuotaMan, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, + RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, FVC + RawMatFullCost AS P_FVC, + FC4UG01 + OH4UG01 AS CPS, FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS, FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04, FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost, + FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost, Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice, Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) + AS P_MinPrice, PriceOff - (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS NetMar, CASE WHEN (FC4UG01 + OH4UG01 + FC4UG04) = 0 THEN 0 ELSE (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) + END AS FCShield, CASE WHEN PWeight = 0 THEN 0 ELSE (PRMWeight - PTare) * (PriceOff + RawMatFullCost) / PWeight END AS PckSur, valid, errorScore, OrdDate, OrdNum, OrdRow, OrdPrice, + PriceOff AS OrdTrasf, OrdQty AS OrdQty +FROM dbo.QuoteFull_R +GO +PRINT N'Creating [dbo].[v_MarginReportStats]...'; + + +GO +CREATE VIEW dbo.v_MarginReportStats +AS +SELECT MIN(OrdDate) AS FromDate, MAX(OrdDate) AS ToDate, COUNT(*) AS NumOrderRows, COUNT(DISTINCT OrdNum) AS NumOrders, COUNT(DISTINCT CodItem) AS NumItem, COUNT(DISTINCT CodClient) + AS NumClients +FROM dbo.QuoteFull_R +GO +PRINT N'Creating [dbo].[v_MarginReportStatsNewData]...'; + + +GO +CREATE VIEW dbo.[v_MarginReportStatsNewData] +AS +SELECT MIN(OrdDate) AS FromDate, MAX(OrdDate) AS ToDate, COUNT(*) AS NumOrderRows, COUNT(DISTINCT OrdNum) AS NumOrders, COUNT(DISTINCT CodItem) AS NumItem, COUNT(DISTINCT CodClient) + AS NumClients +FROM ext.OrdersHistRaw +GO +PRINT N'Creating [dbo].[stp_packageCost]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: stp_packageCost +-- SOSTITUITA da query + funzione +-- ============================================= +CREATE PROCEDURE [dbo].[stp_packageCost] +( + @CodItem NVARCHAR(50) = '', + @CodClient NVARCHAR(50) = '', + @CodPackag NVARCHAR(50) = '', + @PDesc NVARCHAR(50) OUTPUT, + @RMWeight DECIMAL(9,4) OUTPUT, + @Weight DECIMAL(9,4) OUTPUT, + @Tare DECIMAL(9,4) OUTPUT, + @PackCost DECIMAL(9,6) OUTPUT, + @TareStRat DECIMAL(9,4) OUTPUT +) +AS +BEGIN + SET NOCOUNT ON; + + DECLARE @trovati INT = 0, + @RMCost DECIMAL(9,3) + + -- calcolo RMCost e RMWeight da tab PackageDet + SELECT @RMCost = RMCost, @RMWeight = RMWeight, @PDesc= PackagDesc + FROM PackagDet + WHERE CodPackag = @CodPackag + + -- Calcolo peso e tara da selezione gerarchica + SELECT @trovati = COUNT(*) + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + + IF(@trovati > 0) + -- primo tentativo: cerco il package dato SIA Cliente che Item che Package + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2ItemClient WHERE CodItem = @CodItem AND CodClient = @CodClient AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM e package + BEGIN + SELECT @trovati = COUNT(*) FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + IF(@trovati > 0) + BEGIN + SELECT TOP 1 @Weight = [Weight], @Tare = Tare + FROM Package2Item WHERE CodItem = @CodItem AND CodPackag = @CodPackag + ORDER BY TotQta DESC + END + ELSE + BEGIN + SELECT @Weight = [Weight], @Tare = Tare + FROM Package2 WHERE CodPackag = @CodPackag + END + END + + + -- faccio ultimi calcoli! + SELECT @PackCost = @RMCost / @Weight, @TareStRat = (@RMWeight - @Tare) / @Weight + +END +GO +PRINT N'Creating [dbo].[stp_esplodiVocab]...'; + + +GO +-- ============================================= +-- Author: S.E.Locatelli +-- Create date: 2011-10-24 +-- Description: +-- ============================================= +create PROCEDURE stp_esplodiVocab +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + -- svuoto vocabolario + DELETE FROM ZZZ_VocabExpl + + -- carico termini ITA + INSERT INTO ZZZ_VocabExpl(Lemma,IT) + SELECT Lemma, Traduzione AS IT + FROM Vocabolario + WHERE Lingua = 'IT' + + -- update termini ENG + UPDATE ZZZ_VocabExpl + SET EN=ISNULL(v.Traduzione,ve.EN) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='EN' + + -- update termini BRA + UPDATE ZZZ_VocabExpl + SET BR=ISNULL(v.Traduzione,ve.BR) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='BR' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET CN=ISNULL(v.Traduzione,ve.CN) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='CN' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET MX=ISNULL(v.Traduzione,ve.MX) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='MX' + + -- update termini CHN + UPDATE ZZZ_VocabExpl + SET PL=ISNULL(v.Traduzione,ve.PL) + FROM ZZZ_VocabExpl ve INNER JOIN Vocabolario v ON ve.Lemma=v.Lemma + WHERE v.Lingua='PL' + + +END +GO +PRINT N'Creating [dbo].[stp_VSCli_SearchLike]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.02.11 +-- Description: Ricerca clienti +-- ============================================= +CREATE PROCEDURE [dbo].stp_VSCli_SearchLike +( + @value NVARCHAR(50) +) + +AS +SET NOCOUNT ON; + +SELECT value + ,label +FROM v_selClient +WHERE (value LIKE '%' + @value + '%') + OR (label LIKE '%' + @value + '%') +GO +PRINT N'Creating [dbo].[stp_QL_update_07_02]...'; + + +GO + + + + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.01.22 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_07_02] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + -- ITEM + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @CodifProfilo NVARCHAR(50) = '' -- Cod. Profilo + DECLARE @ClasseMerc NVARCHAR(50) = '' + DECLARE @CodClientAssoc NVARCHAR(50) = '' + + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettosità all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettosità all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + DECLARE @PTotQta DECIMAL(18,3) = 0 -- Qta Kg Tot Imballati + DECLARE @PDurata DECIMAL(18,6) = 0 -- Tempo d'imballaggio + DECLARE @PLiv NVARCHAR(50) = '' -- Livello Search dati Imballo + DECLARE @PLivDett NVARCHAR(50) = '' -- Key Livello Search Dati Imballo + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '' -- codice ZONA + DECLARE @TranspCost DECIMAL(9,6) -- costo di trasporto + DECLARE @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validità è true! + SET @valid = 1 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + + CREATE TABLE #QuoteParam + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumP] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [Descr] [nvarchar](50) NOT NULL, + [Parameter] [nvarchar](100) NOT NULL, + --PRIMARY KEY + -- ( [NumP] ASC, [QuoteType] ASC, [CodQuote] ASC, [QuoteRev] ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 90 ) + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumWI] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [NetProd] [decimal](9, 3) NOT NULL DEFAULT ((0)), + [WSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [MSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [DSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [FC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [VC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [OH4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [SC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [WYR] AS ((1)-[WSR]), + [MYR] AS ((1)-[MSR]), + [DYR] AS ((1)-[DSR]), + [WCR] AS ((1)/((1)-[WSR])), + [MCR] AS ((1)/((1)-[MSR])), + [DCR] AS ((1)/((1)-[DSR])), + [valid] [bit] NOT NULL DEFAULT((1)), + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumEx] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [TotQty] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [TotCost] [decimal](18, 6) NOT NULL DEFAULT ((0)), + [Quota] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [C4UG] AS (([TotCost]*[Quota])/[TotQty]), + [valid] [bit] NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino quote PARAMETRI! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni ESTERNE! + DELETE FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni INTERNE + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id + INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = [Weight], @PTare = Tare, + @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + FROM f_getDataCodPackag ( @CodItem, @CodClient) + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc + --FROM dbo.ItemDet + --WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet WHERE ClientDet.CodClient = @CodClientAssoc + --FROM dbo.ItemDet + --INNER JOIN dbo.ClientDet ON ItemDet.Class03 = ClientDet.CodClient + --WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(50) , @NumSMED ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(50) , @KgTeo ) ) + + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo +-- UPDATE qwi +-- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END +-- FROM #QuoteWorkInt qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA +-- WHERE qwi.ProcessNum = '04' -- solo imballo + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- ADESSO LO FACCIO GIA' NELLA FUNZIONE DI RECUPERO DATI PACKAGE f_getDataCodPackag + ---- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + --IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + -- BEGIN + -- UPDATE qwi + -- SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + -- FROM #QuoteWorkInt qwi + -- INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + -- WHERE qwi.ProcessNum = '04' -- solo imballo + -- END + + -- salvo numero imballatori + --SELECT @NumImb = ISNULL(NumImb,0) + --FROM dbo.TabImbArt + --WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , VC4UG = ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , OH4UG = ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = RMCost / @PWeight + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = ( RMWeight - @PTare) / @PWeight + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + -- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullDataAll]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataAll +-- +-- Author: Steamware +-- Create date: 2014.02.07 +-- Description: Recupera tutti i dati di tutte le offerte salvate +-- ============================================= +CREATE PROCEDURE dbo.stp_QL_fullDataAll + +AS +SELECT * +FROM v_QuoteFull_Q +ORDER BY CodQuote DESC + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_update_30_01]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.01.22 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_30_01] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettosità all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettosità all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '', -- codice ZONA + @TranspCost DECIMAL(9,6), -- costo di trasporto + @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validità è true! + SET @valid = 1 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + + CREATE TABLE #QuoteParam + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumP] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [Descr] [nvarchar](50) NOT NULL, + [Parameter] [nvarchar](100) NOT NULL, + --PRIMARY KEY + -- ( [NumP] ASC, [QuoteType] ASC, [CodQuote] ASC, [QuoteRev] ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 90 ) + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumWI] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [NetProd] [decimal](9, 3) NOT NULL DEFAULT ((0)), + [WSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [MSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [DSR] [decimal](9, 8) NOT NULL DEFAULT ((0)), + [FC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [VC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [OH4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [SC4UG] [decimal](9, 6) NOT NULL DEFAULT ((0)), + [WYR] AS ((1)-[WSR]), + [MYR] AS ((1)-[MSR]), + [DYR] AS ((1)-[DSR]), + [WCR] AS ((1)/((1)-[WSR])), + [MCR] AS ((1)/((1)-[MSR])), + [DCR] AS ((1)/((1)-[DSR])), + [valid] [bit] NOT NULL DEFAULT((1)), + ) + + -- elimino e ricreo #QuoteParam temp table... + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + [QuoteType] [char](1) NOT NULL, + [CodQuote] [bigint] NOT NULL, + [QuoteRev] [int] NOT NULL, + [NumEx] [int] IDENTITY(1,1) NOT NULL, + [ProcessNum] [nvarchar](50) NOT NULL, + [CodPlant] [nvarchar](50) NOT NULL, + [Class01] [nvarchar](50) NOT NULL DEFAULT (''), + [Class02] [nvarchar](50) NOT NULL DEFAULT (''), + [Class03] [nvarchar](50) NOT NULL DEFAULT (''), + [Class04] [nvarchar](50) NOT NULL DEFAULT (''), + [Class05] [nvarchar](50) NOT NULL DEFAULT (''), + [TotQty] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [TotCost] [decimal](18, 6) NOT NULL DEFAULT ((0)), + [Quota] [decimal](18, 6) NOT NULL DEFAULT ((1)), + [C4UG] AS (([TotCost]*[Quota])/[TotQty]), + [valid] [bit] NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino lavorazioni esterne! + DELETE + FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- recupero da dati dell'offerta il valore del package scelto + SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + + -- e aggiorno QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = @CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ItemDet INNER JOIN ClientDet ON ItemDet.Class03=ClientDet.CodClient + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', @CodDiesGroup) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', @strTemp) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', @strTemp) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant', @CodPlant + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM', @KeyAM + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL', @KeyAMIL + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED', @NumSMED + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo', @KgTeo + + -- tolto: è duplicato di HoleNumDies + --INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNum', @HoleNum + + -- inserisco lavorazione estrusione! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', SUM(KgTeo) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- Se Produttività netta ancora = 0 la leggo nella tabella Gruppo Imballo ( Packaging ) + IF ( SELECT NetProd FROM #QuoteWorkInt WHERE ProcessNum = '04' ) = 0 + BEGIN + UPDATE qwi + SET NetProd = CASE ti.Durata WHEN 0 THEN 0 ELSE ti.TotOut / ti.Durata END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabImbGrp ti ON ti.CodPackag = @CodPackag -- packag generico dell' offerta + WHERE qwi.ProcessNum = '04' -- solo imballo + END + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM dbo.TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- calcolo i costi legati alla fase di imballo! + -- QUI VA FATTO CALCOLO PUNTUALE SU quotaPlant tramite Articolo-Cliente / Articolo / Packaging + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM #QuoteWorkInt WITH (NOLOCK) + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SET @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', @DiesPrice + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', @DiesExpLife + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', @DiesEOLife + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC WITH (NOLOCK) + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + + -- inserisco costi per ROTTAME + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', @PRMWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', @PWeight + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', @PTare + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', @PTareStRatio + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM dbo.QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + + /* ================================================== + CANCELLO E CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- elimino e carico parametri! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam WITH (NOLOCK) + + -- elimino e carico lavorazioni interne! + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt WITH (NOLOCK) + + -- elimino e carico OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, Class03, Class04 + , Class05, TotQty, TotCost, Quota, valid + FROM #QuoteOC WITH (NOLOCK) + + + COMMIT TRAN + + --SELECT * FROM #QuoteParam + --SELECT * FROM #QuoteWorkInt + --SELECT * FROM #QuoteOC + + -- elimino temp table... + IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + DROP TABLE #QuoteParam + IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + DROP TABLE #QuoteWorkInt + IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[stp_QL_update_SAM]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.13 +-- Description: aggiorna tabella QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update_SAM] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + BEGIN TRAN + + -- dichiaro valori da recuperare + DECLARE @cont INT = 0 -- contatore x numeri consecutivi... + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + + DECLARE @valid BIT + DECLARE @CodDiesGroup NVARCHAR(50) + DECLARE @CodPlant NVARCHAR(50) + DECLARE @CodPlantFix NVARCHAR(50) = '' + DECLARE @HoleNum INT + DECLARE @CodItem NVARCHAR(50) = '' --cod item + DECLARE @ItemDescr NVARCHAR(50) = '' -- descrizione item + DECLARE @KeyAM NVARCHAR(50) = '' + DECLARE @KeyAMI NVARCHAR(50) = '' + DECLARE @KeyAMIL NVARCHAR(50) = '' + DECLARE @NumSMED INT = 0 -- numero cambi + DECLARE @KgTeo DECIMAL(18, 6) = 0 -- kg totali + DECLARE @RawMat NVARCHAR(50) + DECLARE @ProdTeo DECIMAL(18,6) + DECLARE @ScTec DECIMAL(18,6) + DECLARE @BatchQty INT + DECLARE @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + DECLARE @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + DECLARE @MAC_IN DECIMAL(18,6) -- Messa a cento difettosità all'incestatura + DECLARE @MAC_IM DECIMAL(18,6) -- Messa a cento difettosità all'imballo + DECLARE @SSR DECIMAL(9,6) -- percentuale vendita rottame + DECLARE @DiesPrice DECIMAL(9,3) -- prezzo matrice + DECLARE @DiesEOLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesExpLife DECIMAL(9,2) -- durata matrice + DECLARE @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + DECLARE @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + DECLARE @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + DECLARE @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + DECLARE @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + DECLARE @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + DECLARE @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + DECLARE @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + DECLARE @CodClient NVARCHAR(50) = '' -- codice cliente + DECLARE @NumImb DECIMAL(9,6) = 0 -- num imballatori + DECLARE @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + DECLARE @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + DECLARE @PWeight DECIMAL(9,4) = 0 -- peso del pacco + DECLARE @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + DECLARE @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + DECLARE @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '', -- codice ZONA + @TranspCost DECIMAL(9,6), -- costo di trasporto + @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + + -- default: validità è true! + SET @valid = 1 + + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + -- elimino parametri! + DELETE + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni interne! + DELETE + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino preventivamente OtherCosts già inseriti! + DELETE + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni esterne! + DELETE + FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- recupero da dati dell'offerta il valore del package scelto + SELECT @CodPackag = CodPackag + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr= i.ItemDescr + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + + -- inserisco note sull'articolo + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ItemDescr', @ItemDescr) + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodifProfilo', Class01 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClasseMerc', Class02 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'ClienteAssoc', Class03 + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + -- INFORMAZIONI su MATRICE + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'CodDiesGroup', @CodDiesGroup) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) --@strTemp = SUBSTRING(@CodDiesGroup, 0, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'TipoDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 2, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'DiamDies', @strTemp) + + SELECT @cont = @cont + 1 + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) --@strTemp = SUBSTRING(REPLACE(@CodDiesGroup, @strTemp,''), 5, CHARINDEX('-', @CodDiesGroup)) -- !!!fare con finc Gian + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'HoleNumDies', @strTemp) + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + SELECT @cont = @cont + 1 + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + + -- inserisco lavorazione estrusione! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x lavorazione estruzione + INSERT INTO dbo.QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'CodPlant', @CodPlant + FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAM', @KeyAM + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KeyAMIL', @KeyAMIL + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'NumCambi', @NumSMED + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'KgTeo', @KgTeo + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'HoleNum', @HoleNum + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @cont = ISNULL(MAX(NumP),0) + 1 + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'KgProdotti', SUM(KgTeo) + FROM QuoteList ql + INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + --SELECT @cont = @cont + 1 + --INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + --SELECT @QuoteType, @CodQuote, @QuoteRev, @cont, '01', 'NumLotti', COUNT(*) + --FROM QuoteList ql INNER JOIN TabProdSc tps ON ql.KeyAM = tps.KeyAM + --WHERE ql.QuoteType = @QuoteType + -- AND ql.CodQuote = @CodQuote + -- AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE qwi + SET MSR = rmd.CSR + FROM dbo.QuoteWorkInt qwi + INNER JOIN RawMatDet rmd ON qwi.Class03 = rmd.RawMat + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase estrusione! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.QuoteType = @QuoteType + AND qwi.CodQuote = @CodQuote + AND qwi.QuoteRev = @QuoteRev + + -- inserisco lavorazione incestatura! + INSERT INTO QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco lavorazione imballo! + INSERT INTO dbo.QuoteWorkInt(QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumWI),0) + 1, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo produttività netta nella fase imballo + UPDATE qwi + SET NetProd = ti.TotOut/ ti.Durata + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabImbArt ti ON qwi.Class04 = ti.KeyA + + -- salvo numero imballatori + SELECT @NumImb = ISNULL(NumImb,0) + FROM TabImbArt + WHERE KeyA = @CodItem + + -- parametro num imballatori + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'NumImballatori', @NumImb + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- calcolo i costi legati alla fase di imballo! + UPDATE qwi + SET FC4UG = (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , VC4UG = (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , OH4UG = (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd + , SC4UG = cp.SC / ql.BatchQty + FROM dbo.QuoteWorkInt qwi + INNER JOIN Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE qwi + SET DSR = 1 - CAST(td.TotOUT AS DECIMAL(18,6))/CAST(td.TotIN AS DECIMAL(18,6)) + FROM dbo.QuoteWorkInt qwi + INNER JOIN TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + + -- recupero le MAC fase 01 + SELECT + @MAC_SC = MCR + ,@MAC_ST = WCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT + @MAC_IN = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT + @MAC_IM = DCR + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + + + + + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO dbo.QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ROW_NUMBER() OVER(ORDER BY CodUtil ASC) AS Row, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, UnitCost * @BatchQty, 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- (A) da DiesDet + SELECT @DiesPrice = SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)), + @DiesExpLife = SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG(ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 + GROUP BY CodItem, CodDiesGroup + + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0) + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = 1 -- metto 1 kg che è sbagliato e mi fa esplodere prezzo matrice ma non blocca calcoli + END + + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + + -- (D) verifico se vita è OK... + IF (@DiesPriceLife = 0) + BEGIN + SET @DiesPriceLife = 1 + SET @valid = 0 + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, @DiesPriceLife * @BatchQty, 1, @valid + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + -- inserisco parametri calcolati x matrice + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesPrice', @DiesPrice + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesExpLife', @DiesExpLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '01', 'DiesEOLife', @DiesEOLife + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @VCF01 = @OCF01 + VC4UG + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + SELECT @SellCostF01 = ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * (@MAC_ST * @MAC_SC * @MAC_IN * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = ((@MAC_IM) - 1) * (q.RawMatCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * (@MAC_IM * 100)) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - ((@MAC_IM * 100) - 100) * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM RawMatDet rmd INNER JOIN QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per VENDITA + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR + FROM QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco costi per ROTTAME + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF04 * @BatchQty, 1 - @SSR + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + + -- inserisco costi per IMBALLO + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, @PCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- inserisco parametri calcolati x imballaggio + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PkgDesc', @PkgDesc + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'RMWeight', @PRMWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PWeight', @PWeight + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'PTare', @PTare + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO QuoteParam(QuoteType, CodQuote, QuoteRev, NumP, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumP),0) + 1, '04', 'TareStRatio', @PTareStRatio + FROM QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero tipo di trasporto + SELECT @HasTC = ISNULL(i.HasTC, 0) + FROM QuoteList q INNER JOIN Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, @HasTC * @TranspCost * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN ClientDet c ON a.CodAg = c.CodAg + INNER JOIN QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- inserisco costi per PROVVIGIONI + INSERT INTO QuoteOC(QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, ISNULL(MAX(NumEx),0) + 1, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, @Provvig * @BatchQty, 1 + FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_QL_getByKey]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.23 +-- Description: recupera riga QL +-- ============================================= +CREATE PROCEDURE dbo.stp_QL_getByKey +( + @QuoteType CHAR(1) = 'Q' + ,@CodQuote BIGINT = 0 + ,@QuoteRev INT = 0 +) +AS + +SELECT * +FROM QuoteList +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_QRM_getByKey]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.23 +-- Description: recupera riga QRM +-- ============================================= +create PROCEDURE dbo.stp_QRM_getByKey +( + @QuoteType CHAR(1) = 'Q' + ,@CodQuote BIGINT = 0 + ,@QuoteRev INT = 0 + ,@NumRM INT = 0 +) +AS + +SELECT * +FROM QuoteRM +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND NumRM = @NumRM + +RETURN +GO +PRINT N'Creating [dbo].[stp_VSRM_SearchLike]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.02.18 +-- Description: Ricerca materiale Al +-- ============================================= +create PROCEDURE [dbo].stp_VSRM_SearchLike +( + @value NVARCHAR(50) +) + +AS +SET NOCOUNT ON; + +SELECT value + ,label +FROM v_selRawMat +WHERE (value LIKE '%' + @value + '%') + OR (label LIKE '%' + @value + '%') +GO +PRINT N'Creating [dbo].[stp_QuoteFull_delete]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.23 +-- Description: upelimina tutti i record di un offerta +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QuoteFull_delete] +( + @Original_QuoteType CHAR(1) = 'Q' + ,@Original_CodQuote BIGINT = 0 + ,@Original_QuoteRev INT = 0 +) +AS + +SET XACT_ABORT ON; +BEGIN tran + -- elimino da QuoteFull + DELETE + FROM QuoteFull_Q + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- elimino da tab child + DELETE + FROM QuoteWorkExt + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + DELETE + FROM QuoteWorkInt + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + DELETE + FROM QuoteOC + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + DELETE + FROM QuoteParam + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- elimino le 2 master: RM e list... + DELETE + FROM QuoteRM + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + DELETE + FROM QuoteList + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + +COMMIT tran + +RETURN +GO +PRINT N'Creating [dbo].[stp_TD_upsert]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.17 +-- Description: Crea TabDifett (tabella difettosità) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TD_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + SET XACT_ABORT ON; + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabDifett + + -- riempio di nuovo valori! + INSERT INTO TabDifett + SELECT + dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant as KeyAMI + , pl.ProcessNum + , dd.CodItem, pl.RawMat, pl.CodPlant + , SUM(NumOUT) as TotOUT + , SUM(NumIN) as TotIn + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum IN ('02', '04') + AND pl.okDi = 1 + -- and pl.EventType=1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.RawMat, pl.CodPlant, pl.ProcessNum + ORDER BY dd.CodItem, pl.RawMat, pl.ProcessNum--, SUM(NumOUT) DESC + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fasi 02/03 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_TI_upsert]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.20 +-- Description: Crea TabImb (tabella imballi) +-- NON SERVE PIU' le due tabelle sono state inglobate in Package2/Item/Client +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TI_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + SET XACT_ABORT ON; + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabImbArt + TRUNCATE TABLE TabImbGrp + + -- riempio di nuovo valori x articolo! + INSERT INTO TabImbArt + SELECT + dd.CodItem as KeyA + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(QtyOUT) AS TotOut + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem + ORDER BY dd.CodItem + + + -- riempio di nuovo valori x gruppo imballo! + INSERT INTO TabImbGrp + SELECT + pl.CodPackag + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(QtyOUT) AS TotOut + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ORDER BY pl.CodPackag + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_TPS_upsert]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.13 +-- Description: Crea TabProdSc (tabella produttività/scarti) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_TPS_upsert] +( + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + + SET XACT_ABORT ON; + BEGIN TRAN + + SET NOCOUNT ON; + + -- svuoto tabella... + TRUNCATE TABLE TabProdSc + + -- riempio di nuovo valori! chiave AMIL + INSERT INTO TabProdSc + SELECT + dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) AS KeyAMIL + , dd.CodDiesGroup + , dd.CodItem + '-' + pl.RawMat AS KeyAM + , dd.CodItem, pl.RawMat, pl.CodPlant, dd.HoleNum + , 0 AS NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) AS KgTeorici + , SUM(QtyIN) AS KgLordi + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + AND pl.okPr = 1 + AND pl.okSc = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- riempio di nuovo valori! chiave CMIL + INSERT INTO TabProdSc + SELECT + id.CodItemGroup + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) AS KeyAMIL + , dd.CodDiesGroup + , id.CodItemGroup + '-' + pl.RawMat AS KeyAM + , id.CodItemGroup, pl.RawMat, pl.CodPlant, dd.HoleNum + , 0 AS NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) AS KgTeorici + , SUM(QtyIN) AS KgLordi + , SUM(Duration) AS Durata + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + INNER JOIN ItemDet id ON dd.CodItem = id.CodItem + WHERE pl.ProcessNum='01' and pl.EventType=1 + AND pl.okPr = 1 AND pl.okSc = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY id.CodItemGroup, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY id.CodItemGroup, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + + -- calcolo cambi SMED + + -- con cte + ; WITH cteCambiPre + AS + ( + SELECT + ROW_NUMBER() OVER(ORDER BY CodPlant, EventStart ASC) AS Row, + CodPlant, RawMat, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum + FROM ProductionLog pl + WHERE pl.ProcessNum='01' and pl.EventType=1 + AND pl.okPr = 1 AND pl.okSc = 1 + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + ) + , cteCambi + AS + ( + -- PARTE AMIL + SELECT dd.CodItem + '-' + a.RawMat + '-' + a.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + , dd.CodDiesGroup + , a.* + --, b.Row + --, ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio + --, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + FROM cteCambiPre AS a + LEFT JOIN cteCambiPre AS b + ON a.Row-1 = b.Row + AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies + INNER JOIN DiesDet dd ON a.CodDies=dd.CodDies + WHERE b.Row IS NULL -- se voglio vedere solo i cambi + --ORDER BY a.CodPlant, a.EventStart + + UNION + -- PARTE CMIL + SELECT id.CodItemGroup + '-' + a.RawMat + '-' + a.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + , dd.CodDiesGroup + , a.* + --, b.Row + --, ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio + --, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 + FROM cteCambiPre AS a + LEFT JOIN cteCambiPre AS b + ON a.Row-1 = b.Row + AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies + INNER JOIN DiesDet dd ON a.CodDies=dd.CodDies + INNER JOIN ItemDet id ON dd.CodItem = id.CodItem + WHERE b.Row IS NULL -- se voglio vedere solo i cambi + --ORDER BY a.CodPlant, a.EventStart + ) + UPDATE tps + SET NumSMED = cc.NumSMED + FROM TabProdSc tps + INNER JOIN ( + SELECT KeyAMIL, CodDiesGroup, SUM(Cambio2) as NumSMED + FROM cteCambi + GROUP BY KeyAMIL, CodDiesGroup + --ORDER BY KeyAMIL, CodDiesGroup + ) AS cc + ON tps.KeyAMIL= cc.KeyAMIL AND tps.CodDiesGroup = cc.CodDiesGroup + + + +-- -- altro metodo, forse + veloce... +-- DROP TABLE test + +-- CREATE TABLE [dbo].[test]( +-- [Row] [bigint] IDENTITY(1,1) NOT NULL, +-- [CodPlant] [nvarchar](50) NOT NULL, +-- [EventStart] [datetime] NOT NULL, +-- [ProcessNum] [nvarchar](50) NOT NULL, +-- [CodDies] [nvarchar](50) NOT NULL, +-- [CodClient] [nvarchar](50) NOT NULL, +-- [OrderNum] [nvarchar](50) NOT NULL, +-- [BatchNum] [nvarchar](50) NOT NULL, +-- CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED +-- ( +-- [Row] ASC +-- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +-- ) ON [PRIMARY] + + +-- INSERT INTO TEST +-- SELECT CodPlant, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum +-- FROM ProductionLog pl +-- WHERE pl.ProcessNum='01' and pl.EventType=1 +-- ORDER BY CodPlant, EventStart + +---- SELECT * FROM Test + +-- SELECT a.* +-- , b.Row +-- , ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio +-- , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2 +-- FROM test AS a +-- LEFT JOIN test AS b +-- ON a.Row - 1 = b.Row -- aggancio record precedente +-- AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies +-- WHERE b.Row IS NULL -- solo i cambi +-- ORDER BY a.CodPlant, a.EventStart + + + + -- salvo nuova revisione dati di produzione... + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione fase 01 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + COMMIT TRAN + +END +GO +PRINT N'Creating [dbo].[stp_VSItem_SearchLike]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.02.18 +-- Description: Ricerca items +-- ============================================= +CREATE PROCEDURE [dbo].stp_VSItem_SearchLike +( + @value NVARCHAR(50) +) + +AS +SET NOCOUNT ON; + +SELECT value + ,label +FROM v_selItems +WHERE (value LIKE '%' + @value + '%') + OR (label LIKE '%' + @value + '%') +ORDER BY value +GO +PRINT N'Creating [dbo].[stp_QL_fullDataSearch]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataSearch +-- +-- Author: Steamware +-- Mod date: 2014.02.11 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema con ricerca x cliente, item, materiale +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_fullDataSearch] +( + @CodClient NVARCHAR(50) = '' + , @CodItem NVARCHAR(50) = '' + , @RawMat NVARCHAR(50) = '' + , @DataMin DATETIME + , @DataMax DATETIME + , @qtaMin INT = 0 + , @qtaMax INT = 999999 + , @QuoteType CHAR(1) = '*' + , @IdxQState INT = '-1' +) +AS +SET NOCOUNT ON + +-- cte x selezionare solo ultime revisioni... +;WITH myCte AS +( + SELECT QuoteType, CodQuote, MAX(QuoteRev) AS QuoteRev + FROM QuoteList + GROUP BY QuoteType, CodQuote +) +-- calcolo con aggiunta campi sommati... +SELECT vq.* +FROM v_QuoteFull_Q vq + INNER JOIN myCte mc ON vq.QuoteType = mc.QuoteType AND vq.CodQuote = mc.CodQuote AND vq.QuoteRev = mc.QuoteRev +WHERE vq.CodClient = CASE WHEN ISNULL(@CodClient,'') = '' THEN vq.CodClient ELSE @CodClient END + AND vq.CodItem = CASE WHEN ISNULL(@CodItem,'') = '' THEN vq.CodItem ELSE @CodItem END + AND vq.RawMat = CASE WHEN ISNULL(@RawMat,'') = '' THEN vq.RawMat ELSE @RawMat END + AND vq.CodQuote BETWEEN CONVERT(NVARCHAR(30), @DataMin, 12)*10000 AND (CONVERT(NVARCHAR(30), @DataMax, 12) +1 )*10000 + AND vq.BatchQty BETWEEN @qtaMin AND @qtaMax + AND vq.QuoteType = CASE WHEN @QuoteType = '*' THEN vq.QuoteType ELSE @QuoteType END + AND vq.IdxQState = CASE WHEN @IdxQState = -1 THEN vq.IdxQState ELSE @IdxQState END +ORDER BY CodQuote DESC + +RETURN +GO +PRINT N'Creating [dbo].[stp_QSP_upsert]...'; + + +GO +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.05.16 +-- Description: update di un record in QL (Full) TIPO SIMULAZIONE e poi aggiorna a cascata +-- ============================================= +create PROCEDURE [dbo].[stp_QSP_upsert] +( + @QuoteType CHAR(1) = 'S', + @CodQuote BIGINT = 0 , + @QuoteRev INT = 0 , + @NomePar NVARCHAR(50) = '' , + @ValPar NVARCHAR(50) = '' +) +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + -- variabili + DECLARE @trovati INT = 0 + + -- inserisco CodDiesGroup + SELECT @trovati = COUNT(*) + FROM QuoteSimPar + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND NomePar = @NomePar + IF(@trovati = 0) + BEGIN + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + VALUES(@QuoteType, @CodQuote, @QuoteRev, @NomePar, @ValPar) + END + ELSE + BEGIN + UPDATE QuoteSimPar + SET ValPar = @ValPar + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND NomePar = @NomePar + END +END +GO +PRINT N'Creating [dbo].[stp_RMD_getByKey]...'; + + +GO +CREATE PROCEDURE [dbo].stp_RMD_getByKey +( + @RawMat nvarchar(50) +) +AS + SET NOCOUNT ON; +SELECT RawMat, ProcCost, ProcYield, CSR, SSR, SSVA, SSVR, ExtraMatCost, ExtraServCost +FROM RawMatDet +WHERE (RawMat = @RawMat) +GO +PRINT N'Creating [dbo].[stp_RPT_insertNew]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.04.28 +-- Description: insert record di stampa +-- ============================================= +CREATE PROCEDURE [dbo].[stp_RPT_insertNew] +( + @Ticket INT, + @Report NVARCHAR(50), + @Chiave NVARCHAR(250), + @UserReq NVARCHAR(50), + @DataReq DATETIME, + @deleteOld BIT = 0 +) +AS + +SET NOCOUNT OFF; + +SET XACT_ABORT ON; +BEGIN TRAN + + -- se richiesto elimino record vecchi (utile x togliere segnaposto iniziale) + IF(@deleteOld = 1) + BEGIN + DELETE FROM ReportPrintTicket WHERE Ticket = @Ticket + END + + INSERT INTO ReportPrintTicket (Ticket, Report, Chiave, UserReq, DataReq) + VALUES (@Ticket, @Report, @Chiave, @UserReq, @DataReq) + +COMMIT TRAN +GO +PRINT N'Creating [dbo].[stp_RPT_reserveTicket]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.04.28 +-- Description: riserva un record per insert richiesta di stampa +-- ============================================= +CREATE PROCEDURE [dbo].[stp_RPT_reserveTicket] +( + @Report nvarchar(50), + @UserReq nvarchar(50) + +) +AS +SET NOCOUNT OFF; + +DECLARE @Ticket int = 0 + , @Chiave nvarchar(250) = '-' + , @DataReq datetime = GETDATE() + +SET XACT_ABORT ON; +BEGIN TRAN + + SELECT @Ticket = MAX(Ticket) + FROM ReportPrintTicket + + SET @Ticket = ISNULL(@Ticket, 0) + 1 + + INSERT INTO [dbo].[ReportPrintTicket] ([Ticket], [Report], [Chiave], [UserReq], [DataReq]) + VALUES (@Ticket, @Report, @Chiave, @UserReq, @DataReq) + +COMMIT TRAN + +SELECT Ticket, Report, Chiave, UserReq, DataReq, DataPrint +FROM ReportPrintTicket +WHERE Ticket = @Ticket +GO +PRINT N'Creating [dbo].[stp_SC2C_countRemaining]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.27 +-- Description: conteggio StandardCostList ancora da processare +-- ============================================= +CREATE PROCEDURE [dbo].[stp_SC2C_countRemaining] +AS + +DECLARE @Date AS SMALLDATETIME = CONVERT(SMALLDATETIME,CONVERT(CHAR(8), GETDATE(), 112)) + +SELECT COUNT(*) as RecordsIn +FROM dbo.CostList +WHERE DateList = @Date AND QuoteType = 'C' AND CodQuote = 0 + +RETURN +GO +PRINT N'Creating [dbo].[stp_SC2C_deleteForDate]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.29 +-- Description: cancellazione Cost List per data +-- ============================================= +CREATE PROCEDURE [dbo].[stp_SC2C_deleteForDate] + @Date SMALLDATETIME +AS +BEGIN + + SET NOCOUNT ON; + + DECLARE @CodQuoteDateMin BIGINT, + @CodQuoteDateMax BIGINT; + + SET @Date = CONVERT(SMALLDATETIME,CONVERT(CHAR(8), @Date, 112)) + SET @CodQuoteDateMin = CONVERT( BIGINT, ( RIGHT(YEAR(@Date),2) + dbo.f_padLeft(MONTH(@Date), 2,'0') + dbo.f_padLeft(DAY(@Date), 2,'0') + dbo.f_padLeft(0, 8,'0') ) ) + SET @CodQuoteDateMax = CONVERT( BIGINT, ( RIGHT(YEAR(@Date),2) + dbo.f_padLeft(MONTH(@Date), 2,'0') + dbo.f_padLeft(DAY(@Date), 2,'0') + dbo.f_padLeft(9, 8,'9') ) ) + + -- cancello i dati di carico + DELETE FROM dbo.CostList WHERE DateList = @Date AND QuoteType = 'C' + + DELETE FROM dbo.QuoteOC WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteParam WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteWorkExt WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteWorkInt WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteRM WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteList WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + DELETE FROM dbo.QuoteFull_C WHERE QuoteType = 'C' AND CodQuote >= @CodQuoteDateMin AND CodQuote <= @CodQuoteDateMax + + -- RIPULISCO TUTTO + -- TRUNCATE TABLE CostList + -- TRUNCATE TABLE dbo.QuoteFull_C + +RETURN + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullDataCount]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod date: 2014.05.23 +-- Description: conteggio totale record QL +-- ============================================= +CREATE PROCEDURE dbo.stp_QL_fullDataCount +( + @CodClient NVARCHAR(50) = '' + , @CodItem NVARCHAR(50) = '' + , @RawMat NVARCHAR(50) = '' + , @DataMin DATETIME + , @DataMax DATETIME + , @qtaMin INT = 0 + , @qtaMax INT = 999999 + , @QuoteType CHAR(1) = '*' + , @IdxQState INT = '-1' +) +AS +SET NOCOUNT ON + +SELECT COUNT(DISTINCT CodQuote) AS num +FROM v_QuoteFull_Q vq +WHERE vq.CodClient = CASE WHEN ISNULL(@CodClient,'') = '' THEN vq.CodClient ELSE @CodClient END + AND vq.CodItem = CASE WHEN ISNULL(@CodItem,'') = '' THEN vq.CodItem ELSE @CodItem END + AND vq.RawMat = CASE WHEN ISNULL(@RawMat,'') = '' THEN vq.RawMat ELSE @RawMat END + AND vq.CodQuote BETWEEN CONVERT(NVARCHAR(30), @DataMin, 12)*10000 AND (CONVERT(NVARCHAR(30), @DataMax, 12) +1 )*10000 + AND vq.BatchQty BETWEEN @qtaMin AND @qtaMax + AND vq.QuoteType = CASE WHEN @QuoteType = '*' THEN vq.QuoteType ELSE @QuoteType END + AND vq.IdxQState = CASE WHEN @IdxQState = -1 THEN vq.IdxQState ELSE @IdxQState END + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_getLast]...'; + + +GO +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.17 +-- Description: recupera ultimo record del tipo richiesto +-- ============================================= +create PROCEDURE [dbo].[stp_QLF_getLast] +AS + +SELECT TOP 1 * +FROM v_QuoteFull_Q +ORDER BY CodQuote DESC + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_getMinMax]...'; + + +GO +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.23 +-- Description: recupera record min/max per qta batch dato intervallo di analisi +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLF_getMinMax] +( + @DateMin INT, -- formato aammgg + @DateMax INT -- formato aammgg +) +AS + +WITH cteMin AS +( +SELECT TOP 1 * +FROM v_QuoteFull_Q +WHERE CodQuote BETWEEN @DateMin AND @DateMax +ORDER BY BatchQty +) +, cteMax AS +( +SELECT TOP 1 * +FROM v_QuoteFull_Q +WHERE CodQuote BETWEEN @DateMin AND @DateMax +ORDER BY BatchQty DESC +) + +SELECT * FROM cteMin +UNION +SELECT * FROM cteMax + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_revHist]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QLF_revHist +-- +-- Author: Steamware +-- Create date: 2014.04.29 +-- Description: Recupera tutte le revisioni di un offerta +-- ============================================= +create PROCEDURE stp_QLF_revHist +( + @QuoteType CHAR(1) = 'Q' + , @CodQuote BIGINT = 0 +) +AS +SET NOCOUNT ON + +-- calcolo con aggiunta campi sommati... +SELECT vq.* +FROM v_QuoteFull_Q vq +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote +ORDER BY QuoteRev DESC + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLR_getByDate]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.27 +-- Description: elaborazione OrdersHist +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLR_getByDate] +( + @DataRif INT +) +AS +BEGIN + +SET NOCOUNT ON; + +SELECT * +FROM v_StdCostList +WHERE DataRif = @DataRif + +END +RETURN +GO +PRINT N'Creating [dbo].[stp_checkOffers4Item]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Create date: 2014.05.11 +-- Description: elenco dati produzione x item indicato +-- ============================================= +CREATE PROCEDURE dbo.stp_checkOffers4Item (@CodItem NVARCHAR(50) = '') +AS +SELECT rmd.RawMat + , ISNULL(@CodItem,'-') AS CodItem + , COUNT(pl.EventStart) AS numRec +FROM RawMatDet rmd +LEFT JOIN ( + SELECT pl.EventStart + , pl.RawMat + FROM ProductionLog pl + INNER JOIN DiesDet dd + ON pl.CodDies = dd.CodDies + WHERE dd.CodItem = @CodItem + AND ISNULL(pl.RawMat, '') <> '' + ) AS pl + ON rmd.RawMat = pl.RawMat +WHERE ISNULL(rmd.RawMat, '') <>'' +GROUP BY rmd.RawMat +ORDER BY rmd.RawMat + +RETURN +GO +PRINT N'Creating [dbo].[stp_getDataCodPackag]...'; + + +GO +-- ============================================= +-- Author: G.A.R. +-- Mad. date: 2014-06-06 +-- Description: Ritorna il package e i dati associati dove presenti +-- sostituisce la relativa funzione UDF f_getDataCodPackag +-- ============================================= +CREATE PROCEDURE [stp_getDataCodPackag] + + @CodItem NVARCHAR(50), + @CodClient NVARCHAR(50), + -- output variable + @CodPackag NVARCHAR(50) OUTPUT, + @TotQta DECIMAL(18, 3) OUTPUT, + @Weight DECIMAL(18, 6) OUTPUT, + @Tare DECIMAL(18, 6) OUTPUT, + @NumImb DECIMAL(9, 6) OUTPUT, + @Durata DECIMAL(18, 6) OUTPUT, + @LivPackag NVARCHAR(50) OUTPUT, + @LivPackagDet NVARCHAR(50) OUTPUT +AS +BEGIN + + SET NOCOUNT ON; + SET XACT_ABORT ON; + + IF EXISTS ( SELECT * FROM dbo.Package2ItemClient WHERE CodClient = @CodClient AND CodItem = @CodItem) + -- primo tentativo: cerco il package dato SIA cliente che ITEM + BEGIN + SELECT TOP 1 @CodPackag = CodPackag, @TotQta = TotQta, @Weight = Weight, @Tare = Tare, @NumImb = NumImb, @Durata = Durata + ,@LivPackag = 'Item-Client-Package' , @LivPackagDet = @CodItem + '-' + @CodClient + '-' + CodPackag + FROM dbo.Package2ItemClient + WHERE CodClient = @CodClient AND CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE IF EXISTS ( SELECT * FROM Package2Item WHERE CodItem = @CodItem ) + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @CodPackag = CodPackag, @TotQta = TotQta, @Weight = Weight, @Tare = Tare, @NumImb = NumImb, @Durata = Durata + ,@LivPackag = 'Item-Package', @LivPackagDet = @CodItem + '-' + CodPackag + FROM dbo.Package2Item WHERE CodItem = @CodItem + ORDER BY TotQta DESC + END + ELSE + -- secondo tentativo: se non lo trovo cerco per SOLO ITEM + BEGIN + SELECT TOP 1 @CodPackag = CodPackag, @TotQta = TotQta, @Weight = Weight, @Tare = Tare, @NumImb = NumImb, @Durata = Durata + ,@LivPackag = 'Package', @LivPackagDet = CodPackag + FROM dbo.Package2 WHERE CodPackag = 0 + END +END + +RETURN +GO +PRINT N'Creating [dbo].[stp_OH_countRemaining]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.27 +-- Description: conteggio OrdersHist ancora da processare +-- ============================================= +CREATE PROCEDURE dbo.stp_OH_countRemaining +AS + + +SELECT COUNT(*) as RecordsIn +FROM dbo.OrdersHist +WHERE CodQuote = 0 + +RETURN +GO +PRINT N'Creating [dbo].[stp_PL_getByListLingua]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod date: 2014.05.23 +-- Description: elenco calori x picklist data lingua e CodList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_PL_getByListLingua] +( + @CodList NVARCHAR(50) = '', + @Lingua NVARCHAR(3) = 'IT' +) +AS +SET NOCOUNT ON + +SELECT pl.Value, ISNULL(v.Traduzione, '_'+pl.Lemma+'_') as Label +FROM PickList pl + LEFT OUTER JOIN Vocabolario v ON pl.Lemma = v.Lemma +WHERE pl.CodList = @CodList + AND ISNULL(v.Lingua, @Lingua) = @Lingua +ORDER BY NumOrd + +RETURN +GO +PRINT N'Creating [dbo].[stp_prt_dsQuoteFull_byChiave]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_prt_dsQuoteFull_Q_Data +-- +-- Author: Steamware +-- Mod date: 2014.05.23 +-- Description: dataset stp_prt_dsQuoteFull_Q_Data per reportOffers +-- ============================================= +CREATE PROCEDURE [dbo].[stp_prt_dsQuoteFull_byChiave] +( + @Chiave AS NVARCHAR(50) = '' +) +AS +BEGIN + SET NOCOUNT ON; + +/* + Se decidiamo di separare le traduzioni dei lemmi tra Applicazione e stampa basta usare la prima cte come insert + nella tabella vocabolario e poi sostituire la cte con la tabella vocabolario stessa +*/ + +SELECT + -- chiave + Vers + , QuoteType + , CodQuote + , QuoteRev + -- valori + , IdxQState + , CodClient + , ClientName + , CodItem + , CodItemGroup + , RawMat + , UnitWeight + , BatchQty + , CodInco + , TranspZone + , KeyAM + , Note + , PriceOff + , CodClientAssoc + , ClientNameAssoc + , ItemDescr + , CodifProfilo + , ClasseMerc + , TipoDies + , CodDiesGroup + , DiamDies + , HoleNumDies + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAMIL + , KgTeo + , NumSMED + , QuotaMan + , PRMWeight + , PWeight + , PTare + , LivPackage + , LivPackageDett + , RawMatCost + , RawMatExtraCost + , RawMatFullCost + , CodPackag + , PkgDesc + , FSR + , ProvvCost + , EECost + , GasCost + , DiesCost + , PackCost + , TranspCost + , SellCost01 + , RefCost01 + , SellCost04 + , RefCost04 + , WSR01 + , MSR01 + , NetProd01 + , FC4UG01 + , VC4UG01 + , OH4UG01 + , SC4UG01 + , DSR + , NetProd04 + , FC4UG04 + , VC4UG04 + , FVC + , Charge + , P_FVC + , CPS + , P_CPS + , P_FC4UG04 + , FullCost + , P_FullCost + , MinPrice + , P_MinPrice + , P_PriceOff + , NetMar + , FCShield + , PckSur + , valid + , errorScore + , DiesPrice_sim + , SamplePrice + , DiesFullCost + , DiesPriceClientQuote + , DiesTecLife + , DiesCommLife + , MonthSalesPrev + , SalesPrevCost + , DiesFinCost + , ClientQuoteReven + , ExtraDiscountDies + , WSR01_sim + , MSR01_sim + , NetProd01_sim + , DSR_sim + , NetMar_sim + , FCShield_sim + , MinPrice_sim + , P_MinPrice_sim + +FROM dbo.v_QuoteFull_Q +WHERE QuoteType = dbo.f_prt_getParameter ( 'QuoteType', @Chiave , '&') + AND CodQuote = dbo.f_prt_getParameter ( 'CodQuote' , @Chiave , '&') + AND QuoteRev = dbo.f_prt_getParameter ( 'QuoteRev' , @Chiave +'&' , '&') + + +END +GO +PRINT N'Creating [dbo].[stp_prt_dsQuoteFull_Q_Data]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_prt_dsQuoteFull_Q_Data +-- +-- Author: Steamware +-- Mod date: 2014.04.28 +-- Description: dataset stp_prt_dsQuoteFull_Q_Data per reportOffers +-- ============================================= +CREATE PROCEDURE [dbo].[stp_prt_dsQuoteFull_Q_Data] + @Ticket AS INT = 1 +AS +BEGIN + SET NOCOUNT ON; + +/* + Se decidiamo di separare le traduzioni dei lemmi tra Applicazione e stampa basta usare la prima cte come insert + nella tabella vocabolario e poi sostituire la cte con la tabella vocabolario stessa +*/ + +SELECT + -- chiave + Vers + , QuoteType + , CodQuote + , QuoteRev + -- valori + , IdxQState + , CodClient + , ClientName + , CodItem + , CodItemGroup + , RawMat + , UnitWeight + , BatchQty + , CodInco + , TranspZone + , KeyAM + , Note + , PriceOff + , CodClientAssoc + , ClientNameAssoc + , ItemDescr + , CodifProfilo + , ClasseMerc + , TipoDies + , CodDiesGroup + , DiamDies + , HoleNumDies + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAMIL + , KgTeo + , NumSMED + , QuotaMan + , PRMWeight + , PWeight + , PTare + , LivPackage + , LivPackageDett + , RawMatCost + , RawMatExtraCost + , RawMatFullCost + , CodPackag + , PkgDesc + , FSR + , ProvvCost + , EECost + , GasCost + , DiesCost + , PackCost + , TranspCost + , SellCost01 + , RefCost01 + , SellCost04 + , RefCost04 + , WSR01 + , MSR01 + , NetProd01 + , FC4UG01 + , VC4UG01 + , OH4UG01 + , SC4UG01 + , DSR + , NetProd04 + , FC4UG04 + , VC4UG04 + , FVC + , Charge + , P_FVC + , CPS + , P_CPS + , P_FC4UG04 + , FullCost + , P_FullCost + , MinPrice + , P_MinPrice + , P_PriceOff + , NetMar + , FCShield + , PckSur + , valid + , errorScore + , DiesPrice_sim + , SamplePrice + , DiesFullCost + , DiesPriceClientQuote + , DiesTecLife + , DiesCommLife + , MonthSalesPrev + , SalesPrevCost + , DiesFinCost + , ClientQuoteReven + , ExtraDiscountDies + , WSR01_sim + , MSR01_sim + , NetProd01_sim + , DSR_sim + , NetMar_sim + , FCShield_sim + , MinPrice_sim + , P_MinPrice_sim + +FROM dbo.v_QuoteFull_Q AS qf +INNER JOIN dbo.ReportPrintTicket AS prt + ON qf.QuoteType = dbo.f_prt_getParameter ( 'QuoteType', prt.Chiave , '&') + AND qf.CodQuote = dbo.f_prt_getParameter ( 'CodQuote' , prt.Chiave , '&') + AND qf.QuoteRev = dbo.f_prt_getParameter ( 'QuoteRev' , prt.Chiave +'&' , '&') + AND prt.Ticket = @Ticket + + +/* OLD VERSION +WITH Cte AS -- carico i lemmi dei campi che mi servono per la stampa +( +SELECT Lingua, + 'prt1_'+ Lemma AS Lemma, + CASE WHEN @Lingua = 'LB' + THEN Lemma + ELSE Traduzione END + AS Traduzione -- il lemma corrisponde ai campi +FROM Vocabolario +WHERE Lemma IN ( 'ClientName' + ,'CodClient' + ,'CodItem' + ,'ItemDescr' + ,'CodifProfilo' + ,'ClasseMerc' + ,'CodClientAssoc' + ,'ClientNameAssoc' + ,'CodItemGroup' + ,'UnitWeight' + ,'RawMat' + ,'RawMatCost' + ,'RawMatExtraCost' + ,'RawMatFullCost' + ,'RawMatCost' + ,'RawMatExtraCost' + ,'BatchQty' + ,'ProvvCost' + ,'CodInco','TipoDies' + ,'CodDiesGroup' + ,'DiamDies' + ,'DiesPrice' + ,'HoleNumDies' + ,'DiesExpLife' + ,'NumDiesInList' + ,'DiesEOLife' + ,'NumDiesExaust' + ,'CodPlant' + ,'HoleNumDies' + ,'KeyAMIL' + ,'KgTeo' + ,'WSR01' + ,'NumSMED' + ,'MSR01' + ,'NetProd01' + ,'CodPackag' + ,'NetProd04' + ,'QuotaMan' + ,'LivPackage' + ,'LivPackageDet' + ,'PkgDesc' + ,'PRMWeight' + ,'DSR' + ,'PWeight' + ,'PTare' + ,'FSR' + ,'RefCost01' + ,'SellCost01' + ,'EECost' + ,'GasCost' + ,'DiesCost' + ,'RefCost04' + ,'SellCost04' + ,'PackCost' + ,'ProvvCost' + ,'TranspCost' + ,'VC4UG01' + ,'VC4UG04' + ,'SC4UG01' + ,'FVC' + ,'P_FVC' + ,'CPS' + ,'P_CPS' + ,'FC4UG04' + ,'P_FC4UG04' + ,'FullCost' + ,'P_FullCost' + ,'MinPrice' + ,'P_MinPrice' + ,'Charge' + ,'PriceOff' + ,'P_PriceOff' + ,'NetMar' + ,'FCShield' + ,'PckSur' + ) +), +ctepvt AS ( -- faccio pivot dei lemmi e loro traduzioni + SELECT + Lingua, + prt1_BatchQty, + prt1_Charge, + prt1_ClasseMerc, + prt1_ClientName, + prt1_ClientNameAssoc, + prt1_CodClient, + prt1_CodClientAssoc, + prt1_CodDiesGroup, + prt1_CodifProfilo, + prt1_CodInco, + prt1_CodItem, + prt1_CodItemGroup, + prt1_CodPackag, + prt1_CodPlant, + prt1_CPS, + prt1_DiamDies, + prt1_DiesCost, + prt1_DiesEOLife, + prt1_DiesExpLife, + prt1_DiesPrice, + prt1_DSR, + prt1_EECost, + prt1_FC4UG04, + prt1_FCShield, + prt1_FSR, + prt1_FullCost, + prt1_FVC, + prt1_GasCost, + prt1_HoleNumDies, + prt1_ItemDescr, + prt1_KeyAMIL, + prt1_KgTeo, + prt1_LivPackage, + prt1_LivPackageDet, + prt1_MinPrice, + prt1_MSR01, + prt1_NetMar, + prt1_NetProd01, + prt1_NetProd04, + prt1_NumDiesExaust, + prt1_NumDiesInList, + prt1_NumSMED, + prt1_P_CPS, + prt1_P_FC4UG04, + prt1_P_FullCost, + prt1_P_FVC, + prt1_P_MinPrice, + prt1_P_PriceOff, + prt1_PackCost, + prt1_PckSur, + prt1_PkgDesc, + prt1_PriceOff, + prt1_PRMWeight, + prt1_ProvvCost, + prt1_PTare, + prt1_PWeight, + prt1_QuotaMan, + prt1_RawMat, + prt1_RawMatCost, + prt1_RawMatExtraCost, + prt1_RawMatFullCost, + prt1_RefCost01, + prt1_RefCost04, + prt1_SC4UG01, + prt1_SellCost01, + prt1_SellCost04, + prt1_TipoDies, + prt1_TranspCost, + prt1_UnitWeight, + prt1_VC4UG01, + prt1_VC4UG04, + prt1_WSR01 + FROM ( SELECT * FROM cte + WHERE Lemma Like 'prt1%' ) AS tab -- al momento non serve ma se mettiamo i lemmi separati con prt1_ in vocabolario + PIVOT ( MIN ( Traduzione ) -- possiamo semplicemente sostituire la tab vocabolario alla cte + FOR Lemma IN ( + prt1_BatchQty, + prt1_Charge, + prt1_ClasseMerc, + prt1_ClientName, + prt1_ClientNameAssoc, + prt1_CodClient, + prt1_CodClientAssoc, + prt1_CodDiesGroup, + prt1_CodifProfilo, + prt1_CodInco, + prt1_CodItem, + prt1_CodItemGroup, + prt1_CodPackag, + prt1_CodPlant, + prt1_CPS, + prt1_DiamDies, + prt1_DiesCost, + prt1_DiesEOLife, + prt1_DiesExpLife, + prt1_DiesPrice, + prt1_DSR, + prt1_EECost, + prt1_FC4UG04, + prt1_FCShield, + prt1_FSR, + prt1_FullCost, + prt1_FVC, + prt1_GasCost, + prt1_HoleNumDies, + prt1_ItemDescr, + prt1_KeyAMIL, + prt1_KgTeo, + prt1_LivPackage, + prt1_LivPackageDet, + prt1_MinPrice, + prt1_MSR01, + prt1_NetMar, + prt1_NetProd01, + prt1_NetProd04, + prt1_NumDiesExaust, + prt1_NumDiesInList, + prt1_NumSMED, + prt1_P_CPS, + prt1_P_FC4UG04, + prt1_P_FullCost, + prt1_P_FVC, + prt1_P_MinPrice, + prt1_P_PriceOff, + prt1_PackCost, + prt1_PckSur, + prt1_PkgDesc, + prt1_PriceOff, + prt1_PRMWeight, + prt1_ProvvCost, + prt1_PTare, + prt1_PWeight, + prt1_QuotaMan, + prt1_RawMat, + prt1_RawMatCost, + prt1_RawMatExtraCost, + prt1_RawMatFullCost, + prt1_RefCost01, + prt1_RefCost04, + prt1_SC4UG01, + prt1_SellCost01, + prt1_SellCost04, + prt1_TipoDies, + prt1_TranspCost, + prt1_UnitWeight, + prt1_VC4UG01, + prt1_VC4UG04, + prt1_WSR01 ) ) AS pvt +) +SELECT + -- chiave + Vers + ,QuoteType + ,CodQuote + ,QuoteRev + -- valori + ,BatchQty + ,Charge + ,ClasseMerc + ,ClientName + ,ClientNameAssoc + ,CodClient + ,CodClientAssoc + ,CodDiesGroup + ,CodifProfilo + ,CodInco + ,CodItem + ,CodItemGroup + ,CodPackag + ,CodPlant + ,CPS + ,DiamDies + ,DiesCost + ,DiesEOLife + ,DiesExpLife + ,DiesPrice + ,DSR + ,EECost + ,FC4UG01 + ,FC4UG04 + ,FCShield + ,FSR + ,FullCost + ,FVC + ,GasCost + ,HoleNumDies + ,IdxQState + ,ItemDescr + ,KeyAM + ,KeyAMIL + ,KgTeo + ,LivPackage + ,LivPackageDett + ,MinPrice + ,MSR01 + ,NetMar + ,NetProd01 + ,NetProd04 + ,Note + ,NumDiesExaust + ,NumDiesInList + ,NumSMED + ,OH4UG01 + ,P_CPS + ,P_FC4UG04 + ,P_FullCost + ,P_FVC + ,P_MinPrice + ,P_PriceOff + ,PackCost + ,PckSur + ,PkgDesc + ,PriceOff + ,PRMWeight + ,ProvvCost + ,PTare + ,PWeight + ,QuotaMan + ,RawMat + ,RawMatCost + ,RawMatExtraCost + ,RawMatFullCost + ,RefCost01 + ,RefCost04 + ,SC4UG01 + ,SellCost01 + ,SellCost04 + ,TipoDies + ,TranspCost + ,UnitWeight + ,VC4UG01 + ,VC4UG04 + ,WSR01 + -- lemmi x traduzione etichette campi + ,ctepvt.* +FROM dbo.v_QuoteFull_Q +INNER JOIN ctepvt +-- ON ctepvt.Lingua = 'EN' -- qui va messa la variabile della lingua di stampa +-- ON ctepvt.Lingua = @Lingua -- 'EN' -- qui va messa la variabile della lingua di stampa +ON ctepvt.Lingua = CASE WHEN @Lingua = 'LB' -- se richiede le Label dei campi estraggo i lemmi in inglese + THEN 'EN' + ELSE @Lingua + END +*/ + +END +GO +PRINT N'Creating [dbo].[stp_QFC_creaListino]...'; + + +GO + + + +-- ============================================= +-- STORED PROCEDURE stp_QFC_creaListino +-- +-- Author: Steamware +-- Mod date: 2014.05.26 +-- Description: crea un nuovo listino di costi +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QFC_creaListino] +( + @RawMatCost DECIMAL(18,6) = 2, + @BatchQty INT = 1000 +) +AS + +SET NOCOUNT ON + +-- questo è l'elenco delle cose da processare, in temp table / Cte x "scorrere" tutto? +SELECT DISTINCT + + CONVERT(CHAR(8), GETDATE(), 112) AS DateList + , die.CodItem AS CodItem + , CASE WHEN pl.RawMat = '' -- al momento li escludo perchè poi non ho dati sugli scarti + THEN '6060' + ELSE pl.RawMat + END AS RawMat + , @RawMatCost AS RawMatCost + , rm.ExtraMatCost AS RawMatExtraCost + , @BatchQty AS batchQty + , 'EXW' AS CodInco + +-- 'C' AS QuoteType +-- , '' AS CodClient --'' / '05000000001' in alternativa come default + +FROM dbo.DiesDet AS die + +INNER JOIN dbo.ProductionLog AS pl + ON die.CodDies = pl.CodDies + +INNER JOIN dbo.RawMatDet AS rm + ON pl.RawMat = rm.RawMat + +INNER JOIN dbo.TabProdSc AS sc -- escludo record che non hanno dati di scarto produzione + ON sc.KeyAM = ( die.CodItem + '-' + pl.RawMat) + +WHERE ( pl.RawMat <> '' AND pl.RawMat IS NOT NULL ) -- escludo righe di produzione senza RawMat ( es. fermi o altro ) +-- AND ( die.ActLife <> 0 ) -- escludo matrici senza dati ( es. vecchie matrici senza dati attuali o nuove che non hanno ancora prodotto ) + +--AND die.CodItem = '3DI05194' +ORDER BY die.CodItem + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_delete]...'; + + +GO + + +-- ============================================= +-- Author: Steamware +-- Create date: 2013.01.23 +-- Description: elimina record QuoteList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_delete] +( + @QuoteType_orig CHAR(1) = 'Q', + @CodQuote_orig BIGINT = 0, + @QuoteRev_orig INT = 0 +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + + DELETE + FROM QuoteFull_Q + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + + DELETE + FROM QuoteFull_S + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteFull_R + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteWorkExt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteOC + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteRM + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + DELETE + FROM QuoteList + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + +COMMIT TRAN + + +RETURN +GO +PRINT N'Creating [ext].[stp_mergePackage2ItemClient]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in Package2ItemClient da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2ItemClient] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2ItemClient AS Target + USING ( + --SELECT dd.CodItem, plr.CodClient, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + SELECT + dd.CodItem + , pl.CodClient + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM dbo.ProductionLog pl + INNER JOIN dbo.DiesDet dd ON pl.CodDies=dd.CodDies + + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodClient, pl.CodPackag + + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodClient, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2PackageClient AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2Item]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2Item] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2Item AS Target + USING ( + --SELECT dd.CodItem, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY dd.CodItem, plr.CodPackag + SELECT + dd.CodItem + , pl.CodPackag + , SUM(QtyOUT) AS TotQta + -- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- dati produttività imballo + , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY dd.CodItem, pl.CodPackag + ) + AS Source + ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeItemDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in ItemDet da dati ProductionLogRaw/ItemsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeItemDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + --MERGE INTO ItemDet AS Target + --USING (SELECT DISTINCT CodItem FROM ext.ProductionLogRaw) + -- AS Source + --ON Target.CodItem = Source.CodItem + ----WHEN MATCHED THEN + ---- UPDATE SET ClientName = Source.ClientName + --WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, '#### - ' + CodItem, '', 0, '') + --OUTPUT $action INTO @SummaryOfChanges; + select 1 + END + ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + BEGIN + MERGE INTO ItemDet AS Target + USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05 FROM ext.ItemsRaw) + AS Source + ON Target.CodItem = Source.CodItem + WHEN MATCHED THEN + UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup, Class01 = Source.Class01, Class02 = Source.Class02, Class03 = Source.Class03, Class04 = Source.Class04, Class05 = Source.Class05 + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup, Class01, Class02, Class03, Class04, Class05) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeClientDet]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in ClientDet da dati ProductionLogRaw/ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeClientDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ClientsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO ClientDet AS Target + USING (SELECT DISTINCT CodClient FROM ext.ProductionLogRaw) + AS Source + ON Target.CodClient = Source.CodClient + --WHEN MATCHED THEN + -- UPDATE SET ClientName = Source.ClientName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) VALUES (CodClient, '#### - ' + CodClient, '', '', '', '', '', '') + OUTPUT $action INTO @SummaryOfChanges; + + END + ELSE IF @source = 'ClientsRaw' -- carico da anagrafica + BEGIN + MERGE INTO ClientDet AS Target + USING (SELECT DISTINCT CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone FROM ext.ClientsRaw) + AS Source + ON Target.CodClient = Source.CodClient + WHEN MATCHED THEN + UPDATE SET ClientName = Source.ClientName, CodAg = Source.CodAg, ZipCode = Source.ZipCode, City = Source.City, [State] = Source.[State], Nation = Source.Nation, TranspZone = Source.TranspZone + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) VALUES (CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeTranspCostDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.16 +-- Description: Procedura per import dati in ClientDet da dati ProductionLogRaw/ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeTranspCostDet] +( + @source NVARCHAR(20) = 'TranspCostRaw' -- nome della tabella sorgente tra ProductionLogRaw e ClientsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'TranspCostRaw' -- carico da anagrafica + BEGIN + MERGE INTO TranspCostDet AS Target + USING (SELECT DISTINCT TranspZone, TranspCost FROM ext.TranspCostRaw) + AS Source + ON Target.TranspZone = Source.TranspZone + WHEN MATCHED THEN + UPDATE SET TranspCost = Source.TranspCost + WHEN NOT MATCHED BY TARGET THEN + INSERT (TranspZone, TranspCost) VALUES (TranspZone, TranspCost) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2ItemClient_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.27 +-- Description: Procedura per import dati in Package2ItemClient da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2ItemClient_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2ItemClient AS Target + -- USING ( + -- SELECT dd.CodItem, plr.CodClient, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodClient, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2PackageClient AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2]...'; + + +GO + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2] +( + @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw + @dateFrom DATETIME, -- data da cui iniziare a caricare + @dateTo DATETIME -- data fino a cui caricare +) +AS +BEGIN + SET NOCOUNT ON; + + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLog' -- carico da tracciato produzione + BEGIN + MERGE INTO Package2 AS Target + USING ( + --SELECT plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + --FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + --GROUP BY plr.CodPackag + SELECT + pl.CodPackag + , SUM(QtyOUT) AS TotQta +-- , COUNT(*) AS NumEv + , SUM(QtyOUT) / COUNT(*) AS PesoMedio + , SUM(QtyEXT) / COUNT(*) AS TaraMedia + + -- dati produttività imballo + , ROUND(SUM(QtyOUT * QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb + -- , SUM(QtyOUT) AS TotOut -- unificata a TotQta + , SUM(Duration) AS Durata + FROM ProductionLog pl + INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum = '04' + AND pl.okPr = 1 AND pl.okQM = 1 + AND ISNULL(pl.CodPackag, '') <> '' -- cmq filtro righe con package VUOTO + AND pl.EventStart BETWEEN @dateFrom AND @dateTo + GROUP BY pl.CodPackag + ) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET TotQta = Source.TotQta + , [Weight] = Source.PesoMedio + , Tare = Source.TaraMedia + , NumImb = Source.NumImb + , Durata = Source.Durata + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, TotQta, [Weight], Tare, NumImb, Durata) + VALUES (CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) + WHEN NOT MATCHED BY SOURCE THEN + DELETE + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO Item2Package AS Target + -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + -- AS Source + -- ON Target.CodItem = Source.CodItem + -- WHEN MATCHED THEN + -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_filterProductionLogRow]...'; + + +GO + + +-- ============================================= +-- Author: +-- Create date: 2013.11.29 +-- Description: Procedura per pulizia dati della tabella ext.ProductionLogRaw +-- +-- Use: +-- EXECUTE ext.stp_filterProductionLogRow 0 -- selezione record +-- EXECUTE ext.stp_filterProductionLogRow 1 -- cancellazione record +-- +-- SELECT * FROM tmp.ExcludeCondFilter -- Tabella con i filtri +-- SELECT * FROM ext.ProductionLogRaw_KO -- Tabella dove eseguo delete +-- +-- ============================================= +CREATE PROCEDURE [ext].[stp_filterProductionLogRow] +( + @flgDelete AS TINYINT = 0 -- 0 = solo select 1 = fa delete +) +AS +BEGIN + +-- DECLARE @flgDelete AS TINYINT = 1; -- 0 + + DECLARE @Sql AS NVARCHAR(MAX) = ''; + DECLARE @TotRighe AS INT = 0; + DECLARE @Riga AS INT = 1; + DECLARE @WhereCond AS NVARCHAR(4000); + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable + + -- creo sql di base x select o delete + IF @flgDelete = 0 -- voglio fare solo select + SET @Sql = 'SELECT * FROM ext.ProductionLogRaw WHERE 1=0' -- per test + ELSE + SET @Sql = 'DELETE FROM ext.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO ext.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat, CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags ) + WHERE 1=0' + + -- carico in tabella i filtri ( record da cancellare ) + SELECT ROW_NUMBER() OVER ( ORDER BY TableName, FieldName) AS Riga, * + INTO #tmpTable + FROM tmp.ExcludeCondFilter + WHERE TableName = 'ProductionLogRaw' + + SET @TotRighe = @@ROWCOUNT; + + -- accodo le condizioni di where allo statement iniziale ( collegate con OR ) + IF @TotRighe > 0 + BEGIN + WHILE @Riga <= @TotRighe + BEGIN + SELECT @WhereCond = WhereCond FROM #tmpTable WHERE Riga = @Riga + + SET @Sql = @Sql + ' OR ' + @WhereCond; + SET @Riga = @Riga + 1; + END + END + + -- Ritorno la select eseguita + SELECT @Sql + -- ======================================================= + -- Eseguo la select/delete e ritorno i record elaborati + -- ======================================================= + EXEC sp_executesql @Sql + SELECT @@ROWCOUNT + +-- SELECT * FROM ext.ProductionLogRaw_KO + + IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL + DROP TABLE #tmpTable +END +GO +PRINT N'Creating [ext].[stp_mergePackagDet]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in PackagDet da dati ProductionLogRaw/PackagRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackagDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO PackagDet AS Target + USING (SELECT DISTINCT CodPackag FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPackag = Source.CodPackag + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, PackagDesc, RMCost, RMWeight) VALUES (CodPackag, '#### - ' + CodPackag, 0, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + ELSE IF @source = 'PackagRaw' -- carico da anagrafica + BEGIN + MERGE INTO PackagDet AS Target + USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight FROM ext.PackagRaw) + AS Source + ON Target.CodPackag = Source.CodPackag + WHEN MATCHED THEN + UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPackag, PackagDesc, RMCost, RMWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeDiesGroupDet]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.08 +-- Description: Procedura per import dati in DiesDet da dati DiesGroupRaw +-- Il caricamento principale avviene tramite DiesRaw, questa +-- serve solo per completare i dati mancanti +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeDiesGroupDet] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + SET XACT_ABORT ON + + BEGIN TRAN + + -- vado ad aggiornare i dati dei gruppi di matrici SOLO x i campi <> 0 ( li ritengo come non passati ) + MERGE INTO dbo.DiesGroupDet AS Target + USING ( SELECT * FROM ext.DiesGroupRaw ) + AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET Price = CASE Source.Price WHEN 0 THEN Target.Price ELSE Source.Price END + , QtyTot = CASE Source.QtyTot WHEN 0 THEN Target.QtyTot ELSE Source.QtyTot END + , QtyEOL = CASE Source.QtyEOL WHEN 0 THEN Target.QtyEOL ELSE Source.QtyEOL END + , ExpLife = CASE Source.ExpLife WHEN 0 THEN Target.ExpLife ELSE Source.ExpLife END + , EOLLife = CASE Source.EOLLife WHEN 0 THEN Target.EOLLife ELSE Source.EOLLife END + , DateMod = GETDATE() + , UserMod = 'UPDATE_DiesGroupRaw' + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod, UserMod ) + VALUES ( Source.CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'INSERT_DiesGroupRaw' ) +-- VALUES ( CodDiesGroup, 0, 1, 0, 0.1, 0.1 ) -- mi da errori in calcoli successivi altrimenti con 0 a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + COMMIT TRAN + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeAgentsDet]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in AgentsDet da dati ClientsRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeAgentsDet] +( + @source NVARCHAR(20) = 'ClientsRaw' -- nome della tabella sorgente tra ProductionLogRaw e AgentssRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ClientsRaw' -- carico da anagrafica + BEGIN + MERGE INTO AgentsDet AS Target + USING (SELECT DISTINCT CodAg FROM ext.ClientsRaw) + AS Source + ON Target.CodAg = Source.CodAg + --WHEN MATCHED THEN + -- UPDATE SET AgentsName = Source.AgentsName, CodAg = Source.CodAg, ZipCode = Source.ZipCode, City = Source.City, [State] = Source.[State], Nation = Source.Nation + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodAg, Firstname, Lastname, QuotaProvvAg) VALUES (CodAg, '#### - '+ CodAg, '#### - ' + CodAg, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_updateProductionLog]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in ProductionLog da dati ProductionLogRaw +-- +-- ATTENZIONE: dato l'intervallo temporale in ext.ProductionLogRaw eventuali dati precedenti in dbo.ProductionLog saranno eliminati +-- ============================================= +CREATE PROCEDURE [ext].[stp_updateProductionLog] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @deleted INT = 0 + ,@inserted INT = 0 + ,@fromDate DATETIME = GETDATE() + ,@toDate DATETIME = GETDATE() + + -- primo step: calcolo inizio/fine periodo... + SELECT @fromDate=MIN(EventStart), @toDate=MAX(EventStart) FROM ext.ProductionLogRaw + + + -- secondo step: elimino dal tracciato tutti i dati dal periodo indicato + DELETE FROM dbo.ProductionLog + WHERE EventStart BETWEEN @fromDate AND @toDate + + SELECT @deleted = ISNULL(@@ROWCOUNT,0) + + -- inserisco i nuovi dati + INSERT INTO dbo.ProductionLog + SELECT * FROM ext.ProductionLogRaw + + SELECT @inserted = ISNULL(@@ROWCOUNT,0) + + -- riporto in output quanto eliminato/inserito + SELECT @deleted as RecDeleted, @inserted as RecInserted + +END +GO +PRINT N'Creating [ext].[stp_mergeRawMat]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in PackagDet da dati ProductionLogRaw/PackagRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeRawMat] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO RawMatDet AS Target + USING (SELECT DISTINCT RawMat FROM ext.ProductionLogRaw) + AS Source + ON Target.RawMat = Source.RawMat + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (RawMat, ProcCost, ProcYield, CSR) VALUES (RawMat, 0, 0, 0) + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2 AS Target + -- USING ( + -- SELECT plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, TotQty, [Weight], Tare) VALUES (CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePackage2Item_OLD]...'; + + +GO + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.15 +-- Description: Procedura per import dati in Package2Item da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePackage2Item_OLD] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw +) +AS +BEGIN + SET NOCOUNT ON; + + + ---- Create a temporary table variable to hold the output actions. + --DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- -- import con MERGE... verifico tipo di caricamento richiesto! + --IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + -- BEGIN + -- MERGE INTO Package2Item AS Target + -- USING ( + -- SELECT dd.CodItem, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv + -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio + -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia + -- FROM ext.ProductionLogRaw plr + -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies + -- WHERE ISNULL(plr.CodPackag, '') <> '' + -- GROUP BY dd.CodItem, plr.CodPackag + -- ) + -- AS Source + -- ON Target.CodItem = Source.CodItem AND Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET TotQty = Source.TotQta + -- , [Weight] = Source.PesoMedio + -- , Tare = Source.TaraMedia + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodItem, CodPackag, TotQty, [Weight], Tare) VALUES (CodItem, CodPackag, TotQta, PesoMedio, TaraMedia) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + ----ELSE IF @source = 'ItemsRaw' -- carico da anagrafica + ---- BEGIN + ---- MERGE INTO Item2Package AS Target + ---- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) + ---- AS Source + ---- ON Target.CodItem = Source.CodItem + ---- WHEN MATCHED THEN + ---- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup + ---- WHEN NOT MATCHED BY TARGET THEN + ---- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) + ---- OUTPUT $action INTO @SummaryOfChanges; + + ---- END + + ---- Query the results of the table variable. + --SELECT Change, COUNT(*) AS CountPerChange + --FROM @SummaryOfChanges + --GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeCost2Plant]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in Cost2Plant da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeCost2Plant] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO Cost2Plant AS Target + USING (SELECT DISTINCT CodPlant, ProcessNum FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPlant = Source.CodPlant + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPlant, ProcessNum, FC, VC, OH, SC, QuotaPlantStd, QuotaManStd) VALUES (CodPlant, ProcessNum, 0,0,0,0,1,1 ) --> i valori sono stati caricati a mano??? + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeDiesDet]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in DiesDet da dati ProductionLogRaw/DiesRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeDiesDet] + +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + SET XACT_ABORT ON + + BEGIN tran + + -- ======================================= + -- ora aggiungiamo eventuali item mancanti + -- ======================================= + MERGE INTO ItemDet AS Target + USING (SELECT DISTINCT CodItem FROM ext.DiesRaw) + AS Source + ON Target.CodItem = Source.CodItem + --WHEN MATCHED THEN + -- UPDATE SET ClientName = Source.ClientName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, '#### - ' + CodItem, '', 0, '') + OUTPUT $action INTO @SummaryOfChanges; + + -- ================================================= + -- Carico i dati dei GRUPPI DI MATRICI ( DiesGroupDet ) mancanti + -- ================================================= + MERGE INTO dbo.DiesGroupDet AS Target + USING ( + SELECT CodDiesGroup + , ISNULL ( AVG( Price ),0) AS Price -- prezzo medio ( valori nulli non considerati ) + , COUNT (*) AS QtyTot -- N. Matrici nel gruppo + , COUNT ( CASE Active WHEN 0 THEN 1 END ) AS QtyEOL -- Qta Matrici rottamate + , ISNULL( AVG( ExpLife ), 0 ) AS ExpLife -- Vita stimata matrice ( iniziale ) + , ISNULL( AVG ( CASE WHEN Active = 0 AND ActLife > 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG + FROM ext.DiesRaw + GROUP BY CodDiesGroup + ) AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + --WHEN MATCHED THEN + -- UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot + -- , QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + -- , DateMod = GETDATE(), UserMod = 'IMPORT_DiesRaw' + + WHEN NOT MATCHED BY TARGET THEN + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod ) + VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesRaw' ) -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + OUTPUT $action INTO @SummaryOfChanges; + + -- ======================================= + -- ora carico i dati delle singole matrici + -- ======================================= + MERGE INTO DiesDet AS Target + USING (SELECT CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active FROM ext.DiesRaw) + AS Source + ON Target.CodDies = Source.CodDies + WHEN MATCHED THEN + UPDATE SET HoleNum = Source.HoleNum, CodItem = Source.CodItem, CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, ExpLife = Source.ExpLife, ActLife = Source.ActLife, Active = Source.Active + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active) VALUES (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active) + OUTPUT $action INTO @SummaryOfChanges; + + -- ================================================= + -- Aggiorno i dati dei GRUPPI DI MATRICI ( DiesGroupDet ) + -- con tutti i dati presenti in dbo.DiesDet ( nel caso di aggiornamento parziale ) + -- ================================================= + MERGE INTO dbo.DiesGroupDet AS Target + USING ( + SELECT CodDiesGroup + , ISNULL ( AVG( Price ),0) AS Price -- prezzo medio ( valori nulli non considerati ) + , COUNT (*) AS QtyTot -- N. Matrici nel gruppo + , COUNT ( CASE Active WHEN 0 THEN 1 END ) AS QtyEOL -- Qta Matrici rottamate + , ISNULL( AVG( ExpLife ), 0 ) AS ExpLife -- Vita stimata matrice ( iniziale ) + , ISNULL( AVG ( CASE WHEN Active = 0 AND ActLife > 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG + FROM dbo.DiesDet + GROUP BY CodDiesGroup + ) AS Source + ON Target.CodDiesGroup = Source.CodDiesGroup + WHEN MATCHED THEN + UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot + , QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + , DateMod = GETDATE(), UserMod = 'UPDATE_DiesDet' + + WHEN NOT MATCHED BY TARGET THEN -- nel caso siano mancanti + INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod ) + VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesDet' ) + OUTPUT $action INTO @SummaryOfChanges; + + ---- a questo punto calcolo il VERO update dalle inforamzioni di dbo.DiesDet --> dbo.DiesGroupDet + --MERGE INTO dbo.DiesGroupDet AS Target + --USING ( + -- SELECT coddiesgroup, + -- Avg(Isnull(price, 0)) AS Price, + -- Count(*) AS QtyTot, + -- Count(*) - Sum(Active) AS QtyEOL, + -- Avg(Isnull(ExpLife, 0.1)) AS ExpLife, -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife + -- Sum(Isnull(ActLife * (1 - Active), 0)) / (Count(*) - Sum(Active)) AS EOLLife + -- FROM dbo.DiesDet + -- WHERE ActLife > 5000 + -- GROUP BY CodDiesGroup + -- HAVING Count(*) > Sum(Active) -- ci siano rottamate + -- ) + -- AS Source + --ON Target.CodDiesGroup = Source.CodDiesGroup + --WHEN MATCHED THEN + -- UPDATE SET Price = Source.Price, QtyTot = Source.QtyTot, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife + --OUTPUT $action INTO @SummaryOfChanges; + + COMMIT tran + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergePlantsDet]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.03 +-- Description: Procedura per import dati in PlantsDet da dati ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergePlantsDet] +( + @source NVARCHAR(20) = 'ProductionLogRaw' -- nome della tabella sorgente tra ProductionLogRaw e PackagRaw +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'ProductionLogRaw' -- carico da tracciato produzione + BEGIN + MERGE INTO PlantsDet AS Target + USING (SELECT DISTINCT CodPlant FROM ext.ProductionLogRaw) + AS Source + ON Target.CodPlant = Source.CodPlant + --WHEN MATCHED THEN + -- UPDATE SET PackagName = Source.PackagName + WHEN NOT MATCHED BY TARGET THEN + INSERT (CodPlant, Descript) VALUES (CodPlant, 'Plant - ' + CodPlant) + OUTPUT $action INTO @SummaryOfChanges; + + END + --ELSE IF @source = 'PackagRaw' -- carico da anagrafica + -- BEGIN + -- MERGE INTO PackagDet AS Target + -- USING (SELECT CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight FROM ext.PackagRaw) + -- AS Source + -- ON Target.CodPackag = Source.CodPackag + -- WHEN MATCHED THEN + -- UPDATE SET PackagDesc = Source.PackagDesc, RMCost = Source.RMCost, RMWeight = Source.RMWeight, Tare = Source.Tare, FullWeight = Source.FullWeight + -- WHEN NOT MATCHED BY TARGET THEN + -- INSERT (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) VALUES (CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight) + -- OUTPUT $action INTO @SummaryOfChanges; + + -- END + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [ext].[stp_mergeOrdersHist]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.22 +-- Description: Procedura per import dati in OrdersHist da dati OrdersHistRaw +-- ============================================= +CREATE PROCEDURE [ext].[stp_mergeOrdersHist] +( + @source NVARCHAR(20) = 'OrdersHistRaw' -- nome della tabella sorgente +) +AS +BEGIN + SET NOCOUNT ON; + + -- Create a temporary table variable to hold the output actions. + DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); + + -- import con MERGE... verifico tipo di caricamento richiesto! + IF @source = 'OrdersHistRaw' -- carico da tracciato produzione + BEGIN + + MERGE INTO dbo.OrdersHist AS Target + USING( + SELECT OrdNum, + OrdRow, + OrdDate, + CodClient, + CodItem, + RawMat, + RawMatCost, + BatchQty, + CodInco, + OrdPrice, + RawMatExtraCost, + PriceOff, + OrdQty, + ProvvCost + FROM ext.OrdersHistRaw ) AS Source + ON Target.Ordnum = Source.Ordnum AND Target.Ordrow = Source.Ordrow + + -- non faccio aggiornamento dei dati oppure potrei farlo solo per le righe non elaborate cioè con Codquote non valorizzato + --WHEN MATCHED + --THEN UPDATE SET + -- Orddate = Source.OrdDate, + -- Codclient = Source.CodClient, + -- Coditem = Source.CodItem, + -- Rawmat = Source.RawMat, + -- Rawmatcost = Source.RawMatCost, + -- Batchqty = Source.BatchQty, + -- Codinco = Source.CodInco, + -- Ordprice = Source.OrdPrice, + -- Quotetype = Source.QuoteType, + -- Codquote = Source.CodQuote, + -- Quoterev = Source.QuoteRev, + -- Endcalc = Source.EndCalc + + WHEN NOT MATCHED BY TARGET + THEN INSERT ( OrdNum, + OrdRow, + OrdDate, + CodClient, + CodItem, + RawMat, + RawMatCost, + BatchQty, + CodInco, + OrdPrice, + RawMatExtraCost, + PriceOff, + OrdQty, + ProvvCost + --,Quotetype + --,Codquote + --,Quoterev + --,Endcalc + ) + VALUES( OrdNum, OrdRow, OrdDate, CodClient, CodItem, RawMat, RawMatCost, BatchQty, CodInco, OrdPrice, RawMatExtraCost, PriceOff, OrdQty, ProvvCost ) -- , QuoteType, CodQuote, QuoteRev, EndCalc ) + OUTPUT $action INTO @SummaryOfChanges; + END + + -- aggiorno indici tabella ( attenzione durata per tabelle grandi ) + ALTER INDEX ALL ON dbo.OrdersHist + REBUILD WITH ( FILLFACTOR = 100, SORT_IN_TEMPDB = ON ) ; -- ,STATISTICS_NORECOMPUTE = ON ) + + -- aggiorno statistiche tabella + UPDATE STATISTICS dbo.OrdersHist WITH FULLSCAN; + + -- Query the results of the table variable. + SELECT Change, COUNT(*) AS CountPerChange + FROM @SummaryOfChanges + GROUP BY Change; +END +GO +PRINT N'Creating [tmp].[importItemsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importItemsRaw] +( + @fileType NVARCHAR(50) = 'ItemsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ItemsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ItemsRaw + + -- carico dati bulk! + BULK INSERT tmp.ItemsRaw + FROM 'e:\test\ItemsRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorItems.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorItems.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.ItemsRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertTranspCostRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x TranspCostRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertTranspCostRaw] +( + @fileType NVARCHAR(50) = 'TranspCostRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'TranspCostRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.TranspCostRaw + + -- inserisco con cast valori... + INSERT ext.TranspCostRaw + WITH (TABLOCK) + (TranspZone, TranspCost) + SELECT + TranspZone, + MAX(CAST( CAST( REPLACE( '0' + TranspCost,',','.' )AS float )AS decimal( 18,9 ))) AS TranspCost + FROM tmp.TranspCostRaw + GROUP BY TranspZone + + SELECT COUNT(*) as RecordsIn FROM ext.TranspCostRaw + END + +END +GO +PRINT N'Creating [tmp].[importDiesGroupRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importDiesGroupRaw] +( + @fileType NVARCHAR(50) = 'DiesGroupRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesGroupRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.DiesGroupRaw + + -- carico dati bulk! + BULK INSERT tmp.DiesGroupRaw + FROM 'e:\test\DiesGroupRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDiesGroup.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDiesGroup.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.DiesGroupRaw + + END + +END +GO +PRINT N'Creating [tmp].[importTranspCostRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.16 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importTranspCostRaw] +( + @fileType NVARCHAR(50) = 'TranspCostRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'TranspCostRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.TranspCostRaw + + -- carico dati bulk! + BULK INSERT tmp.TranspCostRaw + FROM 'e:\test\TranspCostRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorTranspCost.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorTranspCost.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.TranspCostRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertDiesRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per conversione e tipizzazione dati da tmp a ext x DiesRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertDiesRaw] +( + @fileType NVARCHAR(50) = 'DiesRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.DiesRaw + + -- inserisco con cast valori... + INSERT ext.DiesRaw + WITH (TABLOCK) + ( CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active ) + SELECT + CodDies, + CAST(ISNULL(HoleNum,0) AS INT) AS HoleNum, + CodItem, + CodDiesGroup, + CAST( CAST( REPLACE( '0' + Price,',','.' )AS float )AS decimal( 9,3 )) AS Price, + CAST( CAST( REPLACE( '0' + ExpLife,',','.' )AS float )AS decimal( 9,2 )) AS ExpLife, + CAST( CAST( REPLACE( '0' + ActLife,',','.' )AS float )AS decimal( 9,2 )) AS ActLife, + CAST(ISNULL(Active,0) AS INT) AS Active + FROM tmp.DiesRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.DiesRaw + END + +END +GO +PRINT N'Creating [tmp].[convertClientsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ClientsRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertClientsRaw] +( + @fileType NVARCHAR(50) = 'ClientsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ClientsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ClientsRaw + + -- inserisco con cast valori... + INSERT ext.ClientsRaw + WITH (TABLOCK) + ( CodClient, ClientName, CodAg, ZipCode, City, [State], Nation, TranspZone) + SELECT + CodClient, + ClientName, + CodAg, + ZipCode, + City, + [State], + Nation, + TranspZone + FROM tmp.ClientsRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ClientsRaw + END + +END +GO +PRINT N'Creating [tmp].[importDiesRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.12.02 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importDiesRaw] +( + @fileType NVARCHAR(50) = 'DiesRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.DiesRaw + + -- carico dati bulk! + BULK INSERT tmp.DiesRaw + FROM 'e:\test\DiesRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDies.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorDies.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.DiesRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertItemsRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ItemsRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertItemsRaw] +( + @fileType NVARCHAR(50) = 'ItemsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ItemsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ItemsRaw + + -- inserisco con cast valori... + INSERT ext.ItemsRaw + WITH (TABLOCK) + ( CodItem, ItemDescr, UnitWeight, CodPlant, CodItemGroup, Class01, Class02, Class03, Class04, Class05 ) + SELECT DISTINCT + CodItem, + ItemDescr, + CAST( CAST( REPLACE( '0' + UnitWeight,',','.' )AS float )AS decimal( 9,3 )) AS UnitWeight, + CodPlant, + CodItemGroup, + Class01, + Class02, + Class03, + Class04, + Class05 + FROM tmp.ItemsRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ItemsRaw + END + +END +GO +PRINT N'Creating [tmp].[convertDiesGroupRaw]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2014.01.08 +-- Description: Procedura per conversione e tipizzazione dati da tmp a ext x DiesGroupRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertDiesGroupRaw] +( + @fileType NVARCHAR(50) = 'DiesGroupRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'DiesGroupRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.DiesGroupRaw + + -- inserisco con cast valori... + INSERT ext.DiesGroupRaw + WITH (TABLOCK) + ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife) + SELECT + CodDiesGroup, + CAST( CAST( REPLACE( '0' + REPLACE(Price,'.',''),',','.' ) AS float )AS decimal( 9,3 )) AS Price, + CAST(ISNULL(QtyTot,0) AS INT) AS QtyTot, + CAST(ISNULL(QtyEOL,0) AS INT) AS QtyEOL, + CAST( CAST( REPLACE( '0' + REPLACE(ExpLife,'.',''),',','.' ) AS float )AS decimal( 9,2 )) AS ExpLife, + CAST( CAST( REPLACE( '0' + REPLACE(EOLLife,'.',''),',','.' ) AS float )AS decimal( 9,2 )) AS EOLLife + FROM tmp.DiesGroupRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.DiesGroupRaw + END + +END +GO +PRINT N'Creating [tmp].[convertPackagRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x PackagRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertPackagRaw] +( + @fileType NVARCHAR(50) = 'PackagRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'PackagRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.PackagRaw + + -- inserisco con cast valori... + INSERT ext.PackagRaw + WITH (TABLOCK) + ( CodPackag, PackagDesc, RMCost, RMWeight, Tare, FullWeight ) + SELECT + CodPackag, + PackagDesc, + CAST( CAST( REPLACE( '0' + RMCost,',','.' )AS float )AS decimal( 9,3 )) AS RMCost, + CAST( CAST( REPLACE( '0' + RMWeight,',','.' )AS float )AS decimal( 9,4 )) AS RMWeight, + CAST( CAST( REPLACE( '0' + Tare,',','.' )AS float )AS decimal( 9,4 )) AS Tare, + CAST( CAST( REPLACE( '0' + FullWeight,',','.' )AS float )AS decimal( 9,4 )) AS FullWeight + FROM tmp.PackagRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.PackagRaw + END + +END +GO +PRINT N'Creating [tmp].[importPackagRaw]...'; + + +GO + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +create PROCEDURE [tmp].[importPackagRaw] +( + @fileType NVARCHAR(50) = 'PackagRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'PackagRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.PackagRaw + + -- carico dati bulk! + BULK INSERT tmp.PackagRaw + FROM 'e:\test\PackagRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorPackag.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorPackag.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.PackagRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertProductionLogRaw]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per conversioen e tipizzazione dati da tmp a ext x ProductionLogRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertProductionLogRaw] +( + @fileType NVARCHAR(50) = 'ProductionLogRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ProductionLogRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.ProductionLogRaw + + -- inserisco con cast valori... + INSERT ext.ProductionLogRaw + WITH (TABLOCK) + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat, CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + + SELECT + dbo.f_dtFromRaw( EventStart ) AS EventStart, -- record nulli sono già stati cancellati + dbo.f_dtFromRaw( EventEnd ) AS EventEnd, -- record nulli sono già stati cancellati + dbo.f_trim(ISNULL(CodPlant ,'')), + dbo.f_trim(ISNULL(ProcessNum ,'')), + dbo.f_trim(ISNULL(NrPos ,'')), + dbo.f_trim(ISNULL(CodDies ,'')), + dbo.f_trim(ISNULL(CodClient ,'')), + dbo.f_trim(ISNULL(OrderNum ,'')), + dbo.f_trim(ISNULL(BatchNum ,'')), + dbo.f_trim(ISNULL(ProcessType,'')), + dbo.f_trim(ISNULL(EventType ,'')), + dbo.f_trim(ISNULL(RawMat ,'')), + dbo.f_trim(ISNULL(CodPackag ,'')), + CAST( CAST( REPLACE( '0' + ISNULL(QtyIN,'') ,',','.' ) AS float ) AS decimal( 18,4 )) AS QtyIN, + CAST( CAST( REPLACE( '0' + ISNULL(QtyOUT,''),',','.' ) AS float ) AS decimal( 18,4 )) AS QtyOUT, + CAST( CAST( REPLACE( '0' + ISNULL(QtyEXT,''),',','.' ) AS float ) AS decimal( 18,4 )) AS QtyEXT, + CAST( ISNULL(NumIN ,'') AS int )AS NumIN, + CAST( ISNULL(NumOUT ,'') AS int )AS NumOUT, + CAST( CAST( REPLACE( '0' + ISNULL(QuotaPlant,''),',','.' ) AS float )AS decimal( 9,4 )) AS QuotaPlant, + CAST( CAST( REPLACE( '0' + ISNULL(QuotaMan,''),',','.' ) AS float )AS decimal( 9,4 )) AS QuotaMan, + dbo.f_trim(ISNULL(Tags ,'')), + okPr, + okQM, + okSc, + okDi + FROM tmp.ProductionLogRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.ProductionLogRaw + END + +END +GO +PRINT N'Creating [tmp].[importProductionLogRaw]...'; + + +GO + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.28 +-- Description: Procedura per import dati in tabelal tmp da file csv +-- +-- TRUNCATE TABLE tmp.ProductionLogRaw_KO +-- +-- ============================================= +CREATE PROCEDURE [tmp].[importProductionLogRaw] +( + @fileType NVARCHAR(50) = 'ProductionLogRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ProductionLogRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ProductionLogRaw + + -- carico dati bulk! + BULK INSERT tmp.ProductionLogRaw + FROM 'e:\test\ProductRaw.csv' + + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorProduct.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorProduct.log', CODEPAGE = '1252') + + -- =============================================================================== + -- pulisco l tabella dai record con chiave duplicata ( se doppi li elimino tutti ) + -- =============================================================================== + SET XACT_ABORT ON; + BEGIN TRAN + + -- salvo i dati con chiave duplicata + INSERT INTO tmp.ProductionLogRaw_KO + SELECT Prod.*, GETDATE() FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- Cancello i record con chiave duplicata + DELETE Prod + WITH (TABLOCK) + FROM tmp.ProductionLogRaw AS Prod + INNER JOIN + ( + SELECT EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + FROM tmp.ProductionLogRaw + GROUP BY EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies + HAVING COUNT(*)>1 + ) AS Dupl ON Prod.EventStart = Dupl.EventStart AND + Prod.EventEnd = Dupl.EventEnd AND + Prod.CodPlant = Dupl.CodPlant AND + Prod.ProcessNum = Dupl.ProcessNum AND + Prod.NrPos = Dupl.NrPos AND + Prod.CodDies = Dupl.CodDies + + -- =============================================================================== + -- pulisco la tabella dai record con date non corrette + -- =============================================================================== + DELETE FROM tmp.ProductionLogRaw + WITH (TABLOCK) + OUTPUT deleted.* INTO tmp.ProductionLogRaw_KO -- salvo i record cancellati in tabella KO + ( EventStart, EventEnd, CodPlant, ProcessNum, NrPos, CodDies, CodClient, OrderNum, BatchNum, ProcessType, EventType, RawMat + , CodPackag, QtyIN, QtyOUT, QtyEXT, NumIN, NumOUT, QuotaPlant, QuotaMan, Tags, okPr, okQM, okSc, okDi ) + WHERE EventStart >= EventEnd + OR CONVERT( BIGINT , EventStart ) + 68000000000000 <= EventEnd -- record che darebbero errore poi nel datediff > 68 anni + OR EventStart IS NULL + OR EventEnd IS NULL + +-- SELECT * FROM tmp.ProductionLogRaw_KO + + --ROLLBACK + COMMIT + + SELECT COUNT(*) AS RecordsIn FROM tmp.ProductionLogRaw + + END +END +GO +PRINT N'Creating [tmp].[importClientsRaw]...'; + + +GO + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Mod. date: 2013.11.29 +-- Description: Procedura per import dati in tabella tmp da file csv +-- ============================================= +CREATE PROCEDURE [tmp].[importClientsRaw] +( + @fileType NVARCHAR(50) = 'ClientsRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'ClientsRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.ClientsRaw + + -- carico dati bulk! + BULK INSERT tmp.ClientsRaw + FROM 'e:\test\ClientsRaw.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorClients.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorClients.log', CODEPAGE = '1252') + + SELECT COUNT(*) as RecordsIn FROM tmp.ClientsRaw + + END + +END +GO +PRINT N'Creating [tmp].[convertOrdersHistRaw]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.22 +-- Description: Procedura per conversione e tipizzazione dati da tmp a ext x OrdersHistRaw +-- ============================================= +CREATE PROCEDURE [tmp].[convertOrdersHistRaw] +( + @fileType NVARCHAR(50) = 'OrdersHistRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'OrdersHistRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE ext.OrdersHistRaw + + -- inserisco con cast valori... + INSERT ext.OrdersHistRaw + WITH (TABLOCK) + ( OrdNum, OrdRow, OrdDate, CodClient, CodItem, RawMat, RawMatCost, BatchQty, CodInco, OrdPrice, RawMatExtraCost, PriceOff, OrdQty, ProvvCost) + SELECT + OrdNum, + OrdRow, + dbo.f_dtFromRaw( OrdDate ) AS OrdDate, + CodClient, + CodItem, + RawMat, + CONVERT( DECIMAL( 18,6 ), CONVERT ( FLOAT , REPLACE( '0' + REPLACE(RawMatCost,'.',''),',','.' ) )) AS RawMatCost, + CONVERT(INT, CONVERT ( FLOAT , REPLACE( '0' + REPLACE(BatchQty,'.',''),',','.' ) )) AS BatchQty, -- lotto + CodInco, + CONVERT( DECIMAL( 18,6 ), CONVERT ( FLOAT , REPLACE( '0' + REPLACE(OrdPrice,'.',''),',','.' ) )) AS OrdPrice, + CONVERT( DECIMAL( 18,6 ), CONVERT ( FLOAT , REPLACE( '0' + REPLACE(RawMatExtraCost,'.',''),',','.' ) )) AS RawMatExtraCost, + CONVERT( DECIMAL( 9,6 ), CONVERT ( FLOAT , REPLACE( '0' + REPLACE(PriceOff,'.',''),',','.' ) )) AS PriceOff, -- trasformazione + CONVERT( INT, CONVERT ( FLOAT , REPLACE( '0' + REPLACE(OrdQty,'.',''),',','.' ) )) AS OrdQty, + CONVERT( DECIMAL( 9,6 ), CONVERT ( FLOAT , REPLACE( '0' + REPLACE(ProvvCost,'.',''),',','.' ) )) AS ProvvCost -- provvigioni + FROM tmp.OrdersHistRaw; + + SELECT COUNT(*) as RecordsIn FROM ext.OrdersHistRaw + END + +END +GO +PRINT N'Creating [tmp].[importOrdersHistRaw]...'; + + +GO +-- ============================================= +-- Author: S.E. Locatelli +-- mod. date: 2014.05.22 +-- Description: Procedura per import dati in tabella tmp da file csv +-- +-- TRUNCATE TABLE [tmp].[OrdersHistRaw] +-- +-- ============================================= +CREATE PROCEDURE [tmp].[importOrdersHistRaw] +( + @fileType NVARCHAR(50) = 'OrdersHistRaw' +) +AS +BEGIN + SET NOCOUNT ON; + + -- per Giancarlo: rendere parametrico con esecuzione sql x poter inserire nei parametri il separatore ed il resto? http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file + + IF @fileType = 'OrdersHistRaw' + BEGIN + -- svuoto tabella temp + TRUNCATE TABLE tmp.OrdersHistRaw + + -- carico dati bulk! + BULK INSERT tmp.OrdersHistRaw + FROM 'e:\test\MarginRep_Import.csv' + WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorOrdersHist.log') + --WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', FIRSTROW = 2, ERRORFILE = 'e:\test\errorProduct.log', CODEPAGE = '1252') + + SELECT COUNT(*) AS RecordsIn FROM tmp.OrdersHistRaw + END +END +GO +PRINT N'Creating [voc].[stp_insNewLemma]...'; + + +GO +/************************************* +* STORED PROCEDURE stp_insNewLemma +* +* inseriemtno lemma vocabolario +* +* mod : 14/05/2012 +* aut : S.E. Locatelli +**************************************/ +CREATE PROCEDURE [voc].[stp_insNewLemma] +( + @lemma NVARCHAR(50), + @traduzione NVARCHAR(500), + @OverWrite CHAR(1) = 'Y' -- Y/N Per forzarne inserimento anche se già presente +) +AS + +-- elimino se c'era già e se richiesto... +IF @OverWrite = 'Y' +BEGIN + DELETE FROM Vocabolario + WHERE lemma = @lemma +END + +-- inserisco x tutte le lingue attive... +INSERT INTO Vocabolario +SELECT lingua, @lemma, @traduzione +FROM Lingue + +SELECT * +FROM Vocabolario +WHERE lemma = @lemma + +RETURN +GO +PRINT N'Creating [voc].[stp_getByLingua]...'; + + +GO + +CREATE PROCEDURE [voc].[stp_getByLingua] +( + @Lingua nvarchar(3) +) +AS + SET NOCOUNT ON; +SELECT Lingua, Lemma, Traduzione +FROM Vocabolario +WHERE (Lingua = @Lingua) +GO +PRINT N'Creating [voc].[stp_getByLinguaLemmaLike]...'; + + +GO + + +/************************************* +* STORED PROCEDURE stp_getByLemmaLike +* +* elenco record da ricerca LIKE su lemma +* +* mod : 2014.04.28 +* aut : S.E. Locatelli +**************************************/ +CREATE PROCEDURE [voc].[stp_getByLinguaLemmaLike] +( + @Lingua NVARCHAR(3), + @search NVARCHAR(50) +) +AS + +SET NOCOUNT ON; +SELECT Lingua, Lemma + ,CASE WHEN @Lingua = 'LB' THEN CONVERT(NVARCHAR(500),Lemma) + ELSE Traduzione END + AS Traduzione -- la traduzione corrisponde ai campi/lemmi x i report +FROM Vocabolario +WHERE (Lemma LIKE @search + '%') + AND ( Lingua = CASE WHEN @Lingua = 'LB' -- se richiede le Label dei campi estraggo i lemmi in inglese + THEN 'EN' + ELSE @Lingua + END ) + +/* OLD +SELECT Lingua, Lemma, Traduzione +FROM Vocabolario +WHERE (Lemma LIKE @search + '%') + AND (Lingua = @Lingua) +*/ +GO +PRINT N'Creating [voc].[stp_updateQuery]...'; + + +GO + +CREATE PROCEDURE [voc].[stp_updateQuery] +( + @Traduzione nvarchar(500), + @Original_Lingua nvarchar(3), + @Original_Lemma nvarchar(50) +) +AS + SET NOCOUNT OFF; +UPDATE [dbo].[Vocabolario] SET [Traduzione] = @Traduzione WHERE ([Lingua] = @Original_Lingua) AND ([Lemma] = @Original_Lemma) +GO +PRINT N'Creating [voc].[stp_upsertLemma]...'; + + +GO +/************************************* +* STORED PROCEDURE stp_upsertLemma +* +* upsert record lemma +* +* mod : 14/05/2012 +* aut : S.E. Locatelli +**************************************/ +create PROCEDURE [voc].[stp_upsertLemma] +( + @Lingua NVARCHAR(3), + @Lemma NVARCHAR(50), + @Traduzione NVARCHAR(500) +) +AS + +-- effettuo merge x upsert! + + MERGE Vocabolario AS target + USING (SELECT @Lingua, @Lemma, @Traduzione) AS source (Lingua, Lemma, Traduzione) + ON (target.Lingua = source.Lingua AND target.Lemma = source.Lemma) + WHEN MATCHED THEN + UPDATE SET Traduzione = source.traduzione + WHEN NOT MATCHED THEN + INSERT (Lingua, Lemma, Traduzione) + VALUES (source.Lingua, source.Lemma, source.Traduzione); + +RETURN +GO +PRINT N'Creating [voc].[stp_voUpdateLemmiReport]...'; + + +GO +-- ============================================= +-- Author: Samuele Locatelli +-- Create date: 2014.05.09 +-- Description: riallinea le traduzioni dei report ai termini corrispondenti a video +-- ============================================= +CREATE PROCEDURE voc.stp_voUpdateLemmiReport +AS +BEGIN + -- SET NOCOUNT ON added to prevent extra result sets from + -- interfering with SELECT statements. + SET NOCOUNT ON; + + -- mostro situazione iniziale + SELECT * + FROM Vocabolario v1 + inner join vocabolario v ON replace(v1.Lemma, 'C2P_prt1_','') = v.Lemma AND v1.Lingua = v.Lingua + WHERE v1.lemma LIKE 'C2P_prt1_%' + + -- update! + UPDATE v1 + SET traduzione = v.traduzione + FROM Vocabolario v1 + INNER JOIN vocabolario v ON replace(v1.Lemma, 'C2P_prt1_','') = v.Lemma AND v1.Lingua = v.Lingua + WHERE v1.lemma LIKE 'C2P_prt1_%' + + + -- mostro situazione finale + SELECT * + FROM Vocabolario v1 + inner join vocabolario v ON replace(v1.Lemma, 'C2P_prt1_','') = v.Lemma AND v1.Lingua = v.Lingua + WHERE v1.lemma LIKE 'C2P_prt1_%' + +END +GO +PRINT N'Creating [dbo].[stp_QL_update]...'; + + +GO + + +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.06.06 +-- Description: aggiorna le tabelle QuoteList con i dati selezionati dalla TabProdSc +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_update] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev INT = 0 +) +AS +BEGIN + + SET NOCOUNT ON; + + -- dichiaro valori da recuperare + DECLARE @strTemp NVARCHAR(50) = '' --stringa temporanea x variabili "locali" + , @valid BIT -- bit validità generico totale + , @validStep BIT -- bit validità generico singolo step + , @errorScore INT -- punteggio errori (1 per errore o anche punti diversi x "Peso", da valutare + , @CodDiesGroup NVARCHAR(50) + , @CodPlant NVARCHAR(50) + , @CodPlantFix NVARCHAR(50) = '' + , @HoleNum INT + + -- ITEM + DECLARE @CodItem NVARCHAR(50) = '' -- cod item + , @ItemDescr NVARCHAR(50) = '' -- descrizione item + , @CodifProfilo NVARCHAR(50) = '' -- Cod. Profilo + , @ClasseMerc NVARCHAR(50) = '' + , @CodClientAssoc NVARCHAR(50) = '' + , @KeyAM NVARCHAR(50) = '' + , @KeyAMI NVARCHAR(50) = '' + , @KeyAMIL NVARCHAR(50) = '' + , @NumSMED INT = 0 -- numero cambi + , @KgTeo DECIMAL(18, 6) = 0 -- kg totali + , @RawMat NVARCHAR(50) + , @ProdTeo DECIMAL(18,6) + , @ScTec DECIMAL(18,6) + , @BatchQty INT + , @MAC_SC DECIMAL(18,6) -- Messa a cento scarto cesoia + , @MAC_ST DECIMAL(18,6) -- Messa a cento scarto tecnico + , @MAC_IN DECIMAL(18,6) -- Messa a cento difettosità all'incestatura + , @MAC_IM DECIMAL(18,6) -- Messa a cento difettosità all'imballo + , @MAC_SC_sim DECIMAL(18,6) = 0 -- Messa a cento scarto cesoia - SIMULAZIONE + , @MAC_ST_sim DECIMAL(18,6) = 0 -- Messa a cento scarto tecnico - SIMULAZIONE + , @MAC_IN_sim DECIMAL(18,6) = 0 -- Messa a cento difettosità all'incestatura - SIMULAZIONE + , @MAC_IM_sim DECIMAL(18,6) = 0 -- Messa a cento difettosità all'imballo - SIMULAZIONE + , @FCR_sim DECIMAL(18,6) = 0 -- Messa a cento complessiva - SIMULAZIONE + , @SSR DECIMAL(9,6) -- percentuale vendita rottame + , @DiesPrice DECIMAL(9,3) -- prezzo matrice + , @DiesEOLife DECIMAL(9,2) -- durata matrice + , @DiesExpLife DECIMAL(9,2) -- durata matrice + , @DiesPriceLife DECIMAL(18,6) -- Price/Life matrice + , @DiesByClass BIT = 0 -- definisce se i dati della matrice siano calcolati puntualmente (0) o per classe (1) + , @OCF01 DECIMAL(18,6) = 0 -- altri costi di fase 01 + , @VCF01 DECIMAL(18,6) = 0 -- costi variabili di fase 01 + , @VCF04 DECIMAL(18,6) = 0 -- costi variabili di fase 04 + , @SellCostF01 DECIMAL(18,6) = 0 -- costo vendita fase 01 + , @SellCostF04 DECIMAL(18,6) = 0 -- costo vendita fase 04 + , @RefCostF01 DECIMAL(18,6) = 0 -- costo rifusione fase 01 + , @RefCostF04 DECIMAL(18,6) = 0 -- costo rifusione fase 04 + -- IMBALLO + DECLARE @CodPackag NVARCHAR(50) = '0' -- codice dell'imballo + , @CodClient NVARCHAR(50) = '' -- codice cliente + , @NumImb DECIMAL(9,6) = 0 -- num imballatori + , @PkgDesc NVARCHAR(50) = '' -- descrizione imballo + , @PRMWeight DECIMAL(9,4) = 0 -- peso dell'imballo + , @PWeight DECIMAL(9,4) = 0 -- peso del pacco + , @PTare DECIMAL(9,4) = 0 -- media delal tara di imballo dichiarata + , @PCost DECIMAL(9,6) = 0 -- costo unitario dell'imballo (al kg) + , @PTareStRatio DECIMAL(9,4) = 0 -- coefficiente di recupero tara/prodotto + , @PTotQta DECIMAL(18,3) = 0 -- Qta Kg Tot Imballati + , @PDurata DECIMAL(18,6) = 0 -- Tempo d'imballaggio + , @PLiv NVARCHAR(50) = '' -- Livello Search dati Imballo + , @PLivDett NVARCHAR(50) = '' -- Key Livello Search Dati Imballo + -- TRASPORTI + DECLARE @TranspZone NVARCHAR(50) = '' -- codice ZONA + , @TranspCost DECIMAL(9,6) = 0 -- costo di trasporto + , @HasTC INT + + -- PROVVIGIONI + DECLARE @Provvig DECIMAL(9,6) -- provvigione agente + + -- default: validità è true! + SET @valid = 1 + -- default: error score è nullo + SET @errorScore = 0 + + -- ================================================= + -- CREAZIONE TEMP TABLE + -- ================================================= + + -- elimino e ricreo #QuoteParam temp table... NON Serve nella stored + --IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + -- DROP TABLE #QuoteParam + + CREATE TABLE #Quoteparam + ( + Quotetype CHAR( 1 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + Codquote BIGINT NOT NULL, + Quoterev INT NOT NULL, + Nump INT IDENTITY( 1,1 ) NOT NULL, + Processnum NVARCHAR( 50 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + Descr NVARCHAR( 50 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + Parameter NVARCHAR( 100 ) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT(''), + --PRIMARY KEY + -- ( QuoteType ASC, CodQuote ASC, QuoteRev ASC ) WITH (PAD_INDEX = ON, FILLFACTOR = 99 ) + ); + + -- oppure creo l'indice successivamente + --CREATE CLUSTERED INDEX #ix_Quoteparam ON #Quoteparam (QuoteType ASC, CodQuote ASC, QuoteRev ASC) + --WITH (PAD_INDEX = ON, FILLFACTOR = 100) + + --CREATE STATISTICS [#ix_QuoteType_CodQuote] ON #Quoteparam ([QuoteType], [CodQuote], [QuoteRev]) + + -- elimino e ricreo ##QuoteWorkInt temp table... + --IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL DROP TABLE #QuoteWorkInt + + CREATE TABLE #QuoteWorkInt + ( + QuoteType CHAR(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + CodQuote BIGINT NOT NULL, + QuoteRev INT NOT NULL, + NumWI INT IDENTITY(1,1) NOT NULL, + ProcessNum NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + CodPlant NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + Class01 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class02 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class03 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class04 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class05 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + NetProd DECIMAL(9, 3) NOT NULL DEFAULT ((0)), + WSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + MSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + DSR DECIMAL(9, 8) NOT NULL DEFAULT ((0)), + FC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + VC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + OH4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + SC4UG DECIMAL(9, 6) NOT NULL DEFAULT ((0)), + -- campi calcolati + WYR AS ((1)-WSR), + MYR AS ((1)-MSR), + DYR AS ((1)-DSR), + WCR AS ( CASE WHEN ((1)-WSR)=0 THEN 1 ELSE (1)/((1)-WSR) END ), + MCR AS ( CASE WHEN ((1)-MSR)=0 THEN 1 ELSE (1)/((1)-MSR) END ), + DCR AS ( CASE WHEN ((1)-DSR)=0 THEN 1 ELSE (1)/((1)-DSR) END ), + valid BIT NOT NULL DEFAULT((1)), + ) + +-- elimino e ricreo #QuoteOC temp table... +--IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL DROP TABLE #QuoteOC + + CREATE TABLE #QuoteOC + ( + QuoteType CHAR(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + CodQuote BIGINT NOT NULL, + QuoteRev INT NOT NULL, + NumEx INT IDENTITY(1,1) NOT NULL, + ProcessNum NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + CodPlant NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class01 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class02 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class03 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class04 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + Class05 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL DEFAULT (''), + TotQty DECIMAL(18, 6) NOT NULL DEFAULT ((1)), + TotCost DECIMAL(18, 6) NOT NULL DEFAULT ((0)), + Quota DECIMAL(18, 6) NOT NULL DEFAULT ((1)), + C4UG AS ( CASE WHEN TotQty= 0 THEN 0 ELSE (TotCost*Quota) / TotQty END ), + valid BIT NOT NULL DEFAULT ((1)) + ) + + -- =================================== + -- INIZIO TRANSAZIONE + -- =================================== + SET XACT_ABORT ON; + BEGIN TRAN + + --------------------------------------- + -- svuotamento iniziale + --------------------------------------- + + -- elimino quote PARAMETRI! + DELETE FROM dbo.QuoteParam + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni ESTERNE! + DELETE FROM dbo.QuoteWorkExt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino lavorazioni INTERNE + DELETE FROM dbo.QuoteWorkInt + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- elimino OtherCosts + DELETE FROM dbo.QuoteOC + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + -- se ci sono eccezioni nella tab dell'anagrafico articoli imposto il codPlant desiderato + SET @CodPlantFix = ISNULL ( ( SELECT id.CodPlant FROM dbo.ItemDet id + INNER JOIN dbo.QuoteList ql ON id.CodItem = ql.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev ), '' ) + + -- recupero da dati dell'offerta il valore del cliente + SELECT @CodClient = CodClient + FROM dbo.QuoteList + WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + IF (@QuoteType IN ('Q', 'R','C' ) ) -- Quotation, Reddittivity, Cost List + BEGIN + -- recupero dati!! + SELECT TOP 1 @CodItem = ql.CodItem + , @CodDiesGroup = tps.CodDiesGroup + , @CodPlant = CASE WHEN @CodPlantFix <> '' THEN @CodPlantFix ELSE tps.CodPlant END + , @HoleNum = tps.HoleNum + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(tps.HoleNum,0) AS NVARCHAR(10)) + , @ProdTeo = tps.ProdTeo + , @ScTec = tps.ScTec + , @KgTeo = tps.KgTeo + , @NumSMED = tps.NumSMED + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + ORDER BY tps.KgTeo DESC + + -- ================================================================================= + -- recupero dall'offerta il valore del PACKAGE/IMBALLO scelto e i dati relativi + -- Secondo la logica Client-Item-Package ( vedi funzione ) + -- ================================================================================= + -- SET @CodPackag = ( SELECT dbo.f_getCodPackag( @CodItem , @CodClient ) ) + -- attenzione è una function tabellare + --SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, + -- @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + --FROM f_getDataCodPackag ( @CodItem, @CodClient) + + EXEC dbo.stp_getDataCodPackag @CodItem, @CodClient, @CodPackag = @CodPackag OUT, @TotQta = @PTotQta OUT, @Weight = @PWeight OUT, @Tare = @PTare OUT, + @NumImb = @NumImb OUT, @Durata = @PDurata OUT, @LivPackag = @PLiv OUT, @LivPackagDet = @PLivDett OUT + + END + -- -------------------------------------------------------------------------------------------- + -- se offerta tipo 'S' non recupero dati da storico ma li cerco da tabella apposita.. + -- -------------------------------------------------------------------------------------------- + ELSE IF (@QuoteType = 'S') + BEGIN + -- salvo i parametri da QuoteSimPar a #Quoteparam + INSERT INTO #Quoteparam(Quotetype, CodQuote, QuoteRev ,ProcessNum, Descr, Parameter) + SELECT Quotetype, CodQuote, QuoteRev, '01' AS ProcessNum, NomePar AS Descr, ValPar AS Parameter + FROM dbo.QuoteSimPar + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND NomePar NOT IN ('CodDiesGroup', 'CodPlant') + + -- recupero parametri da SIM iniziali...... + ;WITH myCTE as + ( -- Pivot table + SELECT CodDiesGroup, CodPlant, CodPackag, NetProd01_sim + FROM + ( SELECT NomePar, ValPar + FROM dbo.QuoteSimPar + WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev ) AS SourceTable + PIVOT ( MIN(ValPar) FOR NomePar IN ( CodDiesGroup, CodPlant, CodPackag, NetProd01_sim ) + ) AS PivotTable + ) + + SELECT @CodDiesGroup = CodDiesGroup, + @CodPlant = CodPlant, + @CodPackag = ISNULL(CodPackag, 0), + @ProdTeo = NetProd01_sim + FROM myCTE + + SELECT @CodDiesGroup = ISNULL(@CodDiesGroup, '') + SELECT @CodPlant = ISNULL(@CodPlant, '') + SELECT @HoleNum = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + + SELECT TOP 1 @CodItem = ql.CodItem + , @KeyAM = ql.KeyAM + , @KeyAMI = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + , @KeyAMIL = ql.KeyAM + '-' + ISNULL(@CodPlant,'0000') + '-' + CAST(ISNULL(@HoleNum,0) AS NVARCHAR(10)) + , @ScTec = 0 + , @KgTeo = 0 + , @NumSMED = 0 + , @RawMat = ql.RawMat + , @BatchQty = ql.BatchQty + , @ItemDescr = i.ItemDescr + , @CodifProfilo = i.Class01 + , @ClasseMerc = i.Class02 + , @CodClientAssoc = i.Class03 + + FROM dbo.QuoteList ql + INNER JOIN dbo.ItemDet i ON ql.CodItem = i.CodItem + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- provo a caricare dati produzione da KeyAMIL + CodDiesGroup + SELECT TOP 1 @ScTec = ISNULL(ScTec, 0) + , @KgTeo = ISNULL(KgTeo, 0) + , @NumSMED = ISNULL(NumSMED, 0) + , @ProdTeo = ISNULL(ProdTeo, 0) + FROM dbo.TabProdSc + WHERE KeyAMIL = @KeyAMIL + AND CodDiesGroup = @CodDiesGroup + + + -- ================================================================================= + -- carico dati package generali + -- ================================================================================= + + SELECT @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, @NumImb = NumImb, @PDurata = Durata + , @PLiv = 'Package', @PLivDett= CodPackag + FROM dbo.Package2 WHERE CodPackag = @CodPackag + + --SELECT @CodPackag = CodPackag, @PTotQta = TotQta, @PWeight = Weight, @PTare = Tare, + -- @NumImb = NumImb, @PDurata = Durata, @PLiv = LivPackag , @PLivDett = LivPackagDet + --FROM f_getDataCodPackag ( @CodItem, @CodClient) + + END + + -- e aggiorno il CodPackage in QuoteRM + UPDATE dbo.QuoteRM + SET CodPackag = ISNULL(@CodPackag,'') + FROM dbo.QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ItemDescr', @ItemDescr ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodifProfilo', @CodifProfilo ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'ClasseMerc', @ClasseMerc ) + , ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodClientAssoc', @CodClientAssoc ) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'ClientNameAssoc', ClientDet.ClientName + FROM dbo.ClientDet + WHERE ClientDet.CodClient = @CodClientAssoc + + -- INFORMAZIONI su MATRICE + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'CodDiesGroup', ISNULL(@CodDiesGroup, '') ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 1) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'TipoDies', ISNULL(@strTemp, '') ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 2) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'DiamDies', CASE WHEN ISNULL(@strTemp,'') = '' THEN 1 ELSE @strTemp END ) + + SET @strTemp = dbo.f_getSubstring(@CodDiesGroup, '-', 3) + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES (@QuoteType, @CodQuote, @QuoteRev, '01', 'HoleNumDies', ISNULL(@strTemp, 1) ) + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesInList', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem + + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust', COUNT(CodDies) + FROM dbo.DiesDet + WHERE CodDiesGroup = @CodDiesGroup AND Active = 0 + + -- fix valori null!! + SET @CodPlant = ISNULL(@CodPlant, '') + SET @KeyAM = ISNULL(@KeyAM, '') + SET @KeyAMIL = ISNULL(@KeyAMIL, '') + SET @NumSMED = ISNULL(@NumSMED, 0) + SET @BatchQty = ISNULL(@BatchQty, 0) + SET @KgTeo = ISNULL(@KgTeo, 0) + SET @RawMat = ISNULL(@RawMat, '') + SET @ProdTeo = ISNULL(@ProdTeo, 0) + SET @ScTec = ISNULL(@ScTec, 0) + + -- inserisco parametri calcolati x lavorazione estrusione + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'CodPlant' , @CodPlant) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAM' , @KeyAM) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KeyAMIL' , @KeyAMIL) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumSMED' , CONVERT(NVARCHAR(100) , @NumSMED)) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(100) , @KgTeo)) + + -- ----------------------------------------- + ---- inserisco lavorazione estrusione! + -- ----------------------------------------- + -- *** verifica errori *** + SELECT @errorScore = @errorScore + CASE WHEN @ProdTeo = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN @ProdTeo = 0 THEN 0 ELSE @valid END + + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, NetProd, WSR, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @ProdTeo, @ScTec, @valid + + INSERT INTO #QuoteParam (QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', 'KgProdotti', ISNULL(SUM(KgTeo),0) + FROM dbo.QuoteList ql + INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM + WHERE ql.QuoteType = @QuoteType + AND ql.CodQuote = @CodQuote + AND ql.QuoteRev = @QuoteRev + + -- inserisco dati mancanti di MSR/CSR (scarto cesoia x estrusione) - DSR è NULLO x estrusione! + UPDATE #QuoteWorkInt + SET MSR = rmd.CSR + FROM #QuoteWorkInt qwi + INNER JOIN dbo.RawMatDet rmd ON qwi.Class03 = rmd.RawMat + + -- calcolo i costi legati alla fase estrusione! + UPDATE #QuoteWorkInt + SET FC4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd END + , VC4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd END + , OH4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / qwi.NetProd END + , SC4UG = CASE WHEN ql.BatchQty = 0 THEN -99 ELSE cp.SC / ql.BatchQty END + , valid = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 OR ql.BatchQty = 0 THEN 0 ELSE qwi.valid END -- attenzione che è già impostato sopra + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- *** verifica errori *** + SELECT @errorScore = @errorScore + CASE WHEN valid = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN valid = 0 THEN 0 ELSE @valid END + FROM #QuoteWorkInt qwi + --INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + --INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '01' + + -- inserisco lavorazione incestatura! + INSERT INTO #QuoteWorkInt (QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '02', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco dati mancanti di DSR x incestatura come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = CASE td.TotIN WHEN 0 THEN -99 ELSE 1 - CAST(td.TotOUT AS DECIMAL(18,6)) / CAST(td.TotIN AS DECIMAL(18,6)) END , + valid = CASE td.TotIN WHEN 0 THEN 0 ELSE 1 END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- *** verifica errori *** + SELECT @errorScore = @errorScore + CASE WHEN qwi.valid = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN qwi.valid = 0 THEN 0 ELSE @valid END + FROM #QuoteWorkInt qwi +-- INNER JOIN dbo.TabDifett td ON qwi.Class02 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '02' -- solo incestatura + + -- inserisco lavorazione FORNO! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03) + SELECT @QuoteType, @CodQuote, @QuoteRev, '03', @CodPlant, @KeyAM, @KeyAMI, @RawMat + + -- inserisco lavorazione imballo! + INSERT INTO #QuoteWorkInt(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, @KeyAM, @KeyAMIL, @RawMat, @CodItem, @KeyAMI + + UPDATE qwi + SET NetProd = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END, + valid = CASE WHEN @PDurata = 0 OR @PTotQta = 0 THEN 0 ELSE 1 END -- @PTotQta non può essere mai = 0 + FROM #QuoteWorkInt AS qwi +-- INNER JOIN dbo.TabImbArt ti ON qwi.Class04 = ti.KeyA + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- *** controllo errori + SELECT @errorScore = @errorScore + CASE WHEN @PDurata = 0 OR @PTotQta = 0 OR @PWeight = 0 THEN 1 ELSE 0 END, -- verificare @PWeight -> dove salvo l'errore? + @valid = CASE WHEN @PDurata = 0 OR @PTotQta = 0 OR @PWeight = 0 THEN 0 ELSE @valid END + + -- parametro num imballatori + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'QuotaMan', @NumImb + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackage', @PLiv + + -- parametro Livello search package/imballo + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', 'LivPackageDett', @PLivDett + + -- calcolo i costi legati alla fase di imballo! + UPDATE #QuoteWorkInt + SET FC4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd END + , VC4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd END + , OH4UG = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / qwi.NetProd END + , SC4UG = CASE WHEN ql.BatchQty = 0 THEN -99 ELSE cp.SC / ql.BatchQty END + , valid = CASE WHEN qwi.NetProd = 0 OR cp.QuotaManStd = 0 OR ql.BatchQty = 0 THEN 0 ELSE 1 END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- *** verifica errori *** + SELECT @errorScore = @errorScore + CASE WHEN qwi.valid = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN qwi.valid = 0 THEN 0 ELSE @valid END + FROM #QuoteWorkInt qwi + --INNER JOIN dbo.Cost2Plant cp ON qwi.CodPlant = cp.CodPlant AND qwi.ProcessNum = cp.ProcessNum + --INNER JOIN dbo.QuoteList ql ON qwi.QuoteType = ql.QuoteType AND qwi.CodQuote = ql.CodQuote AND qwi.QuoteRev = ql.QuoteRev + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- inserisco dati mancanti di DSR x imballo come 1 - OUT/IN + UPDATE #QuoteWorkInt + SET DSR = 1 - ( CASE WHEN CAST(td.TotIN AS DECIMAL(18,6)) = 0 THEN 1 ELSE CAST(td.TotOUT AS DECIMAL(18,6)) / CAST(td.TotIN AS DECIMAL(18,6)) END ) , + valid = CASE WHEN td.TotIN = 0 THEN 0 ELSE 1 END + FROM #QuoteWorkInt qwi + INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- *** verifica errori *** + SELECT @errorScore = @errorScore + CASE WHEN qwi.valid = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN qwi.valid = 0 THEN 0 ELSE @valid END + FROM #QuoteWorkInt qwi + --INNER JOIN dbo.TabDifett td ON qwi.Class05 = td.KeyAMI AND qwi.ProcessNum = td.ProcessNum + WHERE qwi.ProcessNum = '04' -- solo imballo + + -- recupero le MAC fase 01 + SELECT @MAC_SC = MCR + ,@MAC_ST = WCR + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + -- recupero le MAC fase 02 + SELECT @MAC_IN = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '02' + + -- recupero le MAC fase 04 + SELECT @MAC_IM = DCR + FROM #QuoteWorkInt + WHERE ProcessNum = '04' + + -- calcolo percentuale vendita rottame + SELECT @SSR = SSR + FROM dbo.RawMatDet + WHERE RawMat = @RawMat + + + -- NOTA : la transazione posso probabilmente iniziarla qui visto che è il + -- primo Update/insert/delete su tabelle non temporanee delete a parte + IF (@QuoteType = 'S') + BEGIN + -- recupero i 3 scarti... + DECLARE @WSR01_sim DECIMAL(18,6) = 0 + DECLARE @MSR01_sim DECIMAL(18,6) = 0 + DECLARE @DSR_sim DECIMAL(18,6) = 0 + + -- recupero parametri da SIM iniziali...... + ;WITH myCTE2 as + ( + -- Pivot table + SELECT WSR01_sim, MSR01_sim, DSR_sim + FROM + (SELECT NomePar, ValPar + FROM dbo.QuoteSimPar + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + ) AS SourceTable + PIVOT + ( MIN(ValPar) + FOR NomePar IN + ( + WSR01_sim, MSR01_sim, DSR_sim + ) + ) AS PivotTable + ) + + SELECT @MAC_ST_sim = 1 / (1 - CONVERT(DECIMAL(18,6), WSR01_sim)), + @MAC_SC_sim = 1 / (1 - CONVERT(DECIMAL(18,6), MSR01_sim)), + @MAC_IN_sim = 1, + @MAC_IM_sim = 1 / (1 - CONVERT(DECIMAL(18,6), DSR_sim)) + FROM myCTE2 + + -- salvo la messa a cento da simulazione in variabile + SET @FCR_sim = CASE WHEN ( @MAC_ST_sim * @MAC_SC_sim * @MAC_IN_sim * @MAC_IM_sim ) = 0 + THEN 1 + ELSE ( @MAC_ST_sim * @MAC_SC_sim * @MAC_IN_sim * @MAC_IM_sim ) + END + + -- salvo in tabella! + UPDATE dbo.QuoteRM + SET FCR = ISNULL(@FCR_sim,1) + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + END + ELSE + BEGIN + -- update rese RawMat! + UPDATE dbo.QuoteRM + SET FCR = @MAC_SC * @MAC_ST * @MAC_IN * @MAC_IM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + AND RawMat = @RawMat + END + -- inserisco i costi delle utilities in QuoteOC + + -- inserisco altri costi x lavorazione estrusione! GAS ed EE + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, CodUtil, @RawMat, @BatchQty, ISNULL(UnitCost * @BatchQty, 0), 1 + FROM dbo.Utilities + WHERE CodPlant = @CodPlant + + -- *** controllo errori - se non trovo costi GAS ed EE segnalo errore + IF @@ROWCOUNT = 0 + SET @validStep = 0; + ELSE + SET @validStep = 1; + + SELECT @errorScore = @errorScore + CASE WHEN @validStep = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN @validStep = 0 THEN 0 ELSE @valid END + + /************************************************************* + * MATRICE + * + * calcolo prezzo e durata matrice con procedura a 5 step... + * A) media ponderata prezzo ed ExpLife da DiesDet selezionando x CodItem + CodDiesGroup + * B) EOLLife x media ponderata su DiesDet dove Active = 0 e vita cmq superiore 5000 KG ( escludendo rotture accidentali ) + * C) SE prezzo = 0 --> prendo prezzo da DiesGroupDet selezionando x CodDiesGroup + * D) Se EOL = 0 --> prendo ExpLife della singola matrice, se è 0 --> prendo EOLLife da DiesGroupDet selezionando x CodDiesGroup + * E) Calcolo Price / Life + * + *************************************************************/ + + -- se sono in simulazione leggo tutto direttamente da tab dbo.DiesGroupDet + IF (@QuoteType = 'S') + BEGIN + SELECT @DiesPrice = Price, + @DiesExpLife = ExpLife, + @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END, + @DiesByClass = 1 -- imposto come calcolata matrice da gruppo + FROM DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + ELSE + BEGIN + + -- (A) da DiesDet + SELECT @DiesPrice = CASE WHEN SUM(ISNULL(ActLife, 1)) <> 0 THEN SUM(ISNULL(Price, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) END, + @DiesExpLife = CASE WHEN SUM(ISNULL(ActLife, 1)) <> 0 THEN SUM(ISNULL(ExpLife, 0) * ISNULL(ActLife, 1)) / SUM(ISNULL(ActLife, 1)) END + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + GROUP BY CodItem, CodDiesGroup + + -- (B) da DiesDet + SELECT @DiesEOLife = AVG( ISNULL(ActLife, 0)) + FROM dbo.DiesDet + WHERE CodItem = @CodItem + AND CodDiesGroup = @CodDiesGroup + AND Active = 0 -- solo matrici rottamate + AND ActLife > 5000 -- solo se hanno Life > 5000 Kg ( non rotture accidentali ) + GROUP BY CodItem, CodDiesGroup + END + + -- continuo! + SET @DiesPrice = ISNULL(@DiesPrice,0) + SET @DiesExpLife = ISNULL(@DiesExpLife,0) + SET @DiesEOLife = ISNULL(@DiesEOLife,0) + SET @validStep = 1 + + -- (C) verifico se prezzo è OK... + IF (@DiesPrice = 0) + BEGIN + -- calcolo da DiesGroupDet + SELECT @DiesPrice = ISNULL(Price, 0), @DiesByClass = 1 -- imposto come calcolata matrice da gruppo + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- (D) verifico se vita è OK... + IF (@DiesEOLife = 0) + BEGIN + -- uso exp life articolo... + SET @DiesEOLife = @DiesExpLife + END + + -- controllo che non sia nulla/vuota la durata... + IF (@DiesEOLife = 0) + BEGIN + SELECT @DiesEOLife = CASE WHEN EOLLife > 0 THEN EOLLife ELSE ExpLife END, + @DiesByClass = 1 -- imposto come calcolata matrice da gruppo + FROM dbo.DiesGroupDet + WHERE CodDiesGroup = @CodDiesGroup + END + + -- controllo che non sia nulla/vuota la durata... + IF ( @DiesEOLife > 0 AND @DiesPrice > 0 ) + BEGIN + -- (E) Calcolo price/life! + SET @DiesPriceLife = @DiesPrice / @DiesEOLife + END + ELSE + BEGIN + SET @DiesPriceLife = 0 -- metto a zero il DiesPriceLife + SET @validStep = 0 -- indico che valore non è valido ( ND excel ) + END + + -- se è una simulazione uso cmq i valori caricati e non calcolati + IF (@QuoteType = 'S') + BEGIN + -- recupero i costi matrice da simulazione + DECLARE @DiesPrice_sim DECIMAL(9,3) = 0 + DECLARE @DiesCommLife DECIMAL(9,2) = 0 -- questa mi serve dopo? + DECLARE @DiesTecLife DECIMAL(9,2) = 0 + + ;WITH myCTE2 as + ( -- Pivot table + SELECT DiesPrice_sim, DiesCommLife, DiesTecLife + FROM + ( SELECT NomePar, ValPar + FROM dbo.QuoteSimPar + WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + ) AS SourceTable + PIVOT ( MIN(ValPar) FOR NomePar IN ( DiesPrice_sim, DiesCommLife, DiesTecLife ) + ) AS PivotTable + ) + SELECT @DiesPrice_sim = DiesPrice_sim, + @DiesCommLife = DiesCommLife, + @DiesTecLife = DiesTecLife + FROM myCTE2 + + IF ( ISNULL(@DiesPrice_sim,0) = 0 OR ISNULL(@DiesTecLife,0) = 0 ) + BEGIN + SET @DiesPriceLife = 0 + SET @validStep = 0 + END + ELSE + BEGIN + SET @DiesPriceLife = @DiesPrice_sim / @DiesTecLife + SET @validStep = 1 -- potrebbe essere stato messo = 0 da Quote non di simulazione + END + END + + -- inserisco costi per Matrice: costo e durata da matrice, se non ci sono da gruppo, (anche solo uno dei due, ovviamente più facile trovare durata x matrice...) + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'MATRICE', @RawMat, @BatchQty, ISNULL(@DiesPriceLife * @BatchQty, 0), 1, @validStep + + -- *** controllo errori + SELECT @errorScore = @errorScore + CASE WHEN @validStep = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN @validStep = 0 THEN 0 ELSE @valid END + + -- inserisco parametri calcolati x matrice + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesPrice', CONVERT(NVARCHAR(100), @DiesPrice) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesExpLife', CONVERT(NVARCHAR(100), @DiesExpLife) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesEOLife', CONVERT(NVARCHAR(100), @DiesEOLife) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'DiesByClass', CONVERT(NVARCHAR(100), ISNULL(@DiesByClass,0)) ) + + /************************************************************* + * VENDITA ROTTAME + * + * calcolo COSTO DI VENDITA PER LE 2 FASI ESTRUSIONE 01 ED IMBALLO 04 + * - calcolo costi variabili fase 01 / 04 + * - calcolo costo di vendita x fase 01 / 04 + *************************************************************/ + + SELECT @OCF01 = SUM(ISNULL(C4UG,0)) + FROM #QuoteOC + + SELECT @VCF01 = @OCF01 + VC4UG + FROM #QuoteWorkInt + WHERE ProcessNum = '01' + + SELECT @VCF04 = @OCF01 + SUM(VC4UG) + FROM #QuoteWorkInt + + SELECT @SellCostF01 = CASE WHEN @QuoteType = 'S' THEN ((@MAC_ST_sim * @MAC_SC_sim * @MAC_IN_sim) - 1) ELSE ((@MAC_ST * @MAC_SC * @MAC_IN) - 1) END + * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01) + -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01) + , @RefCostF01 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi fase 1) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01) * + CASE WHEN @QuoteType = 'S' THEN (@MAC_ST_sim * @MAC_SC_sim * @MAC_IN_sim * 100) ELSE (@MAC_ST * @MAC_SC * @MAC_IN * 100) END + ) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - CASE WHEN @QuoteType = 'S' THEN ((@MAC_ST_sim * @MAC_SC_sim * @MAC_IN_sim * 100) - 100) ELSE ((@MAC_ST * @MAC_SC * @MAC_IN * 100) - 100) END + * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01) + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + SELECT @SellCostF04 = CASE WHEN @QuoteType = 'S' THEN ((@MAC_IM_sim) - 1) ELSE ((@MAC_IM) - 1) END + * (q.RawMatCost + q.RawMatExtraCost - CASE WHEN SSVA > 0 THEN SSVA ELSE q.RawMatCost * SSVR END + @VCF01 + @VCF04) + -- ((prodotto delle MAC = inverso del prodotto delle rese) - 1) * (costo Al - prezzo rivendita + costi var fase 01 e fase 04) + , @RefCostF04 = -- ( (A - B) / 100 - C ) + ( + -- (A) = (costo pieno di acquisto + costi variabili fase 1 e 4) * MAC * 100 (IN CENTESIMI) + ((q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) * + CASE WHEN @QuoteType = 'S' THEN (@MAC_IM_sim * 100) ELSE (@MAC_IM * 100) END + ) + -- (B) = ((MAC * 100) - 100) * Resa di fonderia * (costo pieno acquisto - costo di trasformazione)) + - CASE WHEN @QuoteType = 'S' THEN ((@MAC_IM_sim * 100) - 100) ELSE ((@MAC_IM * 100) - 100) END + * rmd.ProcYield * (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04 - rmd.ProcCost) + ) / 100 -- divido per 100 finale + -- (C) = sottraggo costo pieno alluminio + - (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @VCF04) + + -- NOTA: usiamo (q.RawMatCost + q.RawMatExtraCost + @VCF01) e non (q.RawMatCost + q.RawMatExtraCost + @VCF01 + @RefCostF01) perché la differenza è minimale, si tratta di 10/20 PPM... + + FROM dbo.RawMatDet rmd + INNER JOIN dbo.QuoteRM q ON q.RawMat = rmd.RawMat + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + AND q.RawMat = @RawMat + + -- inserisco costi per VENDITA + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, ISNULL(@SellCostF01 * @BatchQty, 0), @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, ISNULL(@RefCostF01 * @BatchQty, 0), 1 - @SSR ) + -- inserisco costi per VENDITA + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, ISNULL(@SellCostF04 * @BatchQty, 0), @SSR ) + -- inserisco costi per ROTTAME + ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, ISNULL(@RefCostF04 * @BatchQty, 0), 1 - @SSR ) + + -- calcolo Package Cost e RMWeight da tab PackageDet + -- EXEC stp_packageCost @CodItem, @CodClient, @CodPackag, @PDesc=@PkgDesc OUTPUT, @RMWeight=@PRMWeight OUTPUT, @Weight=@PWeight OUTPUT, @Tare=@PTare OUTPUT, @PackCost=@PCost OUTPUT, @TareStRat=@PTareStRatio OUTPUT + -- stored sostituita perchè la maggior parte dei calcoli li ho già fatti + SELECT @PCost = CASE @PWeight WHEN 0 THEN 0 ELSE RMCost / @PWeight END + , @PRMWeight = RMWeight + , @PkgDesc = PackagDesc + , @PTareStRatio = CASE @PWeight WHEN 0 THEN 0 ELSE ( RMWeight - @PTare) / @PWeight END + FROM dbo.PackagDet + WHERE CodPackag = @CodPackag + + -- inserisco costi per IMBALLO + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'IMBALLO', @RawMat, @BatchQty, ISNULL(@PCost * @BatchQty, 0), 1, CASE WHEN ISNULL(@PCost * @BatchQty, 0) = 0 THEN 0 ELSE 1 END + + -- *** controllo errori - costo imballo non può essere = 0 + SELECT @errorScore = @errorScore + CASE WHEN ISNULL(@PCost * @BatchQty, 0) = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN ISNULL(@PCost * @BatchQty, 0) = 0 THEN 0 ELSE @valid END + + -- inserisco parametri calcolati x imballaggio + INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter) + VALUES ( @QuoteType, @CodQuote, @QuoteRev, '04', 'PkgDesc', @PkgDesc ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PRMWeight', CONVERT(NVARCHAR(100), @PRMWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PWeight', CONVERT(NVARCHAR(100), @PWeight ) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'PTare', CONVERT(NVARCHAR(100), @PTare) ) + ,( @QuoteType, @CodQuote, @QuoteRev, '04', 'TareStRatio', CONVERT(NVARCHAR(100), @PTareStRatio ) ) + + + --------------------------------------------- + -- inserisco costi per TRASPORTI + --------------------------------------------- + -- recupero tipo di trasporto ( se ha costi o meno ) + SELECT @HasTC = i.HasTC + FROM dbo.QuoteList q + INNER JOIN dbo.Incoterms i ON q.CodInco = i.CodInco + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + + -- Se non trovo @HasTC setto i valori in modo che diano errore + IF @HasTC IS NULL + BEGIN + SET @HasTC = 1 + SET @TranspCost = 0 + END + ELSE + BEGIN + -- recupero zona da cliente... + SELECT @TranspZone = TranspZone + FROM dbo.ClientDet + WHERE CodClient = @CodClient + + -- recupero costi trasporto + SELECT @TranspCost = TranspCost -- se non lo trova rimane a 0 + FROM dbo.TranspCostDet + WHERE TranspZone = @TranspZone + END + + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota, valid) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'TRASPORTI', @RawMat, @BatchQty, ISNULL(@HasTC * @TranspCost * @BatchQty, 0), 1 + , CASE WHEN @HasTC = 1 AND @TranspCost = 0 THEN 0 ELSE 1 END + + -- *** controllo errori - se previsti costi imballo allora devo avere il costo <> 0 + SELECT @errorScore = @errorScore + CASE WHEN @HasTC = 1 AND @TranspCost = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN @HasTC = 1 AND @TranspCost = 0 THEN 0 ELSE @valid END + + + --------------------------------------------- + -- inserisco costi per PROVVIGIONI + --------------------------------------------- + IF @QuoteType = 'R' -- SOLO se R prima leggo dai dati caricati negli ordini + BEGIN + SELECT @Provvig = CONVERT(DECIMAL(9,6),ValPar) FROM dbo.QuoteSimPar + WHERE NomePar = 'ProvvCost' + AND QuoteType=@QuoteType AND CodQuote=@CodQuote AND QuoteRev=@QuoteRev + END + + -- leggo da tabella agenti + IF ISNULL(@Provvig, 0) = 0 + BEGIN + SELECT @Provvig = ISNULL(a.QuotaProvvAg, 0) + FROM dbo.AgentsDet a + INNER JOIN dbo.ClientDet c ON a.CodAg = c.CodAg + INNER JOIN dbo.QuoteList q ON q.CodClient = c.CodClient + WHERE q.QuoteType = @QuoteType + AND q.CodQuote = @CodQuote + AND q.QuoteRev = @QuoteRev + END + + -- fix eventuali valori null + SET @Provvig = ISNULL(@Provvig, 0) + + -- inserisco costi per PROVVIGIONI + INSERT INTO #QuoteOC(QuoteType, CodQuote, QuoteRev, ProcessNum, CodPlant, Class01, Class02, TotQty, TotCost, Quota) + SELECT @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'PROVVIGIONI', @RawMat, @BatchQty, ISNULL(@Provvig * @BatchQty, 0), 1 + + /* ================================================== + CARICO TABELLE EFFETTIVE + ==================================================*/ + + -- carico quote parametri! + INSERT dbo.QuoteParam + SELECT * FROM #QuoteParam + + -- carico lavorazioni INTERNE! + INSERT dbo.QuoteWorkInt -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumWI, ProcessNum, CodPlant, Class01, Class02, Class03, Class04, Class05 + , NetProd, WSR, MSR, DSR, FC4UG, VC4UG, OH4UG, SC4UG, valid + FROM #QuoteWorkInt + + ---- *** verifica errori *** + SELECT DISTINCT @errorScore = @errorScore + CASE WHEN TotQty = 0 THEN 1 ELSE 0 END, + @valid = CASE WHEN TotQty = 0 THEN 0 ELSE @valid END + FROM #QuoteOC + + ---- carico OTHERCOSTS + INSERT dbo.QuoteOC -- ci sono valori calcolati quindi devo selezionare i campi + SELECT QuoteType, CodQuote, QuoteRev, NumEx, ProcessNum, CodPlant, Class01, Class02 + , Class03, Class04, Class05 + , CASE TotQty WHEN 0 THEN 1 ELSE TotQty END -- evito errore in campo calcolato se TotQty = 0 + , TotCost, Quota, valid + FROM #QuoteOC + + -- update valori di errore generale + UPDATE dbo.QuoteList + SET valid = @valid + , errorScore = @errorScore + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + COMMIT TRAN; + + --SELECT COUNT(*) FROM #QuoteParam + --SELECT COUNT(*) FROM #QuoteWorkInt + --SELECT COUNT(*) FROM #QuoteOC + + -- elimino temp table... NON serve nella stored + --IF OBJECT_ID('tempdb..#QuoteParam') IS NOT NULL + -- DROP TABLE #QuoteParam + --IF OBJECT_ID('tempdb..#QuoteWorkInt') IS NOT NULL + -- DROP TABLE #QuoteWorkInt + --IF OBJECT_ID('tempdb..#QuoteOC') IS NOT NULL + -- DROP TABLE #QuoteOC + +END +GO +PRINT N'Creating [dbo].[stp_zzz_scratch]...'; + + +GO + + + + + + +-- ============================================= +-- Author: S.E. Locatelli +-- Create date: 2013.11.20 +-- Description: Procedure x calcoli e test import dati e prove varie +-- ============================================= +CREATE PROCEDURE [dbo].[stp_zzz_scratch] +AS +BEGIN + + -- dichiaro e imposto periodo di calcolo dei valori + -- andrà impostato in una tabella e mi determinerà la versione dei dati + DECLARE @dateFrom AS DateTime; + DECLARE @dateTo AS DateTime; + + SET @dateFrom = '20100101' + SET @dateTo = '20130929' + + -- ========================================== + -- IMPORTAZIONE DATI CSV + -- ========================================== + exec tmp.importProductionLogRaw + exec tmp.importClientsRaw + exec tmp.importTranspCostRaw + exec tmp.importItemsRaw + exec tmp.importPackagRaw + exec tmp.importDiesRaw + -- questo sotto va fatto solo se ci sono dati da integrare in DiesRaw + exec tmp.importDiesGroupRaw + + select top 10 * FROM tmp.ProductionLogRaw + select * FROM tmp.ClientsRaw + select * FROM tmp.ItemsRaw + select * FROM tmp.PackagRaw + select * FROM tmp.DiesRaw + select * FROM tmp.DiesGroupRaw + + -- Se ci sono record con Item doppi li cancello???? + SELECT CodItem,COUNT(*) as qty + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + + delete from tmp.ItemsRaw + where CodItem IN + ( + SELECT CodItem + FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + GROUP BY CodItem + having COUNT(*)>1 + ) + + + -- ========================================== + -- CARICO DATI IN RAW ( da Char a Tipi corretti ) + -- ========================================== + exec tmp.convertClientsRaw + exec tmp.convertTranspCostRaw + exec tmp.convertItemsRaw + exec tmp.convertProductionLogRaw + exec tmp.convertPackagRaw + exec tmp.convertDiesRaw + + -- necessario se integriamo i dati x i gruppi di matrici con un file + exec tmp.convertDiesGroupRaw + + select top 10 * FROM ext.ProductionLogRaw + select * FROM ext.ClientsRaw + select * FROM ext.ItemsRaw + select * FROM ext.PackagRaw + select * FROM ext.DiesRaw + SELECT * FROM ext.DiesGroupRaw + + -- elimino a mano dato con oltre 68 anni di evento... + select * + --delete + from ext.ProductionLogRaw + where DATEDIFF(YEAR,EventStart,EventEnd)> 10 + + exec ext.stp_mergeAgentsDet + exec ext.stp_mergeClientDet 'ProductionLogRaw' + exec ext.stp_mergeClientDet 'ClientsRaw' + exec ext.stp_mergeTranspCostDet 'TranspCostRaw' + exec ext.stp_mergePlantsDet + exec ext.stp_mergeCost2Plant + exec ext.stp_mergeItemDet 'ItemsRaw' + exec ext.stp_mergePackagDet 'ProductionLogRaw' -- 'PackagRaw' + + -- QUESTE ANDREBBERO ESEGUITO DOPO ext.stp_updateProductionLog prendendo in considerazione un periodo di tempo + -- di tre anno o comunque stabilito a priori predefinito ( configurabile a sistema ) + -- DA VERIFICARE + exec ext.stp_mergePackage2ItemClient 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2Item 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2 'ProductionLog', @dateFrom, @dateTo + + exec ext.stp_mergeDiesDet + -- se ricarico diesgroup... ricarico solo i campi che nel file sono <> '' + exec ext.stp_mergeDiesGroupDet + + exec ext.stp_mergeRawMat + exec ext.stp_updateProductionLog + + ---- aggiorno quota agenti a 0.037 + ----update AgentsDet set quotaperc=0.0374 + + + SELECT DISTINCT dr.CodItem FROM ext.DiesRaw dr LEFT OUTER JOIN ItemDet id ON dr.CodItem = id.CodItem + where id.CodItemGroup is null + + select * from ClientDet + select * from ItemDet + select * from Package2ItemClient + select * from Package2Item + select * from Package2 + select * from PackagDet + select * from DiesGroupDet where EOLLife > 0 + select * from DiesDet + select * from DiesGroupDet + select * from AgentsDet + select * from PlantsDet + select * from Cost2Plant + select * from utilities + select top 100 * from ProductionLog + + --update tmp.ProductionLogRaw + --set + -- okPr = 1 + -- , okDi = 1 + -- , okQM = 1 + -- , okSc = 1 + + select distinct ProcessNum from ProductionLog + + select top 10 * from ext.ProductionLogRaw + + + ---- fix errore packaging + --update tmp.ProductionLogRaw + --SET CodPackag='4' + --where CodPackag LIKE '%4%' and CodPackag <> '4' + --select * from tmp.ProductionLogRaw where CodPackag LIKE '%4%' and CodPackag <> '4' + + SELECT p.CodDies, CodItem, CodClient, CodPackag, p.* FROM ext.ProductionLogRaw AS p + LEFT JOIN dbo.DiesDet AS d ON p.CodDies = d.CodDies + WHERE CodItem IS NULL + + + + -- parte CALCOLI!!! + + select * from QuoteList + + select * from ClientDet where CodClient='05000001048' + + select * from itemdet + where CodItem like '1PT00102%' + + select * from RawMatDet + + + --Q 1312130001 0 05000001048 1PT00102 A 7020 7673,400 1000 CPT NULL NULL NULL NULL + + SELECT --TOP 10 + dd.CodItem, pl.RawMat, dd.CodItem + '-' + pl.RawMat as KeyAM, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ,dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + ,0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici, SUM(Duration) AS Durata + ,ISNULL(SUM(QtyOUT),0)/ISNULL(SUM(Duration), 1) as ProduttTeo + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- ========================================== + -- re-insert dei dati di produzione x statistiche + -- ========================================== + exec stp_TPS_upsert @dateFrom, @dateTo + exec stp_TD_upsert @dateFrom , @dateTo +-- exec stp_TI_upsert @dateFrom , @dateTo -- adesso sono già calcolati e inseriti in Package2 / Package2Item + + -- ========================================== + -- salvo nuova revisione dati di produzione... + -- Va messa in ogni procedura di update con 'procedura' e versione anno-mese-giorno + -- ========================================== + INSERT INTO RevHistory + SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + FROM RevHistory + WHERE RevType = 'P' + + + select * from RevHistory + + -- simulazione tempo di calcolo: circa 50/sec + ---- aggiornamento dei dati dell'offerta in oggetto + --DECLARE @tick DATETIME, + -- @idx INT = 100 + --SET @tick = GETDATE() + --WHILE @idx > 0 + --BEGIN + -- EXEC stp_QL_update 'Q', 1312130001, 0 + -- SELECT @idx = @idx - 1 + --END + --SELECT GETDATE() - @tick as tempo + + DECLARE @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 1312130001, + @QuoteRev INT = 0 + + EXEC stp_QL_update @QuoteType, @CodQuote, @QuoteRev + SELECT * FROM QuoteList WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteRM WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkInt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkExt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteOC WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteParam WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + select top 10 * from ItemDet + + SELECT * FROM RawMatDet + + SELECT top 10 * FROM TabProdSc + SELECT top 10 * FROM TabDifett +-- SELECT * FROM TabImbArt +-- SELECT * FROM TabImbGrp + SELECT * FROM PackagDet + SELECT * FROM Package2 + + ---- test gestione selezione CodPackag corretto + --SELECT TOP 5 * FROM Package2ItemClient + --SELECT TOP 5 * FROM Package2Item + --SELECT TOP 5 * FROM Package2 + + SELECT dbo.f_getCodPackag('1EL00005', '05000001048') + --SELECT dbo.f_getCodPackag('1AN00001', '05000000137') + + + +END +GO +PRINT N'Creating [dbo].[stp_QL_fullDataUpdate]...'; + + +GO + + + + +-- ============================================= +-- STORED PROCEDURE stp_QL_fullDataUpdate +-- +-- Author: Steamware +-- Create date: 2014.01.27 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema x report/gestioen web +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_fullDataUpdate] ( + @QuoteType CHAR(1) = 'Q' + , @CodQuote BIGINT = 0 + , @QuoteRev INT = 0 + , @DoUpdate CHAR(1) = 'N' -- se si debba fare ricalcolo Y/N + ) +AS +SET NOCOUNT ON + +/* va rifatta struttura: +* +* tab temporanea +* calcolo parametri +* salvataggio in QuoteList dei 3 valori di sunto +* calcolo dei valori aggregati e restituzione riga risultati finali +* +* ATTENZIONE NON CONTROLLA IL CAMPO VALID DEVE ESSERE SEMPRE 1 PER ESSERE VALIDO +* +*/ + + +--DECLARE @FullCost DECIMAL(9,6) +-- , @MinPrice DECIMAL(9,6) +IF (@DoUpdate = 'Y') +BEGIN + EXEC dbo.stp_QL_update @QuoteType + , @CodQuote + , @QuoteRev +END + + +-- inserire in tabelle: QuoteFull_Q (quotazioni/preventivi) +-- inserire in tabelle: QuoteFull_R (resoconto di commessa) +-- inserire in tabelle: QuoteFull_S (simulazioni) + +-- elimino eventuale temp table... +IF OBJECT_ID('tempdb..#TempFullData') IS NOT NULL + DROP TABLE #TempFullData; + + +-- Costruisco la "superselect" di tutti i valori necessari... + +-- ================================================= +-- PIVOT TABELLA QuoteParameter +-- ================================================= +;WITH ctePivotQuoteP +AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Descr + , Parameter + FROM dbo.QuoteParam + WHERE CodQuote = @CodQuote AND QuoteType = @QuoteType AND QuoteRev = @QuoteRev + ) AS SourceTable + + PIVOT(MIN(Parameter) FOR Descr IN ( + ItemDescr + , CodifProfilo + , ClasseMerc + , CodClientAssoc + , ClientNameAssoc + , CodDiesGroup + , TipoDies + , DiamDies + , HoleNumDies + , NumDiesInList + , NumDiesExaust + , CodPlant + , KeyAM + , KeyAMIL + , NumSMED + , KgTeo + , KgProdotti + , QuotaMan + , DiesPrice + , DiesExpLife + , DiesEOLife + , DiesByClass + , PkgDesc + , PRMWeight + , PWeight + , PTare + , TareStRatio + , LivPackage + , LivPackageDett + -- START nuovi campi x SIM + , DiesPrice_sim + , SamplePrice + , DiesFullCost + , DiesPriceClientQuote + , DiesTecLife + , DiesCommLife + , MonthSalesPrev + , SalesPrevCost + , DiesFinCost + , ClientQuoteReven + , ExtraDiscountDies + , WSR01_sim + , MSR01_sim + , NetProd01_sim + , DSR_sim + -- end nuovi campi x SIM + ) + ) AS PivotData +), +-- ================================================= +-- PIVOT TABELLA QuoteOC +-- ================================================= +ctePivotQuoteOC AS ( + SELECT * + FROM ( + SELECT QuoteType + , CodQuote + , QuoteRev + , Class01 + ProcessNum AS ClassProc + , C4UG + FROM dbo.QuoteOC + WHERE CodQuote = @CodQuote AND QuoteType = @QuoteType AND QuoteRev = @QuoteRev + ) AS SourceTable + PIVOT(SUM(C4UG) FOR ClassProc IN + ( EE01 + , GAS01 + , MATRICE01 + , VENDITA01 + , ROTTAME01 + , VENDITA04 + , ROTTAME04 + , IMBALLO04 + , TRASPORTI04 + , PROVVIGIONI04 + ) + ) AS PivotData +) +-- ================================================= +-- MAIN Select Tabella con INTO temp table +-- ================================================= +SELECT 'V14.1' AS Vers + , QL.QuoteType + , QL.CodQuote + , QL.QuoteRev + , QL.IdxQState + , QL.CodClient + , ISNULL(CD.ClientName,N'') AS ClientName + , QL.CodItem + , QL.CodItemGroup + , QL.RawMat + , QL.UnitWeight + , QL.BatchQty + , QL.CodInco + , ISNULL(CD.TranspZone,N'') AS TranspZone + , QL.KeyAM + , QL.Note + , QL.PriceOff + , QL.OrdDate + , QL.OrdNum + , QL.OrdRow + , QL.OrdPrice + , QL.OrdQty + , pQP.CodClientAssoc + , pQP.ClientNameAssoc + , pQP.ItemDescr + , pQP.CodifProfilo + , pQP.ClasseMerc + , pQP.TipoDies + , pQP.CodDiesGroup + , CONVERT(DECIMAL(18,6),pQP.DiamDies) AS DiamDies + , CONVERT(INT,pQP.HoleNumDies) AS HoleNumDies + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPrice),0) AS DiesPrice + , CONVERT(DECIMAL(18,6),pQP.DiesExpLife) AS DiesExpLife + , CONVERT(DECIMAL(18,6),pQP.DiesEOLife) AS DiesEOLife + , CONVERT(BIT, ISNULL(pQP.DiesByClass,0)) AS DiesByClass + , CONVERT(DECIMAL(18,6),pQP.NumDiesInList) AS NumDiesInList + , CONVERT(DECIMAL(18,6),pQP.NumDiesExaust) AS NumDiesExaust + , pQP.CodPlant + , pQP.KeyAMIL + , CONVERT(DECIMAL(18,6),pQP.KgTeo) AS KgTeo + , CONVERT(DECIMAL(18,6),pQP.NumSMED) AS NumSMED + , CONVERT(DECIMAL(18,6),pQP.QuotaMan) AS QuotaMan + , CONVERT(DECIMAL(18,6),pQP.PRMWeight) AS PRMWeight + , CONVERT(DECIMAL(18,6),pQP.PWeight) AS PWeight + , CONVERT(DECIMAL(18,6),pQP.PTare) AS PTare + , pQP.LivPackage + , pQP.LivPackageDett + -- START nuovi campi x SIM + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPrice_sim),0) AS DiesPrice_sim + , ISNULL(CONVERT(DECIMAL(18,6),pQP.SamplePrice),0) AS SamplePrice + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesFullCost),0) AS DiesFullCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesPriceClientQuote),0) AS DiesPriceClientQuote + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesTecLife),0) AS DiesTecLife + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesCommLife),1) AS DiesCommLife + , ISNULL(CONVERT(INT,pQP.MonthSalesPrev),0) AS MonthSalesPrev + , ISNULL(CONVERT(DECIMAL(18,6),pQP.SalesPrevCost),0) AS SalesPrevCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.DiesFinCost),0) AS DiesFinCost + , ISNULL(CONVERT(DECIMAL(18,6),pQP.ClientQuoteReven),0) AS ClientQuoteReven + , ISNULL(CONVERT(DECIMAL(18,6),pQP.ExtraDiscountDies),0) AS ExtraDiscountDies + , ISNULL(CONVERT(DECIMAL(9,8),pQP.WSR01_sim),0) AS WSR01_sim + , ISNULL(CONVERT(DECIMAL(9,8),pQP.MSR01_sim),0) AS MSR01_sim + , ISNULL(CONVERT(DECIMAL(9,3),pQP.NetProd01_sim),0) AS NetProd01_sim + , ISNULL(CONVERT(DECIMAL(9,8),pQP.DSR_sim),0) AS DSR_sim + -- end nuovi campi x SIM + , QRM.RawMatCost + , QRM.RawMatExtraCost + , QRM.RawMatCost + QRM.RawMatExtraCost AS RawMatFullCost -- fare campo calcolato ?!? + , QRM.CodPackag + , pQP.PkgDesc + , QRM.FSR + , ISNULL(pQOC.PROVVIGIONI04, 0) AS ProvvCost + , ISNULL(pQOC.EE01, 0) AS EECost + , ISNULL(pQOC.GAS01, 0) AS GasCost + , ISNULL(pQOC.MATRICE01, 0) AS DiesCost + , ISNULL(pQOC.IMBALLO04, 0) AS PackCost + , ISNULL(pQOC.TRASPORTI04, 0) AS TranspCost + , ISNULL(pQOC.VENDITA01, 0) AS SellCost01 + , ISNULL(pQOC.ROTTAME01, 0) AS RefCost01 + , ISNULL(pQOC.VENDITA04, 0) AS SellCost04 + , ISNULL(pQOC.ROTTAME04, 0) AS RefCost04 + , QWI01.WSR AS WSR01 + , QWI01.MSR AS MSR01 + , QWI01.NetProd AS NetProd01 + , QWI01.FC4UG AS FC4UG01 + , QWI01.VC4UG AS VC4UG01 + , QWI01.OH4UG AS OH4UG01 + , QWI01.SC4UG AS SC4UG01 + , 1 - (QWI01.DYR * QWI02.DYR * QWI03.DYR * QWI04.DYR) AS DSR + , QWI04.NetProd AS NetProd04 + , QWI04.FC4UG AS FC4UG04 + , QWI04.VC4UG AS VC4UG04 + , ISNULL(pQOC.VENDITA01, 0) + ISNULL(pQOC.ROTTAME01, 0) + ISNULL(pQOC.VENDITA04, 0) + ISNULL(pQOC.ROTTAME04, 0) + ISNULL(pQOC.EE01, 0) + ISNULL(pQOC.GAS01, 0) + ISNULL(pQOC.MATRICE01, 0) + ISNULL(pQOC.IMBALLO04, 0) + ISNULL(pQOC.PROVVIGIONI04, 0) + ISNULL(pQOC.TRASPORTI04, 0) + QWI01.VC4UG + QWI04.VC4UG + QWI01.SC4UG AS FVC + , PD.Charge + , QL.valid + , QL.errorScore + +INTO #TempFullData -- carico in temp table +FROM dbo.QuoteList AS QL + +LEFT JOIN dbo.ClientDet CD -- non voglio che non crei record x mancanza Cliente + ON QL.CodClient = CD.CodClient + +INNER JOIN ctePivotQuoteP AS pQP + ON QL.QuoteType = pQP.QuoteType + AND QL.CodQuote = pQP.CodQuote + AND QL.QuoteRev = pQP.QuoteRev + +INNER JOIN dbo.QuoteRM AS QRM + ON QL.QuoteType = QRM.QuoteType + AND QL.CodQuote = QRM.CodQuote + AND QL.QuoteRev = QRM.QuoteRev + AND QL.rawmat = QRM.RawMat + +INNER JOIN ctePivotQuoteOC AS pQOC + ON QL.QuoteType = pQOC.QuoteType + AND QL.CodQuote = pQOC.CodQuote + AND QL.QuoteRev = pQOC.QuoteRev + +INNER JOIN dbo.QuoteWorkInt AS QWI01 + ON QL.QuoteType = QWI01.QuoteType + AND QL.CodQuote = QWI01.CodQuote + AND QL.QuoteRev = QWI01.QuoteRev + AND QWI01.ProcessNum = '01' +INNER JOIN dbo.QuoteWorkInt AS QWI02 + ON QL.QuoteType = QWI02.QuoteType + AND QL.CodQuote = QWI02.CodQuote + AND QL.QuoteRev = QWI02.QuoteRev + AND QWI02.ProcessNum = '02' +INNER JOIN dbo.QuoteWorkInt AS QWI03 + ON QL.QuoteType = QWI03.QuoteType + AND QL.CodQuote = QWI03.CodQuote + AND QL.QuoteRev = QWI03.QuoteRev + AND QWI03.ProcessNum = '03' +INNER JOIN dbo.QuoteWorkInt AS QWI04 + ON QL.QuoteType = QWI04.QuoteType + AND QL.CodQuote = QWI04.CodQuote + AND QL.QuoteRev = QWI04.QuoteRev + AND QWI04.ProcessNum = '04' +INNER JOIN dbo.PlantsDet AS PD + ON PD.CodPlant = pQP.CodPlant + +---- salvo i dati dell'ordine: FullCost, MinPrice, PriceOff (se zero lo pongo uguale a MinPrice) +--UPDATE QuoteList +--SET FullCost = @FullCost +-- , MinPrice = @MinPrice +-- , PriceOff = CASE WHEN ISNULL(PriceOff,0) = 0 THEN @MinPrice ELSE PriceOff END +--WHERE QuoteType = @QuoteType +-- AND CodQuote = @CodQuote +-- AND QuoteRev = @QuoteRev + +-- SELECT TOP 1000 * FROM #TempFullData + +IF @QuoteType = 'Q' + BEGIN + IF OBJECT_ID('QuoteFull_Q') IS NULL -- CREATE TABLE QuoteFull_Q da eliminare quando Tabella Definitiva + SELECT * INTO dbo.QuoteFull_Q FROM #TempFullData + ELSE + BEGIN + --DELETE dbo.QuoteFull_Q WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + DELETE dbo.QuoteFull_Q WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + INSERT INTO dbo.QuoteFull_Q (Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice, DiesExpLife, DiesEOLife, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, valid, errorScore) + SELECT Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice, DiesExpLife, DiesEOLife, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, valid, errorScore + FROM #TempFullData + END + END + +ELSE IF @QuoteType = 'R' + BEGIN + IF OBJECT_ID('QuoteFull_R') IS NULL -- CREATE TABLE QuoteFull_R da eliminare quando Tabella Definitiva + SELECT * INTO dbo.QuoteFull_R FROM #TempFullData + ELSE + BEGIN + DELETE dbo.QuoteFull_R WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + INSERT INTO dbo.QuoteFull_R (Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice, DiesExpLife, DiesEOLife, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, OrdDate, OrdNum, OrdRow, OrdPrice, OrdQty, valid, errorScore) + SELECT Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice, DiesExpLife, DiesEOLife, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01, MSR01, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, OrdDate, OrdNum, OrdRow, OrdPrice, OrdQty, valid, errorScore +-- FROM [dbo].[v_pivot] + FROM #TempFullData + END + END + +ELSE IF @QuoteType = 'S' + BEGIN + IF OBJECT_ID('QuoteFull_S') IS NULL -- CREATE TABLE QuoteFull_S da eliminare quando Tabella Definitiva + SELECT * INTO dbo.QuoteFull_S FROM #TempFullData + ELSE + BEGIN + DELETE dbo.QuoteFull_S WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + INSERT INTO dbo.QuoteFull_S (Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice_sim, DiesPrice, SamplePrice, DiesFullCost, DiesPriceClientQuote, DiesExpLife, DiesEOLife, DiesTecLife, DiesCommLife, MonthSalesPrev, SalesPrevCost, DiesFinCost, ClientQuoteReven, ExtraDiscountDies, DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01_sim, WSR01, MSR01_sim, MSR01, NetProd01_sim, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR_sim, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, valid, errorScore) + SELECT Vers, QuoteType, CodQuote, QuoteRev, IdxQState, CodClient, ClientName, CodItem, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, TranspZone, KeyAM, Note, PriceOff, CodClientAssoc, ClientNameAssoc, ItemDescr, CodifProfilo, ClasseMerc, TipoDies, CodDiesGroup, DiamDies, HoleNumDies, DiesPrice_sim, DiesPrice, SamplePrice, (DiesPrice_sim + SamplePrice) AS DiesFullCost, DiesPriceClientQuote, DiesExpLife, DiesEOLife, DiesTecLife, DiesCommLife, MonthSalesPrev + -- se DiesCommLife è NULLA è messa a 1 sopra + ,CASE WHEN ( DiesTecLife = 0 OR DiesCommLife = 0 ) + THEN 0 + ELSE ( (((DiesTecLife % DiesCommLife) / DiesTecLife) * ( DiesPrice_sim + SamplePrice) ) / DiesTecLife ) + END AS SalesPrevCost + ,CASE WHEN DiesCommLife > 0 + THEN ((((DiesPrice_sim+SamplePrice)-DiesPriceClientQuote)*(power((1.05),MonthSalesPrev/(12))-(1))) / DiesCommLife ) + ELSE ((((DiesPrice_sim+SamplePrice)-DiesPriceClientQuote)*(power((1.05),MonthSalesPrev/(12))-(1))) / 1 ) + END AS DiesFinCost + ,CASE WHEN DiesTecLife > 0 + THEN ( -DiesPriceClientQuote / DiesTecLife ) + ELSE -DiesPriceClientQuote + END AS ClientQuoteReven + ,CASE WHEN ( DiesTecLife = 0 OR DiesCommLife = 0 ) + THEN 0 + ELSE (((((DiesTecLife % DiesCommLife) / DiesTecLife ) * (DiesPrice_sim+SamplePrice)) / DiesTecLife + +(((DiesPrice_sim+SamplePrice)-DiesPriceClientQuote) * (power((1.05),MonthSalesPrev/(12))-(1))) / DiesCommLife ) + - DiesPriceClientQuote / DiesTecLife ) + END AS ExtraDiscountDies + + -- CALCOLI OLD Version + --((((DiesTecLife%DiesCommLife)/case when DiesTecLife=(0) then (1) else DiesTecLife end)*(DiesPrice+SamplePrice))/case when DiesTecLife=(0) then (1) else DiesTecLife end) AS SalesPrevCost, + --((((DiesPrice+SamplePrice)-DiesPriceClientQuote)*(power((1.05),MonthSalesPrev/(12))-(1)))/case when DiesCommLife>(0) then DiesCommLife else (1) end) AS DiesFinCost, + --( -DiesPriceClientQuote/case when DiesTecLife>(0) then DiesTecLife else (1) end) AS ClientQuoteReven, + --(((((DiesTecLife%DiesCommLife)/case when DiesTecLife=(0) then (1) else DiesTecLife end)*(DiesPrice+SamplePrice))/case when DiesTecLife=(0) then (1) else DiesTecLife end+(((DiesPrice+SamplePrice)-DiesPriceClientQuote)*(power((1.05),MonthSalesPrev/(12))-(1)))/case when DiesCommLife>(0) then DiesCommLife else (1) end)-DiesPriceClientQuote/case when DiesTecLife>(0) then DiesTecLife else (1) end) AS ExtraDiscountDies, + + ,DiesByClass, NumDiesInList, NumDiesExaust, CodPlant, KeyAMIL, KgTeo, NumSMED, QuotaMan, PRMWeight, PWeight, PTare, LivPackage, LivPackageDett, RawMatCost, RawMatExtraCost, RawMatFullCost, CodPackag, PkgDesc, FSR, ProvvCost, EECost, GasCost, DiesCost, PackCost, TranspCost, SellCost01, RefCost01, SellCost04, RefCost04, WSR01_sim, WSR01, MSR01_sim, MSR01, NetProd01_sim, NetProd01, FC4UG01, VC4UG01, OH4UG01, SC4UG01, DSR_sim, DSR, NetProd04, FC4UG04, VC4UG04, FVC, Charge, valid, errorScore + + FROM #TempFullData + END + END +ELSE IF @QuoteType = 'C' + BEGIN + DELETE dbo.QuoteFull_C WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + INSERT INTO dbo.QuoteFull_C ( Vers, QuoteType, CodQuote, QuoteRev, Class01, Class02, CodItem, RawMat, CodPlant, CodDiesGroup, CodPackag, batchQty, CodInco, RawMatFullCost, FVC, FullCost, valid, errorScore ) + SELECT Vers, QuoteType, CodQuote, QuoteRev, CodifProfilo, ClasseMerc, tmp.CodItem, RawMat, tmp.CodPlant, CodDiesGroup, CodPackag, batchQty, CodInco, RawMatFullCost, FVC, FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost, valid, errorScore + FROM #TempFullData AS tmp +END + +-- elimino temp table... +--IF OBJECT_ID('tempdb..#TempFullData') IS NOT NULL +-- DROP TABLE #TempFullData + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_insNew]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.21 +-- Description: inserisce un nuovo record QuoteList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_insNew] +( + @QuoteType CHAR(1) = 'Q', + @CodClient NVARCHAR(50) = '', + @CodItem NVARCHAR(50) = '', + @RawMat NVARCHAR(50), + @RawMatCost DECIMAL(18, 6), + @RawMatExtraCost DECIMAL(18, 6), + @BatchQty INT, + @CodInco NVARCHAR(5), + @Note NVARCHAR(2500) +) +AS + +-- variabili +DECLARE @CodQuote BIGINT = 0, + @QuoteRev INT = 0 + +SET XACT_ABORT ON; +BEGIN TRAN + + -- calcolo nuovo record odierno + SELECT @CodQuote = dbo.f_getNewCodQuote() + + -- inserisco riga in QuoteList + INSERT INTO QuoteList(QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note) + SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, @BatchQty, CodItemGroup, @RawMat, @CodInco, @Note + FROM ItemDet + WHERE CodItem = @CodItem + + -- ora inserisco in QuoteRM + INSERT INTO QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 1, @RawMat, @RawMatCost, @RawMatExtraCost) + + -- ricalcolo! + EXEC stp_QL_fullDataUpdate @QuoteType + , @CodQuote + , @QuoteRev + , 'N' + +COMMIT TRAN + +-- seleziono intera riga! +SELECT * +FROM QuoteList +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLS_UpdDiesPar]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.05.20 +-- Description: update di un record in QL (Full) TIPO SIMULAZIONE e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLS_UpdDiesPar] +( + @Original_QuoteType CHAR(1) = 'S', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @SamplePrice DECIMAL(18, 6), + @DiesPriceClientQuote DECIMAL(18, 6), + @DiesCommLife DECIMAL(18, 6), + @MonthSalesPrev INT +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- @SamplePrice + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'SamplePrice', @SamplePrice + + -- @DiesPriceClientQuote + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'DiesPriceClientQuote', @DiesPriceClientQuote + + -- @DiesCommLife + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'DiesCommLife', @DiesCommLife + + -- @MonthSalesPrev + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'MonthSalesPrev', @MonthSalesPrev + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLS_UpdExtrPar]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.05.16 +-- Description: update di un record in QL (Full) TIPO SIMULAZIONE e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLS_UpdExtrPar] +( + @Original_QuoteType CHAR(1) = 'S', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @TipoDies NVARCHAR(50) = '', + @DiamDies INT = 1, + @HoleNumDies INT = 1, + @CodPlant NVARCHAR(50), + @DiesPrice_sim DECIMAL(18, 6), + @DiesTecLife DECIMAL(18, 6), + @WSR01_sim DECIMAL(9, 8), + @MSR01_sim DECIMAL(9, 8), + @NetProd01_sim DECIMAL(9, 3) +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- dichiaro e calcolo valore complessivo... + DECLARE @CodDiesGroup NVARCHAR(50) = '' + + SELECT @CodDiesGroup = @TipoDies + '-' + CAST(@DiamDies AS VARCHAR(50)) + '-' + CAST(@HoleNumDies AS VARCHAR(50)) + '-' + CodItemGroup + FROM QuoteList + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + + -- @CodDiesGroup + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'CodDiesGroup', @CodDiesGroup + + -- @CodPlant + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'CodPlant', @CodPlant + + -- @DiesPrice_sim + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'DiesPrice_sim', @DiesPrice_sim + + -- @DiesTecLife + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'DiesTecLife', @DiesTecLife + + -- @WSR01_sim + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'WSR01_sim', @WSR01_sim + + -- @MSR01_sim + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'MSR01_sim', @MSR01_sim + + -- @NetProd01_sim + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'NetProd01_sim', @NetProd01_sim + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLS_UpdHead]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.05.16 +-- Description: update di un record in QL (Full) TIPO SIMULAZIONE e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLS_UpdHead] +( + @Original_QuoteType CHAR(1) = 'S', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @CodClient NVARCHAR(50) = '', + @CodItem NVARCHAR(50) = '', + @UnitWeight DECIMAL(9, 3) = 0, + @CodItemGroup NVARCHAR(50) = '', + @RawMat NVARCHAR(50), + @RawMatCost DECIMAL(18, 6), + @RawMatExtraCost DECIMAL(18, 6), + @BatchQty INT, + @CodInco NVARCHAR(5), + @Note NVARCHAR(2500) = '' +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + -- aggiorno valori QuoteList! + UPDATE QuoteList + SET CodClient = @CodClient + , CodItem = @CodItem + , RawMat = @RawMat + , BatchQty = @BatchQty + , CodInco = @CodInco + , Note = ISNULL(@Note,'') + , CodItemGroup= @CodItemGroup + , UnitWeight = @UnitWeight + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- aggiorno valori QuoteRM + UPDATE QuoteRM + SET RawMat = @RawMat + , RawMatCost = @RawMatCost + , RawMatExtraCost = @RawMatExtraCost + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + + -- @CodDiesGroup + DECLARE @CodDiesGroup NVARCHAR(50) = '' + SELECT @CodDiesGroup = ValPar + FROM QuoteSimPar + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + AND NomePar = 'CodDiesGroup' + + -- scambio ultimo valore + SELECT @CodDiesGroup = ISNULL(REPLACE(@CodDiesGroup, '-' + dbo.f_GetSubstring(@CodDiesGroup,'-' , 4), '-'+@CodItemGroup), '' ) + + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'CodDiesGroup', @CodDiesGroup + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLS_UpdPackPar]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.05.20 +-- Description: update di un record in QL (Full) TIPO SIMULAZIONE e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLS_UpdPackPar] +( + @Original_QuoteType CHAR(1) = 'S', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @CodPackag NVARCHAR(50), + @DSR_sim DECIMAL(9, 8) +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- @CodPackag + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'CodPackag', @CodPackag + + -- @DSR_sim + EXEC stp_QSP_upsert @Original_QuoteType, @Original_CodQuote, @Original_QuoteRev, 'DSR_sim', @DSR_sim + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_SC2C_insertForDate]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.29 +-- Description: creazione dati base per Cost List per data odierna +-- ============================================= +CREATE PROCEDURE [dbo].[stp_SC2C_insertForDate] + @RawMatCost DECIMAL(18,6) = 2, + @BatchQty INT = 1000 +AS +BEGIN + +DECLARE @Date AS SMALLDATETIME = CONVERT( SMALLDATETIME,CONVERT(CHAR(8), GETDATE(), 112) ) ; + +-- =========================================================== +-- se non esiste, CREO DATI LISTINO COSTI per il giorno +-- =========================================================== +IF NOT EXISTS( SELECT * FROM dbo.CostList WHERE QuoteType = 'C' AND DateList = @Date ) + BEGIN + INSERT INTO dbo.CostList WITH (TABLOCK) ( DateList,CodItem,RawMat,RawMatCost,RawMatExtraCost,batchQty,CodInco ) + EXEC dbo.stp_QFC_creaListino @RawmatCost , @BatchQty + + -- aggiorno statistiche tabella + UPDATE STATISTICS dbo.CostList WITH FULLSCAN; + END + +RETURN + +END +GO +PRINT N'Creating [dbo].[stp_QL_makeSim]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod date: 2014.05.21 +-- Description: modifica una quotazione da Q ad S in QuoteList e ricalcola +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_makeSim] +( + @CodQuote_orig BIGINT = 0, + @QuoteRev_orig INT = 0 +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- passo x definizione a 'S' + DECLARE @QuoteType_orig CHAR(1) = 'Q', + @QuoteType CHAR(1) = 'S' + + -- elimino record in QuoteFull_Q + DELETE + FROM QuoteFull_Q + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + -- carico alcuni dati accessori precompilando... + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, Descr, Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr IN ('CodDiesGroup', 'CodPlant') + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'DiesTecLife', Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr = 'KgTeo' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'DiesPrice_sim', Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr = 'DiesPrice' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'CodPackag', CodPackag + FROM QuoteRM + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'NetProd01_sim', NetProd + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'MSR01_sim', MSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'WSR01_sim', WSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote_orig, @QuoteRev_orig, 'DSR_sim', DSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '04' + + -- update riga in QuoteList + UPDATE QuoteList + SET QuoteType = @QuoteType + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + -- ricalcolo! + EXEC stp_QL_fullDataUpdate @QuoteType + , @CodQuote_orig + , @QuoteRev_orig + , 'Y' +COMMIT TRAN + +-- seleziono intera riga! +SELECT * +FROM QuoteList +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_newRev]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.04.23 +-- Description: duplica record QuoteList generando una NUOVA REVISIONE +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_newRev] +( + @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 0, + @QuoteRev_orig INT = 0 +) +AS + +-- variabili +DECLARE @QuoteRev INT = 0 + +SET @QuoteRev = @QuoteRev_orig + 1 + +SET XACT_ABORT ON; +BEGIN TRAN + + -- inserisco riga in QuoteList + INSERT INTO QuoteList(QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note) + SELECT QuoteType, @CodQuote, @QuoteRev as QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note + FROM QuoteList + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev_orig + + -- ora inserisco in QuoteRM + INSERT INTO QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + SELECT QuoteType, @CodQuote, @QuoteRev as QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost + FROM QuoteRM + WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev_orig + + -- ricalcolo! + EXEC stp_QL_fullDataUpdate @QuoteType + ,@CodQuote + ,@QuoteRev + ,'Y' +COMMIT TRAN + +-- seleziono intera riga! +SELECT * +FROM QuoteList +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLC_insNew]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.26 +-- Description: elaborazione dbo.QuoteFull_C ( listino ) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLC_insNew] +( + @row2proc INT = 100, + @Note NVARCHAR(2500) = '', + @QuoteType CHAR(1) = 'C' -- per il momento è fisso = 'C' +) +AS +BEGIN + +SET NOCOUNT ON; + +-- declare variabili +DECLARE @CodQuote AS BIGINT, + @QuoteRev AS INT = 0, + @OrdNum AS NVARCHAR(50), + @OrdRow AS NVARCHAR(50), + @CodItem AS NVARCHAR(50), + @CodClient AS NVARCHAR(50) = '', + @RawMat AS NVARCHAR(50), + @RawMatCost AS DECIMAL(18,6) = 0, + @BatchQty AS INT = 0, + @RawMatExtraCost AS DECIMAL(18,6), + @CodInco AS NVARCHAR(5), + @PriceOff AS DECIMAL(9,6), + @OrdDate As DATETIME, + @OrdPrice AS DECIMAL(9,6), + @OrdQty AS INT, + @oggi AS DATETIME = GETDATE(), + @LastIdx AS INT, + @noRow AS CHAR(1) = 'N', + @TotRow AS INT = 0, + @Date AS SMALLDATETIME = CONVERT(SMALLDATETIME,CONVERT(CHAR(8), GETDATE(), 112)) + +SET XACT_ABORT ON; + +SET @QuoteType = 'C' -- per il momento non lascio parametrico il quotetype = C - Costi + +-- se non esiste il contatore creo il record contatore +IF NOT EXISTS ( SELECT * FROM dbo.ContatoriQuote WHERE Flusso = @QuoteType ) + INSERT INTO dbo.ContatoriQuote SELECT @QuoteType, 0 + +/* viene fatta da altra stored +-- =========================================================== +-- se non esiste, CREO LISTINO per il giorno carico listino +-- =========================================================== +IF NOT EXISTS( SELECT * FROM dbo.CostList + WHERE QuoteType = @QuoteType AND DateList = @Date ) + -- AND LEFT(CodQuote,6) = CONVERT( BIGINT, ( RIGHT(YEAR(@oggi),2) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0') ) ) ) + BEGIN + INSERT INTO dbo.CostList WITH (TABLOCK) ( DateList,CodItem,RawMat,RawMatCost,RawMatExtraCost,batchQty,CodInco ) + EXEC dbo.stp_QFC_creaListino @RawmatCost , @BatchQty + END +*/ + +-- verifico se ci sono record da elaborare +IF EXISTS ( SELECT * FROM dbo.CostList WHERE QuoteType = @QuoteType AND CodQuote = 0 ) + SET @noRow = 'N' + +WHILE( @noRow = 'N' AND @row2proc > 0) +BEGIN + -- =========================================================== + -- stacco il CodQuote da usare e sbocco la tabella ( in realtà perdo un numero se poi non faccio insert ) + -- se non eseguo procedure multiple contemporanee non serve + -- =========================================================== + DECLARE @Table TABLE ( LastIdx INT ) + BEGIN TRAN; + UPDATE dbo.ContatoriQuote + SET LastIdx = ( LastIdx % 1000000 ) + 1 -- si resetta dopo 1.000.000 righe ( in pratica ho tot righe al giorno ) + OUTPUT inserted.LastIdx INTO @Table + WHERE Flusso = @QuoteType + + SELECT @LastIdx = MAX(LastIdx) FROM @Table + SELECT @CodQuote = CONVERT( BIGINT, ( RIGHT(YEAR(@oggi),2) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0') + dbo.f_padLeft(@LastIdx, 8,'0') ) ) + COMMIT; + + + -- =========================================================== + -- elaboro il primo ordine "libero" assegnando il CodQuote + -- se da errore la transazione mi annulla il codquote e quindi rimane elaborabile + -- altrimenti metto l'assegnazione nella tran precedente e poi decido cosa fare con quelli non completati con data EndCalc = NULL + -- =========================================================== + -- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SERIALIZABLE; -- REPEATABLE READ; + BEGIN TRANSACTION; + + -- leggo il primo record da elaborare e assegno il CodQuote + WITH cteFree AS + ( -- leggo il primo ordine da elaborare e assegno il CodQuote + SELECT TOP(1) CodItem, RawMat FROM dbo.CostList WHERE DateList = @Date AND QuoteType = @QuoteType AND CodQuote = 0 + ) + UPDATE dbo.CostList + SET CodQuote = @CodQuote, + QuoteType = @QuoteType + FROM dbo.CostList AS ls + INNER JOIN cteFree AS cte + ON ls.DateList = @Date AND ls.CodItem = cte.CodItem AND ls.RawMat = cte.RawMat +-- OPTION (RECOMPILE) + + -- leggo i valori di calcolo + SET @CodItem = NULL + SELECT @CodItem = CodItem, + @BatchQty = batchQty, + @RawMat = RawMat, + @RawMatCost = RawMatCost, + @RawMatExtraCost = RawMatExtraCost, + @CodInco = CodInco + FROM dbo.CostList + WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote + OPTION (RECOMPILE); + + -- imposto il Cliente a non specificato ( CUSTOMER ND ) + SET @CodClient = '00000000000' + + IF @CodItem IS NOT NULL + BEGIN + + -- ------------------------------------------------------- + -- inserisco dati per elaborazione in QuoteList e QuoteRM + -- ------------------------------------------------------- + INSERT INTO dbo.QuoteList( QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note ) + SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, @BatchQty, CodItemGroup, @RawMat, @CodInco, @Note + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO dbo.QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 1, @RawMat, @RawMatCost, @RawMatExtraCost) + + -- ------------------------------------------------------- + -- ricalcolo! + -- ------------------------------------------------------- + EXEC dbo.stp_QL_fullDataUpdate @QuoteType , @CodQuote , @QuoteRev, 'Y'; + + -- aggiorno data-ora fine elaborazione + UPDATE dbo.CostList + SET EndCalc = GETDATE() + WHERE QuoteType = @QuoteType AND CodQuote = @CodQuote + + --SELECT * FROM dbo.QuoteList WHERE QuoteType = 'C' AND CodQuote = @CodQuote + --SELECT * FROM dbo.QuoteRM WHERE QuoteType = 'C' AND CodQuote = @CodQuote + --SELECT TOP(1000) * FROM dbo.QuoteFull_C WHERE QuoteType = 'C' AND CodQuote = @CodQuote + END + ELSE + SET @noRow = 'Y' -- fine righe da elaborare + + COMMIT TRAN + SET @row2proc = @row2proc - 1 + +/* + SET @TotRow = @TotRow -1 -- decremento righe da leggere + + COMMIT TRAN; + END TRY + BEGIN CATCH + SELECT 'Error' + ,@CodItem + ,@CodClient + ,@BatchQty + ,@RawMat + ,@RawMatCost + ,@RawMatExtraCost + ,@CodInco + , @TotRow +-- ROLLBACK + + DECLARE @ErrorMessage NVARCHAR(4000); + DECLARE @ErrorSeverity INT; + DECLARE @ErrorState INT; + + SELECT @ErrorMessage = ERROR_MESSAGE() + ' Error Number: ' + CONVERT( Varchar(10) , ERROR_NUMBER()) + + ' Severity: ' + CONVERT( Varchar(10) , ERROR_SEVERITY() ) + ' : ' + + ISNULL(ERROR_PROCEDURE(),'stored?') + + ' Line: ' + CONVERT(VARCHAR(100),ERROR_LINE()), + + @ErrorSeverity = 8, -- ERROR_SEVERITY(), + @ErrorState = ERROR_STATE(); + + RAISERROR (@ErrorMessage, -- Message text. + @ErrorSeverity, -- Severity. + @ErrorState -- State. + ); + + SET @TotRow = @TotRow -1 -- decremento righe da leggere + END CATCH +*/ + +END -- END WHILE + +RETURN +END + +/* +-- Pulizia Tabelle di appoggio x QuoteType = 'C' + +TRUNCATE TABLE CostList +DELETE FROM dbo.QuoteOC WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteParam WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteWorkExt WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteWorkInt WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteRM WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteList WHERE QuoteType = 'C' + +SELECT TOP 1000 * FROM dbo.QuoteList WHERE QuoteType = 'C' -- AND CodQuote = '14052600000001' +SELECT * FROM dbo.QuoteRM WHERE QuoteType = 'C' -- AND CodQuote = '14052600000001' +SELECT TOP 1000 * FROM dbo.QuoteOC WHERE QuoteType = 'C' -- AND CodQuote = '14052600000002' +SELECT TOP 1000 * FROM dbo.QuoteParam WHERE QuoteType = 'C' -- AND CodQuote = '14052600000993' +SELECT TOP 1000 * FROM dbo.QuoteWorkInt WHERE QuoteType = 'C' -- AND CodQuote = '14052600000993' + +SELECT * FROM CostList +SELECT * FROM dbo.QuoteFull_C WHERE QuoteType = 'C' + +SELECT TOP 1000 * FROM ItemDet WHERE CodItem = '1BQ00012' + +-- RIPULISCO TUTTO +TRUNCATE TABLE dbo.QuoteFull_C + +UPDATE dbo.ContatoriQuote +SET LastIdx = 0 WHERE Flusso = 'C' + +*/ +GO +PRINT N'Creating [dbo].[stp_QLC_insNew_OLD]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.26 +-- Description: elaborazione dbo.QuoteFull_C ( listino ) +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLC_insNew_OLD] +( + @RawMatCost DECIMAL(18,6) = 2, + @BatchQty INT = 1000, + @QuoteType CHAR(1) = 'C', -- non usato al momento + @Note NVARCHAR(2500) = '', + @row2proc INT = 100 +) +AS + +SET NOCOUNT ON; + +-- declare variabili +DECLARE @CodQuote AS BIGINT, + @QuoteRev AS INT = 0, + @OrdNum AS NVARCHAR(50), + @OrdRow AS NVARCHAR(50), + @CodItem AS NVARCHAR(50), + @CodClient AS NVARCHAR(50), + @RawMat AS NVARCHAR(50), + @RawMatExtraCost AS DECIMAL(18,6), + @CodInco AS NVARCHAR(5), + @PriceOff AS DECIMAL(9,6), + @OrdDate As DATETIME, + @OrdPrice AS DECIMAL(9,6), + @OrdQty AS INT, + @oggi AS DATETIME = GETDATE(), + @LastIdx AS INT, + @noRow AS CHAR(1) = 'N', + @TotRow AS INT = 0 + +SET XACT_ABORT ON; + +SET @QuoteType = 'C' -- per il momento non lascio parametrico il quotetype = C - Costi + +-- se non esiste il contatore creo il record +IF NOT EXISTS ( SELECT * FROM dbo.ContatoriQuote WHERE Flusso = @QuoteType ) + INSERT INTO dbo.ContatoriQuote SELECT @QuoteType, 0 + +-- creo il listino da elaborare +CREATE TABLE #temp ( + [IdxRiga] [int] IDENTITY(1,1), +-- [DataRif] [datetime] NOT NULL, -- CodQuote ha già la data +-- [QuoteType] [char](1) NOT NULL, +-- [CodClient] [nvarchar](50) NOT NULL, + [CodItem] [nvarchar](50) NOT NULL, + [RawMat] [nvarchar](50) NOT NULL, + [RawMatCost] [decimal](18, 6) NULL, + [RawMatExtraCost] [decimal](18, 6) NULL, + [batchQty] [int] NULL, + [CodInco] [nvarchar](5) NOT NULL + + PRIMARY KEY ( [IdxRiga] ) WITH (PAD_INDEX = ON, FILLFACTOR = 100) +) ON [PRIMARY] + +INSERT INTO #temp ( CodItem,RawMat,RawMatCost,RawMatExtraCost,batchQty,CodInco ) +EXEC dbo.stp_QFC_creaListino @RawmatCost , @BatchQty + +SET @TotRow = @@ROWCOUNT -- metto via record da elaborare + +SELECT @TotRow +-- SELECT @TotRow = COUNT(*) FROM #temp WHERE QuoteType = @QuoteType + +-- SET @TotRow = 100 -- elaboro solo 1000 x test + +SELECT TOP 100 * FROM #temp ORDER BY [IdxRiga] DESC + +WHILE( @TotRow > 0 ) +BEGIN + -- =========================================================== + -- stacco il CodQuote da usare e sbocco la tabella ( in realtà perdo un numero se poi non faccio insert ) + -- se non eseguo procedure multiple contemporanee non serve + -- =========================================================== + DECLARE @Table TABLE ( LastIdx INT ) + BEGIN TRAN; + UPDATE dbo.ContatoriQuote + SET LastIdx = ( LastIdx % 1000000 ) + 1 -- si resetta dopo 1.000.000 righe ( in pratica ho tot righe al giorno ) + OUTPUT inserted.LastIdx INTO @Table + WHERE Flusso = @QuoteType + + SELECT @LastIdx = MAX(LastIdx) FROM @Table + SELECT @CodQuote = CONVERT( BIGINT, ( RIGHT(YEAR(@oggi),2) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0') + dbo.f_padLeft(@LastIdx, 8,'0') ) ) + COMMIT; + + -- =========================================================== + -- elaboro il record in sequenza + -- =========================================================== + -- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SERIALIZABLE; -- REPEATABLE READ; + BEGIN TRY +-- BEGIN TRANSACTION; + + -- leggo i valori di calcolo + SELECT @CodItem = CodItem, + @BatchQty = batchQty, + @RawMat = RawMat, + @RawMatCost = RawMatCost, + @RawMatExtraCost = RawMatExtraCost, + @CodInco = CodInco + FROM #temp + WHERE IdxRiga = @TotRow + + IF @CodItem IS NOT NULL + BEGIN + + -- ------------------------------------------------------- + -- inserisco dati per elaborazione in QuoteList e QuoteRM + -- ------------------------------------------------------- + INSERT INTO dbo.QuoteList( QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note ) + SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, @BatchQty, CodItemGroup, @RawMat, @CodInco, @Note + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + INSERT INTO dbo.QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 1, @RawMat, @RawMatCost, @RawMatExtraCost) + + -- ------------------------------------------------------- + -- ricalcolo! + -- ------------------------------------------------------- + + EXEC dbo.stp_QL_fullDataUpdate @QuoteType , @CodQuote , @QuoteRev, 'Y'; + + --SELECT * FROM dbo.QuoteList WHERE QuoteType = 'C' AND CodQuote = @CodQuote + --SELECT * FROM dbo.QuoteRM WHERE QuoteType = 'C' AND CodQuote = @CodQuote + --SELECT TOP(1000) * FROM dbo.QuoteFull_C WHERE QuoteType = 'C' AND CodQuote = @CodQuote + END + + SET @TotRow = @TotRow -1 -- decremento righe da leggere + +-- COMMIT TRAN; + END TRY + BEGIN CATCH + SELECT 'Error' + ,@CodItem + ,@CodClient + ,@BatchQty + ,@RawMat + ,@RawMatCost + ,@RawMatExtraCost + ,@CodInco + , @TotRow +-- ROLLBACK + + DECLARE @ErrorMessage NVARCHAR(4000); + DECLARE @ErrorSeverity INT; + DECLARE @ErrorState INT; + + SELECT @ErrorMessage = ERROR_MESSAGE() + ' Error Number: ' + CONVERT( Varchar(10) , ERROR_NUMBER()) + + ' Severity: ' + CONVERT( Varchar(10) , ERROR_SEVERITY() ) + ' : ' + + ISNULL(ERROR_PROCEDURE(),'stored?') + + ' Line: ' + CONVERT(VARCHAR(100),ERROR_LINE()), + + @ErrorSeverity = 8, -- ERROR_SEVERITY(), + @ErrorState = ERROR_STATE(); + + RAISERROR (@ErrorMessage, -- Message text. + @ErrorSeverity, -- Severity. + @ErrorState -- State. + ); + + + SET @TotRow = @TotRow -1 -- decremento righe da leggere + END CATCH + +END -- END WHILE + +/* +-- Pulizia Tabelle di appoggio x QuoteType = 'C' + +DELETE FROM dbo.QuoteOC WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteParam WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteWorkExt WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteWorkInt WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteRM WHERE QuoteType = 'C' +DELETE FROM dbo.QuoteList WHERE QuoteType = 'C' + +SELECT TOP 1000 * FROM dbo.QuoteList WHERE QuoteType = 'C' AND CodQuote = '14052600000001' +SELECT * FROM dbo.QuoteRM WHERE QuoteType = 'C' AND CodQuote = '14052600000001' +SELECT TOP 1000 * FROM dbo.QuoteOC WHERE QuoteType = 'C' AND CodQuote = '14052600000002' +SELECT TOP 1000 * FROM dbo.QuoteParam WHERE QuoteType = 'C' AND CodQuote = '14052600000993' +SELECT TOP 1000 * FROM dbo.QuoteWorkInt WHERE QuoteType = 'C' AND CodQuote = '14052600000993' + +SELECT TOP 1000 * FROM ItemDet WHERE CodItem = '1BQ00012' + +SELECT * FROM dbo.QuoteFull_C WHERE QuoteType = 'C' + +-- RIPULISCO TUTTO +TRUNCATE TABLE dbo.QuoteFull_C + +UPDATE dbo.ContatoriQuote +SET LastIdx = 0 WHERE Flusso = 'C' + +*/ + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_Insert]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.16 +-- Description: insert di un record in QL (Full) e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLF_Insert] +( + @QuoteType CHAR(1) = 'Q', + @CodClient NVARCHAR(50) = '', + @CodItem NVARCHAR(50) = '', + @RawMat NVARCHAR(50), + @RawMatCost DECIMAL(18, 6), + @RawMatExtraCost DECIMAL(18, 6), + @BatchQty INT, + @CodInco NVARCHAR(5), + @Note NVARCHAR(2500) = '' +) +AS + +-- variabili +DECLARE @CodQuote BIGINT = 0, + @QuoteRev INT = 0 + +-- check QTA: deve essere > 0 !!! +IF(@BatchQty = 0) +BEGIN + SET @BatchQty = 1 +END + +SET XACT_ABORT ON; +BEGIN TRAN + + -- calcolo nuovo record odierno + SELECT @CodQuote = dbo.f_getNewCodQuote() + + -- inserisco riga in QuoteList + INSERT INTO QuoteList(QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note) + SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, @BatchQty, CodItemGroup, @RawMat, @CodInco, @Note + FROM ItemDet + WHERE CodItem = @CodItem + + -- ora inserisco in QuoteRM + INSERT INTO QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 1, @RawMat, @RawMatCost, @RawMatExtraCost) + + -- ricalcolo! + EXEC stp_QL_fullDataUpdate @QuoteType + ,@CodQuote + ,@QuoteRev + ,'Y' + +COMMIT TRAN + +-- seleziono intera riga! +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLR_insNew]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Mod. date: 2014.05.22 +-- Description: elaborazione OrdersHist Redditivity +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLR_insNew] +( + @QuoteType CHAR(1) = 'R', + @Note NVARCHAR(2500) = '', + @row2proc INT = 100 +) +AS +BEGIN + +SET NOCOUNT ON; + +-- declare variabili +DECLARE @CodQuote AS BIGINT, + @QuoteRev AS INT = 0, + @OrdNum AS NVARCHAR(50), + @OrdRow AS NVARCHAR(50), + @CodItem AS NVARCHAR(50), + @CodClient AS NVARCHAR(50), + @BatchQty AS INT, + @RawMat AS NVARCHAR(50), + @RawMatCost AS DECIMAL(18,6), + @RawMatExtraCost AS DECIMAL(18,6), + @CodInco AS NVARCHAR(5), + @PriceOff AS DECIMAL(9,6), + @OrdDate As DATETIME, + @OrdPrice AS DECIMAL(9,6), + @OrdQty AS INT, + @ProvvCost AS DECIMAL(9,6), + @oggi AS DATETIME = GETDATE(), + @LastIdx AS INT, + @noRow AS CHAR(1) = 'N' + +SET XACT_ABORT ON; + +SET @QuoteType = 'R' -- per il momento non lascio parametrico il quotetype R - redditività + +-- se non esiste il contatore creo il record +IF NOT EXISTS ( SELECT * FROM dbo.ContatoriQuote WHERE Flusso = @QuoteType ) + INSERT INTO dbo.ContatoriQuote SELECT @QuoteType, 0 + +-- verifico se ci sono record da elaborare +IF EXISTS ( SELECT * FROM dbo.OrdersHist WHERE CodQuote = 0 ) + SET @noRow = 'N' + +WHILE( @noRow = 'N' AND @row2proc > 0) +BEGIN + -- =========================================================== + -- stacco il CodQuote da usare e sbocco la tabella ( in realtà perdo un numero se poi non faccio insert ) + -- se non eseguo procedure multiple contemporanee non serve + -- =========================================================== + -- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- credo non serva con OUTPUT + DECLARE @Table TABLE ( LastIdx INT ) + BEGIN TRAN; + UPDATE dbo.ContatoriQuote + SET LastIdx = ( LastIdx % 1000000 ) + 1 -- si resetta dopo 1.000.000 righe ( in pratica ho tot righe x giorno ) + OUTPUT inserted.LastIdx INTO @Table + WHERE Flusso = @QuoteType + + SELECT @LastIdx = MAX(LastIdx) FROM @Table + SELECT @CodQuote = CONVERT( BIGINT, ( RIGHT(YEAR(@oggi),2) + dbo.f_padLeft(MONTH(@oggi), 2,'0') + dbo.f_padLeft(DAY(@oggi), 2,'0') + dbo.f_padLeft(@LastIdx, 8,'0') ) ) + COMMIT; + + -- =========================================================== + -- elaboro il primo ordine "libero" assegnando il CodQuote + -- se da errore la transazione mi annulla il codquote e quindi rimane elaborabile + -- altrimenti metto l'assegnazione nella tran precedente e poi decido cosa fare con quelli non completati con data EndCalc = NULL + -- =========================================================== + -- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- SERIALIZABLE; -- REPEATABLE READ; + BEGIN TRANSACTION; + + -- leggo il primo ordine da elaborare e assegno il CodQuote + WITH cteOrderFree AS + ( -- leggo il primo ordine da elaborare e assegno il CodQuote + SELECT TOP(1) OrdNum, OrdRow FROM dbo.OrdersHist WHERE CodQuote = 0 + ) + UPDATE Ord + SET CodQuote = @CodQuote, + QuoteType = @QuoteType + FROM dbo.OrdersHist AS ord + INNER JOIN cteOrderFree AS cte + ON ord.OrdNum = cte.OrdNum AND ord.OrdRow = cte.OrdRow + + + -- leggo i valori di calcolo + SET @OrdNum = NULL + SELECT @OrdNum = OrdNum, + @OrdRow = OrdRow , + @CodItem = hi.CodItem, + @CodClient = CodClient, + @BatchQty = BatchQty, + @RawMat = RawMat, + @RawMatCost = RawMatCost, + @RawMatExtraCost = RawMatExtraCost, + @CodInco = CodInco, + @PriceOff = PriceOff, + @OrdPrice = OrdPrice, + @OrdDate = OrdDate, + @OrdQty = OrdQty, + @ProvvCost = ProvvCost + FROM dbo.OrdersHist hi + INNER JOIN dbo.ItemDet AS It ON hi.CodItem = it.CodItem -- deve esistere il codice in anagrafica altrimenti non lo elaboro + WHERE CodQuote = @CodQuote AND QuoteType = @QuoteType + OPTION (RECOMPILE) + + IF @OrdNum IS NOT NULL -- record precedente trovato + BEGIN + + -- inserisco riga in QuoteList + INSERT INTO dbo.QuoteList( QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note, PriceOff, OrdNum, OrdRow, OrdDate, OrdPrice, OrdQty ) + SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, @BatchQty, CodItemGroup, @RawMat, @CodInco, @Note , @PriceOff, @OrdNum, @OrdRow, @OrdDate ,@OrdPrice, @OrdQty + FROM dbo.ItemDet + WHERE CodItem = @CodItem + + -- ora inserisco in QuoteRM + INSERT INTO dbo.QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 1, @RawMat, @RawMatCost, @RawMatExtraCost) + + -- ora inserisco ProvvCost in QuoteSimPar che mi serve dopo nei calcoli dopo + INSERT INTO dbo.QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + VALUES (@QuoteType, @CodQuote, @QuoteRev, 'ProvvCost', @ProvvCost) + + -- ricalcolo! + EXEC dbo.stp_QL_fullDataUpdate @QuoteType , @CodQuote , @QuoteRev, 'Y'; + + -- aggiorno data-ora fine elaborazione + UPDATE dbo.OrdersHist + SET EndCalc = GETDATE() + WHERE CodQuote = @CodQuote AND QuoteType = @QuoteType; + + --SELECT * FROM dbo.OrdersHist WHERE QuoteType = 'R' AND CodQuote = @CodQuote + --SELECT * FROM dbo.QuoteList WHERE QuoteType = 'R' AND CodQuote = @CodQuote + --SELECT * FROM dbo.QuoteRM WHERE QuoteType = 'R' AND CodQuote = @CodQuote + --SELECT TOP(1000) * FROM dbo.QuoteFull_R WHERE QuoteType = 'R' AND CodQuote = @CodQuote + END + ELSE + SET @noRow = 'Y' -- fine righe da elaborare + + COMMIT TRAN; + SET @row2proc = @row2proc - 1 + +END -- END WHILE + +RETURN + +END + +/* +-- Pulizia Tabelle di appoggio x QuoteType = 'R' + +DELETE FROM dbo.QuoteOC WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteParam WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteWorkExt WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteWorkInt WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteRM WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteList WHERE QuoteType = 'R' +DELETE FROM dbo.QuoteSimPar WHERE QuoteType = 'R' + +SELECT TOP 1000 * FROM dbo.QuoteList WHERE QuoteType = 'R' +SELECT TOP 1000 * FROM dbo.QuoteRM WHERE QuoteType = 'R' +SELECT TOP 1000 * FROM dbo.QuoteOC WHERE QuoteType = 'R' +SELECT TOP 1000 * FROM dbo.QuoteParam WHERE QuoteType = 'R' +SELECT TOP 1000 * FROM dbo.QuoteWorkExt WHERE QuoteType = 'R' +SELECT TOP 1000 * FROM dbo.QuoteWorkInt WHERE QuoteType = 'R' + +SELECT * FROM dbo.OrdersHist +SELECT * FROM dbo.QuoteFull_R WHERE QuoteType = 'R' + +-- RIPULISCO TUTTO +TRUNCATE TABLE dbo.QuoteFull_R + +UPDATE dbo.OrdersHist +SET CodQuote = 0 + +UPDATE dbo.ContatoriQuote +SET LastIdx = 0 WHERE Flusso = 'R' + +-- SE RICARICO DA ZERO GLI ORDINI +TRUNCATE TABLE dbo.OrdersHist + +*/ +GO +PRINT N'Creating [dbo].[stp_QL_clone]...'; + + +GO + +-- ============================================= +-- Author: Steamware +-- Create date: 2014.04.23 +-- Description: duplica record QuoteList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_clone] +( + @QuoteType CHAR(1) = 'Q', + @QuoteType_orig CHAR(1) = 'Q', + @CodQuote_orig BIGINT = 0, + @QuoteRev_orig INT = 0 +) +AS + +-- variabili +DECLARE @CodQuote BIGINT = 0, + @QuoteRev INT = 0 + +SET XACT_ABORT ON; +BEGIN TRAN + + -- calcolo nuovo record odierno + SELECT @CodQuote = dbo.f_getNewCodQuote() + + -- inserisco riga in QuoteList + INSERT INTO QuoteList(QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, Note, PriceOff) + SELECT @QuoteType, @CodQuote, @QuoteRev as QuoteRev, CodClient, CodItem, UnitWeight, BatchQty, CodItemGroup, RawMat, CodInco, 'CLONE - ' + Note, PriceOff + FROM QuoteList + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + -- ora inserisco in QuoteRM + INSERT INTO QuoteRM(QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost) + SELECT @QuoteType, @CodQuote, @QuoteRev as QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost + FROM QuoteRM + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + + + -- se la scheda di destinazione è simulazione + IF(@QuoteType = 'S') + BEGIN + IF(@QuoteType_orig = 'S') + -- se partenza è S duplico dati accessori... + BEGIN + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, NomePar, ValPar + FROM QuoteSimPar + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + END + ELSE + -- se partenza è Q carico alcuni dati accessori precompilando... + BEGIN + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, Descr, Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr IN ('CodDiesGroup', 'CodPlant') + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'DiesTecLife', Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr = 'KgTeo' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'DiesPrice_sim', Parameter + FROM QuoteParam + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND Descr = 'DiesPrice' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'CodPackag', CodPackag + FROM QuoteRM + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'NetProd01_sim', NetProd + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'MSR01_sim', MSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'WSR01_sim', WSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '01' + + INSERT INTO QuoteSimPar(QuoteType, CodQuote, QuoteRev, NomePar, ValPar) + SELECT @QuoteType, @CodQuote, @QuoteRev, 'DSR_sim', DSR + FROM QuoteWorkInt + WHERE QuoteType = @QuoteType_orig + AND CodQuote = @CodQuote_orig + AND QuoteRev = @QuoteRev_orig + AND ProcessNum = '04' + END + END + + -- ricalcolo! + EXEC stp_QL_fullDataUpdate @QuoteType + ,@CodQuote + ,@QuoteRev + ,'Y' +COMMIT TRAN + +-- seleziono intera riga! +SELECT * +FROM QuoteList +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_QuoteFull_Q_update]...'; + + +GO +-- ============================================= +-- Author: Steamware +-- Create date: 2014.02.07 +-- Description: update valori tab QuoteList +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QuoteFull_Q_update] ( + @Original_QuoteType CHAR(1) = 'Q' + ,@Original_CodQuote BIGINT = 0 + ,@Original_QuoteRev INT = 0 + ,@PriceOff DECIMAL(9, 6) = 0 + ) +AS +BEGIN + +-- aggiorno valori! + UPDATE QuoteList + SET PriceOff = @PriceOff + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev +END +GO +PRINT N'Creating [dbo].[stp_test]...'; + + +GO + + +CREATE PROCEDURE [dbo].[stp_test] +AS + -- Test per funzionamento temp table + SELECT TOP 1 * INTO #QuoteParam FROM dbo.ClientDet + EXEC stp_QL_update 'Q', 1312130001, 0 --WITH RECOMPILE + SELECT * FROM #QuoteParam + DROP TABLE #QuoteParam +GO +PRINT N'Creating [dbo].[stp_QLF_UpdCosts]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.15 +-- Description: update di un record in QL (Full) e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLF_UpdCosts] +( + @Original_QuoteType CHAR(1) = 'Q', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @PriceOff DECIMAL(18, 6) +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- aggiorno valori QuoteList! + UPDATE QuoteList + SET PriceOff = @PriceOff + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_UpdHead]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.11 +-- Description: update di un record in QL (Full) e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLF_UpdHead] +( + @Original_QuoteType CHAR(1) = 'Q', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @CodClient NVARCHAR(50) = '', + @CodItem NVARCHAR(50) = '', + @RawMat NVARCHAR(50), + @RawMatCost DECIMAL(18, 6), + @RawMatExtraCost DECIMAL(18, 6), + @BatchQty INT, + @CodInco NVARCHAR(5), + @Note NVARCHAR(2500) = '' +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- aggiorno valori QuoteList! + UPDATE ql + SET CodClient = @CodClient + , CodItem = @CodItem + , RawMat = @RawMat + , BatchQty = @BatchQty + , CodInco = @CodInco + , Note = @Note + , CodItemGroup= id.CodItemGroup + , UnitWeight = id.UnitWeight + FROM QuoteList ql + INNER JOIN ItemDet id ON id.CodItem = @CodItem + WHERE ql.QuoteType = @Original_QuoteType + AND ql.CodQuote = @Original_CodQuote + AND ql.QuoteRev = @Original_QuoteRev + + -- aggiorno valori QuoteRM + UPDATE QuoteRM + SET RawMat = @RawMat + , RawMatCost = @RawMatCost + , RawMatExtraCost = @RawMatExtraCost + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QLF_UpdQState]...'; + + +GO + +-- ============================================= +-- Author: Steamware - S.E.L. +-- Create date: 2014.04.16 +-- Description: update di un record in QL (Full) e poi aggiorna a cascata +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QLF_UpdQState] +( + @Original_QuoteType CHAR(1) = 'Q', + @Original_CodQuote BIGINT = 0, + @Original_QuoteRev INT = 0, + @IdxQState INT +) +AS + +SET XACT_ABORT ON; +BEGIN TRAN + + -- aggiorno valori QuoteList! + UPDATE QuoteList + SET IdxQState = @IdxQState + WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + + -- update dei valori calcolati! + EXEC stp_QL_fullDataUpdate @Original_QuoteType + ,@Original_CodQuote + ,@Original_QuoteRev + ,'Y' + +COMMIT TRAN + + +-- seleziono intera riga! + +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @Original_QuoteType + AND CodQuote = @Original_CodQuote + AND QuoteRev = @Original_QuoteRev + + +RETURN +GO +PRINT N'Creating [dbo].[stp_QL_fullData]...'; + + +GO +-- ============================================= +-- STORED PROCEDURE stp_QL_fullData +-- +-- Author: Steamware +-- Create date: 2014.01.27 +-- Description: Recupera tutti i dati dalle tab QuoteList x avere schema x report/gestioen web +-- ============================================= +CREATE PROCEDURE [dbo].[stp_QL_fullData] ( + @QuoteType CHAR(1) = 'Q' + , @CodQuote BIGINT = 0 + , @QuoteRev INT = 0 + , @DoUpdate CHAR(1) = 'N' -- se si debba fare ricalcolo Y/N + ) +AS +SET NOCOUNT ON + +IF(@QuoteType <> '' AND @DoUpdate = 'N') +BEGIN + EXEC stp_QL_fullDataUpdate @QuoteType + , @CodQuote + , @QuoteRev + , @DoUpdate +END + +---- calcolo con aggiunta campi sommati... +--SELECT * +-- , FVC + RawMatFullCost AS P_FVC +-- , FC4UG01 + OH4UG01 AS CPS +-- , FC4UG01 + OH4UG01 + FVC + RawMatFullCost AS P_CPS +-- , FC4UG04 + FVC + RawMatFullCost AS P_FC4UG04 +-- , FVC + FC4UG01 + OH4UG01 + FC4UG04 AS FullCost +-- , FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost AS P_FullCost +-- , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04) AS MinPrice +-- , Charge * (FVC + FC4UG01 + OH4UG01 + FC4UG04 + RawMatFullCost) AS P_MinPrice +-- , PriceOff + RawMatFullCost AS P_PriceOff +-- , (FVC + FC4UG01 + OH4UG01 + FC4UG04) - PriceOff AS NetMar +-- , (PriceOff - FVC) / (FC4UG01 + OH4UG01 + FC4UG04) AS FCShield +-- , (PRMWeight - Ptare) * (PriceOff + RawMatFullCost) / Pweight AS PckSur +--FROM QuoteFull_Q +--WHERE QuoteType = @QuoteType +-- AND CodQuote = @CodQuote +-- AND QuoteRev = @QuoteRev + +-- calcolo con aggiunta campi sommati... +SELECT * +FROM v_QuoteFull_Q +WHERE QuoteType = @QuoteType + AND CodQuote = @CodQuote + AND QuoteRev = @QuoteRev + +RETURN +GO +PRINT N'Creating [dbo].[stp_zzz_scratchDatiDemo]...'; + + +GO + + + +-- ============================================= +-- Author: G.A.R. +-- Create date: 2014.05.12 +-- Description: Procedura sostituzione dati con dati DEMO +-- ============================================= +CREATE PROCEDURE [dbo].[stp_zzz_scratchDatiDemo] +AS +BEGIN + + -- dichiaro e imposto periodo di calcolo dei valori + -- andrà impostato in una tabella e mi determinerà la versione dei dati + DECLARE @dateFrom AS DateTime; + DECLARE @dateTo AS DateTime; + + SET @dateFrom = '20100101' + SET @dateTo = '20130929' + + -- ========================================== + -- IMPORTAZIONE DATI CSV --- QUI NON SERVER DATI GIA' CARICATI + -- ========================================== + -- exec tmp.importProductionLogRaw + --exec tmp.importClientsRaw + --exec tmp.importTranspCostRaw + --exec tmp.importItemsRaw + --exec tmp.importPackagRaw + --exec tmp.importDiesRaw + -- -- questo sotto va fatto solo se ci sono dati da integrare in DiesRaw + --exec tmp.importDiesGroupRaw + --select top 10 * FROM tmp.ProductionLogRaw + --select * FROM tmp.ClientsRaw + --select * FROM tmp.ItemsRaw + --select * FROM tmp.PackagRaw + --select * FROM tmp.DiesRaw + --select * FROM tmp.DiesGroupRaw + + -- Se ci sono record con Item doppi li cancello???? + --SELECT CodItem,COUNT(*) as qty + --FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + --GROUP BY CodItem + --having COUNT(*)>1 + + --delete from tmp.ItemsRaw + --where CodItem IN + --( + -- SELECT CodItem + -- FROM ( SELECT DISTINCT * FROM tmp.ItemsRaw ) AS a + -- GROUP BY CodItem + -- having COUNT(*)>1 + --) + + + -- =========================================================== + -- CARICO DATI IN RAW EXT ( da Char a Tipi corretti ) cancella e carica da Tabelle TMP + -- =========================================================== + exec tmp.convertClientsRaw + exec tmp.convertTranspCostRaw + exec tmp.convertItemsRaw + exec tmp.convertProductionLogRaw + exec tmp.convertPackagRaw + exec tmp.convertDiesRaw + + -- necessario se integriamo i dati x i gruppi di matrici con un file + exec tmp.convertDiesGroupRaw +-- exec tmp.convertDiesGroupRaw 'DiesDet' -- integro i gruppi mancanti ??? TOLTO + + select top 10 * FROM ext.ProductionLogRaw + select * FROM ext.ClientsRaw + select * FROM ext.ItemsRaw + select * FROM ext.PackagRaw + select * FROM ext.DiesRaw + SELECT * FROM ext.DiesGroupRaw + + -- elimino a mano dato con oltre 68 anni di evento... prob. non serve più + --select * + ----delete + --from ext.ProductionLogRaw where DATEDIFF(YEAR,EventStart,EventEnd)> 10 + + -- ======================================= + -- cancello le tabelle che ricarico + -- ======================================= + + -- exec ext.stp_mergeAgentsDet -- NON DEMO campi non modificati x DEMO + + TRUNCATE TABLE dbo.ProductionLog + TRUNCATE TABLE dbo.Package2ItemClient + TRUNCATE TABLE dbo.Package2Item + TRUNCATE TABLE dbo.Cost2Plant -- forse meglio non cancellarli e sostituirli in import? ma se non li ho in anagrafica non riesco!!! + DELETE FROM dbo.PlantsDet + DELETE FROM dbo.ClientDet + + exec ext.stp_mergeClientDet 'ProductionLogRaw' + exec ext.stp_mergeClientDet 'ClientsRaw' + + -- exec ext.stp_mergeTranspCostDet 'TranspCostRaw' -- NON DEMO + exec ext.stp_mergePlantsDet + -- exec ext.stp_mergeCost2Plant non carica i valori caricati a mano dopo + + TRUNCATE TABLE dbo.DiesDet + DELETE FROM dbo.DiesGroupDet + DELETE FROM dbo.ItemDet + exec ext.stp_mergeItemDet 'ItemsRaw' + exec ext.stp_mergePackagDet 'ProductionLogRaw' -- 'PackagRaw' + + exec ext.stp_mergeDiesDet + -- se ricarico diesgroup... ricarico solo i campi che nel file sono <> '' + exec ext.stp_mergeDiesGroupDet + + DELETE FROM dbo.RawMatDet + exec ext.stp_mergeRawMat + exec ext.stp_updateProductionLog + + --DECLARE @dateFrom AS DateTime; + --DECLARE @dateTo AS DateTime; + + --SET @dateFrom = '20100101' + --SET @dateTo = '20130929' + exec ext.stp_mergePackage2ItemClient 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2Item 'ProductionLog', @dateFrom, @dateTo + exec ext.stp_mergePackage2 'ProductionLog', @dateFrom, @dateTo + + -- ========================================================================= + -- aggiorno CodPlan nelle Utilities ( sono state caricate a mano ??? ) + -- ========================================================================= + SELECT * FROM utilities + UPDATE Utilities + SET CodPlant = tp.CodPlantNew + FROM Utilities AS u + INNER JOIN TrascPlan tp ON u.CodPlant = tp.CodPlant + + ---- aggiorno quota agenti a 0.037 + ----update AgentsDet set quotaperc=0.0374 + + --SELECT DISTINCT dr.CodItem FROM ext.DiesRaw dr LEFT OUTER JOIN ItemDet id ON dr.CodItem = id.CodItem + --where id.CodItemGroup is null + + select * from ClientDet + select * from ItemDet + select * from Package2ItemClient + select * from Package2Item + select * from Package2 + select * from PackagDet + select * from DiesGroupDet where EOLLife > 0 + select * from DiesDet + select * from DiesGroupDet + select * from AgentsDet + select * from PlantsDet + select * from Cost2Plant + select * from utilities + select top 100 * from ProductionLog + + --update tmp.ProductionLogRaw + --set + -- okPr = 1 + -- , okDi = 1 + -- , okQM = 1 + -- , okSc = 1 + + --select distinct ProcessNum from ProductionLog + --select top 10 * from ext.ProductionLogRaw + + ---- fix errore packaging + --update tmp.ProductionLogRaw + --SET CodPackag='4' + --where CodPackag LIKE '%4%' and CodPackag <> '4' + --select * from tmp.ProductionLogRaw where CodPackag LIKE '%4%' and CodPackag <> '4' + + --SELECT p.CodDies, CodItem, CodClient, CodPackag, p.* FROM ext.ProductionLogRaw AS p + --LEFT JOIN dbo.DiesDet AS d ON p.CodDies = d.CodDies + --WHERE CodItem IS NULL + + -- =========================== + -- parte CALCOLI!!! + -- =========================== + + TRUNCATE TABLE [dbo].[QuoteWorkInt] + TRUNCATE TABLE [dbo].[QuoteWorkExt] + TRUNCATE TABLE [dbo].QuoteParam + TRUNCATE TABLE [dbo].QuoteOC + TRUNCATE TABLE [dbo].[QuoteFull_Q] + + --TRUNCATE TABLE [dbo].QuoteRM -- controllare prima di cancellare + --DELETE FROM QuoteList + + SELECT * FROM QuoteList + SELECT TOP 1000 * FROM QuoteRM + + --select * from ClientDet where CodClient='05000001048' + --select * from itemdet + --where CodItem like '1PT00102%' + + select * from RawMatDet + + --Q 1312130001 0 05000001048 1PT00102 A 7020 7673,400 1000 CPT NULL NULL NULL NULL + + SELECT --TOP 10 + dd.CodItem, pl.RawMat, dd.CodItem + '-' + pl.RawMat as KeyAM, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ,dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL + ,0 as NumSMED -- numero cambi, da sistemare... + , SUM(QtyOUT) as KgTeorici, SUM(Duration) AS Durata + ,ISNULL(SUM(QtyOUT),0)/ISNULL(SUM(Duration), 1) as ProduttTeo + FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies + WHERE pl.ProcessNum='01' and pl.EventType=1 + GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum + ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC + + -- ========================================== + -- re-insert dei dati di produzione x statistiche + -- ========================================== + --DECLARE @dateFrom AS DateTime; + --DECLARE @dateTo AS DateTime; + --SET @dateFrom = '20100101' + --SET @dateTo = '20130929' + + exec stp_TPS_upsert @dateFrom, @dateTo + exec stp_TD_upsert @dateFrom , @dateTo +-- exec stp_TI_upsert @dateFrom , @dateTo -- adesso sono già calcolati e inseriti in Package2 / Package2Item + + SELECT TOP 1000 * FROM TabProdSc + SELECT TOP 1000 * FROM TabDifett + + -- ========================================== + -- salvo nuova revisione dati di produzione... + -- Va messa in ogni procedura di update con 'procedura' e versione anno-mese-giorno + -- ========================================== + --INSERT INTO RevHistory + --SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione x fase 04 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120) + --FROM RevHistory + --WHERE RevType = 'P' + -- AND RevNum = 1 -- mod. 14/05 GCARLO altrimenti ne crea una per ogni riga di RevHistory + + --select * from RevHistory + + -- simulazione tempo di calcolo: circa 50/sec + ---- aggiornamento dei dati dell'offerta in oggetto + --DECLARE @tick DATETIME, + -- @idx INT = 100 + --SET @tick = GETDATE() + --WHILE @idx > 0 + --BEGIN + -- EXEC stp_QL_update 'Q', 1312130001, 0 + -- SELECT @idx = @idx - 1 + --END + --SELECT GETDATE() - @tick as tempo + +/* + ARRIVATO QUI - da errore la funzione f_getSubstring perchè ritorna NULL al posto di '' ??? riga della stored 295 dovuto a trasformazione dei gruppi Dies - sistemato +*/ + + -- prima aggiorno i dati di Cost2Plant che non si sa da dove arrivano ( caricati a mano??? ) + + SELECT TOP 1000 * FROM Cost2Plant + SELECT TOP 1000 * FROM Proxima_C2P.dbo.Cost2Plant + SELECT * from TrascPlan + + DELETE FROM Cost2Plant + + INSERT INTO Cost2Plant + SELECT t.CodPlantNew, ProcessNum, FC, VC, OH, SC, QuotaPlantStd, QuotaManStd + FROM Proxima_C2P.dbo.Cost2Plant AS cp + LEFT JOIN TrascPlan AS t ON cp.CodPlant = t.CodPlant + + -- GCARLO DEVO creare la riga per il test, la copio da quella di sviluppo e agg. i dati di demo + SELECT TOP 1000 * FROM QuoteList + SELECT TOP 1000 * FROM QuoteRM + SELECT TOP 1000 * FROM Proxima_C2P.dbo.QuoteList + SELECT TOP 1000 * FROM Proxima_C2P.dbo.QuoteRM WHERE CodQuote = '1402050001' + + -- creo righe di test + INSERT QuoteList + SELECT QuoteType, CodQuote, QuoteRev, IdxQState, CodClientNew, CodItemNew, CodItemGroup, RawMat, UnitWeight, BatchQty, CodInco, Note, PriceOff, OrdDate, OrdNum, OrdRow, OrdPrice, valid, errorScore + FROM Proxima_C2P.[dbo].[QuoteList] AS q + INNER JOIN [dbo].[TrascClient] AS tc ON q.CodClient = tc.CodClient + INNER JOIN dbo.TrascItem AS ti ON q.CodItem = ti.CodItem + + INSERT QuoteRM + SELECT QuoteType, CodQuote, QuoteRev, NumRM, RawMat, RawMatCost, RawMatExtraCost, CodPackag, FCR, valid + FROM Proxima_C2P.[dbo].[QuoteRM] + + UPDATE QuoteList + SET CodClient = ( SELECT CodClientNew FROM TrascClient WHERE CodClient = '05000000382' ) + ,CodItem = ( SELECT CodItemNew FROM TrascItem WHERE CodItem = '3DI05376' ) + WHERE CodQuote = '1402050001' + + -- *** ESEGUO L'AGGIORNAMENTO **** + + DECLARE @QuoteType CHAR(1) = 'Q', + @CodQuote BIGINT = 1402050001, + @QuoteRev INT = 0, + @PriceOff DECIMAL(9, 6) = 0 + + -- EXEC stp_QL_update 'Q', 1402050001, 0 -- <<<<< ERRORE + -- EXECUTE dbo.stp_QuoteFull_Q_update 'Q', 1402050001, 0, 0.1 -- crea il record in QuoteFull_Q + + EXEC stp_QL_update @QuoteType, @CodQuote, @QuoteRev + SELECT @PriceOff = PriceOff FROM QuoteList WHERE CodQuote= @CodQuote AND QuoteRev = @QuoteRev + EXECUTE dbo.stp_QuoteFull_Q_update @QuoteType, @CodQuote, @QuoteRev -- crea il record in QuoteFull_Q + + SELECT * FROM QuoteList WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteRM WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkInt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteWorkExt WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteOC WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + SELECT * FROM QuoteParam WHERE QuoteType=@QuoteType AND CodQuote = @CodQuote AND QuoteRev = @QuoteRev + + select top 10 * from ItemDet + + SELECT * FROM RawMatDet + + SELECT top 10 * FROM TabProdSc + SELECT top 10 * FROM TabDifett +-- SELECT * FROM TabImbArt +-- SELECT * FROM TabImbGrp + SELECT * FROM PackagDet + SELECT * FROM Package2 + + ---- test gestione selezione CodPackag corretto + --SELECT TOP 5 * FROM Package2ItemClient + --SELECT TOP 5 * FROM Package2Item + --SELECT TOP 5 * FROM Package2 + + -- SELECT dbo.f_getCodPackag('1EL00005', '05000001048') + --SELECT dbo.f_getCodPackag('1AN00001', '05000000137') + + +END +GO +PRINT N'Creating [dbo].[QuoteOC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Altri costi (diretti-indiretti)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[NumEx].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo del costo OTHER', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'NumEx'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): 01 .. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 01, tipo di costo : +- UTIL (EE/GAS) +- ROTTAME (costo rifusione + quota perdita x ri-vendita) +- CONS +- TRASP +- PROVV +- EXTRA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class02].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 02, codice di ricerca per tipo di costo extra, es se consumabili è codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class02'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class03].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 03', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class03'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class04].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class04'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Class05].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 05', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Class05'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[TotQty].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'quantità totale di riferimento', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'TotQty'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[TotCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo totale di riferimento', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'TotCost'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[Quota].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quota di impiego', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'Quota'; + + +GO +PRINT N'Creating [dbo].[QuoteOC].[C4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo pro quota di impiego (per matrici, imballi,...)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteOC', @level2type = N'COLUMN', @level2name = N'C4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[NumWE].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'NumWE'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[EWC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'External Work Cost FOR Unit of Good, quota dei costi fissi per unità di prodotto finito (Copertura Costo Struttura e Linea)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'EWC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkExt].[UM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Unità di misura di riferimento per il costo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkExt', @level2type = N'COLUMN', @level2name = N'UM'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quantità totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2Item].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2Item', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quantità totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2ItemClient].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2ItemClient', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[PackagDet].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PackagDet', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [dbo].[PackagDet].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PackagDet', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[Descript].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'descrizione impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'Descript'; + + +GO +PRINT N'Creating [dbo].[PlantsDet].[Charge].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Over Head costo €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'PlantsDet', @level2type = N'COLUMN', @level2name = N'Charge'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[RevType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo di revisione indicata coem S.C.P --> in C = costi di contab industriale, P = da ProductionLog, S = Sistema di calcolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'RevType'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[RevNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'incrementale del numero di revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'RevNum'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[DateRev].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'DateRev'; + + +GO +PRINT N'Creating [dbo].[RevHistory].[Description].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'descrizione revisione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RevHistory', @level2type = N'COLUMN', @level2name = N'Description'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[CodDiesGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice CLASSE matrice, es tipo + diametro', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'CodDiesGroup'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[Price].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'prezzo di acquisto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'Price'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[QtyTot].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Totale matrici del gruppo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'QtyTot'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[QtyEOL].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero rottamate nel gruppo (End Of Life)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'QtyEOL'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[ExpLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attesa in kg PREVISTA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'ExpLife'; + + +GO +PRINT N'Creating [dbo].[DiesGroupDet].[EOLLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attuale (delle rottamate, media) in kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesGroupDet', @level2type = N'COLUMN', @level2name = N'EOLLife'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[FC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo Fissi €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'FC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[VC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costi Variabili €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'VC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[OH].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Over Head costo €/h per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'OH'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[SC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costoSETUP €/cambio per CDC + FASE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'SC'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[QuotaPlantStd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'QuotaPlantStd'; + + +GO +PRINT N'Creating [dbo].[Cost2Plant].[QuotaManStd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Cost2Plant', @level2type = N'COLUMN', @level2name = N'QuotaManStd'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Client Details Table', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'città', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [dbo].[ClientDet].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ClientDet', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[Lastname].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Cognome', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'Lastname'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[Firstname].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Nome', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'Firstname'; + + +GO +PRINT N'Creating [dbo].[AgentsDet].[QuotaProvvAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Provvigione come €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'AgentsDet', @level2type = N'COLUMN', @level2name = N'QuotaProvvAg'; + + +GO +PRINT N'Creating [dbo].[Utilities].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo unitario per unità di PF (€/kg)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities'; + + +GO +PRINT N'Creating [dbo].[Utilities].[CodUtil].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice dell''utility (Energia elettrica / gas)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'CodUtil'; + + +GO +PRINT N'Creating [dbo].[Utilities].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[Utilities].[UnitCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo al kg per impianto ed utility', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Utilities', @level2type = N'COLUMN', @level2name = N'UnitCost'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[CodInco].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Codice Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'CodInco'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[Descript].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Descrizione Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'Descript'; + + +GO +PRINT N'Creating [dbo].[Incoterms].[HasTC].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Indica se ha costi di trasporto (1) o non lil ha (0)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Incoterms', @level2type = N'COLUMN', @level2name = N'HasTC'; + + +GO +PRINT N'Creating [dbo].[TranspCostDet].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TranspCostDet', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[TranspCostDet].[TranspCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costi di traporto €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TranspCostDet', @level2type = N'COLUMN', @level2name = N'TranspCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[NumRM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'NumRM'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMatCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo della MP €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMatCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[RawMatExtraCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo degli extra della MP €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'RawMatExtraCost'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tasso di conversione TOTALE, messa al cento, quantità di MP necessaria per produrre un unità di prodotto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FCR'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'FULL Yield Ratio, percentuale RESA TOTALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FYR'; + + +GO +PRINT N'Creating [dbo].[QuoteRM].[FSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'FULL Scrape Ratio, percentuale scarto TOTALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteRM', @level2type = N'COLUMN', @level2name = N'FSR'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Item Details Table', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[UnitWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso espresso come g/m (grammi / metro)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'UnitWeight'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'classe raggruppamento (es complessità disegno)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [dbo].[ItemDet].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ItemDet', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[v_selClient].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "ClientDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 258 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 11790 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient'; + + +GO +PRINT N'Creating [dbo].[v_selClient].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient'; + + +GO +PRINT N'Creating [dbo].[Package2].[TotQta].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quantità totale lavorata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'TotQta'; + + +GO +PRINT N'Creating [dbo].[Package2].[Weight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Peso medio', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'Weight'; + + +GO +PRINT N'Creating [dbo].[Package2].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'Package2', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [dbo].[v_selIncoterms].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selIncoterms'; + + +GO +PRINT N'Creating [dbo].[v_selIncoterms].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "Incoterms" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 119 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 5055 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selIncoterms'; + + +GO +PRINT N'Creating [dbo].[v_selCons].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selCons'; + + +GO +PRINT N'Creating [dbo].[v_selCons].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[41] 4[20] 2[10] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "Incoterms" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 119 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 840 + Width = 4620 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selCons'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[CodDiesGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice CLASSE matrice, es tipo + diametro; nota: massima numerosità pari a numero articoli, minima numerosità 1', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'CodDiesGroup'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[Price].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'prezzo di acquisto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'Price'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[TestCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo di prove e correzioni', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'TestCost'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[ExpLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attesa in kg PREVISTA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'ExpLife'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[ActLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata attuale (delle rottamate, media) in kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'ActLife'; + + +GO +PRINT N'Creating [dbo].[DiesDet].[Active].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Stato: 1 = disponibile, 0 = rottamata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'DiesDet', @level2type = N'COLUMN', @level2name = N'Active'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventStart].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'inizio evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventStart'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventEnd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'fine evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventEnd'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[OrderNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'rif codice ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'OrderNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[BatchNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice lotto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'BatchNum'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[ProcessType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice del TIPO di fase, x raggruppamento funzionale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'ProcessType'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[EventType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo evento: produzione, prova, guasto, setup...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'EventType'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[CodPackag].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'CodPackag'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyIN'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyOUT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QtyEXT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale dbora che fa parte dell''OUT, es imballi/tara', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QtyEXT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[NumIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'NumIN'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[NumOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'NumOUT'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QuotaPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QuotaPlant'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[QuotaMan].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'QuotaMan'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[Tags].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'categorie LIBERE, separatore #', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'Tags'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[Duration].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata espressa in ore', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'Duration'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttività', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [dbo].[ProductionLog].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettosità', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ProductionLog', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quotation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[IdxQState].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Stato offerta: 0 = D raft, 1 = C ompleted / in approvazione, 2 = A pprouved, 3 = R eleased', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q', @level2type = N'COLUMN', @level2name = N'IdxQState'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[PriceOff].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo Offerto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q', @level2type = N'COLUMN', @level2name = N'PriceOff'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_Q].[errorScore].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'punteggio complessivo errori in procedure di calcolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_Q', @level2type = N'COLUMN', @level2name = N'errorScore'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[IdxQState].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Stato offerta: 0 = D raft, 1 = C ompleted / in approvazione, 2 = A pprouved, 3 = R eleased', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'IdxQState'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'classe raggruppamento (es complessità disegno)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[UnitWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso espresso come g/m (grammi / metro)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'UnitWeight'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[BatchQty].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quantità lotto kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'BatchQty'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[CodInco].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Codice Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'CodInco'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[PriceOff].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo Offerto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'PriceOff'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdDate].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data dell''ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdDate'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdNum'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdRow].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'riga ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdRow'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[OrdPrice].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo finale ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'OrdPrice'; + + +GO +PRINT N'Creating [dbo].[QuoteList].[errorScore].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'punteggio complessivo errori in procedure di calcolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteList', @level2type = N'COLUMN', @level2name = N'errorScore'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[NumP].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'NumP'; + + +GO +PRINT N'Creating [dbo].[QuoteParam].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): 01 .. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteParam', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[NumWI].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'progressivo interno', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'NumWI'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Tipo risorsa (e lavorazione): estrusione/imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 01, ARTICOLO + MATERIALE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class02].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 02, codice di ricerca per prod - es cod imballo o Chiave di ricerca Articolo/ClasseArt + RawMat+ Impianto + NumLuci', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class02'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class03].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 03, tipo imballo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class03'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class04].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 04', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class04'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[Class05].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 05', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'Class05'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[NetProd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Produttivita netta (teorica) kg/h', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'NetProd'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Scrape Ratio, percentuale scarto della lavorazione (tecnico)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Scrape Ratio, percentuale scarto legato alla MP (cesoia x alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Scrape Ratio, percentuale scarto per difettosità prodotto (qualità)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DSR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[FC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Fixed Cost FOR Unit of Good, quota dei costi fissi per unità di prodotto finito (Copertura Costo Struttura e Linea)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'FC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[VC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Variables Cost FOR Unit of Good, quota dei costi variabili per unità di prodotto finito (Costo del personale x Alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'VC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[OH4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'OH Cost FOR Unit of Good, quota dei costi Over Head per unità di prodotto finito', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'OH4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[SC4UG].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Setup Cost FOR Unit of Good, quota dei costi di setup per unità di prodotto finito (costo cambio matrice x Alx)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'SC4UG'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Yield Ratio, percentuale RESA della lavorazione (tecnico), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Yield Ratio, percentuale RESA legato alla MP (cesoia x alx), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DYR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Yield Ratio, percentuale RESA per difettosità prodotto (qualità), 1 - scarto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DYR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[WCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Work Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'WCR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[MCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Material Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'MCR'; + + +GO +PRINT N'Creating [dbo].[QuoteWorkInt].[DCR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Conversion Ratio, Messa a Cento, 1 / RESA', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteWorkInt', @level2type = N'COLUMN', @level2name = N'DCR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ProcCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo del processo di rifusione €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ProcCost'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ProcYield].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'resa del processo di rifusione %', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ProcYield'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[CSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Cut Scrape Ratio, percentuale scarto cesoia', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'CSR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Ratio, percentuale di vendita dello scarto ( da 0 a 1)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSVA].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Value - ABSOLUTE, valore di vendita dello scarto ASSOLUTO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSVA'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[SSVR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scrape Sell Value - RELATIVE come valore % del valore lega', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'SSVR'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ExtraMatCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo extra di acquisto del materiale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ExtraMatCost'; + + +GO +PRINT N'Creating [dbo].[RawMatDet].[ExtraServCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Costo extra dei servizi sul materiale (es ultrasuoni)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'RawMatDet', @level2type = N'COLUMN', @level2name = N'ExtraServCost'; + + +GO +PRINT N'Creating [dbo].[TabProdSc].[ProdTeo].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'produttività teorica (kgTeorici / durata h)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TabProdSc', @level2type = N'COLUMN', @level2name = N'ProdTeo'; + + +GO +PRINT N'Creating [dbo].[TabProdSc].[ScTec].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto tecnico: 1 - (KgTeorici/ISNULL(KgLordi,1))', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TabProdSc', @level2type = N'COLUMN', @level2name = N'ScTec'; + + +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = -672 + Left = 0 + End + Begin Tables = + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 101 + Width = 284 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + ', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 2, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[v_QuoteFull_Q].[MS_DiagramPane2]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane2', @value = N' Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q'; + + +GO +PRINT N'Creating [dbo].[v_selItems].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "ItemDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 254 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 4635 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems'; + + +GO +PRINT N'Creating [dbo].[v_selItems].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems'; + + +GO +PRINT N'Creating [dbo].[TrascDies].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascDies'; + + +GO +PRINT N'Creating [dbo].[TrascItem].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascItem'; + + +GO +PRINT N'Creating [dbo].[TrascPlan].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascPlan'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[OrdNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'OrdNum'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[OrdRow].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'riga ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'OrdRow'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[OrdDate].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data dell''ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'OrdDate'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[RawMatCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo della MP €/kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'RawMatCost'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[BatchQty].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Quantità lotto kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'BatchQty'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[CodInco].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Codice Incoterms', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'CodInco'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[OrdPrice].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo finale ordine', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'OrdPrice'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[OrdersHist].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'OrdersHist', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_R].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Resa', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_R'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_R].[IdxQState].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Stato offerta: 0 = D raft, 1 = C ompleted / in approvazione, 2 = A pprouved, 3 = R eleased', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_R', @level2type = N'COLUMN', @level2name = N'IdxQState'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_R].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_R', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_R].[PriceOff].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo Offerto', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_R', @level2type = N'COLUMN', @level2name = N'PriceOff'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_R].[errorScore].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'punteggio complessivo errori in procedure di calcolo', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_R', @level2type = N'COLUMN', @level2name = N'errorScore'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DiesPrice_sim].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo matrice per SIMULAZIONE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DiesPrice_sim'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[SamplePrice].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo prove', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'SamplePrice'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DiesFullCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costo prove', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DiesFullCost'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DiesTecLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata tecnica stimata', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DiesTecLife'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DiesCommLife].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata commerciale in kg', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DiesCommLife'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[MonthSalesPrev].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Durata commerciale in mesi prevista', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'MonthSalesPrev'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[SalesPrevCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'costi per durata commerciale', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'SalesPrevCost'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DiesFinCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'oneri finanziari anticipo matrice', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DiesFinCost'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[ClientQuoteReven].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ricavo quota cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'ClientQuoteReven'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[ExtraDiscountDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ricavo quota cliente', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'ExtraDiscountDies'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[WSR01_sim].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto tecnico SIMULAZIONE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'WSR01_sim'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[WSR01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto tecnico medio AMIL', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'WSR01'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[MSR01_sim].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto cesoia SIMULAZIONE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'MSR01_sim'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[MSR01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto cesoia medio AMIL', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'MSR01'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[NetProd01_sim].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'produttività teorica SIMULAZIONE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'NetProd01_sim'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[NetProd01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'produttività teorica medio AMIL', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'NetProd01'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DSR_sim].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto medio SIMULAZIONE', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DSR_sim'; + + +GO +PRINT N'Creating [dbo].[QuoteFull_S].[DSR].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'scarto medio AMI', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteFull_S', @level2type = N'COLUMN', @level2name = N'DSR'; + + +GO +PRINT N'Creating [dbo].[QuoteSimPar].[QuoteType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo di preventivo: Q = quote, S = simulation', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteSimPar', @level2type = N'COLUMN', @level2name = N'QuoteType'; + + +GO +PRINT N'Creating [dbo].[QuoteSimPar].[CodQuote].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'numero nel formato yyMMddnnnn dove nnn è incrementale giornaliero', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'QuoteSimPar', @level2type = N'COLUMN', @level2name = N'CodQuote'; + + +GO +PRINT N'Creating [dbo].[ReportPrintTicket].[Ticket].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ticket univoco per stampa', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ReportPrintTicket', @level2type = N'COLUMN', @level2name = N'Ticket'; + + +GO +PRINT N'Creating [dbo].[ReportPrintTicket].[Chiave].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'chiave multipla richiesta (specifica epr report)', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ReportPrintTicket', @level2type = N'COLUMN', @level2name = N'Chiave'; + + +GO +PRINT N'Creating [dbo].[ReportPrintTicket].[UserReq].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'user richiesta', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ReportPrintTicket', @level2type = N'COLUMN', @level2name = N'UserReq'; + + +GO +PRINT N'Creating [dbo].[ReportPrintTicket].[DataReq].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data richiesta', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ReportPrintTicket', @level2type = N'COLUMN', @level2name = N'DataReq'; + + +GO +PRINT N'Creating [dbo].[ReportPrintTicket].[DataPrint].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'data stampa', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ReportPrintTicket', @level2type = N'COLUMN', @level2name = N'DataPrint'; + + +GO +PRINT N'Creating [dbo].[TrascClass01].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascClass01'; + + +GO +PRINT N'Creating [dbo].[TrascClass02].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascClass02'; + + +GO +PRINT N'Creating [dbo].[TrascClass03].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascClass03'; + + +GO +PRINT N'Creating [dbo].[TrascClient].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Tabella per Trascodifica dati in Dati DEMO', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'TrascClient'; + + +GO +PRINT N'Creating [dbo].[v_pivot].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_pivot'; + + +GO +PRINT N'Creating [dbo].[v_pivot].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_pivot'; + + +GO +PRINT N'Creating [dbo].[v_selDateStdCost].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selDateStdCost'; + + +GO +PRINT N'Creating [dbo].[v_selDateStdCost].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "QuoteFull_C" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 136 + Right = 213 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selDateStdCost'; + + +GO +PRINT N'Creating [dbo].[v_selPackage].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selPackage'; + + +GO +PRINT N'Creating [dbo].[v_selPackage].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "PackagDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 136 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selPackage'; + + +GO +PRINT N'Creating [dbo].[v_selPlant].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selPlant'; + + +GO +PRINT N'Creating [dbo].[v_selPlant].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "PlantsDet" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 119 + Right = 208 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selPlant'; + + +GO +PRINT N'Creating [dbo].[v_StdCostList].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_StdCostList'; + + +GO +PRINT N'Creating [dbo].[v_StdCostList].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[41] 4[20] 2[8] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "QuoteFull_C" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 136 + Right = 213 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 16 + Width = 284 + Width = 2205 + Width = 2250 + Width = 1200 + Width = 915 + Width = 720 + Width = 1065 + Width = 1230 + Width = 840 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_StdCostList'; + + +GO +PRINT N'Creating [dbo].[v_listinoArticoli].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_listinoArticoli'; + + +GO +PRINT N'Creating [dbo].[v_listinoArticoli].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "ProductionLog" + Begin Extent = + Top = 26 + Left = 424 + Bottom = 347 + Right = 594 + End + DisplayFlags = 280 + TopColumn = 0 + End + Begin Table = "DiesDet" + Begin Extent = + Top = 77 + Left = 128 + Bottom = 247 + Right = 298 + End + DisplayFlags = 280 + TopColumn = 0 + End + Begin Table = "RawMatDet" + Begin Extent = + Top = 138 + Left = 703 + Bottom = 360 + Right = 873 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 13 + Width = 284 + Width = 2055 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_listinoArticoli'; + + +GO +PRINT N'Creating [dbo].[v_MarginReport].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 2, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReport'; + + +GO +PRINT N'Creating [dbo].[v_MarginReport].[MS_DiagramPane2]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane2', @value = N' + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 11 + Column = 12180 + Alias = 1725 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReport'; + + +GO +PRINT N'Creating [dbo].[v_MarginReport].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[25] 4[31] 2[14] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "QuoteFull_R" + Begin Extent = + Top = 5 + Left = 30 + Bottom = 226 + Right = 213 + End + DisplayFlags = 280 + TopColumn = 69 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 109 + Width = 284 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 2445 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 ', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReport'; + + +GO +PRINT N'Creating [dbo].[v_MarginReportStats].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReportStats'; + + +GO +PRINT N'Creating [dbo].[v_MarginReportStats].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "QuoteFull_R" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 273 + Right = 237 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + End + Begin CriteriaPane = + Begin ColumnWidths = 12 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReportStats'; + + +GO +PRINT N'Creating [dbo].[v_MarginReportStatsNewData].[MS_DiagramPaneCount]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReportStatsNewData'; + + +GO +PRINT N'Creating [dbo].[v_MarginReportStatsNewData].[MS_DiagramPane1]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_DiagramPane1', @value = N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00] +Begin DesignProperties = + Begin PaneConfigurations = + Begin PaneConfiguration = 0 + NumPanes = 4 + Configuration = "(H (1[40] 4[20] 2[20] 3) )" + End + Begin PaneConfiguration = 1 + NumPanes = 3 + Configuration = "(H (1 [50] 4 [25] 3))" + End + Begin PaneConfiguration = 2 + NumPanes = 3 + Configuration = "(H (1 [50] 2 [25] 3))" + End + Begin PaneConfiguration = 3 + NumPanes = 3 + Configuration = "(H (4 [30] 2 [40] 3))" + End + Begin PaneConfiguration = 4 + NumPanes = 2 + Configuration = "(H (1 [56] 3))" + End + Begin PaneConfiguration = 5 + NumPanes = 2 + Configuration = "(H (2 [66] 3))" + End + Begin PaneConfiguration = 6 + NumPanes = 2 + Configuration = "(H (4 [50] 3))" + End + Begin PaneConfiguration = 7 + NumPanes = 1 + Configuration = "(V (3))" + End + Begin PaneConfiguration = 8 + NumPanes = 3 + Configuration = "(H (1[56] 4[18] 2) )" + End + Begin PaneConfiguration = 9 + NumPanes = 2 + Configuration = "(H (1 [75] 4))" + End + Begin PaneConfiguration = 10 + NumPanes = 2 + Configuration = "(H (1[66] 2) )" + End + Begin PaneConfiguration = 11 + NumPanes = 2 + Configuration = "(H (4 [60] 2))" + End + Begin PaneConfiguration = 12 + NumPanes = 1 + Configuration = "(H (1) )" + End + Begin PaneConfiguration = 13 + NumPanes = 1 + Configuration = "(V (4))" + End + Begin PaneConfiguration = 14 + NumPanes = 1 + Configuration = "(V (2))" + End + ActivePaneConfig = 0 + End + Begin DiagramPane = + Begin Origin = + Top = 0 + Left = 0 + End + Begin Tables = + Begin Table = "OrdersHistRaw (ext)" + Begin Extent = + Top = 6 + Left = 38 + Bottom = 298 + Right = 219 + End + DisplayFlags = 280 + TopColumn = 0 + End + End + End + Begin SQLPane = + End + Begin DataPane = + Begin ParameterDefaults = "" + End + Begin ColumnWidths = 9 + Width = 284 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + Width = 1500 + End + End + Begin CriteriaPane = + Begin ColumnWidths = 12 + Column = 1440 + Alias = 900 + Table = 1170 + Output = 720 + Append = 1400 + NewValue = 1170 + SortType = 1350 + SortOrder = 1410 + GroupBy = 1350 + Filter = 1350 + Or = 1350 + Or = 1350 + Or = 1350 + End + End +End +', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_MarginReportStatsNewData'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'città', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [ext].[ClientsRaw].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventStart].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'inizio evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventStart'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventEnd].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'fine evento - formato INT 16 cifre yyyyMMddHHmmssnn dove nn = centesimi di sec oppure 00', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventEnd'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice impianto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodPlant'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[ProcessNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice fase, da qui si crea anagrafica fasi distinct', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'ProcessNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodDies].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice matrice', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodDies'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[OrderNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'rif codice ordine', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'OrderNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[BatchNum].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice lotto', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'BatchNum'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[ProcessType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice del TIPO di fase, x raggruppamento funzionale', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'ProcessType'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[EventType].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'tipo evento: produzione, prova, guasto, setup...', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'EventType'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[RawMat].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice MP', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'RawMat'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[CodPackag].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice imballo', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'CodPackag'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyIN'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyOUT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QtyEXT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg materiale extra che fa parte dell''OUT, es imballi/tara', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QtyEXT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[NumIN].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale in ingresso', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'NumIN'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[NumOUT].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'qta materiale BUONO prodotto in OUTput', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'NumOUT'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QuotaPlant].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota macchina per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QuotaPlant'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[QuotaMan].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'indicazione della quota uomo per produrre quanto registrato', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'QuotaMan'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[Tags].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'categorie LIBERE, separatore #', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'Tags'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttività', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettosità', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttività', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [ext].[ProductionLogRaw_KO].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettosità', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'calsse raggruppamento (es complessità disegno)', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [ext].[ItemsRaw].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg tara standard', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [ext].[PackagRaw].[FullWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso medio del pacco (compelssivo)', @level0type = N'SCHEMA', @level0name = N'ext', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'FullWeight'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttività', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw_KO].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettosità', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw_KO', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[CodClient].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice cliente', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodClient'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[ClientName].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Ragione Sociale', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ClientName'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[CodAg].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice agente...', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'CodAg'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[ZipCode].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'cap', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'ZipCode'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[City].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'città', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'City'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[State].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'stato/provincia', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'State'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[Nation].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'nazione', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'Nation'; + + +GO +PRINT N'Creating [tmp].[ClientsRaw].[TranspZone].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Classificazione cliente (es zona, provincia...) x incrocio con tab costi trasporto', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ClientsRaw', @level2type = N'COLUMN', @level2name = N'TranspZone'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[CodItem].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'codice articolo', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItem'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[CodItemGroup].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'calsse raggruppamento (es complessità disegno)', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'CodItemGroup'; + + +GO +PRINT N'Creating [tmp].[ItemsRaw].[Class01].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ItemsRaw', @level2type = N'COLUMN', @level2name = N'Class01'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okPr].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo produttività', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okPr'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okQM].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo quota MAN', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okQM'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okSc].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo scarti', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okSc'; + + +GO +PRINT N'Creating [tmp].[ProductionLogRaw].[okDi].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'validazione riga x calcolo difettosità', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'ProductionLogRaw', @level2type = N'COLUMN', @level2name = N'okDi'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[RMCost].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Raw Material Cost - costo dei materiali', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMCost'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[RMWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg peso medio', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'RMWeight'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[Tare].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'kg tara standard', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'Tare'; + + +GO +PRINT N'Creating [tmp].[PackagRaw].[FullWeight].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'peso medio del pacco (compelssivo)', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'PackagRaw', @level2type = N'COLUMN', @level2name = N'FullWeight'; + + +GO +PRINT N'Creating [tmp].[OrdersHistRaw].[Note]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'Note', @value = N'Import storico ordini per Quote_C', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'OrdersHistRaw'; + + +GO +PRINT N'Creating [tmp].[OrdersHistRaw].[OrdPrice].[MS_Description]...'; + + +GO +EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Prezzo finale ordine', @level0type = N'SCHEMA', @level0name = N'tmp', @level1type = N'TABLE', @level1name = N'OrdersHistRaw', @level2type = N'COLUMN', @level2name = N'OrdPrice'; + + +GO +DECLARE @VarDecimalSupported AS BIT; + +SELECT @VarDecimalSupported = 0; + +IF ((ServerProperty(N'EngineEdition') = 3) + AND (((@@microsoftversion / power(2, 24) = 9) + AND (@@microsoftversion & 0xffff >= 3024)) + OR ((@@microsoftversion / power(2, 24) = 10) + AND (@@microsoftversion & 0xffff >= 1600)))) + SELECT @VarDecimalSupported = 1; + +IF (@VarDecimalSupported > 0) + BEGIN + EXECUTE sp_db_vardecimal_storage_format N'$(DatabaseName)', 'ON'; + END + + +GO +ALTER DATABASE [$(DatabaseName)] + SET MULTI_USER + WITH ROLLBACK IMMEDIATE; + + +GO +PRINT N'Update complete.'; + + +GO diff --git a/C2P_Project/bin/Output/C2P_Project.dll b/C2P_Project/bin/Output/C2P_Project.dll new file mode 100644 index 0000000000000000000000000000000000000000..d74c0931e84ca4dcac5dff3ac175903308c6843d GIT binary patch literal 3584 zcmeHJ&u<%55dJoC(xf3#5Kz%jrJG+8h-&2~76OF8O&n;dq_JWr{E$(yUO$|T*1KkR zT@r*!E=bT*{{hq0^402Nm*Nc{sUap8bCG<@^Cj-9AN72<#(le~E|^S+rk zGjI2;m)^UMZU8Bc{e9pzXQ8a-f6aEeJaqQEA?)?v8@p{R-Ww}!x{+BAgKB8kOvm>9 zAU4a&3>&`b`etsqVAg_)vIYlFP9~xA^T49fji1iGP;BjXA6;Vu#sJVuiwu$_4kkyI z0~pqFS2J%hBrsr?3hhGO*!WDK^532lRZOIxCxC(oS>RUUC+Y!h08dc4IS!mTFg}K0 z0(~8@KI#`cbSqZdG4+fzo@=^*Bm2|5VTDoXa9QV;r6Bmuz*K3@TA}g+0wq^$a7Zkz za84)-%(mp#JS=@BNp4-}LEZ%N^fkozH)ytSY1T-*W&0}`D{alBXU@MO!Fu44?{Q3A zW!c>1N0AG0==#-&A|B8t@Ec`0x{0?|7jm3a%xh8fSuZGa7Lrs?JPq`V^2gK+ zPBn9vHc1WL$q-ova59;D@e(F*0+(p(#iv*&zdt<p~jPq(~HBwa<(+N?Div z?`D(j^hQNC+j^(edjH$D^|>I-dES!k`psujDgAs3Vt&trws0+w-^`U3fzl!fl5etp=wZ?z#| zZzQwaq8(wiHAikRs*R9wTz*p&WBT|2fnJ}~cW;raHmwoYZN$U{)S7fFwa0tJU`{bn zF74GvM7pjqX|(<_C{qT`F(cyupX2Tk937{AXdjc)Lz#OKLXAkp?6JU!rhkIJ65GCK%=XGw2v{$v~98q=b=%gC+{WOXI literal 0 HcmV?d00001 diff --git a/C2P_Report/C2P_Report.csproj b/C2P_Report/C2P_Report.csproj index dfc5c8b..aef69f5 100644 --- a/C2P_Report/C2P_Report.csproj +++ b/C2P_Report/C2P_Report.csproj @@ -109,6 +109,7 @@ Designer + @@ -127,6 +128,9 @@ Web.config + + Web.config + Web.config diff --git a/C2P_Report/Properties/PublishProfiles/DEMO.pubxml b/C2P_Report/Properties/PublishProfiles/DEMO.pubxml new file mode 100644 index 0000000..dea2b80 --- /dev/null +++ b/C2P_Report/Properties/PublishProfiles/DEMO.pubxml @@ -0,0 +1,40 @@ + + + + + MSDeploy + Release + Any CPU + + True + False + https://demo.steamwarewin.local.net:8172/MsDeploy.axd + Default Web Site/C2P_Report + + True + WMSVC + False + steamwarewin\administrator + <_SavePWD>True + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C2P_Report/Reports/ReportOffers_Q.rdlc b/C2P_Report/Reports/ReportOffers_Q.rdlc index 2355f44..36c572b 100644 --- a/C2P_Report/Reports/ReportOffers_Q.rdlc +++ b/C2P_Report/Reports/ReportOffers_Q.rdlc @@ -388,7 +388,7 @@ System.Decimal - ="http://c2p.steamware.net/C2P_Drawings/" & Fields!CodItem.Value & ".png" + ="http://10.74.82.218/C2P_Drawings/" & Fields!CodItem.Value & ".png" valid diff --git a/C2P_Report/Reports/ReportOffers_S.rdlc b/C2P_Report/Reports/ReportOffers_S.rdlc index 2355f44..36c572b 100644 --- a/C2P_Report/Reports/ReportOffers_S.rdlc +++ b/C2P_Report/Reports/ReportOffers_S.rdlc @@ -388,7 +388,7 @@ System.Decimal - ="http://c2p.steamware.net/C2P_Drawings/" & Fields!CodItem.Value & ".png" + ="http://10.74.82.218/C2P_Drawings/" & Fields!CodItem.Value & ".png" valid diff --git a/C2P_Report/Web.DEMO.config b/C2P_Report/Web.DEMO.config new file mode 100644 index 0000000..afdc08e --- /dev/null +++ b/C2P_Report/Web.DEMO.config @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C2P_Report/bin/C2P_Report.dll b/C2P_Report/bin/C2P_Report.dll index e309b726bd9c8bec7ccb69f0a9af4c32eb2364ea..54d885afaff45226dd7282f92d7f701bde2dc2df 100644 GIT binary patch delta 181 zcmZoTlhAM`VL}J9xPoS5cWXCeYd2GCH*;$@OKUf4Yd2eKH+yS0M{74{Yd2SGH+O3{ zPir@CYd2qOH-BrlKx?;PYqwBqw{UB>NNcxfYqwZyxA@j>iKEg21?|G`URW{sZap0z z-rC8#Y3K)?jVGK>ri5jGMG5pog?LBTG;Z?Yd)FNNcxfYqwZyxA@j>iKEg2ok0s0{+ey&(PDFQ zgT~j|$=efTBpxv80<8&Q00Jf;mSJRIh_I1hh>(+D2nu!yelYEvh~tG7u5+$>{L0*7 e5+XP~S5Cs0Ej%;NCoyUIK{<)d+l%ETdf5QEk3ic1