using System;
using System.Collections.Generic;
using System.Data;
using PDFGenerator.Presentation.Section;
using PDFGenerator.BusinessLayer.DataSection;
using ContrattoSei.Utilities;
namespace PDFGenerator.BusinessLayer
{
    /// <summary>
    /// Enumeratore della Tipologia di Visualizzazione della Sezione
    /// </summary>
    public enum TipologiaVisualizzazione
    {
        /// <summary>
        /// La sezione viene stampata in modalità torta.
        /// </summary>
        TORTA,

        /// <summary>
        /// La sezione viene stampata in modalità a istogramma.
        /// </summary>
        BARRE,

        /// <summary>
        /// Modalità di default.
        /// </summary>
        SINGOLA,

        /// <summary>
        /// La sezione viene stampata in modalità affiancata.
        /// Ad esempio MacroAssett stampata sulla sinistra e Assett stampata sulla destra.
        /// </summary>
        DOPPIA,

        /// <summary>
        /// Non usata.
        /// </summary>
        NO_CONFRONTO,

        /// <summary>
        /// Non usata.
        /// </summary>
        CONFRONTO,

        /// <summary>
        /// Indica che è stata richiesta l'inclusione della PERFORMANCE sulla sezione.
        /// </summary>
        PERFORMANCE,

        /// <summary>
        /// Indica che è stata richiesta l'inclusione del VERSATONETTO/UTILEPERDITA sulla sezione.
        /// </summary>
        VERSATONETTO_UTILEPERDITA,

        /// <summary>
        /// Indica che è stata richiesto l'inclusione del RENDIMENTO dall'inizio dell'anno.
        /// </summary>
        RENDIMENTO_DA_INIZIOANNO,

        /// <summary>
        /// Indica che è stata richiesto l'inclusione del RENDIMENTO a partire dalla data di sottoscrizione.
        /// </summary>
        RENDIMENTO_DA_SOTTOSCRIZIONE,

        /// <summary>
        /// Indica che nel dettaglio dei prodotti è stato richiesto un raggruppamento per area di bisogno.
        /// </summary>
        RAGGRUPPAMENTO_PER_AREA,


        /// <summary>
        /// Indica che nel dettaglio dei prodotti è stato richiesto un raggruppamento per tipologia di prodotti.
        /// </summary>
        RAGGRUPPAMENTO_PER_TIPOLOGIA,

        /// <summary>
        /// Indica se la sezione deve essere stampata o meno.
        /// </summary>
        SISTAMPA,

        /// <summary>
        /// Indica se escludere o meno il nome del cliente sulla copertina.
        /// </summary>
        NO_NOMECLIENTE_PER_COPERTINA,

        /// <summary>
        /// Indica se includere o meno la nota a fondo pagina riguardante
        /// il dettaglio di Patrimonio non rappresentabile per asset class
        /// </summary>
        NOTA_DETTAGLIO_PATRIM_NONRAPP_ASSET,

        /// <summary>
        /// Indica se includere o meno la nota a fondo pagina riguardante
        /// il dettaglio di Patrimonio non rappresentabile per politica di investimento
        /// </summary>
        NOTA_DETTAGLIO_PATRIM_NONRAPP_POLITICAINV,

        /// <summary>
        /// Indica se includere o meno la nota a fondo pagina riguardante
        /// il dettaglio di Patrimonio non rappresentabile per Calcolo del rendimento
        /// NB. non usato per DIAGNOSI.
        /// </summary>
        NOTA_DETTAGLIO_PATRIM_NONRAPP_CALCOLOREND,

        /// <summary>
        /// Indica che è stata richiesta l'inclusione del RISCHIO sulla sezione.
        /// </summary>
        RISCHIO,

        /// <summary>
        /// Indica che l'area è monitorata ma il controvalore monitorato è pari a 0.
        /// Vincolo impostato non lato database ma lato codice.
        /// </summary>
        AREA_MONITORATA_CON_CONTROVOLORE_0




    }

    /// <summary>
    /// Summary description for SezioneReport
    /// </summary>
    public class SezioneReport : ParagrafoReport
    {
        private Int32 _id;
        private string _codice;
        private string _titolo;
        private string _testoIntroduttivo;
        private string _testoIntroduttivoAlternativo;
        private string _nota;
        private string _notaAlternativa;

        private string _querySql;
        private string LastArea;
        private string _filtrosezione;
        private Int32 _ordine;
        private float _height;
        private List<TipologiaVisualizzazione> _vincolo = new List<TipologiaVisualizzazione>();
        private ParagrafoReport _parent;
        private bool _indicizzato;

        private string _areaprogettocodice;
        private string _areaprogettodescrizione;
        private string _nomeprogetto;
        private bool _areaprogettosottomonitoraggio = false;
        private int _numeroprogettiinvestimento;
        private bool _nuovaPaginaDopo = false;
        private static int _biancoPagina = 0;
        private string _intermediario = string.Empty;

        public string IntermediarioSez
        {
            get
            {
                return _intermediario;
            }
            set
            {
                _intermediario = value;
            }
        }

        public bool NuovaPaginaDopo
        {
            get
            {
                return _nuovaPaginaDopo;
            }
            set
            {
                _nuovaPaginaDopo = value;
            }
        }

        private List<SessionStruct> _tabelleSessione;
        private DataThread _dataThread;

        private Int32? _ordinamentoProgettoPerAreeMonitorate;

        #region Costruttori
        /// <summary>
        /// Costruttore
        /// </summary>
        public SezioneReport(DataThread dataThread, List<SessionStruct> tabelleSessione)
        {
            _indicizzato = true;
            _dataThread = dataThread;
            _tabelleSessione = tabelleSessione;
            DocumentPDF = dataThread.DocumentPDF;
        }


        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="Codice"></param>
        public SezioneReport(DataThread dataThread, List<SessionStruct> tabelleSessione, string Codice)
            : this(dataThread, tabelleSessione)
        {
            _codice = Codice;

        }

        /// <summary>
        /// Costruttore.
        /// </summary>
        /// <param name="Codice">codice della Sezione</param>
        /// <param name="SourceDatarow">Datarow che contiene i campi:
        /// queryOracleSezione,
        /// titoloSezione,
        /// testoSezione,
        /// indicizzatoSezione
        ///  che valorizzano le rispettive proprietà dell'oggetto Sezione.
        /// </param>
        public SezioneReport(DataThread dataThread, List<SessionStruct> tabelleSessione, string Codice, DataRow SourceDatarow)
            : this(dataThread, tabelleSessione, Codice)
        {
            _titolo = SourceDatarow["titoloSezione"].ToString();
            _testoIntroduttivo = SourceDatarow["testoSezione"].ToString();
            _testoIntroduttivoAlternativo = SourceDatarow["testoSezioneAlternativo"] == DBNull.Value ? string.Empty : SourceDatarow["testoSezioneAlternativo"].ToString();
            _nota = SourceDatarow["notaSezione"] == DBNull.Value ? string.Empty : SourceDatarow["notaSezione"].ToString();
            _notaAlternativa = SourceDatarow["notaSezioneAlternativo"] == DBNull.Value ? string.Empty : SourceDatarow["notaSezioneAlternativo"].ToString();
            _querySql = SourceDatarow["querySqlSezione"].ToString();
            _indicizzato = SourceDatarow["indicizzatoSezione"] == DBNull.Value ? false : Convert.ToBoolean(SourceDatarow["indicizzatoSezione"]);
            _nuovaPaginaDopo = SourceDatarow["nuovaPaginaDopo"] == DBNull.Value ? false : Convert.ToBoolean(SourceDatarow["nuovaPaginaDopo"]);
        }
        #endregion

        #region Proprieta

        /// <summary>
        /// Id della Sezione.
        /// </summary>
        public new int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        /// <summary>
        /// Codice della Sezione (S1,S2..S88)
        /// </summary>
        public string Codice
        {
            get { return _codice; }
            set { _codice = value; }
        }

        /// <summary>
        /// Testo introduttivo della Sezione
        /// </summary>
        public new string TestoIntroduttivo
        {
            get { return _testoIntroduttivo; }
            set { _testoIntroduttivo = value; }
        }

        /// <summary>
        /// Imposta o recupera il nome del file .sql contenente la select oracle 
        /// da lanciare nel caso in cui la sezione sia sottoposta a query.  
        /// </summary>
        public new string QuerySql
        {
            get { return _querySql; }
            set { _querySql = value; }
        }

        /// <summary>
        /// Imposta o recupera l'ordine di stampa della sezione.
        /// </summary>
        public new int Ordine
        {
            get { return _ordine; }
            set { _ordine = value; }
        }

        /// <summary>
        /// Imposta o recupera il titolo della Sezione.
        /// </summary>
        public new string Titolo
        {
            get { return _titolo; }
            set { _titolo = value; }
        }

        /// <summary>
        /// Imposta o recupera il testo introduttivo della Sezione
        /// </summary>
        public new string TestoIntroduttivoAlternativo
        {
            get { return _testoIntroduttivoAlternativo; }
            set { _testoIntroduttivoAlternativo = value; }
        }

        /// <summary>
        /// Imposta o recupera la nota della Sezione.
        /// </summary>
        public string Nota
        {
            get { return _nota; }
            set { _nota = value; }
        }

        /// <summary>
        /// Imposta o recupera la nota alternativa della Sezione.
        /// </summary>
        public string NotaAlternativa
        {
            get { return _notaAlternativa; }
            set { _notaAlternativa = value; }
        }

        /// <summary>
        /// Imposta o recupera l'altezza minima della sezione.
        /// E' lo spazio che occupa la sezione sul documento pdf.
        /// </summary>
        public float Height
        {
            get { return _height; }
            set { _height = value; }
        }

        /// <summary>
        /// Restituisce l'oggetto Paragrafo padre dell'oggetto Sezione corrente.
        /// </summary>
        public ParagrafoReport SezioneParent
        {
            get { return _parent; }
            set { _parent = value; }
        }


        /// <summary>
        /// Indica se la sezione dovra essere indicizzata o no.
        /// True se non specificato.
        /// </summary>
        public new bool Indicizzato
        {
            get { return _indicizzato; }
            set { _indicizzato = value; }
        }

        /// <summary>
        /// Imposta o ottiene la lista di Vincoli della Sezione.
        /// </summary>
        public List<TipologiaVisualizzazione> Vincolo
        {
            get { return _vincolo; }
            set { _vincolo = value; }
        }

