CREATE TABLE [dbo].[ElencoListePrelievo] (
    [CodLista]                NVARCHAR (12)   NOT NULL,
    [CodTipoLista]            NVARCHAR (10)   NOT NULL,
    [CodCS]                   NCHAR (2)       NOT NULL,
    [DataCreaz]               DATETIME        NOT NULL,
    [CodCliente]              NVARCHAR (6)    NULL,
    [RagSociale]              NVARCHAR (35)   NULL,
    [CodSoggetto]             NCHAR (17)      NOT NULL,
    [Particolare]             NVARCHAR (15)   NOT NULL,
    [DescParticolare]         NVARCHAR (30)   NULL,
    [DisegnoGrezzo]           NVARCHAR (30)   NULL,
    [Esponente]               NVARCHAR (6)    NULL,
    [Figura]                  NVARCHAR (4)    NULL,
    [CodImballo]              NVARCHAR (15)   NULL,
    [QtaTot]                  DECIMAL (10, 2) NOT NULL,
    [CodStatoLista]           INT             CONSTRAINT [DF_ElencoListePrelievo_CodStatoLista] DEFAULT ((1)) NOT NULL,
    [Destinatario]            NVARCHAR (50)   NULL,
    [DestinatarioDescrizione] NVARCHAR (50)   NULL,
    [DataModStato]            DATETIME        CONSTRAINT [DataModStato_default] DEFAULT (getdate()) NULL,
    CONSTRAINT [PK_ElencoListePrelievo] PRIMARY KEY CLUSTERED ([CodLista] ASC) WITH (FILLFACTOR = 95),
    CONSTRAINT [FK_ElencoListePrelievo_AnagStatiListe] FOREIGN KEY ([CodStatoLista]) REFERENCES [dbo].[AnagStatiListe] ([CodStatoLista]) ON UPDATE CASCADE,
    CONSTRAINT [FK_ElencoListePrelievo_TipoListaPrelievo1] FOREIGN KEY ([CodTipoLista]) REFERENCES [dbo].[TipoListaPrelievo] ([CodTipoLista]) ON UPDATE CASCADE
);




GO
CREATE NONCLUSTERED INDEX [ix_ElencoListePrelievo_CodTipoLista_CodSoggettoCodStatoLista]
    ON [dbo].[ElencoListePrelievo]([CodTipoLista] ASC, [CodSoggetto] ASC, [CodStatoLista] ASC)
    INCLUDE([CodLista]) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [IX_ElencoListePrelievo_DataCreaz]
    ON [dbo].[ElencoListePrelievo]([DataCreaz] ASC) WITH (FILLFACTOR = 95);


GO
CREATE NONCLUSTERED INDEX [i_destinatario]
    ON [dbo].[ElencoListePrelievo]([Destinatario] ASC) WITH (FILLFACTOR = 95);


GO

-- =============================================
-- Author:	
-- Create date: 2011-06-21
-- Description:	trigger x storico in tab
-- storico LDP completata e Reset LDP Scaricata
-- Mod. Date : 2012-10-17
-- =============================================
CREATE TRIGGER trg_ListePrelievoUpd
   ON ElencoListePrelievo
   AFTER UPDATE
