/*
Modifica di tab conf x definire se si possano spostare o modificare qta degli UDC in liste di prelievo secondo lo stato di queste LDP
*/

alter table AnagStatiListe add
  canMovUDC bit,
  canQtaUDC bit;
go

set xact_abort on
go

begin transaction
go

UPDATE dbo.AnagStatiListe SET 
  canMovUDC=1, canQtaUDC=1
  WHERE CodStatoLista=0
UPDATE dbo.AnagStatiListe SET 
  canMovUDC=1, canQtaUDC=1
  WHERE CodStatoLista=1
UPDATE dbo.AnagStatiListe SET 
  canMovUDC=1, canQtaUDC=1
  WHERE CodStatoLista=2
UPDATE dbo.AnagStatiListe SET 
  canMovUDC=1, canQtaUDC=1
  WHERE CodStatoLista=3
UPDATE dbo.AnagStatiListe SET 
  canMovUDC=0, canQtaUDC=0
  WHERE CodStatoLista=4
go

commit transaction
go



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
	DECLARE @udcInLdpPrel BIT
	
	-- controllo cella di partenza
	SET		@IdxCellaFrom = (SELECT IdxCella FROM PosizioneUdcCorrente WHERE UDC = @UDC)
	SET		@IdxCellaFrom = ISNULL(@IdxCellaFrom,0) -- controllo x cella null...
	
	-- controllo UDC, se faccia parte di LDP che NON permette MOV...
	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.canMovUDC = 0
								AND		rldp.UDC=@UDC )
	-- controllo se cella di destinazione e di partenza coincidono NON FACCIO NULLA... altrimenti procedo
	IF (@IdxCellaTo <> @IdxCellaFrom)
		BEGIN
			-- controllo UDC "libero" da LDP (ovvero non faccia parte di LDP in uno stato che NON permette MOV, nel qual caso NON sposto)
			IF (@udcInLdpPrel = 0)
				-- tutto ok PROCEDO!
				BEGIN
					
					-- controllo se la cella di partenza vada indicata come piena o meno
					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 cella di partenza NON raggiunta aggiorno NON Piena
					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())
					
					SET @numUdc = (SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE IdxCella = @IdxCellaTo)
				
					-- controllo se la cella di dest vada indicata come piena, altrimenti NON la indicherò (mai) come piena...
					SET		@capienza = (
											SELECT CASE CheckPiena WHEN 1 THEN tc.Capienza ELSE @numUdc + 1 END
												FROM TipoCella TC INNER JOIN Celle c ON TC.IdxTipoCella=c.IdxTipoCella
												WHERE c.IdxCella = @IdxCellaTo	
										)
				
				
					-- se capienza raggiunta aggiorno...
					IF(@numUdc >= @capienza)
						BEGIN
							EXEC stp_celle_updPiena @IdxCellaTo, 1
						END
						
				END -- cellaFrom e cellaTo non coincidono...
		END -- UDC NON appartiene a LDP già prelevate...
	
COMMIT TRAN

RETURN
go

commit;
go


set xact_abort on;
go

begin transaction;
go

set ANSI_NULLS on;
go

/***************************************
* STORED stp_UDC_updateQty
*
* update qta UDC 
*
* Steamware, S.E.L.
* mod: 2012.05.30
*
****************************************/
alter PROCEDURE stp_UDC_updateQty
(
	@UDC VARCHAR(50),
	@CodSoggetto VARCHAR(17),
	@CodTipoDichiaraz CHAR(1),
	@CodEvento VARCHAR(10),
	@Qta DECIMAL(10,2)
)
AS


DECLARE @udcInLdpPrel BIT
------------------------------------------------------------------------------------------------------
-- Ciclo principale x edit record
------------------------------------------------------------------------------------------------------
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=@UDC )
	
	-- 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
			-- modifico il record 
			UPDATE	ElencoCartellini
			SET		Qta = @Qta
				   ,ModDate = GETDATE()
				   ,CodEvento = @CodEvento
				   ,CodSoggetto = @CodSoggetto
			WHERE	UDC = @UDC
		END
COMMIT TRAN
------------------------------------------------------------------------------------------------------

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

RETURN
go

commit;
go





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