


/***************************************
* STORED stp_batch_RapQual_S02
*
* Esegue lo step 2 (travaso dati RAW in RilPro) per la tab dei rapporti di qualità
*
* Steamware, S.E.L.
* mod: 2011.11.25
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_batch_RapQual_S02_OLD]
(
	@CodMagMpNONacc NVARCHAR(50) = '6666',
	@CodMagMpAcc    NVARCHAR(50) = '6',
	@CodStatoMpNONacc NVARCHAR(50) = 'MP-NA',
	@CodStatoMpAcc    NVARCHAR(50) = 'MP'
)

AS

     SET XACT_ABORT ON;
     SET NOCOUNT ON;
       -- eseguo UPSERT x tutti i dati disponibili in tab Raw...
     BEGIN TRAN;

         -- ===============================================================================================
         -- PRIMA DI AGGIORNARE VERIFICO SE CI SONO MODIFICHE DI MP ACCETTATA / NON ACCETTATA
         -- ===============================================================================================
         --DECLARE @CodMagMpNONacc AS VARCHAR(50) = '6666'  -- Setto il Magazzino per MP NON ACCETTATA
         --DECLARE @CodMagMpAcc    AS VARCHAR(50) = '6'     -- Setto il Magazzino per MP ACCETTATA        

         DECLARE @CellaOK        AS INT
         DECLARE @MagAccOK       AS INT
         DECLARE @MagNNAccOK     AS INT
         DECLARE @CodEven   	 AS NVARCHAR(10) = 'UDC_MPRQ';
         
         -- ===============================================================================================
         -- SPOSTAMENTO DI MAGAZZINO DELLA MP che da ACCETTATA diventa NON ACCETTATA
         -- ===============================================================================================
         -- Controllo che il magazzino dest. NON ACCETTATA sia a cella singola( a terra ), attivo
         SELECT  @MagAccOK = COUNT(*) FROM dbo.Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco
         WHERE b.CodMag = @CodMagMpNONacc AND c.Attiva = 1

         IF @MagAccOK = 1  -- Se mag. NON ACCETTATA è OK 
            BEGIN
             -- Vado a leggere la cella corretta
             SELECT  @CellaOK = c.IdxCella FROM Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco
             WHERE b.CodMag = @CodMagMpNONacc AND c.Attiva = 1

             -- Se ci sono cartellini di materia prima che sono passati da accettati a non accettati li sposto
             UPDATE dbo.PosizioneUdcCorrente
                SET IdxCella = @CellaOK,
                    DataRif = GETDATE()
             FROM dbo.PosizioneUdcCorrente AS po
             INNER JOIN RilPro.RapQual rq
                ON rq.UDC = po.UDC
             INNER JOIN RawData.XOGIX00F u 
                ON u.XNRETI = rq.ProgUDC 
             INNER JOIN dbo.ElencoCartellini AS el
                ON rq.UDC = el.UDC           
             INNER JOIN Celle c 
                ON po.IdxCella=c.IdxCella
             INNER JOIN Blocchi b
                ON c.IdxBlocco=b.IdxBlocco
             WHERE ( rq.BenesQual = 'S' AND u.XBENQL = 'N' )    -- da Accettata a NON accettata
                   AND XMATSC = 'N'                             -- solo Lega non ancora Scaricata
                   AND b.CodMag <> @CodMagMpNONacc              -- Che non è in Magazzino NON Accettati

             UPDATE dbo.ElencoCartellini
                SET CodStato = @CodStatoMpNONacc,
                    CodEvento= @CodEven,
                    ModDate = GETDATE()
				
             FROM dbo.ElencoCartellini AS el
             INNER JOIN RilPro.RapQual rq
                ON rq.UDC = el.UDC
             INNER JOIN RawData.XOGIX00F u 
                ON u.XNRETI = rq.ProgUDC 
             WHERE ( rq.BenesQual = 'S' AND u.XBENQL = 'N' )    -- da Accettata a NON accettata
                   AND XMATSC = 'N'                             -- solo Lega non ancora Scaricata
                   AND el.CodStato = @CodStatoMpAcc             -- Modifico solo UDC in stato 'MP' (accettata)
                   AND el.IdxPosizione = 6						-- Modifico solo se cartellini non scaricati Mod. 2012-05
           END       
       
        -- ===============================================================================================
        -- SPOSTAMENTO DI MAGAZZINO DELLA MP che da NON ACCETTATA diventa ACCETTATA
        -- ===============================================================================================
        -- Controllo che il magazzino dest. ACCETTATA sia a cella singola( a terra ), attivo
        SELECT  @MagNNAccOK = COUNT(*) FROM dbo.Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco
        WHERE b.CodMag = @CodMagMpAcc AND c.Attiva = 1

        IF @MagNNAccOK = 1  -- Se mag. ACCETTATA è OK 
            BEGIN
             -- Vado a leggere la cella corretta
             SELECT  @CellaOK = c.IdxCella FROM Celle AS c INNER JOIN Blocchi b ON c.IdxBlocco=b.IdxBlocco
             WHERE b.CodMag = @CodMagMpAcc AND c.Attiva = 1

             -- Se ci sono cartellini di materia prima che sono passati da accettati a non accettati li sposto
             UPDATE dbo.PosizioneUdcCorrente
                SET IdxCella = @CellaOK,
                    DataRif = GETDATE()
             FROM dbo.PosizioneUdcCorrente AS po
             INNER JOIN RilPro.RapQual rq
                ON rq.UDC = po.UDC
             INNER JOIN RawData.XOGIX00F u 
                ON u.XNRETI = rq.ProgUDC 
             INNER JOIN dbo.ElencoCartellini AS el
                ON rq.UDC = el.UDC           
             INNER JOIN Celle c 
                ON po.IdxCella=c.IdxCella
             INNER JOIN Blocchi b
                ON c.IdxBlocco=b.IdxBlocco
             WHERE ( rq.BenesQual = 'N' AND u.XBENQL = 'S' )    -- da NON Accettata ad Accettata
                   AND XMATSC = 'N'                             -- solo Lega non ancora Scaricata
                   AND b.CodMag <> @CodMagMpAcc                 -- Modifico solo UDC in stato MP non Accettata

             UPDATE dbo.ElencoCartellini
                SET CodStato = @CodStatoMpAcc,
                    CodEvento= @CodEven,
                    ModDate = GETDATE()
             FROM dbo.ElencoCartellini AS el
             INNER JOIN RilPro.RapQual rq
                ON rq.UDC = el.UDC
             INNER JOIN RawData.XOGIX00F u 
                ON u.XNRETI = rq.ProgUDC 
             WHERE ( rq.BenesQual = 'N' AND u.XBENQL = 'S' )    -- da NON Accettata ad Accettata
                   AND XMATSC = 'N'                             -- solo Lega non ancora Scaricata
                   AND el.CodStato = @CodStatoMpNONacc          -- Che ha è in stato MP NON accettata 
                   AND el.IdxPosizione = 6						-- Modifico solo se cartellini non scaricati Mod. 2012-05
            END   
       
       -- ===============================================================================================
       -- ADESSO POSSO FARE UPDATE DI RilPro.RapQual
       -- ===============================================================================================
       -- se il dato esiste faccio UPDATE!!!
       UPDATE  RilPro.RapQual
           SET CodFor          = RTRIM(u.XCDFOR),
               DestTerz        = RTRIM(u.XCDTER),
               CodLega         = RTRIM(u.XCDPAR),
--             DataPrelFus     = u.XDTPRO,
--             TurnoPrelFus    = u.XTRPRO, -- non lo aggiorno perchè in AS400 è blank nel caso di consumo verso terzista e quindi lo perderei
               Qta             = u.XQTPRO, -- non lo aggiorno x non perdere il mio dato di scaricamento
			   DestLega        = RTRIM(u.XDESMT),
               LegaScaric      = u.XMATSC,
               BenesQual       = u.XBENQL
       FROM RilPro.RapQual rq
       INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC; -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ...

       -- verifico che non ci siano cartellini scaricati in AS400 e non sul mio sistema...
       UPDATE  RilPro.RapQual
           SET CodFor          = RTRIM(u.XCDFOR),
               DestTerz        = RTRIM(u.XCDTER),
               CodLega         = RTRIM(u.XCDPAR),
			   DataPrelFus     = u.XDTPRO,
			   TurnoPrelFus    = RTRIM(u.XTRPRO), 
			   Qta             = u.XQTPRO, 
			   DestLega        = RTRIM(u.XDESMT),
			   LegaScaric      = u.XMATSC,
			   BenesQual       = u.XBENQL
			   FROM RilPro.RapQual rq
		INNER JOIN RawData.XOGIX00F u ON u.XNRETI = rq.ProgUDC
		WHERE rq.DataPrelFus = 0 AND u.XDTPRO > 0;

       -- creo tab temporanea x i dati inesistenti...
       WITH cteInsert AS
               (SELECT x.*
                       FROM RawData.XOGIX00F x LEFT OUTER JOIN RilPro.RapQual rq
                       ON x.XNRETI = rq.ProgUDC -- AND u.XRPQLN = rq.nRapQual AND u.XRPQLD = rq.DataRapQual; -- se XNRETI è univoco ...
                       WHERE rq.ProgUDC IS NULL )

       -- se il dato non c'è faccio INSERT!!!
       INSERT INTO RilPro.RapQual(nRapQual, DataRapQual, ProgUDC, CodFor, DestTerz, CodLega, DataPrelFus, TurnoPrelFus, Qta, DestLega, LegaScaric, BenesQual)
       SELECT  XRPQLN AS nRapQual,
                       XRPQLD        AS DataRapQual,
                       RTRIM(XNRETI) AS ProgUDC,
                       RTRIM(XCDFOR) AS CodFor,
                       RTRIM(XCDTER) AS DestTerz,
                       RTRIM(XCDPAR) AS CodLega,
                       XDTPRO        AS DataPrelFus,
                       RTRIM(XTRPRO) AS TurnoPrelFus,
                       XQTPRO        AS Qta,
                       RTRIM(XDESMT) AS DestLega,
                       XMATSC        AS LegaScaric,
                       XBENQL        AS BenesQual
       FROM cteInsert

       -- ===============================================================================================
       -- DOPO UPDATE aggiorno la QTA nei Cartellini GMW se diversi da quelli in RilPro.RapQual ( AS400 )
       -- ===============================================================================================
       UPDATE e
         SET
             e.Qta     = r.Qta
            ,e.PesoTot = r.Qta
            ,CodEvento= @CodEven
            ,ModDate = GETDATE()  -- memorizzo la modifica 
         -- OUTPUT deleted.* INTO dbo.ElencoCartellini_Copy  -- deve essere già presente
         FROM RilPro.RapQual AS r
            INNER JOIN dbo.ElencoCartellini AS e
              ON e.UDC = r.UDC
         WHERE ( r.Qta <> e.Qta ) -- Solo se la quantità è diversa

     COMMIT TRAN;
     
RETURN