        /// <summary>
        /// Imposta o ottiene il filtro che viene fatto a livello di Sezione.
        /// Ad esempio per alcune sezione è previsto un filtro a livello di Intermediario.
        /// Se il filtro è impostato la sezione verrà ripetuta per ogni intermediario.
        /// </summary>
        public string FiltroSezione
        {
            get { return _filtrosezione; }
            set { _filtrosezione = value; }
        }

        /// <summary>
        /// Imposta o recupera il codice dell'Area/Progetto. es "Inv","Ext".
        /// </summary>
        public new string AreaProgettoCodice
        {
            get { return _areaprogettocodice; }
            set { _areaprogettocodice = value; }
        }

        /// <summary>
        /// Imposta o recupera la descrizione dell'Area/Progetto. es "Investimento","Extra Rendimento".
        /// </summary>
        public new string AreaProgettoDescrizione
        {
            get { return _areaprogettodescrizione; }
            set { _areaprogettodescrizione = value; }
        }

        /// <summary>
        /// Imposta o recupera la descrizione del nome progetto per l'area di investimento.
        /// </summary>
        public new string NomeProgetto
        {
            get { return _nomeprogetto; }
            set { _nomeprogetto = value; }
        }


        /// <summary>
        /// Indica se l'area/progetto è sottoposta a monitoraggio.
        /// </summary>
        public new bool AreaProgettoSottoMonitoraggio
        {
            get { return _areaprogettosottomonitoraggio; }
            set { _areaprogettosottomonitoraggio = value; }
        }


        /// <summary>
        /// Imposta o recupera il numero totale dei progetti d'investimento.
        /// </summary>
        public new int NumeroProgettiInvestimento
        {
            get { return _numeroprogettiinvestimento; }
            set { _numeroprogettiinvestimento = value; }
        }

        /// <summary>
        /// Valorizzata con l'ordinamento (del progetto cui la sezione appartiene) nel caso ci siano più progetti
        /// con diverso ordinamento nella specifica Area di Monitortaggio.
        /// </summary>
        public new Int32? OrdinamentoProgettoPerAreeMonitorate { get { return _ordinamentoProgettoPerAreeMonitorate; } set { _ordinamentoProgettoPerAreeMonitorate = value; } }
        #endregion


        /// <summary>
        /// Disegna la Sezione.
        /// Carica i dati della sezione attraverso la LoadDataSection.
        /// Se e solo se i dati per la sezione esistono verranno stampate il capitolo e il paragrafo relativo alla sezione e la sezione stessa.
        /// </summary>
        public new void Disegna()
        {
            //float DimensioneTortaChart = 140;
            //float minimumHeight = 0;

            

            if (_filtrosezione.ToLower() == "intermediario")
                _dataThread.Intermediario = _parent.ParagrafoParent.Intermediario;
            else if (_filtrosezione.ToLower() == string.Empty)
                _dataThread.Intermediario = string.Empty;
            DataSectionResult data = LoadDataSection(); // Carica i dati necessari alla Sezione.
            _dataThread.Data = data;

            if (UtilityManager.getAppSetting("bug") != String.Empty)
            {
                foreach (string notsez in @UtilityManager.getAppSetting("bug").ToString().Split(';'))
                    if (notsez.Equals(_codice)) data.Esito = 0;
            }
            

            if (data.Esito > 0)
            {
                _height = LoadHeight(data.Esito); // recupera l'altezza minima necessaria alla sezione per essere stampata sulla pagina.

                if (BloccaStampaPERUlterioriVincoli() == false)
                {
                    StampaCapitolo();
                    StampaParagrafo();
                    StampaSezione();
                }
            }


            // se sto stampando l'ultima sezione, devo richiamare la stampa delle note del document :
            // questo perchè la logica della stampa delle note è stata spostata nel document.addPage, ma per l'ultima pagina questo metodo non è richiamato.

            // cerco qual'è l'ultima sezione da stampare.
            DataRow drLast = _dataThread.Schema.Rows[_dataThread.Schema.Rows.Count - 1];

            if (_codice == drLast["codiceSezione"].ToString())
            {
                _dataThread.DocumentPDF.StampaNote();// stampo le note rimaste da stampare.
                //If the last page is white remove it
                if (_biancoPagina == 1)
                    _dataThread.DocumentPDF.RemoveLastPage(_dataThread.DocumentPDF.CurrentPage - 1);
            }

        }

        /// <summary>
        /// Recupera l'altezza minima necessaria alla sezione per essere stampata sulla pagina.
        /// </summary>
        /// <param name="numeroRigheSezione"></param>
        /// <returns></returns>
        private float LoadHeight(int numeroRigheSezione)
        {
            float altezza = 0;
            float DimensionRow = 23;
            float DimensioneTortaChart = 140;
            switch (_codice)
            {
                case "S26":
                    altezza = (numeroRigheSezione + 1) * DimensionRow + 30;
                    break;
                case "S31":
                    if (_vincolo.Contains(TipologiaVisualizzazione.TORTA))
                        altezza = DimensioneTortaChart;
                    else
                        altezza = DimensionRow * numeroRigheSezione;
                    break;
                case "S32":
                    altezza = DimensioneTortaChart;
                    break;
                case "S43":
                    altezza = 0;
                    break;
                case "S48":
                    altezza = 3 * DimensionRow + 40;
                    break;
                case "S76":
                case "S76BIS":
                    altezza = DimensionRow * 4 + 40;
                    break;
                case "S80":
                    altezza = (DimensionRow * 6 + 50) * 2; // la S80 e la S80BIS vanno stampate sulla stessa pagina
                    break;

                #region S82
                case "S82":
                    //SEZIONE A DIMENSIONE FISSA
                    altezza = DimensionRow * 7 + 40;
                    break;
                #endregion

                #region S82BIS
                case "S82BIS":
                    //SEZIONE A DIMENSIONE FISSA
                    altezza = DimensionRow * 7;
                    break;
                #endregion

                #region S83
                case "S83":
                    //SEZIONE A DIMENSIONE FISSA
                    altezza = DimensionRow * 7;
                    break;
                #endregion

                #region S84
                case "S84":
                    //aggiungo spazio per la nota
                    altezza = 300 + 30;
                    break;
                #endregion

                #region S85
                case "S85":
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        //Almeno devo poter disegnare il grafico più considero uno spazio 20 tra tabella e grafico e 3 righe di tabella (1 riga più header e totale, o 1 riga più header e cambio pagina)
                        altezza = DimensioneTortaChart + 20 + DimensionRow * 2;
                    else
                        //Almeno devo poter disegnare il grafico
                        altezza = DimensioneTortaChart;
                    break;
                #endregion

                #region S86
                case "S86":
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        //Almeno devo poter disegnare il grafico più considero uno spazio 20 tra tabella e grafico e 3 righe di tabella (1 riga più header e totale, o 1 riga più header e cambio pagina)
                        altezza = DimensioneTortaChart + 20 + DimensionRow * 2;
                    else
                        //Almeno devo poter disegnare il grafico
                        altezza = DimensioneTortaChart;
                    break;
                #endregion

                #region S88
                case "S88":
                    altezza = DimensionRow * 2 + 40;
                    break;

                #endregion

                default:
                    altezza = DimensionRow * numeroRigheSezione;
                    break;
            }
            return altezza;
        }

        /// <summary>
        /// Stampa i titoli, sottotitoli e testi introduttivo dei capitoli.
        /// La funzione viene richiamata per ogni sezione che deve essere disegnata, 
        /// sarà la proprietà CheckStampaElemento che indicherà se i testi degli oggetti verranno o meno stampati.
        /// Attraverso il field _parent si ha accesso a tutte le proprietà settate a livello di capitolo.
        /// </summary>
        private void StampaCapitolo()
        {
            CapitoloReport Capitolo = _parent.ParagrafoParent;

            // Stampa il Capitolo.
            if (Capitolo.CheckStampaElemento)
            {
                //missing page break before chapter 8 in DIAGNOSI_CSRMRZ73E31A944M
                //if (Capitolo.Titolo == "Patrimonio finanziario altri Istituti")// && DocumentPDF.checkMargin(300))
                //   DocumentPDF.addPage();

               // if (Capitolo.Titolo == "Patrimonio immobiliare e altro patrimonio" && DocumentPDF.checkMargin(115))
                //    DocumentPDF.addPage();
                
                // if (Capitolo.Titolo == "Patrimonio finanziario" && DocumentPDF.checkMargin(115))
                //    DocumentPDF.addPage();


                //if (Capitolo.Titolo == "Patrimonio immobiliare e altro patrimonio" && DocumentPDF.checkMargin(115))
                //    DocumentPDF.addPage();

                // if (Capitolo.Titolo == "Patrimonio finanziario" && DocumentPDF.checkMargin(115))
                //    DocumentPDF.addPage();



                if (Capitolo.StampaInNuovaPagina)
                    if ((_codice == "S57") || (_codice == "S146")) 
                        DocumentPDF.setPageTitolo(UtilityBusinessLayer.ReplaceVariables(Capitolo.Titolo, _dataThread), true);
                    else
                        DocumentPDF.setPageTitolo(UtilityBusinessLayer.ReplaceVariables(Capitolo.Titolo, _dataThread));



                else
                    if (_codice == "S57")
                        DocumentPDF.setChapterTitolo(UtilityBusinessLayer.ReplaceVariables(Capitolo.Titolo, _dataThread), _height, true);
                    else
                        DocumentPDF.setChapterTitolo(UtilityBusinessLayer.ReplaceVariables(Capitolo.Titolo, _dataThread), _height);




                if (Capitolo.TestoIntroduttivo != string.Empty)
                   
                    // Se è stato selezionato dall'albero il dettaglio dei prodotti raggruppati per area di bisogno,
                    // il testo introduttivo del capitolo da stampare cambia.                    
                    if (_codice == "S43" ||  _codice == "S47" & _vincolo.Contains(TipologiaVisualizzazione.RAGGRUPPAMENTO_PER_AREA) &  _dataThread.ReportType().TipoReport == TipoReport.MONITORAGGIO )
                    {
                        DocumentPDF.setChapterHeader(UtilityBusinessLayer.ReplaceVariables(Capitolo.TestoIntroduttivoAlternativo, _dataThread), 0, 520, 8);
                    }
                    else
                        if (_codice == "S57")
                            DocumentPDF.setChapterHeader(UtilityBusinessLayer.ReplaceVariables(Capitolo.TestoIntroduttivo, _dataThread), true);
                        else
                        {
                            DocumentPDF.setChapterHeader(UtilityBusinessLayer.ReplaceVariables(Capitolo.TestoIntroduttivo, _dataThread), 0, 520, 8);
                            if ((_codice == "S43" || _codice == "S43BIS") && _dataThread.TipoReport.ToUpper().Equals("MONITORAGGIO"))
                            {
                                DocumentPDF.setLastPos(0);
                            }  
                        }
                

                Capitolo.CheckStampaElemento = false;
            }
        }


