set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_ODETTE_upsertUdc
*
* effettua upsert x l'UDC (ovver crea nuovo solo se non c'è...)
*
* Steamware, S.E.L.
* mod: 2011.04.28
*
****************************************/
alter PROCEDURE stp_ODETTE_upsertUdc
(
	@UDC NVARCHAR(10),
	@CodCS VARCHAR(2),
	@numBolla NVARCHAR(6),
	@dataBolla NVARCHAR(8),
	@IndStabFrom NVARCHAR(50),
	@qtaCont NVARCHAR(50)
)
AS


-- DECLARE iniziali x gestione contatori odette
DECLARE @Flusso AS VARCHAR(2)
DECLARE @Anno AS VARCHAR(2)
DECLARE @numOdette AS INT
DECLARE @nextOdette AS INT
     
------------------------------------------------------------------------------------------------------
-- Fix flusso ed anno x 'OD' e '00' (contatore non spezzato su anno...
------------------------------------------------------------------------------------------------------
SET @Flusso = 'OD'
SET @Anno = '00'
           
------------------------------------------------------------------------------------------------------
-- Contatore Odette
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un odette per company / flusso / anno
BEGIN TRAN
      -- cerco nella tab contatori UDC l'ultimo valido
      SET @numOdette = (
            SELECT		count(*)
            FROM		Odette
            WHERE		CodCS       =     @CodCS
      )
      -- controllo se record c'è...
      IF(@numOdette > 0)
            BEGIN
                  -- se c'è incremento di 1 in tab
                  UPDATE	ContatoriUdc
                  SET		LastIdx		= LastIdx  + 1
                  WHERE		CodCS       = @CodCS
                  AND       Flusso      = @Flusso
                  AND       Anno        = @Anno
            END
      ELSE
            BEGIN
                  -- lo creo!
                  INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx)
                  VALUES (@CodCS, @Flusso, @Anno, 1)
            END        
      -- aggiorno numero UDC
      SET @numOdette = (
            SELECT LastIdx
            FROM		ContatoriUdc
            WHERE		CodCS       = @CodCS
            AND         Flusso      = @Flusso
            AND         Anno        = @Anno
      )
COMMIT TRAN

-- cerco se ci sia già la riga Odette
DECLARE @udcTrovati AS INT
SET		@udcTrovati = ( SELECT COUNT(*) FROM Odette WHERE CampoUDC = @UDC )

-- controllo se esista già... se non c'è creo
IF (@udcTrovati = 0)
	BEGIN
		INSERT INTO Odette(CampoUDC, StatoOk, CodCS)
		VALUES(@UDC, 0, @CodCS)
	END

-- calcolo valori x update
DECLARE @DataB AS NVARCHAR(7)
SET		@DataB = ( SELECT 'D'+ SUBSTRING(@dataBolla, 3, 6) )
DECLARE @udcShort NVARCHAR(10)
--SET		@udcShort = SUBSTRING(@UDC, 3, LEN(@UDC)-2) -- prendo da 3° carattere perché prima "U" e una lettera x tipo prodotto gitterbox
	
-- update valori (sovrascrivo...)
UPDATE	Odette
SET		Campo3_2	= @numBolla,
		Campo3_3	= @numBolla,
		Campo4_2	= @IndStabFrom,
		Campo9_2	= @qtaCont,
		Campo9_3	= @qtaCont,
		Campo13_2	= @DataB,
		Campo15_2	= @numOdette,
		Campo15_3	= @numOdette,
		Campo16_2	= @UDC
WHERE	CampoUDC	= @UDC

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

alter table Odette add
  CodMag nvarchar(2),
  GrpBolla nvarchar(1),
  DataBolla numeric(8,0),
  NumBolla numeric(6,0),
  Particolare nvarchar(15),
  CodLista nvarchar(12)
go



commit
go

set xact_abort on
go

begin transaction
go

update Odette
set CodMag='SP', GrpBolla='0', NumBolla=cast(Campo3_2 as numeric(8,0)), Particolare=Campo11_1_2, DataBolla=0, CodLista=''
go

update Odette
set CodLista = rlp.CodLista
from Odette inner join RigheListePrelievo rlp on rlp.UDC=Odette.CampoUDC
go

