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.Manager.Integration;
using Consulenza.ReportWriter.Business.CHART_PDF;
using Consulenza.ReportWriter.Business.Entity;
using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica;
using System.Linq;

namespace Consulenza.ReportWriter.Manager.Section.Unica
{
    public class S59 : Entity.Section
    { 
        /// <summary>
        ///S59.RiservaPortafoglioModelloVSProposto idSezione = 102
        /// </summary>

        public S59(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S59", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        protected override sealed void Draw()
        {
            var dati = GetDataSet();
            bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro();
            AddElement(new PagePDF(PagePDF.PagePDFType.Generic));

            var intestazione = new SectionHeadingPDF(
               "Riserva: portafoglio modello vs " + (isAdeguata ? "proposto" : "prospettico"),

                EnvironmentFacade.RendererFacade.XLeftLimit,
                EnvironmentFacade.RendererFacade.YUpperLimit,
                EnvironmentFacade.ReportEnvironment.FontFamily);

            AddElement(intestazione.ToElement());

            if (dati.Tables["assetClass"].Rows.Count > 0)
            {
                DataTable dtOrdinamento = dati.Tables["assetClass"].AsEnumerable().OrderBy(l => l.Field<int>("Ordinamento")).CopyToDataTable();
                if (getTesto1().Length > 0)
                {
                    AddElement(new SpacePDF(20));
                    AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                    AddElement(new SpacePDF(15));

                    var tabellaCtv = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["labelControvalore"])
                    {
                        Style = Style.ConsulenzaUnica,
                        Header = false,
                        Footer = false,
                        AlternateRow = false,
                        RowHeight = 28,
                        ShowSeparationLines = false,
                        WhiteSpacesHorizontalSeparator = true,
                        HideLastSeparationLine = true
                    };

                    tabellaCtv.Columns.Add(new ColumnPDF("ControvalorepropostoString", 130, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo, "ControvalorepropostoString", "") { FontSize = 7, DeltaYContent = -1 });
                    tabellaCtv.Columns.Add(new ColumnPDF("Controvaloreproposto", 130, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "Controvaloreproposto", "") { HeaderFontSize = 7, FontBold = false, PaddingRight = 10, DeltaYContent = -1 });

                    tabellaCtv.Columns.Add(new ColumnPDF("AderenzaportafogliomodelloString", 130, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo, "AderenzaportafogliomodelloString", "") { FontSize = 7, PaddingLeft = 5, DeltaYContent = -1 });
                    tabellaCtv.Columns.Add(new ColumnPDF("Aderenzaportafogliomodello", 130, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "Aderenzaportafogliomodello", "") { HeaderFontSize = 7, FontBold = false, DeltaYContent = -1, PaddingRight = 4 });

                    AddElement(tabellaCtv);
                    
                }
               
                AddElement(new SpacePDF(8));

                string valore = isControvalore() ? "(€)" : "(%)";
                AddElement(new FormattedTextAreaPDF(isAssetClass() ? "Asset class" : "Macro asset class", EnvironmentFacade.RendererFacade.XLeftLimit, 130) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize = 7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, AutoIncrementYWritable = false, BackGroundMarginLeft = 5 });
                AddElement(new FormattedTextAreaPDF("Portafoglio modello " + valore, EnvironmentFacade.RendererFacade.XLeftLimit + 133.5f, 190) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize = 7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, AutoIncrementYWritable = false, BackGroundMarginLeft = 5 });
                AddElement(new FormattedTextAreaPDF("Portafoglio " + ( isAdeguata ? "proposto " : "prospettico ") + valore, EnvironmentFacade.RendererFacade.XLeftLimit + 327.5f, 190) { BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontBold = true, FontSize = 7, FontColor = ColorPDF.ConsulenzaUnica_Rosso, BackGroundMarginLeft = 5 }); //340 = + 145 + 195


                #region ASSET

                var tabellaAsset = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtOrdinamento)
                {
                    Style = Style.ConsulenzaUnica,
                    Header = false,

                    Footer = false,
                    AlternateRow = false,
                    RowHeight = 28,
                    ShowSeparationLines = false

                };
                tabellaAsset.Columns.Add(new ColumnPDF("descrizione", 145, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "") { HeaderFontSize = 7,  FontSize = 7 });
                tabellaAsset.Columns.Add(new ColumnPDF("portafogliomodello", 179, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Objectpdf, "PercentualeControvaloreModello", "") { HeaderPaddingLeft = 5, HeaderFontSize = 7, DeltaYContent = 2, FontSize=7 });
                tabellaAsset.Columns.Add(new ColumnPDF("portafoglioproposto", 180, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "PercentualeControvaloreProposto", "") { HeaderPaddingLeft = 5, HeaderFontSize = 7, PaddingLeft = 3.5f, DeltaYContent = 2, FontSize = 7 });
               
