-- Stored procedure
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE procedure [C6MartPeriodico].[GESTIONE_INSERT_PDF_FTP] 
	@Rete char(1), 
	@CodiceFiscale varchar(16),
	@IDReport int,
	@NomeFile varchar(50),
	@TipoReport varchar(1),
	@NumeroPagine int,
	@RFA decimal(18,2) = 0,
	@CodiceContratto   varchar(11)
AS  
BEGIN
BEGIN TRY
BEGIN TRANSACTION
 declare @step varchar(20)
		DECLARE @ID_ELAB INT
		SET @ID_ELAB = C6Martperiodico.GETIDELAB()
 set @step='Step 1'
		DECLARE @isDelete int
declare @appIdReport int
		select @isDelete=count(*)
		from C6MartPeriodico.GESTIONE_PDF_FTP  WITH (TABLOCKX) WHERE 
        rete=@Rete and  codicefiscale=@CodiceFiscale
        and TipoReport = @TipoReport
		and IDReport = identityReport
IF @isDelete > 0 
   BEGIN
set @step='Step 2'
        DELETE C6MartPeriodico.GESTIONE_PDF_FTP WITH (TABLOCKX) WHERE 
        rete=@Rete and  codicefiscale=@CodiceFiscale
        and TipoReport = @TipoReport
        and IDReport = identityReport
   end
   set @step='Step 3'
		DECLARE @isUpdate int
		select @isUpdate=count(*)
		from C6MartPeriodico.GESTIONE_PDF_FTP WITH (TABLOCKX) WHERE 
        rete=@Rete and  codicefiscale=@CodiceFiscale
        and TipoReport = @TipoReport
		and IDReport <> identityReport
IF @isUpdate = 0 
   BEGIN
   set @step='Step 4'
while exists(select 1 from  C6MartPeriodico.GESTIONE_PDF_FTP where IDReport = @IDReport)
begin
set @IDReport = @IDReport+ 1
end
		insert into C6MartPeriodico.GESTIONE_PDF_FTP
		(
			Rete,
			CodiceFiscale,
			IDReport,
			DataGenerazione,
			DataInvio,
			FlagInvio,
			NomeFile,
			TipoReport,
			numeroPagine,
			RFA,
			id_Fk_zip,
			ID_ELAB,
			Definitivo,
			codicecontratto
		)
		values
		(
			@Rete,
			@CodiceFiscale,
			@IDReport,
			Getdate(),
			null,
			'N',
			@NomeFile,
			@TipoReport,
			@NumeroPagine,
			@RFA,
			-1,
			@ID_ELAB,
			0,
			@CodiceContratto
			)
        -- ToDo ...togliere la select e gestire la variabile @@identity
		-- Recupero id appena creato 
		--where condition per nomefile ( r e cf possono dare id sbagliati ( Mon-Diag) )
		set @step='Step 5'
		select @appIdReport=identityReport
		from C6MartPeriodico.GESTIONE_PDF_FTP WITH (TABLOCKX)
		where rete=@Rete and  codicefiscale=@CodiceFiscale
		and tiporeport=@TipoReport
		--where nomefile=@NomeFile;
	  if @appIDReport > 0  Begin
		set @step='Step 6'
		--aggiorno id report per mantenere la gestione in tutto il progetto
		update C6MartPeriodico.GESTIONE_PDF_FTP
		set idReport=@appIdReport
		where rete=@Rete and  codicefiscale=@CodiceFiscale
		and identityReport=@appIdReport and tiporeport=@TipoReport
	  END	
	END
ELSE
  BEGIN
  set @step='Step 7'
    UPdate C6martperiodico.Gestione_pdf_ftp
	SET  
	        DataGenerazione=Getdate(),
			DataInvio=null,
			FlagInvio='N',
			NomeFile=@NomeFile,
			TipoReport=@TipoReport,
			numeroPagine=@NumeroPagine,
			RFA=@RFA,
			id_Fk_zip=-1,
			ID_ELAB=@ID_ELAB,
			Definitivo=0,
			codicecontratto=@CodiceContratto 
    where RETE = @Rete and CodiceFiscale=@CodiceFiscale
	 and idReport=@IDReport
	 set @step='Step 8'
	 select @appIdReport=identityReport
	 from C6MartPeriodico.GESTIONE_PDF_FTP WITH (TABLOCKX)
	 where rete=@Rete and  codicefiscale=@CodiceFiscale
	and tiporeport=@TipoReport
  END 
