using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using ceTe.DynamicPDF.Text;
using ceTe.DynamicPDF;
using PDFGenerator.Presentation.Section;
using PDFGenerator;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.Presentation.Section.Charts;
using PDFGenerator.BusinessLayer;
using PDFGenerator.BusinessLayer.DataSection;
using ceTe.DynamicPDF.PageElements;
using ContrattoSei.Utilities;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Linq;

/// <summary>
/// Summary description for S80ALT
/// </summary>
/// 
public class S80ALT : ISezione
{
    string Titolo = string.Empty;
    string _testotitolo;
    string _testointroduttivo;
    NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

    /// <summary>
    /// Testo introduttivo della sezione.
    /// </summary>
    public string TestoIntroduttivo
    {
        get
        {
            return _testointroduttivo;
        }
        set
        {
            _testointroduttivo = value;
        }
    }

    /// <summary>
    /// Testo del titolo della sezione.
    /// </summary>
    public string TestoTitolo
    {
        get
        {
            return _testotitolo;
        }
        set
        {
            _testotitolo = value;
        }
    }


    public void setTitolo(string label)
    {
        Titolo = label;
    }

    public S80ALT()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public void writeSezione(DataThread dataThread)
    {

        //NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        DocumentPDF document = dataThread.DocumentPDF;
        DatiTabella datitab;
        DataSetS80ALT set = (DataSetS80ALT)dataThread.Data.DatiSezione;

        //setta la datatable che contiene i dati per disegnare la tabella Dati
        datitab = new DatiTabella();
        datitab.table = set.Tables["GraficoPiramide"];

        //string captionFase1 = datitab.table.Columns["Fase1"].Caption;
        //string captionFase2 = datitab.table.Columns["Fase2"].Caption;
        //string captionFase3 = datitab.table.Columns["Fase3"].Caption;

        // Aggiungo una pagina se la tabella non entra nella corrente.
        if (document.checkMargin(130))
            document.addPage();

        //document.setSezTitolo(Titolo);

        // Titolo della sezione
        logger.Info("Titolo della sezione " + _testointroduttivo);
        document.setLastPos(-40);
        _testointroduttivo = _testointroduttivo.Replace("si è evoluto l’ammontare del Suo patrimonio dall’attivazione del monitoraggio. Sono inoltre riportate, per ogni area di bisogno, l'allocazione ottimale (\"Piramide Modello\") corrente, al precedente invio del report e all’attivazione del monitoraggio, delle risorse finanziarie che lei detiene presso Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest.", "si è evoluto l’ammontare del Suo patrimonio dall’attivazione del monitoraggio. Sono inoltre riportate, per ogni area di bisogno, l'allocazione ottimale (\"Piramide Modello\") corrente, al precedente invio del report e all’attivazione del monitoraggio, delle risorse finanziarie che lei detiene presso Fideuram S.p.A., commercializzate tramite la rete di private banker Sanpaolo Invest.");
        document.setChapterHeader(string.Concat(_testointroduttivo,"<br>"), 0, 520, 8);


        #region Definizione delle Vars

        logger.Info("Definizione delle Vars");

        DataRow rowTemplate;

        //float TotalePatrimonio;
        float Ypos = 0;
        float totaleTabellaAlttez = 0;
        float totaleTabellaAlttezHeader = 0;

        int larghezzaColonnaDescrizione = 0; //10; //è variabile e da calcolare in base allo spazio disponibile
        int larghezzaColonnaFase1 = 70; //80    //80;  //130; //80;  //70
        int larghezzaColonnaFase2 = 70; //80    //150; //80;  //60
        int larghezzaColonnaFase3 = 70; //80    // 130; //80;  //70
        int larghezzaColonnaFase4 = 70; //70    //60
        int larghezzaColonnaFase5 = 70; //70    //70
        int larghezzaColonnaFase6 = 68; //70    //60
        int larghezzaUltimaColonna = 0;

        #endregion


        #region Piramide
        //disegno la parte della piramide
        Piramide modello = new Piramide("");
        /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        //modello.writeSezione(document); //Originale
        modello.writeSezionePiramideTagliata(document);
        logger.Info("Piramide - dopo la chiamata a modello.writeSezionePiramideTagliata");

        /****************************************************************************************************************************/
        //Ypos = document.getLastPos() - 35;  //-35
        Ypos = document.getLastPos();
        #endregion

        int nFasi = 0;

        #region Disegno Header
        DatiTabella datiHeader;
        datiHeader = new DatiTabella();
        datiHeader.table = set.Tables["GraficoPiramideHeader"];
        DataRow rowTemplateHeader = datiHeader.table.Rows[0];
        Tabella TabellaAreaBisognoHeader = new Tabella();
        TabellaAreaBisognoHeader.LineeTabella = false;
        TabellaAreaBisognoHeader.Y = Ypos;  //document.getLastPos() - 1; //Ypos;
        TabellaAreaBisognoHeader.X = document.getMargineLeft();
        TabellaAreaBisognoHeader.Header = true;
        TabellaAreaBisognoHeader.HeaderFont = 8;
        TabellaAreaBisognoHeader.SaltoPagina = false;
        TabellaAreaBisognoHeader.Datasource = datiHeader.table;
        TabellaAreaBisognoHeader.AltezzaCella = 1;

        logger.Info("Disegno Header - Impostazioni Tabella");

        int larghezzaColonnaDescrizioneHeader = 0; //80; //è variabile e da calcolare in base allo spazio disponibile
        int larghezzaColonnaGruppoFase1 = 200; //110; //80;  //70
        int larghezzaColonnaGruppoFase2 = 150; // 160; //80;  //60
        int larghezzaColonnaGruppoFase3 = 162; // 150; //80;  //70
        int larghezzaUltimaColonnaHeader = 0;


        foreach (DataColumn column in TabellaAreaBisognoHeader.Datasource.Columns)
        {
            if (column.ColumnName == "GruppoFase1")
            {
                logger.Info("Disegno Header - Gruppo Fase 1");

                if (TabellaAreaBisognoHeader.Datasource.Columns[2].Caption != TabellaAreaBisognoHeader.Datasource.Columns[2].ColumnName)
                {
                    logger.Info("Disegno Header - Gruppo Fase 1 Impostazione Colonna con dati Caption");

                    TabellaAreaBisognoHeader.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaGruppoFase1, TipoAllineamento.DESTRA, false, 8, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                    nFasi++;
                }
                else
                {
                    logger.Info("Disegno Header - Gruppo Fase 1 Impostazione Colonna senza dati Caption");
                    TabellaAreaBisognoHeader.Colonne.Add(new Colonna(column.ColumnName, "", larghezzaColonnaGruppoFase1, TipoAllineamento.DESTRA, false, 8, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

            }

            if (column.ColumnName == "GruppoFase2")
            {
                logger.Info("Disegno Header - Gruppo Fase 2");

                if (column.Caption != column.ColumnName)
                {
                    logger.Info("Disegno Header - Gruppo Fase 2 Impostazione Colonna con dati Caption");

                    TabellaAreaBisognoHeader.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaGruppoFase2, TipoAllineamento.DESTRA, false, 8, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                    nFasi++;
                }
                else
                {
                    logger.Info("Disegno Header - Gruppo Fase 2 Impostazione Colonna con dati Caption 1");

                    TabellaAreaBisognoHeader.Colonne.Add(new Colonna(column.ColumnName, TabellaAreaBisognoHeader.Datasource.Columns[1].Caption, larghezzaColonnaGruppoFase2, TipoAllineamento.DESTRA, false, 8, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                    nFasi++;
                    //TabellaAreaBisognoHeader.Colonne[1].Nome = string.Empty;
                }
            }

            if (column.ColumnName == "GruppoFase3")
            {
                logger.Info("Disegno Header - Gruppo Fase 3");

                TabellaAreaBisognoHeader.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaGruppoFase3, TipoAllineamento.CENTRATO, false, 8, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                nFasi++;
            }
        }

        TabellaAreaBisognoHeader.Colonne.Insert(0, new Colonna("DescrizionePiramide", "", larghezzaColonnaDescrizioneHeader, TipoAllineamento.SINISTRA, false, 8, false));

        TabellaAreaBisognoHeader.Draw(datiHeader, document);

        Ypos += TabellaAreaBisognoHeader.AltezzaTabella;
        totaleTabellaAlttezHeader += TabellaAreaBisognoHeader.AltezzaTabella;
        #endregion


        #region Disegno Tabella Fase 1,2,3
        datitab = new DatiTabella();

        #region "Test Nuova Formattazione -- Pino
        /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        List<PiramidePercentuale> _listaPirPerc = ConvertTo<PiramidePercentuale>(set.Tables["GraficoPiramide"]);
        //int conta = 0;

        //foreach (PiramidePercentuale item in _listaPirPerc)
        //{
        //    switch (conta)
        //    {
        //        case 0:
        //            item.Descrizione = "EXT";
        //            break;
        //        case 1:
        //            item.Descrizione = "INV";
        //            break;
        //        case 2:
        //            item.Descrizione = "PRE";
        //            break;
        //        case 3:
        //            item.Descrizione = "RIS";
        //            break;
        //        case 4:
        //            item.Descrizione = "LIQ";
        //            break;
        //        case 5:
        //            item.Descrizione = "EXTPERC";
        //            break;
        //        case 6:
        //            item.Descrizione = "INVPERC";
        //            break;
        //        case 7:
        //            item.Descrizione = "PREPERC";
        //            break;
        //        case 8:
        //            item.Descrizione = "RISPERC";
        //            break;
        //        case 9:
        //            item.Descrizione = "LIQPERC";
        //            break;
        //    }
        //    conta += 1;
        //}

        //_listaPirPerc.Find(f => f.Descrizione == "EXT").Fase1Percentuale = _listaPirPerc.Where(f => f.Descrizione == "EXTPERC").Select(s => s.Fase1Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "EXT").Fase2Percentuale = _listaPirPerc.Where(f => f.Descrizione == "EXTPERC").Select(s => s.Fase2Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "EXT").Fase3Percentuale = _listaPirPerc.Where(f => f.Descrizione == "EXTPERC").Select(s => s.Fase3Percentuale).First();

        //_listaPirPerc.Find(f => f.Descrizione == "INV").Fase1Percentuale = _listaPirPerc.Where(f => f.Descrizione == "INVPERC").Select(s => s.Fase1Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "INV").Fase2Percentuale = _listaPirPerc.Where(f => f.Descrizione == "INVPERC").Select(s => s.Fase2Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "INV").Fase3Percentuale = _listaPirPerc.Where(f => f.Descrizione == "INVPERC").Select(s => s.Fase3Percentuale).First();

        //_listaPirPerc.Find(f => f.Descrizione == "PRE").Fase1Percentuale = _listaPirPerc.Where(f => f.Descrizione == "PREPERC").Select(s => s.Fase1Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "PRE").Fase2Percentuale = _listaPirPerc.Where(f => f.Descrizione == "PREPERC").Select(s => s.Fase2Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "PRE").Fase3Percentuale = _listaPirPerc.Where(f => f.Descrizione == "PREPERC").Select(s => s.Fase3Percentuale).First();

        //_listaPirPerc.Find(f => f.Descrizione == "RIS").Fase1Percentuale = _listaPirPerc.Where(f => f.Descrizione == "RISPERC").Select(s => s.Fase1Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "RIS").Fase2Percentuale = _listaPirPerc.Where(f => f.Descrizione == "RISPERC").Select(s => s.Fase2Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "RIS").Fase3Percentuale = _listaPirPerc.Where(f => f.Descrizione == "RISPERC").Select(s => s.Fase3Percentuale).First();

        //_listaPirPerc.Find(f => f.Descrizione == "LIQ").Fase1Percentuale = _listaPirPerc.Where(f => f.Descrizione == "LIQPERC").Select(s => s.Fase1Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "LIQ").Fase2Percentuale = _listaPirPerc.Where(f => f.Descrizione == "LIQPERC").Select(s => s.Fase2Percentuale).First();
        //_listaPirPerc.Find(f => f.Descrizione == "LIQ").Fase3Percentuale = _listaPirPerc.Where(f => f.Descrizione == "LIQPERC").Select(s => s.Fase3Percentuale).First();

        //_listaPirPerc.RemoveAll(x => x.Descrizione.Contains("PERC"));

        //_listaPirPerc.ForEach(ff => ff.Descrizione = string.Empty);

        DataTable _dt = ToDataTable<PiramidePercentuale>(_listaPirPerc);
        _dt.TableName = "GraficoPiramide";

        _dt.Columns[1].Caption = "Controvalore<BR>(€)";
        _dt.Columns[2].Caption = "Piramide<BR>Modello (%)";
        _dt.Columns[3].Caption = "Controvalore<BR>(€)";
        _dt.Columns[4].Caption = "Piramide<BR>Modello (%)";
        _dt.Columns[5].Caption = "Controvalore<BR>(€)";
        _dt.Columns[6].Caption = "Piramide<BR>Modello (%)";

        logger.Info(string.Concat(" Disegno Tabella Fase 1,2,3 - Nuova Formattazione", _listaPirPerc.Count().ToString()));

        /****************************************************************************************************************************/
        #endregion

        //datitab.table = set.Tables["GraficoPiramide"];  //ORIGINALE
        datitab.table = _dt;

        rowTemplate = datitab.table.Rows[0];
        Tabella TabellaAreaBisogno = new Tabella();
        TabellaAreaBisogno.LineeTabella = false;
        TabellaAreaBisogno.Y = Ypos; //TabellaAreaBisognoHeader.Y + 25; //Ypos;
        TabellaAreaBisogno.X = document.getMargineLeft();
        TabellaAreaBisogno.Header = true;
        TabellaAreaBisogno.HeaderFont = 8;
        TabellaAreaBisogno.SaltoPagina = false;
        TabellaAreaBisogno.Datasource = datitab.table;
        TabellaAreaBisogno.AltezzaCella = 30;

        larghezzaColonnaDescrizione = 512;

        logger.Info("Disegno Tabella Fase 1,2,3 - Impostazioni Tabella");

        // Definizione delle colonne
        foreach (DataColumn column in TabellaAreaBisogno.Datasource.Columns)
        {
            if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
            {
                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 1");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                larghezzaUltimaColonna = larghezzaColonnaFase1;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                //nFasi++;
            }

            if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 1Perc");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                larghezzaUltimaColonna = larghezzaColonnaFase4;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                //nFasi++;
            }

            if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
            {
                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 2");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                larghezzaUltimaColonna = larghezzaColonnaFase2;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));// -25 è la larghezza della colonna che conterrà l'immagine                                         
                //nFasi++;
            }

            if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
            {

                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 2Perc");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                larghezzaUltimaColonna = larghezzaColonnaFase5;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                //nFasi++;
            }

            if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
            {
                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 3");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                larghezzaUltimaColonna = larghezzaColonnaFase3;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));// -25 è la larghezza della colonna che conterrà l'immagine                    
                //nFasi++;
            }

            if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Tabella Fase 1,2,3 - Gruppo Fase 3Perc");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                larghezzaUltimaColonna = larghezzaColonnaFase6;
                TabellaAreaBisogno.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                //nFasi++;
            }
        }

        TabellaAreaBisogno.Colonne.Insert(0, new Colonna("Descrizione", "Aree di Bisogno", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

         
        TabellaAreaBisogno.Draw(datitab, document);

        Ypos += TabellaAreaBisogno.AltezzaTabella;
        totaleTabellaAlttez += TabellaAreaBisogno.AltezzaTabella;

        #endregion

        #region Disegno Tabella Totale Risorse Allocate


        Ypos += 40;

        //rowTemplate = set.Tables["RisorseNonAllocate"].Rows[0];   // Originale
        rowTemplate = set.Tables["RisorseAllocate"].Rows[0];

        DataRow rowTemplateTotale = set.Tables["DatiTotale"].Rows[0];

        if ((rowTemplate["fase1"].ToString() != rowTemplateTotale["fase1"].ToString()) || (rowTemplate["fase2"].ToString() != rowTemplateTotale["fase2"].ToString()) || rowTemplate["fase3"].ToString() != rowTemplateTotale["fase3"].ToString())
        {
            if ((rowTemplate["fase1"].ToString() != "0,00" && rowTemplate["fase1"].ToString() != string.Empty) || (rowTemplate["fase2"].ToString() != "0,00" && rowTemplate["fase2"].ToString() != string.Empty) || (rowTemplate["fase3"].ToString() != "0,00" && rowTemplate["fase3"].ToString() != string.Empty))
            {

                logger.Info("Disegno Tabella Totale Risorse Allocate");

                datitab = new DatiTabella();

                /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
                List<PiramidePercentuale> _listaTotaliRA = ConvertTo<PiramidePercentuale>(set.Tables["RisorseAllocate"]);

                DataTable _dtTotaliRA = ToDataTable<PiramidePercentuale>(_listaTotaliRA);
                _dtTotaliRA.TableName = "RisorseAllocate";

                _dtTotaliRA.Columns[1].Caption = "Controvalore<BR>(€)";
                _dtTotaliRA.Columns[2].Caption = "Piramide<BR>Modello (%)";
                _dtTotaliRA.Columns[3].Caption = "Controvalore<BR>(€)";
                _dtTotaliRA.Columns[4].Caption = "Piramide<BR>Modello (%)";
                _dtTotaliRA.Columns[5].Caption = "Controvalore<BR>(€)";
                _dtTotaliRA.Columns[6].Caption = "Piramide<BR>Modello (%)";

                logger.Info(string.Concat("Disegno Tabella Totale Risorse Allocate, righe: ", _dtTotaliRA.Rows.Count.ToString()));
                /****************************************************************************************************************************/

                //datitab.table = set.Tables["RisorseAllocate"];
                //rowTemplate = datitab.table.Rows[0];

                datitab.table = _dtTotaliRA;
                rowTemplate = _dtTotaliRA.Rows[0];


                Tabella tabellaTotale = new Tabella();
                tabellaTotale.X = document.getMargineLeft();
                tabellaTotale.Y = Ypos;
                tabellaTotale.Header = false;
                tabellaTotale.SaltoPagina = false;
                tabellaTotale.Datasource = datitab.table;

                larghezzaColonnaDescrizione = 512;

                logger.Info("Disegno Tabella Totale Risorse Allocate - Impostazione tabellaTotale");

                // Definizione delle colonne
                foreach (DataColumn column in tabellaTotale.Datasource.Columns)
                {
                    if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 1");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, true, 7, true));
                    }

                    if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 1Perc");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
                    }

                    if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 2");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, true, 7, true));
                    }

                    if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 2Perc");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
                    }

                    if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 3");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, true, 7, true));
                    }

                    if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
                    {
                        logger.Info("Disegno Tabella Totale Risorse Allocate - fase 3Perc");

                        larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                        tabellaTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
                    }
                }

                tabellaTotale.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, true, 7, true));

                tabellaTotale.Draw(datitab, document);

                Ypos += tabellaTotale.AltezzaTabella;
                totaleTabellaAlttez += tabellaTotale.AltezzaTabella;
            }
        }
        

        #endregion

        #region Disegno Tabella Risorse non allocate

        rowTemplate = set.Tables["RisorseNonAllocate"].Rows[0];

        if ((rowTemplate["fase1"].ToString() != "0,00" && rowTemplate["fase1"].ToString() != string.Empty) || (rowTemplate["fase2"].ToString() != "0,00" && rowTemplate["fase2"].ToString() != string.Empty) || (rowTemplate["fase3"].ToString() != "0,00" && rowTemplate["fase3"].ToString() != string.Empty))
        {

            logger.Info("Disegno Tabella Risorse non allocate");

            //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
            datitab = new DatiTabella();

            /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
            List<PiramidePercentuale> _listaTotaliRnA = ConvertTo<PiramidePercentuale>(set.Tables["RisorseNonAllocate"]);

            DataTable _dtTotaliRnA = ToDataTable<PiramidePercentuale>(_listaTotaliRnA);
            _dtTotaliRnA.TableName = "RisorseNonAllocate";

            _dtTotaliRnA.Columns[1].Caption = "Controvalore<BR>(€)";
            _dtTotaliRnA.Columns[2].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliRnA.Columns[3].Caption = "Controvalore<BR>(€)";
            _dtTotaliRnA.Columns[4].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliRnA.Columns[5].Caption = "Controvalore<BR>(€)";
            _dtTotaliRnA.Columns[6].Caption = "Piramide<BR>Modello (%)";

            logger.Info(string.Concat("Disegno Tabella Totale Risorse non allocate, righe: ", _dtTotaliRnA.Rows.Count.ToString()));
            /****************************************************************************************************************************/

            //datitab.table = set.Tables["RisorseNonAllocate"];    // Originale
            //rowTemplate = datitab.table.Rows[0];                 // Originale

            datitab.table = _dtTotaliRnA;
            rowTemplate = _dtTotaliRnA.Rows[0];

            Tabella tabellaRisorseNonAllocate = new Tabella();
            tabellaRisorseNonAllocate.X = document.getMargineLeft();
            tabellaRisorseNonAllocate.Y = Ypos;
            tabellaRisorseNonAllocate.Header = false;
            tabellaRisorseNonAllocate.SaltoPagina = false;
            tabellaRisorseNonAllocate.Datasource = datitab.table;

            larghezzaColonnaDescrizione = 512;

            logger.Info("Disegno Tabella Totale Risorse non allocate - Impostazione tabellaRisorseNonAllocate");

            // Definizione delle colonne
            foreach (DataColumn column in tabellaRisorseNonAllocate.Datasource.Columns)
            {
                if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
                {
                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 1");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
                {
                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 1Perc");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
                {
                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 2");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
                {
                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 2Perc");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
                {

                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 3");
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
                {
                    logger.Info("Disegno Tabella Totale Risorse non allocate - fase 3Perc");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                    tabellaRisorseNonAllocate.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

            }

            tabellaRisorseNonAllocate.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

            tabellaRisorseNonAllocate.Draw(datitab, document);

            Ypos += tabellaRisorseNonAllocate.AltezzaTabella;
            totaleTabellaAlttez += tabellaRisorseNonAllocate.AltezzaTabella;
        }
        #endregion

        #region Disegno TOTALE RISORSE FINANZIARIE

        //DataRow rowTemplateCC = set.Tables["ContoCorrente"].Rows[0];
        //DataRow rowTemplateSelf = set.Tables["LineaSelfNeg"].Rows[0];
        //DataRow rowTemplateOC = set.Tables["OperazioniInCorso"].Rows[0];

        //if (
        //    ((rowTemplateCC["fase1"].ToString() != "-" && rowTemplateCC["fase1"].ToString() != string.Empty) || (rowTemplateCC["fase2"].ToString() != "-" && rowTemplateCC["fase2"].ToString() != string.Empty) || (rowTemplateCC["fase3"].ToString() != "-" && rowTemplateCC["fase3"].ToString() != string.Empty))
        //    ||
        //    ((rowTemplateOC["fase1"].ToString() != "0,00" && rowTemplateOC["fase1"].ToString() != string.Empty) || (rowTemplateOC["fase2"].ToString() != "0,00" && rowTemplateOC["fase2"].ToString() != string.Empty) || (rowTemplateOC["fase3"].ToString() != "0,00" && rowTemplateOC["fase3"].ToString() != string.Empty))
        //     ||
        //    ((rowTemplateSelf["fase1"].ToString() != "-" && rowTemplateSelf["fase1"].ToString() != string.Empty) || (rowTemplateSelf["fase2"].ToString() != "-" && rowTemplateSelf["fase2"].ToString() != string.Empty) || (rowTemplateSelf["fase3"].ToString() != "-" && rowTemplateSelf["fase3"].ToString() != string.Empty))
        //    )
        //{
        //    //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
        //    datitab = new DatiTabella();

        //    logger.Info("Disegno TOTALE RISORSE FINANZIARIE");

        //    /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        //    List<PiramidePercentuale> _listaTotaliRF = ConvertTo<PiramidePercentuale>(set.Tables["RisorseFinanziarie"]);

        //    DataTable _dtTotaliRF = ToDataTable<PiramidePercentuale>(_listaTotaliRF);
        //    _dtTotaliRF.TableName = "RisorseFinanziarie";

        //    _dtTotaliRF.Columns[1].Caption = "Controvalore<BR>(€)";
        //    _dtTotaliRF.Columns[2].Caption = "Piramide<BR>Modello (%)";
        //    _dtTotaliRF.Columns[3].Caption = "Controvalore<BR>(€)";
        //    _dtTotaliRF.Columns[4].Caption = "Piramide<BR>Modello (%)";
        //    _dtTotaliRF.Columns[5].Caption = "Controvalore<BR>(€)";
        //    _dtTotaliRF.Columns[6].Caption = "Piramide<BR>Modello (%)";

        //    logger.Info(string.Concat("Disegno TOTALE RISORSE FINANZIARIE, righe: ", _dtTotaliRF.Rows.Count.ToString()));
        //    /****************************************************************************************************************************/

        //    //datitab.table = set.Tables["RisorseFinanziarie"];   // Originale
        //    //rowTemplate = datitab.table.Rows[0];                // Originale

        //    datitab.table = _dtTotaliRF;
        //    rowTemplate = _dtTotaliRF.Rows[0];

        //    Tabella tabellaRisorseFinanziarie = new Tabella();
        //    tabellaRisorseFinanziarie.X = document.getMargineLeft();
        //    tabellaRisorseFinanziarie.Y = Ypos;
        //    tabellaRisorseFinanziarie.Header = false;
        //    tabellaRisorseFinanziarie.SaltoPagina = false;
        //    tabellaRisorseFinanziarie.Datasource = datitab.table;

        //    larghezzaColonnaDescrizione = 512;

        //    logger.Info("Disegno TOTALE RISORSE FINANZIARIE - Impostazione tabellaRisorseFinanziarie");

        //    // Definizione delle colonne
        //    foreach (DataColumn column in tabellaRisorseFinanziarie.Datasource.Columns)
        //    {
        //        if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 1");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false));
        //        }

        //        if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 1Perc");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //        }

        //        if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 2");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
        //        }

        //        if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 2Perc");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //        }

        //        if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 3");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
        //        }

        //        if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
        //        {
        //            logger.Info("Disegno TOTALE RISORSE FINANZIARIE - fase 3Perc");

        //            larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
        //            tabellaRisorseFinanziarie.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //        }
        //    }

        //    tabellaRisorseFinanziarie.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

        //    tabellaRisorseFinanziarie.Draw(datitab, document);

        //    Ypos += tabellaRisorseFinanziarie.AltezzaTabella;
        //    totaleTabellaAlttez += tabellaRisorseFinanziarie.AltezzaTabella;
        //}
        #endregion

        #region Disegno CONTO CORRENTE A SALDO NEGATIVO

        rowTemplate = set.Tables["ContoCorrente"].Rows[0];

        if ((rowTemplate["fase1"].ToString() != "-" && rowTemplate["fase1"].ToString() != string.Empty) || (rowTemplate["fase2"].ToString() != "-" && rowTemplate["fase2"].ToString() != string.Empty) || (rowTemplate["fase3"].ToString() != "-" && rowTemplate["fase3"].ToString() != string.Empty))
        {
            //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
            datitab = new DatiTabella();

            logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO");

            /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
            List<PiramidePercentuale> _listaTotaliCC = ConvertTo<PiramidePercentuale>(set.Tables["ContoCorrente"]);

            DataTable _dtTotaliCC = ToDataTable<PiramidePercentuale>(_listaTotaliCC);
            _dtTotaliCC.TableName = "ContoCorrente";

            _dtTotaliCC.Columns[1].Caption = "Controvalore<BR>(€)";
            _dtTotaliCC.Columns[2].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliCC.Columns[3].Caption = "Controvalore<BR>(€)";
            _dtTotaliCC.Columns[4].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliCC.Columns[5].Caption = "Controvalore<BR>(€)";
            _dtTotaliCC.Columns[6].Caption = "Piramide<BR>Modello (%)";

            logger.Info(string.Concat("Disegno CONTO CORRENTE A SALDO NEGATIVO, righe: ", _dtTotaliCC.Rows.Count.ToString()));
            /****************************************************************************************************************************/

            //datitab.table = set.Tables["ContoCorrente"];  // Originale
            //rowTemplate = datitab.table.Rows[0];          // Originale

            datitab.table = _dtTotaliCC;
            rowTemplate = _dtTotaliCC.Rows[0];

            Tabella tabellaContoCorrente = new Tabella();
            tabellaContoCorrente.X = document.getMargineLeft();
            tabellaContoCorrente.Y = Ypos;
            tabellaContoCorrente.Header = false;
            tabellaContoCorrente.SaltoPagina = false;
            tabellaContoCorrente.Datasource = datitab.table;

            larghezzaColonnaDescrizione = 512;

            // Definizione delle colonne
            foreach (DataColumn column in tabellaContoCorrente.Datasource.Columns)
            {
                if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
                {
                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 1");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
                {
                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 1Perc");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
                {
                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 2");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
                {
                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 2Perc");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
                {
                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 3");

                    larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
                {

                    logger.Info("Disegno CONTO CORRENTE A SALDO NEGATIVO - fase 3Perc");
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                    tabellaContoCorrente.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }

            tabellaContoCorrente.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

            tabellaContoCorrente.Draw(datitab, document);

            Ypos += tabellaContoCorrente.AltezzaTabella;
            totaleTabellaAlttez += tabellaContoCorrente.AltezzaTabella;
        }

        #endregion

        #region Disegno Linea Self Negativa

        rowTemplate = set.Tables["LineaSelfNeg"].Rows[0];

        if ((rowTemplate["fase1"].ToString() != "-" && rowTemplate["fase1"].ToString() != string.Empty) || (rowTemplate["fase2"].ToString() != "-" && rowTemplate["fase2"].ToString() != string.Empty) || (rowTemplate["fase3"].ToString() != "-" && rowTemplate["fase3"].ToString() != string.Empty))
        {
            //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
            datitab = new DatiTabella();

            /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
            List<PiramidePercentuale> _listaTotaliSelf = ConvertTo<PiramidePercentuale>(set.Tables["LineaSelfNeg"]);

            DataTable _dtTotaliSelf = ToDataTable<PiramidePercentuale>(_listaTotaliSelf);
            _dtTotaliSelf.TableName = "LineaSelfNeg";

            _dtTotaliSelf.Columns[1].Caption = "Controvalore<BR>(€)";
            _dtTotaliSelf.Columns[2].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliSelf.Columns[3].Caption = "Controvalore<BR>(€)";
            _dtTotaliSelf.Columns[4].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliSelf.Columns[5].Caption = "Controvalore<BR>(€)";
            _dtTotaliSelf.Columns[6].Caption = "Piramide<BR>Modello (%)";
            /****************************************************************************************************************************/

            //datitab.table = set.Tables["LineaSelfNeg"];   //Originale
            //rowTemplate = datitab.table.Rows[0];          //Originale

            datitab.table = _dtTotaliSelf;
            rowTemplate = _dtTotaliSelf.Rows[0];

            Tabella tabellaLineaSelfNeg = new Tabella();
            tabellaLineaSelfNeg.X = document.getMargineLeft();
            tabellaLineaSelfNeg.Y = Ypos;
            tabellaLineaSelfNeg.Header = false;
            tabellaLineaSelfNeg.SaltoPagina = false;
            tabellaLineaSelfNeg.Datasource = datitab.table;
            // MIOFOGLIO 20181206
            tabellaLineaSelfNeg.LineaFineTabella = false;
            tabellaLineaSelfNeg.LineeTabella = false;
            //--MIOFOGLIO 20181206

            //tabellaOperazioniInCorso.AltezzaCella = 30;

            larghezzaColonnaDescrizione = 512;

            // Definizione delle colonne
            foreach (DataColumn column in tabellaLineaSelfNeg.Datasource.Columns)
            {
                if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                    tabellaLineaSelfNeg.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }

            tabellaLineaSelfNeg.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

            tabellaLineaSelfNeg.Draw(datitab, document);

            Ypos += tabellaLineaSelfNeg.AltezzaTabella;
            totaleTabellaAlttez += tabellaLineaSelfNeg.AltezzaTabella;
        }

        #endregion

        #region Disegno Operazioni in corso

        rowTemplate = set.Tables["OperazioniInCorso"].Rows[0];

        if ((rowTemplate["fase1"].ToString() != "0,00" && rowTemplate["fase1"].ToString() != string.Empty) || (rowTemplate["fase2"].ToString() != "0,00" && rowTemplate["fase2"].ToString() != string.Empty) || (rowTemplate["fase3"].ToString() != "0,00" && rowTemplate["fase3"].ToString() != string.Empty))
        {
            //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
            datitab = new DatiTabella();

            /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
            List<PiramidePercentuale> _listaTotaliOiC = ConvertTo<PiramidePercentuale>(set.Tables["OperazioniInCorso"]);

            DataTable _dtTotaliOiC = ToDataTable<PiramidePercentuale>(_listaTotaliOiC);
            _dtTotaliOiC.TableName = "OperazioniInCorso";

            _dtTotaliOiC.Columns[1].Caption = "Controvalore<BR>(€)";
            _dtTotaliOiC.Columns[2].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliOiC.Columns[3].Caption = "Controvalore<BR>(€)";
            _dtTotaliOiC.Columns[4].Caption = "Piramide<BR>Modello (%)";
            _dtTotaliOiC.Columns[5].Caption = "Controvalore<BR>(€)";
            _dtTotaliOiC.Columns[6].Caption = "Piramide<BR>Modello (%)";
            /****************************************************************************************************************************/

            //datitab.table = set.Tables["OperazioniInCorso"];  //Originale
            //rowTemplate = datitab.table.Rows[0];              //Originale

            datitab.table = _dtTotaliOiC;
            rowTemplate = _dtTotaliOiC.Rows[0];

            Tabella tabellaOperazioniInCorso = new Tabella();
            tabellaOperazioniInCorso.X = document.getMargineLeft();
            tabellaOperazioniInCorso.Y = Ypos;
            tabellaOperazioniInCorso.Header = false;
            tabellaOperazioniInCorso.SaltoPagina = false;
            tabellaOperazioniInCorso.Datasource = datitab.table;
            //tabellaOperazioniInCorso.AltezzaCella = 30;

            larghezzaColonnaDescrizione = 512;

            // Definizione delle colonne
            foreach (DataColumn column in tabellaOperazioniInCorso.Datasource.Columns)
            {
                if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }


                if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }

                if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                }

                if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
                {
                    larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                    tabellaOperazioniInCorso.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }

            tabellaOperazioniInCorso.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));

            tabellaOperazioniInCorso.Draw(datitab, document);

            Ypos += tabellaOperazioniInCorso.AltezzaTabella;
            totaleTabellaAlttez += tabellaOperazioniInCorso.AltezzaTabella;
        }

        #endregion


        #region Disegno Totale Patrimonto

        //setta la datatable che contiene i Dati per disegnare la tabella del Risorse non allocate
        datitab = new DatiTabella();

        logger.Info("Disegno Totale Patrimonto");

        /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        List<PiramidePercentuale> _listaTotali = ConvertTo<PiramidePercentuale>(set.Tables["DatiTotale"]);

        DataTable _dtTotali = ToDataTable<PiramidePercentuale>(_listaTotali);
        _dtTotali.TableName = "DatiTotale";

        _dtTotali.Columns[1].Caption = "Controvalore<BR>(€)";
        _dtTotali.Columns[2].Caption = "Piramide<BR>Modello (%)";
        _dtTotali.Columns[3].Caption = "Controvalore<BR>(€)";
        _dtTotali.Columns[4].Caption = "Piramide<BR>Modello (%)";
        _dtTotali.Columns[5].Caption = "Controvalore<BR>(€)";
        _dtTotali.Columns[6].Caption = "Piramide<BR>Modello (%)";

        logger.Info("Disegno Totale Patrimonto");
        /****************************************************************************************************************************/

        //datitab.table = set.Tables["DatiTotale"];  //Originale
        //rowTemplate = set.Tables["DatiTotale"].Rows[0];   //Originale
        datitab.table = _dtTotali;
        rowTemplate = _dtTotali.Rows[0];


        Tabella tabellaDatiTotale = new Tabella();
        tabellaDatiTotale.X = document.getMargineLeft();
        tabellaDatiTotale.Y = Ypos;
        tabellaDatiTotale.Header = false;
        tabellaDatiTotale.SaltoPagina = false;
        tabellaDatiTotale.Datasource = datitab.table;

        larghezzaColonnaDescrizione = 512;

        // Definizione delle colonne
        foreach (DataColumn column in tabellaDatiTotale.Datasource.Columns)
        {
            if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 1");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase1;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase1, TipoAllineamento.DESTRA, true, 7, true));
            }

            if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 1Perc");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase4;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
            }

            if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
            {

                logger.Info("Disegno Totale Patrimonto - fase 2");
                larghezzaColonnaDescrizione -= larghezzaColonnaFase2;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, true, 7, true));
            }

            if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 2Perc");

                larghezzaColonnaDescrizione -= larghezzaColonnaFase5;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
            }

            if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
            {

                logger.Info("Disegno Totale Patrimonto - fase 3");
                larghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, true, 7, true));
            }

            if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 3Perc");
                larghezzaColonnaDescrizione -= larghezzaColonnaFase6;
                tabellaDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, true, 7, true)); // -25 è la larghezza della colonna che conterrà l'immagine
            }
        }

        tabellaDatiTotale.Colonne.Insert(0, new Colonna("Descrizione", "", larghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, true, 7, true));

        tabellaDatiTotale.Draw(datitab, document);

        Ypos += tabellaDatiTotale.AltezzaTabella;
        totaleTabellaAlttez += tabellaDatiTotale.AltezzaTabella;

        #endregion


        #region Nuovo Disegno Dettaglio Movimenti Dopo Dati Totale
        //La minima larghezza necessaria per la descrizione di questa nuova tabella è 159, quindi:
        //512 - 73 - 150 - 130 = 159.
        int dettaglioMovimentiLarghezzaColonnaDescrizione =512;
        //int dettaglioMovimentiLarghezzaColonnaFase1 = 73;
        //int dettaglioMovimentiLarghezzaColonnaFase2 = 160;
        //int dettaglioMovimentiLarghezzaColonnaFase3 = 110; //130;

        //int dettaglioMovimentiLarghezzaColonnaFase1Perc = 50;
        //int dettaglioMovimentiLarghezzaColonnaFase2Perc = 50;
        //int dettaglioMovimentiLarghezzaColonnaFase3Perc = 50;

        int numeroFasiVisibili = 0;
        bool presenzaFase3 = false;
        int incrementoPixelRettangoloFase3 = 0;

        //setta la datatable che contiene i Dati per stampare righe ulteriori sotto al totale.
        datitab = new DatiTabella();

        logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale");

        /**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        List<PiramidePercentualeDopoRigheTotali> _listaTotaliDDT = ConvertTo<PiramidePercentualeDopoRigheTotali>(set.Tables["RigheDopoDatiTotale"]);

        DataTable _dtTotaliDDT = ToDataTable<PiramidePercentualeDopoRigheTotali>(_listaTotaliDDT);
        _dtTotaliDDT.TableName = "RigheDopoDatiTotale";

        _dtTotaliDDT.Columns[1].Caption = "Controvalore<BR>(€)";
        _dtTotaliDDT.Columns[2].Caption = "Piramide<BR>Modello (%)";
        _dtTotaliDDT.Columns[3].Caption = "Controvalore<BR>(€)";
        _dtTotaliDDT.Columns[4].Caption = "Piramide<BR>Modello (%)";
        _dtTotaliDDT.Columns[5].Caption = "Controvalore<BR>(€)";
        _dtTotaliDDT.Columns[6].Caption = "Piramide<BR>Modello (%)";
        _dtTotaliDDT.Columns[10].Caption = string.Empty;
        _dtTotaliDDT.Columns[11].Caption = string.Empty;
        _dtTotaliDDT.Columns[12].Caption = string.Empty;
        /****************************************************************************************************************************/
        datitab.table = _dtTotaliDDT;
        rowTemplate = _dtTotaliDDT.Rows[0];

        Tabella tabellaRigheDopoDatiTotale = new Tabella();
        tabellaRigheDopoDatiTotale.X = document.getMargineLeft();
        tabellaRigheDopoDatiTotale.Y = Ypos;
        tabellaRigheDopoDatiTotale.Header = false;
        tabellaRigheDopoDatiTotale.SaltoPagina = false;
        tabellaRigheDopoDatiTotale.Datasource = datitab.table;


        foreach (DataColumn column in tabellaRigheDopoDatiTotale.Datasource.Columns)
        {
            if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
            {
                logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 1 fase");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase1;

                if (rowTemplate["fase1"].ToString().Equals("notvisible"))
                {
                    string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[10].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(nomeColonna, string.Empty, larghezzaColonnaFase1 - 23, TipoAllineamento.DESTRA, false, 7, false));
                }
                else
                {
                    ++numeroFasiVisibili;

                    int larghezzaFase1 = rowTemplate["fase1"].ToString().Length;

                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaFase1 - 23, TipoAllineamento.DESTRA, false, 7, false));
                }
            }

            if (column.ColumnName == "Fase1Percentuale") //&& rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 1Perc");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase4;

                if (rowTemplate["Fase1Percentuale"].ToString().Equals(string.Empty))
                {
                    //string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[10].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, string.Empty, larghezzaColonnaFase4 - 23, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
                else
                {
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4 - 23, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }


            if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
            {
                logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 2 fase");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase2;

                if (rowTemplate["fase2"].ToString().Equals("notvisible"))
                {
                    string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[11].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(nomeColonna, string.Empty, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }
                else
                {
                    ++numeroFasiVisibili;

                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase2, TipoAllineamento.DESTRA, false, 7, false));
                }
            }

            if (column.ColumnName == "Fase2Percentuale") //&& rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 2Perc");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase5;

                if (rowTemplate["Fase2Percentuale"].ToString().Equals(string.Empty))
                {
                    //string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[11].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, string.Empty, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false));
                }
                else
                {
                    ++numeroFasiVisibili;
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }

            if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
            {
                logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 3 fase");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase3;
                if (rowTemplate["fase3"].ToString().Equals("notvisible"))
                {
                    string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[12].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(nomeColonna, string.Empty, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                }
                else
                {
                    ++numeroFasiVisibili;
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase3, TipoAllineamento.DESTRA, false, 7, false));
                    presenzaFase3 = true;
                }
            }

            if (column.ColumnName == "Fase3Percentuale") //&& rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
            {
                logger.Info("Disegno Totale Patrimonto - fase 3Perc");

                dettaglioMovimentiLarghezzaColonnaDescrizione -= larghezzaColonnaFase6;

                if (rowTemplate["Fase3Percentuale"].ToString().Equals(string.Empty))
                {
                    //string nomeColonna = tabellaRigheDopoDatiTotale.Datasource.Columns[12].ToString();
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, string.Empty, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false));
                }
                else
                {
                    ++numeroFasiVisibili;
                    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
                }
            }
        }

        //tabellaRigheDopoDatiTotale.Colonne.Insert(0, new Colonna("Descrizione", "", 140, TipoAllineamento.SINISTRA, false, 7, false));
        //if (presenzaFase3) incrementoPixelRettangoloFase3 += 14;

        //dettaglioMovimentiLarghezzaColonnaDescrizione
        if (numeroFasiVisibili > 0)
        {
            tabellaRigheDopoDatiTotale.Colonne.Insert(0, new Colonna("Descrizione", "", 140, TipoAllineamento.SINISTRA, false, 7, false));
            if (presenzaFase3) incrementoPixelRettangoloFase3 += 14;
        }

        tabellaRigheDopoDatiTotale.Draw(datitab, document);

        Ypos += tabellaRigheDopoDatiTotale.AltezzaTabella;
        totaleTabellaAlttez += tabellaRigheDopoDatiTotale.AltezzaTabella;


        #endregion




        #region Disegno Dettaglio Movimenti Dopo Dati Totale
        ////La minima larghezza necessaria per la descrizione di questa nuova tabella è 159, quindi:
        ////512 - 73 - 150 - 130 = 159.
        //int dettaglioMovimentiLarghezzaColonnaDescrizione = 512;
        //int dettaglioMovimentiLarghezzaColonnaFase1 = 73;
        //int dettaglioMovimentiLarghezzaColonnaFase2 = 160;
        //int dettaglioMovimentiLarghezzaColonnaFase3 = 110; //130;


        ////int dettaglioMovimentiLarghezzaColonnaDescrizione = 512;
        ////int dettaglioMovimentiLarghezzaColonnaFase1 = 73;    //73;
        ////int dettaglioMovimentiLarghezzaColonnaFase2 = 138;    //139; //120 //150;
        ////int dettaglioMovimentiLarghezzaColonnaFase3 = 120;    //122; //120 //130;

        ////int dettaglioMovimentiLarghezzaColonnaFase1Perc = 50;
        ////int dettaglioMovimentiLarghezzaColonnaFase2Perc = 50;
        ////int dettaglioMovimentiLarghezzaColonnaFase3Perc = 50;


        //int numeroFasiVisibili = 0;
        //bool presenzaFase3 = false;
        //int incrementoPixelRettangoloFase3 = 0;
        ////Ypos -= 5;
        

        ////setta la datatable che contiene i Dati per stampare righe ulteriori sotto al totale.
        //datitab = new DatiTabella();

        //logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale");

        ///**************************** Modifica nuova sezione per report monitoraggio 28 - 10 - 2020-- Pino ***************************/
        //List<PiramidePercentualeDopoRigheTotali> _listaTotaliDDT = ConvertTo<PiramidePercentualeDopoRigheTotali>(set.Tables["RigheDopoDatiTotale"]);

        ////DataTable _dtTotaliDDT = ToDataTable<PiramidePercentualeDopoRigheTotali>(_listaTotaliDDT);
        ////_dtTotaliDDT.TableName = "RigheDopoDatiTotale";

        ////_dtTotaliDDT.Columns[1].Caption = "Controvalore<BR>(€)";
        ////_dtTotaliDDT.Columns[2].Caption = "Piramide<BR>Modello (%)";
        ////_dtTotaliDDT.Columns[3].Caption = "Controvalore<BR>(€)";
        ////_dtTotaliDDT.Columns[4].Caption = "Piramide<BR>Modello (%)";
        ////_dtTotaliDDT.Columns[5].Caption = "Controvalore<BR>(€)";
        ////_dtTotaliDDT.Columns[6].Caption = "Piramide<BR>Modello (%)";
        ///****************************************************************************************************************************/


        //datitab.table = set.Tables["RigheDopoDatiTotale"];        //Originale
        //rowTemplate = set.Tables["RigheDopoDatiTotale"].Rows[0];  //Originale

        ////datitab.table = _dtTotaliDDT;
        ////rowTemplate = _dtTotaliDDT.Rows[0];

        //Tabella tabellaRigheDopoDatiTotale = new Tabella();
        //tabellaRigheDopoDatiTotale.X = document.getMargineLeft();
        //tabellaRigheDopoDatiTotale.Y = Ypos;
        //tabellaRigheDopoDatiTotale.Header = false;
        //tabellaRigheDopoDatiTotale.SaltoPagina = false;
        //tabellaRigheDopoDatiTotale.Datasource = datitab.table;


        //foreach (DataColumn column in tabellaRigheDopoDatiTotale.Datasource.Columns)
        //{
        //    if (column.ColumnName.ToLower() == "fase1" && rowTemplate["fase1"].ToString() != string.Empty)
        //    {
        //        logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 1 fase");

        //        dettaglioMovimentiLarghezzaColonnaDescrizione -= dettaglioMovimentiLarghezzaColonnaFase1;
        //        if (rowTemplate["fase1"].ToString().Equals("notvisible"))
        //        {
        //            tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase1BlankValue",
        //                                                                string.Empty,
        //                                                                dettaglioMovimentiLarghezzaColonnaFase1,
        //                                                                TipoAllineamento.DESTRA, false, 7, false));
        //        }
        //        else
        //        {
        //            ++numeroFasiVisibili;
        //            tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //                                                                column.Caption,
        //                                                                dettaglioMovimentiLarghezzaColonnaFase1,
        //                                                                TipoAllineamento.DESTRA, false, 7, false));
        //        }
        //    }

        //    //if (column.ColumnName == "Fase1Percentuale" && rowTemplate["Fase1Percentuale"].ToString() != string.Empty)
        //    //{
        //    //    larghezzaColonnaDescrizione -= larghezzaColonnaFase4;

        //    //    if (rowTemplate["Fase1Percentuale"].ToString().Equals("notvisible"))
        //    //    {
        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase1BlankValue",
        //    //                                                            string.Empty,
        //    //                                                            dettaglioMovimentiLarghezzaColonnaFase1Perc,
        //    //                                                            TipoAllineamento.DESTRA, false, 7, false));
        //    //    }
        //    //    else
        //    //    {
        //    //        ++numeroFasiVisibili;
        //    //        //tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //    //        //                                                    column.Caption,
        //    //        //                                                    dettaglioMovimentiLarghezzaColonnaFase1,
        //    //        //                                                    TipoAllineamento.DESTRA, false, 8, false));

        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase4, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //    //    }
        //    //}

        //    if (column.ColumnName.ToLower() == "fase2" && rowTemplate["fase2"].ToString() != string.Empty)
        //    {
        //        logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 2 fase");

        //        dettaglioMovimentiLarghezzaColonnaDescrizione -= dettaglioMovimentiLarghezzaColonnaFase2;
        //        if (rowTemplate["fase2"].ToString().Equals("notvisible"))
        //        {
        //            tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase2BlankValue",
        //                                                                string.Empty,
        //                                                                dettaglioMovimentiLarghezzaColonnaFase2,
        //                                                                TipoAllineamento.SINISTRA, false, 7, false));
        //        }
        //        else
        //        {
        //            ++numeroFasiVisibili;

        //            //if (rowTemplate["fase2"].ToString() != "n.d.")
        //            //{
        //                tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //                                                                    column.Caption,
        //                                                                    dettaglioMovimentiLarghezzaColonnaFase2,
        //                                                                    TipoAllineamento.SINISTRA, false, 7, false));
        //            //}
        //            //else
        //            //{
        //            //    tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //            //                                                        column.Caption,
        //            //                                                        dettaglioMovimentiLarghezzaColonnaFase2 - 50,
        //            //                                                        TipoAllineamento.SINISTRA, true, 8, false));
        //            //}
        //        }
        //    }

        //    //if (column.ColumnName == "Fase2Percentuale" && rowTemplate["Fase2Percentuale"].ToString() != string.Empty)
        //    //{
        //    //    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;

        //    //    if (rowTemplate["Fase2Percentuale"].ToString().Equals("notvisible"))
        //    //    {
        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase2BlankValue",
        //    //                                                            string.Empty,
        //    //                                                            dettaglioMovimentiLarghezzaColonnaFase2Perc,
        //    //                                                            TipoAllineamento.DESTRA, false, 7, false));
        //    //    }
        //    //    else
        //    //    {
        //    //        ++numeroFasiVisibili;
        //    //        //tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //    //        //                                                    column.Caption,
        //    //        //                                                    dettaglioMovimentiLarghezzaColonnaFase1,
        //    //        //                                                    TipoAllineamento.DESTRA, false, 8, false));

        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase5, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //    //    }
        //    //}

        //    if (column.ColumnName.ToLower() == "fase3" && rowTemplate["fase3"].ToString() != string.Empty)
        //    {
        //        logger.Info("Disegno Dettaglio Movimenti Dopo Dati Totale - 3 fase");

        //        dettaglioMovimentiLarghezzaColonnaDescrizione -= dettaglioMovimentiLarghezzaColonnaFase3;
        //        if (rowTemplate["fase3"].ToString().Equals("notvisible"))
        //        {
        //            tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase3BlankValue",
        //                                                                string.Empty,
        //                                                                dettaglioMovimentiLarghezzaColonnaFase3,
        //                                                                TipoAllineamento.SINISTRA, false, 7, false));
        //        }
        //        else
        //        {
        //            ++numeroFasiVisibili;
        //            tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //                                                                column.Caption,
        //                                                                dettaglioMovimentiLarghezzaColonnaFase3,
        //                                                                TipoAllineamento.SINISTRA, false, 7, false));
        //            presenzaFase3 = true;
        //        }
        //    }

        //    //if (column.ColumnName == "Fase3Percentuale" && rowTemplate["Fase3Percentuale"].ToString() != string.Empty)
        //    //{
        //    //    larghezzaColonnaDescrizione -= larghezzaColonnaFase5;

        //    //    if (rowTemplate["Fase3Percentuale"].ToString().Equals("notvisible"))
        //    //    {
        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna("Fase3BlankValue",
        //    //                                                            string.Empty,
        //    //                                                            dettaglioMovimentiLarghezzaColonnaFase3Perc,
        //    //                                                            TipoAllineamento.DESTRA, false, 7, false));
        //    //    }
        //    //    else
        //    //    {
        //    //        ++numeroFasiVisibili;
        //    //        //tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName,
        //    //        //                                                    column.Caption,
        //    //        //                                                    dettaglioMovimentiLarghezzaColonnaFase1,
        //    //        //                                                    TipoAllineamento.DESTRA, false, 8, false));

        //    //        tabellaRigheDopoDatiTotale.Colonne.Add(new Colonna(column.ColumnName, column.Caption, larghezzaColonnaFase6, TipoAllineamento.DESTRA, false, 7, false)); // -25 è la larghezza della colonna che conterrà l'immagine
        //    //    }
        //    //}
        //}

        //if (numeroFasiVisibili > 0)
        //{
        //    tabellaRigheDopoDatiTotale.Colonne.Insert(0, new Colonna("Descrizione", "", dettaglioMovimentiLarghezzaColonnaDescrizione, TipoAllineamento.SINISTRA, false, 7, false));
        //    if (presenzaFase3) incrementoPixelRettangoloFase3 += 14;
        //}

        //tabellaRigheDopoDatiTotale.Draw(datitab, document);

        //Ypos += tabellaRigheDopoDatiTotale.AltezzaTabella;
        //totaleTabellaAlttez += tabellaRigheDopoDatiTotale.AltezzaTabella;
        #endregion
        

        #region Disegno riquadro su Situazione Corrente e freccia

        //float totaleTabellaAltteza = TabellaAreaBisogno.AltezzaTabella + tabellaTotale.AltezzaCella + tabellaContoCorrente.AltezzaCella + tabellaOperazioniInCorso.AltezzaCella + tabellaRisorseNonAllocate.AltezzaCella + tabellaRisorseFinanziarie.AltezzaCella + tabellaDatiTotale.AltezzaTabella + 10;        

        // riquadro intorno la colonna Situazione Corrente
        float xRiquadro = 528 - larghezzaUltimaColonna + (larghezzaUltimaColonna / 2);

        ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
        Rectangle rettangoloSuSituazioneCorrente;
        //rettangoloSuSituazioneCorrente = new Rectangle(xRiquadro, TabellaAreaBisogno.Y - 10, larghezzaUltimaColonna - 35, totaleTabellaAlttez - 13 + incrementoPixelRettangoloFase3);
        //rettangoloSuSituazioneCorrente = new Rectangle(xRiquadro, TabellaAreaBisogno.Y - 10, larghezzaUltimaColonna - 35, totaleTabellaAlttez - 7 + incrementoPixelRettangoloFase3);  // Originale
        //rettangoloSuSituazioneCorrente = new Rectangle(xRiquadro-80, TabellaAreaBisogno.Y - 35, larghezzaUltimaColonna+80, totaleTabellaAlttez - 1 + incrementoPixelRettangoloFase3);
        rettangoloSuSituazioneCorrente = new Rectangle(xRiquadro - 70, TabellaAreaBisogno.Y - 35, larghezzaUltimaColonna + 70, totaleTabellaAlttez - 1 + incrementoPixelRettangoloFase3);

        rettangoloSuSituazioneCorrente.CornerRadius = 5;
        page.Elements.Add(rettangoloSuSituazioneCorrente);


        System.Reflection.Assembly thisExe;
        thisExe = System.Reflection.Assembly.GetExecutingAssembly();
        System.IO.Stream file = thisExe.GetManifestResourceStream(UtilityManager.getAppSetting("FrecciaS80"));

        switch (nFasi)
        {
            case 2: // Una freccia tra "attivazione monitoraggio" e "situazione corrente" o tra "Precedente invio report" e "situazione corrente"
                //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, TabellaAreaBisogno.Y - 10, 0.57F));  // Originale
                //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, TabellaAreaBisogno.Y - 35, 0.57F));
                page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 375, TabellaAreaBisogno.Y - 35, 0.57F));
                break;

            case 3: // Una freccia tra "attivazione monitoraggio" e  "precedente invio report" e tra  "precedente invio report" e "situazione corrente"
                //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 245, TabellaAreaBisogno.Y - 10, 0.57F));  // Originale
                //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, TabellaAreaBisogno.Y - 10, 0.57F));  // Originale

                page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 220, TabellaAreaBisogno.Y - 35, 0.57F));
                //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 395, TabellaAreaBisogno.Y - 35, 0.57F));
                page.Elements.Add(new ceTe.DynamicPDF.PageElements.Image(file, document.getMargineLeft() + 375, TabellaAreaBisogno.Y - 35, 0.57F));
                break;

            default:
                break;
        }



        #endregion

        #region Disegno Didascalie Note Dettaglio Movimenti
        Ypos -= 13;

        DataTable dtRighe = set.Tables["RigheDopoDatiTotale"];
        DataTable dtDidascalieDB = set.Tables["DettaglioMovimentiDidascalieNote"];

        int fase1NumeroAsterischi = 0;
        int fase2NumeroAsterischi = 0;
        int fase3NumeroAsterischi = 0;
        if (!string.IsNullOrEmpty(dtRighe.Rows[0]["Fase1NumeroAsterischiNota"].ToString())) fase1NumeroAsterischi = Convert.ToInt16(dtRighe.Rows[0]["Fase1NumeroAsterischiNota"]);
        if (!string.IsNullOrEmpty(dtRighe.Rows[0]["Fase2NumeroAsterischiNota"].ToString())) fase2NumeroAsterischi = Convert.ToInt16(dtRighe.Rows[0]["Fase2NumeroAsterischiNota"]);
        if (!string.IsNullOrEmpty(dtRighe.Rows[0]["Fase3NumeroAsterischiNota"].ToString())) fase3NumeroAsterischi = Convert.ToInt16(dtRighe.Rows[0]["Fase3NumeroAsterischiNota"]);

        DataTable dtDidascalieInUso = new DataTable();
        dtDidascalieInUso.Columns.Add(new DataColumn("SequenzaAsterischi", typeof(string)));
        dtDidascalieInUso.Columns.Add(new DataColumn("Descrizione", typeof(string)));
        DataRow dr;
        DataRow[] righeDidascalia;
        string accodamento = string.Empty;

        // lele
        if (fase1NumeroAsterischi > 0)
        {
            righeDidascalia = dtDidascalieDB.Select(string.Format(" NumeroAsterischi = {0}", fase1NumeroAsterischi));
            if (righeDidascalia.Length > 0)
            {
                dr = dtDidascalieInUso.NewRow();
                accodamento = "(";
                for (int i = 0; i < fase1NumeroAsterischi; i++)
                {
                    accodamento = string.Format("{0}{1}", accodamento, "*");
                }
                accodamento = string.Format("{0})", accodamento);
                dr["SequenzaAsterischi"] = accodamento;
                dr["Descrizione"] = righeDidascalia[0]["Descrizione"].ToString();
                dtDidascalieInUso.Rows.Add(dr);
            }
        }

        if (fase2NumeroAsterischi > 0)
        {
            righeDidascalia = dtDidascalieDB.Select(string.Format(" NumeroAsterischi = {0}", fase2NumeroAsterischi));
            if (righeDidascalia.Length > 0)
            {
                dr = dtDidascalieInUso.NewRow();
                accodamento = "(";
                for (int i = 0; i < fase2NumeroAsterischi; i++)
                {
                    accodamento = string.Format("{0}{1}", accodamento, "*");
                }
                accodamento = string.Format("{0})", accodamento);
                if (fase3NumeroAsterischi == 0)
                {
                    dr["SequenzaAsterischi"] = accodamento;
                    dr["Descrizione"] = righeDidascalia[0]["Descrizione"].ToString();
                    
                }
                dtDidascalieInUso.Rows.Add(dr);
            }
        }

        if (fase3NumeroAsterischi > 0)
        {
            righeDidascalia = dtDidascalieDB.Select(string.Format(" NumeroAsterischi = {0}", fase3NumeroAsterischi));
            if (righeDidascalia.Length > 0)
            {
                dr = dtDidascalieInUso.NewRow();
                accodamento = "(";
                for (int i = 0; i < fase3NumeroAsterischi; i++)
                {
                    accodamento = string.Format("{0}{1}", accodamento, "*");
                }
                accodamento = string.Format("{0})", accodamento);
               
                    dr["SequenzaAsterischi"] = accodamento + " " + righeDidascalia[0]["Descrizione"].ToString();
                    //remmare questa se non si vuole far uscire didascalia note?
                    dr["Descrizione"] = righeDidascalia[0]["Descrizione"].ToString();
              
               
                dtDidascalieInUso.Rows.Add(dr);
            }
        }

        datitab = new DatiTabella();
        datitab.table = dtDidascalieInUso;

        Tabella tabellaDidascalieNote = new Tabella();
        tabellaDidascalieNote.X = document.getMargineLeft();
        tabellaDidascalieNote.Y = Ypos;
        tabellaDidascalieNote.Header = false;
        tabellaDidascalieNote.SaltoPagina = false;
        tabellaDidascalieNote.DimensioneLinea = 0;
        tabellaDidascalieNote.AltezzaCella = 10;
        tabellaDidascalieNote.DisegnaHeaderAlCambioPagina = false;
        tabellaDidascalieNote.Datasource = datitab.table;

        //ATTENZIONE:
        //A causa del tipo Tabella, per la colonna "SequenzaAsterischi" (con dimensione del testo pari ad 8)
        //un valore di larghezza inferiore a 25 renderà imposibile visualizzare correttamente le sequenze di asterischi
        //che verranno visualizzate correttamente solo nel caso siano (*), (**), (***).
        //512 è il valore della larghezza standard delle tabelle usate in questo documento pdf.
        tabellaDidascalieNote.Colonne.Add(new Colonna("SequenzaAsterischi",
                                                    string.Empty,
                                                    512,
                                                    TipoAllineamento.SINISTRA, false, 6, false));

