560 lines
36 KiB
C#
560 lines
36 KiB
C#
using System;
|
|
using Consulenza.ReportWriter.Business;
|
|
using Consulenza.ReportWriter.Business.OBJ_PDF;
|
|
using System.Data;
|
|
using Consulenza.ReportCommon;
|
|
using Consulenza.ReportWriter.Business.CHART_PDF;
|
|
using Consulenza.ReportWriter.Business.Entity;
|
|
using System.Collections.Generic;
|
|
using Consulenza.ReportWriter.Manager.Integration;
|
|
using System.Linq;
|
|
using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica;
|
|
using Consulenza.DataServices.fideuram.data.service;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Unica
|
|
{
|
|
public class S60 : Entity.Section
|
|
{
|
|
|
|
public string TitoloProgetto { get; set; }
|
|
public long ChiaveProgetto { get; set; }
|
|
/// <summary>
|
|
///S60.ProgettoPortafoglioModelloVSProposto idSezione = 103
|
|
/// </summary>
|
|
public S60(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S60", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
protected override sealed void Draw()
|
|
{
|
|
var dati = GetDataSet();
|
|
bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro();
|
|
for (int i = 0; i < dati.Tables["NomeProgetto"].Rows.Count; i++)
|
|
{
|
|
TitoloProgetto = dati.Tables["NomeProgetto"].Rows[i]["NomeProgetto"].ToString();
|
|
string titolospezzato = TitoloProgetto.Length > 23 ? TitoloProgetto.Substring(0, 23) + "..." : TitoloProgetto;
|
|
ChiaveProgetto = long.Parse(dati.Tables["NomeProgetto"].Rows[i]["ChiaveProgetto"].ToString());
|
|
AddElement(new PagePDF(PagePDF.PagePDFType.Generic));
|
|
|
|
var intestazione = new SectionHeadingPDF(
|
|
"Progetto «" + titolospezzato + "»: portafoglio modello vs " + (isAdeguata ? "proposto" : "prospettico"),
|
|
|
|
EnvironmentFacade.RendererFacade.XLeftLimit,
|
|
EnvironmentFacade.RendererFacade.YUpperLimit,
|
|
EnvironmentFacade.ReportEnvironment.FontFamily);
|
|
|
|
AddElement(intestazione.ToElement());
|
|
if (dati.Tables["assetClass"+i].Rows.Count > 0)
|
|
{
|
|
DataTable dtOrdinamento = dati.Tables["assetClass" + i].AsEnumerable().OrderBy(l => l.Field<int>("Ordinamento")).CopyToDataTable();
|
|
//dtOrdinamento.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" + i])
|
|
{
|
|
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(20));
|
|
}
|
|
|
|
//#region label
|
|
//FormattedTextAreaPDF captionCtvProposto = new FormattedTextAreaPDF("Controvalore " + (isAdeguata ? " proposto (€)" : "prospettico (€)"), EnvironmentFacade.RendererFacade.XLeftLimit, 130) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false };
|
|
//AddElement(captionCtvProposto);
|
|
//FormattedTextAreaPDF ctvProposto = new FormattedTextAreaPDF(dati.Tables["labelControvalore" + i].Rows[0]["Controvaloreproposto"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 230) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = false };
|
|
//AddElement(ctvProposto);
|
|
|
|
//FormattedTextAreaPDF captionAderenzaModello = new FormattedTextAreaPDF("Aderenza al portafoglio<br>modello (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 280, 140) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false, TextVerticalAlign =ceTe.DynamicPDF.VAlign.Top, DeltaY=-2};
|
|
//AddElement(captionAderenzaModello);
|
|
//FormattedTextAreaPDF varAderenza = new FormattedTextAreaPDF(dati.Tables["labelControvalore" + i].Rows[0]["Aderenzaportafogliomodello"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 495) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = true };
|
|
//AddElement(varAderenza);
|
|
|
|
//AddElement(new SpacePDF(13));
|
|
//FormattedTextAreaPDF captionVarProposto = new FormattedTextAreaPDF("VaR " + (isAdeguata ? " proposto (%)" : "prospettico (%)"), EnvironmentFacade.RendererFacade.XLeftLimit, 130) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false };
|
|
//AddElement(captionVarProposto);
|
|
//FormattedTextAreaPDF varProposto = new FormattedTextAreaPDF(dati.Tables["labelControvalore" + i].Rows[0]["Varproposto"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 255) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = false };
|
|
//AddElement(varProposto);
|
|
|
|
//FormattedTextAreaPDF captionVarModello = new FormattedTextAreaPDF("VaR portafoglio modello (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 280, 140) { FontSize = 7, BackGroundMarginLeft = 5, BackGroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella, FontColor = ColorPDF.Nero, FontBold = true, AutoIncrementYWritable = false };
|
|
//AddElement(captionVarModello);
|
|
//FormattedTextAreaPDF varModello = new FormattedTextAreaPDF(dati.Tables["labelControvalore" + i].Rows[0]["Varportafogliomodello"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit + 500) { FontSize = 7, BackGroundColor = ColorPDF.Bianco, AutoIncrementYWritable = true };
|
|
//AddElement(varModello);
|
|
|
|
//#endregion
|
|
|
|
AddElement(new SpacePDF(20));
|
|
|
|
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" + i].AsEnumerable().Max(x => x["PercentualeControvaloreModello"])));
|
|
list.Add(Convert.ToDouble(dati.Tables["assetClass" + i].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);
|
|
deltaXBarra = -larghezzaBarra + (isControvalore() ? 0 : 7);
|
|
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,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
DeltaX = isControvalore() ? deltaXBarra+30 : deltaXBarra+10,
|
|
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,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
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 = 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-35 : deltaXBarra-10,
|
|
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(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()
|
|
{
|
|
//ricordarsi che la scheda viene stampata per ogni progetto
|
|
var ds = new DataSet();
|
|
// propostaUnit.stPianificazioneVerticale.stAreePianificazione[X].progetti[Y].valoreAderenza
|
|
#region progetti
|
|
ds.Tables.Add(new DataTable("NomeProgetto"));
|
|
ds.Tables["NomeProgetto"].Columns.Add(new DataColumn("NomeProgetto", typeof(string)));
|
|
ds.Tables["NomeProgetto"].Columns.Add(new DataColumn("ChiaveProgetto", typeof(string)));
|
|
|
|
var progettiInvestimento = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.Where(o => o.portafoglioModello.area.Equals("Inv")).ToList();
|
|
var listaProgettiProposta = isAssetClass() ? datiSeiUnico.propostaUnit().assetClass.distribuzioneAree.Where(o => o.area.Equals("Inv") && o.chiaveProgetto != null) : datiSeiUnico.propostaUnit().macroAssetClass.distribuzioneAree.Where(o => o.area.Equals("Inv") && o.chiaveProgetto != null);
|
|
listaProgettiProposta = listaProgettiProposta.OrderByDescending(o => o.distribuzione.totaleCtv);
|
|
if (listaProgettiProposta != null)
|
|
{
|
|
var displayInfoM = datiSeiUnico.displayInfos().macroAssetDisplayInfos.ToList();
|
|
var displayInfoA = datiSeiUnico.displayInfos().assetDisplayInfos.ToList();
|
|
int i = 0;
|
|
foreach (rsDistibuzioneAree valoriAssetProposto in listaProgettiProposta)
|
|
{
|
|
var item = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(o => o.chiaveProgetto.ToString() == valoriAssetProposto.chiaveProgetto);
|
|
var progettoPro = datiSeiUnico.propostaUnit().stPianificazioneVerticale.stAreePianificazione.FirstOrDefault(o => o.area.Equals("Inv")).progetti.FirstOrDefault(l => l.chiaveProgetto == item.chiaveProgetto);
|
|
var valoreCtvTotaleAttuale = progettoPro.ctvProgettoPro;
|
|
|
|
|
|
var valoriAssetModello = isAssetClass() ? item.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 2).ToList() : item.portafoglioModello.distribuzioniPtfModello.Where(l => l.asset.livello == 1).ToList();
|
|
|
|
ds.Tables["NomeProgetto"].Rows.Add(item.nomeProgetto, item.chiaveProgetto);
|
|
|
|
string labelcontrovalore = "labelControvalore" + i;
|
|
|
|
string assetclass = "assetClass" + i;
|
|
ds.Tables.Add(new DataTable(labelcontrovalore));
|
|
|
|
ds.Tables.Add(new DataTable(assetclass));
|
|
|
|
#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(item.aderenza.valoreAderenza.ToString(), 2));
|
|
Helper.FormatDecimal(progettoPro.valoreAderenza.ToString(), 2));
|
|
ds.Tables[labelcontrovalore].Rows.Add(
|
|
"VaR " + (datiSeiUnico.flagAdeguatezzaPro() ? " proposto (%)" : "prospettico (%)") + (getNota2().Length > 0 ? "*" : ""),
|
|
progettoPro.varProgettoPro,
|
|
"VaR portafoglio modello (%)",
|
|
Helper.FormatDecimal(item.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 * valoreCtvTotaleAttuale : 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 * valoreCtvTotaleAttuale : 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,
|
|
0,//portafoglio modello per un item che non è present
|
|
isControvalore() ? valore.ctvCC : valore.pesoCC * 100,
|
|
valore.order
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
return ds;
|
|
}
|
|
public virtual string getTesto1()
|
|
{
|
|
bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro();
|
|
string adegutaStr = 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 " + adegutaStr + " è destinato al progetto di investimento ''" + TitoloProgetto + "'', 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 " + adegutaStr + " è destinato al progetto di investimento ''" + TitoloProgetto + "'', 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 " + adegutaStr + " è destinato al progetto di investimento ''" + TitoloProgetto + "'', 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 " + adegutaStr + " è destinato al progetto di investimento ''" + TitoloProgetto + "'', e il relativo portafoglio modello, con evidenza dell'esposizione, in termini percentuali, a ciascuna macro asset class, e con indicazione del grado di Aderenza.";
|
|
|
|
}
|
|
//note da fare
|
|
public virtual string getNota1()
|
|
{
|
|
// Nota Portafoglio Consigliato
|
|
var aderenza = datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(o => o.chiaveProgetto == ChiaveProgetto) != null ?
|
|
datiSeiUnico.pianificazioneUnit().pianificazioneOrizzontale.FirstOrDefault(o => o.chiaveProgetto == ChiaveProgetto).aderenza.portafoglioConsiderato : 0;
|
|
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 > 0 && 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 = datiSeiUnico.propostaUnit().stDettaglioProposta.copertura;//isAssetClass() ? datiSeiUnico.propostaUnit().assetClass.distribuzione.coverageCC : datiSeiUnico.propostaUnit().macroAssetClass.distribuzione.coverageCC;
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|