1122 lines
51 KiB
Transact-SQL
1122 lines
51 KiB
Transact-SQL
-- =============================================
|
|
-- Author: Steamware
|
|
-- Mod. date: 2014.10.21
|
|
-- 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) = ''
|
|
, @CodPlantCMIL 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) = 0
|
|
, @ProdTeo_sim DECIMAL(18,6) = 0
|
|
, @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
|
|
, @NumDiesExaust INT = 0 -- numero matrici rottamate
|
|
, @DiesEOLife DECIMAL(9,2) -- durata matrice CLASSE MATRICE
|
|
, @DiesExpLife DECIMAL(9,2) -- durata matrice ARTICOLO
|
|
, @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
|
|
, @ProdTeoImb DECIMAL(18,6) = 0 -- produttività SIMULATA imballo
|
|
, @ProdTeoImb_sim DECIMAL(18,6) = 0 -- produttività SIMULATA 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
|
|
|
|
|
|
---------------------------------------
|
|
-- salvataggio parametri iniziale
|
|
---------------------------------------
|
|
DECLARE @NetProd01_sim DECIMAL(9,3) = 0 -- prod simulazione fase 01
|
|
DECLARE @NetProd04_sim DECIMAL(9,3) = 0 -- prod simulazione fase 04
|
|
|
|
-- cerco la prod netta fase 1 di simulazione...
|
|
SELECT @NetProd01_sim = CAST(Parameter AS DECIMAL(9,3))
|
|
FROM dbo.QuoteParam
|
|
WHERE descr = 'NetProd01_sim'
|
|
AND QuoteType = @QuoteType
|
|
AND CodQuote = @CodQuote
|
|
AND QuoteRev = @QuoteRev
|
|
|
|
-- cerco la prod netta fase 1 di simulazione...
|
|
SELECT @NetProd04_sim = CAST(Parameter AS DECIMAL(9,3))
|
|
FROM dbo.QuoteParam
|
|
WHERE descr = 'NetProd04_sim'
|
|
AND QuoteType = @QuoteType
|
|
AND CodQuote = @CodQuote
|
|
AND QuoteRev = @QuoteRev
|
|
|
|
--SELECT @NetProd01_sim as NetProd01_sim, @NetProd04_sim as NetProd04_sim
|
|
|
|
---------------------------------------
|
|
-- 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, NetProd04_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, NetProd04_sim )
|
|
) AS PivotTable
|
|
)
|
|
|
|
SELECT @CodDiesGroup = CodDiesGroup,
|
|
@CodPlant = CodPlant,
|
|
@CodPackag = ISNULL(CodPackag, 0),
|
|
@ProdTeo_sim = NetProd01_sim, -- ??? @ProdTeo_sim NON USATA?
|
|
@ProdTeoImb_sim = NetProd04_sim -- ??? @ProdTeoImb_sim NON USATA ?
|
|
FROM myCTE
|
|
|
|
|
|
-- 2014.10.12 anticipato calcolo x avere holeNum x chiave AMIL successiva...
|
|
SELECT @CodDiesGroup = ISNULL(@CodDiesGroup, '')
|
|
SELECT @CodPlant = ISNULL(@CodPlant, '')
|
|
SELECT @CodPlantCMIL = ISNULL(@CodPlant, '0000')
|
|
SELECT @HoleNum = dbo.f_getSubstring(@CodDiesGroup, '-', 3)
|
|
|
|
-- 2014.09.09 FIX calcolo prod teorica imballo da lookup...
|
|
SELECT TOP 1 @ProdTeo = tps.ProdTeo
|
|
FROM dbo.QuoteList ql
|
|
-- modifica 2014.10.12 messa chiave AMIL
|
|
--INNER JOIN dbo.TabProdSc tps ON ql.KeyAM = tps.KeyAM
|
|
INNER JOIN dbo.TabProdSc tps ON ql.KeyAM + '-' + @CodPlantCMIL + '-' + CAST(ISNULL(@HoleNum,0) AS NVARCHAR(10)) = tps.KeyAMIL
|
|
WHERE ql.QuoteType = @QuoteType
|
|
AND ql.CodQuote = @CodQuote
|
|
AND ql.QuoteRev = @QuoteRev
|
|
ORDER BY tps.KgTeo DESC
|
|
|
|
SELECT TOP 1 @CodItem = ql.CodItem
|
|
, @KeyAM = ql.KeyAM
|
|
, @KeyAMI = ql.KeyAM + '-' + @CodPlantCMIL
|
|
, @KeyAMIL = ql.KeyAM + '-' + @CodPlantCMIL + '-' + 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)
|
|
-- 2014.08.22 - TOLTO NON deve usare la teorica...
|
|
--, @ProdTeo = ISNULL(ProdTeo, 0) -- VERIFICARE!!! NON DOVREBBE FARLO... ha già calcolato
|
|
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
|
|
|
|
------------------------------------------------------------------------------------------------------------
|
|
-- 2014.09.10 faccio MODIFICA x contare matrici esauste da articolo SE disponibili...
|
|
--
|
|
SELECT @NumDiesExaust = COUNT(CodDies)
|
|
FROM dbo.DiesDet
|
|
WHERE CodDiesGroup = @CodDiesGroup AND CodItem = @CodItem AND Active = 0
|
|
|
|
-- se zero ricalcolo x gruppo e salvo...
|
|
IF(@NumDiesExaust = 0)
|
|
BEGIN
|
|
SELECT @NumDiesExaust = COUNT(CodDies)
|
|
FROM dbo.DiesDet
|
|
WHERE CodDiesGroup = @CodDiesGroup AND Active = 0
|
|
END
|
|
|
|
INSERT INTO #QuoteParam(QuoteType, CodQuote, QuoteRev, ProcessNum, Descr, Parameter)
|
|
VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', 'NumDiesExaust' , @NumDiesExaust)
|
|
|
|
--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
|
|
--
|
|
-- FINE modifica 2014.09.10
|
|
------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
-- 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 @ProdTeoImb = ISNULL(@ProdTeoImb, 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
|
|
|
|
IF (@QuoteType IN ('Q', 'R', 'C' ) ) -- Quotation, Reddittivity, Cost List
|
|
BEGIN
|
|
-- 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'
|
|
END
|
|
|
|
-- 2014.10.12 modifica x gestione del caso SIM come produttività da impiegare x calcoli
|
|
ELSE IF (@QuoteType = 'S' )
|
|
BEGIN
|
|
|
|
-- calcolo i costi legati alla fase estrusione!
|
|
UPDATE #QuoteWorkInt
|
|
SET FC4UG = CASE WHEN @NetProd01_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.FC * cp.QuotaPlantStd / cp.QuotaManStd) / @NetProd01_sim END
|
|
, VC4UG = CASE WHEN @NetProd01_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.VC * cp.QuotaPlantStd / cp.QuotaManStd) / @NetProd01_sim END
|
|
, OH4UG = CASE WHEN @NetProd01_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE (cp.OH * cp.QuotaPlantStd / cp.QuotaManStd) / @NetProd01_sim END
|
|
, SC4UG = CASE WHEN ql.BatchQty = 0 THEN -99 ELSE cp.SC / ql.BatchQty END
|
|
, valid = CASE WHEN @NetProd01_sim = 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'
|
|
END
|
|
|
|
-- *** 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
|
|
|
|
-- 2014.08.22 inserito passaggio di calcolo produttività simulata imballo a seconda caso 'S' o caso standard...
|
|
DECLARE @valid04 BIT = 0
|
|
IF (@QuoteType <> 'S')
|
|
BEGIN
|
|
SELECT @ProdTeoImb = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END,
|
|
@valid04 = CASE WHEN @PDurata = 0 OR @PTotQta = 0 THEN 0 ELSE 1 END -- @PTotQta non può essere mai = 0
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT @ProdTeoImb = CASE @PDurata WHEN 0 THEN 0 ELSE @PTotQta / @PDurata END,
|
|
@valid04 = 1
|
|
END
|
|
|
|
UPDATE qwi
|
|
SET NetProd = @ProdTeoImb,
|
|
valid = @valid04
|
|
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!
|
|
IF (@QuoteType IN ('Q', 'R', 'C' ) ) -- Quotation, Reddittivity, Cost List
|
|
BEGIN
|
|
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
|
|
END
|
|
ELSE IF (@QuoteType = 'S')
|
|
BEGIN
|
|
UPDATE #QuoteWorkInt
|
|
SET FC4UG = CASE WHEN @NetProd04_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.FC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / @NetProd04_sim END
|
|
, VC4UG = CASE WHEN @NetProd04_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.VC * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / @NetProd04_sim END
|
|
, OH4UG = CASE WHEN @NetProd04_sim = 0 OR cp.QuotaManStd = 0 THEN -99 ELSE ( ( cp.OH * cp.QuotaPlantStd ) * ( @NumImb / cp.QuotaManStd ) ) / @NetProd04_sim END
|
|
, SC4UG = CASE WHEN ql.BatchQty = 0 THEN -99 ELSE cp.SC / ql.BatchQty END
|
|
, valid = CASE WHEN @NetProd04_sim = 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
|
|
END
|
|
|
|
-- *** 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 dbo.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') OR (@QuoteType = 'S') -- SOLO se R o S 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|