update Odette
set DataBolla = b.DTBOS
from Odette inner join RawData.BORI202J b on b.NRBOS=Odette.NumBolla
go

commit
go

set xact_abort on
go

begin transaction
go

update Odette set CodMag = '' where CodMag is null
go

alter table Odette alter column
  CodMag nvarchar(2) not null
go

update Odette set GrpBolla = '' where GrpBolla is null
go

alter table Odette alter column
  GrpBolla nvarchar(1) not null
go

update Odette set DataBolla = 0 where DataBolla is null
go

alter table Odette alter column
  DataBolla numeric(8,0) not null
go

update Odette set NumBolla = 0 where NumBolla is null
go

alter table Odette alter column
  NumBolla numeric(6,0) not null
go

update Odette set Particolare = '' where Particolare is null
go

alter table Odette alter column
  Particolare nvarchar(15) not null
go

update Odette set CodLista = '' where CodLista is null
go

alter table Odette alter column
  CodLista nvarchar(12) not null
go

alter table Odette add
  constraint DF_Odette_Particolare default ('') for Particolare,
  constraint DF_Odette_CodLista default ('') for CodLista,
  constraint DF_Odette_DataBolla default (0) for DataBolla,
  constraint DF_Odette_NumBolla default (0) for NumBolla,
  constraint DF_Odette_CodMag default ('') for CodMag,
  constraint DF_Odette_GrpBolla default ('') for GrpBolla,
  constraint DF_Odette_CodCS default ('') for CodCS
go

set ANSI_NULLS on
go



commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_ODETTE_deleteByLDP
*
* Elimina una riga etichetta odette
*
* Steamware, S.E.L.
* mod: 2011.05.23
*
****************************************/
create PROCEDURE stp_ODETTE_deleteByLDP
(
	@CodLista NVARCHAR(12)
)
AS

DELETE
FROM	Odette 
WHERE	CodLista = @CodLista

RETURN
go

/*****************************************
* STORED stp_ODETTE_getByBolla
*
* Recupera etichette odette associate ad una bolla CON STATO OK
*
* Steamware, S.E.L.
* mod: 2011.05.23
*
****************************************/
create PROCEDURE stp_ODETTE_getByBolla
(
	@CodMag NVARCHAR(2),
    @GrpBolla NVARCHAR(1),
    @NumBolla NUMERIC(6,0),
    @DataBolla   NUMERIC(8,0),
    @Particolare NVARCHAR(15)
)
AS


SELECT	*
FROM	Odette 
WHERE	CodMag		= @CodMag
AND		GrpBolla	= @GrpBolla
AND		NumBolla	= @NumBolla
AND		DataBolla	= @DataBolla
AND		Particolare	= @Particolare
AND		StatoOk		= 1

RETURN
go

/*****************************************
* STORED stp_ODETTE_getByListaPrelievo
*
* Recupera etichette odette associate ad una lista di prelievo CON STATO OK
*
* Steamware, S.E.L.
* mod: 2011.04.29
*
****************************************/
alter PROCEDURE stp_ODETTE_getByListaPrelievo
(
	@CodLista NVARCHAR(12)
)
AS

/*
SELECT	o.*
FROM	Odette o INNER JOIN RigheListePrelievo rlp ON o.CampoUDC = rlp.UDC
WHERE	(rlp.CodLista = @CodLista) AND (o.StatoOk = 1)
*/

SELECT	*
FROM	Odette 
WHERE	(CodLista = @CodLista) AND (StatoOk = 1)

RETURN
go

/*****************************************
* STORED stp_ODETTE_upsertUdc
*
* effettua upsert x l'UDC (ovver crea nuovo solo se non c'è...)
*
* Steamware, S.E.L.
* mod: 2011.04.28
*
****************************************/
alter PROCEDURE stp_ODETTE_upsertUdc
(
	@UDC NVARCHAR(10),
	@CodCS VARCHAR(2),
	@numBolla NVARCHAR(6),
	@dataBolla NVARCHAR(8),
	@CodMag NVARCHAR(2),
    @GrpBolla NVARCHAR(1),
    @Particolare NVARCHAR(15),
    @CodLista NVARCHAR(12),
	@IndStabFrom NVARCHAR(50),
	@qtaCont NVARCHAR(50)
)
AS


