/***************************************
* STORED stp_UDC_travasoQty
*
* travasa una data qta di pezzi tra 2 UDC (fino a max disponibile in sorgente...)
*
* Steamware, S.E.L.
* mod: 2014.03.12
*
****************************************/
CREATE PROCEDURE [dbo].[stp_UDC_travasoQty]
(
	@UdcFrom	VARCHAR(50),
	@UdcDest	VARCHAR(50),
	@CodSoggetto VARCHAR(17),
	@CodTipoDichiaraz CHAR(1),
	@CodEvento VARCHAR(10),
	@Qta DECIMAL(10,2)
)
AS

SET NOCOUNT ON;

DECLARE @udcInLdpPrel	BIT,
		@QtaResidua		INT = 999

------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
SET XACT_ABORT ON;
BEGIN TRAN

	-- controllo UDC, se faccia parte di LDP che NON permette modifica QTA...
	SET		@udcInLdpPrel = ( SELECT ISNULL(COUNT(rldp.UDC),0)
								FROM	RigheListePrelievo rldp INNER JOIN ElencoListePrelievo ldp 
									ON ldp.CodLista=rldp.CodLista INNER JOIN AnagStatiListe asl
									ON ldp.CodStatoLista = asl.CodStatoLista
								WHERE	asl.canQtaUDC = 0
								AND		rldp.UDC=@UdcFrom )
	
	-- controllo UDC "libero" da LDP (ovvero non faccia parte di LDP in uno stato che NON permette Modifica QTA, nel qual caso NON sposto)
	IF (@udcInLdpPrel = 0)
		-- tutto ok PROCEDO!
		BEGIN

			-- verirfico max qta ammissibile x move (quella nell'UDC sorgente)
			SELECT	@Qta = CASE WHEN @Qta < Qta THEN @Qta ELSE Qta END
			FROM	dbo.ElencoCartellini
			WHERE	UDC = @UdcFrom

			-- modifico il record UDC From
			UPDATE	dbo.ElencoCartellini
			SET		Qta = Qta - @Qta
				   ,ModDate = GETDATE()
				   ,CodEvento = @CodEvento
				   ,CodSoggetto = @CodSoggetto
			WHERE	UDC = @UdcFrom
			-- modifico il record UDC Dest
			UPDATE	dbo.ElencoCartellini
			SET		Qta = Qta + @Qta
				   ,ModDate = GETDATE()
				   ,CodEvento = @CodEvento
				   ,CodSoggetto = @CodSoggetto
			WHERE	UDC = @UdcDest
			
			-- modifico qta anche in RigheListePrelievo se presenti
            UPDATE dbo.RigheListePrelievo
            SET Qta = Qta - @Qta
            WHERE UDC = @UdcFrom

            UPDATE dbo.RigheListePrelievo
            SET Qta = Qta + @Qta
            WHERE UDC = @UdcDest

			-- verifico se eventualmente UDC origine sia vuoto --> lo metto in posizione negativa
			UPDATE	dbo.ElencoCartellini
			SET		IdxPosizione = - IdxPosizione
			WHERE	UDC = @UdcFrom
				AND Qta = 0
			
			-- verifico se eventualmente l'AL dell'UDC di partenza sia vuoto --> in tal caso lo metto in stato Attivo = 0
			UPDATE ElencoAssiemi
			SET Attivo = 0
			WHERE AL IN (
					SELECT a2u.AL
					FROM AL2UDC a2u
					INNER JOIN ElencoCartellini ec
						ON a2u.UDC = ec.UDC
					INNER JOIN ElencoAssiemi ea
						ON a2u.AL = ea.AL
					WHERE ea.Attivo = 1
					GROUP BY a2u.AL
					HAVING sum(ec.Qta) = 0
					)
				AND AL IN (
					SELECT AL
					FROM AL2UDC
					WHERE UDC = @UdcFrom
					)

		END
COMMIT TRAN
------------------------------------------------------------------------------------------------------

RETURN