AS 
BEGIN
    
    -- Se nessun aggiornamento esco ( DEVE essere il primo comando )
    IF (@@ROWCOUNT = 0) RETURN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	DECLARE	@dataOra AS DATETIME = GETDATE()
	
	IF( UPDATE(CodStatoLista))  
	BEGIN
 	  INSERT INTO ElencoListePrelievo_storico
		(DataOraDelete,CodLista,CodTipoLista,CodCS,DataCreaz,CodCliente,RagSociale,CodSoggetto,Particolare,DescParticolare,DisegnoGrezzo,
		Esponente,Figura,CodImballo,QtaTot,CodStatoLista,Destinatario,DestinatarioDescrizione, DataModStato)
	  SELECT @dataOra, d.CodLista,d.CodTipoLista,d.CodCS,d.DataCreaz,d.CodCliente,d.RagSociale,d.CodSoggetto,d.Particolare,d.DescParticolare,d.DisegnoGrezzo,
		d.Esponente,d.Figura,d.CodImballo,d.QtaTot,d.CodStatoLista,d.Destinatario,d.DestinatarioDescrizione, d.DataModStato
	  FROM	deleted AS d
      INNER JOIN inserted AS i ON d.CodLista = i.CodLista
      WHERE ( d.CodStatoLista <> i.CodStatoLista )             -- 99 solo se lo stato lista è cambiato
         AND NOT ( ( d.CodStatoLista = 0 AND i.CodStatoLista = 1 AND d.CodTipoLista = '00-Smart' )    -- escludo la storicizzazione dei primi due stati 
         OR        ( d.CodStatoLista = 1 AND i.CodStatoLista = 2 AND d.CodTipoLista = '00-Smart' )  ) -- delle smart list che sono creati contemporaneamente

      --WHERE ( d.CodStatoLista = 3 AND i.CodStatoLista = 4 )  -- Storicizzo chi ha completato la Lista
      --  OR  ( d.CodStatoLista = 4 AND i.CodStatoLista < 4 )  -- Storicizzo se la lista Scaricata è viene resettata
      --  OR  ( d.CodStatoLista = 3 AND i.CodStatoLista < 3 )  -- Storicizzo se la lista Completata è viene resettata
      --  OR  ( d.CodStatoLista = 0 AND i.CodStatoLista > 0 )  -- Storicizzo lo stato Bozza
      --  OR  ( d.CodStatoLista = 1 AND i.CodStatoLista > 1 )  -- Storicizzo lo stato Generata
      --  OR  ( d.CodStatoLista = 2 AND i.CodStatoLista > 2 )  -- Storicizzo lo stato In Carico
    END
    ELSE -- se è cambiato il tipo Lista ma non lo Stato storicizzo cmq Mod. 28/06/2013
        IF ( UPDATE(CodTipoLista)) 
        BEGIN
 	      INSERT INTO ElencoListePrelievo_storico
		    (DataOraDelete,CodLista,CodTipoLista,CodCS,DataCreaz,CodCliente,RagSociale,CodSoggetto,Particolare,DescParticolare,DisegnoGrezzo,
		    Esponente,Figura,CodImballo,QtaTot,CodStatoLista,Destinatario,DestinatarioDescrizione, DataModStato)
	      SELECT @dataOra, d.CodLista,d.CodTipoLista,d.CodCS,d.DataCreaz,d.CodCliente,d.RagSociale,d.CodSoggetto,d.Particolare,d.DescParticolare,d.DisegnoGrezzo,
		    d.Esponente,d.Figura,d.CodImballo,d.QtaTot,d.CodStatoLista,d.Destinatario,d.DestinatarioDescrizione, d.DataModStato
	      FROM	deleted AS d
          INNER JOIN inserted AS i ON d.CodLista = i.CodLista
          WHERE d.CodTipoLista <> i.CodTipoLista     -- solo se cambiato
--             AND NOT  ( d.CodStatoLista <> 3  )    -- escludo il cambio per le liste stato 3 ( Normale Funzionamento )
        END
END







GO

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2011-05-20
-- Description:	trigger x inserimento in tab
-- storico record cancellati
-- Mod. Date : 2012-10-17
-- =============================================
CREATE TRIGGER trg_ListePrelievoDel
   ON ElencoListePrelievo
   AFTER DELETE
AS 
BEGIN

    -- Se nessun aggiornamento esco ( DEVE essere il primo comando )
    IF (@@ROWCOUNT = 0) RETURN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco in storico
	INSERT INTO ElencoListePrelievo_storico 
		(DataOraDelete,CodLista,CodTipoLista,CodCS,DataCreaz,CodCliente,RagSociale,CodSoggetto,Particolare,DescParticolare,DisegnoGrezzo,
		Esponente,Figura,CodImballo,QtaTot,CodStatoLista,Destinatario,DestinatarioDescrizione, DataModStato)
	
	SELECT	GETDATE(), CodLista,CodTipoLista,CodCS,DataCreaz,CodCliente,RagSociale,CodSoggetto,Particolare,DescParticolare,DisegnoGrezzo,
		Esponente,Figura,CodImballo,QtaTot,CodStatoLista,Destinatario,DestinatarioDescrizione, DataModStato
	FROM	deleted
	

END



