CREATE TABLE [dbo].[ElencoCartellini] (
    [UDC]             NVARCHAR (50)   NOT NULL,
    [CodCS]           NCHAR (2)       CONSTRAINT [DF_ElencoCartellini_CodCS] DEFAULT ('') NULL,
    [CodCliente]      NVARCHAR (6)    CONSTRAINT [DF_ElencoCartellini_CodCliente] DEFAULT ('') NULL,
    [RagSociale]      NVARCHAR (35)   CONSTRAINT [DF_ElencoCartellini_RagSociale] DEFAULT ('') NULL,
    [Particolare]     NVARCHAR (15)   CONSTRAINT [DF_ElencoCartellini_Particolare] DEFAULT ('') NULL,
    [DescParticolare] NVARCHAR (30)   CONSTRAINT [DF_ElencoCartellini_DescParticolare] DEFAULT ('') NULL,
    [DisegnoGrezzo]   NVARCHAR (30)   CONSTRAINT [DF_ElencoCartellini_DisegnoGrezzo] DEFAULT ('') NULL,
    [Esponente]       NVARCHAR (6)    CONSTRAINT [DF_ElencoCartellini_Esponente] DEFAULT ('') NULL,
    [CodImpianto]     NVARCHAR (50)   CONSTRAINT [DF_ElencoCartellini_CodImpianto] DEFAULT ('') NULL,
    [DescImpianto]    NVARCHAR (50)   CONSTRAINT [DF_ElencoCartellini_DescImpianto] DEFAULT ('') NULL,
    [CodStampo]       NVARCHAR (8)    CONSTRAINT [DF_ElencoCartellini_CodStampo] DEFAULT ('') NULL,
    [Figura]          NVARCHAR (4)    CONSTRAINT [DF_ElencoCartellini_Figura] DEFAULT ('') NULL,
    [DataFus]         DATETIME        CONSTRAINT [DF_ElencoCartellini_DataFus] DEFAULT (getdate()) NULL,
    [TurnoFus]        INT             CONSTRAINT [DF_ElencoCartellini_TurnoFus] DEFAULT ((0)) NULL,
    [CodImballo]      NVARCHAR (15)   CONSTRAINT [DF_ElencoCartellini_CodImballo] DEFAULT ('') NULL,
    [CodSoggetto]     NCHAR (17)      CONSTRAINT [DF_ElencoCartellini_CodSoggetto] DEFAULT ('') NULL,
    [NumCont]         INT             CONSTRAINT [DF_ElencoCartellini_NumCont] DEFAULT ((1)) NULL,
    [Tara]            FLOAT (53)      CONSTRAINT [DF_ElencoCartellini_Tara] DEFAULT ((0)) NULL,
    [Qta]             DECIMAL (10, 2) CONSTRAINT [DF_ElencoCartellini_Qta] DEFAULT ((0)) NULL,
    [CodStato]        NVARCHAR (50)   CONSTRAINT [DF_ElencoCartellini_CodStato] DEFAULT ('') NULL,
    [IdxPosizione]    INT             CONSTRAINT [DF_ElencoCartellini_IdxPosizione] DEFAULT ((0)) NULL,
    [PesoTot]         FLOAT (53)      CONSTRAINT [DF_ElencoCartellini_PesoTot] DEFAULT ((0)) NULL,
    [PesoCad]         FLOAT (53)      CONSTRAINT [DF_ElencoCartellini_PesoCad] DEFAULT ((0)) NULL,
    [CreateDate]      DATETIME        CONSTRAINT [DF_ElencoCartellini_CreateDate] DEFAULT (getdate()) NULL,
    [ModDate]         DATETIME        CONSTRAINT [DF_ElencoCartellini_ModDate] DEFAULT (getdate()) NULL,
    [Note]            NVARCHAR (500)  CONSTRAINT [DF_ElencoCartellini_Note] DEFAULT ('') NULL,
    [CodEvento]       NVARCHAR (10)   CONSTRAINT [DF_ElencoCartellini_CodEvento] DEFAULT ('') NULL,
    CONSTRAINT [PK_ElencoCartellini] PRIMARY KEY CLUSTERED ([UDC] ASC) WITH (FILLFACTOR = 95),
    CONSTRAINT [FK_ElencoCartellini_AnagCompanySito] FOREIGN KEY ([CodCS]) REFERENCES [dbo].[AnagCompanySito] ([CodCS]) ON UPDATE CASCADE,
    CONSTRAINT [FK_ElencoCartellini_AnagPosizioni] FOREIGN KEY ([IdxPosizione]) REFERENCES [dbo].[AnagPosizioni] ([IdxPosizione]) ON UPDATE CASCADE,
    CONSTRAINT [FK_ElencoCartellini_AnagStatiProdotto] FOREIGN KEY ([CodStato]) REFERENCES [dbo].[AnagStatiProdotto] ([CodStato]) ON UPDATE CASCADE,
    CONSTRAINT [FK_ElencoCartellini_AnagTipoEvento] FOREIGN KEY ([CodEvento]) REFERENCES [dbo].[AnagTipoEvento] ([CodEvento])
);






