


/*****************************************
* STORED stp_DtMtrx_import
*
* Recupera dati Gitterbox/DataMatrix partendo leggendo dati successivi all'ultimo import e importanto in tab GMW
*
* Steamware, S.E.L.
* mod: 2011.04.29
*
****************************************/
CREATE PROCEDURE [dbo].[stp_DtMtrx_import]
(
	@CodCS VARCHAR(2),
	@IdxPosizione INT,
	@CodSoggetto VARCHAR(17)
)
AS

SET XACT_ABORT ON;
SET NOCOUNT ON;

IF DB_NAME() = 'SP_GMW' AND @CodCS = 'SP'  -- Presente solo x installazione S.Possidonio
BEGIN

------------------------------------------------------------------------------------------------------
-- leggo data ultimo import (o creo record...)
------------------------------------------------------------------------------------------------------
DECLARE		@nomeFlusso AS NVARCHAR(50)
DECLARE		@lastImport AS DATETIME
DECLARE		@trovati AS INT

-- imposto valori
SET		@nomeFlusso = 'DataMatrix'
SET		@lastImport = DATEADD(yy,-10,GETDATE()) -- inizializzo a -10 anni ...
-- sistemo tab registrazione import...
BEGIN TRAN
	-- cerco nella tab log ultima data caricamento
	SET @trovati = (
		SELECT	COUNT(*)
		FROM	LogImportFlussi
		WHERE	NomeFlusso = @nomeFlusso
	)
	-- controllo se record c'è...
	IF(@trovati > 0)
		BEGIN
			SET	@lastImport = ( SELECT LastImport FROM LogImportFlussi WHERE	NomeFlusso	= @nomeFlusso )
		END
	ELSE
		BEGIN
			-- lo creo!
			INSERT INTO LogImportFlussi(NomeFlusso, LastImport)
			VALUES (@nomeFlusso, @lastImport)
		END		
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- ora gestisco il vero caricamento...
------------------------------------------------------------------------------------------------------
	-- filtro e salvo in tabella... gitterbox validi SOLO se iniziano per "U"
	-- verifico già se esite già l'UDC/Gitterbox in ElencoCartellini
	DECLARE @newData TABLE
	(
		RowNumber int,
		CodDataMatrix numeric(23, 0) ,
		CodGitterbox varchar(10) ,
		NumConchiglia int ,
		NumDisegno numeric(7, 0) ,
		EsponenteDisegno tinyint ,
		CodDifettoScarto varchar(5) ,
		InizioPreparazione smalldatetime ,
		FinePreparazione smalldatetime ,
		InizioIniezione smalldatetime ,
		FineIniezione smalldatetime ,
		MagDestinazione varchar(2) ,
		DataImport smalldatetime ,
		UDC varchar(50)
	)
    INSERT INTO @newData	
    SELECT 
           ROW_NUMBER() OVER(PARTITION BY CodGitterbox ORDER BY InizioIniezione ASC),
           dm.CodDataMatrix, LTRIM(RTRIM(dm.CodGitterbox)), dm.NumConchiglia, dm.NumDisegno, dm.EsponenteDisegno,dm.CodDifettoScarto, dm.InizioPreparazione, dm.FinePreparazione, dm.InizioIniezione, dm.FineIniezione, dm.MagDestinazione, dm.DataImport,
           ec.UDC
    FROM dbo.v_trasfDataMatrix AS dm
    LEFT JOIN dbo.ElencoCartellini AS ec 
	 ON dm.CodGitterbox = ec.UDC
	WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U'
	AND CodDifettoScarto = '00' -- non importa gli scarti!!!
		
	/* INIZIO MODIFICA  

		   Note GCarlo : 
		   
           Se il Gitterbox è già stato trasferito e/o cmq già presente non viene caricato, al 
           limite vengono caricati i Datamatrix non ancora presenti ma con Gitterbox = EmptyGBox

		   Se non trovo il Particolare in dbo.v_transcParticolari i datamatrix non vengono importati
		   Posso reimportarli spostando la data di import indietro in LogImportFlussi
		   
		   ATTENZIONE! Si presuppone che i DataMatrix siano coerenti ovvero stesso Particolare ecc. ecc.
    */
    BEGIN TRAN;
        
		-- creo UDC da gitterbox nuovi ( Se UDC già presenti non li carico )
        -- GCARLO messo un RowCount prima e prendo solo il primo DataMatrix
	    INSERT INTO ElencoCartellini(UDC,CodCS, Particolare, DescParticolare, DisegnoGrezzo, Esponente, DataFus, Qta, 
	                CodSoggetto, CodStato, IdxPosizione,CreateDate, ModDate, Figura, CodImballo, Tara, PesoTot, PesoCad, NumCont, TurnoFus, CodEvento )
		SELECT DISTINCT  nd.CodGitterbox, @CodCS, tp.Particolare, an.DescParticolare, an.DisegnoGrezzo, an.EsponenteModifica 
		                ,InizioIniezione, dbo.getNumDatamatrix(nd.CodGitterbox), @CodSoggetto As CodSoggetto, 'FinGBox' AS CodStato
		                ,@IdxPosizione, GETDATE(), GETDATE()
		                ,'' AS Figura, '' AS CodImballo,0 AS Tara,0 AS PesoTot,0 AS PesoCad,1 AS NumCont,0 AS TurnoFus, 'UDC_GBOX' AS CodEvento
		FROM @newData nd
		INNER JOIN dbo.v_transcParticolari tp           -- solo se PArticolare è presente in Trascodifica
		    ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno
		LEFT JOIN RilPro.AnagParticolari an             -- Leggo il disegno in anagrafica
		    ON tp.Particolare = an.Particolare
		WHERE nd.RowNumber = 1                          -- Prendo solo i dati del First DataMatrix ( data iniezione )
		  AND nd.UDC IS NULL                            -- solo Gitterbox Nuovi

        
		DECLARE @udc NVARCHAR(50)
		DECLARE @Particolare NVARCHAR(50)
		DECLARE @NumDisegno NVARCHAR(50)
		DECLARE @EsponenteDisegno NVARCHAR(50)
		DECLARE @IdxCellaTo INT
		DECLARE @adesso DATETIME
		DECLARE @posTrovate INT
		
		SET		@adesso = GETDATE()
		SET		@posTrovate = 0

        -- indico cella UDC corrente... calcolo la prima cella della nuova posizione...
		SET		@IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) )
		
		DECLARE cursoreImport CURSOR FOR
		SELECT DISTINCT CodGitterbox
		FROM @newData
		WHERE UDC IS NULL                            -- solo x Gitterbox Nuovi
		
		OPEN cursoreImport
		FETCH NEXT FROM cursoreImport INTO @udc

		WHILE @@FETCH_STATUS = 0
		BEGIN
		
			-- controllo se posizione non ancora creata...
			SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc )
			IF( @posTrovate = 0)
			BEGIN
				INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto)
				VALUES(@udc, @IdxCellaTo, @CodCS, @adesso, @CodSoggetto)
			END
			
			FETCH NEXT FROM cursoreImport INTO @udc
		END

		CLOSE cursoreImport
		DEALLOCATE cursoreImport

	    -- CARICAMENTO DATAMATRIX -- 
		
		-- Carico i datamatrix se UDC/Gitterbox nuovi
		INSERT INTO dbo.ElencoDataMatrix
        SELECT  nw.CodDataMatrix
               ,nw.CodGitterbox
               ,nw.NumConchiglia
               ,nw.NumDisegno
               ,nw.EsponenteDisegno
               ,nw.CodDifettoScarto
               ,nw.InizioPreparazione
               ,nw.FinePreparazione
               ,nw.InizioIniezione
               ,nw.FineIniezione
               ,nw.MagDestinazione
               ,nw.DataImport
        FROM @newData AS nw
        LEFT JOIN dbo.ElencoDataMatrix AS el
          ON nw.CodDataMatrix = el.CodDataMatrix
        WHERE el.CodDataMatrix IS NULL              -- Nuovi Datamatrix 
              AND nw.UDC IS NULL                    -- Solo per Gitterbox nuovi

        -- Se esistono Datamatrix di UDC già caricati in precedenza li inserisco ma senza 
        -- assegnare l'UDC ma lo metto a EmptyGBox perchè potrebbero essere UDC già spediti o
        -- movimentati e dovrei anche aggiornare la giacenza in ElencoCartellini
        INSERT INTO dbo.ElencoDataMatrix
        SELECT  nw.CodDataMatrix
               ,'EmptyGBox' AS CodGitterbox
               ,nw.NumConchiglia
               ,nw.NumDisegno
               ,nw.EsponenteDisegno
               ,nw.CodDifettoScarto
               ,nw.InizioPreparazione
               ,nw.FinePreparazione
               ,nw.InizioIniezione
               ,nw.FineIniezione
               ,nw.MagDestinazione
               ,nw.DataImport
        FROM @newData AS nw
        LEFT JOIN dbo.ElencoDataMatrix AS el
          ON nw.CodDataMatrix = el.CodDataMatrix
        WHERE el.CodDataMatrix IS NULL
          AND nw.UDC IS NOT NULL

	    -- aggiorno dati ultimo caricamento
	    SET		@lastImport = ISNULL( ( SELECT MAX(DataImport)FROM @newData ),@lastImport )
	    UPDATE	LogImportFlussi
	    SET		LastImport = @lastImport
	    WHERE	NomeFlusso = @nomeFlusso
   COMMIT TRAN;

END

RETURN