set @IdReport = @appIdReport		
-- FC 05022015
-- IdReport temporaneo per gestione Parallelizzazione
-- L'idReport verrà aggiornato una volta generato in fase di inserimento del PDF su ReportManager
-- ToDo ...togliere la select e gestire la variabile @@identity
	--	declare @appIdReport int
	--	-- Recupero id appena creato 
	--	--where condition per nomefile ( r e cf possono dare id sbagliati ( Mon-Diag) )
	--	select @appIdReport=identityReport
	--	from C6MartPeriodico.GESTIONE_PDF_FTP
	--	where rete=@Rete and  codicefiscale=@CodiceFiscale
	--	and tiporeport=@TipoReport
	--	--where nomefile=@NomeFile;
	--if @appIDReport > 0  Begin
	--	--aggiorno id report per mantenere la gestione in tutto il progetto
	--	update C6MartPeriodico.GESTIONE_PDF_FTP
	--	set idReport=@appIdReport
	--	where rete=@Rete and  codicefiscale=@CodiceFiscale
	--	and identityReport=@appIdReport and tiporeport=@TipoReport
-- COLAIANNI-CONSOLI - 28.06.2011
-- SETTA NELLA CONTROLLO_TRIMESTRALE LO STATO REPORT CORRISPONDENTE ALLA PRODUZIONE DEL REPORT:
-- DI DIAGNOSI (STATO: SEMILAVORATO) O DI MONITORAGGIO (STATO: STAMPATO)
		IF (@TipoReport = 'D')
			BEGIN
			set @step='Step 9'
				UPDATE c6martperiodico.controllo_trimestrale 
				SET stato_report=10, id_report_d=@IDReport, DATA_TRANSIZIONE=GETDATE() 
				WHERE  stato_report = 1
					   AND Rete = @Rete
					   AND Cod_Fiscale = @CodiceFiscale
			END
		ELSE IF (@TipoReport = 'M')
			BEGIN
			set @step='Step 10'
				UPDATE c6martperiodico.controllo_trimestrale 
				SET  stato_report=4, id_report_m=@IDReport, DATA_TRANSIZIONE=GETDATE() 
				WHERE  ( (stato_report = 1 and flag_diagnosi=0) OR (stato_report = 10) )
					   AND Rete = @Rete
					   AND Cod_Fiscale = @CodiceFiscale
			END
	    --return @numeroRighe
	   -- return  @@ROWCOUNT
			set @step='Step 11'
	 update C6MartPeriodico.CRUSCOTTO_CONTRATTISEI 
	set
	dtstamp = getdate()
	,elab = 10
	from C6MartPeriodico.CRUSCOTTO_CONTRATTISEI  
	where 	 Rete = @Rete
					   AND CodiceFiscale = @CodiceFiscale	
-- FC 05022015
-- IdReport temporaneo per gestione Parallelizzazione
-- L'idReport verrà aggiornato una volta generato in fase di inserimento del PDF su ReportManager
   set @step='Step 12'
   if @IDReport > 0 Begin
	   select @IdReport
	   from C6MartPeriodico.GESTIONE_PDF_FTP
	   where rete=@Rete and  codicefiscale=@CodiceFiscale
	   and tiporeport=@TipoReport
   end
   else
       Begin
         set @IDReport=-1
         select @IDReport
       END
COMMIT TRANSACTION
END TRY
BEGIN CATCH
   IF @@TRANCOUNT > 0
        ROLLBACK TRAN --RollBack in case of Error
  Declare @CodiceErrore int
	Declare @DescirzioneErrore varchar(250)
	declare @dataTime datetime
	Declare @nomePackage varchar(250)
	select @CodiceErrore=error_number(),
			@nomePackage=ERROR_PROCEDURE() ,
			@DescirzioneErrore=ERROR_MESSAGE() ,
			@dataTime = getdate()
	set @DescirzioneErrore = @DescirzioneErrore + @step + ' (' + @CodiceFiscale + ';' + @Rete + cast(@IDReport as nvarchar(20)) + ')'
 exec  [C6Mart].[UT_INSERT_ERROR] @CodiceErrore,@DescirzioneErrore,@dataTime,null,null,@nomePackage
	 IF @@TRANCOUNT > 0
        ROLLBACK TRAN --RollBack in case of Error
END CATCH
END