--exec sp_getAllDocumentsByFilters_new @codiceContratto=NULL,@tpReportHD_US=0,@utente=N'S001594',@codiceFiscale=N'SSTLCN46T54L331H',@cognome=N'SESTA',@nome=N'LUCIANA',@dataDa=NULL,@dataA=NULL,@flagArchiviato=NULL,@flagStorico=0
CREATE PROCEDURE [dbo].[sp_getAllDocumentsByFilters_NEW]
      @tpReport AS INT = NULL ,
      @tpReportHD_US AS INT = NULL ,
      @utente AS VARCHAR(13) = NULL ,
      @codiceFiscale AS VARCHAR(16) = NULL ,
      @dataDa AS DATETIME = NULL ,
      @dataA AS DATETIME = NULL ,
      @flagArchiviato AS BIT = NULL ,
      @cognome AS VARCHAR(50) = NULL ,
      @nome AS VARCHAR(50) = NULL ,
      @codiceContratto AS VARCHAR(11) = NULL ,
      @flagStorico AS BIT = NULL
AS 
      BEGIN
--IF substring(@cognome, 1, 23) = 'FIDEURAM FIDUCIARIA SPA'
--BEGIN
--	SET @codiceFiscale = 'FF@' + substring(@codiceFiscale, 13, 4)
--	SET @cognome = 'FIDEURAM FIDUCIARIA SPA'
--END
--V Nel caso lo spazio arrivi codificato (accesso da portale per le fiduciarie) setto il parametro
--  a NULL, altrimenti la stringa mi diventerebbe parametro di ricerca.
            IF ( @nome = '&nbsp;' ) 
               SET @nome = NULL
            IF ISNULL(@tpReportHD_US , 0) = 0 
               BEGIN
                     SELECT
                        rete ,
                        idCliente AS idCliente ,
                        CASE WHEN ( repository IN ( 0 , 1 , 2 , 5 ) ) THEN idInRepository
                             ELSE a.id
                        END AS Identificativo ,
                        cod_agente AS CodicePB ,
                        flagLock AS stato ,
                        nome + ' ' + cognome AS Nominativo ,
                        dataGenerazione AS DtCreazione ,
                        note AS Note ,
                        Descrizione AS TipologiaReport ,
                        Cognome ,
                        Nome ,
                        Cod_fiscale AS CodFiscale ,
                        repository AS pdfC6 ,
                        0 AS FlagPeriodico , --attaccarci il valore giusto una volta aggiunto sui metadati
	--Se il repository è quello dei restorati allora non deve apparire come storico
                        CASE WHEN ( repository = 3 ) THEN 0
                             ELSE flagStoricizzato
                        END AS storico ,
                        a.id AS idMetadato ,
                        CASE WHEN ( c.id IS NOT NULL
                                  AND c.caricamentoInStorico IS NULL
                                  ) THEN 1
                             ELSE 0
                        END AS richiestaInoltrata
                     FROM
                        repositoryMetadati a
                     JOIN 
                        TipologiaReport b
                     ON tipoReport = b.tpReport
                     LEFT JOIN repositoryStorico c
                     ON a.id = c.id
