set xact_abort on
go

begin transaction
go

create table ElencoListePrelievo_storico(
  DataOraDelete           datetime      not null,
  CodLista                nvarchar(12)  not null,
  CodTipoLista            nvarchar(10)  not null,
  CodCS                   nchar(2)      not null,
  DataCreaz               datetime      not null,
  CodCliente              nvarchar(6),
  RagSociale              nvarchar(35),
  CodSoggetto             nchar(17)     not null,
  Particolare             nvarchar(15)  not null,
  DescParticolare         nvarchar(30),
  DisegnoGrezzo           nvarchar(30),
  Esponente               nvarchar(6),
  Figura                  nvarchar(4),
  CodImballo              nvarchar(15),
  QtaTot                  decimal(10,2) not null,
  CodStatoLista           int           not null,
  Destinatario            nvarchar(50),
  DestinatarioDescrizione nvarchar(50)
)
go

create index i_codLista on ElencoListePrelievo_storico(CodLista)
go

create table Odette_storico(
  DataOraDelete datetime     not null,
  CampoUDC      varchar(10)  not null,
  Campo1_1      nvarchar(50) not null,
  Campo1_2      nvarchar(50) not null,
  Campo1_3      nvarchar(50) not null,
  Campo1_4      nvarchar(50) not null,
  Campo1_5      nvarchar(50) not null,
  Campo2_1      nvarchar(50) not null,
  Campo2_2      nvarchar(50) not null,
  Campo2_3      nvarchar(50) not null,
  Campo2_4      nvarchar(50) not null,
  Campo2_5      nvarchar(50) not null,
  Campo3_1      nvarchar(50) not null,
  Campo3_2      nvarchar(50) not null,
  Campo3_3      nvarchar(50) not null,
  Campo3_4      nvarchar(50) not null,
  Campo3_5      nvarchar(50) not null,
  Campo4_1      nvarchar(50) not null,
  Campo4_2      nvarchar(50) not null,
  Campo4_3      nvarchar(50) not null,
  Campo4_4      nvarchar(50) not null,
  Campo4_5      nvarchar(50) not null,
  Campo5_1      nvarchar(50) not null,
  Campo5_2      nvarchar(50) not null,
  Campo5_3      nvarchar(50) not null,
  Campo5_4      nvarchar(50) not null,
  Campo5_5      nvarchar(50) not null,
  Campo6_1      nvarchar(50) not null,
  Campo6_2      nvarchar(50) not null,
  Campo6_3      nvarchar(50) not null,
  Campo6_4      nvarchar(50) not null,
  Campo6_5      nvarchar(50) not null,
  Campo7_1      nvarchar(50) not null,
  Campo7_2      nvarchar(50) not null,
  Campo7_3      nvarchar(50) not null,
  Campo7_4      nvarchar(50) not null,
  Campo7_5      nvarchar(50) not null,
  Campo8_1      nvarchar(50) not null,
  Campo8_2      nvarchar(50) not null,
  Campo8_3      nvarchar(50) not null,
  Campo8_4      nvarchar(50) not null,
  Campo8_5      nvarchar(50) not null,
  Campo9_1      nvarchar(50) not null,
  Campo9_2      nvarchar(50) not null,
  Campo9_3      nvarchar(50) not null,
  Campo9_4      nvarchar(50) not null,
  Campo9_5      nvarchar(50) not null,
  Campo10_1     nvarchar(50) not null,
  Campo10_2     nvarchar(50) not null,
  Campo10_3     nvarchar(50) not null,
  Campo10_4     nvarchar(50) not null,
  Campo10_5     nvarchar(50) not null,
  Campo11_1_1   nvarchar(50) not null,
  Campo11_1_2   nvarchar(50) not null,
  Campo11_1_3   nvarchar(50) not null,
  Campo11_1_4   nvarchar(50) not null,
  Campo11_1_5   nvarchar(50) not null,
  Campo11_2_1   nvarchar(50) not null,
  Campo11_2_2   nvarchar(50) not null,
  Campo11_2_3   nvarchar(50) not null,
  Campo11_2_4   nvarchar(50) not null,
  Campo11_2_5   nvarchar(50) not null,
  Campo12_1     nvarchar(50) not null,
  Campo12_2     nvarchar(50) not null,
  Campo12_3     nvarchar(50) not null,
  Campo12_4     nvarchar(50) not null,
  Campo12_5     nvarchar(50) not null,
  Campo13_1     nvarchar(50) not null,
  Campo13_2     nvarchar(50) not null,
  Campo13_3     nvarchar(50) not null,
  Campo13_4     nvarchar(50) not null,
  Campo13_5     nvarchar(50) not null,
  Campo14_1     nvarchar(50) not null,
  Campo14_2     nvarchar(50) not null,
  Campo14_3     nvarchar(50) not null,
  Campo14_4     nvarchar(50) not null,
  Campo14_5     nvarchar(50) not null,
  Campo15_1     nvarchar(50) not null,
  Campo15_2     nvarchar(50) not null,
  Campo15_3     nvarchar(50) not null,
  Campo15_4     nvarchar(50) not null,
  Campo15_5     nvarchar(50) not null,
  Campo16_1     nvarchar(50) not null,
  Campo16_2     nvarchar(50) not null,
  Campo16_3     nvarchar(50) not null,
  Campo16_4     nvarchar(50) not null,
  Campo16_5     nvarchar(50) not null,
  StatoOk       bit          not null,
  CodCS         nchar(2)     not null
)
go

