

/***************************************
* 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
*
************************************/
CREATE PROCEDURE [dbo].[stp_UDC_delibera]
(
	@CodTipoDelibera NVARCHAR(50),
	@UDC NVARCHAR(50),
	@CodEvento VARCHAR(10),
	@CodSoggetto NVARCHAR(17),	
	@CodCS VARCHAR(2)
)

AS

SET @UDC = UPPER(@UDC)   -- metto ad Upper nel caso venga passato in minuscolo ( es. smart LDP da terminalino )

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

