/* 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