-- DECLARE iniziali x gestione contatori odette
DECLARE @Flusso AS VARCHAR(2)
DECLARE @Anno AS VARCHAR(2)
DECLARE @numOdette AS INT
DECLARE @nextOdette AS INT
     
------------------------------------------------------------------------------------------------------
-- Fix flusso ed anno x 'OD' e '00' (contatore non spezzato su anno...
------------------------------------------------------------------------------------------------------
SET @Flusso = 'OD'
SET @Anno = '00'
           
------------------------------------------------------------------------------------------------------
-- Contatore Odette
------------------------------------------------------------------------------------------------------
-- controllo se ci sia già un odette per company / flusso / anno
BEGIN TRAN
      -- cerco nella tab contatori UDC l'ultimo valido
      SET @numOdette = (
            SELECT		count(*)
            FROM		Odette
            WHERE		CodCS       =     @CodCS
      )
      -- controllo se record c'è...
      IF(@numOdette > 0)
            BEGIN
                  -- se c'è incremento di 1 in tab
                  UPDATE	ContatoriUdc
                  SET		LastIdx		= LastIdx  + 1
                  WHERE		CodCS       = @CodCS
                  AND       Flusso      = @Flusso
                  AND       Anno        = @Anno
            END
      ELSE
            BEGIN
                  -- lo creo!
                  INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx)
                  VALUES (@CodCS, @Flusso, @Anno, 1)
            END        
      -- aggiorno numero UDC
      SET @numOdette = (
            SELECT LastIdx
            FROM		ContatoriUdc
            WHERE		CodCS       = @CodCS
            AND         Flusso      = @Flusso
            AND         Anno        = @Anno
      )
COMMIT TRAN

-- cerco se ci sia già la riga Odette
DECLARE @udcTrovati AS INT
SET		@udcTrovati = ( SELECT COUNT(*) FROM Odette WHERE CampoUDC = @UDC )

-- controllo se esista già... se non c'è creo
IF (@udcTrovati = 0)
	BEGIN
		INSERT INTO Odette(CampoUDC, StatoOk, CodCS)
		VALUES(@UDC, 0, @CodCS)
	END

-- calcolo valori x update
DECLARE @DataB AS NVARCHAR(7)
SET		@DataB = ( SELECT 'D'+ SUBSTRING(@dataBolla, 3, 6) )
DECLARE @udcShort NVARCHAR(10)
--SET		@udcShort = SUBSTRING(@UDC, 3, LEN(@UDC)-2) -- prendo da 3° carattere perché prima "U" e una lettera x tipo prodotto gitterbox
	
-- update valori (sovrascrivo...)
UPDATE	Odette
SET		Campo3_2	= @numBolla,
		Campo3_3	= @numBolla,
		Campo4_2	= @IndStabFrom,
		Campo9_2	= @qtaCont,
		Campo9_3	= @qtaCont,
		Campo13_2	= @DataB,
		Campo15_2	= @numOdette,
		Campo15_3	= @numOdette,
		Campo16_2	= @UDC,
		CodMag		= @CodMag,
		GrpBolla	= @GrpBolla,
		DataBolla	= CAST(@dataBolla AS NUMERIC(8,0)),
		NumBolla	= CAST(@numBolla AS NUMERIC(6,0)),
		Particolare	= @Particolare,
		CodLista	= @CodLista
WHERE	CampoUDC	= @UDC

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

alter table Odette_storico add
  CodMag nvarchar(2) not null constraint DF_Odette_storico_CodMag default (''),
  GrpBolla nvarchar(1) not null constraint DF_Odette_storico_GrpBolla default (''),
  DataBolla numeric(8,0) not null constraint DF_Odette_storico_DataBolla default (0),
  NumBolla numeric(6,0) not null constraint DF_Odette_storico_NumBolla default (0),
  Particolare nvarchar(15) not null constraint DF_Odette_storico_Particolare default (''),
  CodLista nvarchar(12) not null constraint DF_Odette_storico_CodLista default ('')
