/***************************************
* STORED stp_UDC_Liq_fullUpdate
*
* aggiorna un cartellino:
* (0) calcolo UDC parent
* (1) update UDC: note e sua posizione logica (IdxPosizione)
* (2) update tab posizione UDC corrente
* (3) eliminazione associazione ad AL (temporaneo)
* (4) collegamento ad UDC nonno (TT)
* (5) copia attributi UDC nonno (TT)
* (6) update qta UDC padre
*
* Steamware, S.E.L.
* mod: 2014.03.19
*
****************************************/
CREATE PROCEDURE [dbo].[stp_UDC_Liq_fullUpdate]
(
	@SourceAL		VARCHAR(50), -- AL sorgente (temporaneo)
	@TipoAlAnc		CHAR(1), -- tipo AL ANCESTOR (T)
	@UDC			VARCHAR(50),
	@Note			VARCHAR(500),
	@DataOra		DATETIME,
	@CodSoggetto	NVARCHAR(17)
)
AS


SET NOCOUNT ON;
SET XACT_ABORT ON;

-- DECLARE iniziali
DECLARE @idxCellaTo		INT = 0,
		@idxPosizioneTo	INT = 0,
		@Flusso			VARCHAR(2)	= 'TT',
		@CodStato		VARCHAR(50) = 'Fin', -- stato nuovi UDC
		@UDC_parent		VARCHAR(50) = '', -- UDC parent TT
		@CodEvento		VARCHAR(10) = 'UDC_FINITO',-- evento spsotamento UDC finiti Liquidi
		@IdxBloccoTo	INT = 0
------------------------------------------------------------------------------------------------------
-- Ciclo calcolo idxPosizione e idxCella di destinazione
------------------------------------------------------------------------------------------------------
-- ricavo al volo blocco e idxPosizione di destinazione UDC
SELECT TOP 1 @IdxPosizioneTo = ttpe.IdxPosizioneTo
	, @IdxBloccoTo = ttpe.IdxBloccoTo
FROM TabTranPosizEventi ttpe
INNER JOIN ElencoCartellini ec ON ec.IdxPosizione = ttpe.IdxPosizione
	AND ec.CodStato = ttpe.CodStatoTo
WHERE ec.UDC = @UDC
	AND ttpe.CodEvento = @CodEvento


SELECT	TOP 1 @idxCellaTo = c.IdxCella 
FROM	Celle c 
WHERE	c.IdxBlocco = @IdxBloccoTo
------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
BEGIN TRAN	
	
	-- (0) calcolo UDC parent
	SELECT @UDC_parent = dbo.f_genNewCodUDC(ec.UDC, @Flusso)
	FROM AL2UDC a2u
	INNER JOIN ElencoCartellini ec
		ON a2u.UDC = ec.UDC
	INNER JOIN ElencoCartellini ecc
		ON ec.Particolare = ecc.Particolare
	WHERE AL = @SourceAL
		AND ecc.UDC = @UDC

	-- (1) update UDC: note e sua posizione logica (IdxPosizione)
	UPDATE	ElencoCartellini
	SET		IdxPosizione = @IdxPosizioneTo
		   ,ModDate = @DataOra
		   ,CodEvento = @CodEvento
		   ,CodSoggetto = @CodSoggetto
		   ,Note = @Note
	WHERE	UDC = @UDC

	-- (2) update tab posizione UDC corrente
	UPDATE	PosizioneUdcCorrente
	SET		IdxCella = @IdxCellaTo
	WHERE	UDC = @UDC

	-- (3) eliminazione associazione ad AL (temporaneo)
	DELETE 
	FROM AL2UDC
	WHERE	UDC = @UDC

	-- (4) collegamento ad UDC nonno (TT)
	INSERT	INTO RelazUDC(UDC_parent, UDC_child, dataMod)
	VALUES (@UDC_parent, @UDC, @DataOra)
	
	-- (5) copia attributi UDC nonno (TT)
	INSERT INTO Attr2UDC(UDC, CodAttr, ValAttr, DateAttr, CodSoggetto)
	SELECT @UDC AS UDC, CodAttr, ValAttr, @DataOra AS DateAttr, @CodSoggetto AS CodSoggetto
	FROM Attr2UDC 
	WHERE UDC = @UDC_parent

	-- (6) update qta UDC padre
	UPDATE ec
	SET Qta = conteggio.qty
	FROM dbo.ElencoCartellini ec
	INNER JOIN (
		            SELECT d2c.UDC , COUNT(d2c.DataMatrix) AS qty
		            FROM Dtx2UDC d2c
		            INNER JOIN AL2UDC a2u
			            ON d2c.UDC = a2u.UDC
		            WHERE a2u.AL = @SourceAL
		            GROUP BY d2c.UDC
		) AS conteggio
		ON ec.UDC = conteggio.UDC


COMMIT TRAN
------------------------------------------------------------------------------------------------------

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

RETURN