CREATE  PROCEDURE [dbo].[sp_getSezioni_ByIdReport_TreeView]
@pIdReportAlbero as int,
@pIdReport as int,
@flagViewState as bit,
@pRete varchar(1)='F'
AS
BEGIN
select DtCreazione, 
			DtCancellazione, 
			IdReport, 
			IdSezione,
			IdSezionePadre,
			Utente, 
			case 
				when @pRete='S' then replace(Descrizione,'Banca Fideuram','Sanpaolo Invest') 
				else Descrizione end as Descrizione,
			TpSezione,
			NomeControlloGruppo,
			internalSectionCode,
			IsMandatory,
			IsDefault,
			IsBold,	
			NomeImmagine,
			CSSClass,
			NoParentBehaviour,
			IsSectionPrinting,
			NoCheckedByParent,
			ordine
into #tabella from sezione
WHERE       (IdReport = @pIdReportAlbero) 
;with cte(DtCreazione, DtCancellazione,IdReport, IdSezione, IdSezionePadre, Utente, Descrizione,TpSezione,NomeControlloGruppo,internalSectionCode,IsMandatory,IsDefault, IsBold,NomeImmagine, CSSClass,NoParentBehaviour,
			IsSectionPrinting, NoCheckedByParent,livello, ordinamento) as
(
	SELECT      DtCreazione, 
				DtCancellazione, 
				IdReport, 
				IdSezione,
				IdSezionePadre,
				Utente, 
				Descrizione,
				TpSezione,
				NomeControlloGruppo,
				internalSectionCode,
				IsMandatory,
				IsDefault,
				IsBold,	
				NomeImmagine,
				CSSClass,
				NoParentBehaviour,
				IsSectionPrinting,
				NoCheckedByParent,
				0 as livello,
				--CAST(IdSezione AS VARBINARY(900)) as ordinamento
			    CAST(Ordine AS VARBINARY(900)) as ordinamento
	FROM        #tabella 
	WHERE       IdSezionePadre IS NULL
	UNION ALL
	SELECT      a.DtCreazione, 
				a.DtCancellazione, 
				a.IdReport, 
				a.IdSezione,
				a.IdSezionePadre,
				a.Utente, 
				a.Descrizione,
				a.TpSezione,
				a.NomeControlloGruppo,
				a.internalSectionCode,
				a.IsMandatory,
				a.IsDefault,
				a.IsBold,
				a.NomeImmagine,
				a.CSSClass,
				a.NoParentBehaviour,
				a.IsSectionPrinting,
				a.NoCheckedByParent,
				(b.livello + 1) as livello,
				--CAST(b.ordinamento + CAST(a.IdSezione AS BINARY(4)) AS VARBINARY(900)) as ordinamento
				CAST(b.ordinamento + CAST(a.ordine AS BINARY(4)) AS VARBINARY(900)) as ordinamento
	FROM		#tabella a 
	JOIN		cte b ON a.IdSezionePadre = b.IdSezione 
)
	SELECT	cast( REPLICATE('|  ', livello) + Descrizione as varchar(50)) as Albero, 		
			livello,			
			IdReport, 
			IdSezione,
			IdSezionePadre, 
			Descrizione, 
			TpSezione,
			NomeControlloGruppo,
			internalSectionCode,
			IsMandatory,
			IsDefault,
			IsBold,
			NomeImmagine,
			CSSClass,
			NoParentBehaviour,
			IsSectionPrinting,
			NoCheckedByParent,
			ordinamento
into #tabella2 FROM cte 
ORDER BY ordinamento
OPTION (MAXRECURSION 5);
select  a.livello, a.IdReport, a.IdSezione, a.IdSezionePadre, a.Descrizione, a.TpSezione,
	    a.NomeControlloGruppo, a.internalSectionCode, a.IsMandatory, a.IsDefault,a.IsBold,a.NomeImmagine, a.CSSClass,
		a.NoParentBehaviour, a.IsSectionPrinting, a.NoCheckedByParent,
		case @flagViewState when 1 then 0 else case isnull(b.IdSezione, 0) when 0 then 0 else 1 end end as SezionePers
		,a.ordinamento--,b.IdSezione as SezionePers2
from #tabella2 a LEFT OUTER JOIN dbo.ReportSezionePers b ON
a.IdSezione = b.IdSezione and b.idreport = @pIdReport
order by a.ordinamento
drop table #tabella
drop table #tabella2
END