using System;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportCommon;
using System.Collections.Generic;
using Consulenza.ReportWriter.Business.CHART_PDF;
using Consulenza.ReportWriter.Business.Entity;
using System.Linq;
using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica;

namespace Consulenza.ReportWriter.Manager.Section.Unica
{
    /// <summary>
    /// S44.RischioMercatoVSDiversificazione idSezione = 87
    /// </summary>
    public class S44 : Entity.Section
    {
        private bool _visualizzaAltriIstituti;
        private bool _presenzaNotaPatrimonioCasa = false;
        private bool _presenzaNotaPatrimonioTerzi = false;
        private bool _presenzaNotaEccessivaAdeguatezza = false;

        private bool _visualizzaRischioMercatoVsDiversificazione = false; //Vecchia visualizzazione
        private bool _visualizzaRischioMercatoVsDivPortafoglio = false;
        private bool _visualizzaRischioMercatoVsDivRischioMercato = false;

        public S44(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                _visualizzaAltriIstituti = GetOption<Opzione4>().Valore;
                _visualizzaRischioMercatoVsDivPortafoglio = GetOption<Opzione4_7>().Valore;
                _visualizzaRischioMercatoVsDivRischioMercato = GetOption<Opzione4_8>().Valore;

                //Adriano 20180502: dalle richieste non è specificato cosa succede se non viene scelta nessuna delle due schede, nel dubbio, forzo la visualizzazione della prima
                if (!_visualizzaRischioMercatoVsDivPortafoglio && !_visualizzaRischioMercatoVsDivRischioMercato)
                {
                    _visualizzaRischioMercatoVsDivPortafoglio = true;
                    _visualizzaRischioMercatoVsDivRischioMercato = true;
                }
                //--Adriano 20180502

                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S44", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        protected override sealed void Draw()
        {
            var dati = GetDataSet();
            var testi = GetText();
            var nota = Helper.ReplaceVariables(GetNote1(), EnvironmentFacade.ReportEnvironment);
            var series = new List<Serie>();
            var series1 = new List<Serie>();
            var series2 = new List<Serie>();

            #region Rischio Mercato vs Diversificazione   

            if (_visualizzaRischioMercatoVsDiversificazione)
            {
                #region Testo introduttivo

                var intestazione = new ChapterHeadingPDF(
                 "Rischio mercato vs diversificazione",
                 EnvironmentFacade.RendererFacade.XLeftLimit,
                 EnvironmentFacade.RendererFacade.YUpperLimit,
                 EnvironmentFacade.ReportEnvironment.FontFamily);

                // Aggiungo gli elementi
                AddElement(intestazione.ToElement());
                //AddElement(new SpacePDF(20));

                var sTesto = string.Empty;

                if (_visualizzaAltriIstituti)
                    sTesto = testi.Rows[0]["testo1"].ToString();
                else
                    sTesto = testi.Rows[0]["testo2"].ToString();

                var testoIntroduttivo = Helper.ReplaceVariables(sTesto, EnvironmentFacade.ReportEnvironment);

                AddElement(new FormattedTextAreaPDF(testoIntroduttivo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                AddElement(new SpacePDF(20));

                #endregion Testo introduttivo

                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx
                AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 90) { FontBold = true, FontSize = 7 });
                //AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(8));

                #region Grafico VaR Diversificazione
                #region //modifiche nucleo contrattualizzato
                var labelPersonalizzateAsseY = new List<CombinationPDFCustomLabel>();
                foreach (DataRow rowX in dati.Tables["dtSoglieY"].Rows)
                {
                    labelPersonalizzateAsseY.Add(new CombinationPDFCustomLabel { Text = rowX["Testo"].ToString(), Value = Convert.ToDouble(rowX["Valore"]) });
                }
                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx
                var graficoCombination = new CombinationPDF(
                            EnvironmentFacade.ReportEnvironment.ReportId != 6 ?
                                EnvironmentFacade.RendererFacade.XLeftLimit + 150 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
                //var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
                //--Adriano 20180124
                {
                    Height = 200,
                    Width = 350,

                    BackImage = "ChartGradient_VarDiversificazione.png",

                    MarginAxisY = 0,

                    ShowLabelAxisY = true,
                    LabelFormatAxisY = FormatType.Intero,
                    IntervalNumberAxisY = labelPersonalizzateAsseY.Count,
                    StartFromZeroAxisY = true,
                    //                IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    //IndicatorAxisY = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    MaximumValueAxisY = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]) > 27 ? 53 : 30, // 30, // valore fisso 
                    CustomLabelAxisY = labelPersonalizzateAsseY,
                    LabelFormatAxisX = FormatType.Intero,
                    ShowLineAxisX = true,
                    ShowLabelAxisX = true,
                    StartFromZeroAxisX = true,
                    MaximumValueAxisX = 100,
                    IntervalNumberAxisX = 10

                };

                // Adriano 20180125: Se non si tratta di nucleo va tenuto l'indicatore sull'asse Y
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    graficoCombination.IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 };
                }
                #endregion
                // creo le Serie
                var d = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field<int>("NumeroPatrimonio")).CopyToDataTable();
                foreach (DataRow item in d.Rows)
                {
                    if (item["Diversificazione"].ToString() != "n.c." && item["VaRString"].ToString() != "n.c.")
                    {

                        series.Add(
                            new Serie
                            {
                                //il name è fatto così perchè se si stampano 43 e 44 che hanno stessi codicipatrimonio nei grafici, il nome viene registrato e va in errore perchè già presente..
                                Name = series.FirstOrDefault(o => o.Name.Equals(item["CodicePatrimonio"].ToString())) != null ? item["CodicePatrimonio"].ToString() + 1 : item["CodicePatrimonio"].ToString(),
                                Type = Dundas.Charting.WebControl.SeriesChartType.Point,

                                MarkerImage = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                // MarkerSize = 50,
                                Points = new List<Point>() {
                                new Point {
                                    Values = new ValuesPointXY(Convert.ToDouble(item["Diversificazione"]), Convert.ToDouble(item["VaR"])),
                                    ShowLabelAxisY = false,
                                    ShowLabelAxisX = false,
                                    FontSizeLabelAxisX=7,
                                    FontSizeLabelAxisY=7,
                                    Visible = false
                                }
                            }
                            }
                        );

                        bool showMarker = false;
                        if (item["Patrimonio"].ToString().ToLower().Contains("altri"))
                        {
                            if (_visualizzaAltriIstituti)
                            {
                                showMarker = true;
                            }
                        }
                        else
                        {
                            showMarker = true;
                        }

                        if (showMarker)
                        {
                            graficoCombination.Markers.Add(new Marker()
                            {
                                Image = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                Width = 15,
                                Height = 15,
                                Scale = 1,
                                X = Convert.ToDouble(item["Diversificazione"]) > 100 ? 100 : (float)Convert.ToDouble(item["Diversificazione"]),
                                Y = Convert.ToDouble(item["VaR"]) >= 30 ? 30 : (float)Convert.ToDouble(item["VaR"])
                            });
                        }
                    }
                };
                //if (series[0].Points.Count == 0 && graficoCombination.Markers.Count == 0)
                //{

                //}
                // aggiungo le Serie al grafico
                graficoCombination.SeriesCollection = series;

                AddElement(graficoCombination);

                #endregion

                AddElement(new SpacePDF(17));
                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                //AddElement(new FormattedTextAreaPDF("Diversificazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 293) { FontBold = true, FontSize = 7 });
                AddElement(new FormattedTextAreaPDF("Diversificazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(20));

                #region Tabella

                var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0])
                {
                    Style = Style.ConsulenzaUnica,
                    AlternateRow = false,
                    ShowSeparationLines = true,
                    RowHeight = 27,
                    Footer = false,
                    HeaderHeight = 30
                };


                //Adriano 20180125: per i nuclei non va messa la colonna Adeguatezza            
                if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
                {
                    tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella.Columns.Add(new ColumnPDF("Patrimonio", 160, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella.Columns.Add(new ColumnPDF("Controvalore", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("Diversificazione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Diversificazione", "Diversificazione (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                }
                else
                {
                    tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 30, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella.Columns.Add(new ColumnPDF("Patrimonio", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella.Columns.Add(new ColumnPDF("Controvalore", 115, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("Diversificazione", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Diversificazione", "Diversificazione (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella.Columns.Add(new ColumnPDF("Adeguatezza", 65, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7 });
                }


                // cloning entire datasource (changing Grado di copertura(%) type from decimal to string, so its possible to put there "n.c."
                DataTable dtCloned = tabella.DataSource.Clone();
                dtCloned.Columns[8].DataType = typeof(string);
                foreach (DataRow row in tabella.DataSource.Rows)
                {
                    dtCloned.ImportRow(row);
                }
                tabella.DataSource = dtCloned;
                int i = 0;
                foreach (DataRow r in tabella.DataSource.Rows)
                {
                    var colorAdeguatezza = Convert.ToBoolean(r["Adeguatezza"]) ? new ColorPDF(0, 176, 70) : new ColorPDF(255, 0, 0);
                    tabella.Cells[6, i].FontColor = colorAdeguatezza;
                    tabella.Cells[2, i].HorizontalAlignment =
                    tabella.Cells[3, i].HorizontalAlignment =
                    tabella.Cells[4, i].HorizontalAlignment =
                    tabella.Cells[5, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
                    tabella.Cells[4, i].Value = Convert.ToDecimal(r["Diversificazione"].ToString()) == 0 ? "n.c." : Helper.FormatDecimal(r["Diversificazione"].ToString(), 2);
                    if (r["Patrimonio"].ToString().ToLower().Contains("altri"))
                    {
                        tabella.Cells[5, i].Value = "n.c.";
                        tabella.Cells[6, i].FontColor = colorAdeguatezza;
                        //tabella.Cells[6, i].Value = "n.a.";
                    }
                    //r["Patrimonio"] = "aaa";
                    //if ((r["Patrimonio"].ToString().ToLower().Contains("patrimonio altri istituti") ||
                    //    r["Patrimonio"].ToString().ToLower().Contains("patrimonio finanziario complessivo")) &&
                    //    !r["Patrimonio"].ToString().ToLower().EndsWith("*"))
                    //{
                    //    r["Patrimonio"] += "*";
                    //}
                    decimal result = 0;

                    if (Decimal.TryParse(r["GradoCopertura"].ToString(), out result))
                    {
                        if (result == 0)
                        {
                            tabella.Cells[5, i].Value = "n.c.";
                        }
                        else
                        {
                            tabella.Cells[5, i].Value = result.ToString("N");
                        }
                    }
                    else
                    {

                        tabella.Cells[5, i].Value = "n.c.";
                    }
                    i++;
                }

                if (nota.Length > 0)
                {
                    nota = nota.Replace("(*)", "");
                    if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa == false)
                        tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
                        tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi == false && _presenzaNotaPatrimonioCasa)
                        tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                }

                AddElement(tabella);
                //AddElement(new SpacePDF(20));
                //AddElement(new FormattedTextAreaPDF(nota, EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 });

                #endregion


                if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato)
                {
                    AddElement(new SpacePDF(10));
                    string codicemandato = datiSeiUnico.getClienteReport().codiceMandato;
                    string testo = "La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» prende in considerazione il patrimonio detenuto presso $/Banca/$ da tutti i mandati fiduciari associati al medesimo fiduciante a cui appartiene il mandato <" + codicemandato + ">. Gli indicatori «Rischio Mercato (VaR)» e «Diversificazione» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + ".";
                    AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca(testo), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                if (getNotaCopertura5RMRC().Length > 0)
                {
                    AddElement(new SpacePDF(10));
                    AddElement(new FormattedTextAreaPDF(getNotaCopertura5RMRC(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                //Nota di eccessiva adeguatezza
                if (_presenzaNotaEccessivaAdeguatezza)
                {
                    AddElement(new SpacePDF(10));
                    var notaEccessivaAdeguatezza = Helper.ReplaceVariables(testi.Rows[0]["testo4"].ToString(), EnvironmentFacade.ReportEnvironment);
                    AddElement(new FormattedTextAreaPDF(notaEccessivaAdeguatezza, EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 6 });
                }

                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });

                }
                else
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 60) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 60) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 60) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                }
                //AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
            }
            #endregion Rischio Mercato vs Diversificazione

            //Adriano 20180215 Modifica nuovi indicatori
            #region Rischio mercato vs Diversificazione di portafoglio

            if (_visualizzaRischioMercatoVsDivPortafoglio)
            {

                //AddElement(new PagePDF());

                #region Testo introduttivo

                var intestazione1 = new ChapterHeadingPDF(
                "Rischio mercato vs Diversificazione del portafoglio",
                EnvironmentFacade.RendererFacade.XLeftLimit,
                EnvironmentFacade.RendererFacade.YUpperLimit,
                EnvironmentFacade.ReportEnvironment.FontFamily);

                // Aggiungo gli elementi
                AddElement(intestazione1.ToElement());

                //AddElement(new SpacePDF(20));

                var sTesto1 = string.Empty;

                if (_visualizzaAltriIstituti)
                    sTesto1 = testi.Rows[0]["testo1"].ToString();
                else
                    sTesto1 = testi.Rows[0]["testo2"].ToString();

                var testoIntroduttivo1 = Helper.ReplaceVariables(sTesto1, EnvironmentFacade.ReportEnvironment);

                AddElement(new FormattedTextAreaPDF(testoIntroduttivo1, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                AddElement(new SpacePDF(20));

                #endregion
                #region Grafico VaR Diversificazione


                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx
                AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 90) { FontBold = true, FontSize = 7 });
                //AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(8));

                #region modifiche nucleo contrattualizzato
                var labelPersonalizzateAsseY1 = new List<CombinationPDFCustomLabel>();
                foreach (DataRow rowX in dati.Tables["dtSoglieY"].Rows)
                {
                    labelPersonalizzateAsseY1.Add(new CombinationPDFCustomLabel { Text = rowX["Testo"].ToString(), Value = Convert.ToDouble(rowX["Valore"]) });
                }

                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx nel caso dei nuclei, in mancanza dell'indicatore           
                var graficoCombination1 = new CombinationPDF(
                        EnvironmentFacade.ReportEnvironment.ReportId != 6 ?
                            //EnvironmentFacade.RendererFacade.XLeftLimit + 150 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
                            EnvironmentFacade.RendererFacade.XLeftLimit + 115 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)

                //var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
                //--Adriano 20180124
                {
                    Height = 200,
                    Width = 350,

                    BackImage = "ChartGradient_VarDiversificazione.png",

                    MarginAxisY = 0,

                    ShowLabelAxisY = true,
                    LabelFormatAxisY = FormatType.Intero,
                    IntervalNumberAxisY = labelPersonalizzateAsseY1.Count,
                    StartFromZeroAxisY = true,
                    
                    //IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    //IndicatorAxisY = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    MaximumValueAxisY = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]) > 27 ? 53 : 30, // 30, // valore fisso 
                    
                    CustomLabelAxisY = labelPersonalizzateAsseY1,
                    LabelFormatAxisX = FormatType.Intero,
                    ShowLineAxisX = true,
                    ShowLabelAxisX = true,
                    StartFromZeroAxisX = true,
                    MaximumValueAxisX = 100,
                    IntervalNumberAxisX = 10

                };

                // Adriano 20180125: Se non si tratta di nucleo va tenuto l'indicatore sull'asse Y
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    graficoCombination1.IndicatorAxisY = new CombinationPDFIndicator()
                    {
                        Text = "Rischio Mercato (VaR) massimo",
                        Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]),
                        DeltaX = -115,
                        DeltaYText = -10
                    };
                }
                #endregion
                // creo le Serie
                var d1 = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field<int>("NumeroPatrimonio")).CopyToDataTable();
                foreach (DataRow item in d1.Rows)
                {
                    if (item["DiversificazionePortafoglio"].ToString() != "n.c." && item["VaRString"].ToString() != "n.c.")
                    {

                        series1.Add(
                            new Serie
                            {
                                //il name è fatto così perchè se si stampano 43 e 44 che hanno stessi codicipatrimonio nei grafici, il nome viene registrato e va in errore perchè già presente..
                                Name = series1.FirstOrDefault(o => o.Name.Equals(item["CodicePatrimonio"].ToString())) != null ? item["CodicePatrimonio"].ToString() + 1 : item["CodicePatrimonio"].ToString(),
                                Type = Dundas.Charting.WebControl.SeriesChartType.Point,

                                MarkerImage = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                // MarkerSize = 50,
                                Points = new List<Point>() {
                                new Point {
                                    Values = new ValuesPointXY(Convert.ToDouble(item["DiversificazionePortafoglio"]), Convert.ToDouble(item["VaR"])),
                                    ShowLabelAxisY = false,
                                    ShowLabelAxisX = false,
                                    FontSizeLabelAxisX=7,
                                    FontSizeLabelAxisY=7,
                                    Visible = false
                                }
                            }
                            }
                        );

                        bool showMarker = false;
                        if (item["Patrimonio"].ToString().ToLower().Contains("altri"))
                        {
                            if (_visualizzaAltriIstituti)
                            {
                                showMarker = true;
                            }
                        }
                        else
                        {
                            showMarker = true;
                        }

                        if (showMarker)
                        {
                            graficoCombination1.Markers.Add(new Marker()
                            {
                                Image = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                Width = 15,
                                Height = 15,
                                Scale = 1,
                                X = Convert.ToDouble(item["DiversificazionePortafoglio"]) > 100 ? 100 : (float)Convert.ToDouble(item["DiversificazionePortafoglio"]),
                                Y = Convert.ToDouble(item["VaR"]) >= 30 ? 30 : (float)Convert.ToDouble(item["VaR"])
                            });
                        }
                    }
                };
                //if (series[0].Points.Count == 0 && graficoCombination.Markers.Count == 0)
                //{

                //}
                // aggiungo le Serie al grafico
                graficoCombination1.SeriesCollection = series1;

                AddElement(graficoCombination1);

                #endregion

                AddElement(new SpacePDF(17));
                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                //AddElement(new FormattedTextAreaPDF("Diversificazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 293) { FontBold = true, FontSize = 7 });
                AddElement(new FormattedTextAreaPDF("Diversificazione di portafoglio", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(20));

                #region Tabella

                var tabella1 = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0])
                {
                    Style = Style.ConsulenzaUnica,
                    AlternateRow = false,
                    ShowSeparationLines = true,
                    RowHeight = 27,
                    Footer = false,
                    HeaderHeight = 30
                };


                //Adriano 20180125: per i nuclei non va messa la colonna Adeguatezza            
                if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
                {
                    tabella1.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella1.Columns.Add(new ColumnPDF("Patrimonio", 160, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella1.Columns.Add(new ColumnPDF("Controvalore", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("Diversificazione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DiversificazionePortafoglio", "Diversificazione<br>di portafoglio") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                }
                else
                {
                    tabella1.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 30, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella1.Columns.Add(new ColumnPDF("Patrimonio", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella1.Columns.Add(new ColumnPDF("Controvalore", 115, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("Diversificazione", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DiversificazionePortafoglio", "Diversificazione<br>di portafoglio") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella1.Columns.Add(new ColumnPDF("Adeguatezza", 65, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7 });
                }


                // cloning entire datasource (changing Grado di copertura(%) type from decimal to string, so its possible to put there "n.c."
                var dtCloned1 = tabella1.DataSource.Clone();
                dtCloned1.Columns[8].DataType = typeof(string);
                foreach (DataRow row in tabella1.DataSource.Rows)
                {
                    dtCloned1.ImportRow(row);
                }
                tabella1.DataSource = dtCloned1;
                var index1 = 0;
                foreach (DataRow r in tabella1.DataSource.Rows)
                {
                    var colorAdeguatezza = Convert.ToBoolean(r["Adeguatezza"]) ? new ColorPDF(0, 176, 70) : new ColorPDF(255, 0, 0);
                    tabella1.Cells[6, index1].FontColor = colorAdeguatezza;
                    tabella1.Cells[2, index1].HorizontalAlignment =
                    tabella1.Cells[3, index1].HorizontalAlignment =
                    tabella1.Cells[4, index1].HorizontalAlignment =
                    tabella1.Cells[5, index1].HorizontalAlignment = HorizontalAlignmentType.Destra;
                    tabella1.Cells[4, index1].Value = Convert.ToDecimal(r["DiversificazionePortafoglio"].ToString()) == 0 ? "n.c." : Helper.FormatDecimal(r["DiversificazionePortafoglio"].ToString(), 2);
                    if (r["Patrimonio"].ToString().ToLower().Contains("altri"))
                    {
                        tabella1.Cells[5, index1].Value = "n.c.";
                        tabella1.Cells[6, index1].FontColor = colorAdeguatezza;
                        //tabella.Cells[6, index1].Value = "n.a.";
                    }
                    //r["Patrimonio"] = "aaa";
                    //if ((r["Patrimonio"].ToString().ToLower().Contains("patrimonio altri istituti") ||
                    //    r["Patrimonio"].ToString().ToLower().Contains("patrimonio finanziario complessivo")) &&
                    //    !r["Patrimonio"].ToString().ToLower().EndsWith("*"))
                    //{
                    //    r["Patrimonio"] += "*";
                    //}
                    decimal result = 0;

                    if (Decimal.TryParse(r["GradoCopertura"].ToString(), out result))
                    {
                        if (result == 0)
                        {
                            tabella1.Cells[5, index1].Value = "n.c.";
                        }
                        else
                        {
                            tabella1.Cells[5, index1].Value = result.ToString("N");
                        }
                    }
                    else
                    {

                        tabella1.Cells[5, index1].Value = "n.c.";
                    }
                    index1++;
                }

                if (nota.Length > 0)
                {
                    nota = nota.Replace("(*)", "");
                    if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa == false)
                        tabella1.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
                        tabella1.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi == false && _presenzaNotaPatrimonioCasa)
                        tabella1.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                }

                AddElement(tabella1);
                //AddElement(new SpacePDF(20));
                //AddElement(new FormattedTextAreaPDF(nota, EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 });

                #endregion


                if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato)
                {
                    AddElement(new SpacePDF(10));
                    string codicemandato = datiSeiUnico.getClienteReport().codiceMandato;
                    string testo = "La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» prende in considerazione il patrimonio detenuto presso $/Banca/$ da tutti i mandati fiduciari associati al medesimo fiduciante a cui appartiene il mandato <" + codicemandato + ">. Gli indicatori «Rischio Mercato (VaR)» e «Diversificazione» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + ".";
                    AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca(testo), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                if (getNotaCopertura5RMRC().Length > 0)
                {
                    AddElement(new SpacePDF(10));
                    AddElement(new FormattedTextAreaPDF(getNotaCopertura5RMRC(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                //Nota di eccessiva adeguatezza
                if (_presenzaNotaEccessivaAdeguatezza)
                {
                    AddElement(new SpacePDF(10));
                    var notaEccessivaAdeguatezza = Helper.ReplaceVariables(testi.Rows[0]["testo4"].ToString(), EnvironmentFacade.ReportEnvironment);
                    AddElement(new FormattedTextAreaPDF(notaEccessivaAdeguatezza, EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 6 });
                }
                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 35) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 35) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 35) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });

                }
                else
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 60) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 60) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 60) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                }

                //AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });

                //--Adriano 20180124
            }
            #endregion Rischio mercato vs Diversificazione di portafoglio


            #region Rischio Mercato vs Diversificazione Rischio Mercato

            if (_visualizzaRischioMercatoVsDivRischioMercato)
            {
                //Se è stata visualizzata la sezione precedente "Portafoglio" va aggiunta una nuova pagina
                if (_visualizzaRischioMercatoVsDivPortafoglio)
                    AddElement(new PagePDF());

                #region Testo introduttivo

                AddElement(new SpacePDF(12));
                var intestazione2 = new ChapterHeadingPDF(
                    "Rischio mercato vs Diversificazione del rischio mercato",
                    EnvironmentFacade.RendererFacade.XLeftLimit,
                    EnvironmentFacade.RendererFacade.YUpperLimit,
                    EnvironmentFacade.ReportEnvironment.FontFamily);

                // Aggiungo gli elementi
                AddElement(intestazione2.ToElement());

                var sTesto2 = string.Empty;

                if (_visualizzaAltriIstituti)
                    sTesto2 = testi.Rows[0]["testo1"].ToString();
                else
                    sTesto2 = testi.Rows[0]["testo2"].ToString();

                var testoIntroduttivo2 = Helper.ReplaceVariables(sTesto2, EnvironmentFacade.ReportEnvironment);

                AddElement(new FormattedTextAreaPDF(testoIntroduttivo2, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                AddElement(new SpacePDF(20));

                #endregion

                #region Grafico VaR Diversificazione

                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx
                AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 90) { FontBold = true, FontSize = 7 });
                //AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(8));

                #region //modifiche nucleo contrattualizzato
                var labelPersonalizzateAsseY2 = new List<CombinationPDFCustomLabel>();
                foreach (DataRow rowX in dati.Tables["dtSoglieY"].Rows)
                {
                    labelPersonalizzateAsseY2.Add(new CombinationPDFCustomLabel { Text = rowX["Testo"].ToString(), Value = Convert.ToDouble(rowX["Valore"]) });
                }
                //Adriano 20180124: per centrare il grafico, che risulta troppo a dx
                var graficoCombination2 = new CombinationPDF(
                            EnvironmentFacade.ReportEnvironment.ReportId != 6 ?
                                //EnvironmentFacade.RendererFacade.XLeftLimit + 150 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
                                EnvironmentFacade.RendererFacade.XLeftLimit + 115 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
                //var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
                //--Adriano 20180124
                {
                    Height = 200,
                    Width = 350,

                    BackImage = "ChartGradient_VarDiversificazione.png",

                    MarginAxisY = 0,

                    ShowLabelAxisY = true,
                    LabelFormatAxisY = FormatType.Intero,
                    IntervalNumberAxisY = labelPersonalizzateAsseY2.Count,
                    StartFromZeroAxisY = true,
                    
                    //IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    //IndicatorAxisY = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
                    MaximumValueAxisY = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]) > 27 ? 53 : 30, // 30, // valore fisso 
                    CustomLabelAxisY = labelPersonalizzateAsseY2,
                    LabelFormatAxisX = FormatType.Intero,
                    ShowLineAxisX = true,
                    ShowLabelAxisX = true,
                    StartFromZeroAxisX = true,
                    MaximumValueAxisX = 100,
                    IntervalNumberAxisX = 10

                };

                // Adriano 20180125: Se non si tratta di nucleo va tenuto l'indicatore sull'asse Y
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    graficoCombination2.IndicatorAxisY = new CombinationPDFIndicator()
                    {
                        Text = "Rischio Mercato (VaR) massimo",
                        Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]),
                        DeltaX = -115,
                        DeltaYText = -10
                    };
                }
                #endregion
                // creo le Serie
                var d2 = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field<int>("NumeroPatrimonio")).CopyToDataTable();
                foreach (DataRow item in d2.Rows)
                {
                    if (item["DiversificazioneRischioMercato"].ToString() != "n.c." && item["VaRString"].ToString() != "n.c.")
                    {

                        series2.Add(
                            new Serie
                            {
                                //il name è fatto così perchè se si stampano 43 e 44 che hanno stessi codicipatrimonio nei grafici, il nome viene registrato e va in errore perchè già presente..
                                Name = series2.FirstOrDefault(o => o.Name.Equals(item["CodicePatrimonio"].ToString())) != null ? item["CodicePatrimonio"].ToString() + 1 : item["CodicePatrimonio"].ToString(),
                                Type = Dundas.Charting.WebControl.SeriesChartType.Point,

                                MarkerImage = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                // MarkerSize = 50,
                                Points = new List<Point>() {
                                new Point {
                                    Values = new ValuesPointXY(Convert.ToDouble(item["DiversificazioneRischioMercato"]), Convert.ToDouble(item["VaR"])),
                                    ShowLabelAxisY = false,
                                    ShowLabelAxisX = false,
                                    FontSizeLabelAxisX=7,
                                    FontSizeLabelAxisY=7,
                                    Visible = false
                                }
                            }
                            }
                        );

                        bool showMarker = false;
                        if (item["Patrimonio"].ToString().ToLower().Contains("altri"))
                        {
                            if (_visualizzaAltriIstituti)
                            {
                                showMarker = true;
                            }
                        }
                        else
                        {
                            showMarker = true;
                        }

                        if (showMarker)
                        {
                            graficoCombination2.Markers.Add(new Marker()
                            {
                                Image = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
                                Width = 15,
                                Height = 15,
                                Scale = 1,
                                X = Convert.ToDouble(item["DiversificazioneRischioMercato"]) > 100 ? 100 : (float)Convert.ToDouble(item["DiversificazioneRischioMercato"]),
                                Y = Convert.ToDouble(item["VaR"]) >= 30 ? 30 : (float)Convert.ToDouble(item["VaR"])
                            });
                        }
                    }
                };
                //if (series2[0].Points.Count == 0 && graficoCombination2.Markers.Count == 0)
                //{

