diff --git a/GMW_data/SqlScripts/V2.1/GMW_00505.sql b/GMW_data/SqlScripts/V2.1/GMW_00505.sql index 9484ccaa..f714b6f5 100644 --- a/GMW_data/SqlScripts/V2.1/GMW_00505.sql +++ b/GMW_data/SqlScripts/V2.1/GMW_00505.sql @@ -59,13 +59,549 @@ 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 + +/* Tolto da GCarlo xche non salvo utente che cancella x adesso + -- 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 +*/ + + -- Tabella del record cancellato ( al momento NON usata ) RIATTIVARE x QUANDO Voglio lo STORICO cancellati +-- DECLARE @MyTableVar table ( IdxCella int, CodCS nchar(2) ); + + -- libero la posizione attuale dell'UDC (se c'è...) + DELETE + FROM dbo.PosizioneUdcCorrente +-- OUTPUT DELETED.IdxCella , DELETED.CodCS INTO @MyTableVar RIATTIVARE x QUANDO Voglio lo STORICO cancellati + WHERE UDC = @UDC; + +-- ( al momento NON usata ) RIATTIVARE x QUANDO Voglio lo STORICO cancellati + -- Inserisco in Storico Posizione il record di chi ha cancellato +-- INSERT dbo.PosizioneUdcStorico ( UDC, IdxCella, DataInizio, DataFine, CodCS, CodSoggetto ) +-- SELECT @UDC, IdxCella, GETDATE(), GETDATE(), CodCS, @CodSoggetto FROM @MyTableVar + + -- aggiorno l'UDC come posizione finale... + UPDATE dbo.ElencoCartellini + SET IdxPosizione = @IdxPosizione + ,ModDate = GETDATE() + ,CodEvento = @CodEvento + ,CodSoggetto = @CodSoggetto + WHERE UDC = @UDC + +COMMIT TRAN + +RETURN +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 ( non serve più faccio UPDATE ) + --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 + + -- modifico la posizione per l'UDC se esiste altrimenti la inserisco + IF @IdxCellaFrom <> 0 + UPDATE PosizioneUdcCorrente + SET IdxCella = @IdxCellaTo, + DataRif = GETDATE(), + CodSoggetto = @CodSoggetto + FROM PosizioneUdcCorrente WHERE UDC = @UDC AND CodCS = @CodCS AND IdxCella = @IdxCellaFrom + ELSE + 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 + +create index i_destinatario on ElencoListePrelievo(Destinatario); +go + +exec sp_rename 'ElencoListePrelievo.IX_ElencoListePrelievo_CodTipoLista_CodSoggettoCodStatoLista', 'ix_ElencoListePrelievo_CodTipoLista_CodSoggettoCodStatoLista', 'index'; +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; + + DECLARE @FlaStoricizza AS Bit = 0; -- impostazione x test storicizza sempre attivo + + -- Se è una cancellazione Storicizzo + IF ( SELECT COUNT(*) FROM inserted ) = 0 + SET @FlaStoricizza = 1 ; + + -- devo EVITARE di salvare se c'è solo modifica del codSoggetto... + IF( UPDATE(UDC) OR UPDATE(IdxCella) OR UPDATE(CodCS) OR UPDATE(DataRif) ) + SET @FlaStoricizza = 1; + + +-- IF( UPDATE(UDC) OR UPDATE(IdxCella) OR UPDATE(CodCS) OR UPDATE(DataRif) ) + + IF @FlaStoricizza = 1 + 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_DtMtrx_import +* +* Recupera dati Gitterbox/DataMatrix partendo leggendo dati successivi all'ultimo import e importanto in tab GMW +* +* Steamware, S.E.L. +* mod: 2011.04.29 +* +****************************************/ +alter PROCEDURE stp_DtMtrx_import +( + @CodCS VARCHAR(2), + @IdxPosizione INT, + @CodSoggetto VARCHAR(17) +) +AS + +SET XACT_ABORT ON; +SET NOCOUNT ON; +/**** NON PRESENTE IN TEKAL +------------------------------------------------------------------------------------------------------ +-- leggo data ultimo import (o creo record...) +------------------------------------------------------------------------------------------------------ +DECLARE @nomeFlusso AS NVARCHAR(50) +DECLARE @lastImport AS DATETIME +DECLARE @trovati AS INT + +-- imposto valori +SET @nomeFlusso = 'DataMatrix' +SET @lastImport = DATEADD(yy,-10,GETDATE()) -- inizializzo a -10 anni ... +-- sistemo tab registrazione import... +BEGIN TRAN + -- cerco nella tab log ultima data caricamento + SET @trovati = ( + SELECT COUNT(*) + FROM logImportFlussi + WHERE NomeFlusso = @nomeFlusso + ) + -- controllo se record c'è... + IF(@trovati > 0) + BEGIN + SET @lastImport = ( SELECT LastImport FROM LogImportFlussi WHERE NomeFlusso = @nomeFlusso ) + END + ELSE + BEGIN + -- lo creo! + INSERT INTO LogImportFlussi(NomeFlusso, LastImport) + VALUES (@nomeFlusso, @lastImport) + END +COMMIT TRAN +------------------------------------------------------------------------------------------------------ + +------------------------------------------------------------------------------------------------------ +-- ora gestisco il vero caricamento... +------------------------------------------------------------------------------------------------------ + -- filtro e salvo in tabella... gitterbox validi SOLO se iniziano per "U" + -- verifico già se esite già l'UDC/Gitterbox in ElencoCartellini + DECLARE @newData TABLE + ( + RowNumber int, + CodDataMatrix numeric(23, 0) , + CodGitterbox varchar(10) , + NumConchiglia int , + NumDisegno numeric(7, 0) , + EsponenteDisegno tinyint , + CodDifettoScarto varchar(5) , + InizioPreparazione smalldatetime , + FinePreparazione smalldatetime , + InizioIniezione smalldatetime , + FineIniezione smalldatetime , + MagDestinazione varchar(2) , + DataImport smalldatetime , + UDC varchar(50) + ) + INSERT INTO @newData + SELECT + ROW_NUMBER() OVER(PARTITION BY CodGitterbox ORDER BY InizioIniezione ASC), + dm.CodDataMatrix, LTRIM(RTRIM(dm.CodGitterbox)), dm.NumConchiglia, dm.NumDisegno, dm.EsponenteDisegno,dm.CodDifettoScarto, dm.InizioPreparazione, dm.FinePreparazione, dm.InizioIniezione, dm.FineIniezione, dm.MagDestinazione, dm.DataImport, + ec.UDC + FROM dbo.v_trasfDataMatrix AS dm + LEFT JOIN dbo.ElencoCartellini AS ec + ON dm.CodGitterbox = ec.UDC + WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U' + AND CodDifettoScarto = '00' -- non importa gli scarti!!! + + /* INIZIO MODIFICA + + Note GCarlo : + + Se il Gitterbox è già stato trasferito e/o cmq già presente non viene caricato, al + limite vengono caricati i Datamatrix non ancora presenti ma con Gitterbox = EmptyGBox + + Se non trovo il Particolare in dbo.v_transcParticolari i datamatrix non vengono importati + Posso reimportarli spostando la data di import indietro in LogImportFlussi + + ATTENZIONE! Si presuppone che i DataMatrix siano coerenti ovvero stesso Particolare ecc. ecc. + */ + BEGIN TRAN; + + -- creo UDC da gitterbox nuovi ( Se UDC già presenti non li carico ) + -- GCARLO messo un RowCount prima e prendo solo il primo DataMatrix + INSERT INTO ElencoCartellini(UDC,CodCS, Particolare, DescParticolare, DisegnoGrezzo, Esponente, DataFus, Qta, + CodSoggetto, CodStato, IdxPosizione,CreateDate, ModDate, Figura, CodImballo, Tara, PesoTot, PesoCad, NumCont, TurnoFus ) + SELECT DISTINCT nd.CodGitterbox, @CodCS, tp.Particolare, an.DescParticolare, an.DisegnoGrezzo, an.EsponenteModifica + ,InizioIniezione, dbo.getNumDatamatrix(nd.CodGitterbox), @CodSoggetto As CodSoggetto, 'Fin' AS CodStato + ,@IdxPosizione, GETDATE(), GETDATE() + ,'' AS Figura, '' AS CodImballo,0 AS Tara,0 AS PesoTot,0 AS PesoCad,1 AS NumCont,0 AS TurnoFus + FROM @newData nd + INNER JOIN dbo.v_transcParticolari tp -- solo se PArticolare è presente in Trascodifica + ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno + LEFT JOIN RilPro.AnagParticolari an -- Leggo il disegno in anagrafica + ON tp.Particolare = an.Particolare + WHERE nd.RowNumber = 1 -- Prendo solo i dati del First DataMatrix ( data iniezione ) + AND nd.UDC IS NULL -- solo Gitterbox Nuovi + + + DECLARE @udc NVARCHAR(50) + DECLARE @Particolare NVARCHAR(50) + DECLARE @NumDisegno NVARCHAR(50) + DECLARE @EsponenteDisegno NVARCHAR(50) + DECLARE @IdxCellaTo INT + DECLARE @adesso DATETIME + DECLARE @posTrovate INT + + SET @adesso = GETDATE() + SET @posTrovate = 0 + + -- indico cella UDC corrente... calcolo la prima cella della nuova posizione... + SET @IdxCellaTo = ( SELECT dbo.f_getCellaByPos(CAST(@IdxPosizione AS NVARCHAR(50))) ) + + DECLARE cursoreImport CURSOR FOR + SELECT DISTINCT CodGitterbox + FROM @newData + WHERE UDC IS NULL -- solo x Gitterbox Nuovi + + OPEN cursoreImport + FETCH NEXT FROM cursoreImport INTO @udc + + WHILE @@FETCH_STATUS = 0 + BEGIN + + -- controllo se posizione non ancora creata... + SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc ) + IF( @posTrovate = 0) + BEGIN + INSERT INTO PosizioneUdcCorrente(UDC, IdxCella, CodCS, DataRif, CodSoggetto) + VALUES(@udc, @IdxCellaTo, @CodCS, @adesso, @CodSoggetto) + END + + FETCH NEXT FROM cursoreImport INTO @udc + END + + CLOSE cursoreImport + DEALLOCATE cursoreImport + + -- CARICAMENTO DATAMATRIX -- + + -- Carico i datamatrix se UDC/Gitterbox nuovi + INSERT INTO dbo.ElencoDataMatrix + SELECT nw.CodDataMatrix + ,nw.CodGitterbox + ,nw.NumConchiglia + ,nw.NumDisegno + ,nw.EsponenteDisegno + ,nw.CodDifettoScarto + ,nw.InizioPreparazione + ,nw.FinePreparazione + ,nw.InizioIniezione + ,nw.FineIniezione + ,nw.MagDestinazione + ,nw.DataImport + FROM @newData AS nw + LEFT JOIN dbo.ElencoDataMatrix AS el + ON nw.CodDataMatrix = el.CodDataMatrix + WHERE el.CodDataMatrix IS NULL -- Nuovi Datamatrix + AND nw.UDC IS NULL -- Solo per Gitterbox nuovi + + -- Se esistono Datamatrix di UDC già caricati in precedenza li inserisco ma senza + -- assegnare l'UDC ma lo metto a EmptyGBox perchè potrebbero essere UDC già spediti o + -- movimentati e dovrei anche aggiornare la giacenza in ElencoCartellini + INSERT INTO dbo.ElencoDataMatrix + SELECT nw.CodDataMatrix + ,'EmptyGBox' AS CodGitterbox + ,nw.NumConchiglia + ,nw.NumDisegno + ,nw.EsponenteDisegno + ,nw.CodDifettoScarto + ,nw.InizioPreparazione + ,nw.FinePreparazione + ,nw.InizioIniezione + ,nw.FineIniezione + ,nw.MagDestinazione + ,nw.DataImport + FROM @newData AS nw + LEFT JOIN dbo.ElencoDataMatrix AS el + ON nw.CodDataMatrix = el.CodDataMatrix + WHERE el.CodDataMatrix IS NULL + AND nw.UDC IS NOT NULL + + -- aggiorno dati ultimo caricamento + SET @lastImport = ISNULL( ( SELECT MAX(DataImport)FROM @newData ),@lastImport ) + UPDATE LogImportFlussi + SET LastImport = @lastImport + WHERE NomeFlusso = @nomeFlusso + COMMIT TRAN; +*/ +RETURN +go + +commit; +go + + +set xact_abort on; +go + +begin transaction; +go + +set ANSI_NULLS on; +go + +/*************************************** +* STORED stp_getUdcDetailFullCode_storico +* +* ottiene ULTIM dati UDC DA STORICO con i dati significativi partendo da un codice UDC COMPLETO +* +* Steamware, S.E.L. +* mod: 2012.10.01 +* +****************************************/ +create PROCEDURE stp_getUdcDetailFullCode_storico +( + @DataOraFrom DATETIME, + @DataOraTo DATETIME, + @UDC NVARCHAR(50), + @CodCS NVARCHAR(2) +) +AS + +WITH myCTE AS +( + SELECT TOP 1 * + FROM StoricoCartellini + WHERE DataEv BETWEEN @DataOraFrom AND @DataOraTo + AND UDC = @UDC + ORDER BY DataEv DESC +) + +SELECT stc.UDC, ISNULL(stc.RagSociale, N'nd') AS RagSociale, ISNULL(stc.Particolare, N'nd') AS Particolare, + ISNULL(stc.DescParticolare, N'nd') AS DescParticolare, ISNULL(stc.DisegnoGrezzo, N'nd') AS DisegnoGrezzo, + ISNULL(stc.Esponente, N'nd') AS Esponente, ISNULL(stc.DescImpianto, N'nd') AS DescImpianto, + ISNULL(stc.DataFus, N'') AS DataFus, ISNULL(stc.TurnoFus, 0) AS TurnoFus, stc.CodImballo, + stc.Qta, ISNULL(AnagStatiProdotto.DescStato, N'nd') AS DescStato, stc.ModDate, + CASE WHEN(stc.IdxPosizione < 0) THEN 'Consum' ELSE ISNULL(Blocchi.CodMag, N'nd') END AS CodMag, + ISNULL(Blocchi.CodBlocco, N'nd') AS CodBlocco, ISNULL(Celle.CodCella, N'nd') AS CodCella, ISNULL(dbo.Celle.IdxCella, 0) AS IdxCella, + ISNULL(Celle.X, 0) AS X, ISNULL(Celle.Y, 0) AS Y, ISNULL(Celle.Z, 0) AS Z, stc.IdxPosizione, ISNULL(stc.Note,'') AS Note +FROM AnagStatiProdotto RIGHT OUTER JOIN + myCTE stc ON AnagStatiProdotto.CodStato = stc.CodStato AND AnagStatiProdotto.CodStato = stc.CodStato + LEFT OUTER JOIN Celle INNER JOIN PosizioneUdcCorrente ON Celle.IdxCella = PosizioneUdcCorrente.IdxCella + AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella AND Celle.IdxCella = PosizioneUdcCorrente.IdxCella + INNER JOIN Blocchi ON Celle.IdxBlocco = Blocchi.IdxBlocco INNER JOIN AnagMag ON Blocchi.CodMag = AnagMag.CodMag + AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag AND Blocchi.CodCS = AnagMag.CodCS AND Blocchi.CodMag = AnagMag.CodMag + AND Blocchi.CodCS = AnagMag.CodCS ON stc.UDC = PosizioneUdcCorrente.UDC +WHERE (stc.UDC = @UDC) AND (stc.CodCS = @CodCS) + +RETURN +go + +commit; +go + + + - - -- registro versione... INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(505, GETDATE()) GO