/***************************************
* STORED stp_processaCodaConsumoMP
*
* Processa la coda dei consumo di UDC di MP e chiaam procedura x salvataggio dato su AS400
*
* Steamware
* mod: 
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_processaCodaConsumoMP]
   ( 
     @ExecBatchInter BIT  -- 0 Eseguita in Batch , 1 in Interattivo
   )
AS
	
	-- faccio una query con un cursore x processare tutte le righe da inviare ad AS400..
	DECLARE @UDC NVARCHAR(50)       -- UDC SQL    
	DECLARE @XRPQLN INT             -- UDC 
	DECLARE @XNRETI NVARCHAR(10)    -- Progr UDC AS400
	DECLARE @XDTPRO	INT             -- DataPrelievo
	DECLARE @XTRPRO NVARCHAR(5)     -- Turno Prelievo
	DECLARE @XDESMT NVARCHAR(3)     -- Destinazione Lega
	DECLARE @XCDTER NVARCHAR(6)     -- Cod. Terzista 

	DECLARE @ScritturaASOK   AS INT	= 0;
	DECLARE @InteroCicloASOK AS INT = 0;   -- memorizzo errore nel ciclo WHILE
	
    -- Dichiaro e carico il cursore
	DECLARE UdcMpList CURSOR LOCAL FOR
		SELECT UDC FROM dbo.AS400_BatchConsumoMP WHERE DataInvioAs IS NULL
	
	OPEN UdcMpList
	FETCH NEXT FROM UdcMpList 
	INTO @UDC
	
	WHILE @@FETCH_STATUS = 0
	BEGIN
	  -- controllo ci sia la riga
	  IF (SELECT COUNT(UDC) FROM AS400_BatchConsumoMP WHERE UDC=@UDC) > 0
		BEGIN
			-- carico valori che mi servono
			SELECT	@XRPQLN=rq.nRapQual, @XNRETI=rq.ProgUDC, @XDTPRO=bcu.DataPrelFus, @XTRPRO=bcu.TurnoPrelFus, 
					@XDESMT=bcu.DestLega, @XCDTER=bcu.DestTerz 
			FROM dbo.AS400_BatchConsumoMP as bcu 
			INNER JOIN RilPro.RapQual as rq ON bcu.UDC = rq.UDC
			WHERE bcu.UDC=@UDC
			
			-- BEGIN TRAN qui non va messa perchè se verso AS400 le transazioni non sono gestite
			-- MANCA IL CONTROLLO SE L'AGGIORNAMENTO E' STATO OK
			EXECUTE @ScritturaASOK = BatchQueue.stp_consumaMP @XRPQLN  ,@XNRETI  ,@XDTPRO  ,@XTRPRO  ,@XDESMT  ,@XCDTER
			
			-- registro la data del movimento BATCH solo se stp_consumaMP ritorna OK
			-- Così non aggiorna la tabella MA L'UTENTE NON SI ACCORGE DI NULLA!!!
			IF @ScritturaASOK = 0
			   UPDATE dbo.AS400_BatchConsumoMP SET DataInvioAs = GETDATE() WHERE UDC = @UDC
			ELSE 
			   SET @InteroCicloASOK = @ScritturaASOK

			FETCH NEXT FROM UdcMpList INTO @UDC
		END
	END
	CLOSE UdcMpList
	DEALLOCATE UdcMpList
    
    -- aggiunta per dare errore se schedulata!!! GCARLO
    -- Se la scrittura su AS400 ha dato errore ed è stata eseguita in batch sollevo l'errore 
    -- così anche il batch da errore
    IF @InteroCicloASOK <> 0 AND @ExecBatchInter = 0
     BEGIN 
        DECLARE @ErrorMessage NVARCHAR(4000);
        DECLARE @ErrorSeverity INT = 16;
        DECLARE @ErrorState INT = 1;

        IF @InteroCicloASOK < 0 -- errore nella verifica della scrittura su AS400
           SELECT @ErrorMessage = 'Errore nella VERIFICA di scrittura su AS400 in stp_consumaMP' 
        ELSE 
           SELECT   -- nn so se riesce a leggere i dati dell'errore cmq lo solleva
                    @ErrorMessage  = ERROR_MESSAGE()+ ' '+ CONVERT( VARCHAR(10),ERROR_NUMBER()),
                    @ErrorSeverity = ISNULL(ERROR_SEVERITY(),16),
                    @ErrorState    = ERROR_STATE();

        -- sollevo errore per mandare in errore la procedura schedulata
        RAISERROR (@ErrorMessage,  -- Message text.
                   @ErrorSeverity, -- Severity.
                   @ErrorState     -- State.
                  );
     END
RETURN