/*        tabellaDidascalieNote.Colonne.Add(new Colonna("Descrizione",
                                                            string.Empty,
                                                            512 - 12,
                                                            TipoAllineamento.SINISTRA, false, 6, false));*/

        tabellaDidascalieNote.Draw(datitab, document);
        Ypos += tabellaDidascalieNote.AltezzaTabella;
        totaleTabellaAlttez += tabellaDidascalieNote.AltezzaTabella;
        #endregion

        document.setLastPos(totaleTabellaAlttez+20);
    }

    public List<T> ConvertTo<T>(DataTable datatable) where T : new()
    {
        List<T> Temp = new List<T>();
        try
        {
            List<string> columnsNames = new List<string>();
            foreach (DataColumn DataColumn in datatable.Columns)
                columnsNames.Add(DataColumn.ColumnName);
            Temp = datatable.AsEnumerable().ToList().ConvertAll<T>(row => getObject<T>(row, columnsNames));
            return Temp;
        }
        catch(Exception ex)
        {
            logger.Error(ex, string.Concat("Errore nella ConvertTo<T> ", ex.Message.ToString()));
            return Temp;
        }
    }

    public T getObject<T>(DataRow row, List<string> columnsName) where T : new()
    {
        T obj = new T();
        try
        {
            string columnname = "";
            string value = "";
            PropertyInfo[] Properties;
            Properties = typeof(T).GetProperties();
            foreach (PropertyInfo objProperty in Properties)
            {
                columnname = columnsName.Find(name => name.ToLower() == objProperty.Name.ToLower());
                if (!string.IsNullOrEmpty(columnname))
                {
                    value = row[columnname].ToString();
                    if (!string.IsNullOrEmpty(value))
                    {
                        if (Nullable.GetUnderlyingType(objProperty.PropertyType) != null)
                        {
                            value = row[columnname].ToString().Replace("$", "").Replace(",", "");
                            objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(Nullable.GetUnderlyingType(objProperty.PropertyType).ToString())), null);
                        }
                        else
                        {
                            value = row[columnname].ToString().Replace("%", "");
                            objProperty.SetValue(obj, Convert.ChangeType(value, Type.GetType(objProperty.PropertyType.ToString())), null);
                        }
                    }
                }
            }
            return obj;
        }
        catch(Exception ex)
        {
            logger.Error(ex, string.Concat("Errore nella getObject<T> ", ex.Message.ToString()));
            return obj;
        }
    }

    private DataTable ToDataTable<T>(IList<T> data)
    {
        DataTable table = new DataTable();

        try
        {
            PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));

            for (int i = 0; i < props.Count; i++)
            {
                PropertyDescriptor prop = props[i];
                table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
            }
            object[] values = new object[props.Count];
            foreach (T item in data)
            {
                for (int i = 0; i < values.Length; i++)
                    values[i] = props[i].GetValue(item) ?? DBNull.Value;
                table.Rows.Add(values);
            }
            return table;
        }
        catch(Exception ex)
        {
            logger.Error(ex, string.Concat("Errore nella ToDataTable ", ex.Message.ToString()));

            return table;

        }
    }
}