create index i_UDC on Odette_storico(CampoUDC)
go

create table RigheListePrelievo_storico(
  DataOraDelete datetime      not null,
  CodLista      nvarchar(12)  not null,
  UDC           nvarchar(50)  not null,
  Qta           decimal(10,2) not null,
  Proposto      bit,
  Prelevato     bit
)
go

create index i_UDC on RigheListePrelievo_storico(UDC)
go

create index i_CodListaUDC on RigheListePrelievo_storico(CodLista,UDC)
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
-- =============================================
create TRIGGER trg_ListePrelievoDel
   ON ElencoListePrelievo
   AFTER DELETE
AS 
BEGIN

	-- 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)
	
	SELECT	GETDATE(), CodLista,CodTipoLista,CodCS,DataCreaz,CodCliente,RagSociale,CodSoggetto,Particolare,DescParticolare,DisegnoGrezzo,
		Esponente,Figura,CodImballo,QtaTot,CodStatoLista,Destinatario,DestinatarioDescrizione
	FROM	deleted
	

END
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2011-05-20
-- Description:	trigger x inserimento in tab
-- storico record cancellati
-- =============================================
create 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)

	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
	FROM	deleted
	
END
go

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

	-- setup variabili e verbosità
	SET NOCOUNT ON;
	-- inserisco in storico
	INSERT INTO RigheListePrelievo_storico 
		(DataOraDelete,CodLista,UDC,Qta,Proposto,Prelevato)
	
	SELECT	GETDATE(), CodLista,UDC,Qta,Proposto,Prelevato
	FROM	deleted
	

END
go

commit
go

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_RLP_resetPrelevate
*
* sblocca righe liste di prelievo come NON PRELEVATE
*
* Steamware, S.E.L.
* mod: 2011.05.20
*
****************************************/
create PROCEDURE stp_RLP_resetPrelevate
(
	@CodLista NVARCHAR(12)
)
AS

-- effettua "sblocco" delle righe liste prelievo
UPDATE		RigheListePrelievo
    SET		Prelevato = 0
	WHERE   CodLista = @CodLista

RETURN
go

/***************************************
* STORED stp_TTPE_getByCodEvento
*
* ottiene una riga della tab di transizione eventi dato evento
*
* Steamware, S.E.L.
* mod: 2011.05.20
*
************************************/
create PROCEDURE stp_TTPE_getByCodEvento
(
	@CodEvento NVARCHAR(10)
)
AS

SELECT	*
FROM	TabTranPosizEventi
where	CodEvento = @CodEvento
go

commit
go

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* FUNCTION f_getCellaByPos
*
* fornisce la prima cella associata ad una posizione "logica" di magazzino
*
* Steamware, S.E.L.
* mod: 2011.05.20
*
****************************************/
create FUNCTION f_getCellaByPos (@posizione VARCHAR(255))
RETURNS INT AS  
BEGIN

DECLARE @answ AS INT

	SET @answ = (
				SELECT TOP 1 ISNULL(IdxCella,0) FROM Celle
					WHERE IdxBlocco = ( SELECT IdxBlocco FROM Blocchi WHERE CodMag = @posizione )
				)

RETURN @answ

END
go

commit
go



set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_scaricaUdc
*
* elimina dalle posizioni correnti un UDC, salvandone la posizione precedente nella tab storica (per scaricamento / spedizione)
*
* Steamware, S.E.L.
* mod: 2010.09.28
*
****************************************/
alter PROCEDURE stp_scaricaUdc
(
	@UDC VARCHAR(50),
	@IdxCellaFrom INT,
	@IdxPosizione INT
)
AS

