
/***************************************
* STORED stp_batch_RapQual_S01
*
* Esegue lo step 1 (caricamento dati RAW da AS400) per la tab dei rapporti di qualità
*
* Steamware, S.E.L.
* mod: 2010.09.23
*
****************************************/
CREATE PROCEDURE BatchQueue.stp_batch_RapQual_S01
(
	@minData DATETIME
)
AS
  	SET NOCOUNT ON;
	
	-- BOZZA DA TESTARE A CURA MAZZUCCONI!!!
	
    -- Caricamento Rapporti qualità Materia Prima

    -- FILE XOGIX00F
    -- LIBRERIA TEST            MAZZT_DTV3
    -- LIBRERIA EFFETTIVA TEKAL TEKA_DATV3
    -- LIBRERIA EFFETTIVA POSS  POSN_DATV3

    /*    
       XRPQLN AS nRapQual
       XRPQLD AS DataRapQual
       XNRETI AS ProgUDC
       XCDFOR AS CodFor
       XCDTER AS DestTerz
       XCDPAR AS CodLega
       XDTPRO AS DataPrelFus
       XTRPRO AS TurnoPrelFus
       XQTPRO AS Qta
       XDESMT AS DestLega
       XMATSC AS LegaScaric
       XBENQL AS BenesQual
    
       WHERE XRPQLN <> 0   -- Se il n. rapporto di qualità è zero non sono cartellini materia prima
       
       L'UPDATE FUNZIONA VERSO AS400
    */
	
	DECLARE @SQL AS NVARCHAR(4000);
    DECLARE @SqlOK AS INT;
	DECLARE @As400File AS NVARCHAR(50) = '';
    DECLARE @As400Linked AS NVARCHAR(50) = '';  -- Linked Server AS400
	DECLARE @dataAs400 AS VARCHAR(8);
	
	SET @dataAs400 = (SELECT dbo.dateToAsFormat(@minData));
    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
	
		-- svuoto tab raw attuale
		TRUNCATE TABLE RawData.XOGIX00F;

		-- Leggo tutti gli UDC dei rapporti di qualità a partire dalla data richiesta
		-- escludendo quelli con Numero Rapporto di qualità a zero ( non sono rapporti di qualità )
		
		-- CREO L'ISTRUZIONE SQL DI INSERT PARAMETRICA
		SET @SQL = 
		N'INSERT INTO RawData.XOGIX00F
		 SELECT  XRPQLN
				,XRPQLD
				,XNRETI
				,XCDFOR
				,XCDTER
				,XCDPAR
				,XDTPRO
				,XTRPRO
				,XQTPRO
				,XDESMT
				,XMATSC
				,XBENQL
		FROM OPENQUERY(' + @As400Linked
		
        SET @SQL = @SQL + N', ''SELECT * FROM ' + @As400File
        SET @SQL = @SQL + ' WHERE XRPQLN <> 0 AND XRPQLD >= ' + @dataAs400 + ' '' ) '
	    
        -- Eseguo il comando T-SQL verso AS400 e testo se OK
        
        -- EXEC @SqlOK = sp_executesql @SQL  se faccio così non mi valorizza la variabile se da errore
	    EXEC sp_executesql @SQL;		
	END TRY
    BEGIN CATCH
		-- nel caso di errore ne salvo il numero
		SET @SqlOK = ERROR_NUMBER();     		-- PRINT ERROR_NUMBER()
    END CATCH

    -- Memorizzo il comando per verifica T-SQL e l'esito del comando se 0 è OK
	INSERT INTO RawData.AS400_Comandi
	SELECT GETDATE(), 'stp_batch_RapQual_S01', @SQL, @SqlOK;
    
    -- è possibile sollevare un RAISERROR ??? come si comporta poi il programma?
    -- NON SI FANNO RAISE ERROR E NON SI RESTITUISCE CODICE!!!!!

RETURN
