set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_UDC_updateNoteByRQ
*
* Aggiorna note UDC dato il rapp di qualità cui sono legate
*
* Steamware, S.E.L.
* mod: 2012.02.14
*
****************************************/
alter PROCEDURE stp_UDC_updateNoteByRQ
(
	@nRapQual NUMERIC(6,0),
	@note NVARCHAR(500)
)
AS

UPDATE	ElencoCartellini
SET		note = @note
       ,ModDate=GETDATE(),
       CodEvento = 'UDC_RDQ'
FROM    ElencoCartellini AS ec INNER JOIN v_RapQualNote AS rq ON ec.UDC = rq.UDC
WHERE   (rq.nRapQual = @nRapQual) AND ec.note <> @note

RETURN
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),
	@IdxPosizione INT,
	@CodEvento VARCHAR(10)
)
AS

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

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),
	@CodSoggetto VARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
SET		@CodEvento = 'SpostaDMtx'

-- 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 )
       ,ModDate=GETDATE()
       ,CodEvento	= @CodEvento
	   ,CodSoggetto = @CodSoggetto
WHERE	UDC = @CodGitterboxFrom
-- aggiorno valoti QTA gitterbox destinazione e modificatore...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
       ,ModDate=GETDATE()
       ,CodEvento	= @CodEvento
	   ,CodSoggetto = @CodSoggetto
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_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),
	@CodSoggetto VARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
SET		@CodEvento = 'SvuotaGbox'

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

-- aggiorno valoti QTA gitterbox originale...
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = @CodGitterbox )
       ,ModDate=GETDATE()
       ,CodEvento	= @CodEvento
	   ,CodSoggetto = @CodSoggetto
WHERE	UDC = @CodGitterbox
-- aggiorno valoti QTA gitterbox 'EmptyGBox
UPDATE	ElencoCartellini
SET		Qta = ( SELECT COUNT(*) FROM ElencoDataMatrix WHERE CodGitterbox = 'EmptyGBox' )
       ,ModDate = GETDATE()
       ,CodEvento	= @CodEvento
	   ,CodSoggetto = @CodSoggetto
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_processaSpedizTerz
*
* effettua la spedizione verso i terzisti, se deliberati è ok così, se non deliberati restano in posizione 305 da deliberare
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_processaSpedizTerz
(
	@CodSoggetto NVARCHAR(17)
)
AS

-- UDC x cursore
DECLARE @UDC NVARCHAR(50)       -- UDC SQL    
-- evento da usare
DECLARE @CodEvento AS NVARCHAR(10)
SET		@CodEvento = 'SpeWipTerz'


 -- Dichiaro e carico il cursore
	DECLARE Udc4Ter CURSOR LOCAL FOR
		SELECT UDC FROM ElencoCartellini WHERE IdxPosizione IN (SELECT IdxPosizione FROM TabTranPosizEventi WHERE CodEvento = @CodEvento)
	
	OPEN Udc4Ter
		FETCH NEXT FROM Udc4Ter 
		INTO @UDC
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
		-- processo gli UDC...
		UPDATE	ElencoCartellini
		SET		IdxPosizione = ttpe.IdxPosizioneTo
		       ,ModDate=GETDATE()
		       ,CodEvento	= @CodEvento
		       ,CodSoggetto = @CodSoggetto
		FROM	ElencoCartellini ec INNER JOIN TabTranPosizEventi ttpe ON ec.IdxPosizione=ttpe.IdxPosizione
		WHERE	ec.UDC = @UDC AND ttpe.CodEvento = @CodEvento

		FETCH NEXT FROM Udc4Ter INTO @UDC
	END
	CLOSE Udc4Ter
	DEALLOCATE Udc4Ter
	
RETURN
go