BEGIN TRAN
	-- libero la posizione attuale dell'UDC (se c'è...)
	DELETE
	FROM	PosizioneUdcCorrente
	WHERE	UDC = @UDC --AND IdxCella = @IdxCellaFrom
	
	-- aggiorno l'UDC come posizione finale...
	UPDATE	ElencoCartellini
	SET		IdxPosizione = @IdxPosizione, ModDate = GETDATE()
	WHERE	UDC = @UDC	
	
COMMIT TRAN

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_ODETTE_delete
*
* Elimina una riga etichetta odette
*
* Steamware, S.E.L.
* mod: 2011.05.10
*
****************************************/
create PROCEDURE stp_ODETTE_delete
(
	@Original_CampoUDC NVARCHAR(50)
)
AS

DELETE
FROM	Odette 
WHERE	CampoUDC = @Original_CampoUDC

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),
	@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 = @udcShort
WHERE	CampoUDC = @UDC

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_cellaGetFirstByPosizione
*
* ottiene la prima cella data la posizione indicata
*
* Steamware, S.E.L.
* mod: 2011.05.20
*
****************************************/
create PROCEDURE stp_cellaGetFirstByPosizione
(
	@posizione NVARCHAR(50)
)
AS

	SELECT		*
	FROM		Celle
	WHERE       IdxCella = dbo.f_getCellaByPos(@posizione)

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_EDM_spostaDataMtx
*
* Sposta un datamatrix in un nuovo gitterbox
*
* Steamware, S.E.L.
* mod: 2011.05.05
*
****************************************/
alter PROCEDURE stp_EDM_spostaDataMtx
(
	@CodDataMatrix NUMERIC(23),
	@CodGitterbox NVARCHAR(10)
)
AS

-- salvo codice gitterbox di partenza
DECLARE @CodGitterboxFrom AS NVARCHAR(10)
SET		@CodGitterboxFrom = ( SELECT CodGitterbox FROM ElencoDataMatrix WHERE CodDataMatrix = @CodDataMatrix ) 

UPDATE	ElencoDataMatrix
SET		CodGitterbox = @CodGitterbox
WHERE	CodDataMatrix = @CodDataMatrix

-- aggiorno valori QTA gitterbox di partenza...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterboxFrom )
WHERE	UDC = @CodGitterboxFrom
-- aggiorno valoti QTA gitterbox destinazione...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox

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

-- select finale!
SELECT	*
FROM	ElencoDataMatrix
WHERE	CodDataMatrix = @CodDataMatrix

RETURN
go

commit
go


drop procedure stp_BORI_caricaDatiNew
go


-- ATTENZIONE!!! DA QUI SI DEVE AVERE corrette le view sul db SP_produzione_test

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_DtMtx_getOrig
*
* Cerca la bolla richiesta x chiave
*
* Steamware, S.E.L.
* mod: 2011.05.19
*
****************************************/
create PROCEDURE stp_DtMtx_getOrig
(
	@CodDataMatrix NVARCHAR(50)	
)
AS

SELECT	*
FROM	v_trasfDataMatrix
WHERE	CodDataMatrix = @CodDataMatrix

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'
		


		-- 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

alter table ElencoDataMatrix drop
  constraint DF_ElencoDataMatrix_CodGitterbox 
go

alter table ElencoDataMatrix alter column
  CodGitterbox nvarchar(50) not null
go

alter table ElencoDataMatrix add
  constraint DF_ElencoDataMatrix_CodGitterbox default ('') for CodGitterbox,
  constraint FK_ElencoDataMatrix_ElencoCartellini foreign key(CodGitterbox) references ElencoCartellini(UDC) on update cascade
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_EDM_spostaDataMtx
*
* Sposta un datamatrix in un nuovo gitterbox
*
* Steamware, S.E.L.
* mod: 2011.05.05
*
****************************************/
alter PROCEDURE stp_EDM_spostaDataMtx
(
	@CodDataMatrix NUMERIC(23),
	@CodGitterbox NVARCHAR(10)
)
AS

-- salvo codice gitterbox di partenza
DECLARE @CodGitterboxFrom AS NVARCHAR(10)
SET		@CodGitterboxFrom = ( SELECT CodGitterbox FROM ElencoDataMatrix WHERE CodDataMatrix = @CodDataMatrix ) 

UPDATE	ElencoDataMatrix
SET		CodGitterbox = @CodGitterbox
WHERE	CodDataMatrix = @CodDataMatrix

-- aggiorno valori QTA gitterbox di partenza...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterboxFrom )
WHERE	UDC = @CodGitterboxFrom
-- aggiorno valoti QTA gitterbox destinazione...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
WHERE	UDC = @CodGitterbox

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

-- select finale!
SELECT	*
FROM	ElencoDataMatrix
WHERE	CodDataMatrix = @CodDataMatrix

RETURN
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'
		


		-- 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





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