

/***************************************
* STORED stp_consumaMP
*
* Salva il movimento di consumo dell'UDC di MP indicato
*
* Steamware, S.E.L.
* mod: 2010.10.12
*
****************************************/
CREATE PROCEDURE [BatchQueue].[stp_consumaMP]
(
	@XRPQLN	INT,          -- è il num rap qualità
	@XNRETI NVARCHAR(10), -- è il numUdc prog AS400
	@XDTPRO	INT,          -- data 8 cifre aaaammgg Data Prelievo Fusione
	@XTRPRO NVARCHAR(5),  -- turno prelievo ( solo se interno )
	@XDESMT NVARCHAR(3),  -- destinatario int/terzista ( F01 / T01 )
	@XCDTER NVARCHAR(6)   -- cod terzista ( Anagrafico Depositi )
)
AS

    -- Salva consumo cartellini Rapporti qualità Materia Prima

    -- FILE XOGIX00F

    -- LIBRERIA TEST           MAZZT_DTV3
    -- LIBRERIA EFFETT. TEKAL  TEKA_DATV3
    -- LIBRERIA EFFETT. SP     POSN_DATV3

	/*  PER TESTARE 
	
	DECLARE @XRPQLN	INT,          -- è il num rap qualità
            @XNRETI NVARCHAR(10), -- è il numUdc prog
            @XDTPRO	INT,          -- data 8 cifre aaaammgg
            @XTRPRO NVARCHAR(5),  -- turno
            @XDESMT NVARCHAR(3),  -- destinatario int/terzista
            @XCDTER NVARCHAR(6)   -- cod terzista

	SET @XRPQLN	= 905793        -- è il num rap qualità 
	SET @XNRETI = 'U100548151'  -- è il numUdc prog
	SET @XDTPRO	= 20100723      -- data 8 cifre aaaammgg
	SET @XTRPRO = 'S'           -- turno
	SET @XDESMT = 'F01'         -- destinatario int/terzista
	SET @XCDTER = ''            -- cod terzista
	*/
 
	DECLARE @SQL AS NVARCHAR(4000);
    DECLARE @SqlOK AS INT;
	DECLARE @As400File AS NVARCHAR(50) = '';
    DECLARE @As400Linked AS NVARCHAR(50) = '';  -- Linked Server AS400

    SET  @SqlOK = 0;

    -- In base al nome del DB e della stored recupero il Linked Server e file di AS400 27/06/2013
    SET @As400Linked = ( SELECT dbo.f_getLikedAS400(DB_NAME()) );
    SET @As400File   = ( SELECT dbo.f_getLibreriaAS400 ( DB_NAME() , OBJECT_SCHEMA_NAME(@@PROCID) + '.' + OBJECT_NAME(@@PROCID) ) )

    BEGIN TRY

	    -- TEST per generare errore
	    -- SET @XDTPRO	= 99999920100723      -- data 8 cifre aaaammgg

        -- ==============================================================
	    -- Creo l'istruzione SQL e faccio chiamata su AS400
	    -- Aggiorno solo se su As400 Legascar è N  XMATSC = 'N' mettendo poi S
	    -- indico su As400 che il cartellino UDC della Lega è stato scaricato
        -- ==============================================================

 	    SET @SQL =  N'UPDATE OPENQUERY(' + @As400Linked
 	    SET @SQL = @SQL + N', ''SELECT * FROM ' + @As400File
    	
	    SET @SQL = @SQL + ' WHERE XRPQLN = ' +  CAST(@XRPQLN AS NVARCHAR(20))                    -- Numero Rapporto Qualita
	    SET @SQL = @SQL + ' AND XMATSC = ''''N'''' AND XNRETI = ''''' + @XNRETI + ''''''' ) '   -- non ancora scaricato ('N') e  Numero UDC AS400

	    SET @SQL = @SQL + 'SET	XDTPRO =  ' + CAST(@XDTPRO AS NVARCHAR(8))  -- Data
	    SET @SQL = @SQL +    ', XTRPRO = ''' + @XTRPRO + ''''               -- Turno
	    SET @SQL = @SQL +    ', XDESMT = ''' + @XDESMT + ''''               -- Destinatario
        SET @SQL = @SQL +    ', XMATSC = ''S'''                             -- Flag Lega Scaricata
	    SET @SQL = @SQL +    ', XCDTER = ''' + @XCDTER + '''';              -- Cod Terzista

        -- Eseguo il comando T-SQL verso AS400
	    EXEC sp_executesql @SQL;
        
        -- EXEC @SqlOK = sp_executesql @SQL  se faccio così non mi valorizza la variabile se da errore

	END TRY
    BEGIN CATCH

    -- se entro nel CATCH c'è stato un errore quindo lo memorizzo
    SET @SqlOK = ERROR_NUMBER();  
  
    END CATCH

    -- Test di lettura - Modifica 14/06/2011
    IF @SqlOK = 0   -- Se sp_executesql è Ok
      BEGIN 
            
            SET @SqlOK = -1 -- lo rimetto a 0 solo se lettura è OK
            -- Controllo che l'UDC sia stato scaricato in modo corretto su AS400
            DECLARE @SQL2 AS NVARCHAR(4000);
            DECLARE @LettoOk AS INT = 99;

            SET @SQL2 = N'SELECT @LettoOk = COUNT(*) FROM OPENQUERY(' + @As400Linked
            SET @SQL2 = @SQL2 + N', ''SELECT XRPQLN FROM ' +  @As400File
            
            SET @SQL2 = @SQL2 + N' WHERE XRPQLN = ' +  CAST(@XRPQLN AS NVARCHAR(20))   -- Numero Rapporto Qualita
            SET @SQL2 = @SQL2 + N' AND XNRETI = ''''' + @XNRETI + ''''''               -- Numero UDC AS400
            SET @SQL2 = @SQL2 + N' AND XMATSC = ''''N'''''                             -- non ancora scaricato ('N')
            SET @SQL2 = @SQL2 + N''' ) '
    
            EXEC sp_executesql @SQL2, N'@LettoOk INT OUTPUT', @LettoOk OUTPUT;
            
            -- Se trovo record UDC non scaricato lo imposto come errore -2 altrimenti tutto OK
            IF @LettoOk = 0 SET @SqlOK = 0 ELSE SET @SqlOK = -2
      END
    -- Fine Modifica - Modifica 14/06/2011
    
    -- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK
	INSERT INTO RawData.AS400_Comandi
	SELECT GETDATE(), 'stp_consumaMP', @SQL, @SqlOK;
    
    -- è possibile sollevare un RAISERROR ??? come si comporta poi il programma?
    -- NON SI FANNO RAISE ERROR!!!!!
    
    RETURN @SqlOK;
            
	/* -- sono tutte su DB di test
    SELECT XRPQLN, XNRETI , XDTPRO, XTRPRO, XDESMT, XMATSC, XCDTER 
    FROM OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ')

    -- Resetto l'UDC
    UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ') 
    SET XDTPRO =  0 , XTRPRO = '', XDESMT = '', XMATSC = 'N', XCDTER = ''

    -- Comando OK
    -- UPDATE OPENQUERY( AS400XXXX, 'SELECT * FROM MAZZT_DTV3.XOGIX00F WHERE XRPQLN = 905793 AND XNRETI = ''U100548151'' ') 
    -- SET XDTPRO = 20100723 , XTRPRO = 'S', XDESMT = 'F01', XMATSC = 'N', XCDTER = ''
    */