                int o = 0;
                var list = new List<double>();
                list.Add(Convert.ToDouble(dati.Tables["assetClass"].AsEnumerable().Max(x => x["PercentualeControvaloreModello"])));
                list.Add(Convert.ToDouble(dati.Tables["assetClass"].AsEnumerable().Max(x => x["PercentualeControvaloreProposto"])));
                var max = (float)Helper.Round(list.Max());

                float larghezzaBarra = 0;
                float deltaXBarra = 0;
                var width = 0;
                foreach (DataRow row in dtOrdinamento.Rows)
                {

                    var colore = new ColorPDF(Convert.ToInt32(row["Red"]), Convert.ToInt32(row["Green"]), Convert.ToInt32(row["Blue"]));

                    #region barra colonna Portafogliomodello
                    width = tabellaAsset.Columns[1].Width - (isControvalore() ? 50 : 20);
                    larghezzaBarra = Helper.GetWidthProportional(Convert.ToDouble(row["PercentualeControvaloreModello"]) == 0 ? (float)0.01 : (float)Convert.ToDouble(row["PercentualeControvaloreModello"]), max, width);
                    /**************************** Modifica aladdin 17062021 - Andrea *************************************************************************/
                    //deltaXBarra = Convert.ToDouble(row["PercentualeControvaloreModello"]) == 0 ? -larghezzaBarra + 10 : -larghezzaBarra + (isControvalore() ? 0 : 7);
                    deltaXBarra = Convert.ToDouble(row["ValoreAttuale"]) == 0 ? larghezzaBarra + 5 : larghezzaBarra + (isControvalore() ? 0 : 7);
                    tabellaAsset.Columns[1].HorizontalAlignment = HorizontalAlignmentType.Sinistra;
                    /**************************************************************************************************************************************/


                    if (Convert.ToDouble(row["PercentualeControvaloreModello"]) == 0)
                    {
                        tabellaAsset.Cells[1, o].ValueObjectList = new List<Business.Entity.ObjectPDF>()
                            {
                    
                                new FormattedTextAreaPDF(isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreModello"].ToString()) : Helper.FormatDecimal(row["PercentualeControvaloreModello"].ToString(), 2), deltaXBarra-10, isControvalore()? 50 : 35) 
                                { 
                                    DeltaY = 4,
                                    /**************************** Modifica aladdin 17062021 - Andrea *************************************************************************/
                                    //TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
                                    TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right,
                                    /*****************************************************************************************************************************************/
                                    DeltaX = isControvalore() ? deltaXBarra+20 : deltaXBarra+5,
                                    FontSize = 7
                                },
                                new RectanglePDF(12, 1 , ColorPDF.Bianco){DeltaY = 4}
                            };
                    }
                    else
                    {


                        tabellaAsset.Cells[1, o].ValueObjectList = new List<Business.Entity.ObjectPDF>()
                            {
                    
                                new FormattedTextAreaPDF(isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreModello"].ToString()) : Helper.FormatDecimal(row["PercentualeControvaloreModello"].ToString(), 2), deltaXBarra, isControvalore()? 50 : 35) 
                                { 
                                    DeltaY = 4,
                                    /**************************** Modifica aladdin 17062021 - Andrea *************************************************************************/
                                    //TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
                                    TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right,
                                    /*****************************************************************************************************************************************/
                                    DeltaX = deltaXBarra,
                                    FontSize = 7
                                },
                                new RectanglePDF(12, larghezzaBarra , colore){DeltaY = 4}
                            };
                    }
                    #endregion


                    #region barra colonna Portafoglioattuale
                    width = tabellaAsset.Columns[2].Width - (isControvalore() ? 50 : 20);
                    larghezzaBarra = Helper.GetWidthProportional(Convert.ToDouble(row["PercentualeControvaloreProposto"]) == 0 ? (float)0.01 : (float)Convert.ToDouble(row["PercentualeControvaloreProposto"]), max, width);
                    deltaXBarra = Convert.ToDouble(row["PercentualeControvaloreProposto"]) == 0 ? isControvalore() ? larghezzaBarra -20 : larghezzaBarra-10 : isControvalore() ? larghezzaBarra + 3 :larghezzaBarra - 5;
                    if (Convert.ToDouble(row["PercentualeControvaloreProposto"]) == 0)
                    {
                        tabellaAsset.Cells[2, o].ValueObjectList = new List<Business.Entity.ObjectPDF>()
                            {
                    
                                new RectanglePDF(12, 1 , ColorPDF.Bianco){DeltaY = 4}, 
                                new FormattedTextAreaPDF(isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreProposto"].ToString()) :Helper.FormatDecimal(row["PercentualeControvaloreProposto"].ToString(), 2), deltaXBarra-10, isControvalore()? 50 : 35) 
                                { 
                                    DeltaY = 4, 
                                    TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right, 
                                    DeltaX = isControvalore() ?  deltaXBarra-10 : deltaXBarra-8,
                                    FontSize = 7
                                }          
                            };
                    }
                    else
                    {
                        tabellaAsset.Cells[2, o].ValueObjectList = new List<Business.Entity.ObjectPDF>()
                            {
                                new RectanglePDF(12, larghezzaBarra , colore){DeltaY = 4}, 
                                new FormattedTextAreaPDF(isControvalore() ? Helper.FormatCurrency(row["PercentualeControvaloreProposto"].ToString()) :Helper.FormatDecimal(row["PercentualeControvaloreProposto"].ToString(), 2), deltaXBarra, isControvalore()? 50 : 35) 
                                { 
                                    DeltaY = 4, 
                                    TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right, 
                                    DeltaX =  deltaXBarra,
                                    FontSize = 7
                                }                    
                            };
                    }
                    #endregion
                    o++;
                }

                #endregion

                AddElement(new SpacePDF(5));
                AddElement(tabellaAsset);

                string note = "*";
                if (getNota1().Length > 0)
                {
                    tabellaAsset.Notes.Add(
                        new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella,
                            getNota1(),
                            new[] { "" },
                            string.Empty,
                            TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }
                            );
                    //captionAderenzaModello.Text += note;
                    //captionCtvProposto.Text += note;
                    //note += "*";
                }

                if (getNota2().Length > 0)
                {
                    tabellaAsset.Notes.Add(
                        new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella,
                            getNota2(),
                            new[] { "" },
                            string.Empty,
                            TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign= ceTe.DynamicPDF.TextAlign.Justify }
                            );
                    //captionVarProposto.Text += note;

                    note += "*";
                }
            }
        }
        /// <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();
            ds.Tables.Add(new DataTable("labelControvalore"));
            ds.Tables.Add(new DataTable("assetClass"));

            var progettoRiserva = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(o => o.portafoglioModello.area.Equals("Ris"));
            var progettoRiservaPro = datiSeiUnico.propostaUnit().stPianificazioneVerticale.stAreePianificazione.FirstOrDefault(o => o.area.Equals("Ris")).progetti.FirstOrDefault();
            var valoreCtvTotaleProposto = progettoRiservaPro.ctvProgettoPro;

            var valoriAssetProposto = isAssetClass() ?
                datiSeiUnico.propostaUnit().assetClass.distribuzioneAree.FirstOrDefault(o => o.area.Equals("Ris")) //.ToList().FirstOrDefault(o => o.chiaveProgetto != null && o.chiaveProgetto == item.chiaveProgetto.ToString()).distribuzione
                : datiSeiUnico.propostaUnit().macroAssetClass.distribuzioneAree.FirstOrDefault(o => o.area.Equals("Ris"));

            var valoriAssetModello = isAssetClass() ? progettoRiserva.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 2).ToList() 
                                    : progettoRiserva.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 1).ToList();
                    
            var displayInfoM = datiSeiUnico.displayInfos().macroAssetDisplayInfos.ToList();
            var displayInfoA = datiSeiUnico.displayInfos().assetDisplayInfos.ToList();

            #region patrimonio controvalore

            ds.Tables["labelControvalore"].Columns.Add("ControvalorepropostoString", typeof(string));
            ds.Tables["labelControvalore"].Columns.Add("Controvaloreproposto", typeof(string));
            ds.Tables["labelControvalore"].Columns.Add("AderenzaportafogliomodelloString", typeof(string));
            ds.Tables["labelControvalore"].Columns.Add("Aderenzaportafogliomodello", typeof(string));
            ds.Tables["labelControvalore"].Rows.Add(
                                                    "Controvalore " + (datiSeiUnico.flagAdeguatezzaPro() ? " proposto (€)" : "prospettico (€)") +
                                                                (getNota1().Length > 0 && getNota1().Contains("Grado") ? "*" : ""),
                                                    Helper.FormatCurrency(valoriAssetProposto.distribuzione.totaleCtv.ToString()),
                                                    "Aderenza al portafoglio<br> modello (%)" + (getNota1().Length > 0 ? "*" : ""),
                                                    Helper.FormatDecimal(progettoRiserva.aderenza.valoreAderenza.ToString(), 2));

            ds.Tables["labelControvalore"].Rows.Add(
                                                    "VaR " + (datiSeiUnico.flagAdeguatezzaPro() ? " proposto (%)" : "prospettico (%)") + (getNota2().Length > 0 ? "*" : ""),
                                                    progettoRiservaPro.varProgettoPro,
                                                    "VaR portafoglio modello (%)",
                                                    Helper.FormatDecimal(progettoRiserva.varPianificatoDec, 2));
           
            #endregion
 
            #region asset
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Codice", typeof(string)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Red", typeof(int)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Green", typeof(int)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Blue", typeof(int)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("PercentualeControvaloreModello", typeof(decimal)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("PercentualeControvaloreProposto", typeof(decimal)));
            ds.Tables["assetClass"].Columns.Add(new DataColumn("Ordinamento", typeof(int)));
            #region portafoglio modello

            if (isAssetClass())
            {
                foreach (var valore in from c in displayInfoA
                                       join l in valoriAssetModello on c.key equals l.asset.asset
                                      // orderby c.value.order
                                       select new
                                       {
                                           l.asset.asset,
                                           l.asset.descrizione,
                                           new ColorPDF(c.value.fill).Red,
                                           new ColorPDF(c.value.fill).Green,
                                           new ColorPDF(c.value.fill).Blue,
                                           l.percentuale,
                                           c.value.order
                                       })
                {
                    ds.Tables["assetClass"].Rows.Add(
                        valore.asset,
                        valore.descrizione,
                        valore.Red,
                        valore.Green,
                        valore.Blue,
                       isControvalore() ? valore.percentuale * valoreCtvTotaleProposto : valore.percentuale * 100,
                       0,//portafoglio proposto che viene caricato successivamente
                       valore.order
                    );
                }


            }
            else
            {

                foreach (var valore in from c in displayInfoM
                                       join l in valoriAssetModello on c.key equals l.asset.asset
                                       //orderby c.value.order
                                       select new
                                       {
                                           l.asset.asset,
                                           l.asset.descrizione,
                                           new ColorPDF(c.value.fill).Red,
                                           new ColorPDF(c.value.fill).Green,
                                           new ColorPDF(c.value.fill).Blue,
                                           l.percentuale,
                                           c.value.order
                                       })
                {
                    ds.Tables["assetClass"].Rows.Add(
                        valore.asset,
                        valore.descrizione,
                        valore.Red,
                        valore.Green,
                        valore.Blue,
                        isControvalore() ? valore.percentuale * valoreCtvTotaleProposto : valore.percentuale * 100,
                        0,//portafoglio proposto che viene caricato successivamente
                        valore.order
                    );
                }
            }
            #endregion

            #region portafoglioproposto

            if (isAssetClass())
            {
                foreach (var valore in from c in displayInfoA
                                       join l in valoriAssetProposto.distribuzione.elencoSlice on c.key equals l.codice
                                      // orderby c.value.order
                                       select new
                                       {
                                           l.codice,
                                           l.descrizione,
                                           new ColorPDF(c.value.fill).Red,
                                           new ColorPDF(c.value.fill).Green,
                                           new ColorPDF(c.value.fill).Blue,
                                           l.pesoCC,
                                           l.ctvCC,
                                           c.value.order
                                       })
                {
                    if (ds.Tables["assetClass"].AsEnumerable().FirstOrDefault(l => l.Field<string>("Codice") == valore.codice) != null)
                    {
                        ds.Tables["assetClass"].Select(string.Format("[Codice] = '{0}'", valore.codice))
                             .ToList<DataRow>()
                             .ForEach(r =>
                             {
                                 r["PercentualeControvaloreProposto"] = isControvalore() ? Convert.ToDecimal(valore.ctvCC) : Convert.ToDecimal(valore.pesoCC * 100);

                             });
                    }
                    else
                    {

                        ds.Tables["assetClass"].Rows.Add(
                            valore.codice,
                            valore.descrizione,
                            valore.Red,
                            valore.Green,
                            valore.Blue,
                            0,//portafoglio modello per un item che non è presente
                            isControvalore() ? valore.ctvCC : valore.pesoCC * 100,
                            valore.order
                        );
                    }
                }


            }
            else
            {
                foreach (var valore in from c in displayInfoM
                                       join l in valoriAssetProposto.distribuzione.elencoSlice on c.key equals l.codice
                                      // orderby c.value.order
                                       select new
                                       {
                                           l.codice,
                                           l.descrizione,
                                           new ColorPDF(c.value.fill).Red,
                                           new ColorPDF(c.value.fill).Green,
                                           new ColorPDF(c.value.fill).Blue,
                                           l.pesoCC,
                                           l.ctvCC,
                                           c.value.order
                                       })
                {
                    if (ds.Tables["assetClass"].AsEnumerable().FirstOrDefault(l => l.Field<string>("Codice") == valore.codice) != null)
                    {
                        ds.Tables["assetClass"].Select(string.Format("[Codice] = '{0}'", valore.codice))
                             .ToList<DataRow>()
                             .ForEach(r =>
                             {
                                 r["PercentualeControvaloreProposto"] = isControvalore() ? valore.ctvCC : valore.pesoCC * 100;

                             });
                    }
                    else
                    {

                        ds.Tables["assetClass"].Rows.Add(
                            valore.codice,
                            valore.descrizione,
                            valore.Red,
                            valore.Green,
                            valore.Blue,
                            isControvalore() ? valore.ctvCC : valore.pesoCC * 100,
                            valore.order
                        );
                    }
                }
            }

            #endregion

            #endregion

            return ds;
        }
        public virtual string getTesto1()
        {
            bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro();
            string adeguataStr = isAdeguata ? "la presente proposta" : "le operazioni da lei richieste al suo private banker";
            return isAssetClass() ? 
                !isControvalore() ? 
                //"In questa scheda è riportato il confronto, sulla base delle principali asset class finanziarie, tra il patrimonio che, secondo " + adeguataStr + " è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini percentuali, a ciascuna asset class, e con indicazione del grado di Aderenza." : "In questa scheda è riportato il confronto, sulla base delle principali asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini di controvalore, a ciascuna asset class, e con indicazione del grado di Aderenza." : isControvalore() ? "In questa scheda è riportato il confronto, sulla base delle principali macro asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini di controvalore, a ciascuna macro asset class, e con indicazione del grado di Aderenza." : "In questa scheda è riportato il confronto, sulla base delle principali macro asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini percentuali, a ciascuna macro asset class, e con indicazione del grado di Aderenza.";
                /**************************** Modifica aladdin 17062021 - Andrea *************************************************************************/
                "In questa scheda è riportato il confronto, sulla base delle principali asset class finanziarie, tra il patrimonio che, secondo " + adeguataStr + " è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini percentuali, a ciascuna asset class, e con indicazione del grado di Aderenza." : "In questa scheda è riportato il confronto, sulla base delle principali asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini di controvalore, a ciascuna asset class, e con indicazione del grado di Aderenza." : isControvalore() ? "In questa scheda è riportato il confronto, sulla base delle principali macro asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini di controvalore, a ciascuna macro asset class, e con indicazione del grado di Aderenza." : "In questa scheda è riportato il confronto, sulla base delle principali macro asset class finanziarie, tra il patrimonio che secondo la presente proposta è destinato all'area Riserva, e il relativo portafoglio modello, con evidenza dell'esposizione, in termini percentuali, a ciascuna macro asset class.";
                /*****************************************************************************************************************************************/
        }
        //note da fare
        public virtual string getNota1()
        {
            // Nota Portafoglio Consigliato

            var aderenza = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(o => o.portafoglioModello.area.Equals("Ris")).aderenza.portafoglioConsiderato;
            var gradoCoperturaAllocation = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos.stat.copertura;
            string nota = "";
            if (gradoCoperturaAllocation < 100)
            {
                string var = isAssetClass() ? "asset" : "macro asset";
                nota += string.Format("Grado di copertura prodotti rappresentabili in " + var + " allocation (%): {0}.", Helper.FormatDecimal(gradoCoperturaAllocation.ToString(), 2));
            }
            if (aderenza < 100)
                nota += string.Format(" Portafoglio considerato nel calcolo dell'aderenza (%): {0}.", Helper.FormatDecimal(aderenza.ToString(), 2));
            return nota;
        }

        public virtual string getNota2()
        {
            var coperturaRischioMercato = (isAssetClass() ? datiSeiUnico.propostaUnit().assetClass.distribuzione.coverageCC : datiSeiUnico.propostaUnit().macroAssetClass.distribuzione.coverageCC)*100;

            string nota = "";
            if (coperturaRischioMercato < 100)
            {
                nota = string.Format("Grado di copertura prodotti in termini di Rischio Mercato (VaR %): {0}.", Helper.FormatDecimal(coperturaRischioMercato.ToString(), 2));
            }
            return nota;
        }
       
        public virtual bool isControvalore()
        {
            return  !GetOption<Opzione3_2>().Valore;
        }
        public virtual bool isAssetClass()
        {
            return GetOption<Opzione3_1>().Valore;
        }
    }
}
