set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

-- =============================================
-- Author:		Samuele E. Locatelli
-- Create date: 2009-09-13
-- Description:	trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato
-- =============================================
create TRIGGER trg_storico 
   ON  PosizioneUdcCorrente 
   AFTER DELETE,UPDATE
AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO
	INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine)
	(
		SELECT	UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine
		FROM	deleted
	)

END
go

commit
go


--

set xact_abort on
go

begin transaction
go

set ANSI_NULLS on
go

/***************************************
* STORED stp_spostaUdc
*
* sposta un UDC, salvandone la posizione precedente (se esiste) nella tab storica
*
* Steamware, S.E.L.
* mod: 2010.06.11
*
****************************************/
alter PROCEDURE stp_spostaUdc
(
	@CodCS VARCHAR(2),
	@UDC VARCHAR(50),
	@IdxCellaTo INT
)
AS

BEGIN TRAN
	/*
	-- inizio mettendo in storico la posizione attuale dell'UDC (SE esiste)
	INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine)
	(
		SELECT	UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine
		FROM	PosizioneUdcCorrente
		WHERE	UDC = @UDC
	)
	*/
	
	-- libero la posizione attuale dell'UDC (se c'è...)
	DELETE
	FROM	PosizioneUdcCorrente
	WHERE	UDC = @UDC-- AND IdxCella = @IdxCellaFrom
	
	-- creo una nuova posizione per l'UDC
	INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif)
	VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE())
	
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: 2010.09.13
*
************************************/
alter PROCEDURE stp_UDC_delibera
(
	@CodTipoDelibera NVARCHAR(50),
	@UDC NVARCHAR(50),
	@CodSoggetto NVARCHAR(17),	
	@CodCS VARCHAR(2)
)

AS

BEGIN TRAN
	DECLARE @IdxPosizioneTo AS INT
	DECLARE @IdxCellaTo AS INT
	
	-- 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))
	
	-- 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 VARCHAR(50)))
						  )
	
	-- faccio update posizione
	UPDATE ElencoCartellini
	SET IdxPosizione = @IdxPosizioneTo
	WHERE UDC = @UDC

	-- ora cambio anche la posizione corrente dell'UDC (e tramite trigger storicizza...)
	EXEC stp_spostaUdc @CodCS, @UDC, @IdxCellaTo	
	
COMMIT TRAN


RETURN
go

commit
go