        /// <summary>
        /// Stampa i titoli, sottotitoli e testi introduttivo dei paragrafi.
        /// La funzione viene richiamata per ogni sezione che deve essere disegnata, 
        /// sarà la proprietà CheckStampaElemento che indicherà se i testi degli oggetti verranno o meno stampati.
        /// Attraverso il field _parent si ha accesso a tutte le proprietà settate a livello di paragrafo.
        /// </summary>
        private void StampaParagrafo()
        {
            ParagrafoReport Paragrafo = _parent;

            // Stampa il Paragrafo
            if (Paragrafo.CheckStampaElemento)
            {
                // se è stato impostato lo SpazioNecessarioSezioneSuccessiva e questo spazio è maggiore 
                // dello spazio disponibile sul documento, viene aggiunta una nuova pagina e il testo verrò scritto a capo.
                if (Paragrafo.SpazioNecessarioSezioneSuccessiva > 0)
                    if (DocumentPDF.checkMargin(Paragrafo.SpazioNecessarioSezioneSuccessiva))
                        DocumentPDF.addPage();

                if (_codice == "S134" || _codice == "S134BIS")
                {
                    if (DocumentPDF.getLastPos() > 200)
                        DocumentPDF.addPage();
                
                }

                if (Paragrafo.Indicizzato)
                {
                    if ((_dataThread.TipoReport.ToUpper().Equals("DIAGNOSI")) && (_codice == "S162"))
                    {
                        DocumentPDF.setSezTitolo(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); //titolo del paragrafo.
                    }
                    else if (_dataThread.TipoReport.ToUpper().Equals("DIAGNOSI"))
                    {
                        DocumentPDF.setSezTitoloDiagnosi(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); //titolo del paragrafo.
                    }
                    else
                    {
                        if (_codice != "S43BIS" && _codice != "S43")
                            DocumentPDF.setSezTitolo(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); //titolo del paragrafo.
                        else
                            DocumentPDF.setSezTitoloWithoutNumber(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); 
                    }
                }
                //else {
                //    if (_codice == "S43BIS" || _codice == "S43")
                //        DocumentPDF.setSezTitoloWithoutNumber(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); //titolo del paragrafo.
                //}


                //switch (_dataThread.TipoReport.ToUpper())
                //{

                //    case "DIAGNOSI":
                //        if (Paragrafo.Indicizzato)
                //        {

                //            DocumentPDF.setSezTitoloDiagnosi(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread)); //titolo del paragrafo.
                //        }
                //        break;
                //    default:
                //        if (((_codice == "S43BIS") || (_codice == "S43")) && (!Paragrafo.Indicizzato))
                //            DocumentPDF.setSezTitoloWithoutNumber(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread));
                //        else if (((_codice != "S43BIS") && (_codice != "S43")) && (Paragrafo.Indicizzato))
                //        {
                //            DocumentPDF.setSezTitolo(UtilityBusinessLayer.ReplaceVariables(Paragrafo.Titolo, _dataThread));
                //        }
                //        break;
                //}
                
                if (!string.IsNullOrEmpty(Paragrafo.SottoTitolo) && Paragrafo.SottoTitolo.Trim().Length > 0)
                    DocumentPDF.setTitolo(UtilityBusinessLayer.ReplaceVariables(Paragrafo.SottoTitolo, _dataThread));//sotto titolo del paragrafo.usato per i progetti di investimento

                //testo introduttivo
                DocumentPDF.setChapterHeader(UtilityBusinessLayer.ReplaceVariables(Paragrafo.TestoIntroduttivo, _dataThread));


                Paragrafo.CheckStampaElemento = false;

            }
        }



