Files
Samuele E. Locatelli bdd7b413e8 Riaggiunto GMW_data
2016-11-22 17:58:00 +01:00

293 lines
9.6 KiB
Transact-SQL

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 dbo.stp_DtMtrx_import
(
@CodCS VARCHAR(2),
@IdxPosizione INT
)
AS
------------------------------------------------------------------------------------------------------
-- 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"
DECLARE @newData TABLE
(
CodDataMatrix numeric(23, 0) ,
CodGitterbox char(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
)
INSERT INTO @newData
SELECT CodDataMatrix, LTRIM(RTRIM(CodGitterbox)), NumConchiglia, NumDisegno, EsponenteDisegno, CodDifettoScarto, InizioPreparazione, FinePreparazione, InizioIniezione, FineIniezione, MagDestinazione, DataImport
FROM v_trasfDataMatrix
WHERE DataImport > @lastImport AND LEFT(CodGitterbox, 1) = 'U'
-- creo UDC da gitterbox nuovi
INSERT INTO ElencoCartellini(UDC, Particolare, DataFus)
SELECT DISTINCT nd.CodGitterbox, null, MIN( InizioIniezione)
FROM @newData nd LEFT OUTER JOIN ElencoCartellini ec ON nd.CodGitterbox COLLATE SQL_Latin1_General_CP1_CI_AS = ec.UDC
WHERE ec.UDC IS NULL
GROUP BY nd.CodGitterbox
DECLARE @udc NVARCHAR(50)
DECLARE @Particolare NVARCHAR(50)
DECLARE @NumDisegno NVARCHAR(50)
DECLARE @EsponenteDisegno NVARCHAR(50)
DECLARE @Qta INT
DECLARE @IdxCellaTo INT
DECLARE @adesso DATETIME
DECLARE @posTrovate INT
SET @adesso = GETDATE()
SET @posTrovate = 0
DECLARE cursoreImport CURSOR FOR
SELECT nd.CodGitterbox, tp.Particolare, tp.NumDisegno, tp.EsponenteDisegno, dbo.getNumDatamatrix(nd.CodGitterbox) FROM @newData nd
INNER JOIN v_transcParticolari tp ON nd.NumDisegno = tp.NumDisegno AND nd.EsponenteDisegno = tp.EsponenteDisegno
OPEN cursoreImport
FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno, @Qta
WHILE @@FETCH_STATUS = 0
BEGIN
-- aggiorno gli UDC gitterbox esistenti per quantità tra quelli dei dati da importare...
UPDATE ElencoCartellini
SET CodCS = @CodCS,
IdxPosizione = @IdxPosizione,
CreateDate = @adesso,
Particolare = @Particolare,
DisegnoGrezzo = @NumDisegno,
Esponente = @EsponenteDisegno,
Qta = @Qta,
Figura = '',
CodImballo ='',
Tara = 0,
PesoTot = 0,
PesoCad = 0,
CodStato = 'Fin',
NumCont = 1,
TurnoFus = 0,
ModDate = @adesso
WHERE UDC = @udc
-- indico cella UDC corrente... calcolo la prima cella della nuova posizione...
SET @IdxCellaTo = (
SELECT TOP 1 IdxCella FROM Celle
WHERE IdxBlocco = (
SELECT IdxBlocco FROM Blocchi
WHERE CodMag=CAST(@IdxPosizione AS NVARCHAR(50)))
)
-- controllo se posizione non ancora creata...
SET @posTrovate = ( SELECT COUNT(*) FROM PosizioneUdcCorrente WHERE UDC = @udc )
IF( @posTrovate =0)
BEGIN
INSERT INTO PosizioneUdcCorrente
VALUES (@udc, @IdxCellaTo, @CodCS, @adesso)
END
FETCH NEXT FROM cursoreImport INTO @udc, @Particolare, @NumDisegno, @EsponenteDisegno, @Qta
END
CLOSE cursoreImport
DEALLOCATE cursoreImport
-- inserisco datamatrix da ultimo import
INSERT INTO ElencoDataMatrix
SELECT * FROM @newData
-- aggiorno dati ultimo caricamento
SET @lastImport = ( SELECT ISNULL(MAX(DataImport),@lastImport) FROM @newData )
UPDATE LogImportFlussi
SET LastImport = @lastImport
WHERE NomeFlusso = @nomeFlusso
RETURN
go
commit
go
-- =============================================
-- Author: Samuele E. Locatelli
-- Create date: 2009-09-20
-- Description: trigger x inserimento movimenti
-- nella coda di trasferimento batch
-- verso AS400 x UPDATE UDC
-- =============================================
ALTER TRIGGER trg_updMovAS
ON ElencoCartellini
AFTER UPDATE
AS
BEGIN
-- setup variabili e verbosità
SET NOCOUNT ON;
DECLARE @partOk AS BIT
DECLARE @currUdc AS NVARCHAR(50)
DECLARE @IdxPosFrom AS INT
DECLARE @IdxPosTo AS INT
DECLARE @magFrom AS NVARCHAR(50)
DECLARE @magTo AS NVARCHAR(50)
DECLARE @qta AS DECIMAL(10,2)
DECLARE @qtaOld AS DECIMAL(10,2)
DECLARE @IdxPosizioneComp INT
DECLARE @toAs400 BIT
DECLARE cursore CURSOR FOR
SELECT CASE WHEN ISNULL(Particolare,'n.d.') = 'n.d.' THEN 0 ELSE 1 END, UDC FROM inserted
OPEN cursore
FETCH NEXT FROM cursore INTO @partOk, @currUdc
WHILE @@FETCH_STATUS = 0
BEGIN
-- controllo che CI SIA il particolare (altrimenti non eseguo)
IF(@partOk = 1)
SET @qta = (SELECT Qta FROM inserted WHERE UDC = @currUdc)
SET @qtaOld = (SELECT Qta FROM deleted WHERE UDC = @currUdc)
-- se c'è stata modifica di quantità inizio a rettificare quella
IF ((UPDATE(Qta)) AND(@qta <> @qtaOld))
BEGIN
-- registro il VERO movimento
INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
(
SELECT GETDATE(), 'UDC_MOD', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), @qta - Qta
FROM deleted
WHERE UDC = @currUdc AND CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
)
-- controllo: se il magazzino di destinazione richiede una compensazione registro il 2° movimento di compensazione
SET @IdxPosFrom = (SELECT IdxPosizione FROM deleted)
SET @IdxPosTo = (SELECT IdxPosizione FROM inserted)
-- calcolo il mag di compensazione
SET @IdxPosizioneComp = (SELECT CAST(ISNULL(CodMagAS_compensaz,0) AS INT) FROM AS400_MagCont WHERE (Attivo = 1) AND (CodMagAS = CAST(@IdxPosFrom AS NVARCHAR(50))))
IF (@IdxPosizioneComp > 0)
BEGIN
INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
(
SELECT GETDATE(), 'UDC_COMP', Particolare, UDC, CAST(@IdxPosizioneComp AS NVARCHAR(50)), Qta - @qta
FROM deleted
WHERE UDC = @currUdc AND CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
)
END
END
-- Prendo le posizioni di magazzino precedente e nuova
SET @IdxPosFrom = (SELECT IdxPosizione FROM deleted WHERE UDC = @currUdc)
SET @IdxPosTo = (SELECT IdxPosizione FROM inserted WHERE UDC = @currUdc)
-- controllo se devo fare rettifiche quantità...
SET @toAs400 = (
SELECT TOP 1 ISNULL(toAs400, 0) as valore
FROM TabTranPosizEventi
WHERE IdxPosizione = @IdxPosFrom AND IdxPosizioneTo = @IdxPosTo
)
-- controllo poi se sia cambiato il magazzino logico (IdxPosizione) e si richieda update verso AS400, altrimenti non lo inserisco
IF ((UPDATE(IdxPosizione)) AND @toAs400 = 1)
BEGIN
-- Le trasformo nelle equivalenti stringhe del codMag SE attive
SET @magFrom = (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosFrom AS NVARCHAR(50)))
SET @magTo = (SELECT ISNULL(CodMagAS,'---') FROM AS400_MagCont WHERE Attivo = 1 AND CodMagAs = CAST(@IdxPosTo AS NVARCHAR(50)))
-- inserisco un movimento di deposito verso mag nuovo (SE attivo)
IF (@magFrom <> '---')
BEGIN
INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
(
SELECT GETDATE(), 'UDC_MOV', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), -@qta
FROM deleted
WHERE UDC = @currUdc AND CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
)
END
-- inserisco un movimento di prelievo verso mag vecchio (SE attivo)
IF (@magTo <> '---')
BEGIN
INSERT INTO AS400_BatchMovimenti(DataIns, CodEvento, Particolare, UDC, CodMagAS, Quantita)
(
SELECT GETDATE(), 'UDC_MOV', Particolare, UDC, CAST(IdxPosizione AS NVARCHAR(50)), @qta
FROM inserted
WHERE UDC = @currUdc AND CAST(IdxPosizione AS NVARCHAR(50)) IN (SELECT CodMagAS FROM AS400_MagCont WHERE Attivo = 1)
)
END
END
FETCH NEXT FROM cursore INTO @partOk, @currUdc
END
CLOSE cursore
DEALLOCATE cursore
END
-- registro versione...
INSERT INTO [dbo].[LogUpdateDb] ([Versione],[Data]) VALUES(385, GETDATE())
GO