GO
CREATE NONCLUSTERED INDEX [i_ElencoCartellini_dataFus]
    ON [dbo].[ElencoCartellini]([DataFus] ASC) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [i_ElencoCartellini_CodCS_Particolare]
    ON [dbo].[ElencoCartellini]([CodCS] ASC, [Particolare] ASC) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [i_ElencoCartellini_CodStato_IdxPosizione]
    ON [dbo].[ElencoCartellini]([CodStato] ASC, [IdxPosizione] ASC)
    INCLUDE([Particolare], [Qta]) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [i_ElencoCartellini_particolare]
    ON [dbo].[ElencoCartellini]([Particolare] ASC) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [i_ElencoCartellini_CodCS_IdxPosizione]
    ON [dbo].[ElencoCartellini]([IdxPosizione] ASC, [CodCS] ASC)
    INCLUDE([Particolare]) WITH (FILLFACTOR = 95);


GO

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20 mod. 2012-03-14
-- Description:	trigger x inserimento movimenti
--				nella tab GiornaleMagazzino
-- =============================================
CREATE TRIGGER [dbo].[trg_updMovAS]
   ON [dbo].[ElencoCartellini]
   AFTER UPDATE
AS
BEGIN


	/*******************************************************************************
	* Gestione UPDATE ElencoCartellini --> GiornaleMagazzino
	*
	* regola1: si fanno registrazioni solo se varia ALMENO UNO tra
	* - quantità
	* - idxPosizione
	* - codStato
	*
	* regola 2:
	* - Particolare deve essere valorizzato ALMENO a '' (blank)
	*
	* regola3: in caso di update SIA di quantità che di posizione/stato
	* - si genera UN PRIMO RECORD di modifica quantità a posizione e stato FISSI sulla vecchia posizione/Stato
	* - si genera UN SECONDO RECORD con variazione posizione/stato
	*
	*******************************************************************************/

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE	@dataOra AS DATETIME
	SET		@dataOra = GETDATE()
	
	-- PRIMO STEP: quantità! ( vedi Note )
	IF( UPDATE(Qta) )
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, i.CodEvento, i.ModDate, d.UDC, ISNULL(d.Particolare,''), d.CodStato, d.CodStato, d.IdxPosizione, d.IdxPosizione, d.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( (i.Qta <> d.Qta) )
		)
	
	END
	
	-- ora controllo in caso di modifica di stato o posizione
	IF(UPDATE(CodStato) OR UPDATE(IdxPosizione))
	BEGIN
	
		INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
		(
			SELECT	'U', @dataOra, i.CodEvento, i.ModDate, i.UDC, ISNULL(d.Particolare,''), d.CodStato, i.CodStato, d.IdxPosizione, i.IdxPosizione, i.Qta, i.Qta
			FROM inserted AS i
			INNER JOIN deleted AS d ON i.UDC = d.UDC
			WHERE ( ( i.IdxPosizione <> d.IdxPosizione) OR (i.CodStato <> d.CodStato) )
		)
	
	END
	
END



GO

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20  
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di cancellazione
--				nella tab GiornaleMagazzino
-- =============================================
CREATE TRIGGER [dbo].[trg_DelMovAS] 
   ON [dbo].[ElencoCartellini]
   AFTER DELETE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco movimenti AS
	INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'D', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), CodStato, 'DEL', IdxPosizione, 0, Qta, 0
		FROM	deleted
	)

END

GO

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-20
-- Mod Date:	2012-05-25
-- Description:	trigger x movimenti di inserimento
--				nella tab GiornaleMagazzino
-- =============================================
CREATE TRIGGER [dbo].[trg_InsMovAS] 
   ON [dbo].[ElencoCartellini]
   AFTER INSERT
AS 
BEGIN
	
	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- metto in Giornale Magazzino i record inseriti
	INSERT INTO GiornaleMagazzino(OP, DataOra, CodEvento, ModDate, UDC, Particolare, CodStatoFrom, CodStatoTo, IdxPosizioneFrom, IdxPosizioneTo, QtaFrom, QtaTo)
	(
		SELECT	'I', GETDATE(), CodEvento, ModDate, UDC, ISNULL(Particolare,''), 'NEW', CodStato, 0, IdxPosizione, 0, Qta
		FROM	inserted
	)

END

GO

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-10-27
-- Description:	trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato
-- =============================================
CREATE TRIGGER [dbo].[trg_storicoUDC] 
   ON  [dbo].[ElencoCartellini] 
   AFTER DELETE,UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO
	INSERT INTO StoricoCartellini(DataEv, CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto,
				DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note)
	(
		
		SELECT		GETDATE(), CodEvento, ModDate, UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, 
					CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, Note
		FROM	deleted
	)

END

GO
EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'NON MODIFICARE: nel codice si usano questi campi x chiamate...', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'ElencoCartellini', @level2type = N'COLUMN', @level2name = N'CodEvento';