        /// <summary>
        /// Carica i dati.
        /// </summary>
        /// <returns></returns>
        private DataSectionResult LoadDataSection()
        {
            DataSectionResult dsResult = new DataSectionResult();
            bool getDataSection = true;
            IDataSection sezione = null;
            //Report objReport = _parent.ParagrafoParent.CapitoloParent;
            DocumentPDF objPDF = DocumentPDF;
            
            switch ("DS" + _codice)
            {
                #region COPERTINA INDICE GLOSSARIO
                case "DSCOPERTINA":
                    getDataSection = false;
                    if (_vincolo.Contains(TipologiaVisualizzazione.NO_NOMECLIENTE_PER_COPERTINA))
                        objPDF.creaCopertina(_dataThread.ReportType().Descrizione, false);
                    else
                        objPDF.creaCopertina(_dataThread.ReportType().Descrizione, true);
                    break;

                case "DSINDICE":
                    getDataSection = false;
                    objPDF.creaIndice();
                    break;

                case "DSGLOSSARIO":
                    getDataSection = false;
                    objPDF.Glossario = true;
                    break;
                #endregion

                #region DSS1
                case "DSS1":
                    sezione = new DSS1PatrimonioComplessivo();
                    break;
                #endregion

                #region DSS2
                case "DSS2":
                    if (_dataThread.Patrimoniobancafideuramctv > 0 & _dataThread.Patrimonioterzictv > 0)
                        sezione = new DSS2PatrimonioFinanziario();
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS6
                case "DSS6":
                    if (_dataThread.Patrimoniobancafideuramctv > 0 & _dataThread.Patrimonioterzictv > 0)
                        sezione = new DSS6PatrimonioFinanziario();
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS10
                case "DSS10":
                    sezione = new DSS10PatrimonioFinanziario();
                    break;
                #endregion

                #region DSS18
                case "DSS18":
                    sezione = new DSS18PatrimonioFinanziarioRischio();
                    if (_dataThread.Patrimoniocomplessivototalectv == _dataThread.Patrimoniobancafideuramctv)
                        ((DSS18PatrimonioFinanziarioRischio)sezione).onlyBF = true;
                    break;
                #endregion

                #region DSS23
                case "DSS23":

                    sezione = new DSS23GradoCopertura();
                    break;
                #endregion

                #region DSS25
                case "DSS25":
                    sezione = new DS25Anagrafica();
                    break;
                #endregion

                #region DSS26
                case "DSS26":
                    sezione = new DSS26PatrimonioImmobiliare();
                    break;
                #endregion

                #region DSS27
                case "DSS27":
                    sezione = new DSS27AltroPatrimonio();
                    break;
                #endregion

                #region DSS31
                case "DSS31":
                    if (_dataThread.NumeroIntermediari > 1)
                        sezione = new DSS31PatrimonioFinanziario();
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS32
                case "DSS32":
                    sezione = new DSS32PatrimonioFinanziario();
                    break;
                #endregion

                #region DSS36
                case "DSS36":
                    //sezione = new DSS36ProfiloRischio();
                    // Marian
                    getDataSection = false;
                    //sezione = new DSS95ProfiloDiRischio();
                    break;
                #endregion

                #region DSS37
                case "DSS37":
                    sezione = new DSS37PiramideModello();
                    break;
                #endregion

                #region DSS42
                case "DSS42":
                    sezione = new DSS42RischioDiversificazione();
                    break;
                #endregion


                #region DSS43
                case "DSS43":
                    sezione = new DSS43ProdottiAreeBisogno();
                    //if (_dataThread.DatiSezione.Tipo == "singleArea")
                    //    _dataThread.SingleArea = true;
                    //else
                    //    _dataThread.SingleArea = false;
                    break;
                #endregion

                #region DSS43BIS
                case "DSS43BIS":
                    // Per le aree/progetto che non sono oggetto di monitoraggio stamperò la S43 anziché la S43BIS
                    if (_areaprogettosottomonitoraggio)
                    {
                        sezione = new DSS43BISProdottiAreeBisogno();
                        ((DSS43BISProdottiAreeBisogno)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                        _dataThread.Area = _areaprogettocodice;
                        _dataThread.Progetto = _nomeprogetto;
                    }
                    else
                    {
                        sezione = new DSS43ProdottiAreeBisogno();
                        _querySql = "[C6MartPeriodico].PL_S43DettaglioProdottiBF";
                        _dataThread.Area = _areaprogettocodice;
                        _dataThread.Progetto = _nomeprogetto;
                        if (_areaprogettocodice.ToUpper() == "CC")
                          _vincolo.Add(TipologiaVisualizzazione.SISTAMPA);
                    }
                    break;
                #endregion

                #region DSS47
                   case "DSS47":
                    if ( _dataThread.ReportType().TipoReport == TipoReport.DIAGNOSI)
                        getDataSection = false;     
                    sezione = new DSS47ContoCorrenteBF();
                    break;
                #endregion

                #region DSS48
                case "DSS48":
                    sezione = new DSS48DettaglioProdotti();
                    break;
                #endregion

                #region DSS49
                case "DSS49":
                    sezione = new DSS49PolizzeAltriIstituti();
                    break;
                #endregion

                #region DSS50
                case "DSS50":
                    sezione = new DSS50FondiAltriIstituti();
                    break;
                #endregion

                #region DSS51
                case "DSS51":
                    sezione = new DSS51ContoCorrenteAI();
                    break;
                #endregion

                #region DSS56
                case "DSS56":
                    sezione = new DSS56PatrimonioBFAreeBisogno();
                    break;
                #endregion

                #region DSS57
                case "DSS57":
                    sezione = new DSS57ConfrontoPiramidi();
                    dsResult = sezione.getDataSection(_tabelleSessione, _querySql, _dataThread);
                    if (dsResult.Esito == 0)
                    {
                        //NEL CASO IN CUI NON CI SONO I DATI PER LA S57
                        sezione = new DSS56PatrimonioBFAreeBisogno();
                        _querySql = "[C6Mart].PL_S56PatrimonioBFAreeBisogno";
                    }
                    else
                    {
                        getDataSection = false;
                    }

                    break;
                #endregion

                #region DSS57BIS
                case "DSS57BIS":
                    sezione = new DSS57BISConfrontoPiramideAttualeModello();

                    break;
                #endregion

                #region DSS75
                case "DSS75":
                    sezione = new DSS75GradoCopertura();
                    break;
                #endregion

                #region DSS76
                case "DSS76":
                    sezione = new DSS76PatrimonioNonRappresentabileAssettClass();
                    break;
                #endregion

                #region DSS76BIS
                case "DSS76BIS":
                    DSS76PatrimonioNonRappresentabileAssettClass s76BIS = new DSS76PatrimonioNonRappresentabileAssettClass();
                    s76BIS.modalitaRappresentazione = DSS76PatrimonioNonRappresentabileAssettClass.EmodalitaRappresentazione.alternativa;

                    if (_dataThread.TipoReport.ToUpper() == "MONITORAGGIO")
                    {
                        // per il report di monitoraggio fase 2 le sueguenti le 2 proprietà vanno ipostate a true                           
                        s76BIS.FlagS86 = true;
                        s76BIS.FlagS86BIS = true;
                    }
                    sezione = new DSS76PatrimonioNonRappresentabileAssettClass();
                    sezione = s76BIS;

                    break;
                #endregion

                #region DSS80
                case "DSS80":
                    sezione = new DSS80EvoluzionePiramideBisogni();
                    break;
                #endregion

                #region DSS80ALT
                case "DSS80ALT":
                    sezione = new DSS80Alternativa();
                    break;
                #endregion

                #region DSS80BIS
                case "DSS80BIS":
                    sezione = new DSS80BISEvoluzioneRischio();
                    break;
                #endregion

                #region DSS82
                case "DSS82":
                    if (_areaprogettocodice.ToLower() != "inv")
                    {
                        sezione = new DSS82DatiSintetici();
                        _dataThread.Area = _areaprogettocodice;
                        _dataThread.Progetto = string.Empty;
                        ((DSS82DatiSintetici)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    }
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS82BIS
                case "DSS82BIS":
                    if (_areaprogettocodice.ToLower() == "inv")
                    {
                        sezione = new DSS82DatiSinteticiBIS();
                        _dataThread.Area = _areaprogettocodice;
                        _dataThread.Progetto = _nomeprogetto;
                        ((DSS82DatiSinteticiBIS)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    }
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS83
                case "DSS83":
                    //sezione = new DSS83PerformanceArea();

                    _dataThread.Area = _areaprogettocodice;
                    _dataThread.Progetto = _nomeprogetto;

                    DataSectionResult dsResultS83 = new DataSectionResult();
                    DSS83PerformanceArea sezioneS83 = new DSS83PerformanceArea();
                    ((DSS83PerformanceArea)sezioneS83).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;

                    dsResultS83 = sezioneS83.getDataSection(_tabelleSessione, "[C6MartPeriodico].[PL_S83DatiRendimento]", _dataThread);

                    if (dsResultS83.Esito > 0)
                    {
                        if (dsResultS83.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() == "0,00 €")
                            _vincolo.Add(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                            
                        else
                            if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                    }
                    else
                    {
                        if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                            _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                    }

                    return dsResultS83;
                  //  break;
                #endregion

                #region DSS84
                case "DSS84":
                    if (VerificaPresenzaS83()) // stampo la S84 solo se la S83 viene stampata
                    {
                        sezione = new DSS84ControvaloreRisorseApportate();
                        ((DSS84ControvaloreRisorseApportate)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    }
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS85
                case "DSS85":
                    //if (VerificaPresenzaS83() || VerificaPresenzaS134BIS()) // stampo la S85 solo se la S83 viene stampata
                    //dsResult.Esito
                    //DataSetS134BIS set = (DataSetS134BIS)dsResult.DatiSezione;
                    if (VerificaPresenzaS134())  
                    {
                        sezione = new DSS85RendimentoPortafoglio();
                        ((DSS85RendimentoPortafoglio)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    }
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS86
                case "DSS86":
                    sezione = new DSS86MacroAssetClass();
                    ((DSS86MacroAssetClass)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    break;
                #endregion

                #region DSS88
                case "DSS88":
                    sezione = new DSS88PatrimonioNonRappresentabileCalcoloRendimento();
                    break;
                #endregion

                #region DSS93
                case "DSS93":
                //  sezione = new DSS93ControvaloreMonitoraggioPatrimonio();
                    getDataSection = false;
                    break;
                #endregion

                #region DSS94
                case "DSS94":
                    //sezione = new DSS94RischioMonitoraggioPatrimonio();
                    getDataSection = false;
                    sezione = new DSS95ProfiloDiRischio();
                    break;
                #endregion

                #region DSS95
                case "DSS95":
                    //V remove when it DSS will be implemented
                    sezione = new DSS95ProfiloDiRischio();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS96
                case "DSS96":
                    sezione = new DSS96RischioMercatoRischioCredito();

                    break;
                #endregion

                #region DSS96BIS
                case "DSS96BIS":
                    sezione = new DSS96RischioMercatoRischioCredito();
                    break;
                #endregion

                #region DSS102
                case "DSS102":
                    //V remove when it DSS will be implemented          
                    sezione = new DSS102DistribuzioneRischioCredito();
                    _dataThread.Intermediario = IntermediarioSez;
                    //getDataSection = false;
                    break;
                #endregion

                #region DSS103
                case "DSS103":
                    sezione = new DSS103TabellaEmittenti();
                    _dataThread.Intermediario = IntermediarioSez;
                    break;
                #endregion

                #region DSS128
                case "DSS128":
                    //V remove when it DSS will be implemented
                    sezione = new DSS128ProfiliRischioAdeguatezza();
                    //    DSS128ProfiliRischioAdeguatezza s128 = new DSS128ProfiliRischioAdeguatezza();
                    //    dsResult = s128.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS129
                case "DSS129":
                    //V remove when it DSS will be implemented
                    sezione = new DSS129Patrimonio();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS130
                case "DSS130":
                    //V remove when it DSS will be implemented
                    sezione = new DSS130PrincipaliPosizioni();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS131
                case "DSS131":
                    //V remove when it DSS will be implemented
                    sezione = new DSS131ContributoAlRischio();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS132
                case "DSS132":
                    //V remove when it DSS will be implemented
                    sezione = new DSS132ProfiloRischioAdeguatezza();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS133
                case "DSS133":
                    //V remove when it DSS will be implemented
                    sezione = new DSS133AreeBisognoPrincProd();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion


                #region DSS133BIS
                case "DSS133BIS":
                    //V remove when it DSS will be implemented
                    sezione = new DSS133BISPrincipaliProdotti();
                    //    DSS95ProfiloRischio s95 = new DSS95ProfiloRischio();
                    //    dsResult = s95.getDataSection(_parametriReport.DataSectionParameter);
                    break;
                #endregion

                #region DSS134
                case "DSS134":
                    //V remove when it DSS will be implemented
                    //sezione = new DSS134MonitoraggioLiquidita();//DSS134MonitoraggioLiquidita();
                    if ((_areaprogettocodice.ToLower() != "inv") && (_areaprogettocodice.ToLower() != "ris"))
                    {

                    // if (_areaprogettocodice.ToLower() == "inv")
                    //{

                    //_dataThread.Area = _areaprogettocodice;
                    //_dataThread.Progetto = _nomeprogetto;
                    //}

                     _dataThread.Area = _areaprogettocodice;

                    DSS134MonitoraggioLiquidita sezioneS134 = new DSS134MonitoraggioLiquidita();
                    ((DSS134MonitoraggioLiquidita)sezioneS134).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                    
                    //else
                    //    getDataSection = false;

                    DataSectionResult dsResultS134 = new DataSectionResult();
                    dsResultS134 = sezioneS134.getDataSection(_tabelleSessione, _querySql, _dataThread);

                    if (dsResultS134.Esito > 0)
                    {
                        if (dsResultS134.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() == "0,00 €")
                            {
                            _vincolo.Add(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                           // dsResultS134.Esito = 0;
                            }
                        else
                            if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                    }
                    else
                    {
                        if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                            _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                    }
                    

                    return dsResultS134;
                    }
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS135
                case "DSS135":
                    //V remove when it DSS will be implemented
                    
                        sezione = new DSS135MonitoraggioInvestimento();
                        if ((_areaprogettocodice.ToLower() != "inv") && (_areaprogettocodice.ToLower() != "ris"))
                        {

                            if (VerificaPresenzaS134()) // stampo la S84 solo se la S83 viene stampata
                            {
                                sezione = new DSS135MonitoraggioInvestimento();
                                ((DSS135MonitoraggioInvestimento)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                            }
                            else
                                getDataSection = false;
                        }
                        else
                            getDataSection = false;
                    break;
                #endregion

                #region DSS134BIS
                case "DSS134BIS":
                    if (_areaprogettocodice.ToLower() == "inv")
                    {

                        _dataThread.Area = _areaprogettocodice;
                        _dataThread.Progetto = _nomeprogetto;
                    }
                    _dataThread.Area = _areaprogettocodice;
                    sezione = new DSS134BISMonitoraggioLiqInv();
                    DSS134BISMonitoraggioLiqInv sezioneGraficLeft = new DSS134BISMonitoraggioLiqInv();
                    if ((_areaprogettocodice.ToLower() == "inv") || (_areaprogettocodice.ToLower() == "ris"))
                    {
                        ((DSS134BISMonitoraggioLiqInv)sezioneGraficLeft).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                        //dsResult = sezioneGraficLeft.getDataSectionGraficLeft(_tabelleSessione, "[C6MartPeriodico].PL_MP_S134MonitoraggioLiquidita", _dataThread);
                        dsResult = sezioneGraficLeft.getDataSection(_tabelleSessione, _querySql, _dataThread);

                        if (dsResult.Esito < 5)
                        {
                            sezione = new DSS134MonitoraggioLiquidita();
                            _codice = "S134";
                            _querySql = "[C6MartPeriodico].PL_MP_S134MonitoraggioLiquidita";
                            ((DSS134MonitoraggioLiquidita)sezione).OrdinamentoProgettoPerAreeMonitorate = _ordinamentoProgettoPerAreeMonitorate;
                            dsResult = sezione.getDataSection(_tabelleSessione, _querySql, _dataThread);

                            if (dsResult.Esito > 0)
                            {
                                if (dsResult.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() == "0,00 €")
                                {
                                    _vincolo.Add(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                                }
                                else
                                    if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                        _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                            }
                            else
                            {
                                if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                    _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                            }
                        }
                            // FC 11/07/2014 aggiunto controllo per vincolo area monitorata senza prodotti che partecipano al calcolo dei rendimenti
                            //Start
                        else

                        {
                            if (dsResult.Esito > 0)
                            {
                                if (dsResult.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() == "0,00 €")
                                {
                                    _vincolo.Add(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                                }
                                else
                                    if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                        _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                            }
                            else
                            {
                                if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                                    _vincolo.Remove(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0);
                            }
                        }
                        // End
                        return dsResult;
                        
                        }
                    else
                        getDataSection = false;
                   
                    break;
                #endregion

                #region DSS137
                case "DSS137":
                    //V remove when it DSS will be implemented
                    sezione = new DSS137Bonus();
                    break;
                #endregion

                #region DSS138
                case "DSS138":
                    //V remove when it DSS will be implemented
                    sezione = new DSS138Proventi();
                    break;
                #endregion

                #region DSS139
                case "DSS139":
                    //V remove when it DSS will be implemented
                    sezione = new DSS139Scadenze();
                    break;
                #endregion

                #region DSS140
                case "DSS140":
                    //V remove when it DSS will be implemented
                    sezione = new DSS140AnalisiRisparmioCharts();
                    break;
                #endregion

                #region DSS141
                case "DSS141":
                    //V remove when it DSS will be implemented
                    sezione = new DSS141AnalisiRisparmioTable();
                    break;
                #endregion

                #region DSS142
                case "DSS142":
                    //V remove when it DSS will be implemented
                    sezione = new DSS142DistibuzionePerRating();
                    break;
                #endregion

                #region DSS143
                case "DSS143":
                    //V remove when it DSS will be implemented
                    sezione = new DSS143DistibuzionePerEmittente();
                    break;
                #endregion

                #region DSS144
                case "DSS144":
                    //V remove when it DSS will be implemented
                    sezione = new DSS144DistibuzionePerScadenze();
                    break;
                #endregion

                #region DSS145
                case "DSS145":
                    //V remove when it DSS will be implemented
                    sezione = new DSS145DistibuzionePerTassoRendimento();
                    break;
                #endregion

                #region DSS146
                case "DSS146":
                    //V remove when it DSS will be implemented
                    sezione = new DSS146RischioDiversificazione();
                    break;
                #endregion

                #region DSS147
                case "DSS147":
                    //V remove when it DSS will be implemented
                    sezione = new DSS147SintesiValute();
                    break;
                #endregion

                #region DSS148
                case "DSS148":
                    //V remove when it DSS will be implemented
                    sezione = new DSS148DistribuzioneAssetClass();
                    break;
                #endregion

                #region DSS149
                case "DSS149":
                    //V remove when it DSS will be implemented
                    sezione = new DSS149DettaglioProdottiAffluent();
                    break;
                #endregion

                #region DSS150
                case "DSS150":
                    //V remove when it DSS will be implemented
                    sezione = new DSS150Anagrafica();
                    break;
                #endregion

                #region DSS151
                case "DSS151":
                    //V remove when it DSS will be implemented
                    sezione = new DSS151ProfiloDiRischio();
                    break;
                #endregion

                #region DSS152
                case "DSS152":
                    //V remove when it DSS will be implemented
                    sezione = new DSS152PatrimonioComplessivo();
                    break;
                #endregion

                #region DSS153
                case "DSS153":
                    if (_dataThread.Patrimoniobancafideuramctv > 0 & _dataThread.Patrimonioterzictv > 0)
                        sezione = new DSS153PatrimonioFinanziario();
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS154
                case "DSS154":
                    if (_dataThread.Patrimoniobancafideuramctv > 0 & _dataThread.Patrimonioterzictv > 0)
                        sezione = new DSS154PatrimonioFinanziario();
                    else
                        getDataSection = false;
                    break;
                #endregion

                #region DSS155
                case "DSS155":
                    sezione = new DSS155PatrimonioImmobiliare();
                    break;
                #endregion

                #region DSS156
                case "DSS156":
                    sezione = new DSS156AltroPatrimonio();
                    break;
                #endregion

                #region DSS157
                case "DSS157":
                    sezione = new DSS157ConfrontoPiramideAttualeModello();

                    break;
                #endregion

                #region DSS158
                case "DSS158":
                    //V remove when it DSS will be implemented
                    sezione = new DSS158PiramideModello();
                    break;
                #endregion

                #region DSS159
                case "DSS159":
                    //V remove when it DSS will be implemented
                    sezione = new DSS159PatrimonioFinanziario();
                    break;
                #endregion

                #region DSS160
                case "DSS160":
                    sezione = new DSS160ProdottiAreeBisogno();
                    //if (_dataThread.DatiSezione.Tipo == "singleArea")
                    //    _dataThread.SingleArea = true;
                    //else
                    //    _dataThread.SingleArea = false;
                    break;
                #endregion

                #region DSS162
                case "DSS162":
                    sezione = new DSS162DettaglioProdotti();
                    break;
                #endregion

                #region DSS163
                case "DSS163":
                    sezione = new DSS163PatrimonioFinanziario();
                    break;
                #endregion

                #region DSS164
                case "DSS164":
                    sezione = new DSS164PolizzeAltriIstituti();
                    break;
                #endregion

                #region DSS165
                case "DSS165":
                    sezione = new DSS165FondiAltriIstituti();
                    break;
                #endregion

                #region DSS166
                case "DSS166":
                    sezione = new DSS166ContoCorrenteAI();
                    break;
                #endregion

                #region DSS167
                case "DSS167":
                    //V remove when it DSS will be implemented          
                    sezione = new DSS167DistribuzioneRischioCredito();
                    _dataThread.Intermediario = IntermediarioSez;
                    //getDataSection = false;
                    break;
                #endregion

                #region DSS168
                case "DSS168":
                    sezione = new DSS168TabellaEmittenti();
                    _dataThread.Intermediario = IntermediarioSez;
                    break;
                #endregion

                #region DSS169
                case "DSS169":
                    sezione = new DSS169RischioMercatoRischioCredito();

                    break;
                #endregion

                #region DSS170
                case "DSS170":
                    sezione = new DSS170RischioDiversificazione();
                    break;
                #endregion

                #region DSS171
                case "DSS171":
                    sezione = new DSS171PatrimonioNonRappresentabileAssettClass();
                    break;
                #endregion



                #region DSS331
                case "DSS331":
                    //V remove when it DSS will be implemented          
                    sezione = new DSS331AreeBisogno();
                   
                    //getDataSection = false;
                    break;
                #endregion


                #region DSS332
                case "DSS332":
                
                    
                        sezione = new DSS332FviCS80();
                    
                    break;
                    //V remove when it DSS will be implemented          
                    //sezione = new DSS332FviCS80();

                    ////getDataSection = false;
                    //sezione = new DSS332FviCS80_PARTE2();
                    //break;
                #endregion


                #region DSS333
                case "DSS333":
                    //V remove when it DSS will be implemented          
                    //sezione = new DSS333Fonditalia80(); DSS333Interfund80();
                    sezione = new DSS333Fonditalia80();
                  
                    //getDataSection = false;
                    break;
                #endregion

                #region DSS334
                case "DSS334":
                    //V remove when it DSS will be implemented          
                    //sezione = new DSS334Interfund80();
                    sezione = new DSS334CrescitaProt80();
                    //getDataSection = false;
                    break;
                #endregion


                default:
                    //return false;
                    break;
            }


            try
            {

                foreach (string notsez in @UtilityManager.getAppSetting("bug").ToString().Split(';'))
                    if (notsez.Equals(_codice)) getDataSection = false;
            }
            catch { }
            

            if (getDataSection)
                dsResult = sezione.getDataSection(_tabelleSessione, _querySql, _dataThread);

            return dsResult;
        }

        /// <summary>
        /// Verifica se la S83 contiene dati e se il controvalore monitorato è diverso da 0
        /// La presenza della S84 e S85 sono vincolate al fatto che la S83 deve essere stata stampata.
        /// </summary>
        private bool VerificaPresenzaS83()
        {
            DataSectionResult dsResultS83 = new DataSectionResult();
            DSS83PerformanceArea sezioneS83 = new DSS83PerformanceArea();
            _dataThread.Area = _areaprogettocodice;
            _dataThread.Progetto = _nomeprogetto;
            dsResultS83 = sezioneS83.getDataSection(_tabelleSessione, "[C6MartPeriodico].[PL_S83DatiRendimento]", _dataThread);

            if (dsResultS83.Esito > 0)
                if (dsResultS83.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() != "0,00 €")
                    return true;
                else
                    return false;
            else
                return false;

        }

        private bool VerificaPresenzaS134()
        {
            DataSectionResult dsResultS134 = new DataSectionResult();
            DSS134MonitoraggioLiquidita sezioneS134 = new DSS134MonitoraggioLiquidita();
            _dataThread.Area = _areaprogettocodice;
            _dataThread.Progetto = _nomeprogetto;
            dsResultS134 = sezioneS134.getDataSection(_tabelleSessione, "[C6MartPeriodico].[PL_MP_S134MonitoraggioLiquidita]", _dataThread);

            if (dsResultS134.Esito > 0)
                if (dsResultS134.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() != "0,00 €")
                    return true;
                else
                    return false;
            else
                return false;

        }

        private bool VerificaPresenzaS134BIS()
        {
            DataSectionResult dsResultS134BIS = new DataSectionResult();
            DSS134MonitoraggioLiquidita sezioneS134 = new DSS134MonitoraggioLiquidita();
            _dataThread.Area = _areaprogettocodice;
            _dataThread.Progetto = _nomeprogetto;
            dsResultS134BIS = sezioneS134.getDataSection(_tabelleSessione, "[C6MartPeriodico].[PL_MP_S134BISMonitoraggioLiqInv]", _dataThread);

            if (dsResultS134BIS.Esito > 0)
                //if (dsResultS134.DatiSezione.Tables["Monitoraggio"].Rows[0]["Valore"].ToString().Trim() != "0,00 €")
                    return true;
                //else
                //    return false;
            else
                return false;

        }


        /// <summary>
        /// Disegna la Sezione.
        /// Rimpiazza il loadSection.
        /// </summary>
        /// <returns></returns>
        private void StampaSezione()
        {
            _dataThread.SezioneReport = this;
            
            switch (_codice)
            {
                #region S1
                case "S1":
                    //_dataThread.Data.DatiSezione.setCodiceRete(_dataThread.Rete);
                    S1 sezione1 = new S1();

                    //sezione1.setTitolo(_dataThread.DatiSezione.Titolo);
                    //this.t
                    sezione1.writeSezione(_dataThread);
                    break;
                #endregion

                #region S2
                case "S2":
                    S2 sezione2 = new S2();
                    //sezione2.setTitolo(_dataThread.DatiSezione.Titolo);
                    //if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        sezione2.writeSezioneCombo(_dataThread);
                    else
                        sezione2.writeSezione(_dataThread);
                    break;
                #endregion

                #region S6
                case "S6":
                    S6 sezione6 = new S6();
                    if (_vincolo.Contains(TipologiaVisualizzazione.TORTA))
                        sezione6.writeSezione(_dataThread);
                    //else
                    //    sezione6.writeSezioneIsto(_dataThread);
                    break;
                #endregion

                #region S10
                case "S10":
                    S10 sezione10 = new S10();
                    //sezione10.setTitolo(_dataThread.DatiSezione.Titolo);
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        sezione10.writeSezioneCombo(_dataThread);
                    else
                        sezione10.writeSezione(_dataThread);
                    break;
                #endregion

                #region S18
                case "S18":

                    S18 sezione18 = new S18();
                    sezione18.setLegend();
                    sezione18.setIndice();
                    //sezione18.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione18.writeSezione(_dataThread);
                    break;
                #endregion

                #region S23
                case "S23":
                    S23 sezione23 = new S23();
                    //sezione23.setTitolo(_dataThread.DatiSezione.Titolo);
                    if (_dataThread.profiloIsAct)
                        sezione23.writeSezione(_dataThread);
                    else
                        sezione23.writeSezioneSenzaProfilo(_dataThread);
                    break;
                #endregion

                #region S25
                case "S25":
                    //if (!_dataThread.modalitàAnonima)
                    //{
                    S25 sezione25 = new S25();
                    //sezione25.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione25.writeSezione(_dataThread);
                    //}
                    break;
                #endregion

                #region S26
                case "S26":
                    S26 sezione26 = new S26();
                    //sezione26.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione26.writeSezione(_dataThread);
                    break;
                #endregion

                #region S27
                case "S27":
                    S27 sezione27 = new S27();
                    //sezione27.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione27.writeSezione(_dataThread);
                    break;
                #endregion

                #region S31
                case "S31":
                    S31 sezione31 = new S31();
                    //sezione31.setTitolo(_dataThread.DatiSezione.Titolo);
                    if (_vincolo.Contains(TipologiaVisualizzazione.TORTA))
                        sezione31.writeSezioneTorta(_dataThread);
                    else
                        sezione31.writeSezione(_dataThread);
                    break;
                #endregion

                #region S32
                case "S32":
                    S32 sezione32 = new S32();
                    //sezione32.setTitolo(_dataThread.DatiSezione.Titolo);
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        sezione32.writeSezioneCombo(_dataThread);
                    else
                        sezione32.writeSezione(_dataThread);
                    break;
                #endregion

                #region S36
                case "S36":
                    //S36 sezione36 = new S36();
                    //sezione36.writeSezione(_dataThread);
                    // Marian
                    S95 sezione95 = new S95();
                    if (_dataThread.profiloIsAct)
                        sezione95.writeSezione(_dataThread);
                    break;
                #endregion

                #region S37
                case "S37":
                    S37 sezione37 = new S37();
                    //sezione37.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione37.writeSezione(_dataThread);
                    break;
                #endregion

                #region S42
                case "S42":
                    S42 sezione42 = new S42();
                    ////sezione37.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione42.TestoIntroduttivo = TestoIntroduttivo;
                    sezione42.TestoTitolo = Titolo;
                    //sezione42.setTitolo("Set titolo");
                    sezione42.writeSezione(_dataThread);

                    break;
                #endregion

                #region S43
                case "S43":
                    S43 sezione43 = new S43();
                    sezione43.writeSezione(_dataThread);
                    break;
                #endregion

                #region S43BIS
                case "S43BIS":

                    // Per le aree/progetto che non sono oggetto di monitoraggio stamperò la S43 anziché la S43BIS
                    if (_areaprogettosottomonitoraggio)
                    {
                        S43BIS sezioneS43BIS = new S43BIS();
                        sezioneS43BIS.VersatoNetto_UtilePerdita = false;
                        sezioneS43BIS.setTitolo(_titolo);
                        sezioneS43BIS.Area = _areaprogettocodice;
                        sezioneS43BIS.Progetto = _nomeprogetto;
                        sezioneS43BIS.writeSezione(_dataThread);
                    }
                    else
                    {
                        S43 sezione43AreaProgettoNonMonitorata = new S43();
                        //sezione43AreaProgettoNonMonitorata.TitoloSezione = _titolo;
                        sezione43AreaProgettoNonMonitorata.Area = _areaprogettocodice;
                        sezione43AreaProgettoNonMonitorata.Progetto = _nomeprogetto;
                        //_dataThread.Area = _areaprogettocodice;
                        //_dataThread.Progetto = _nomeprogetto;
                        sezione43AreaProgettoNonMonitorata.Area = _areaprogettocodice;
                        sezione43AreaProgettoNonMonitorata.Progetto = _nomeprogetto;
                        sezione43AreaProgettoNonMonitorata.OrdinamentoProgetto =_ordinamentoProgettoPerAreeMonitorate.ToString();

                        if (_areaprogettocodice.ToLower() == "cc")
                        {
                            if (_areaprogettocodice.ToLower() != LastArea)
                            {
                                sezione43AreaProgettoNonMonitorata.MostraTitoloSezione = false;
                                LastArea = _areaprogettocodice.ToLower();
                                sezione43AreaProgettoNonMonitorata.writeSezione(_dataThread);
                                NuovaPaginaDopo = false;
                            }
                        }
                        else
                        {
                            if (_areaprogettocodice.ToLower() == "na")
                                sezione43AreaProgettoNonMonitorata.MostraTitoloSezione = false;

                            sezione43AreaProgettoNonMonitorata.writeSezione(_dataThread);
                        }

                    }
                    break;
                #endregion

                #region S47
                case "S47":
                    S47 sezione47 = new S47();
                    //sezione47.setTitolo(_dataThread.DatiSezione.Titolo);
                     if ( _dataThread.ReportType().TipoReport != TipoReport.DIAGNOSI)
                     sezione47.writeSezione(_dataThread);
                    break;
                #endregion

                #region S48
                case "S48":

                    S48 sezione48 = new S48();
                    //sezione48.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione48.writeSezione(_dataThread);
                    break;
                #endregion

                #region S49
                case "S49":

                    S49 sezione49 = new S49();
                    //sezione49.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione49.writeSezione(_dataThread);
                    break;
                #endregion

                #region S50
                case "S50":

                    S50 sezione50 = new S50();
                    //sezione50.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione50.writeSezione(_dataThread);
                    break;
                #endregion

                #region S51
                case "S51":

                    S51 sezione51 = new S51();
                    //sezione51.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione51.writeSezione(_dataThread);
                    break;
                #endregion

                #region S56
                case "S56":

                    S56 sezione56 = new S56();
                    //sezione56.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione56.writeSezione(_dataThread);
                    break;
                #endregion

                #region S57
                case "S57":
                    DataSetS57 ds57 = new DataSetS57();
                    if (_dataThread.Data.DatiSezione.GetType() == ds57.GetType())
                    {
                        S57 sezione57 = new S57();
                        //sezione57.setTitolo(_dataThread.DatiSezione.Titolo);
                        sezione57.writeSezione(_dataThread);
                    }
                    else
                    {
                        //NEL CASO IN CUI NON CI SONO I DATI PER LA S57

                        sezione56 = new S56();
                        //sezione56.setTitolo("Piramide attuale con rischio relativo");
                        sezione56.writeSezione(_dataThread);
                    }
                    break;
                #endregion

                #region S57BIS
                case "S57BIS":
                    S57BIS sezione57BIS = new S57BIS();
                    sezione57BIS.TestoTitolo = _titolo;
                    sezione57BIS.TestoIntroduttivo = _testoIntroduttivo;
                    sezione57BIS.writeSezione(_dataThread);

                    break;
                #endregion

                #region S75
                case "S75":
                    S75 sezione75 = new S75();
                    //sezione75.setTitolo(_dataThread.DatiSezione.Titolo);

                    //if (_dataThread.DatiSezione.Tipo == "combo" || _reportType.Descrizione != "DIAGNOSI")
                    sezione75.writeSezione(_dataThread);
                    break;
                #endregion

                #region S76
                case "S76":
                    S76 sezione76 = new S76();
                    sezione76.modalitaRappresentazione = S76.EmodalitaRappresentazione.alternativa;
                    sezione76.setTitolo(_titolo);
                    sezione76.TestoIntroduttivo = _testoIntroduttivo;
                    sezione76.writeSezione(_dataThread);
                    break;
                #endregion

                #region S76BIS
                case "S76BIS":
                    S76 sezione76BIS = new S76(S76.EmodalitaRappresentazione.alternativa);
                    sezione76BIS.setTitolo(_titolo);
                    sezione76BIS.TestoIntroduttivo = _testoIntroduttivo;
                    sezione76BIS.writeSezione(_dataThread);
                    break;
                #endregion

                #region S80ALT
                case "S80ALT":
                    S80ALT sezione80ALT = new S80ALT();
                    sezione80ALT.setTitolo(_titolo);
                    sezione80ALT.TestoIntroduttivo = _testoIntroduttivo;
                    sezione80ALT.writeSezione(_dataThread);
                    break;
                #endregion

                #region S80
                case "S80":
                    S80 sezione80 = new S80();
                    sezione80.setTitolo(_titolo);
                    sezione80.TestoIntroduttivo = _testoIntroduttivo;
                    sezione80.writeSezione(_dataThread);
                    break;
                #endregion

                #region S80BIS
                case "S80BIS":
                    S80BIS sezione80BIS = new S80BIS();
                    sezione80BIS.setTitolo(_titolo);
                    sezione80BIS.TestoIntroduttivo = _testoIntroduttivo;
                    sezione80BIS.writeSezione(_dataThread);
                    break;
                #endregion

                #region S82
                case "S82":
                    S82 sezione82 = new S82();
                    sezione82.setTitolo(_titolo);
                    sezione82.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);
                    sezione82.writeSezione(_dataThread);
                    break;
                #endregion

                #region S82BIS
                case "S82BIS":
                    S82BIS sezione82BIS = new S82BIS();
                    sezione82BIS.setTitolo(_titolo);

                    if (_areaprogettocodice.ToLower() == "inv")
                    {
                        if (_nomeprogetto.ToLower() == "progetto investimento" && _numeroprogettiinvestimento == 1)
                            sezione82BIS.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);
                        else
                            sezione82BIS.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivoAlternativo, this, true);
                    }
                    else
                        sezione82BIS.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);


                    sezione82BIS.writeSezione(_dataThread);
                    break;
                #endregion

                #region S83
                case "S83":
                    S83 sezione83 = new S83();
                    sezione83.HasSelectedPatrimNonRap = true;
                    sezione83.setTitolo(_titolo);

                    if (_areaprogettocodice.ToLower() == "inv")
                    {
                        if (_nomeprogetto.ToLower() == "progetto investimento" && _numeroprogettiinvestimento == 1)
                            sezione83.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);
                        else
                            sezione83.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivoAlternativo, this, true);
                    }
                    else
                        sezione83.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);


                    if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                    {
                        sezione83.TestoIntroduttivo = "I prodotti presenti in quest'area/progetto non contribuiscono al calcolo del rendimento. Il dettaglio viene fornito nel capitolo ''Patrimonio non rappresentabile.''";
                        sezione83.writeSezioneFormatoSoloTesto(_dataThread);
                    }
                    else
                        sezione83.writeSezione(_dataThread);

                    break;
                #endregion

                #region S84
                case "S84":
                    S84 sezione84 = new S84();
                    sezione84.setTitolo(_titolo);
                    sezione84.TestoIntroduttivo = _testoIntroduttivo;
                    sezione84.writeSezione(_dataThread);
                    break;
                #endregion

                #region S85
                case "S85":
                    S85 sezione85 = new S85();
                    sezione85.setTitolo(_titolo);
                    sezione85.TestoIntroduttivo = _testoIntroduttivo;
                    sezione85.writeSezione(_dataThread);
                    break;
                #endregion

                #region S86
                case "S86":
                    S86 sezione86 = new S86();
                    //if (_vincolo.Contains(TipologiaVisualizzazione.NOTA_DETTAGLIO_PATRIM_NONRAPP_ASSET))                        
                    sezione86.HasSelectedPatrimNonRap = true;

                    sezione86.setTitolo(_titolo);
                    sezione86.Header = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, this);
                    sezione86.writeSezione(_dataThread);
                    break;
                #endregion

                #region S88
                case "S88":
                    S88 sezione88 = new S88();
                    sezione88.setTitolo(_titolo);
                    sezione88.StampaAreaProgetto = true;
                    sezione88.TestoIntroduttivo = _testoIntroduttivo;
                    sezione88.writeSezione(_dataThread);
                    break;
                #endregion

                #region S93
                //case "S93":
                //    S93 sezione93 = new S93();
                //    sezione93.setTitolo(_titolo);
                //    sezione93.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, _dataThread);
                //    sezione93.writeSezione(_dataThread);
                //    break;
                #endregion

                #region S94
                case "S94":
                    //S94 sezione94 = new S94();
                    //sezione94.setTitolo(_titolo);
                    //sezione94.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, _dataThread);
                    //sezione94.writeSezione(_dataThread);
                    // Marian

                    //sezione95Monitoring.setTitolo(_titolo);
                    //sezione95Monitoring.TestoIntroduttivo = UtilityBusinessLayer.ReplaceVariables(_testoIntroduttivo, _dataThread);

                    //S95 sezione95Monitoring = new S95();
                    //if (_dataThread.profiloIsAct)
                    //    sezione95Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S95
                case "S95":
                    S95 sezione95Monitoring = new S95();
                    if (_dataThread.profiloIsAct)
                        sezione95Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S96Bis
                case "S96BIS":
                    S96 sezione96b = new S96();
                    //_parametriReport.DatiSezione.setParam(_parametriReport.DataSectionParameter);
                    sezione96b.Titolo = _titolo;
                    sezione96b.TestoIntroduttivo = _testoIntroduttivo;//ReplaceVariables(_testoIntroduttivo);
                    sezione96b.writeSezione(_dataThread);
                    break;
                #endregion

                #region S96
                case "S96":
                    S96 sezione96 = new S96();
                    //_parametriReport.DatiSezione.setParam(_parametriReport.DataSectionParameter);
                    //sezione96.Titolo = _titolo;
                    sezione96.TestoIntroduttivo = _testoIntroduttivo;//ReplaceVariables(_testoIntroduttivo);
                    sezione96.writeSezione(_dataThread);
                    break;
                #endregion

                #region S102
                case "S102":
                    S102 sezioneS102 = new S102();
                    sezioneS102.Titolo = _titolo;
                    sezioneS102.TestoIntroduttivo = _testoIntroduttivo;
                    sezioneS102.writeSezione(_dataThread);
                    break;
                #endregion

                #region S103
                case "S103":
                    S103 sezione103 = new S103();

                    //sezioneS103.Titolo = _titolo;
                    sezione103.TestoIntroduttivo = _testoIntroduttivo;
                    sezione103.writeSezione(_dataThread);
                    break;
                #endregion

                #region S128
                case "S128":
                    S128 sezione128Monitoring = new S128();
                    if (_dataThread.profiloIsAct)
                        sezione128Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S129
                case "S129":
                    S129 sezione129Monitoring = new S129();
                    if (_dataThread.profiloIsAct)
                        sezione129Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S130
                case "S130":
                    S130 sezione130Monitoring = new S130();
                    if (_dataThread.profiloIsAct)
                        sezione130Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S131
                case "S131":
                    S131 sezione131Monitoring = new S131();
                    if (_dataThread.profiloIsAct)
                        sezione131Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S132
                case "S132":
                    S132 sezione132Monitoring = new S132();
                    if (_dataThread.profiloIsAct)
                        sezione132Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S133
                case "S133":
                    S133 sezione133 = new S133();
                    if (_dataThread.profiloIsAct)
                        sezione133.writeSezione(_dataThread);
                    break;
                #endregion

                #region S133BIS
                case "S133BIS":
                    S133BIS sezione133BIS = new S133BIS();
                    if (_dataThread.profiloIsAct)
                        sezione133BIS.writeSezione(_dataThread);
                    break;
                #endregion

                #region S134
                case "S134":
                    S134 sezione134Monitoring = new S134();
                    sezione134Monitoring.HasSelectedPatrimNonRap = true;
                    //if (_dataThread.profiloIsAct)
                    //    sezione134Monitoring.writeSezione(_dataThread);

                    if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                    {
                        sezione134Monitoring.TestoIntroduttivo = "I prodotti presenti in quest'area/progetto non contribuiscono al calcolo del rendimento. Il dettaglio viene fornito nel capitolo ''Patrimonio non rappresentabile.''";
                        sezione134Monitoring.writeSezioneFormatoSoloTesto(_dataThread);

                    }
                    else
                        sezione134Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S135
                case "S135":
                    S135 sezione135Monitoring = new S135();
                    if (_dataThread.profiloIsAct)
                        sezione135Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S134BIS
                case "S134BIS":
                    
                    //if ((_areaprogettocodice.ToLower() == "inv") || (_areaprogettocodice.ToLower() == "ris"))
                    //{

                    // FC  11/07/2014 Commento di Bkup 
                        //S134BIS sezione134BISMonitoringLiqInv = new S134BIS();
                        //sezione134BISMonitoringLiqInv.HasSelectedPatrimNonRap = true;
                        //if (_dataThread.profiloIsAct)
                        //    //sezione134BISMonitoringLiqInv.writeSezioneGraficLeft(_dataThread);
                        //    sezione134BISMonitoringLiqInv.writeSezione(_dataThread);

                    // FC  11/07/2014 
                    //Start
                       S134BIS sezione134BISMonitoringLiqInv = new S134BIS();
                       sezione134BISMonitoringLiqInv.HasSelectedPatrimNonRap = true;
                       if (_vincolo.Contains(TipologiaVisualizzazione.AREA_MONITORATA_CON_CONTROVOLORE_0))
                       {
                           sezione134BISMonitoringLiqInv.TestoIntroduttivo = "I prodotti presenti in quest'area/progetto non contribuiscono al calcolo del rendimento. Il dettaglio viene fornito nel capitolo ''Patrimonio non rappresentabile.''";
                           sezione134BISMonitoringLiqInv.writeSezioneFormatoSoloTesto(_dataThread);
                       }
                       else
                       {
                           if (_dataThread.profiloIsAct)
                               sezione134BISMonitoringLiqInv.writeSezione(_dataThread);
                       }
                    // END


                    //}

                    break;
                #endregion


                #region S137
                case "S137":
                    S137 sezione137Bonus = new S137();
                    if (_dataThread.profiloIsAct)
                        sezione137Bonus.writeSezione(_dataThread);
                    break;
                #endregion

                #region S138
                case "S138":
                    S138 sezione138Proventi = new S138();
                    if (_dataThread.profiloIsAct)
                        sezione138Proventi.writeSezione(_dataThread);
                    break;
                #endregion

                #region S139
                case "S139":
                    S139 sezione139Scadenze = new S139();
                    if (_dataThread.profiloIsAct)
                        sezione139Scadenze.writeSezione(_dataThread);
                    break;
                #endregion

                #region S140
                case "S140":
                    S140 sezione140 = new S140();
                    if (_dataThread.profiloIsAct)
                        sezione140.writeSezione(_dataThread);
                    break;
                #endregion

                #region S141
                case "S141":
                    S141 sezione141 = new S141();
                   
                    if (_dataThread.profiloIsAct)
                        sezione141.writeSezione(_dataThread);
                    break;
                #endregion

                #region S142
                case "S142":
                    S142 sezione142 = new S142();
                    if (_dataThread.profiloIsAct)
                        sezione142.writeSezione(_dataThread);
                    break;
                #endregion

                #region S143
                case "S143":
                    S143 sezione143 = new S143();
                    if (_dataThread.profiloIsAct)
                        sezione143.writeSezione(_dataThread);
                    break;
                #endregion

                #region S144
                case "S144":
                    S144 sezione144 = new S144();
                    if (_dataThread.profiloIsAct)
                        sezione144.writeSezione(_dataThread);
                    break;
                #endregion

                #region S145
                case "S145":
                    S145 sezione145 = new S145();
                    if (_dataThread.profiloIsAct)
                        sezione145.writeSezione(_dataThread);
                    break;
                #endregion

                #region S146
                case "S146":
                    S146 sezione146 = new S146();
                    if (_dataThread.profiloIsAct)
                        sezione146.writeSezione(_dataThread);
                    break;
                #endregion

                #region S147
                case "S147":
                    S147 sezione147 = new S147();
                    if (_dataThread.profiloIsAct)
                        sezione147.writeSezione(_dataThread);
                    break;
                #endregion

                #region S148
                case "S148":
                    S148 sezione148 = new S148();
                    if (_dataThread.profiloIsAct)
                        sezione148.writeSezione(_dataThread);
                    break;
                #endregion

                #region S149
                case "S149":
                    S149 sezione149 = new S149();
                    if (_dataThread.profiloIsAct)
                        sezione149.writeSezione(_dataThread);
                    break;
                #endregion

                #region S150
                case "S150":
                    S150 sezione150 = new S150();
                    if (_dataThread.profiloIsAct)
                        sezione150.writeSezione(_dataThread);
                    break;
                #endregion

                #region S151
                case "S151":
                    S151 sezione151 = new S151();
                    if (_dataThread.profiloIsAct)
                        sezione151.writeSezione(_dataThread);
                    break;
                #endregion

                #region S152
                case "S152":
                    S152 sezione152 = new S152();
                    if (_dataThread.profiloIsAct)
                        sezione152.writeSezione(_dataThread);
                    break;
                #endregion

                #region S153
                case "S153":
                    S153 sezione153 = new S153();
                    //if (_vincolo.Contains(TipologiaVisualizzazione.TORTA))
                        sezione153.writeSezione(_dataThread);
                     break;
                #endregion

                #region S154
                case "S154":
                     S154 sezione154 = new S154();
                     //sezione2.setTitolo(_dataThread.DatiSezione.Titolo);
               
                     //if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                     //    sezione154.writeSezioneCombo(_dataThread);
                     //else
                         sezione154.writeSezione(_dataThread);
                     break;
                #endregion

                #region S155
                case "S155":
                     S155 sezione155 = new S155();
                     //sezione26.setTitolo(_dataThread.DatiSezione.Titolo);
                     sezione155.writeSezione(_dataThread);
                     break;
                #endregion

                #region S156
                case "S156":
                     S156 sezione156 = new S156();
                     //sezione27.setTitolo(_dataThread.DatiSezione.Titolo);
                     sezione156.writeSezione(_dataThread);
                     break;
                #endregion

                #region S157
                case "S157":
                    S157 sezione157 = new S157();
                    sezione157.TestoTitolo = _titolo;
                    sezione157.TestoIntroduttivo = _testoIntroduttivo;
                    sezione157.writeSezione(_dataThread);

                    break;
                #endregion

                #region S158
                case "S158":
                    S158 sezione158 = new S158();
                    if (_dataThread.profiloIsAct)
                        sezione158.writeSezione(_dataThread);
                    break;
                #endregion

                #region S159
                case "S159":
                    S159 sezione159 = new S159();
                    if (_dataThread.profiloIsAct)
                        sezione159.writeSezione(_dataThread);
                    break;
                #endregion

                #region S160
                case "S160":
                    S160 sezione160 = new S160();
                    sezione160.writeSezione(_dataThread);
                    break;
                #endregion

                #region S162
                case "S162":

                    S162 sezione162 = new S162();
                    //sezione48.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione162.writeSezione(_dataThread);
                    break;
                #endregion

                #region S163
                case "S163":
                    S163 sezione163 = new S163();
                    //sezione32.setTitolo(_dataThread.DatiSezione.Titolo);
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        sezione163.writeSezioneCombo(_dataThread);
                    else
                        sezione163.writeSezione(_dataThread);
                    break;
                #endregion

                #region S164
                case "S164":

                    S164 sezione164 = new S164();
                    //sezione49.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione164.writeSezione(_dataThread);
                    break;
                #endregion

                #region S165
                case "S165":

                    S165 sezione165 = new S165();
                    //sezione50.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione165.writeSezione(_dataThread);
                    break;
                #endregion

                #region S166
                case "S166":

                    S166 sezione166 = new S166();
                    //sezione51.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione166.writeSezione(_dataThread);
                    break;
                #endregion

                #region S167
                case "S167":
                    S167 sezioneS167 = new S167();
                    sezioneS167.Titolo = _titolo;
                    sezioneS167.TestoIntroduttivo = _testoIntroduttivo;
                    sezioneS167.writeSezione(_dataThread);
                    break;
                #endregion

                #region S168
                case "S168":
                    S168 sezione168 = new S168();

                    //sezioneS103.Titolo = _titolo;
                    sezione168.TestoIntroduttivo = _testoIntroduttivo;
                    sezione168.writeSezione(_dataThread);
                    break;
                #endregion

                #region S169
                case "S169":
                    S169 sezione169 = new S169();
                    //_parametriReport.DatiSezione.setParam(_parametriReport.DataSectionParameter);
                    //sezione96.Titolo = _titolo;
                    sezione169.TestoIntroduttivo = _testoIntroduttivo;//ReplaceVariables(_testoIntroduttivo);
                    sezione169.writeSezione(_dataThread);
                    break;
                #endregion

                #region S170
                case "S170":
                    S170 sezione170 = new S170();
                    ////sezione37.setTitolo(_dataThread.DatiSezione.Titolo);
                    sezione170.TestoIntroduttivo = TestoIntroduttivo;
                    sezione170.TestoTitolo = Titolo;
                    //sezione42.setTitolo("Set titolo");
                    sezione170.writeSezione(_dataThread);
                    break;
                #endregion


                #region S171
                case "S171":
                    S171 sezione171 = new S171();
                    sezione171.modalitaRappresentazione = S171.EmodalitaRappresentazione.alternativa;
                    sezione171.setTitolo(_titolo);
                    sezione171.TestoIntroduttivo = _testoIntroduttivo;
                    sezione171.writeSezione(_dataThread);
                    break;
                #endregion

                #region S331
                case "S331":
                    S331 sezione331Monitoring = new S331();
                    if (_dataThread.profiloIsAct)
                        sezione331Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                #region S332
                    case "S332":
                    S332 sezione3 = new S332();
                    //sezione2.setTitolo(_dataThread.DatiSezione.Titolo);
                    //if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                    if (_vincolo.Contains(TipologiaVisualizzazione.DOPPIA))
                        sezione3.writeSezioneCombo(_dataThread);
                    else
                        sezione3.writeSezione(_dataThread);
                    break;
                #endregion

                #region S333
                case "S333":
                    S333 sezione333Monitoring = new S333();
                    if (_dataThread.profiloIsAct)
                        sezione333Monitoring.writeSezione(_dataThread);
                    break;
                #endregion


                #region S334
                case "S334":
                    S334 sezione334Monitoring = new S334();
                    if (_dataThread.profiloIsAct)
                        sezione334Monitoring.writeSezione(_dataThread);
                    break;
                #endregion

                default:
                    //return false;
                    break;
            }

            //patryk
            //this caused empty page to appear on random documents, commented
            //Start new page for defined sections & paragraphs (in DB)  
            //if (Capitolo.Titolo == "Patrimonio finanziario altri Istituti" && DocumentPDF.checkMargin(300))
            //    DocumentPDF.addPage();
            //CapitoloReport Capitolo = _parent.ParagrafoParent;
            
            //if (Capitolo.Titolo.Contains("Patrimonio finanziario altri Istituti") && this.NuovaPaginaDopo == true)
            //{
            //    DocumentPDF.addPage();
            //    _biancoPagina = 1;
            //}
            //else
            //{
            //    _biancoPagina = 0;
            //}

        }


        /// <summary>
        /// Nonostante i relativi id vengano recuperati dalla R6_S_Generator,
        /// per alcune sezioni esistono dei vincoli per i quali tali sezioni non verranno comunque stampate.
        /// </summary>
        private bool BloccaStampaPERUlterioriVincoli()
        {
            switch (_codice)
            {
                case "S76":
                    if (!_vincolo.Contains(TipologiaVisualizzazione.SISTAMPA))
                        return true;
                    else
                        return false;

                case "S77":
                    if (!_vincolo.Contains(TipologiaVisualizzazione.SISTAMPA))
                        return true;
                    else
                        return false;

                //case "S43BIS":
                //    if ((_vincolo.Contains(TipologiaVisualizzazione.SISTAMPA)) && (_areaprogettocodice.ToUpper() == "CC"))
                //        return true;
                //    else
                //        return false;
                   
                default:
                    return false;
            }
        }



        /// <summary>
        /// Imposta tutti i vincoli alla Sezione a partire da un datatable contenente i vincoli.
        /// </summary>
        /// <param name="datatableVincoli"></param>
        public void ImpostaVincoli(DataTable datatableVincoli)
        {
            foreach (DataRow rVincolo in datatableVincoli.Rows)
            {
                switch (rVincolo["CodiceVincoloApplicativo"].ToString().Trim())
                {
                    case "TORTA":
                        _vincolo.Add(TipologiaVisualizzazione.TORTA);
                        break;
                    case "BARRE":
                        _vincolo.Add(TipologiaVisualizzazione.BARRE);
                        break;
                    case "SINGOLA":
                        _vincolo.Add(TipologiaVisualizzazione.SINGOLA);
                        break;
                    case "DOPPIA":
                        _vincolo.Add(TipologiaVisualizzazione.DOPPIA);
                        break;
                    case "NO_CONFRONTO":
                        _vincolo.Add(TipologiaVisualizzazione.NO_CONFRONTO);
                        break;
                    case "CONFRONTO":
                        _vincolo.Add(TipologiaVisualizzazione.CONFRONTO);
                        break;
                    case "PERFORMANCE":
                        _vincolo.Add(TipologiaVisualizzazione.PERFORMANCE);
                        break;
                    case "VERSATONETTO_UTILEPERDITA":
                        _vincolo.Add(TipologiaVisualizzazione.VERSATONETTO_UTILEPERDITA);
                        break;
                    case "RENDIMENTO_DA_INIZIOANNO":
                        _vincolo.Add(TipologiaVisualizzazione.RENDIMENTO_DA_INIZIOANNO);
                        break;
                    case "RENDIMENTO_DA_SOTTOSCRIZIONE":
                        _vincolo.Add(TipologiaVisualizzazione.RENDIMENTO_DA_SOTTOSCRIZIONE);
                        break;
                    case "RAGGRUPPAMENTO_PER_AREA":
                        _vincolo.Add(TipologiaVisualizzazione.RAGGRUPPAMENTO_PER_AREA);
                        break;
                    case "RAGGRUPPAMENTO_PER_TIPOLOGIA":
                        _vincolo.Add(TipologiaVisualizzazione.RAGGRUPPAMENTO_PER_TIPOLOGIA);
                        break;
                    case "SISTAMPA":
                        _vincolo.Add(TipologiaVisualizzazione.SISTAMPA);
                        break;
                    case "NO_NOMECLIENTE_PER_COPERTINA":
                        _vincolo.Add(TipologiaVisualizzazione.NO_NOMECLIENTE_PER_COPERTINA);
                        break;
                    case "NOTA_DETTAGLIO_PATRIM_NONRAPP_ASSET":
                        _vincolo.Add(TipologiaVisualizzazione.NOTA_DETTAGLIO_PATRIM_NONRAPP_ASSET);
                        break;
                    case "NOTA_DETTAGLIO_PATRIM_NONRAPP_POLITICAINV":
                        _vincolo.Add(TipologiaVisualizzazione.NOTA_DETTAGLIO_PATRIM_NONRAPP_POLITICAINV);
                        break;
                    case "RISCHIO":
                        _vincolo.Add(TipologiaVisualizzazione.RISCHIO);
                        break;
                    default:
                        break;
                }
            }
        }
    }
}