set xact_abort on go begin transaction go UPDATE dbo.Permessi SET NUMERO=2 WHERE COD_PERMESSO='USER_chLang' INSERT INTO dbo.Permessi VALUES ('USER_stampa', 'stampe.aspx', 6, 2, 'MenuStampe', 'MenuStampeExpl') go commit transaction go set xact_abort on go begin transaction go INSERT INTO dbo.Permessi2Funzione VALUES ('USER_stampa', N'GMW_stampa', 'S') go commit transaction go -- modifiche x gestione storico posizioni! set xact_abort on; go begin transaction; go alter table PosizioneUdcStorico add CodSoggetto nchar(17); go commit; go set xact_abort on; go begin transaction; go alter table PosizioneUdcCorrente add CodSoggetto nchar(17); go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go -- ============================================= -- Author: Samuele E. Locatelli -- Create date: 2009-09-13 -- Mod date: 2012-09-17 -- Description: trigger x inserimento valori in archivio storico alla cancellazione/modifica del dato (tranne curr user) -- ============================================= alter TRIGGER trg_storico ON PosizioneUdcCorrente AFTER DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- devo EVITARE di salvare se c'è solo modifica del CodSoggetto... IF( UPDATE(UDC) OR UPDATE(IdxCella) OR UPDATE(CodCS) OR UPDATE(DataRif) ) BEGIN -- metto in storico la posizione attuale dell'UDC (SE esiste) CANCELLATO INSERT INTO PosizioneUdcStorico(UDC, IdxCella, CodCS, DataInizio, DataFine, CodSoggetto) ( SELECT UDC, IdxCella, CodCS, DataRif as DataInizio, GETDATE() as DataFine, CodSoggetto FROM deleted ) END END go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_riattivaUdc * * riattiva un dato UDC (da mag consumato negativo a corrispettivo positivo) --> se era positivo NON FA NULLA!!! (perchè uso ABS e controllo sia < 0) * * Steamware, S.E.L. * mod: 2012.05.30 * ****************************************/ alter PROCEDURE stp_riattivaUdc ( @UDC VARCHAR(50), @CodSoggetto NVARCHAR(17) ) AS DECLARE @CodEvento VARCHAR(10) DECLARE @CodTipoDichiaraz VARCHAR(1) DECLARE @IdxCella INT DECLARE @CodCS NVARCHAR(2) SET @UDC = UPPER(@UDC) -- metto ad Upper nel caso venga passato in minuscolo ( es. da terminalino ) SET @CodEvento = 'UDC_RIA' SET @CodTipoDichiaraz = 'U' BEGIN TRAN -- faccio update posizione UPDATE ElencoCartellini SET IdxPosizione = ABS(IdxPosizione) ,ModDate=GETDATE() ,CodEvento = @CodEvento ,CodSoggetto = @CodSoggetto WHERE UDC = @UDC AND IdxPosizione IN (SELECT IdxPosizione FROM AnagPosizioni WHERE (IsRiattivaEnabled = 1) ) -- lo elimino da eventuali precedenti liste di prelievo sennò poi non potrei + prelevarlo DELETE FROM RigheListePrelievo WHERE UDC = @UDC -- imposto posizione CELLA corrente x l'udc nella prima libera SET @IdxCella = (SELECT c.IdxCella FROM Celle c inner join Blocchi b ON c.IdxBlocco=b.IdxBlocco INNER JOIN ElencoCartellini e ON b.CodMag = CAST(e.IdxPosizione AS NVARCHAR(50)) WHERE e.UDC = @UDC) SET @CodCS = (SELECT CodCS FROM ElencoCartellini WHERE UDC = @UDC) INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) COMMIT TRAN RETURN go commit; go set xact_abort on; go begin transaction; go set ANSI_NULLS on; go /*************************************** * STORED stp_scaricaUdc * * elimina dalle posizioni correnti un UDC, salvandone la posizione precedente nella tab storica (per scaricamento / spedizione) * * Steamware, S.E.L. * mod: 2012.05.30 * ****************************************/ alter PROCEDURE stp_scaricaUdc ( @UDC VARCHAR(50), @IdxPosizione INT, @CodEvento VARCHAR(10), @CodSoggetto NVARCHAR(17) ) AS BEGIN TRAN -- aggiorno utente x la posizione corrente, in modo da poter POI salvare l'utente che scarica UDC UPDATE PosizioneUdcCorrente SET CodSoggetto = @CodSoggetto WHERE UDC = @UDC -- libero la posizione attuale dell'UDC (se c'è...) DELETE FROM PosizioneUdcCorrente WHERE UDC = @UDC -- aggiorno l'UDC come posizione finale... UPDATE ElencoCartellini SET IdxPosizione = @IdxPosizione ,ModDate = GETDATE() ,CodEvento = @CodEvento ,CodSoggetto = @CodSoggetto WHERE UDC = @UDC COMMIT TRAN RETURN go commit; 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, @CodSoggetto VARCHAR(17) ) AS SET @UDC = UPPER(@UDC) -- metto ad Upper nel caso venga passato in minuscolo ( es. smart LDP da terminalino ) 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 -- aggiorno utente x la posizione corrente, in modo da poter POI salvare l'utente che scarica UDC UPDATE PosizioneUdcCorrente SET CodSoggetto = @CodSoggetto WHERE UDC = @UDC -- 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, CodSoggetto) VALUES(@UDC, @IdxCellaTo, @CodCS, GETDATE(), @CodSoggetto) 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_insNewFull * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) e restituisce il codice UDC appena creato * * Steamware, S.E.L. * mod: 2010.04.28 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull ( @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @UDC AS VARCHAR(50) DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT SET @UDC_parent = UPPER(@UDC_parent) -- nel caso sia passato in minuscolo ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Flusso ------------------------------------------------------------------------------------------------------ -- controllo se esiste il flusso (bilancia)... SET @numFlu = ( SELECT count(*) FROM AnagBilance WHERE CodBilancia = @Flusso ) -- ...sennò lo creo... IF(@numFlu = 0) BEGIN -- se c'è inserisco in tab INSERT INTO AnagBilance(CodBilancia, DescrImpianto, CodCS) VALUES (@Flusso, @Flusso, @CodCS) END ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- UDC ------------------------------------------------------------------------------------------------------ -- controllo se ci sia già un UDC per company / flusso anno BEGIN TRAN -- cerco nella tab contatori se esiste contatore x il flusso -- controllo se record c'è... IF EXISTS( SELECT TOP 1 Flusso FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) BEGIN -- se c'è incremento di 1 in tab UPDATE ContatoriUdc SET LastIdx = LastIdx + 1 WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno END ELSE BEGIN -- lo creo! INSERT INTO ContatoriUdc(CodCS, Flusso, Anno, LastIdx) VALUES (@CodCS, @Flusso, @Anno, 1) END -- aggiorno numero UDC SET @numUdc = ( SELECT LastIdx FROM ContatoriUdc WHERE CodCS = @CodCS AND Flusso = @Flusso AND Anno = @Anno ) COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- ottengo il nuovo codice UDC completo SET @UDC = dbo.componiUdc(@CodCS, @Flusso, @Anno, @numUdc) -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) -- inserisco il cartellino nella prima cella della posizione indicata... INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- restituisco la tab dati con l'udc appena inserito ------------------------------------------------------------------------------------------------------ SELECT * FROM ElencoCartellini WHERE UDC = @UDC ------------------------------------------------------------------------------------------------------ RETURN go /*************************************** * STORED stp_UDC_insNewFull_fixUDC * * crea un nuovo record nella TabStatoOdpUdc FULL (con pesi, qta...) avendo in entrata il codice UDC da utilizzare * * Steamware, S.E.L. * mod: 2011.12.07 * ****************************************/ alter PROCEDURE stp_UDC_insNewFull_fixUDC ( @UDC AS NVARCHAR(50), @CodCS VARCHAR(2), @Flusso VARCHAR(2), @Anno VARCHAR(2), @CodCliente VARCHAR(6), @Particolare VARCHAR(15), @CodImpianto AS VARCHAR(50), @CodStampo VARCHAR(8), @Esponente VARCHAR(6), @Figura VARCHAR(4), @DataFus DATETIME, @TurnoFus INT, @CodImballo VARCHAR(15), @CodSoggetto VARCHAR(17), @Tara FLOAT, @IdxPosizione INT, @CodTipoDichiaraz CHAR(1), @CodEvento VARCHAR(10), @Qta DECIMAL(10,2), @PesoTot FLOAT, @PesoCad FLOAT, @CodStato VARCHAR(50), @UDC_parent VARCHAR(50), @DoDeleteUdcParent BIT, @Note NVARCHAR(500) ) AS -- DECLARE iniziali DECLARE @RagSociale AS VARCHAR(35) DECLARE @DescParticolare AS VARCHAR(30) DECLARE @DescImpianto AS VARCHAR(50) DECLARE @DisegnoGrezzo AS VARCHAR(30) DECLARE @NumCont AS INT DECLARE @numFlu AS INT DECLARE @numUdc AS INT DECLARE @nextUdc AS INT DECLARE @IdxCella AS INT ------------------------------------------------------------------------------------------------------ -- Caricamento Dati da anagrafica ------------------------------------------------------------------------------------------------------ -- cerco la ragione sociale... SET @RagSociale = ISNULL( ( SELECT RagSociale FROM RilPro.AnagClienti WHERE (CodCliente = @CodCliente) ) , '') -- Cerco descrizione del particolare... SET @DescParticolare = ISNULL( ( SELECT DescParticolare FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , 'ND') -- se non lo trova provo anche nell'anagrafica leghe IF(@DescParticolare = 'ND')-- OR (@DescParticolare is null) BEGIN SET @DescParticolare = ISNULL( ( SELECT DescLega FROM RilPro.AnagLeghe WHERE ('L'+CodLega = @Particolare) ) , '') END -- cerco codice disegno grezzo SET @DisegnoGrezzo = ISNULL( ( SELECT DisegnoGrezzo FROM RilPro.AnagParticolari WHERE (Particolare = @Particolare) ) , '') -- cerco descrizione Impianto SET @DescImpianto = ISNULL( ( SELECT DescImpianto FROM AnagImpianti WHERE (CodImpianto = @CodImpianto) ) , '') -- Calcolo contatore intero successivo x il contenitore... SET @NumCont = ( SELECT ISNULL(MAX(NumCont), 0) + 1 AS NumCont FROM ElencoCartellini WHERE (Particolare = @Particolare) AND (DataFus = @DataFus) AND (TurnoFus = @TurnoFus) AND (CodImpianto = @CodImpianto) AND (CodStampo = @CodStampo) AND (Figura = @Figura) ) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo principale x inserimento nuovo record ------------------------------------------------------------------------------------------------------ BEGIN TRAN -- inserisco un nuovo record INSERT INTO ElencoCartellini(UDC, CodCS, CodCliente, RagSociale, Particolare, DescParticolare, DisegnoGrezzo, Esponente, CodImpianto, DescImpianto, CodStampo, Figura, DataFus, TurnoFus, CodImballo, CodSoggetto, NumCont, Tara, Qta, CodStato, IdxPosizione, PesoTot, PesoCad, CreateDate, ModDate, Note, CodEvento) VALUES (@UDC, @CodCS, @CodCliente, @RagSociale, @Particolare, @DescParticolare, @DisegnoGrezzo, @Esponente, @CodImpianto, @DescImpianto, @CodStampo, @Figura, @DataFus, @TurnoFus, @CodImballo, @CodSoggetto, @NumCont, @Tara, @Qta, @CodStato, @IdxPosizione, @PesoTot, @PesoCad, GETDATE(), GETDATE(), @Note, @CodEvento) -- inserisco relazione parent-child tra UDC vecchio (tara) e nuovo (pesa) SSE UDC_parent valido IF((NOT @UDC_parent IS NULL) AND (NOT @UDC_parent = '')) BEGIN INSERT INTO RelazUDC(UDC_parent, UDC_child) VALUES (@UDC_parent, @UDC) END COMMIT TRAN ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- Ciclo secondario x eventuale cancellazione UDC tara parent e inserimento in posizione ------------------------------------------------------------------------------------------------------ -- se richiesto elimino l'UDC parent (tara) IF(@DoDeleteUdcParent = 1) BEGIN DELETE FROM ElencoCartellini WHERE UDC = @UDC_parent END -- calcolo la prima cella della posizione indicata.. SET @IdxCella = ( SELECT TOP 1 c.IdxCella FROM Celle c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco WHERE b.CodMag = CAST(@IdxPosizione AS NVARCHAR(50)) ) -- inserisco il cartellino nella prima cella della posizione indicata.. INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) VALUES(@Udc, @IdxCella, @CodCS, GETDATE(), @CodSoggetto) ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ -- 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(490, GETDATE()) GO