using System;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportCommon;
using System.Linq;
using System.Collections.Generic;
using Consulenza.ReportWriter.Business.CHART_PDF;
using Consulenza.ReportWriter.Business.Entity;
using Dundas.Charting.WebControl;
namespace Consulenza.ReportWriter.Manager.Section.Unica
{
///
/// S43.RischioMercatoVSRischioCredito idSezione = 86
///
public class S43 : Entity.Section
{
//private bool _visualizzaAltriIstituti;
private bool _presenzaNotaPatrimonioCasa = false;
private bool _presenzaNotaPatrimonioTerzi = false;
private bool _presenzaNotaEccessivaAdeguatezza = false;
public S43(EnvironmentFacade environmentFacade, int idSection)
: base(environmentFacade, idSection)
{
try
{
Draw();
}
catch (Exception ex)
{
SectionLogger.Write("S43", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
}
}
protected override sealed void Draw()
{
// if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei
var dati = GetDataSet();
var testi = GetText();
var nota = Helper.ReplaceVariables(GetNote(), EnvironmentFacade.ReportEnvironment);
var series = new List();
var coloreSerieAreaAdeguata = new ColorPDF(228, 235, 238);
var coloreSerieAreaNonAdeguata = new ColorPDF(204, 217, 222);
var labelPersonalizzateAsseX = new List();
foreach (DataRow rowX in dati.Tables[1].Rows)
{
labelPersonalizzateAsseX.Add(new CombinationPDFCustomLabel { Text = string.Empty, Value = Convert.ToDouble(rowX["Valore"]) });
}
var labelPersonalizzateAsseY = new List();
foreach (DataRow rowX in dati.Tables[2].Rows)
{
labelPersonalizzateAsseY.Add(new CombinationPDFCustomLabel { Text = rowX["Testo"].ToString(), Value = Convert.ToDouble(rowX["Valore"]) });
}
#region Testo introduttivo
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
// test purposes
//dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"] = 8; // x
//dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"] = 19;
AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 });
AddElement(new SpacePDF(7));
#region Grafico Rischio Mercato - Rischio Credito
//var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
//Adriano 20180124: per correggere la posizione del grafico, segnalato troppo a dx
var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 110, 1F)
//var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
//--Adriano
{
Name = "comb",
Height = 200,
Width = 300,
MinorGridAxisY = false,
//Adriano: per eliminare lo sfondo diverso per la non adeguatezza per i nuclei
//BackColor = coloreSerieAreaNonAdeguata,
//--Adriano
BackColor = EnvironmentFacade.ReportEnvironment.ReportId == 6 ? coloreSerieAreaAdeguata: coloreSerieAreaNonAdeguata,
//modifiche nucleo contrattualizzato
MarginAxisY = 0,
ShowLineAxisY = true,
ShowLabelAxisY = true,
IntervalNumberAxisY = 5,
StartFromZeroAxisY = true,
//Adriano
// imposta il valore massimo per la scala, per i clienti Retail, per i quali il valore massimo è 27, è 30, per i professionali, per i quali il valore può arrivare a 50, è 55
MaximumValueAxisY = Convert.ToInt32(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]) > 27 ? 53 : 30,
//--Adriano
//originale:
//MaximumValueAxisY = 30, // valore fisso
// ES START su richiesta del Cliente
//IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
// END
CustomLabelAxisY = labelPersonalizzateAsseY,
//MaximumValueAxisY = 30, // valore fisso
//IndicatorAxisY = (EnvironmentFacade.ReportEnvironment.ReportId != 6)?
// new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 }:
// new CombinationPDFIndicator(),
//IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
//IndicatorAxisY = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 },
//CustomLabelAxisY = labelPersonalizzateAsseY,
ShowLineAxisX = true,
ShowLabelAxisX = true,
StartFromZeroAxisX = true,
MaximumValueAxisX = 35, // valore fisso
IntervalNumberAxisX = 4,
CustomLabelAxisX = labelPersonalizzateAsseX,
//IndicatorAxisX = (EnvironmentFacade.ReportEnvironment.ReportId != 6) ?
// new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 }:
// new CombinationPDFIndicator()
//IndicatorAxisX = new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 }
//IndicatorAxisX = new CombinationPDFIndicator() { Text = "", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 }
};
//Adriano 20180125 nel caso in cui non si tratti di un nucleo va mostrato l'indicatore
if (EnvironmentFacade.ReportEnvironment.ReportId != 6) //Non nuclei
{
graficoCombination.IndicatorAxisY = new CombinationPDFIndicator() { Text = "Rischio Mercato (VaR) massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]), DeltaX = -120, DeltaYText = -10 };
graficoCombination.IndicatorAxisX = new CombinationPDFIndicator() { Text = "Rischio Credito massimo", Value = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), DeltaXText = 7, DeltaYText = -10, DeltaY = 4 };
}
#region Serie di adeguatezza
#region modifiche nucleo contrattualizzato
series.Add(
new Serie
{
Name = "AreaDiAdeguatezza",
Type = Dundas.Charting.WebControl.SeriesChartType.Area,
Color = coloreSerieAreaAdeguata,
BorderColor = ColorPDF.Nero,
BorderWidth = 1,
Points = new List() {
new Point {
Values = new ValuesPointXY(0, Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"])),
ShowLabelAxisY = false,
ShowLabelAxisX = false,
Color = coloreSerieAreaAdeguata
},
new Point {
Values = new ValuesPointXY(Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]), Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"])),
ShowLabelAxisY = false,
ShowLabelAxisX = false,
Color = coloreSerieAreaAdeguata
},
}
}
);
#endregion
var d = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field("NumeroPatrimonio")).CopyToDataTable();
foreach (DataRow item in d.Rows)
{
//series.Add(
// new Serie
// {
// Name = item["CodicePatrimonio"].ToString(),
// Type = Dundas.Charting.WebControl.SeriesChartType.Point,
// MarkerImage = string.Format("PallinoColorato{0}c.png", item["NumeroPatrimonio"].ToString()),
// MarkerSize = 25,
// Points = new List() {
// new Point {
// Values = new ValuesPointXY(Convert.ToDouble(item["RischioCredito"]), Convert.ToDouble(item["VaR"])),
// ShowLabelAxisY = false,
// ShowLabelAxisX = false
// }
// }
// }
//);
if (item["RischioCreditoString"].ToString() != "n.c." && item["VaRString"].ToString() != "n.c.")
{
#region Patryk #3594
//sotto modifica di Patryk per centrare indicatori del grafico tra le classi.(a,b,c,d)
//var classea = Convert.ToDouble(dati.Tables[1].Rows[0]["Valore"]);
//float xVal = (float)Convert.ToDouble(item["RischioCredito"]);
//if (item["RischioCreditoString"].ToString().ToLower() == "classe a")
//{
// xVal = 4.375f; // middle of classe A
//}
//else if (item["RischioCreditoString"].ToString().ToLower() == "classe b")
//{
// xVal = 13.125f; // middle of classe B
//}
//else if (item["RischioCreditoString"].ToString().ToLower() == "classe c")
//{
// xVal = 21.875f; // middle of classe C
//}
//else if (item["RischioCreditoString"].ToString().ToLower() == "classe d")
//{
// xVal = 26.25f; // middle of classe D
//}
#endregion
graficoCombination.Markers.Add(new Marker()
{
Image = String.Format("PallinoColorato{0}d.png", item["NumeroPatrimonio"].ToString()),
Width = 17,
Height = 17,
Scale = 1,
X = Convert.ToDouble(item["RischioCredito"]) >= 35 ? 35 : (float)Convert.ToDouble(item["RischioCredito"]),
//Patryk #3594:X = xVal,
Y = Convert.ToDouble(item["VaR"]) > 27 ? 30 : (float)Convert.ToDouble(item["VaR"])
});
}
}
#endregion
#region Serie di non adeguatezza
// ***************Lo sfondo grigio del grafico è dato dalla proprietà BackColor del CombinationPDF. *************
#endregion
#region Serie Patrimoni
#endregion
// aggiungo le Serie al grafico
graficoCombination.SeriesCollection = series;
AddElement(graficoCombination);
#endregion
//Adriano 20180124: per correggere la posizione delle descrizioni asse ascisse (Classe A|Classe B|Classe C|Classe D)
if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
{
//AddElement(new SpacePDF(30));
AddElement(new FormattedTextAreaPDF("Classe A", graficoCombination.X + 20) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 });
AddElement(new FormattedTextAreaPDF("Classe B", graficoCombination.X + 97) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 });
AddElement(new FormattedTextAreaPDF("Classe C", graficoCombination.X + 170) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -90 });
AddElement(new FormattedTextAreaPDF("Classe D", graficoCombination.X + 247) { FontSize = 7, AutoIncrementYWritable = true, DeltaY = -90 });
AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 420) { FontBold = true, FontSize = 7, DeltaY = -80 });
}
else
{
AddElement(new SpacePDF(35));
AddElement(new FormattedTextAreaPDF("Classe A", graficoCombination.X + 20) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 });
AddElement(new FormattedTextAreaPDF("Classe B", graficoCombination.X + 97) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 });
AddElement(new FormattedTextAreaPDF("Classe C", graficoCombination.X + 170) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 });
AddElement(new FormattedTextAreaPDF("Classe D", graficoCombination.X + 247) { FontSize = 7, AutoIncrementYWritable = true, DeltaY = -32 });
//Adriano 20180124: per correggere la posizione della label Rischio Credito
AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 400) { FontBold = true, FontSize = 7, DeltaY = -30 });
//AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 420) { FontBold = true, FontSize = 7, DeltaY = -30 });
//--Adriano 20180124
}
//--Adriano 20180124
#region Tabella
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0])
{
Style = Style.ConsulenzaUnica,
AlternateRow = false,
ShowSeparationLines = true,
RowHeight = 27,
Footer = false,
HeaderHeight = 27,
YOffset = -20
};
//Adriano 20180125 Se si tratta di nucleo non va mostrata l'adeguatezza
if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei
{
tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 5, ScaleColumnTypeImage = 0.32F });
tabella.Columns.Add(new ColumnPDF("Patrimonio", 175, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, FontSize = 7 });
tabella.Columns.Add(new ColumnPDF("Controvalore", 145, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 30, HeaderFontSize = 7, FontSize = 7 });
tabella.Columns.Add(new ColumnPDF("RischioCredito", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio
credito") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 });
tabella.Columns.Add(new ColumnPDF("Var", 50, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 });
tabella.Columns.Add(new ColumnPDF("GradoCopertura", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di
copertura (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 10 });
}
else
{
tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 5, ScaleColumnTypeImage = 0.32F });
tabella.Columns.Add(new ColumnPDF("Patrimonio", 140, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, FontSize = 7 });
tabella.Columns.Add(new ColumnPDF("Controvalore", 105, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 4, HeaderFontSize = 7, FontSize = 7 });
tabella.Columns.Add(new ColumnPDF("RischioCredito", 60, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio
credito") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 });
tabella.Columns.Add(new ColumnPDF("Var", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaRString", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 });
tabella.Columns.Add(new ColumnPDF("GradoCopertura", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di
copertura (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 4 });
tabella.Columns.Add(new ColumnPDF("Adeguatezza", 75, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7, FontSize = 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[9].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[3, i].Value = r["RischioCreditoString"].ToString().ToLower().Contains("classe") ? Helper.CapitalizeWords(r["RischioCreditoString"].ToString()) : r["RischioCreditoString"].ToString();
//if (r["Patrimonio"].ToString().ToLower().Contains("altri"))
//{
// tabella.Cells[6, i].FontColor = ColorPDF.Nero;
// tabella.Cells[6, i].Value = "n.a.";
//}
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");
}
}
i++;
}
//Nota della tabella
if (nota.Length > 0)
{
nota = nota.Replace("(*)", "");
if (_presenzaNotaPatrimonioTerzi && !_presenzaNotaPatrimonioCasa)
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
else if (!_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
}
AddElement(tabella);
#endregion
if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato)
{
AddElement(new SpacePDF(10));
string codicemandato = datiSeiUnico.getClienteReport().codiceMandato;
AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca("La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» e di «Rischio Credito» 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 «Rischio Credito» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + "."), 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));
AddElement(new FormattedTextAreaPDF(getNoteAde(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6 });
//tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, getNoteAde(), new[] { "Var" }, "CodicePatrimonio IN ('BF','SPI')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 7 });
}
var xAreaAdeguatezza = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioCreditoMassimoProfilo"]);
var yAreaAdeguatezza = Convert.ToDouble(dati.Tables[3].Rows[0]["RischioMercatoMassimoProfilo"]);
if (EnvironmentFacade.ReportEnvironment.ReportId != 6) //Non nuclei
{
// OLD X
// NON ADEGUATEZZA EnvironmentFacade.RendererFacade.XLeftLimit + 365
// ADEGUATEZZA EnvironmentFacade.RendererFacade.XLeftLimit + 150 + ((float)xAreaAdeguatezza * graficoCombination.Width / (float)graficoCombination.MaximumValueAxisX) - 68
// OLD Y
// NON ADEGUATEZZA { Y = 235, FontSize = 6.5F, AbsolutePosition = true }
// ADEGUATEZZA {Y = 427 - ((float)yAreaAdeguatezza * graficoCombination.Height / (float)graficoCombination.MaximumValueAxisY) + 8,FontSize = 6.5F,AbsolutePosition = true}
AddElement(new FormattedTextAreaPDF("Area di non adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 325)
{ Y = 225, FontSize = 6.5F, AbsolutePosition = true });
//AddElement(new FormattedTextAreaPDF("Area adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { Y = 410, FontSize = 6.5F, AbsolutePosition = true });
AddElement(new FormattedTextAreaPDF("Area di adeguatezza", EnvironmentFacade.RendererFacade.XLeftLimit + 110 + ((float)xAreaAdeguatezza * graficoCombination.Width / (float)graficoCombination.MaximumValueAxisX) - 68)
{
Y = 417 - ((float)yAreaAdeguatezza * graficoCombination.Height / (float)graficoCombination.MaximumValueAxisY) + 8,
FontSize = 6.5F,
AbsolutePosition = true
});
}
}
///
/// Recupera i dati necessari alla Section restituendo un DataTable.
///
///
protected sealed override DataTable GetDataTable()
{
return null;
}
///
/// Recupera i dati necessari alla Section restituendo un DataSet.
///
///
protected sealed override DataSet GetDataSet()
{
var ds = new DataSet();
#region Estrazione ChiavePB + Chiamate Servizio
//Adriano
#region Cliente/Nucleo professionale
bool profiloProfessionale;
bool profiloAggressivo;
bool profiloProfessionaleAggressivo;
Profiler profiler;
if (EnvironmentFacade.ReportEnvironment.ReportId == 6) //nuclei
{
DataServices.fideuram.data.service.rsAnagraficaNucleo nucleo = datiSeiUnico.nucleiUnit().anagrafica;
profiler = new Profiler(nucleo);
}
else
{
DataServices.fideuram.data.service.rsClienteAnagrafica cliente = datiSeiUnico.clienteUnit().anagrafica;
profiler = new Profiler(cliente);
}
profiloProfessionale = profiler.ProfiloProfessionale;
profiloAggressivo = profiler.ProfiloAggressivo;
profiloProfessionaleAggressivo = profiler.ProfiloProfessionaleAggressivo;
#endregion
//--Adriano
// TO VERIFY
//var anagrafica = datiSeiUnico.piramideModelloUnit().questionarioMifid;
var rischio = datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito;
//Adriano 20180125 Modifica per nuclei: il profilo non è più gestito per i nuclei
int profilo;
decimal rischioMercatoMassimoProfiloCliente;
int rischioCreditoMassimoProfiloCliente;
if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
{
profilo = 5;
rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId);
if (profiloProfessionaleAggressivo)
rischioMercatoMassimoProfiloCliente = 50;
}
else
{
profilo = rischio.profileId;
////Adriano: forzo a 50 il Rischio Mercato Massimo per simulare il caso dei Clienti Pro
//// verificare il valore fornito dal WS, che potrebbe essere già corretto
//rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
//if (profiloProfessionaleAggressivo)
// rischioMercatoMassimoProfiloCliente = 50;
////--Adriano
////originale
rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId);
}
//var profilo = rischio.profileId;
// END
//var rischioMercatoMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
//var rischioCreditoMassimoProfiloCliente = Convert.ToInt32(rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.rischioCreditoId);
//--Adriano 20180125
var rischioFideuram = rischio.bancaFideuram;
var rischioAltriIstituti = rischio.altriIstituti;
var rischioComplessivo = rischio.totale;
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;
#endregion
#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)));
dtRischio.Columns.Add(new DataColumn("RischioCredito", typeof(decimal)));
dtRischio.Columns.Add(new DataColumn("RischioCreditoString", typeof(string)));
dtRischio.Columns.Add(new DataColumn("GradoCopertura", typeof(decimal)));
dtRischio.Columns.Add(new DataColumn("Adeguatezza", typeof(bool)));
dtRischio.Columns.Add(new DataColumn("AdeguatezzaString", typeof(string)));
_presenzaNotaEccessivaAdeguatezza = rischio.eccessivamenteAdeguato;
#region Casa
string banca = Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment);
dtRischio.Rows.Add(
string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio
1, //NumeroPatrimonio
banca == "Fideuram" ? "BF" : "SPI", //CodicePatrimonio
"PallinoColorato1d.png", //ImmaginePatrimonio
totalePatrimonioCasa, //Controvalore
rischioFideuram.misure.varp, //VaR
rischioFideuram.varDecodificato, //VaRString
rischioFideuram.misure.rischioCredito * 100, //RischioCredito
rischioFideuram.rischioCreditoDecodificato, //RischioCreditoString
Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura
rischio.patFideuramAdeguato, //Adeguatezza
rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
);
#endregion
if (visualizzaAltriIstituti() && totalePatrimonioTerzi > 0)
{
#region Terzi
dtRischio.Rows.Add(
"Patrimonio altri Istituti", //Patrimonio
2, //NumeroPatrimonio
"PT", //CodicePatrimonio
"PallinoColorato2d.png", //ImmaginePatrimonio
totalePatrimonioTerzi, //Controvalore
rischioAltriIstituti.misure.varp, //VaR
rischioAltriIstituti.varDecodificato, //VaRString
rischioAltriIstituti.misure.rischioCredito * 100, //RischioCredito
rischioAltriIstituti.rischioCreditoDecodificato, //RischioCreditoString
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
"PallinoColorato3d.png", //ImmaginePatrimonio
totalePatrimonioFinanziario, //Controvalore
rischioComplessivo.misure.varp, //VaR
rischioComplessivo.varDecodificato, //VaR
rischioComplessivo.misure.rischioCredito * 100, //RischioCredito
rischioComplessivo.rischioCreditoDecodificato, //RischioCreditoString
Math.Round(rischioComplessivo.stat.copertura, 2), //GradoCopertura
rischio.patCompletoAdeguato, //Adeguatezza
rischio.patCompletoAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
);
#endregion
}
ds.Tables.Add(dtRischio);
#endregion
#region Soglie Asse X
// I valori non sono quelli reali definiti nel database ma sono riproporzionati in funzione della richiesta del cliente.
var dtSoglieX = new DataTable();
dtSoglieX.Columns.Add(new DataColumn("Id", typeof(int)));
dtSoglieX.Columns.Add(new DataColumn("Valore", typeof(decimal)));
dtSoglieX.Rows.Add(1, 8.77);
dtSoglieX.Rows.Add(2, 17.54);
dtSoglieX.Rows.Add(3, 26.31);
// dtSoglieX.Rows.Add(4, 32);m valore cliente: modificato il 30 maggio perchè ppt è diverso. e quindi mettiamo quello sotto:
dtSoglieX.Rows.Add(4, 35.08);
ds.Tables.Add(dtSoglieX);
#endregion
#region Soglie Asse Y
var dtSoglieY = new DataTable();
dtSoglieY.Columns.Add(new DataColumn("Valore", typeof(decimal)));
dtSoglieY.Columns.Add(new DataColumn("Testo", typeof(string)));
//Adriano:
dtSoglieY.Rows.Add(2, "2,00");
dtSoglieY.Rows.Add(4.5, "4,50");
dtSoglieY.Rows.Add(9.5, "9,50");
dtSoglieY.Rows.Add(15, "15,00");
if (profiloProfessionaleAggressivo)
dtSoglieY.Rows.Add(50, "50,00");
else
dtSoglieY.Rows.Add(27, "27,00");
//--Adriano
//originale
//dtSoglieY.Rows.Add(2, "2,00");
//dtSoglieY.Rows.Add(4.5, "4,50");
//dtSoglieY.Rows.Add(9.5, "9,50");
//dtSoglieY.Rows.Add(15, "15,00");
//dtSoglieY.Rows.Add(27, "27,00");
ds.Tables.Add(dtSoglieY);
#endregion
#region Cliente
var dtCliente = new DataTable();
dtCliente.Columns.Add(new DataColumn("RischioMercatoMassimoProfilo", typeof(decimal)));
dtCliente.Columns.Add(new DataColumn("RischioCreditoMassimoProfilo", typeof(decimal)));
dtCliente.Rows.Add(rischioMercatoMassimoProfiloCliente, dtSoglieX.AsEnumerable().FirstOrDefault(o => o.Field("Id").Equals(rischioCreditoMassimoProfiloCliente))["Valore"]);
ds.Tables.Add(dtCliente);
#endregion
return ds;
}
public virtual string getNotaCopertura5RMRC() //40.5 copertura rischio mercato var e rischio credito
{
string nota = "";
bool gradoCoperturaRM;
bool gradoCoperturaRC;
try
{
gradoCoperturaRM = Convert.ToDouble(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ",")) > 0 && Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ",")) < 90;
gradoCoperturaRC = Convert.ToDouble(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ",")) > 0 && Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ",")) < 90;
string rm = gradoCoperturaRM ? "Rischio Mercato (VaR)" : "";
string rc = gradoCoperturaRM && gradoCoperturaRC ? " e di Rischio Credito" : !gradoCoperturaRM && gradoCoperturaRC ? " Rischio Credito" : "";
if (gradoCoperturaRM || gradoCoperturaRC)
{
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 + ", 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.";
}
}
catch { }
return datiSeiUnico.FormatBanca(nota);
}
///
/// Recupera la nota dinamica
///
///
///
private string getNoteAde()
{
return Helper.ReplaceVariables("Il patrimonio che lei detiene presso $/Banca/$ risulta adeguato al suo profilo finanziario. Le segnaliamo, tuttavia, che il livello di Rischio Mercato (VaR) del patrimonio che lei detiene presso $/Banca/$ si posiziona su un valore sensibilmente inferiore rispetto alla soglia minima attribuita al suo profilo finanziario.", base.EnvironmentFacade.ReportEnvironment);
}
public virtual bool visualizzaAltriIstituti()
{
return GetOption().Valore;
}
private string GetNote()
{
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();
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
decimal TUOFOGLIO_CASA = pianificazioneVerticale.liqFogliNeg; //liquidità sottostante Il Mio Foglio del patrimonio casa
//--20181009 AC
// 20181009 AC
_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;
if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA!=0)
{
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);
}
}
}