go



commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2011-05-20
-- Description:	trigger x inserimento in tab
-- storico record cancellati
-- =============================================
alter TRIGGER trg_odetteDel
   ON Odette
   AFTER DELETE
AS 
BEGIN

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco in storico
	INSERT INTO Odette_storico 
		(DataOraDelete,CampoUDC,Campo1_1,Campo1_2,Campo1_3,Campo1_4,Campo1_5,Campo2_1,Campo2_2,Campo2_3,Campo2_4,Campo2_5,Campo3_1,
		Campo3_2,Campo3_3,Campo3_4,Campo3_5,Campo4_1,Campo4_2,Campo4_3,Campo4_4,Campo4_5,Campo5_1,Campo5_2,Campo5_3,Campo5_4,Campo5_5,
        Campo6_1,Campo6_2,Campo6_3,Campo6_4,Campo6_5,Campo7_1,Campo7_2,Campo7_3,Campo7_4,Campo7_5,Campo8_1,Campo8_2,Campo8_3,Campo8_4,
        Campo8_5,Campo9_1,Campo9_2,Campo9_3,Campo9_4,Campo9_5,Campo10_1,Campo10_2,Campo10_3,Campo10_4,Campo10_5,Campo11_1_1,Campo11_1_2,
        Campo11_1_3,Campo11_1_4,Campo11_1_5,Campo11_2_1,Campo11_2_2,Campo11_2_3,Campo11_2_4,Campo11_2_5,Campo12_1,Campo12_2,Campo12_3,
        Campo12_4,Campo12_5,Campo13_1,Campo13_2,Campo13_3,Campo13_4,Campo13_5,Campo14_1,Campo14_2,Campo14_3,Campo14_4,Campo14_5,Campo15_1,
		Campo15_2,Campo15_3,Campo15_4,Campo15_5,Campo16_1,Campo16_2,Campo16_3,Campo16_4,Campo16_5,StatoOk,CodCS,CodMag,GrpBolla,DataBolla,
		NumBolla,Particolare,CodLista)

	SELECT	GETDATE(), CampoUDC,Campo1_1,Campo1_2,Campo1_3,Campo1_4,Campo1_5,Campo2_1,Campo2_2,Campo2_3,Campo2_4,Campo2_5,Campo3_1,
		Campo3_2,Campo3_3,Campo3_4,Campo3_5,Campo4_1,Campo4_2,Campo4_3,Campo4_4,Campo4_5,Campo5_1,Campo5_2,Campo5_3,Campo5_4,Campo5_5,
		Campo6_1,Campo6_2,Campo6_3,Campo6_4,Campo6_5,Campo7_1,Campo7_2,Campo7_3,Campo7_4,Campo7_5,Campo8_1,Campo8_2,Campo8_3,Campo8_4,
		Campo8_5,Campo9_1,Campo9_2,Campo9_3,Campo9_4,Campo9_5,Campo10_1,Campo10_2,Campo10_3,Campo10_4,Campo10_5,Campo11_1_1,Campo11_1_2,
		Campo11_1_3,Campo11_1_4,Campo11_1_5,Campo11_2_1,Campo11_2_2,Campo11_2_3,Campo11_2_4,Campo11_2_5,Campo12_1,Campo12_2,Campo12_3,
		Campo12_4,Campo12_5,Campo13_1,Campo13_2,Campo13_3,Campo13_4,Campo13_5,Campo14_1,Campo14_2,Campo14_3,Campo14_4,Campo14_5,Campo15_1,
		Campo15_2,Campo15_3,Campo15_4,Campo15_5,Campo16_1,Campo16_2,Campo16_3,Campo16_4,Campo16_5,StatoOk,CodCS,CodMag,GrpBolla,DataBolla,
		NumBolla,Particolare,CodLista
	FROM	deleted
	
END
go

commit
go


set xact_abort on
go

begin transaction
go

INSERT INTO dbo.ElencoCartellini
  VALUES (N'EmptyGBox', N'SP', NULL, NULL, N'', NULL, N'', N'', NULL, NULL, NULL, N'', NULL, 0, N'', NULL, 1, 0, 27.00, N'Fin', 0, 0, 0, NULL, NULL)
