801 lines
43 KiB
C#
801 lines
43 KiB
C#
using System;
|
|
using Consulenza.ReportWriter.Business;
|
|
using Consulenza.ReportWriter.Business.OBJ_PDF;
|
|
using System.Data;
|
|
using Consulenza.ReportCommon;
|
|
using System.Collections.Generic;
|
|
using Consulenza.ReportWriter.Business.CHART_PDF;
|
|
using Consulenza.ReportWriter.Business.Entity;
|
|
using System.Linq;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Unica
|
|
{
|
|
/// <summary>
|
|
/// S77.RischioCreditovsDiversificazionexRischioCredito idSezione = 236
|
|
/// </summary>
|
|
public class S77 : Entity.Section
|
|
{
|
|
private bool _visualizzaAltriIstituti;
|
|
private bool _visualizzaGrafico;
|
|
private bool _presenzaNotaPatrimonioCasa = false;
|
|
private bool _presenzaNotaPatrimonioTerzi = false;
|
|
private bool _presenzaNotaEccessivaAdeguatezza = false;
|
|
//20180907 AC
|
|
double nSogliaMax = 0;
|
|
string sSogliaMax = "";
|
|
|
|
public S77(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
_visualizzaAltriIstituti = GetOption<Opzione4>().Valore;
|
|
_visualizzaGrafico = GetOption<Opzione4_9>().Valore;
|
|
//_visualizzaAltriIstituti = true;
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S77", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
protected override sealed void Draw()
|
|
{
|
|
var dati = GetDataSet();
|
|
var testi = GetText();
|
|
var nota = Helper.ReplaceVariables(GetNote1(), EnvironmentFacade.ReportEnvironment);
|
|
var series = new List<Serie>();
|
|
|
|
#region Testo introduttivo
|
|
|
|
AddElement(new SpacePDF(12));
|
|
|
|
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
|
|
|
|
#region Grafico VaR Diversificazione
|
|
|
|
if (_visualizzaGrafico)
|
|
{
|
|
//Adriano 20180124: per centrare il grafico, che risulta troppo a dx
|
|
AddElement(new FormattedTextAreaPDF("Rischio Credito", EnvironmentFacade.RendererFacade.XLeftLimit + 90) { FontBold = true, FontSize = 7 });
|
|
//AddElement(new FormattedTextAreaPDF("Rischio Mercato (VaR %)", EnvironmentFacade.RendererFacade.XLeftLimit + 110) { FontBold = true, FontSize = 7 });
|
|
//--Adriano 20180124
|
|
AddElement(new SpacePDF(8));
|
|
|
|
#region //modifiche nucleo contrattualizzato
|
|
var labelPersonalizzateAsseY = new List<CombinationPDFCustomLabel>();
|
|
foreach (DataRow rowX in dati.Tables["dtSoglieY"].Rows)
|
|
{
|
|
labelPersonalizzateAsseY.Add(new CombinationPDFCustomLabel { Text = string.Empty, Value = Convert.ToDouble(rowX["Valore"]) });
|
|
//20180907 AC
|
|
if (rowX["testo"].ToString().ToUpper() == sSogliaMax.ToUpper())
|
|
nSogliaMax = Convert.ToDouble(rowX["Valore"]);
|
|
}
|
|
//Adriano 20180124: per centrare il grafico, che risulta troppo a dx
|
|
var graficoCombination = new CombinationPDF(
|
|
EnvironmentFacade.ReportEnvironment.ReportId != 6 ?
|
|
//EnvironmentFacade.RendererFacade.XLeftLimit + 150 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
|
|
EnvironmentFacade.RendererFacade.XLeftLimit + 115 : EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
|
|
//var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 90, 1F)
|
|
//var graficoCombination = new CombinationPDF(EnvironmentFacade.RendererFacade.XLeftLimit + 150, 1F)
|
|
//--Adriano 20180124
|
|
{
|
|
Height = 200,
|
|
Width = 350,
|
|
|
|
BackImage = "ChartGradient_VarDiversificazione.png",
|
|
|
|
MarginAxisY = 0,
|
|
|
|
ShowLabelAxisY = true,
|
|
LabelFormatAxisY = FormatType.Decimale0,
|
|
IntervalNumberAxisY = 4,
|
|
StartFromZeroAxisY = true,
|
|
MaximumValueAxisY = 35, // valore fisso
|
|
CustomLabelAxisY = labelPersonalizzateAsseY,
|
|
LabelFormatAxisX = FormatType.Intero,
|
|
ShowLineAxisX = true,
|
|
ShowLabelAxisX = true,
|
|
StartFromZeroAxisX = true,
|
|
MaximumValueAxisX = 100,
|
|
IntervalNumberAxisX = 10
|
|
|
|
};
|
|
|
|
// Adriano 20180125: Se non si tratta di nucleo va tenuto l'indicatore sull'asse Y
|
|
if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
|
|
{
|
|
graficoCombination.IndicatorAxisY = new CombinationPDFIndicator()
|
|
{
|
|
Text = "Rischio Credito massimo profilo",
|
|
//20180907 AC
|
|
//Value = Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]) >= 50 ? 35 : Convert.ToDouble(dati.Tables[1].Rows[0]["VarMassimoProfilo"]),
|
|
Value = nSogliaMax,
|
|
//Value = Convert.ToDouble(yPosRC(dati.Tables[1].Rows[0]["rischioCreditoProfiloCliente"].ToString())),
|
|
DeltaX = -115,
|
|
DeltaYText = -10
|
|
};
|
|
}
|
|
#endregion
|
|
// creo le Serie
|
|
var d = dati.Tables[0].AsEnumerable().OrderByDescending(o => o.Field<int>("NumeroPatrimonio")).CopyToDataTable();
|
|
foreach (DataRow item in d.Rows)
|
|
{
|
|
if (item["Diversificazione"].ToString() != "n.c." && item["RischioCreditoString"].ToString() != "n.c.")
|
|
{
|
|
|
|
series.Add(
|
|
new Serie
|
|
{
|
|
//il name è fatto così perchè se si stampano 43 e 44 che hanno stessi codicipatrimonio nei grafici, il nome viene registrato e va in errore perchè già presente..
|
|
Name = series.FirstOrDefault(o => o.Name.Equals(item["CodicePatrimonio"].ToString())) != null ? item["CodicePatrimonio"].ToString() + 1 : item["CodicePatrimonio"].ToString(),
|
|
Type = Dundas.Charting.WebControl.SeriesChartType.Point,
|
|
|
|
MarkerImage = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
|
|
// MarkerSize = 50,
|
|
Points = new List<Point>() {
|
|
new Point {
|
|
//20180907 AC
|
|
Values = new ValuesPointXY(Convert.ToDouble(item["Diversificazione"]), Convert.ToDouble(yPosRC(item["RischioCreditoString"].ToString()))),
|
|
ShowLabelAxisY = false,
|
|
ShowLabelAxisX = false,
|
|
FontSizeLabelAxisX=7,
|
|
FontSizeLabelAxisY=7,
|
|
Visible = false
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
bool showMarker = false;
|
|
if (item["Patrimonio"].ToString().ToLower().Contains("altri"))
|
|
{
|
|
if (_visualizzaAltriIstituti)
|
|
{
|
|
showMarker = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
showMarker = true;
|
|
}
|
|
|
|
if (showMarker)
|
|
{
|
|
graficoCombination.Markers.Add(new Marker()
|
|
{
|
|
Image = string.Format("Pallino{0}c.png", item["NumeroPatrimonio"].ToString()),
|
|
Width = 15,
|
|
Height = 15,
|
|
Scale = 1,
|
|
X = Convert.ToDouble(item["Diversificazione"]) > 100 ? 100 : (float)Convert.ToDouble(item["Diversificazione"]),
|
|
//20180907 AC
|
|
//Y = Convert.ToDouble(item["RischioCredito"]) >= 35 ? 35 : (float)yPos(Convert.ToDouble(item["RischioCredito"]))
|
|
Y = Convert.ToDouble(item["RischioCredito"]) >= 35 ? 35 : (float)yPosRC(item["RischioCreditoString"].ToString())
|
|
});
|
|
}
|
|
}
|
|
};
|
|
//if (series[0].Points.Count == 0 && graficoCombination.Markers.Count == 0)
|
|
//{
|
|
|
|
//}
|
|
// aggiungo le Serie al grafico
|
|
graficoCombination.SeriesCollection = series;
|
|
|
|
AddElement(graficoCombination);
|
|
|
|
|
|
AddElement(new FormattedTextAreaPDF("Classe A", graficoCombination.X - 40) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -32 });
|
|
AddElement(new FormattedTextAreaPDF("Classe B", graficoCombination.X - 40) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -80 });
|
|
AddElement(new FormattedTextAreaPDF("Classe C", graficoCombination.X - 40) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -128 });
|
|
AddElement(new FormattedTextAreaPDF("Classe D", graficoCombination.X - 40) { FontSize = 7, AutoIncrementYWritable = false, DeltaY = -176 });
|
|
|
|
#endregion
|
|
|
|
AddElement(new SpacePDF(17));
|
|
//Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
|
|
//AddElement(new FormattedTextAreaPDF("Diversificazione (%)", EnvironmentFacade.RendererFacade.XLeftLimit + 293) { FontBold = true, FontSize = 7 });
|
|
AddElement(new FormattedTextAreaPDF("Diversificazione del rischio credito", EnvironmentFacade.RendererFacade.XLeftLimit + 230) { FontBold = true, FontSize = 7 });
|
|
//--Adriano 20180124
|
|
AddElement(new SpacePDF(20));
|
|
|
|
}
|
|
#region Tabella
|
|
|
|
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables[0])
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
AlternateRow = false,
|
|
ShowSeparationLines = true,
|
|
RowHeight = 27,
|
|
Footer = false,
|
|
HeaderHeight = 30
|
|
};
|
|
|
|
|
|
//Adriano 20180125: per i nuclei non va messa la colonna Adeguatezza
|
|
if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
|
|
{
|
|
tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 25, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
|
|
tabella.Columns.Add(new ColumnPDF("Patrimonio", 160, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
tabella.Columns.Add(new ColumnPDF("Controvalore", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore<br>(€)") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("RischioCredito", 50, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio<br>Credito") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("Diversificazione", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Diversificazione", "Diversificazione<br>rischio credito") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
}
|
|
else
|
|
{
|
|
tabella.Columns.Add(new ColumnPDF("ImmaginePatrimonio", 30, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "ImmaginePatrimonio", string.Empty) { DeltaYContent = 7, ScaleColumnTypeImage = 0.55F });
|
|
tabella.Columns.Add(new ColumnPDF("Patrimonio", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Patrimonio", "Patrimonio") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
tabella.Columns.Add(new ColumnPDF("Controvalore", 115, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvalore", "Controvalore attuale (€)") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("RischioCredito", 50, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "RischioCreditoString", "Rischio<br>Credito") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("Diversificazione", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Diversificazione", "Diversificazione<br>rischio credito") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("GradoCopertura", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "GradoCopertura", "Grado di <br>copertura (%)") { PaddingRight = 10, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("Adeguatezza", 65, HorizontalAlignmentType.Centrato, false, false, 7, ColumnType.Testo, "AdeguatezzaString", "Adeguatezza") { HeaderFontSize = 7 });
|
|
}
|
|
|
|
|
|
// cloning entire datasource (changing Grado di copertura(%) type from decimal to string, so its possible to put there "n.c."
|
|
DataTable dtCloned = tabella.DataSource.Clone();
|
|
dtCloned.Columns[8].DataType = typeof(string);
|
|
foreach (DataRow row in tabella.DataSource.Rows)
|
|
{
|
|
dtCloned.ImportRow(row);
|
|
}
|
|
tabella.DataSource = dtCloned;
|
|
int i = 0;
|
|
foreach (DataRow r in tabella.DataSource.Rows)
|
|
{
|
|
var colorAdeguatezza = Convert.ToBoolean(r["Adeguatezza"]) ? new ColorPDF(0, 176, 70) : new ColorPDF(255, 0, 0);
|
|
tabella.Cells[6, i].FontColor = colorAdeguatezza;
|
|
tabella.Cells[2, i].HorizontalAlignment =
|
|
tabella.Cells[3, i].HorizontalAlignment =
|
|
tabella.Cells[4, i].HorizontalAlignment =
|
|
tabella.Cells[5, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabella.Cells[4, i].Value = Convert.ToDecimal(r["Diversificazione"].ToString()) == 0 ? "n.c." : Helper.FormatDecimal(r["Diversificazione"].ToString(), 2);
|
|
if (r["Patrimonio"].ToString().ToLower().Contains("altri"))
|
|
{
|
|
tabella.Cells[5, i].Value = "n.c.";
|
|
tabella.Cells[6, i].FontColor = colorAdeguatezza;
|
|
//tabella.Cells[6, i].Value = "n.a.";
|
|
}
|
|
//r["Patrimonio"] = "aaa";
|
|
//if ((r["Patrimonio"].ToString().ToLower().Contains("patrimonio altri istituti") ||
|
|
// r["Patrimonio"].ToString().ToLower().Contains("patrimonio finanziario complessivo")) &&
|
|
// !r["Patrimonio"].ToString().ToLower().EndsWith("*"))
|
|
//{
|
|
// r["Patrimonio"] += "*";
|
|
//}
|
|
decimal result = 0;
|
|
|
|
if (Decimal.TryParse(r["GradoCopertura"].ToString(), out result))
|
|
{
|
|
if (result == 0)
|
|
{
|
|
tabella.Cells[5, i].Value = "n.c.";
|
|
}
|
|
else
|
|
{
|
|
tabella.Cells[5, i].Value = result.ToString("N");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
tabella.Cells[5, i].Value = "n.c.";
|
|
}
|
|
i++;
|
|
}
|
|
|
|
if (nota.Length > 0)
|
|
{
|
|
nota = nota.Replace("(*)", "");
|
|
if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa == false)
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('PT','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
|
|
else if (_presenzaNotaPatrimonioTerzi && _presenzaNotaPatrimonioCasa)
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
|
|
else if (_presenzaNotaPatrimonioTerzi == false && _presenzaNotaPatrimonioCasa)
|
|
tabella.Notes.Add(new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, nota, new[] { "Patrimonio" }, "CodicePatrimonio IN ('BF','PC')", TableNotePDF.TableNoteAsteriskPositionType.CorpoTabella) { FontSize = 6 });
|
|
}
|
|
|
|
AddElement(tabella);
|
|
//AddElement(new SpacePDF(20));
|
|
//AddElement(new FormattedTextAreaPDF(nota, EnvironmentFacade.RendererFacade.XLeftLimit) { TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify, FontSize = 7 });
|
|
|
|
#endregion
|
|
|
|
|
|
if (datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito.flagfiduciariaPluriMandato)
|
|
{
|
|
AddElement(new SpacePDF(10));
|
|
string codicemandato = datiSeiUnico.getClienteReport().codiceMandato;
|
|
string testo = "La valutazione di adeguatezza del patrimonio $/Banca/$ in termini di «Rischio Mercato (VaR)» prende in considerazione il patrimonio detenuto presso $/Banca/$ da tutti i mandati fiduciari associati al medesimo fiduciante a cui appartiene il mandato <" + codicemandato + ">. Gli indicatori «Rischio Mercato (VaR)» e «Diversificazione» del patrimonio $/Banca/$, invece, sono calcolati considerando esclusivamente i prodotti detenuti dal mandato " + codicemandato + ".";
|
|
AddElement(new FormattedTextAreaPDF(datiSeiUnico.FormatBanca(testo), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
|
|
}
|
|
if (getNotaCopertura5RMRC().Length > 0)
|
|
{
|
|
AddElement(new SpacePDF(10));
|
|
AddElement(new FormattedTextAreaPDF(getNotaCopertura5RMRC(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
|
|
}
|
|
//Nota di eccessiva adeguatezza
|
|
if (_presenzaNotaEccessivaAdeguatezza)
|
|
{
|
|
AddElement(new SpacePDF(10));
|
|
var notaEccessivaAdeguatezza = Helper.ReplaceVariables(testi.Rows[0]["testo4"].ToString(), EnvironmentFacade.ReportEnvironment);
|
|
AddElement(new FormattedTextAreaPDF(notaEccessivaAdeguatezza, EnvironmentFacade.RendererFacade.XLeftLimit, 520) { FontSize = 6 });
|
|
}
|
|
//Adriano 20180124: per spostare la label più a sx, per seguire lo spostamento del grafico
|
|
if (EnvironmentFacade.ReportEnvironment.ReportId != 6)
|
|
{
|
|
AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 35) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 35) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 35) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
}
|
|
else
|
|
{
|
|
AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155 - 60) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290 - 60) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425 - 60) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
}
|
|
//AddElement(new FormattedTextAreaPDF("Area di pericolo", EnvironmentFacade.RendererFacade.XLeftLimit + 155) { Y = 217, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
//AddElement(new FormattedTextAreaPDF("Area di equilibrio", EnvironmentFacade.RendererFacade.XLeftLimit + 290) { Y = 305, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
//AddElement(new FormattedTextAreaPDF("Area di sicurezza", EnvironmentFacade.RendererFacade.XLeftLimit + 425) { Y = 385, FontSize = 7, FontBold = true, FontColor = ColorPDF.Bianco, AbsolutePosition = true });
|
|
|
|
//--Adriano 20180124
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera i dati necessari alla Section restituendo un DataTable.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
protected sealed override DataTable GetDataTable()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera i dati necessari alla Section restituendo un DataSet.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
protected sealed override DataSet GetDataSet()
|
|
{
|
|
var ds = new DataSet();
|
|
var rischio = datiSeiUnico.rischioUnit().rischio.rischioMercatoCredito;
|
|
|
|
//Adriano 20180125 Per eliminare la gestione profilazione per i nuclei (non più gestita nel WS)
|
|
int profilo;
|
|
decimal varMassimoProfiloCliente;
|
|
|
|
//20180907 AC
|
|
string rischioCreditoProfiloCliente;
|
|
|
|
//*********** varMassimoProfiloCliente dovrà prendere come valore massimo quello del Rischio Credito Max
|
|
|
|
if (EnvironmentFacade.ReportEnvironment.ReportId == 6)
|
|
{
|
|
profilo = 5;
|
|
varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
|
|
}
|
|
else
|
|
{
|
|
profilo = rischio.profileId;
|
|
varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
|
|
}
|
|
|
|
//20180907 AC
|
|
rischioCreditoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.descrizioneRischioCredito;
|
|
|
|
//var profilo = rischio.profileId;
|
|
//var varMassimoProfiloCliente = rischio.soglieMassime.FirstOrDefault(o => o.key == profilo).value.varMax;
|
|
//Adriano 20180125
|
|
|
|
var totCasa = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliFideuram;
|
|
var totTerzi = datiSeiUnico.rischioUnit().rischio.rischioCreditoConcetrazione.totaliAltriIstituti;
|
|
|
|
var totalePatrimonioCasa = totCasa.risorseFinanziarie + totCasa.partiteViaggianti;
|
|
var totalePatrimonioTerzi = totTerzi.risorseFinanziarie;
|
|
var totalePatrimonioFinanziario = totCasa.risorseFinanziarie + totCasa.partiteViaggianti + totTerzi.risorseFinanziarie;
|
|
|
|
|
|
var rischioFideuram = rischio.bancaFideuram;
|
|
var rischioAltriIstituti = rischio.altriIstituti;
|
|
var rischioComplessivo = rischio.totale;
|
|
_presenzaNotaEccessivaAdeguatezza = rischio.eccessivamenteAdeguato;
|
|
|
|
|
|
#region Rischio
|
|
var dtRischio = new DataTable();
|
|
dtRischio.Columns.Add(new DataColumn("Patrimonio", typeof(string)));
|
|
dtRischio.Columns.Add(new DataColumn("NumeroPatrimonio", typeof(Int32)));
|
|
dtRischio.Columns.Add(new DataColumn("CodicePatrimonio", typeof(string)));
|
|
dtRischio.Columns.Add(new DataColumn("ImmaginePatrimonio", typeof(string)));
|
|
dtRischio.Columns.Add(new DataColumn("Controvalore", typeof(decimal)));
|
|
dtRischio.Columns.Add(new DataColumn("RischioCredito", typeof(decimal)));
|
|
dtRischio.Columns.Add(new DataColumn("RischioCreditoString", typeof(string)));
|
|
dtRischio.Columns.Add(new DataColumn("Diversificazione", 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)));
|
|
|
|
#region Casa
|
|
if (totalePatrimonioCasa == 0)
|
|
dtRischio.Rows.Add(
|
|
string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio
|
|
1, //NumeroPatrimonio
|
|
"BF", //CodicePatrimonio
|
|
"Pallino1.png", //ImmaginePatrimonio
|
|
totalePatrimonioCasa, //Controvalore
|
|
rischioFideuram.misure.rischioCredito * 100,
|
|
rischioFideuram.rischioCreditoDecodificato.ToLower().Contains("classe") ? Helper.CapitalizeWords(rischioFideuram.rischioCreditoDecodificato) : rischioFideuram.rischioCreditoDecodificato,
|
|
0,
|
|
Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura
|
|
rischio.patFideuramAdeguato,
|
|
rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
|
|
); //Adeguatezza
|
|
else
|
|
dtRischio.Rows.Add(
|
|
string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)), //Patrimonio
|
|
1, //NumeroPatrimonio
|
|
"BF", //CodicePatrimonio
|
|
"Pallino1.png", //ImmaginePatrimonio
|
|
totalePatrimonioCasa, //Controvalore
|
|
rischioFideuram.misure.rischioCredito * 100,
|
|
rischioFideuram.rischioCreditoDecodificato.ToLower().Contains("classe") ? Helper.CapitalizeWords(rischioFideuram.rischioCreditoDecodificato) : rischioFideuram.rischioCreditoDecodificato,
|
|
rischio.diversicazioneCasa.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOCREDITO")).value,
|
|
Math.Round(rischioFideuram.stat.copertura, 2), //GradoCopertura
|
|
rischio.patFideuramAdeguato,
|
|
rischio.patFideuramAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
|
|
); //Adeguatezza
|
|
|
|
#endregion
|
|
|
|
if (_visualizzaAltriIstituti && totalePatrimonioTerzi > 0)
|
|
{
|
|
#region Terzi
|
|
dtRischio.Rows.Add(
|
|
"Patrimonio altri Istituti", //Patrimonio
|
|
2, //NumeroPatrimonio
|
|
"PT", //CodicePatrimonio
|
|
"Pallino2.png", //ImmaginePatrimonio
|
|
totalePatrimonioTerzi, //Controvalore
|
|
rischioAltriIstituti.misure.rischioCredito * 100,
|
|
rischioAltriIstituti.rischioCreditoDecodificato.ToLower().Contains("classe") ? Helper.CapitalizeWords(rischioAltriIstituti.rischioCreditoDecodificato) : rischioAltriIstituti.rischioCreditoDecodificato,
|
|
rischio.diversicazioneComplessivo.beneficio.Count() > 0 ?
|
|
rischio.diversicazioneTerzi.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOCREDITO")).value
|
|
: 0,
|
|
Math.Round(rischioAltriIstituti.stat.copertura, 2), //GradoCopertura
|
|
rischio.patAltriIstitutiAdeguato, //Adeguatezza
|
|
rischio.patAltriIstitutiAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
|
|
);
|
|
#endregion
|
|
|
|
#region Complessivo
|
|
dtRischio.Rows.Add(
|
|
"Patrimonio finanziario complessivo", //Patrimonio
|
|
3, //NumeroPatrimonio
|
|
"PC", //CodicePatrimonio
|
|
"Pallino3.png", //ImmaginePatrimonio
|
|
totalePatrimonioFinanziario, //Controvalore
|
|
rischioComplessivo.misure.rischioCredito * 100,
|
|
rischioComplessivo.rischioCreditoDecodificato.ToLower().Contains("classe") ? Helper.CapitalizeWords(rischioComplessivo.rischioCreditoDecodificato) : rischioComplessivo.rischioCreditoDecodificato,
|
|
rischio.diversicazioneComplessivo.beneficio.Count() > 0 ?
|
|
rischio.diversicazioneComplessivo.beneficio.FirstOrDefault(o => o.key.ToUpper().Equals("DIVERSIFICAZIONERISCHIOCREDITO")).value
|
|
: 0,
|
|
Math.Round(rischioComplessivo.stat.copertura, 2), //GradoCopertura
|
|
rischio.patCompletoAdeguato,
|
|
rischio.patCompletoAdeguato ? "Adeguato" : "Non adeguato" //AdeguatezzaString
|
|
); //Adeguatezza
|
|
#endregion
|
|
}
|
|
|
|
ds.Tables.Add(dtRischio);
|
|
#endregion
|
|
|
|
#region Cliente
|
|
|
|
var dtCliente = new DataTable();
|
|
dtCliente.Columns.Add(new DataColumn("VarMassimoProfilo", typeof(decimal)));
|
|
//20180907 AC
|
|
dtCliente.Columns.Add(new DataColumn("rischioCreditoProfiloCliente", typeof(string)));
|
|
//20180907 AC
|
|
dtCliente.Rows.Add(varMassimoProfiloCliente, rischioCreditoProfiloCliente);
|
|
|
|
//dtCliente.Rows.Add();
|
|
|
|
ds.Tables.Add(dtCliente);
|
|
|
|
sSogliaMax = Helper.resultValueVariousString(rischioCreditoProfiloCliente);
|
|
|
|
#endregion
|
|
|
|
#region Soglie Asse Y
|
|
|
|
//ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Valore", typeof(decimal)));
|
|
//ds.Tables["dtSoglieY"].Columns.Add(new DataColumn("Testo", typeof(string)));
|
|
//ds.Tables["dtSoglieY"].Rows.Add(2, "2,00");
|
|
//ds.Tables["dtSoglieY"].Rows.Add(4.5, "4,50");
|
|
//ds.Tables["dtSoglieY"].Rows.Add(9.5, "9,50");
|
|
//ds.Tables["dtSoglieY"].Rows.Add(15, "15,00");
|
|
//ds.Tables["dtSoglieY"].Rows.Add(27, "27,00");
|
|
|
|
var dtSoglieY = new DataTable("dtSoglieY");
|
|
dtSoglieY.Columns.Add(new DataColumn("Id", typeof(int)));
|
|
dtSoglieY.Columns.Add(new DataColumn("Testo", typeof(string)));
|
|
dtSoglieY.Columns.Add(new DataColumn("Valore", typeof(decimal)));
|
|
dtSoglieY.Rows.Add(1, "Classe A", 8.77);
|
|
dtSoglieY.Rows.Add(2, "Classe B", 17.54);
|
|
dtSoglieY.Rows.Add(3, "Classe C", 26.31);
|
|
dtSoglieY.Rows.Add(4, "Classe D", 35.08);
|
|
|
|
ds.Tables.Add(dtSoglieY);
|
|
#endregion Soglie Asse Y
|
|
|
|
|
|
return ds;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Recupera la nota dinamica
|
|
/// </summary>
|
|
/// <param name="nota"></param>
|
|
/// <returns></returns>
|
|
public virtual string GetNote1()
|
|
{
|
|
|
|
string nota = "";
|
|
string token = "";
|
|
|
|
var pianificazioneVerticale = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale;
|
|
|
|
decimal CCN_CASA = pianificazioneVerticale.contoCorrenteNegativo; //cc negativi del patrimonio casa
|
|
decimal CCN_TERZI = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.contoCorrentiNegativi;
|
|
_presenzaNotaPatrimonioTerzi = CCN_TERZI != 0 && _visualizzaAltriIstituti;
|
|
|
|
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;
|
|
_presenzaNotaPatrimonioCasa = CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA != 0;
|
|
//--20181009 AC
|
|
|
|
decimal GC = 100;
|
|
decimal OC_CASA = 0;//patrimonioCasa.totaliPatrimonio.partiteViaggianti; //Operazioni in corso del patrimonio casa
|
|
decimal CC_CASA = 0;// patrimonioCasa.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio casa
|
|
decimal CC_TERZI = 0;// patrimonioTerzi.totaliPatrimonio.contoCorrentePositivo; //cc positivo del patrimonio terzi
|
|
decimal PNR_CASA = 0; //Patrimonio non rappresentabile per macroassetclass del patrimonio casa
|
|
decimal PNR_TERZI = 0;
|
|
|
|
// 20181009 AC
|
|
//if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || CCN_TERZI != 0)
|
|
if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || CCN_TERZI != 0 || TUOFOGLIO_CASA != 0)
|
|
//--20181009 AC
|
|
{
|
|
nota += token + "Il controvalore";
|
|
token = " ";
|
|
// 20181009 AC
|
|
//if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0)
|
|
if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || TUOFOGLIO_CASA != 0)
|
|
//--20181009 AC
|
|
{
|
|
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
|
|
if (GPELIGOFONDI_CASA != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Fondi ({0} €)", GPELIGOFONDI_CASA);
|
|
token = (GPELIGTITOLI_CASA != 0) ? ", " : "";
|
|
}
|
|
if (GPELIGTITOLI_CASA != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Titoli ({0} €)", GPELIGTITOLI_CASA);
|
|
}
|
|
token = ". ";
|
|
}
|
|
|
|
if (CCN_TERZI != 0 && _visualizzaAltriIstituti)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal(" Il controvalore del patrimonio altri Istituti esclude il saldo negativo dei conti correnti ({0} €)", CCN_TERZI);
|
|
}
|
|
}
|
|
|
|
if (GC < 100)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("Grado di copertura (%) della rappresentazione grafica per macro asset class pari a {0}", GC);
|
|
token = ": ";
|
|
if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0 || PNR_TERZI != 0 || CC_TERZI != 0)
|
|
{
|
|
nota += token + "non sono considerati";
|
|
token = " ";
|
|
if (PNR_CASA != 0 || CC_CASA != 0 || OC_CASA != 0)
|
|
{
|
|
if (PNR_CASA != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_CASA);
|
|
token = ", ";
|
|
}
|
|
if (CC_CASA != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_CASA);
|
|
token = ", ";
|
|
}
|
|
if (OC_CASA != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("gli importi relativi alle operazioni in corso ({0} €)", OC_CASA);
|
|
token = ", ";
|
|
}
|
|
token = " ";
|
|
nota += token + "del patrimonio $/Banca/$";
|
|
token = ", ";
|
|
}
|
|
if ((PNR_TERZI != 0 || CC_TERZI != 0) && _visualizzaAltriIstituti)
|
|
{
|
|
if (PNR_TERZI != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("i prodotti non rappresentabili ({0} €)", PNR_TERZI);
|
|
token = ", ";
|
|
}
|
|
if (CC_TERZI != 0)
|
|
{
|
|
nota += token + datiSeiUnico.FormatDecimal("i conti correnti ({0} €)", CC_TERZI);
|
|
token = ", ";
|
|
}
|
|
token = " ";
|
|
nota += token + "del patrimonio Altri Istituti";
|
|
token = ", ";
|
|
}
|
|
}
|
|
}
|
|
nota += ".";
|
|
nota = !nota.Equals("") ? "(*) " + nota : nota;
|
|
return datiSeiUnico.FormatBanca(nota);
|
|
|
|
}
|
|
public virtual string getNotaCopertura5RMRC() //40.5 copertura rischio mercato var e rischio credito
|
|
{
|
|
|
|
var RM = false;
|
|
var RC = false;
|
|
|
|
try
|
|
{
|
|
var copertura = Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RM").copertura.Replace(".", ","));
|
|
RM = copertura > 0 && copertura < 90;
|
|
}
|
|
catch { RM = false; }
|
|
|
|
try
|
|
{
|
|
var copertura = Convert.ToDecimal(datiSeiUnico.rischioUnit().adeguatezza.adeguatezzaTopBean.listaAdeguatezza.AsEnumerable().FirstOrDefault(o => o.id == "RC").copertura.Replace(".", ","));
|
|
RC = copertura > 0 && copertura < 90;
|
|
}
|
|
catch { RC = false; }
|
|
|
|
|
|
string nota = "";
|
|
|
|
if (RM || RC)
|
|
{
|
|
nota += "Il patrimonio che lei detiene presso $/Banca/$ risulta non adeguato al suo profilo finanziario in quanto alcuni prodotti non sono coperti in termini di "
|
|
+ (RM ? RC ? "Rischio Mercato (VaR) e di Rischio Credito" : "Rischio Mercato (VaR)" : RC ? "Rischio Credito" : "") +
|
|
", determinando un grado di copertura inferiore a 90%: in questo caso, a prescindere dai singoli indicatori di rischio, il patrimonio $/Banca/$ viene considerato sempre come non adeguato.";
|
|
|
|
|
|
}
|
|
|
|
return datiSeiUnico.FormatBanca(nota);
|
|
}
|
|
|
|
private double yPos(double val)
|
|
{
|
|
//double yPos1 = 4.385;
|
|
//double yPos2 = 13.155;
|
|
//double yPos3 = 21.925;
|
|
//double yPos4 = 30.695;
|
|
|
|
//if (val == 0)
|
|
// return 0;
|
|
//else if (val <= 8.77)
|
|
// return yPos1;
|
|
//else if (val <= 17.54)
|
|
// return yPos2;
|
|
//else if (val <= 26.31)
|
|
// return yPos3;
|
|
//else if (val <= 35.08)
|
|
// return yPos4;
|
|
//else if (val > 35.08)
|
|
// return yPos4;
|
|
//else return 0;
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
//20180907 AC
|
|
private double yPosRC(string val)
|
|
{
|
|
double retVal = 0;
|
|
switch (val.ToLower())
|
|
{
|
|
case "classe a": retVal = 4.385; break;
|
|
case "classe b": retVal = 13.155; break;
|
|
case "classe c": retVal = 21.925; break;
|
|
case "classe d": retVal = 30.695; break;
|
|
default: retVal = 0;break;
|
|
}
|
|
|
|
return retVal;
|
|
|
|
}
|
|
|
|
//private string GetNote(string nota)
|
|
//{
|
|
|
|
|
|
|
|
// decimal CCN_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.contoCorrenteNegativo; //cc negativi del patrimonio casa
|
|
// decimal GPELIGOFONDI_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.liqEligoFondiNeg; // liquidità sottostante la GP Eligo Fondi del patrimonio casa
|
|
// decimal GPELIGTITOLI_CASA = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.liqEligoTitoliNeg; //liquidità sottostante la GP Eligo Titoli del patrimonio casa
|
|
// decimal CCN_TERZI = datiSeiUnico.patrimonioUnit().patrimonioTerzi.patrimonioTerziBean.contoCorrentiNegativi; //cc negativi del patrimonio terzi
|
|
|
|
// _presenzaNotaPatrimonioCasa = CCN_CASA + GPELIGOFONDI_CASA + GPELIGTITOLI_CASA != 0;
|
|
// _presenzaNotaPatrimonioTerzi = CCN_TERZI != 0 && _visualizzaAltriIstituti;
|
|
|
|
// var listaValori = new List<decimal>()
|
|
// {
|
|
// 0,
|
|
// CCN_CASA,
|
|
// -1,
|
|
// GPELIGOFONDI_CASA,
|
|
// -1,
|
|
// GPELIGTITOLI_CASA,
|
|
|
|
// CCN_TERZI
|
|
// };
|
|
|
|
// var listaValoriStringa = new List<string>()
|
|
// {
|
|
// string.Empty,
|
|
// Helper.FormatCurrencyWithSymbol(CCN_CASA.ToString()),
|
|
// GPELIGOFONDI_CASA != 0 && CCN_CASA != 0 ? "," : string.Empty,
|
|
// Helper.FormatCurrencyWithSymbol(GPELIGOFONDI_CASA.ToString()),
|
|
// GPELIGTITOLI_CASA != 0 && (CCN_CASA + GPELIGOFONDI_CASA) != 0 ? "," : string.Empty,
|
|
// Helper.FormatCurrencyWithSymbol(GPELIGTITOLI_CASA.ToString()),
|
|
|
|
// Helper.FormatCurrencyWithSymbol(CCN_TERZI.ToString())
|
|
// };
|
|
|
|
// return BuildDynamicNote(nota, listaValori, listaValoriStringa, false);
|
|
//}
|
|
}
|
|
}
|