--select * from repositoryStorico where id in (1145)
                     WHERE
                        1 = 1
                        AND ( @codiceContratto IS NULL
                        OR codiceContratto = @codiceContratto
                        )  
                        --AND (@codiceFiscale is null or cod_fiscale = @codiceFiscale)            
                        AND REPLACE(cod_fiscale,'FF@','07573820581@') = @codiceFiscale -- 10/12/2014: modificato perché il campo Cliente.codFiscale attualmente ha sia il formato FF@ che PIVA@. Una volta fixato il problema lato trimestrale rimettere la parte commentata sopra.
                        AND ( @utente IS NULL
                        OR rete + cod_agente = @utente
                        )
                        AND ( @cognome IS NULL
                        OR cognome = ''
                        OR cognome = @cognome
                        )
                        AND ( @nome IS NULL
                        OR nome = ''
                        OR nome = @nome
                        )
                        AND ( @tpReport IS NULL
                        OR tipoReport = @tpReport
                        )
                        AND ( @flagArchiviato IS NULL
                        OR ( ISNULL(@flagStorico , 0) = 0
                        AND flagLock = @flagArchiviato
                        )
                        )
                        AND ( @flagStorico = 0
                        OR @flagStorico = flagStoricizzato
                        )
	--AND (dataGenerazione between isnull(@dataDa,cast('19000101' as datetime)) and isnull(@dataDa,cast('99990101' as datetime)))
                        AND ( @dataA IS NULL
                        OR dataGenerazione <= @dataA
                        )--CAST(@dataA as nvarchar(50)))
                        AND ( @dataDA IS NULL
                        OR dataGenerazione >= @dataDA
                        )--CAST(@dataDA as nvarchar(50)))
                        AND flagDefinitivo = 1
                        AND ( flagStoricizzato = 0
                        OR ( flagStoricizzato = 1
                        AND flagLock = 1
                        )
                        )
                     ORDER BY
                        storico ASC ,
                        tipoReport ,
                        dataGenerazione DESC
               END
            ELSE --accesso da portale
               BEGIN
                     SELECT
                        rete ,
                        319 AS idCliente ,
                        CASE WHEN ( repository IN ( 0 , 1 , 2 ) ) THEN idInRepository
                             ELSE a.id
                        END AS Identificativo ,
                        cod_agente AS CodicePB ,
                        flagLock AS stato ,
                        nome + ' ' + cognome AS Nominativo ,
                        dataGenerazione AS DtCreazione ,
                        note AS Note ,
                        Descrizione AS TipologiaReport ,
                        Cognome ,
                        Nome ,
                        Cod_fiscale AS CodFiscale ,
                        repository AS pdfC6 ,
                        0 AS FlagPeriodico , --attaccarci il valore giusto una volta aggiunto sui metadati
	--cast(flagStoricizzato as int) as storico,
                        CASE WHEN ( repository = 3 ) THEN 0
                             ELSE flagStoricizzato
                        END AS storico ,
                        a.id AS idMetadato ,
                        CASE WHEN ( c.id IS NOT NULL
                                  AND c.caricamentoInStorico IS NULL
                                  ) THEN 1
                             ELSE 0
                        END AS richiestaInoltrata
                     FROM
                        repositoryMetadati a
                     JOIN 
                        TipologiaReport b
                     ON tipoReport = b.tpReport
                     LEFT JOIN repositoryStorico c
                     ON a.id = c.id
                     WHERE
                        1 = 1
	--(@codiceContratto is null or codiceContratto = @codiceContratto)
                        AND ( @codiceFiscale IS NULL
                        OR cod_fiscale = @codiceFiscale
                        )
                        AND ( @utente IS NULL
                        OR rete + cod_agente = @utente
                        )
                        AND ( @cognome IS NULL
                        OR cognome = @cognome
                        )
                        AND ( @nome IS NULL
                        OR nome = @nome
                        )
                        AND ( @tpReport IS NULL
                        OR tipoReport IN ( 1 , 4 , 5 )
                        ) --diagnosi, monit, dm
                        AND repository IN ( 1 , 2 , 3 , 4 ) --c6batch, dm, storico
                        AND ( @flagArchiviato IS NULL
                        OR ( ISNULL(@flagStorico , 0) = 0
                        AND flagLock = @flagArchiviato
                        )
                        )
	--V capire perchè gli viene passato il flagStorico a 0 al primo avvio per il momento disabilitiamo il filtro 
	--AND (@flagStorico is null or @flagStorico = flagStoricizzato)
	--AND (dataGenerazione between isnull(@dataDa,cast('19000101' as datetime)) and isnull(@dataDa,cast('99990101' as datetime)))
                        AND ( @dataA IS NULL
                        OR dataGenerazione <= @dataA
                        )--CAST(@dataA as nvarchar(50)))
                        AND ( @dataDA IS NULL
                        OR dataGenerazione >= @dataDA
                        )--CAST(@dataDA as nvarchar(50)))
                        AND flagDefinitivo = 1
                        AND ( flagStoricizzato = 0
                        OR ( flagStoricizzato = 1
                        AND flagLock = 1
                        AND repositoryPreStorico IN ( 1 , 2 )
                        )
                        )
                     ORDER BY
                        storico ASC ,
                        tipoReport ,
                        dataGenerazione DESC
               END
      END