go

commit transaction
go




set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_EDM_svuotaGitterbox
*
* Elimina il codice gitterbox dai datamatrix associati (svuotandolo...)
*
* Steamware, S.E.L.
* mod: 2011.05.06
*
****************************************/
alter PROCEDURE stp_EDM_svuotaGitterbox
(
	@CodGitterbox NVARCHAR(10)
)
AS

UPDATE	ElencoDataMatrix
SET		CodGitterbox = 'EmptyGBox'
WHERE	CodGitterbox = @CodGitterbox

-- aggiorno valoti QTA gitterbox originale...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox
-- aggiorno valoti QTA gitterbox 'EmptyGBox
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = 'EmptyGBox' )
WHERE	UDC = 'EmptyGBox'

-- aggiorno righe liste di prelievo...
UPDATE	RigheListePrelievo
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox



RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* 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
*
****************************************/
alter PROCEDURE stp_DtMtrx_import
(
	@CodCS VARCHAR(2),
	@IdxPosizione INT
)
AS

------------------------------------------------------------------------------------------------------
-- 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"	
	DECLARE @newData TABLE
	(
		CodDataMatrix numeric(23, 0) ,
		CodGitterbox char(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 
	)
		INSERT INTO @newData	
		SELECT	CodDataMatrix, LTRIM(RTRIM(CodGitterbox)), NumConchiglia, NumDisegno, EsponenteDisegno, CodDifettoScarto, InizioPreparazione, FinePreparazione, InizioIniezione, FineIniezione, MagDestinazione, DataImport
		
		FROM	v_trasfDataMatrix 
		WHERE	DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U'
		AND		CodDifettoScarto = '00' -- non importerò gli scarti!!!
		
		


		-- creo UDC da gitterbox nuovi
		INSERT INTO ElencoCartellini(UDC, Particolare, DataFus)
		SELECT DISTINCT nd.CodGitterbox, null, MIN(InizioIniezione)  
		FROM		@newData nd LEFT OUTER JOIN ElencoCartellini ec ON nd.CodGitterbox = ec.UDC 	
		WHERE		ec.UDC IS NULL
		GROUP BY	nd.CodGitterbox

		DECLARE @udc NVARCHAR(50)
		DECLARE @Particolare NVARCHAR(50)
		DECLARE @NumDisegno NVARCHAR(50)
		DECLARE @EsponenteDisegno NVARCHAR(50)
		DECLARE @Qta INT
		DECLARE @IdxCellaTo INT
		DECLARE @adesso DATETIME
		DECLARE @posTrovate INT
		
		SET		@adesso = GETDATE()
		SET		@posTrovate = 0
		
		DECLARE cursoreImport CURSOR FOR
		SELECT nd.CodGitterbox, tp.Particolare, tp.NumDisegno, tp.EsponenteDisegno, dbo.getNumDatamatrix(nd.CodGitterbox) 
		FROM @newData nd
		INNER JOIN	v_transcParticolari tp ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno
		
		OPEN cursoreImport
		FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno, @Qta

		WHILE @@FETCH_STATUS = 0
		BEGIN
		
			-- aggiorno gli UDC gitterbox esistenti per quantità tra quelli dei dati da importare...
			UPDATE	ElencoCartellini
			SET		CodCS			= @CodCS,
					IdxPosizione	= @IdxPosizione,
					CreateDate		= @adesso,
					Particolare		= @Particolare,
					DisegnoGrezzo	= @NumDisegno, 
					Esponente		= @EsponenteDisegno,
					Qta				= @Qta,
					Figura			= '',
					CodImballo		= '',
					Tara			= 0,
					PesoTot			= 0,
					PesoCad			= 0,
					CodStato		= 'Fin',
					NumCont			= 1,
					TurnoFus		= 0,
					ModDate			= @adesso
			WHERE	UDC = @udc
			
			-- indico cella UDC corrente... calcolo la prima cella della nuova posizione...
			SET		@IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) )
								/*(									
									SELECT TOP 1 IdxCella FROM Celle
										WHERE IdxBlocco = (
											SELECT IdxBlocco FROM Blocchi
												WHERE CodMag=CAST(@IdxPosizione AS NVARCHAR(50)))	
								  )*/
								  
			-- controllo se posizione non ancora creata...
			SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc )
			IF( @posTrovate =0)
			BEGIN
				INSERT INTO PosizioneUdcCorrente
				VALUES (@udc, @IdxCellaTo, @CodCS, @adesso)
			END
			
			FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno, @Qta


		END

		CLOSE cursoreImport
		DEALLOCATE cursoreImport

	-- inserisco datamatrix da ultimo import
	INSERT INTO ElencoDataMatrix
	SELECT * FROM @newData

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


RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go


/*****************************************
* 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
*
****************************************/
ALTER PROCEDURE dbo.stp_DtMtrx_import
(
	@CodCS VARCHAR(2),
	@IdxPosizione INT
)
AS

------------------------------------------------------------------------------------------------------
-- 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"	
	DECLARE @newData TABLE
	(
		CodDataMatrix numeric(23, 0) ,
		CodGitterbox char(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 
	)
		INSERT INTO @newData	
		SELECT	CodDataMatrix, LTRIM(RTRIM(CodGitterbox)), NumConchiglia, NumDisegno, EsponenteDisegno, CodDifettoScarto, InizioPreparazione, FinePreparazione, InizioIniezione, FineIniezione, MagDestinazione, DataImport
		
		FROM	v_trasfDataMatrix 
		WHERE	DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U'
		AND		CodDifettoScarto = '00' -- non importerò gli scarti!!!
		
		


		-- creo UDC da gitterbox nuovi
		INSERT INTO ElencoCartellini(UDC, Particolare, DataFus, Qta)
		SELECT DISTINCT nd.CodGitterbox, null, MIN(InizioIniezione), dbo.getNumDatamatrix(nd.CodGitterbox)   
		FROM		@newData nd LEFT OUTER JOIN ElencoCartellini ec ON nd.CodGitterbox = ec.UDC 	
		WHERE		ec.UDC IS NULL
		GROUP BY	nd.CodGitterbox

		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
		
		DECLARE cursoreImport CURSOR FOR
		SELECT nd.CodGitterbox, tp.Particolare, tp.NumDisegno, tp.EsponenteDisegno
		FROM @newData nd
		INNER JOIN	v_transcParticolari tp ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno
		
		OPEN cursoreImport
		FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno

		WHILE @@FETCH_STATUS = 0
		BEGIN
		
			-- aggiorno gli UDC gitterbox esistenti per quantità tra quelli dei dati da importare...
			UPDATE	ElencoCartellini
			SET		CodCS			= @CodCS,
					IdxPosizione	= @IdxPosizione,
					CreateDate		= @adesso,
					Particolare		= @Particolare,
					DisegnoGrezzo	= @NumDisegno, 
					Esponente		= @EsponenteDisegno,
					Figura			= '',
					CodImballo		= '',
					Tara			= 0,
					PesoTot			= 0,
					PesoCad			= 0,
					CodStato		= 'Fin',
					NumCont			= 1,
					TurnoFus		= 0,
					ModDate			= @adesso
			WHERE	UDC = @udc
			
			-- indico cella UDC corrente... calcolo la prima cella della nuova posizione...
			SET		@IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) )
								/*(									
									SELECT TOP 1 IdxCella FROM Celle
										WHERE IdxBlocco = (
											SELECT IdxBlocco FROM Blocchi
												WHERE CodMag=CAST(@IdxPosizione AS NVARCHAR(50)))	
								  )*/
								  
			-- controllo se posizione non ancora creata...
			SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc )
			IF( @posTrovate =0)
			BEGIN
				INSERT INTO PosizioneUdcCorrente
				VALUES (@udc, @IdxCellaTo, @CodCS, @adesso)
			END
			
			FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno


		END

		CLOSE cursoreImport
		DEALLOCATE cursoreImport

	-- inserisco datamatrix da ultimo import
	INSERT INTO ElencoDataMatrix
	SELECT * FROM @newData

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


RETURN
go

commit
go



-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(391, GETDATE())
GO
