﻿/*************************************
* STORED PROCEDURE sp_procStatEv
* 	esegue la chiamata d processing x stati in base all'attuale stato ed all'evento associato
*
* modif.:	S.E.L.
* il:		2009.01.22
**************************************/
CREATE PROCEDURE sp_procStatEv
(
	@numIntMtz INT,
	@idxEvento INT,
	@idxStatoNew INT OUTPUT
)

AS
	-- chiamo la query di update, che cerca una riga nella tab transizioni x lo stato e l'evento richiesti e se li trova esegue update del ciclo...
	
	DECLARE @currIdxStato AS INT
	DECLARE @procedere AS INT

BEGIN TRAN
	-- calcolo stato corrente del ciclo...
	SET @currIdxStato = ISNULL((SELECT     idxStato
	                            FROM         InterventiMtz
	                            WHERE     (numIntMtz = @numIntMtz)),0)

	-- cerco transizione da stato ed evento associati...
	SET @procedere = ISNULL((SELECT COUNT(*) FROM Tra_Ev2Stati WHERE idxEvento=@idxEvento AND idxStato=@currIdxStato),0)
	
	-- se trovo eseguo transizione...
	IF(@procedere >0) 
	BEGIN
			UPDATE    InterventiMtz
			SET             idxStato = Tra_Ev2Stati.nextIdxStato
			FROM         InterventiMtz INNER JOIN
			                      Tra_Ev2Stati ON InterventiMtz.idxStato = Tra_Ev2Stati.idxStato
			WHERE     (InterventiMtz.numIntMtz = @numIntMtz) AND (Tra_Ev2Stati.idxEvento = @idxEvento)
	END
		
COMMIT TRAN

	-- calcolo lo stato nuovo...
	SET @idxStatoNew = ISNULL((SELECT     idxStato
	FROM         InterventiMtz
	WHERE     (numIntMtz = @numIntMtz)),0)

RETURN (@idxStatoNew)