                //}
                // aggiungo le Serie al grafico
                graficoCombination2.SeriesCollection = series2;

                AddElement(graficoCombination2);

                #endregion

                AddElement(new SpacePDF(17));
                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                //AddElement(new FormattedTextAreaPDF("Diversificazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 293) { FontBold = true, FontSize = 7 });
                AddElement(new FormattedTextAreaPDF("Diversificazione del rischio mercato", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { FontBold = true, FontSize = 7 });
                //--Adriano 20180124
                AddElement(new SpacePDF(20));

                #region Tabella

                var tabella2 = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0])
                {
                    Style = Style.ConsulenzaUnica,
                    AlternateRow = false,
                    ShowSeparationLines = true,
                    RowHeight = 27,
                    Footer = false,
                    HeaderHeight = 30
                };


                //Adriano 20180125: per i nuclei non va messa la colonna Adeguatezza            
                if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
                {
                    tabella2.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella2.Columns.Add(new ColumnPDF("Patrimonio", 160, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella2.Columns.Add(new ColumnPDF("Controvalore", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("Diversificazione", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DiversificazioneRischioMercato", "Diversificazione<br>di rischio mercato") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                }
                else
                {
                    tabella2.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 30, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
                    tabella2.Columns.Add(new ColumnPDF("Patrimonio", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
                    tabella2.Columns.Add(new ColumnPDF("Controvalore", 115, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("Diversificazione", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DiversificazioneRischioMercato", "Diversificazione<br>di rischio mercato") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
                    tabella2.Columns.Add(new ColumnPDF("Adeguatezza", 65, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7 });
                }


                // cloning entire datasource (changing Grado di copertura(%) type from decimal to string, so its possible to put there "n.c."
                DataTable dtCloned2 = tabella2.DataSource.Clone();
                dtCloned2.Columns[8].DataType = typeof(string);
                foreach (DataRow row in tabella2.DataSource.Rows)
                {
                    dtCloned2.ImportRow(row);
                }
                tabella2.DataSource = dtCloned2;
                var index2 = 0;
                foreach (DataRow r in tabella2.DataSource.Rows)
                {
                    var colorAdeguatezza = Convert.ToBoolean(r["Adeguatezza"]) ? new ColorPDF(0, 176, 70) : new ColorPDF(255, 0, 0);
                    tabella2.Cells[6, index2].FontColor = colorAdeguatezza;
                    tabella2.Cells[2, index2].HorizontalAlignment =
                    tabella2.Cells[3, index2].HorizontalAlignment =
                    tabella2.Cells[4, index2].HorizontalAlignment =
                    tabella2.Cells[5, index2].HorizontalAlignment = HorizontalAlignmentType.Destra;
                    tabella2.Cells[4, index2].Value = Convert.ToDecimal(r["DiversificazioneRischioMercato"].ToString()) == 0 ? "n.c." : Helper.FormatDecimal(r["DiversificazioneRischioMercato"].ToString(), 2);
                    if (r["Patrimonio"].ToString().ToLower().Contains("altri"))
                    {
                        tabella2.Cells[5, index2].Value = "n.c.";
                        tabella2.Cells[6, index2].FontColor = colorAdeguatezza;
                        //tabella2.Cells[6, index2].Value = "n.a.";
                    }
                    //r["Patrimonio"] = "aaa";
                    //if ((r["Patrimonio"].ToString().ToLower().Contains("patrimonio altri istituti") ||
                    //    r["Patrimonio"].ToString().ToLower().Contains("patrimonio finanziario complessivo")) &&
                    //    !r["Patrimonio"].ToString().ToLower().EndsWith("*"))
                    //{
                    //    r["Patrimonio"] += "*";
                    //}
                    decimal result = 0;

                    if (Decimal.TryParse(r["GradoCopertura"].ToString(), out result))
                    {
                        if (result == 0)
                        {
                            tabella2.Cells[5, index2].Value = "n.c.";
                        }
                        else
                        {
                            tabella2.Cells[5, index2].Value = result.ToString("N");
                        }
                    }
                    else
                    {

                        tabella2.Cells[5, index2].Value = "n.c.";
                    }
                    index2++;
                }

                if (nota.Length > 0)
                {
                    nota = nota.Replace("(*)", "");
                    if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa == false)
                        tabella2.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
                        tabella2.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                    else if (_presenzaNotaPatrimonioTerzi == false && _presenzaNotaPatrimonioCasa)
                        tabella2.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
                }

                AddElement(tabella2);
                //AddElement(new SpacePDF(20));
                //AddElement(new FormattedTextAreaPDF(nota, EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 });

                #endregion


                if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato)
                {
                    AddElement(new SpacePDF(10));
                    string codicemandato = datiSeiUnico.getClienteReport().codiceMandato;
                    string testo = "La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» prende in considerazione il patrimonio detenuto presso $/Banca/$ da tutti i mandati fiduciari associati al medesimo fiduciante a cui appartiene il mandato <" + codicemandato + ">. Gli indicatori «Rischio Mercato (VaR)» e «Diversificazione» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + ".";
                    AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca(testo), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                if (getNotaCopertura5RMRC().Length > 0)
                {
                    AddElement(new SpacePDF(10));
                    AddElement(new FormattedTextAreaPDF(getNotaCopertura5RMRC(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                }
                //Nota di eccessiva adeguatezza
                if (_presenzaNotaEccessivaAdeguatezza)
                {
                    AddElement(new SpacePDF(10));
                    var notaEccessivaAdeguatezza = Helper.ReplaceVariables(testi.Rows[0]["testo4"].ToString(), EnvironmentFacade.ReportEnvironment);
                    AddElement(new FormattedTextAreaPDF(notaEccessivaAdeguatezza, EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 6 });
                }
                //Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
                if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 35) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 35) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 35) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });

                }
                else
                {
                    AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 60) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 60) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                    AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 60) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                }
                //AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
                //AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
            }
            #endregion Rischio Mercato vs Diversificazione Rischio Mercato
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataTable.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataTable GetDataTable()
        {
            return null;
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataSet.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataSet GetDataSet()
        {
            var ds = new DataSet();
            var rischio = datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito;
            var profilo = rischio.profileId;

            //Adriano
            #region Cliente/Nucleo professionale

            bool profiloProfessionale;
            bool profiloAggressivo;
            bool profiloProfessionaleAggressivo;

            Profiler profiler;

            //Adriano 20180125 Per eliminare la gestione profilazione per i nuclei (non più gestita nel WS)
            decimal varMassimoProfiloCliente;

            if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
            {
                profilo = 5;
				DataServices.fideuram.data.service.rsAnagraficaNucleo nucleo = datiSeiUnico.nucleiUnit().anagrafica;
                varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
				profiler = new Profiler(nucleo);
            }
            else
            {
                profilo = rischio.profileId;
                varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
				DataServices.fideuram.data.service.rsClienteAnagrafica cliente = datiSeiUnico.clienteUnit().anagrafica;
				profiler = new Profiler(cliente);
            }

            //var profilo = rischio.profileId;

            profiloProfessionale = profiler.ProfiloProfessionale;
            profiloAggressivo = profiler.ProfiloAggressivo;
            profiloProfessionaleAggressivo = profiler.ProfiloProfessionaleAggressivo;

            #endregion

            //--Adriano
            varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
            
            // Verificare il valore passato dal WS, che potrebbe essere già corretto
            if (profiloProfessionaleAggressivo)
                varMassimoProfiloCliente = 50;
            //var varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
            //Adriano 20180125

            var totCasa = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliFideuram;
            var totTerzi = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliAltriIstituti;

            var totalePatrimonioCasa = totCasa.risorseFinanziarie + totCasa.partiteViaggianti;
            var totalePatrimonioTerzi = totTerzi.risorseFinanziarie;
            var totalePatrimonioFinanziario = totCasa.risorseFinanziarie + totCasa.partiteViaggianti + totTerzi.risorseFinanziarie;

            var rischioFideuram = rischio.bancaFideuram;
            var rischioAltriIstituti = rischio.altriIstituti;
            var rischioComplessivo = rischio.totale;
            _presenzaNotaEccessivaAdeguatezza = rischio.eccessivamenteAdeguato;

            #region Rischio
            var dtRischio = new DataTable();
            dtRischio.Columns.Add(new DataColumn("Patrimonio", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("NumeroPatrimonio", typeof(Int32)));
            dtRischio.Columns.Add(new DataColumn("CodicePatrimonio", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("ImmaginePatrimonio", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("Controvalore", typeof(decimal)));
            dtRischio.Columns.Add(new DataColumn("VaR", typeof(decimal)));
            dtRischio.Columns.Add(new DataColumn("VaRString", typeof(string)));
            // Adriano 20180215
            dtRischio.Columns.Add(new DataColumn("Diversificazione", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("DiversificazionePortafoglio", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("DiversificazioneRischioMercato", typeof(string)));
            //--Adriano 20180215
            dtRischio.Columns.Add(new DataColumn("GradoCopertura", typeof(string)));
            dtRischio.Columns.Add(new DataColumn("Adeguatezza", typeof(bool)));
            dtRischio.Columns.Add(new DataColumn("AdeguatezzaString", typeof(string)));

            #region Casa
            if (totalePatrimonioCasa == 0)
                dtRischio.Rows.Add(
                   string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio
                   1, //NumeroPatrimonio
                   "BF", //CodicePatrimonio
                   "Pallino1.png", //ImmaginePatrimonio
                   totalePatrimonioCasa, //Controvalore
                   rischioFideuram.misure.varp, //VaR
                   rischioFideuram.varDecodificato, //VaRString
                                                    // Adriano 20180215
                                                    //Diversificazione
                                                    //Math.Round(rischioFideuram.stat.diversificazione, 2),
                   0,
                   //Diversificazione di Portafoglio
                   0,
                   //Diversificazione del rischio Mercato
                   0,
                   //--Adriano 20180215
                   Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura
                   rischio.patFideuramAdeguato,
                   rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
                   ); //Adeguatezza 
            else
                dtRischio.Rows.Add(
                   string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio
                   1, //NumeroPatrimonio
                   "BF", //CodicePatrimonio
                   "Pallino1.png", //ImmaginePatrimonio
                   totalePatrimonioCasa, //Controvalore
                   rischioFideuram.misure.varp, //VaR
                   rischioFideuram.varDecodificato, //VaRString
                            // Adriano 20180215
                            //Diversificazione
                            //Math.Round(rischioFideuram.stat.diversificazione, 2),
                   0,
                            //Diversificazione di Portafoglio
                   rischio.diversicazioneCasa.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("BENEFICIO")).value,
                            //Diversificazione del rischio Mercato
                   rischio.diversicazioneCasa.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOMERCATO")).value,
                            //--Adriano 20180215
                   Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura
                   rischio.patFideuramAdeguato,
                   rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
                   ); //Adeguatezza 

            #endregion

            if (_visualizzaAltriIstituti && totalePatrimonioTerzi > 0)
            {
                #region Terzi
                dtRischio.Rows.Add(
                      "Patrimonio altri Istituti",  //Patrimonio
                      2, //NumeroPatrimonio
                      "PT", //CodicePatrimonio
                      "Pallino2.png", //ImmaginePatrimonio
                      totalePatrimonioTerzi,  //Controvalore
                      rischioAltriIstituti.misure.varp, //VaR
                      rischioAltriIstituti.varDecodificato, //VaRString
                                                            // Adriano 20180215
                                                            //Diversificazione
                                                            //Math.Round(rischioAltriIstituti.stat.diversificazione, 2),
                      0,
                      //Diversificazione di Portafoglio
                      rischio.diversicazioneTerzi.beneficio.Count() > 0 ?
                        rischio.diversicazioneTerzi.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("BENEFICIO")).value
                        : 0,
                      //Diversificazione del Rischio Mercato
                      rischio.diversicazioneTerzi.beneficio.Count() > 0 ?
                        rischio.diversicazioneTerzi.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOMERCATO")).value
                        : 0,
                      //--Adriano 20180215
                      Math.Round(rischioAltriIstituti.stat.copertura, 2),  //GradoCopertura
                      rischio.patAltriIstitutiAdeguato, //Adeguatezza 
                      rischio.patAltriIstitutiAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
                      );
                #endregion

                #region Complessivo
                dtRischio.Rows.Add(
                       "Patrimonio finanziario complessivo",  //Patrimonio
                       3, //NumeroPatrimonio
                       "PC", //CodicePatrimonio
                       "Pallino3.png", //ImmaginePatrimonio
                       totalePatrimonioFinanziario, //Controvalore
                       rischioComplessivo.misure.varp, //VaR
                       rischioComplessivo.varDecodificato, //VaR
                                                           // Adriano 20180215
                                                           //Diversificazione
                                                           //Math.Round(rischioComplessivo.stat.diversificazione, 2),
                       0,
                       //Diversificazione di Portafoglio
                       rischio.diversicazioneComplessivo.beneficio.Count() > 0 ?
                        rischio.diversicazioneComplessivo.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("BENEFICIO")).value
                        : 0,
                       //Diversificazione del Rischio Mercato
                       rischio.diversicazioneComplessivo.beneficio.Count() > 0 ?
                        rischio.diversicazioneComplessivo.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOMERCATO")).value
                        : 0,
                       //--Adriano 20180215
                       Math.Round(rischioComplessivo.stat.copertura, 2),  //GradoCopertura
                       rischio.patCompletoAdeguato,
                       rischio.patCompletoAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
                       ); //Adeguatezza 
                #endregion
            }

            ds.Tables.Add(dtRischio);
            #endregion

            #region Cliente

            var dtCliente = new DataTable();
            dtCliente.Columns.Add(new DataColumn("VarMassimoProfilo", typeof(decimal)));
            dtCliente.Rows.Add(varMassimoProfiloCliente);

            ds.Tables.Add(dtCliente);

            #endregion

            #region Soglie Asse Y
            ds.Tables.Add(new DataTable("dtSoglieY"));

            //Adriano
            if (profiloProfessionaleAggressivo)
            {
                ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Valore", typeof(decimal)));
                ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Testo", typeof(string)));
                ds.Tables["dtSoglieY"].Rows.Add(5, "5,00");
                ds.Tables["dtSoglieY"].Rows.Add(10, "10,00");
                ds.Tables["dtSoglieY"].Rows.Add(15, "15,00");
                ds.Tables["dtSoglieY"].Rows.Add(20, "20,00");
                ds.Tables["dtSoglieY"].Rows.Add(25, "25,00");
                ds.Tables["dtSoglieY"].Rows.Add(30, "30,00");
                ds.Tables["dtSoglieY"].Rows.Add(35, "35,00");
                ds.Tables["dtSoglieY"].Rows.Add(40, "40,00");
                ds.Tables["dtSoglieY"].Rows.Add(45, "45,00");
                ds.Tables["dtSoglieY"].Rows.Add(50, "50,00");
            }
            else
            {
                ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Valore", typeof(decimal)));
                ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Testo", typeof(string)));
                ds.Tables["dtSoglieY"].Rows.Add(2, "2,00");
                ds.Tables["dtSoglieY"].Rows.Add(4.5, "4,50");
                ds.Tables["dtSoglieY"].Rows.Add(9.5, "9,50");
                ds.Tables["dtSoglieY"].Rows.Add(15, "15,00");
                ds.Tables["dtSoglieY"].Rows.Add(27, "27,00");
            }

            #endregion
            return ds;
        }

        /// <summary>
        /// Recupera la nota dinamica
        /// </summary>
        /// <param name="nota"></param>
        /// <returns></returns>
        public virtual string GetNote1()
        {

            string nota = "";
            string token = "";

            var pianificazioneVerticale = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale;

            decimal CCN_CASA = pianificazioneVerticale.contoCorrenteNegativo; //cc negativi del patrimonio casa
            decimal CCN_TERZI = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.contoCorrentiNegativi;
            _presenzaNotaPatrimonioTerzi = CCN_TERZI != 0 && _visualizzaAltriIstituti;

            // 20181009 AC
            decimal TUOFOGLIO_CASA = pianificazioneVerticale.liqFogliNeg; // liquidità sottostante Il Mio Foglio del patrimonio casa
            //--20181009 AC
            decimal GPELIGOFONDI_CASA = pianificazioneVerticale.liqEligoFondiNeg; // liquidità sottostante la GP Eligo Fondi del patrimonio casa
            decimal GPELIGTITOLI_CASA = pianificazioneVerticale.liqEligoTitoliNeg; //liquidità sottostante la GP Eligo Titoli del patrimonio casa

            // 20181009 AC
            //_presenzaNotaPatrimonioCasa = CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0;
            _presenzaNotaPatrimonioCasa = CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA != 0;
            //--20181009 AC

            decimal GC = 100;
            decimal OC_CASA = 0;//patrimonioCasa.totaliPatrimonio.partiteViaggianti; //Operazioni in corso del patrimonio casa
            decimal CC_CASA = 0;// patrimonioCasa.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio casa
            decimal CC_TERZI = 0;// patrimonioTerzi.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio terzi
            decimal PNR_CASA = 0;  //Patrimonio non rappresentabile per macroassetclass del patrimonio casa
            decimal PNR_TERZI = 0;

            // 20181009 AC
            //if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || CCN_TERZI != 0)
            if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || CCN_TERZI != 0 || TUOFOGLIO_CASA != 0)
            //--20181009 AC
            {
                nota += token + "Il controvalore";
                token = " ";
                if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA != 0)
                {
                    nota += token + "del patrimonio $/Banca/$  esclude il saldo negativo";

                    if (CCN_CASA != 0)
                    {
                        nota += token + datiSeiUnico.FormatDecimal("dei conti correnti ({0} €)", CCN_CASA);
                        token = (GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0) ? ", " : "";
                    }
                    // 20181009 AC
                    if (TUOFOGLIO_CASA != 0)
                    {
                        nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante Il Mio Foglio ({0} €)", TUOFOGLIO_CASA);
                        token = (TUOFOGLIO_CASA != 0) ? ", " : "";
                    }
                    //--20181009 AC
                    if (GPELIGOFONDI_CASA != 0)
                    {
                        nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Fondi ({0} €)", GPELIGOFONDI_CASA);
                        token = (GPELIGTITOLI_CASA != 0) ? ", " : "";
                    }
                    if (GPELIGTITOLI_CASA != 0)
                    {
                        nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Titoli ({0} €)", GPELIGTITOLI_CASA);
                    }
                    token = ". ";
                }

                if (CCN_TERZI != 0 && _visualizzaAltriIstituti)
                {
                    nota += token + datiSeiUnico.FormatDecimal(" Il controvalore del patrimonio altri Istituti esclude il saldo negativo dei conti correnti ({0} €)", CCN_TERZI);
                }
            }

            if (GC < 100)
            {
                nota += token + datiSeiUnico.FormatDecimal("Grado di copertura (%) della rappresentazione grafica per macro asset class pari a {0}", GC);
                token = ": ";
                if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0 || PNR_TERZI != 0 || CC_TERZI != 0)
                {
                    nota += token + "non sono considerati";
                    token = " ";
                    if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0)
                    {
                        if (PNR_CASA != 0)
                        {
                            nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_CASA);
                            token = ", ";
                        }
                        if (CC_CASA != 0)
                        {
                            nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_CASA);
                            token = ", ";
                        }
                        if (OC_CASA != 0)
                        {
                            nota += token + datiSeiUnico.FormatDecimal("gli importi relativi alle operazioni in corso ({0} €)", OC_CASA);
                            token = ", ";
                        }
                        token = " ";
                        nota += token + "del patrimonio $/Banca/$";
                        token = ", ";
                    }
                    if ((PNR_TERZI != 0 || CC_TERZI != 0) && _visualizzaAltriIstituti)
                    {
                        if (PNR_TERZI != 0)
                        {
                            nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_TERZI);
                            token = ", ";
                        }
                        if (CC_TERZI != 0)
                        {
                            nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_TERZI);
                            token = ", ";
                        }
                        token = " ";
                        nota += token + "del patrimonio Altri Istituti";
                        token = ", ";
                    }
                }
            }
            nota += ".";
            nota = !nota.Equals("") ? "(*) " + nota : nota;
            return datiSeiUnico.FormatBanca(nota);

        }
        public virtual string getNotaCopertura5RMRC() //40.5 copertura rischio mercato var e rischio credito
        {

            var RM = false;
            var RC = false;

            try
            {
                var copertura = Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ","));
                RM = copertura > 0 && copertura < 90;
            }
            catch { RM = false; }

            try
            {
                var copertura = Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ","));
                RC = copertura > 0 && copertura < 90;
            }
            catch { RC = false; }


            string nota = "";

            if (RM || RC)
            {
                nota += "Il patrimonio che lei detiene presso $/Banca/$ risulta non adeguato al suo profilo finanziario in quanto alcuni prodotti non sono coperti in termini di "
                    + (RM ? RC ? "Rischio Mercato (VaR) e di Rischio Credito" : "Rischio Mercato (VaR)" : RC ? "Rischio Credito" : "") +
                    ", determinando un grado di copertura inferiore a 90%: in questo caso, a prescindere dai singoli indicatori di rischio, il patrimonio $/Banca/$ viene considerato sempre come non adeguato.";


            }

            return datiSeiUnico.FormatBanca(nota);
        }
        //private string GetNote(string nota)
        //{



        //    decimal CCN_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.contoCorrenteNegativo; //cc negativi del patrimonio casa           
        //    decimal GPELIGOFONDI_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.liqEligoFondiNeg; // liquidità sottostante la GP Eligo Fondi del patrimonio casa
        //    decimal GPELIGTITOLI_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.liqEligoTitoliNeg; //liquidità sottostante la GP Eligo Titoli del patrimonio casa
        //    decimal CCN_TERZI = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.contoCorrentiNegativi; //cc negativi del patrimonio terzi      

        //    _presenzaNotaPatrimonioCasa = CCN_CASA + GPELIGOFONDI_CASA + GPELIGTITOLI_CASA != 0;
        //    _presenzaNotaPatrimonioTerzi = CCN_TERZI != 0 && _visualizzaAltriIstituti;

        //    var listaValori = new List<decimal>() 
        //    { 
        //        0,
        //        CCN_CASA, 
        //        -1,
        //        GPELIGOFONDI_CASA,
        //        -1,
        //        GPELIGTITOLI_CASA,

        //        CCN_TERZI                
        //    };

        //    var listaValoriStringa = new List<string>() 
        //    { 
        //        string.Empty,
        //        Helper.FormatCurrencyWithSymbol(CCN_CASA.ToString()),  
        //        GPELIGOFONDI_CASA != 0 && CCN_CASA != 0 ? "," : string.Empty,
        //        Helper.FormatCurrencyWithSymbol(GPELIGOFONDI_CASA.ToString()),  
        //        GPELIGTITOLI_CASA != 0 && (CCN_CASA + GPELIGOFONDI_CASA) != 0 ? "," : string.Empty,
        //        Helper.FormatCurrencyWithSymbol(GPELIGTITOLI_CASA.ToString()),

        //        Helper.FormatCurrencyWithSymbol(CCN_TERZI.ToString())              
        //    };

        //    return BuildDynamicNote(nota, listaValori, listaValoriStringa, false);
        //}
    }
}
