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,
	@resetRLP BIT
)
AS

BEGIN TRAN
	
	-- DICHIARAZIONI iniziali variabili
	DECLARE @IdxCellaFrom INT
	DECLARE @capienza INT
	DECLARE @numUdc INT
	
	-- controllo cella di partenza
	SET		@IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC)
	SET		@IdxCellaFrom = ( SELECT  ISNULL(@IdxCellaFrom,0)) -- contorllo x cella null...
	-- controllo se cella di destinazione e di aprtenza coincidono NON FACCIO NULLA... altrimenti procedo
	IF (@IdxCellaTo <> @IdxCellaFrom)
		BEGIN
			
			-- controllo se la cella di dest vada indicata come piena
			SET		@capienza = (
									SELECT tc.Capienza 
										FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella
										WHERE c.IdxCella = @IdxCellaFrom	
								)
			SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaFrom)
			-- se capienza raggiunta aggiorno...
			IF(@numUdc -1 < @capienza)
				BEGIN
					EXEC stp_celle_updPiena @IdxCellaFrom, 0
				END
				
			-- cancello posizione occupata
			DELETE
			FROM	PosizioneUdcCorrente
			WHERE	UDC = @UDC
			
			-- SE RICHIESTO cancello eventuali righe liste di prelievo FUSI per l'UDC
			IF(@resetRLP = 1)
			BEGIN
				DELETE FROM RigheListePrelievo
					WHERE UDC = @UDC AND CodLista IN ( 
						SELECT CodLista FROM ElencoListePrelievo 
						--WHERE CodTipoLista='01-PreFus'
						WHERE CodStatoLista < 4
					)
			END

			
			
			-- creo una nuova posizione per l'UDC
			INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif)
			VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE())
			
			-- controllo se la cella di dest vada indicata come piena
			SET		@capienza = (
									SELECT tc.Capienza 
										FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella
										WHERE c.IdxCella = @IdxCellaTo	
								)
			SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo)
			-- se capienza raggiunta aggiorno...
			IF(@numUdc >= @capienza)
				BEGIN
					EXEC stp_celle_updPiena @IdxCellaTo, 1
				END
				
		END -- cellaFrom e cellaTo non coincidono...
	
COMMIT TRAN

RETURN
go

commit
go




-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(440, GETDATE())
GO