/***************************************
* STORED stp_riattivaUdc
*
* riattiva un dato UDC (da mag consumato negativo a corrispettivo positivo) --> se era positivo NON FA NULLA!!! (perchè uso ABS e controllo sia < 0)
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_riattivaUdc
(
	@UDC VARCHAR(50),
	@CodSoggetto NVARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
DECLARE @CodTipoDichiaraz VARCHAR(1)
DECLARE @IdxCella INT
DECLARE @CodCS NVARCHAR(2)

SET @CodEvento = 'UDC_RIA'
SET @CodTipoDichiaraz = 'U'

BEGIN TRAN
	
	-- faccio update posizione
	UPDATE      ElencoCartellini
	SET         IdxPosizione = ABS(IdxPosizione)
			   ,ModDate=GETDATE()
			   ,CodEvento	= @CodEvento
			   ,CodSoggetto = @CodSoggetto
	WHERE		UDC = @UDC AND IdxPosizione IN (SELECT IdxPosizione FROM AnagPosizioni WHERE (IsRiattivaEnabled = 1)
)
	
	-- lo elimino da eventuali precedenti liste di prelievo sennò poi non potrei + prelevarlo
	DELETE FROM RigheListePrelievo
	WHERE UDC = @UDC
	
	-- imposto posizione CELLA corrente x l'udc nella prima libera 
	SET @IdxCella = (SELECT c.IdxCella FROM Celle c inner join Blocchi b ON c.IdxBlocco=b.IdxBlocco INNER JOIN ElencoCartellini e ON b.CodMag = CAST(e.IdxPosizione AS NVARCHAR(50)) WHERE e.UDC = @UDC)
	SET @CodCS = (SELECT CodCS FROM ElencoCartellini WHERE UDC = @UDC)
	INSERT INTO PosizioneUdcCorrente
	VALUES(@Udc, @IdxCella, @CodCS, GETDATE())

	
COMMIT TRAN

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_sbloccaUdc
*
* sblocca un dato UDC per modifica
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_sbloccaUdc
(
	@UDC VARCHAR(50),
	@CodSoggetto NVARCHAR(17)
)
AS

DECLARE @CodEvento VARCHAR(10)
DECLARE @CodTipoDichiaraz VARCHAR(1)

SET @CodEvento = 'UDC_SBL'
SET @CodTipoDichiaraz = 'U'

BEGIN TRAN
	
	-- faccio update
	UPDATE      ElencoCartellini
	SET         ModDate = GETDATE()
			   ,CodEvento	= @CodEvento
			   ,CodSoggetto = @CodSoggetto
	WHERE		UDC = @UDC
	
COMMIT TRAN

RETURN
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: 2012.05.30
*
****************************************/
alter PROCEDURE stp_scaricaUdc
(
	@UDC VARCHAR(50),
	@IdxPosizione INT,
	@CodEvento VARCHAR(10),
	@CodSoggetto NVARCHAR(17)
)
AS

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

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_UDC_delibera
*
* fa la delibera dell'UDC andando a processare la state machien e quindi eventualmente cambiando la sua posizione
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
************************************/
alter PROCEDURE stp_UDC_delibera
(
	@CodTipoDelibera NVARCHAR(50),
	@UDC NVARCHAR(50),
	@CodEvento VARCHAR(10),
	@CodSoggetto NVARCHAR(17),	
	@CodCS VARCHAR(2)
)

AS

