diff --git a/C2P_Project/C2P_DB.sqlproj b/C2P_Project/C2P_DB.sqlproj
index 9dc56f0..b00c9e7 100644
--- a/C2P_Project/C2P_DB.sqlproj
+++ b/C2P_Project/C2P_DB.sqlproj
@@ -189,12 +189,22 @@
+
+
+
+
+
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/C2P_Project/Compare Proxima_C2P vs C2P_DB.scmp b/C2P_Project/Compare Proxima_C2P vs C2P_DB.scmp
new file mode 100644
index 0000000..301eb61
--- /dev/null
+++ b/C2P_Project/Compare Proxima_C2P vs C2P_DB.scmp
@@ -0,0 +1,406 @@
+
+
+ 10
+
+
+ Data Source=10.74.82.217\SQL2008R2;Initial Catalog=Proxima_C2P;Integrated Security=True;Pooling=False
+
+
+
+
+ {84db66e4-9663-47f7-9dd1-3cb562629ff5}
+ C2P_DB
+
+
+
+
+
+ Version
+ 1
+
+
+
+
+ PlanGenerationType
+ SqlDeploymentOptions
+
+
+ AllowExistingModelErrors
+ False
+
+
+ AllowIncompatiblePlatform
+ False
+
+
+ BackupDatabaseBeforeChanges
+ False
+
+
+ BlockOnPossibleDataLoss
+ True
+
+
+ BlockWhenDriftDetected
+ False
+
+
+ CompareUsingTargetCollation
+ False
+
+
+ CommentOutSetVarDeclarations
+ False
+
+
+ CreateNewDatabase
+ False
+
+
+ DeployDatabaseInSingleUserMode
+ False
+
+
+ DisableAndReenableDdlTriggers
+ True
+
+
+ DoNotAlterChangeDataCaptureObjects
+ True
+
+
+ DoNotAlterReplicatedObjects
+ True
+
+
+ DropConstraintsNotInSource
+ True
+
+
+ DropDmlTriggersNotInSource
+ True
+
+
+ DropExtendedPropertiesNotInSource
+ True
+
+
+ DropIndexesNotInSource
+ True
+
+
+ DropPermissionsNotInSource
+ False
+
+
+ DropObjectsNotInSource
+ True
+
+
+ DropRoleMembersNotInSource
+ False
+
+
+ GenerateSmartDefaults
+ False
+
+
+ IgnoreDdlTriggerOrder
+ False
+
+
+ IgnoreDdlTriggerState
+ False
+
+
+ IgnoreObjectPlacementOnPartitionScheme
+ True
+
+
+ IgnoreAuthorizer
+ False
+
+
+ IgnoreDefaultSchema
+ False
+
+
+ IgnoreRouteLifetime
+ True
+
+
+ IgnoreCryptographicProviderFilePath
+ True
+
+
+ IgnoreComments
+ False
+
+
+ IgnoreWhitespace
+ True
+
+
+ IgnoreKeywordCasing
+ True
+
+
+ IgnoreSemicolonBetweenStatements
+ True
+
+
+ IgnorePartitionSchemes
+ False
+
+
+ IgnoreWithNocheckOnCheckConstraints
+ False
+
+
+ IgnoreWithNocheckOnForeignKeys
+ False
+
+
+ IgnoreIdentitySeed
+ False
+
+
+ IgnoreIncrement
+ False
+
+
+ IgnoreFillFactor
+ True
+
+
+ IgnoreIndexPadding
+ True
+
+
+ IgnoreColumnCollation
+ False
+
+
+ IgnoreLockHintsOnIndexes
+ False
+
+
+ IgnoreTableOptions
+ False
+
+
+ IgnoreIndexOptions
+ False
+
+
+ IgnoreDmlTriggerOrder
+ False
+
+
+ IgnoreDmlTriggerState
+ False
+
+
+ IgnoreAnsiNulls
+ True
+
+
+ IgnoreQuotedIdentifiers
+ True
+
+
+ IgnoreUserSettingsObjects
+ False
+
+
+ IgnoreFilegroupPlacement
+ True
+
+
+ IgnoreFullTextCatalogFilePath
+ True
+
+
+ IgnoreFileAndLogFilePath
+ True
+
+
+ IgnoreLoginSids
+ True
+
+
+ IgnoreNotForReplication
+ False
+
+
+ IgnoreFileSize
+ True
+
+
+ IncludeCompositeObjects
+ False
+
+
+ IncludeTransactionalScripts
+ False
+
+
+ NoAlterStatementsToChangeCLRTypes
+ False
+
+
+ PopulateFilesOnFileGroups
+ True
+
+
+ RegisterDataTierApplication
+ False
+
+
+ ScriptDatabaseCollation
+ False
+
+
+ ScriptDatabaseCompatibility
+ False
+
+
+ ScriptDatabaseOptions
+ False
+
+
+ ScriptDeployStateChecks
+ False
+
+
+ ScriptFileSize
+ False
+
+
+ ScriptNewConstraintValidation
+ True
+
+
+ ScriptRefreshModule
+ True
+
+
+ TargetConnectionString
+ Integrated Security=True;Pooling=False;Connect Timeout=30
+
+
+ TreatVerificationErrorsAsWarnings
+ False
+
+
+ UnmodifiableObjectWarnings
+ True
+
+
+ VerifyCollationCompatibility
+ True
+
+
+ VerifyDeployment
+ True
+
+
+ RunDeploymentPlanExecutors
+ False
+
+
+ AllowDropBlockingAssemblies
+ False
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlDatabaseOptions
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlErrorMessage
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlLogin
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlServerRoleMembership
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlLinkedServer
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlLinkedServerLogin
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlFile
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlServerDdlTrigger
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlMasterKey
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlCredential
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlRoute
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlEventNotification
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlEndpoint
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlDatabaseAuditSpecification
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlServerAudit
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlServerAuditSpecification
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlCryptographicProvider
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlDatabaseEncryptionKey
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlEventSession
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlUserDefinedServerRole
+ ExcludedType
+
+
+ Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlAssemblyFile
+ ExcludedType
+
+
+
+
+ 2
+ 100
+ Equals_Objects,Not_Supported_Deploy
+
+
\ No newline at end of file
diff --git a/C2P_Project/Snapshots/C2P_DB_20140224_15-48-32.dacpac b/C2P_Project/Snapshots/C2P_DB_20140224_15-48-32.dacpac
new file mode 100644
index 0000000..2beb45b
Binary files /dev/null and b/C2P_Project/Snapshots/C2P_DB_20140224_15-48-32.dacpac differ
diff --git a/C2P_Project/Snapshots/C2P_Project_20140218_04-25-36.dacpac b/C2P_Project/Snapshots/C2P_Project_20140218_04-25-36.dacpac
deleted file mode 100644
index 91501ff..0000000
Binary files a/C2P_Project/Snapshots/C2P_Project_20140218_04-25-36.dacpac and /dev/null differ
diff --git a/C2P_Project/Snapshots/C2P_Project_20140218_17-06-52.dacpac b/C2P_Project/Snapshots/C2P_Project_20140218_17-06-52.dacpac
deleted file mode 100644
index 11d9e6b..0000000
Binary files a/C2P_Project/Snapshots/C2P_Project_20140218_17-06-52.dacpac and /dev/null differ
diff --git a/C2P_Project/dbo/Functions/dbo.f_getNewCodQuote.sql b/C2P_Project/dbo/Functions/dbo.f_getNewCodQuote.sql
new file mode 100644
index 0000000..24bae34
--- /dev/null
+++ b/C2P_Project/dbo/Functions/dbo.f_getNewCodQuote.sql
@@ -0,0 +1,23 @@
+-- =============================================
+-- Author: S.E.Locatelli
+-- Create date: 2014.02.21
+-- Description: Retituisce un codice offerta valido da yyMMdd + incr
+-- =============================================
+CREATE FUNCTION 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') + '%'
+
+ RETURN @output
+
+END
\ No newline at end of file
diff --git a/C2P_Project/dbo/Functions/dbo.f_padLeft.sql b/C2P_Project/dbo/Functions/dbo.f_padLeft.sql
new file mode 100644
index 0000000..f98ac91
--- /dev/null
+++ b/C2P_Project/dbo/Functions/dbo.f_padLeft.sql
@@ -0,0 +1,22 @@
+
+/***************************************
+* 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
\ No newline at end of file
diff --git a/C2P_Project/dbo/Functions/dbo.f_padRight.sql b/C2P_Project/dbo/Functions/dbo.f_padRight.sql
new file mode 100644
index 0000000..51653f1
--- /dev/null
+++ b/C2P_Project/dbo/Functions/dbo.f_padRight.sql
@@ -0,0 +1,21 @@
+/***************************************
+* 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
\ No newline at end of file
diff --git a/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_getByKey.sql b/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_getByKey.sql
new file mode 100644
index 0000000..1932135
--- /dev/null
+++ b/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_getByKey.sql
@@ -0,0 +1,20 @@
+-- =============================================
+-- 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
\ No newline at end of file
diff --git a/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_insNew.sql b/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_insNew.sql
new file mode 100644
index 0000000..51c6302
--- /dev/null
+++ b/C2P_Project/dbo/Stored Procedures/dbo.stp_QL_insNew.sql
@@ -0,0 +1,57 @@
+-- =============================================
+-- Author: Steamware
+-- Create date: 2014.02.21
+-- Description: inserisce un nuovo record QuoteList
+-- =============================================
+CREATE PROCEDURE [dbo].[stp_QL_insNew]
+(
+ @QuoteType CHAR(1) = 'Q',
+-- @CodQuote BIGINT = 0,
+-- @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
+
+-- variabili
+DECLARE @CodQuote BIGINT = 0,
+ @QuoteRev INT = 0
+
+BEGIN TRAN
+
+ -- calcolo nuovo record odierno
+ SELECT @CodQuote = dbo.f_getNewCodQuote()
+
+ -- inserisco riga in QuoteList
+ INSERT INTO QuoteList(QuoteType, CodQuote, QuoteRev, CodClient, CodItem, UnitWeight, CodItemGroup, RawMat, CodInco, Note)
+ SELECT @QuoteType, @CodQuote, @QuoteRev, @CodClient, CodItem, UnitWeight, 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)
+
+COMMIT TRAN
+
+-- ricalcolo!
+EXEC stp_QL_fullDataUpdate @QuoteType
+ ,@CodQuote
+ ,@QuoteRev
+ ,'Y'
+
+-- seleziono intera riga!
+
+SELECT *
+FROM QuoteList
+WHERE QuoteType = @QuoteType
+ AND CodQuote = @CodQuote
+ AND QuoteRev = @QuoteRev
+
+RETURN
\ No newline at end of file
diff --git a/C2P_Project/dbo/Stored Procedures/dbo.stp_QRM_getByKey.sql b/C2P_Project/dbo/Stored Procedures/dbo.stp_QRM_getByKey.sql
new file mode 100644
index 0000000..b744f59
--- /dev/null
+++ b/C2P_Project/dbo/Stored Procedures/dbo.stp_QRM_getByKey.sql
@@ -0,0 +1,22 @@
+-- =============================================
+-- 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
\ No newline at end of file
diff --git a/C2P_Project/dbo/Stored Procedures/dbo.stp_QuoteFull_delete.sql b/C2P_Project/dbo/Stored Procedures/dbo.stp_QuoteFull_delete.sql
new file mode 100644
index 0000000..ad90bb7
--- /dev/null
+++ b/C2P_Project/dbo/Stored Procedures/dbo.stp_QuoteFull_delete.sql
@@ -0,0 +1,62 @@
+-- =============================================
+-- 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
+
+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
\ No newline at end of file
diff --git a/C2P_Project/dbo/Stored Procedures/dbo.stp_VSRM_SearchLike.sql b/C2P_Project/dbo/Stored Procedures/dbo.stp_VSRM_SearchLike.sql
new file mode 100644
index 0000000..f1c9103
--- /dev/null
+++ b/C2P_Project/dbo/Stored Procedures/dbo.stp_VSRM_SearchLike.sql
@@ -0,0 +1,18 @@
+-- =============================================
+-- 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 + '%')
\ No newline at end of file
diff --git a/C2P_Project/dbo/Tables/QuoteWorkInt.sql b/C2P_Project/dbo/Tables/QuoteWorkInt.sql
index 5794268..b8e098f 100644
--- a/C2P_Project/dbo/Tables/QuoteWorkInt.sql
+++ b/C2P_Project/dbo/Tables/QuoteWorkInt.sql
@@ -30,6 +30,8 @@
);
+
+
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';
@@ -55,7 +57,9 @@ EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Riclass. 01
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';
+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
@@ -115,13 +119,19 @@ EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Defect Yiel
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';
+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
-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';
+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
-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';
+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';
+
+
diff --git a/C2P_Project/dbo/Views/dbo.v_selCons.sql b/C2P_Project/dbo/Views/dbo.v_selCons.sql
new file mode 100644
index 0000000..f8cb6e1
--- /dev/null
+++ b/C2P_Project/dbo/Views/dbo.v_selCons.sql
@@ -0,0 +1,129 @@
+CREATE VIEW dbo.v_selCons
+AS
+SELECT CodInco AS value, CodInco + ' - ' + Descript AS label
+FROM dbo.Incoterms
+GO
+EXECUTE sp_addextendedproperty @name = N'MS_DiagramPaneCount', @value = 1, @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selCons';
+
+
+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';
+
diff --git a/C2P_Project/dbo/Views/dbo.v_selRawMat.sql b/C2P_Project/dbo/Views/dbo.v_selRawMat.sql
new file mode 100644
index 0000000..8ee2bd9
--- /dev/null
+++ b/C2P_Project/dbo/Views/dbo.v_selRawMat.sql
@@ -0,0 +1,6 @@
+
+CREATE VIEW dbo.v_selRawMat
+AS
+SELECT RawMat AS value, RawMat AS label
+FROM dbo.RawMatDet
+WHERE (RawMat <> '')
\ No newline at end of file
diff --git a/C2P_Project/dbo/Views/v_QuoteFull_Q.sql b/C2P_Project/dbo/Views/v_QuoteFull_Q.sql
index 0409a80..0adbb16 100644
--- a/C2P_Project/dbo/Views/v_QuoteFull_Q.sql
+++ b/C2P_Project/dbo/Views/v_QuoteFull_Q.sql
@@ -128,7 +128,10 @@ Begin DesignProperties =
Or = 1350
End
End
-End', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q';
+End
+', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_QuoteFull_Q';
+
+
GO
diff --git a/C2P_Project/dbo/Views/v_selClient.sql b/C2P_Project/dbo/Views/v_selClient.sql
index 214d5af..28eef27 100644
--- a/C2P_Project/dbo/Views/v_selClient.sql
+++ b/C2P_Project/dbo/Views/v_selClient.sql
@@ -122,7 +122,10 @@ Begin DesignProperties =
Or = 1350
End
End
-End', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient';
+End
+', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selClient';
+
+
GO
diff --git a/C2P_Project/dbo/Views/v_selItems.sql b/C2P_Project/dbo/Views/v_selItems.sql
index 1d71ff6..7482962 100644
--- a/C2P_Project/dbo/Views/v_selItems.sql
+++ b/C2P_Project/dbo/Views/v_selItems.sql
@@ -122,7 +122,10 @@ Begin DesignProperties =
Or = 1350
End
End
-End', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems';
+End
+', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'VIEW', @level1name = N'v_selItems';
+
+
GO
diff --git a/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt b/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt
index f7d06c7..538d0dd 100644
--- a/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt
+++ b/C2P_Project/obj/Debug/C2P_DB.sqlproj.FileListAbsolute.txt
@@ -3,3 +3,7 @@ C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug
C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\bin\Debug\C2P_Project.pdb
C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\C2P_Project.dll
C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\C2P_Project.pdb
+C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\Model.xml
+C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\refactor.xml
+C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\postdeploy.sql
+C:\Users\samuele\Documents\Visual Studio 2012\Projects\C2P\C2P_Project\obj\Debug\predeploy.sql
diff --git a/C2P_Project/obj/Debug/C2P_Project.dll b/C2P_Project/obj/Debug/C2P_Project.dll
index fb81909..553ff8a 100644
Binary files a/C2P_Project/obj/Debug/C2P_Project.dll and b/C2P_Project/obj/Debug/C2P_Project.dll differ
diff --git a/C2P_Project/obj/Debug/Model.xml b/C2P_Project/obj/Debug/Model.xml
new file mode 100644
index 0000000..c9083f1
--- /dev/null
+++ b/C2P_Project/obj/Debug/Model.xml
@@ -0,0 +1,39465 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0)
+ -- 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 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 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '' 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 )
+ , ( @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', @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(100) , @NumSMED ) )
+ ,( @QuoteType, @CodQuote, @QuoteRev, '01', 'KgTeo' , CONVERT(NVARCHAR(100) , @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
+
+ 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
+
+ -- 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 #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.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
+
+ -- 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
+ -- (E) Calcolo price/life!
+ SET @DiesPriceLife = @DiesPrice / @DiesEOLife
+ END
+ ELSE
+ BEGIN
+ SET @DiesPriceLife = 0 -- metto a zero il DiesPriceLife
+ SET @valid = 0 -- indico che valore non è valido ( ND excel )
+ 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)
+ 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) )
+
+ /*************************************************************
+ * 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)
+ VALUES ( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF01 * @BatchQty, @SSR )
+ -- inserisco costi per ROTTAME
+ ,( @QuoteType, @CodQuote, @QuoteRev, '01', @CodPlant, 'ROTTAME', @RawMat, @BatchQty, @RefCostF01 * @BatchQty, 1 - @SSR )
+ -- inserisco costi per VENDITA
+ ,( @QuoteType, @CodQuote, @QuoteRev, '04', @CodPlant, 'VENDITA', @RawMat, @BatchQty, @SellCostF04 * @BatchQty, @SSR )
+ -- inserisco costi per ROTTAME
+ ,( @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)
+ 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 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '' 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '' 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '' 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ' +CONVERT(NVARCHAR(20), @dateTo, 120)
+ FROM RevHistory
+ WHERE RevType = 'P'
+
+ COMMIT TRAN
+
+END]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ' +CONVERT(NVARCHAR(20), @dateTo, 120)
+ FROM RevHistory
+ WHERE RevType = 'P'
+
+ COMMIT TRAN
+
+END]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ' +CONVERT(NVARCHAR(20), @dateTo, 120)
+ FROM RevHistory
+ WHERE RevType = 'P'
+
+ COMMIT TRAN
+
+END]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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'
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '')]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '')]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '')]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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 = '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;
+
+
+ ---- 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ --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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ -- 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ --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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ -- 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ --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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ''
+ -- 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ in C = costi di contab industriale, P = da ProductionLog, S = Sistema di calcolo']]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file