Files
GMW/GMW_DB/BatchQueue/Stored Procedures/stp_processaCodaMovimPackList.sql
T
Samuele Locatelli a6d7ea0b2f Import iniziale DB, GMW
versione TK 2.4
inclusione schema voc x tabella lingue e vocabolario
2014-02-20 09:54:57 +01:00

114 lines
4.0 KiB
Transact-SQL

/*****************************************
* STORED stp_processaCodaMovimPackList
*
* Processa la coda delle packing list e chiama procedura x salvataggio dato su AS400
*
* Steamware, S.E.L.
* mod: 2010.10.22
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_processaCodaMovimPackList]
AS
-- BOZZA DA VERIFICARE E COMPLETARE A CURA MAZZUCCONI!!!
-- campi x cursore e valorizzazione riga a riga
DECLARE @IdxRiga INT
DECLARE @CodLista NVARCHAR(12)
DECLARE @CodListaPre NVARCHAR(12)
DECLARE @CodStab CHAR(2)
DECLARE @UDC NVARCHAR(15)
DECLARE @Particolare NVARCHAR(15)
DECLARE @CodImb NVARCHAR(15)
DECLARE @Matr INT
DECLARE @Tipo NVARCHAR(2)
DECLARE @Dest NVARCHAR(10)
DECLARE @Qta INT
DECLARE @PesoNet NUMERIC(7,3)
DECLARE @PesoLor NUMERIC(7,3)
DECLARE @Stato CHAR(1)
DECLARE @Data NVARCHAR(8)
DECLARE @ScritturaRigaOK AS INT -- Flag errore su riga ritornato da Stored che va su As400 0 = Ok
SET @ScritturaRigaOK = 0;
DECLARE @ScritturaASOK AS INT -- Flag errore Packing generale su Stored che va su As400 0 = Ok
SET @ScritturaASOK = 0;
-- qui è meglio usare una tabella temporanea o ancor meglio una variabile tabella x pochi record
-- query con un cursore x processare tutte le righe di Packing che sono ancora da inviare ad AS400 ( DataBatch IS NULL )
DECLARE RigaPackList CURSOR LOCAL FOR
SELECT IdxRiga, CodLista FROM v_datiPackingList ORDER BY CodLista
-- setto il codice stabilimento da inviare ad AS... VERIFICARE!!!
SET @CodStab = '05';
-- imposto prima codListaPre a vuoto...
SET @CodListaPre = '';
-- inizio cursore caricando le righe
OPEN RigaPackList
FETCH NEXT FROM RigaPackList
INTO @IdxRiga , @CodLista
SET @CodListaPre = @CodLista
WHILE @@FETCH_STATUS = 0
BEGIN
-- controllo ci sia almento una riga di Packing ( PER ME NON SERVE )
IF (SELECT COUNT(IdxRiga) FROM v_datiPackingList WHERE IdxRiga = @IdxRiga) > 0
BEGIN
-- carico valori che mi servono
SELECT @Particolare=pl.Particolare, @UDC=UDC, @CodImb=pl.CodImballo, @Matr = pl.matrUdc, @Tipo=pl.tipo, @Dest=pl.Destinatario,
@Qta=ABS(pl.Qta), @PesoNet=pl.PesoNetto, @PesoLor=pl.PesoTot, @Stato=pl.Stato, @Data=dbo.dateToAsFormat(pl.data),
@CodLista=pl.CodLista
FROM v_datiPackingList pl
WHERE IdxRiga = @IdxRiga
-- Eseguo la stored che registra la Packing List con le righe sue righe
EXECUTE @ScritturaRigaOK = BatchQueue.stp_registraPackList @CodStab, @UDC, @Particolare , @CodImb , @Matr , @Tipo , @Dest , @Qta , @PesoNet , @PesoLor , @Stato , @Data
-- se scrittura riga è ok allora salvo sulla riga la data di invio... così poi non la rivedo tra quelle da processare...
IF @ScritturaRigaOK = 0
UPDATE RigheListePrelievo_AS SET DataBatch = GETDATE() WHERE IdxRiga = @IdxRiga;
-- Se scrittura Riga Packing non ok metto Flag Packing list non Ok
IF @ScritturaRigaOK <> 0 SET @ScritturaASOK = @ScritturaRigaOK
FETCH NEXT FROM RigaPackList
INTO @IdxRiga , @CodLista
-- controllo: se la lista precedente è diversa dall'attuale la indico come scaricata (precedente)
IF(@CodListaPre <> @CodLista)
BEGIN
-- Se tutte le righe della lista sono Ok la indico come scaricata
-- se UDC già presente in As400 errore 7343
IF @ScritturaASOK = 0
UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodListaPre;
ELSE
SET @ScritturaASOK = 0; -- resetto il flag di controllo
-- cambio il cod pre da confrontare
SET @CodListaPre = @CodLista
END
END
END
-- Aggiorno anche l'ultima lista prelievo
-- x gli UDC già in AS400 da errore 7343
IF @ScritturaASOK = 0 -- OR @ScritturaASOK = 7343 ???
-- registro la data del movimento BATCH anche dell'ultima lista processata
UPDATE ElencoListePrelievo_AS SET DataBatch = GETDATE() WHERE CodLista = @CodLista
-- se c'è un errore mi rimane aperto il cursore? nn dovrebbe perchè LOCAL
CLOSE RigaPackList
DEALLOCATE RigaPackList
RETURN