BEGIN TRAN
	DECLARE @IdxPosizioneTo AS INT
	DECLARE @IdxPosizioneFrom AS INT
	DECLARE @IdxPosizionePre AS NVARCHAR(50)
	DECLARE @IdxCellaPre AS INT
	DECLARE @IdxCellaTo AS INT
	
	-- ricavo cella ATTUALE
	SET		@IdxCellaPre = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC)
	
	-- ricavo posizione ATTUALE
	SET		@IdxPosizionePre = (SELECT TOP 1 b.CodMag FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE c.IdxCella = @IdxCellaPre)

	
	-- registro delibera
	INSERT INTO DELIBERE
	VALUES (@CodTipoDelibera, @UDC, GETDATE(), @CodSoggetto)

	-- ricavo nuova posizione
	SET		@IdxPosizioneTo = (SELECT	tt.IdxPosizioneTo
	   		                   FROM     TabTranPosizEventi tt INNER JOIN AnagTipoDelibere atd ON tt.CodEvento = atd.CodEvento
	   		                   WHERE    (atd.CodTipoDelibera = @CodTipoDelibera))
	
	-- ricavo posizione TEORICA VECCHIA
	SET		@IdxPosizioneFrom = (SELECT	tt.IdxPosizione
	   		                   FROM     TabTranPosizEventi tt INNER JOIN AnagTipoDelibere atd ON tt.CodEvento = atd.CodEvento
	   		                   WHERE    (atd.CodTipoDelibera = @CodTipoDelibera))

	-- calcolo la prima cella della nuova posizione...
	SET		@IdxCellaTo = (
							SELECT TOP 1 IdxCella FROM Celle
								WHERE IdxBlocco = (
									SELECT IdxBlocco FROM Blocchi
										WHERE CodMag=CAST(@IdxPosizioneTo AS NVARCHAR(50)))
						  )
	
	-- faccio update posizione
	UPDATE ElencoCartellini
	SET		IdxPosizione = @IdxPosizioneTo
		   ,ModDate = GETDATE()
		   ,CodEvento	= @CodEvento
		   ,CodSoggetto = @CodSoggetto
	WHERE UDC = @UDC

	-- controllo posizioni actual e from teorica: SE e SOLO SE corrispondono faccio spostamento...
	IF(CAST(@IdxPosizioneFrom AS NVARCHAR(50)) = @IdxPosizionePre)
	BEGIN
		-- ora cambio anche la posizione corrente dell'UDC (e tramite trigger storicizza...)
		EXEC stp_spostaUdc @CodCS, @UDC, @IdxCellaTo, 0	
	END
	
COMMIT TRAN


RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_UDC_updateIdxPosizione
*
* aggiorna un cartellino x la sua posizione logica
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_UDC_updateIdxPosizione
(
	@UDC VARCHAR(50),
	@IdxPosizione INT,
	@CodSoggetto NVARCHAR(17)
)
AS


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN	
	
	-- modifico il record 
	UPDATE	ElencoCartellini
	SET		IdxPosizione = @IdxPosizione
		   ,ModDate = GETDATE()
		   ,CodEvento='UDC_MOV'
		   ,CodSoggetto = @CodSoggetto
	WHERE	UDC = @UDC
	
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

commit
go


set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/*****************************************
* STORED stp_UDC_updateNoteByRQ
*
* Aggiorna note UDC dato il rapp di qualità cui sono legate
*
* Steamware, S.E.L.
* mod: 2012.02.14
*
****************************************/
alter PROCEDURE stp_UDC_updateNoteByRQ
(
	@nRapQual NUMERIC(6,0),
	@note NVARCHAR(500),
	@CodSoggetto NVARCHAR(17)
)
AS

UPDATE	ElencoCartellini
SET		note		= @note
       ,ModDate		= GETDATE()
       ,CodEvento	= 'UDC_RDQ'
       ,CodSoggetto = @CodSoggetto
FROM    ElencoCartellini AS ec INNER JOIN v_RapQualNote AS rq ON ec.UDC = rq.UDC
WHERE   (rq.nRapQual = @nRapQual) AND ec.note <> @note

RETURN
go

/***************************************
* STORED stp_UDC_updateQty
*
* update qta UDC 
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_UDC_updateQty
(
	@UDC VARCHAR(50),
	@CodSoggetto VARCHAR(17),
	@CodTipoDichiaraz CHAR(1),
	@CodEvento VARCHAR(10),
	@Qta DECIMAL(10,2)
)
AS


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN

	-- modifico il record 
	UPDATE	ElencoCartellini
	SET		Qta = @Qta
		   ,ModDate = GETDATE()
		   ,CodEvento = @CodEvento
		   ,CodSoggetto = @CodSoggetto
	WHERE	UDC = @UDC
	
COMMIT TRAN
------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------
-- restituisco la tab dati con l'udc appena inserito
------------------------------------------------------------------------------------------------------
SELECT * 
FROM ElencoCartellini
WHERE  UDC = @UDC
------------------------------------------------------------------------------------------------------

RETURN
go

commit
go



set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_ATD_getByKey
*
* recupera Tipo Delibera da chiave
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
************************************/
create PROCEDURE stp_ATD_getByKey
(
	@CodTipoDelibera NVARCHAR(50)
)
AS

SELECT	*
FROM	AnagTipoDelibere
WHERE	CodTipoDelibera = @CodTipoDelibera

RETURN
go

commit
go







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