using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Text;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.BusinessLayer;
using ContrattoSei.Utilities;
using ceTe.DynamicPDF.PageElements;
using System.Collections.Generic;

namespace PDFGenerator.Presentation.Section
{
    class S180 : ISezione
    {


        private string _header = "";

        public string Header
        {
            get { return _header; }
            set { _header = value; }
        }


        private TipoReport _tipologiaReport;
        public TipoReport TipologiaReport
        {
            get { return _tipologiaReport; }
            set { _tipologiaReport = value; }
        }

        private string _testoIntroduttivo = string.Empty;
        public string TestoIntroduttivo
        {
            get { return _testoIntroduttivo; }
            set { _testoIntroduttivo = value; }
        }

        private string _testoChiusura = string.Empty;
        public string TestoChiusura
        {
            get { return _testoChiusura; }
            set { _testoChiusura = value; }
        }


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

        #region ISezione Members

        #region ATTENZIONE NON PIU VALIDA
        public void writeSezione(DataThread dataThread)
        {

            DocumentPDF document = dataThread.DocumentPDF;
            DataSetS180 set = (DataSetS180)dataThread.Data.DatiSezione;



            //20180820 CR Professionali: la tabella non va visualizzata per i clienti professionali
            if (!dataThread.IsProffesionalClient)
            {

                if (set.Tables["ProdottiAltaComplessita"].Rows.Count > 0)
                {
                    //20180913 Commentato blocco (eventualmente, si dovrebbe mettere come ramo ELSE nel prossimo blocco if
                    //20180817 Se non c'è spazio nella pagina corrente
                    //if (!document.checkMargin(400))
                    //{
                    //    document.changePage();
                    //    document.nextPage(document.getMargineLeft());
                    //    //document.addPage();

                    //}
                    //--20180817
                    //--20180913

                    // 20181219 Fix bug di spaginazione della tabella complessità alta, in caso venga stampata a cavallo di due pagine
                    if (!document.LastSectionCheckIn.Equals("S179"))  // Se non si è passati per la S179
                    {
                        document.changePage();
                        document.nextPage(document.getMargineLeft());
                    }
                    else
                    {
                        if (document.getLastPos() >= 500)
                        {
                            document.changePage();
                            document.nextPage(document.getMargineLeft());
                        }
                    }
                    //MIFID2 20180522 DA MODIFICARE INTRODUCENDO UNA NUOVA PROPRIETA' in DocumentPDF (LastSectionPrinted) sulla quale si fa il controllo se è stata stampata o meno...
                    //if (document.getLastPos() > 700)
                    //if (!document.LastSectionCheckIn.Equals("S179")) // Se non si è passati per la S179
                    //{
                    //    document.changePage();
                    //    document.nextPage(document.getMargineLeft());
                    //}
                    //--MIFID2
                    //--20181219

                    ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();

                    document.setSezTitoloDiagnosi(dataThread.SezioneReport.Titolo);

                    string nota1 = dataThread.SezioneReport.Nota;
                    string nota2 = dataThread.SezioneReport.NotaAlternativa;

                    string tempTesto = dataThread.SezioneReport.TestoIntroduttivo;

                    document.setChapterHeader(tempTesto.Replace("$/Banca/$", dataThread.NomeRete).Replace("Sanpaolo Invest", "Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest"), 0, 520, 8);

                    document.setHeaderSpace(5);

                    DatiTabella datitab = new DatiTabella();

                    #region Tabella Dettaglio Prodotti
                    Tabella tab = new Tabella(document.getMargineLeft(), document.getLastPos());
                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
                    tab.Header = true;
                    tab.LineaFineTabella = false;
                    tab.Datasource = datitab.table;

                    datitab.table = set.Tables["ProdottiAltaComplessita"];

                    datitab.setY(document.getLastPos());
                    //datitab.setIsLinee(1);

                    tab.Colonne.Add(new Colonna("CodiceContratto", "Codice Contratto", 120, TipoAllineamento.SINISTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("NomeProdotto", "Nome Prodotto", 205, TipoAllineamento.SINISTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("Controvalore", "Controvalore* (€)", 103, TipoAllineamento.DESTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("Peso", "Peso** (%)", 92, TipoAllineamento.DESTRA, false, 7, false));

                    tab.AltezzaCella = 23;

                    datitab.setCellSpace(0);

                    //setta posizione tabella
                    tab.Draw(datitab, document);

                    float dim = datitab.GetRowDim() * (datitab.getNumRow() + 1);
                    #endregion

                    document.setLastPos(dim);

                    #region Tabella Totale Prodotti

                    datitab = new DatiTabella();

                    //Tabella tabProdotti = new Tabella(document.getMargineLeft(), document.getLastPos() + tab.AltezzaTabella + 30);
                    Tabella tabProdotti = new Tabella(document.getMargineLeft(), document.getLastPos());
                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
                    tabProdotti.AltezzaCella = 23;
                    tabProdotti.Header = false;
                    tabProdotti.LineaFineTabella = false;
                    tabProdotti.Datasource = set.Tables["TotaleProdotti"];
                    datitab.table = set.Tables["TotaleProdotti"];

                    //datitab.setY(document.getLastPos());
                    //datitab.setIsLinee(1);

                    tabProdotti.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                    tabProdotti.Colonne.Add(new Colonna("TotaleControvalore", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                    tabProdotti.Colonne.Add(new Colonna("TotalePeso", "", 92, TipoAllineamento.DESTRA, true, 7, true));

                    tabProdotti.Draw(datitab, document);
                    #endregion

                    // setto la posizione aggiornata
                    //dim = datitab.GetRowDim();
                    //document.setLastPos(dim + 5);

                    #region Tabella Totale Patrimonio
                    datitab = new DatiTabella();

                    Tabella tabPatrimonio = new Tabella(document.getMargineLeft(), document.getLastPos() + tabProdotti.AltezzaCella + 3);
                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
                    tabPatrimonio.AltezzaCella = 23;
                    tabPatrimonio.Header = false;
                    tabPatrimonio.LineaFineTabella = false;
                    tabPatrimonio.Datasource = set.Tables["TotalePatrimonio"];
                    datitab.table = set.Tables["TotalePatrimonio"];

                    //datitab.setY(document.getLastPos());
                    //datitab.setIsLinee(1);

                    tabPatrimonio.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                    tabPatrimonio.Colonne.Add(new Colonna("TotaleControvalore", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                    tabPatrimonio.Colonne.Add(new Colonna("TotalePeso", "", 92, TipoAllineamento.DESTRA, true, 7, true));

                    tabPatrimonio.Draw(datitab, document);
                    #endregion

                    //20180913 Aggiunto perché la tabella potrebbe essere molto lunga, quindi rimandare alla pagina successiva.
                    page = document.getCurrentPage();

                    #region Note
                    /*********************** Modifica per Trimestrale sovrapposizione note con tabella - Pino **************************/
                    //document.setLastPos(datitab.getNumRow());

                    if (datitab.getNumRow() == 1)
                        document.setLastPos(datitab.getNumRow() - 1);
                    else
                        document.setLastPos(datitab.GetRowDim() * (datitab.getNumRow() + 1));
                    /***************************************************************************************************************/

                    if (!string.IsNullOrEmpty(nota1))
                    {

                        /*************  Modifica per la gestione della nota dinamica in base ai prodotti FAI 12/03/2021 - Pino *********************/
                        string testoNotaFAI = " Il controvalore dei fondi Perennius Global Yield Private 2011, Idea Crescita Globale, FAI Private Debt Special Opportunities e FAI Private Markets Insight esposto nella rendicontazione è determinato tramite il NAV trimestrale al #dataFAI# (ultimo disponibile alla data di predisposizione del presente rendiconto) al netto delle distribuzioni avvenute nel trimestre e accreditate sul conto corrente indicato in fase di sottoscrizione.";

                        DSNotaFAI _dsNotaFAI = new DSNotaFAI();

                        List<SessionStruct> tabelleSessione = new List<SessionStruct>();
                        DataTable _dt = new DataTable();
                        _dt.TableName = "[C6StagingPeriodico].[ClienteProdottiFAI]";
                        tabelleSessione.Add(new SessionStruct(string.Concat("[C6StagingPeriodico].[ClienteProdottiFAI]", "|", dataThread.Rete, "|", dataThread.CodiceFiscale), _dt));

                        DataSectionResult result = _dsNotaFAI.getDataSection(tabelleSessione, "[C6StagingPeriodico].[ClienteProdottiFAI]", dataThread);
                        DataSetNotaFAI setNotaFAI = (DataSetNotaFAI)result.DatiSezione;

                        string _flagNotaFAI = setNotaFAI.FlagNotaFAI.Rows[0][0].ToString();
                        if (_flagNotaFAI == "S")
                        {
                            // Sostituisco al marcatore nella variabile testoNotaFaI il valore presente nel datatable
                            testoNotaFAI = testoNotaFAI.Replace("#dataFAI#", setNotaFAI.FlagNotaFAI.Rows[0][1].ToString());
                            nota1 += testoNotaFAI;
                        }
                        /******************************************************************************************************************************/

                        FormattedTextArea text = new FormattedTextArea(nota1, document.getMargineLeft(), document.getLastPos() + tabPatrimonio.AltezzaCella - 5, 510, 50, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), 7, false);
                        text.Height = text.GetRequiredHeight();
                        text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
                        page.Elements.Add(text);
                        dim = text.Height;
                    }

                    if (!string.IsNullOrEmpty(nota2))
                    {
                        FormattedTextArea text = new FormattedTextArea(nota2, document.getMargineLeft(), document.getLastPos() + tabPatrimonio.AltezzaCella + dim, 510, 50, new ceTe.DynamicPDF.FontFamily("pipp", Globals.OpenTypeFontVerdana, Globals.OpenTypeFontVerdanaB, Globals.OpenTypeFontVerdanaZ, Globals.OpenTypeFontVerdanaZ), 7, false);
                        text.Height = text.GetRequiredHeight();
                        text.Style.Paragraph.Align = ceTe.DynamicPDF.TextAlign.Justify;
                        page.Elements.Add(text);
                    }
                    #endregion

                    document.setLastPos(document.getLastPos() + 500);
                }
                else
                {
                    document.setLastPos(document.getLastPos() + 500);

                }
            }
        }
        #endregion

        public void writeSezioneNew(DataThread dataThread)
        {
            DocumentPDF document = dataThread.DocumentPDF;
            DataSetS180 set = (DataSetS180)dataThread.Data.DatiSezione;

            //20180820 CR Professionali: la tabella non va visualizzata per i clienti professionali
            if (!dataThread.IsProffesionalClient)
            {
                if (set.Tables["DettaglioComplessita"].Rows.Count > 0)
                {
                    // 20181219 Fix bug di spaginazione della tabella complessità alta, in caso venga stampata a cavallo di due pagine
                    //if (!document.LastSectionCheckIn.Equals("S179"))  // Se non si è passati per la S179
                        //if (!document.LastSectionCheckIn.Equals("S184"))  // Se non si è passati per la S184 o per la 179
                        //{
                        //    document.changePage();
                        //    document.nextPage(document.getMargineLeft());
                        //}
                        //else
                        //{
                        //    if (document.getLastPos() >= 500)
                        //    {
                        //        document.changePage();
                        //        document.nextPage(document.getMargineLeft());
                        //    }
                        //}

                    if (document.getLastPos() >= 940)   //840
                    {
                        document.changePage();
                        document.nextPage(document.getMargineLeft());
                    }

                    ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();

                    document.setSezTitoloDiagnosi(dataThread.SezioneReport.Titolo);

                    string nota1 = dataThread.SezioneReport.Nota;
                    string nota2 = dataThread.SezioneReport.NotaAlternativa;

                    DataRow[] row = set.Tables["DettaglioComplessita"].Select("Ordine=1");

                    string testo = string.Empty;
                    if (row.Length > 0)
                    {
                        testo = row[0]["Descrizione"].ToString();
                    }
                    document.setChapterHeader(testo, 0, 520, 8);
                    //string tempTesto = dataThread.SezioneReport.TestoIntroduttivo;

                    //document.setChapterHeader(tempTesto.Replace("$/Banca/$", dataThread.NomeRete).Replace("Sanpaolo Invest", "Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest"), 0, 520, 8);

                    document.setHeaderSpace(5);

                    DatiTabella datitab = new DatiTabella();

                    #region Tabella Dettaglio Complessita Prodotti Alta
                    Tabella tab = new Tabella(document.getMargineLeft(), document.getLastPos());
                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
                    tab.Header = true;
                    tab.LineaFineTabella = false;
                    tab.Datasource = datitab.table;


                    //Questa FIX serve per far comparire le intestazioni di tabella valide per tutte le altre qualora non ci fossero dati per la tabella DettaglioComplessita
                    //in tal caso l'altezza della cella è settata a 1 anche per il totale al fine di far salire sopra il resto della tabella
                    //INTESTAZIONE
                    int altezzaIntestazione;
                    if (set.Tables["DettaglioComplessita"].Select("Ordine=1").Length > 0)
                    {
                        datitab.table = set.Tables["DettaglioComplessita"].Select("Ordine=1").CopyToDataTable();
                        altezzaIntestazione = 23;
                        tab.AltezzaCella = altezzaIntestazione;
                        datitab.setCellSpace(0);
                    }
                    else
                    {
                        var emptyDt = new DataTable("DettaglioComplessita");
                        emptyDt.Columns.Add(new DataColumn("Complessita", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("Ordine", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("NomeProdotto", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("Controvalore", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("Descrizione", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("CodiceContratto", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("Peso", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("ControvaloreDecimale", typeof(System.String)));
                        emptyDt.Columns.Add(new DataColumn("PesoDecimale", typeof(System.String)));

                        emptyDt.Rows.Add();

                        datitab.table = emptyDt;
                        altezzaIntestazione = 1;
                        tab.AltezzaCella = altezzaIntestazione;
                        
                    }

                    datitab.setY(document.getLastPos());

                    tab.Colonne.Add(new Colonna("CodiceContratto", "Codice Contratto", 80, TipoAllineamento.SINISTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("NomeProdotto", "Nome Prodotto", 148, TipoAllineamento.SINISTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("Complessita", "Complessità", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("Controvalore", "Controvalore* (€)", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tab.Colonne.Add(new Colonna("Peso", "Peso** (%)", 92, TipoAllineamento.DESTRA, false, 7, false));

                    //setta posizione tabella
                    tab.Draw(datitab, document);

                    float dim = datitab.GetRowDim() * datitab.getNumRow();

                    #endregion

                    document.setLastPos(dim + altezzaIntestazione);

                    #region Tabella Totale Complessita Prodotti Alta

                    datitab = new DatiTabella();

                    //Tabella tabProdotti = new Tabella(document.getMargineLeft(), document.getLastPos() + tab.AltezzaTabella + 30);
                    Tabella tabProdottiAlta = new Tabella(document.getMargineLeft(), document.getLastPos());



                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tab.HeaderFont = 8;
                    //tabProdottiAlta.AltezzaCella = 23;
                    tabProdottiAlta.Header = false;
                    tabProdottiAlta.LineaFineTabella = false;
                    tabProdottiAlta.Datasource = set.Tables["TotaliComplessita"];
                    

                    if (set.Tables["TotaliComplessita"].Select("Ordine=1").Length > 0)
                    {
                        tabProdottiAlta.AltezzaCella = 23;

                        datitab.table = set.Tables["TotaliComplessita"].Select("Ordine=1").CopyToDataTable();
                        //datitab.setY(dim);
                        datitab.setY(document.getLastPos());

                        tabProdottiAlta.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                        tabProdottiAlta.Colonne.Add(new Colonna("SommaControvalore", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                        tabProdottiAlta.Colonne.Add(new Colonna("SommaPesi", "", 92, TipoAllineamento.DESTRA, true, 7, true));



                        tabProdottiAlta.Draw(datitab, document);

                    }
                    else
                    {
                        datitab.table = new DataTable();
                        tabProdottiAlta.AltezzaCella = 1;
                    }


                    float dimTA = datitab.GetRowDim() * (datitab.getNumRow() > 0 ? datitab.getNumRow() : 1);
                    #endregion

                    document.setLastPos(0);


                    #region Tabella Dettaglio Complessita Prodotti MedioAlta Alta
                    DatiTabella datitabMAA = new DatiTabella();
                    Tabella tabMedioAlta = new Tabella(document.getMargineLeft(), document.getLastPos());


                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabMedioAlta.HeaderFont = 8;
                    tabMedioAlta.Header = false;
                    tabMedioAlta.LineaFineTabella = false;
                    tabMedioAlta.Datasource = datitabMAA.table;

                    var x = set.Tables["DettaglioComplessita"].Select("Ordine=2");

                    if (x.Length > 0)
                        datitabMAA.table = set.Tables["DettaglioComplessita"].Select("Ordine=2").CopyToDataTable();
                    else
                    {
                        var pippo = new DataTable();
                        pippo.Columns.Add(new DataColumn("CodiceContratto", typeof(System.String)));
                        pippo.Columns.Add(new DataColumn("NomeProdotto", typeof(System.String)));
                        pippo.Columns.Add(new DataColumn("Complessita", typeof(System.String)));
                        pippo.Columns.Add(new DataColumn("Controvalore", typeof(System.String)));
                        pippo.Columns.Add(new DataColumn("Peso", typeof(System.String)));


                        pippo.Rows.Add();
                        datitabMAA.table = pippo;
                    }

                    datitabMAA.setY(document.getLastPos());


                    tabMedioAlta.Colonne.Add(new Colonna("CodiceContratto", "Codice Contratto", 80, TipoAllineamento.SINISTRA, false, 7, false));
                    tabMedioAlta.Colonne.Add(new Colonna("NomeProdotto", "Nome Prodotto", 148, TipoAllineamento.SINISTRA, false, 7, false));
                    tabMedioAlta.Colonne.Add(new Colonna("Complessita", "Complessità", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tabMedioAlta.Colonne.Add(new Colonna("Controvalore", "Controvalore* (€)", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tabMedioAlta.Colonne.Add(new Colonna("Peso", "Peso** (%)", 92, TipoAllineamento.DESTRA, false, 7, false));

                    tabMedioAlta.AltezzaCella = 23;

                    datitabMAA.setCellSpace(0);

                    //setta posizione tabella
                    tabMedioAlta.Draw(datitabMAA, document);

                    dim = datitabMAA.GetRowDim() * (datitabMAA.getNumRow() - 1);


                    #endregion

                    document.setLastPos(dim);


                    #region Tabella Totale Complessita Prodotti Medio Alta Alta
                    DatiTabella datitabTotMAA = new DatiTabella();



                    //Tabella tabProdotti = new Tabella(document.getMargineLeft(), document.getLastPos() + tab.AltezzaTabella + 30);
                    Tabella tabProdottiMedioAlta = new Tabella(document.getMargineLeft(), document.getLastPos());

                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabProdottiMedioAlta.HeaderFont = 8;
                    tabProdottiMedioAlta.AltezzaCella = 23;
                    tabProdottiMedioAlta.Header = false;
                    tabProdottiMedioAlta.LineaFineTabella = false;
                    tabProdottiMedioAlta.Datasource = datitabTotMAA.table;


                    var xTot = set.Tables["TotaliComplessita"].Select("Ordine=2");

                    if (x.Length > 0)
                        datitabTotMAA.table = set.Tables["TotaliComplessita"].Select("Ordine=2").CopyToDataTable();
                    else
                    {
                        var pippoTot = new DataTable();
                        pippoTot.Columns.Add(new DataColumn("Descrizione", typeof(System.String)));
                        pippoTot.Columns.Add(new DataColumn("SommaControvalore", typeof(System.String)));
                        pippoTot.Columns.Add(new DataColumn("SommaPesi", typeof(System.String)));


                        pippoTot.Rows.Add();
                        datitabTotMAA.table = pippoTot;
                    }

                    tabProdottiMedioAlta.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                    tabProdottiMedioAlta.Colonne.Add(new Colonna("SommaControvalore", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                    tabProdottiMedioAlta.Colonne.Add(new Colonna("SommaPesi", "", 92, TipoAllineamento.DESTRA, true, 7, true));

                    tabProdottiMedioAlta.Draw(datitabTotMAA, document);
                    #endregion

                    document.setLastPos(0);

                    #region Tabella Dettaglio Complessita Prodotti MedioBasso MedioAlta Alta
                    DatiTabella datitabMAMBA = new DatiTabella();


                    Tabella tabMedioBassoMeadioAltaAlta = new Tabella(document.getMargineLeft(), document.getLastPos());

                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabMedioBassoMeadioAltaAlta.HeaderFont = 8;
                    tabMedioBassoMeadioAltaAlta.Header = false;
                    tabMedioBassoMeadioAltaAlta.LineaFineTabella = false;
                    tabMedioBassoMeadioAltaAlta.Datasource = datitabMAMBA.table;

                    datitabMAMBA.table = set.Tables["DettaglioComplessita"].Select("Ordine=3").CopyToDataTable();

                    datitabMAMBA.setY(document.getLastPos());


                    tabMedioBassoMeadioAltaAlta.Colonne.Add(new Colonna("CodiceContratto", "Codice Contratto", 80, TipoAllineamento.SINISTRA, false, 7, false));
                    tabMedioBassoMeadioAltaAlta.Colonne.Add(new Colonna("NomeProdotto", "Nome Prodotto", 148, TipoAllineamento.SINISTRA, false, 7, false));
                    tabMedioBassoMeadioAltaAlta.Colonne.Add(new Colonna("Complessita", "Complessità", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tabMedioBassoMeadioAltaAlta.Colonne.Add(new Colonna("Controvalore", "Controvalore* (€)", 100, TipoAllineamento.DESTRA, false, 7, false));
                    tabMedioBassoMeadioAltaAlta.Colonne.Add(new Colonna("Peso", "Peso** (%)", 92, TipoAllineamento.DESTRA, false, 7, false));

                    tabMedioBassoMeadioAltaAlta.AltezzaCella = 23;

                    datitabMAMBA.setCellSpace(0);

                    //setta posizione tabella
                    tabMedioBassoMeadioAltaAlta.Draw(datitabMAMBA, document);

                    dim = datitabMAMBA.GetRowDim() * (datitabMAMBA.getNumRow() - 1);
                    #endregion

                    document.setLastPos(dim);


                    #region Tabella Totale Complessita Prodotti Medio Bassa Medio Alta Alta
                    DatiTabella datitabTotMBMAA = new DatiTabella();
                    Tabella tabProdottiMedioBMAA = new Tabella(document.getMargineLeft(), document.getLastPos());

                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabProdottiMedioBMAA.HeaderFont = 8;
                    tabProdottiMedioBMAA.AltezzaCella = 23;
                    tabProdottiMedioBMAA.Header = false;
                    tabProdottiMedioBMAA.LineaFineTabella = false;
                    tabProdottiMedioBMAA.Datasource = datitabTotMBMAA.table;
                    datitabTotMBMAA.table = set.Tables["TotaliComplessita"].Select("Ordine=3").CopyToDataTable(); ;



                    tabProdottiMedioBMAA.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                    tabProdottiMedioBMAA.Colonne.Add(new Colonna("SommaControvalore", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                    tabProdottiMedioBMAA.Colonne.Add(new Colonna("SommaPesi", "", 92, TipoAllineamento.DESTRA, true, 7, true));

                    tabProdottiMedioBMAA.Draw(datitabTotMBMAA, document);

                    dim = datitabTotMBMAA.GetRowDim() * (datitabTotMBMAA.getNumRow() - 1);
                    #endregion

                    //document.setLastPos(dim - 10);



                    #region Tabella Totale Generale
                    DatiTabella datitabTotGenerale = new DatiTabella();
                    Tabella tabTotGenerale = new Tabella(document.getMargineLeft(), document.getLastPos());


                    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabTotGenerale.HeaderFont = 8;
                    tabTotGenerale.AltezzaCella = 23;
                    tabTotGenerale.Header = false;
                    tabTotGenerale.LineaFineTabella = false;
                    tabTotGenerale.Datasource = datitabTotGenerale.table;
                    datitabTotGenerale.table = set.Tables["TotaleGenerale"];

                    tabTotGenerale.Colonne.Add(new Colonna("Descrizione", "", 328, TipoAllineamento.SINISTRA, true, 7, true));
                    tabTotGenerale.Colonne.Add(new Colonna("TotalePatrimonioCTV", "", 100, TipoAllineamento.DESTRA, true, 7, true));
                    tabTotGenerale.Colonne.Add(new Colonna("TotalePatrimonioPesi", "", 92, TipoAllineamento.DESTRA, true, 7, true));

                    //tabTotGenerale.Draw(datitabTotGenerale, document);


                    #endregion

                    //Rimozione della pagina bianca dopo l'ultima
                    var xxxx = document.getLastPos();
                    document.setLastPos(document.getLastPos() * -1);



                }
            }
        }

        #endregion
    }
}