765 lines
38 KiB
C#
765 lines
38 KiB
C#
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.Entity;
|
|
using Consulenza.DataServices.fideuram.data.service;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Unica
|
|
{
|
|
public class S41 : Entity.Section
|
|
{
|
|
/// <summary>
|
|
///S41.ContributoalRischioAreeProgettiDettaglioProdotti idSezione = 84
|
|
/// </summary>
|
|
public S41(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S41", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
protected override sealed void Draw()
|
|
{
|
|
|
|
var dati = GetDataSet();
|
|
if (TestoIntroduttivo().Length > 0)
|
|
{
|
|
AddElement(new SpacePDF(20));
|
|
AddElement(new FormattedTextAreaPDF(TestoIntroduttivo(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
|
|
AddElement(new SpacePDF(10));
|
|
}
|
|
|
|
int i = 0;
|
|
|
|
if (dati.Tables["piramide"].Rows.Count > 0)
|
|
{
|
|
#region Tabella delle Aree di Bisogno
|
|
|
|
#region Definizione e Creazione
|
|
var tabellaAree = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["piramide"])//, dati.Tables["piramideFooter"])
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
AlternateRow = false,
|
|
ShowSeparationLines = false,
|
|
RowsPadding = 10,
|
|
HideLastSeparationLine = false,
|
|
Footer = false
|
|
};
|
|
|
|
tabellaAree.Columns.Add(new ColumnPDF("Area2", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "Area", "Area di bisogno") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 2, ScaleColumnTypeImage = 0.5F });
|
|
tabellaAree.Columns.Add(new ColumnPDF("ControvaloreAttuale", 77, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore<BR>attuale (€)") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, HeaderPaddingLeft = 25 });
|
|
tabellaAree.Columns.Add(new ColumnPDF("VaR", 50, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Var", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingRight = 11, HeaderPaddingLeft = 10 });
|
|
tabellaAree.Columns.Add(new ColumnPDF("PesoRelativoObject", 135, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Objectpdf, "PesoRelativo", "Peso relativo (%)") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, HeaderPaddingRight = 5 });
|
|
tabellaAree.Columns.Add(new ColumnPDF("RischioRelativoObject", 135, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "RischioRelativo", "Rischio relativo (%)") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingLeft = 10, HeaderPaddingLeft = 10 });
|
|
|
|
#endregion
|
|
|
|
#region Allineamento Celle Numeriche a destra
|
|
int a = 0;
|
|
foreach (var item in dati.Tables["piramide"].Rows)
|
|
{
|
|
tabellaAree.Cells[1, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabellaAree.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
//tabellaAree.Cells[3, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
|
|
|
|
tabellaAree.Cells[0, a].ValueObjectList.Add(new ImagePDF(0, 1, dati.Tables["piramide"].Rows[a].ItemArray[0].ToString())
|
|
{
|
|
DeltaX = 3,
|
|
DeltaY = 0,
|
|
Scale = 0.66f,
|
|
Height = 27,
|
|
Width = 145
|
|
});
|
|
var textArea = new FormattedTextAreaPDF(dati.Tables["piramide"].Rows[a].ItemArray[1].ToString(), 0)
|
|
{
|
|
DeltaY = 8f,
|
|
FontSize = 8f
|
|
};
|
|
var labelSize = Helper.GetNumericStringWidth(textArea.Text);
|
|
float addition = 0;
|
|
switch (textArea.Text)
|
|
{
|
|
case "Investimento":
|
|
case "Previdenza":
|
|
addition = 3;
|
|
break;
|
|
case "Riserva":
|
|
addition = 2;
|
|
break;
|
|
case "Liquidità":
|
|
addition = 1;
|
|
break;
|
|
case "Extra Rendimento":
|
|
addition = 6;
|
|
break;
|
|
}
|
|
textArea.DeltaX = 76 + addition - labelSize;
|
|
textArea.Text = Helper.FirstCharToUpper(textArea.Text);
|
|
tabellaAree.Cells[0, a].ValueObjectList.Add(textArea);
|
|
|
|
a++;
|
|
}
|
|
#endregion
|
|
|
|
#region Creazione Stacked Bar
|
|
var list = new List<double>();
|
|
list.Add(Convert.ToDouble(dati.Tables["piramide"].AsEnumerable().Max(x => x["PesoRelativo"])));
|
|
list.Add(Convert.ToDouble(dati.Tables["piramide"].AsEnumerable().Max(x => x["RischioRelativo"])));
|
|
var valoreMassimo = (float)Helper.Round(list.Max());
|
|
float larghezzaBarra = 0;
|
|
float larghezzaSpazioTestoPercentuale = 0;
|
|
float larghezzaMinimaSpazioTestoPercentuale = 35;
|
|
float deltaXBarra = 0;
|
|
float width = tabellaAree.Columns[3].Width - 50;
|
|
foreach (DataRow row in dati.Tables["piramide"].Rows)
|
|
{
|
|
var colore = new ColorPDF(Convert.ToInt32(row["Red"]), Convert.ToInt32(row["Green"]), Convert.ToInt32(row["Blue"]));
|
|
|
|
#region barra colonna PesoRelativo
|
|
larghezzaBarra = Helper.GetWidthProportional((float)Convert.ToDecimal(row["PesoRelativo"]), valoreMassimo, tabellaAree.Columns[3].Width - 50);
|
|
larghezzaSpazioTestoPercentuale = tabellaAree.Columns[3].Width - larghezzaBarra;
|
|
deltaXBarra = -larghezzaBarra - 10;
|
|
if (larghezzaSpazioTestoPercentuale < larghezzaMinimaSpazioTestoPercentuale)
|
|
{
|
|
deltaXBarra = -(tabellaAree.Columns[3].Width - larghezzaMinimaSpazioTestoPercentuale);
|
|
larghezzaSpazioTestoPercentuale = larghezzaMinimaSpazioTestoPercentuale;
|
|
}
|
|
if (Convert.ToDouble(row["ControvaloreAttuale"]) == 0)
|
|
{
|
|
tabellaAree.Cells[3, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(12, 1 , ColorPDF.Bianco),
|
|
new FormattedTextAreaPDF(row["PesoRelativo"].ToString()=="0.00"? "0.00" : Helper.FormatDecimal(Convert.ToDecimal(row["PesoRelativo"]).ToString(), 2),
|
|
0, larghezzaSpazioTestoPercentuale)
|
|
{
|
|
DeltaY = 2,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
tabellaAree.Cells[3, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(12, larghezzaBarra , colore),
|
|
new FormattedTextAreaPDF(row["PesoRelativo"].ToString()=="0.00"? "0.00" : Helper.FormatDecimal(Convert.ToDecimal(row["PesoRelativo"]).ToString(), 2),
|
|
0, larghezzaSpazioTestoPercentuale)
|
|
{
|
|
DeltaY = 2,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region barra colonna RischioRelativo
|
|
larghezzaBarra = Helper.GetWidthProportional((float)Convert.ToDecimal(row["RischioRelativo"]), valoreMassimo, tabellaAree.Columns[4].Width - 50);
|
|
larghezzaSpazioTestoPercentuale = tabellaAree.Columns[4].Width - larghezzaBarra;
|
|
deltaXBarra = larghezzaBarra + 10;
|
|
if (larghezzaSpazioTestoPercentuale < larghezzaMinimaSpazioTestoPercentuale)
|
|
{
|
|
deltaXBarra = (tabellaAree.Columns[4].Width - larghezzaMinimaSpazioTestoPercentuale);
|
|
larghezzaSpazioTestoPercentuale = larghezzaMinimaSpazioTestoPercentuale;
|
|
}
|
|
if (row["VaR"].ToString() == "n.c.")
|
|
{
|
|
tabellaAree.Cells[4, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(12, 1, ColorPDF.Bianco),
|
|
new FormattedTextAreaPDF( "n.c.",
|
|
0,
|
|
30 )
|
|
{
|
|
DeltaY = 2,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
tabellaAree.Cells[4, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(12, larghezzaBarra, colore),
|
|
new FormattedTextAreaPDF( Helper.FormatDecimal(Convert.ToDecimal(row["Rischiorelativo"]).ToString(), 2),
|
|
0,
|
|
larghezzaSpazioTestoPercentuale)
|
|
{
|
|
DeltaY = 2,
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
i++;
|
|
}
|
|
#endregion
|
|
|
|
AddElement(tabellaAree);
|
|
|
|
if (dati.Tables["piramideFooter"].Rows.Count > 0)
|
|
{
|
|
AddElement(new SpacePDF(2));
|
|
AddElement(new LinePDF(EnvironmentFacade.RendererFacade.XLeftLimit - 0.5F, EnvironmentFacade.RendererFacade.XLeftLimit + 252.5f, 0.9f, new ColorPDF(127, 127, 127)));
|
|
var tabellaCCN = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["piramideFooter"])
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
Header = false,
|
|
AlternateRow = false,
|
|
HeaderHeight = 1,
|
|
HeaderMargin = 2,
|
|
HideLastSeparationLine = true,
|
|
ShowSeparationLines = false,
|
|
Footer = false
|
|
};
|
|
|
|
tabellaCCN.Columns.Add(new ColumnPDF("Patrimonio", 125, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Area", "") { HeaderFontSize = 7, FontSize = 7 });
|
|
tabellaCCN.Columns.Add(new ColumnPDF("Controvalore", 77, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "") { HeaderFontSize = 7, FontSize = 7, PaddingLeft = 2 });
|
|
tabellaCCN.Columns.Add(new ColumnPDF("VaR", 50, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Decimale, "Var", "") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 7 });
|
|
|
|
AddElement(tabellaCCN);
|
|
|
|
#region Nota tabella 1
|
|
if (GetNota().Length > 0)
|
|
{
|
|
tabellaCCN.Notes.Add(
|
|
new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella,
|
|
GetNota(),
|
|
new[] { "VaR" },
|
|
string.Empty,
|
|
TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella)
|
|
{ FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
|
|
AddElement(new SpacePDF(10));
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
}
|
|
|
|
if (dati.Tables["prodotti"].Rows.Count > 0)
|
|
{
|
|
#region Tabella Prodotti
|
|
|
|
#region Definizione e Creazione
|
|
var tabellaProdotti = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["prodotti"])
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
AlternateRow = false,
|
|
ShowSeparationLines = false,
|
|
Footer = false,
|
|
HideLastSeparationLine = true
|
|
//,RowHeight = 22
|
|
};
|
|
|
|
// 188
|
|
tabellaProdotti.Columns.Add(new ColumnPDF("Immagine", 188, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, string.Empty, "Prodotto") { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingLeft = 2 });
|
|
// tabellaProdotti.Columns.Add(new ColumnPDF("Prodotto", 155, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "", "Prodotto") { HeaderFontSize = 7, FontSize = 7, PaddingLeft = 5 });
|
|
|
|
|
|
// Modifica per Saving Map
|
|
//tabellaProdotti.Columns.Add(new ColumnPDF("SavingMap", 10, HorizontalAlignmentType.Destra, false, false, 6, ColumnType.Immagine, "SavingMap", string.Empty) { DeltaYContent = 6, ScaleColumnTypeImage = 0.50F, PaddingRight = 20 });
|
|
// Fine Modifica
|
|
|
|
|
|
tabellaProdotti.Columns.Add(new ColumnPDF("ControvaloreAttuale", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore <br>attuale (€)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingLeft = 6 });
|
|
tabellaProdotti.Columns.Add(new ColumnPDF("VaR", 40, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, PaddingRight = 6, HeaderPaddingLeft = 6 });
|
|
tabellaProdotti.Columns.Add(new ColumnPDF("PesoRelativoObject", 100, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Objectpdf, "PesoRelativo", "Peso relativo (%)") { HeaderFontSize = 7, FontSize = 7, HeaderPaddingRight = 10, DeltaYContent = 4 });
|
|
tabellaProdotti.Columns.Add(new ColumnPDF("RischioRelativoObject", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, "RischioRelativo", "Rischio relativo (%)") { HeaderFontSize = 7, FontSize = 7, PaddingLeft = 10, HeaderPaddingLeft = 10, DeltaYContent = 4 });
|
|
#endregion
|
|
|
|
#region Allineamento Celle Numeriche a destra
|
|
int a = 0;
|
|
foreach (var item in dati.Tables["prodotti"].Rows)
|
|
{
|
|
tabellaProdotti.Cells[1, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
tabellaProdotti.Cells[2, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
//tabellaProdotti.Cells[4, a].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
a++;
|
|
}
|
|
#endregion
|
|
|
|
#region Creazione Stacked Bar
|
|
i = 0;
|
|
var list = new List<double>();
|
|
list.Add(Convert.ToDouble(dati.Tables["prodotti"].AsEnumerable().Max(x => x["PesoRelativo"])));
|
|
list.Add(Convert.ToDouble(dati.Tables["prodotti"].AsEnumerable().Max(x => x["RischioRelativo"])));
|
|
float valoreMassimo = (float)Helper.Round(list.Max());
|
|
float larghezzaBarra = 0;
|
|
float larghezzaSpazioTestoPercentuale = 0;
|
|
float larghezzaMinimaSpazioTestoPercentuale = 35;
|
|
float deltaXBarra = 0;
|
|
foreach (DataRow row in dati.Tables["prodotti"].Rows)
|
|
{
|
|
var colore = new ColorPDF(131, 188, 180);
|
|
|
|
#region simboli dell'area di bisogno nella prima colonna
|
|
float deltaXSwitch;
|
|
float deltaYSwitch;
|
|
switch (row["CodiceAreaBisogno"].ToString().ToUpper())
|
|
{
|
|
case "EXT":
|
|
deltaXSwitch = 1.5F;
|
|
deltaYSwitch = -0.3F;
|
|
break;
|
|
case "INV":
|
|
deltaXSwitch = 2.2F;
|
|
deltaYSwitch = -0.4F;
|
|
break;
|
|
case "PRE":
|
|
deltaXSwitch = 1.8F;
|
|
deltaYSwitch = -0.3F;
|
|
break;
|
|
case "RIS":
|
|
deltaXSwitch = 1.3F;
|
|
deltaYSwitch = -0.3F;
|
|
break;
|
|
case "LIQ":
|
|
deltaXSwitch = 1.5F;
|
|
deltaYSwitch = -0.2F;
|
|
break;
|
|
default:
|
|
deltaXSwitch = 2;
|
|
deltaYSwitch = 0;
|
|
break;
|
|
}
|
|
|
|
// tabellaProdotti.Cells[0, i].ColSpan = 2;
|
|
var listaOggetti = new List<ObjectPDF> {
|
|
new RectanglePDF(8, 8, ColorPDF.GetBy_AreaBisogno(row["CodiceAreaBisogno"].ToString())),
|
|
new FormattedTextAreaPDF
|
|
{
|
|
Text = new AreaBisogno(row["CodiceAreaBisogno"].ToString()).Abbreviazione,
|
|
FontBold = true,
|
|
FontColor = ColorPDF.Bianco,
|
|
DeltaX = deltaXSwitch,
|
|
DeltaY = deltaYSwitch,
|
|
FontSize=7
|
|
},
|
|
new ImagePDF(0, 1, row["SavingMap"].ToString())
|
|
{
|
|
DeltaX = deltaXSwitch + 4,
|
|
DeltaY = deltaYSwitch + 10,
|
|
Scale = 0.7f
|
|
},
|
|
new FormattedTextAreaPDF
|
|
{
|
|
Text = row["Prodotto"].ToString(),
|
|
FontBold = false,
|
|
FontColor = ColorPDF.Nero,
|
|
DeltaX = 22,
|
|
FontSize=7,
|
|
|
|
Width=170
|
|
}
|
|
};
|
|
tabellaProdotti.Cells[0, i].ValueObjectList.AddRange(listaOggetti);
|
|
|
|
|
|
#endregion
|
|
|
|
#region barra colonna PesoRelativo
|
|
larghezzaBarra = Helper.GetWidthProportional((float)Convert.ToDecimal(row["PesoRelativo"]), valoreMassimo, tabellaProdotti.Columns[3].Width - 50);
|
|
larghezzaSpazioTestoPercentuale = tabellaProdotti.Columns[3].Width - larghezzaBarra;
|
|
deltaXBarra = -larghezzaBarra - 10;
|
|
if (larghezzaSpazioTestoPercentuale < larghezzaMinimaSpazioTestoPercentuale)
|
|
{
|
|
deltaXBarra = -(tabellaProdotti.Columns[3].Width - larghezzaMinimaSpazioTestoPercentuale);
|
|
larghezzaSpazioTestoPercentuale = larghezzaMinimaSpazioTestoPercentuale;
|
|
}
|
|
|
|
tabellaProdotti.Cells[3, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(11, larghezzaBarra , colore),
|
|
new FormattedTextAreaPDF(row["PesoRelativo"].ToString()=="0.00"? "0.00" : Helper.FormatDecimal(Convert.ToDecimal(row["PesoRelativo"]).ToString(), 2),
|
|
0,
|
|
larghezzaSpazioTestoPercentuale)
|
|
{
|
|
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Right,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
|
|
#endregion
|
|
|
|
#region barra colonna RischioRelativo
|
|
larghezzaBarra = Helper.GetWidthProportional((float)Convert.ToDecimal(row["RischioRelativo"]), valoreMassimo, tabellaProdotti.Columns[4].Width - 50);
|
|
larghezzaSpazioTestoPercentuale = tabellaProdotti.Columns[4].Width - larghezzaBarra;
|
|
deltaXBarra = larghezzaBarra + 10;
|
|
if (larghezzaSpazioTestoPercentuale < larghezzaMinimaSpazioTestoPercentuale)
|
|
{
|
|
deltaXBarra = (tabellaProdotti.Columns[4].Width - larghezzaMinimaSpazioTestoPercentuale);
|
|
larghezzaSpazioTestoPercentuale = larghezzaMinimaSpazioTestoPercentuale;
|
|
}
|
|
if (row["VaR"].ToString() == "n.c.")
|
|
{
|
|
tabellaProdotti.Cells[4, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(11, 1, ColorPDF.Bianco),
|
|
new FormattedTextAreaPDF( "n.c.",
|
|
0,
|
|
30 )
|
|
{
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
DeltaX = deltaXBarra-5,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
tabellaProdotti.Cells[4, i].ValueObjectList = new List<Business.Entity.ObjectPDF>()
|
|
{
|
|
new RectanglePDF(11,row["RischioRelativo"].ToString()=="0" ? 1 : larghezzaBarra,row["RischioRelativo"].ToString()=="0" ?ColorPDF.Bianco : colore),
|
|
new FormattedTextAreaPDF(row["RischioRelativo"].ToString()=="0"? "0,00" : Helper.FormatDecimal(Convert.ToDecimal(row["RischioRelativo"]).ToString(), 2),
|
|
0,
|
|
larghezzaSpazioTestoPercentuale )
|
|
{
|
|
TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left,
|
|
DeltaX = deltaXBarra,
|
|
FontSize = 7
|
|
}
|
|
};
|
|
}
|
|
#endregion
|
|
|
|
i++;
|
|
}
|
|
|
|
AddElement(new SpacePDF(10));
|
|
#endregion
|
|
|
|
AddElement(tabellaProdotti);
|
|
|
|
#endregion
|
|
|
|
#region Legenda
|
|
|
|
AddElement(new SpacePDF(20));
|
|
float xLegenda = base.EnvironmentFacade.RendererFacade.XLeftLimit;
|
|
DataTable dtlegenda = new DataTable();
|
|
dtlegenda = dati.Tables["legenda"].AsEnumerable().OrderBy(r => r.Field<int>("Ordinamento")).CopyToDataTable();
|
|
foreach (DataRow item in dtlegenda.Rows)
|
|
{
|
|
AddElement(new RectanglePDF(8, 8, ColorPDF.GetBy_AreaBisogno(item["CodiceAreaBisogno"].ToString())) { X = xLegenda, AutoIncrementYWritable = false });
|
|
|
|
AddElement(new FormattedTextAreaPDF
|
|
{
|
|
Text = new AreaBisogno(item["CodiceAreaBisogno"].ToString()).Abbreviazione,
|
|
FontBold = true,
|
|
FontColor = ColorPDF.Bianco,
|
|
DeltaX = 2F,
|
|
AutoIncrementYWritable = false,
|
|
X = xLegenda,
|
|
FontSize = 6
|
|
});
|
|
xLegenda += 10;
|
|
|
|
var ftaNomeAreaBisogno = new FormattedTextAreaPDF
|
|
{
|
|
Text = new AreaBisogno(item["CodiceAreaBisogno"].ToString()).Nome,
|
|
DeltaX = 2F,
|
|
AutoIncrementYWritable = false,
|
|
X = xLegenda,
|
|
FontSize = 6
|
|
};
|
|
|
|
xLegenda += (ftaNomeAreaBisogno.Text.Length * 5) + (10 - ftaNomeAreaBisogno.Text.Length);
|
|
//xLegenda += (string)Unit.Pixel(new AreaBisogno(item["CodiceAreaBisogno"].ToString()).Nome.Length + 10);
|
|
//xLegenda += Graphics.MeasureString(new AreaBisogno(item["CodiceAreaBisogno"].ToString()).Nome, 7);//ftaNomeAreaBisogno.Width + 10; //new AreaBisogno(item["CodiceAreaBisogno"].ToString()).Nome.Length + 50;//100;
|
|
AddElement(ftaNomeAreaBisogno);
|
|
}
|
|
#endregion
|
|
}
|
|
}//Draw
|
|
|
|
protected sealed override DataTable GetDataTable()
|
|
{
|
|
return null;
|
|
}//GetDataTable
|
|
|
|
protected sealed override DataSet GetDataSet()
|
|
{
|
|
#region Creazione Dataset
|
|
var ds = new DataSet();
|
|
ds.Tables.Add(new DataTable("piramide"));
|
|
ds.Tables.Add(new DataTable("piramideFooter"));
|
|
ds.Tables.Add(new DataTable("prodotti"));
|
|
ds.Tables.Add(new DataTable("legenda"));
|
|
#endregion
|
|
|
|
#region Estrazione dati
|
|
var pianificazioneVerticale = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale;
|
|
var rischioAreeProgetti = datiSeiUnico.rischioUnit().rischio.areeProgetti.aree.ToList();
|
|
var totale = datiSeiUnico.rischioUnit().rischio.areeProgetti.total;
|
|
var financialResources = datiSeiUnico.rischioUnit().rischio.areeProgetti.financialResources;
|
|
var displayInfo = datiSeiUnico.displayInfos().areeDisplayInfos.ToList();
|
|
var posizioni = datiSeiUnico.patrimonioUnit().patrimonioCasa.dettaglioProdotti.dettaglioProdotti.ToList();
|
|
var rischioProdotti = datiSeiUnico.rischioUnit().rischio.prodotti.items;
|
|
//gestito per i nuclei
|
|
var rischioProdottiNucleo = datiSeiUnico.rischioUnit().rischio.rischioRelativoDistAsset.classes;
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
//r model = EnvironmentFacade.ReportEnvironment.ReportType
|
|
|
|
#region *** dtPiramide
|
|
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("Area", typeof(string)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("Descirption", typeof(string)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("VaR", typeof(string)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("PesoRelativo", typeof(decimal)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("RischioRelativo", typeof(decimal)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("Red", typeof(int)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("Green", typeof(int)));
|
|
ds.Tables["piramide"].Columns.Add(new DataColumn("Blue", typeof(int)));
|
|
if (presenzaGrafico())
|
|
{
|
|
foreach (var item in rischioAreeProgetti)
|
|
{
|
|
|
|
var colore = new ColorPDF(displayInfo.FirstOrDefault(o => o.key.Equals(item.area.ToUpper())).value.fill);
|
|
|
|
|
|
ds.Tables["piramide"].Rows.Add(
|
|
string.Format("{0}.png", new AreaBisogno(item.area).NomePerImmagine), //area
|
|
item.name, // description
|
|
item.var, //var
|
|
item.currentEquivalent, //controvalore attuale
|
|
item.relativeWeight,//peso relativo
|
|
item.relativeRisk, //rischio relativo
|
|
colore.Red,
|
|
colore.Green,
|
|
colore.Blue
|
|
);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region *** dtPiramideFooter
|
|
|
|
// 20181010 AC
|
|
//#region OC + CCN + Eligo
|
|
#region OC + CCN + Eligo + IlTuoFoglio
|
|
//--20181010 AC
|
|
var listReturn = new List<rsPosizione>();
|
|
|
|
if (datiSeiUnico.CASA_OC != 0)
|
|
listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Operazioni in corso" }, ctv = datiSeiUnico.CASA_OC });
|
|
if (datiSeiUnico.CASA_CCN != 0)
|
|
listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Conto corrente" }, ctv = datiSeiUnico.CASA_CCN });
|
|
if (datiSeiUnico.CASA_GPELIGO != 0)
|
|
listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa GP Eligo" }, ctv = datiSeiUnico.CASA_GPELIGO });
|
|
// 20181010 AC
|
|
if (datiSeiUnico.CASA_TUOFOGLIO != 0)
|
|
listReturn.Add(new rsPosizione { prodotto = new rsProdotto() { nomeProdotto = "Liquidità negativa Il Mio Foglio" }, ctv = datiSeiUnico.CASA_TUOFOGLIO });
|
|
//--20181010 AC
|
|
|
|
#endregion
|
|
|
|
|
|
ds.Tables["piramideFooter"].Columns.Add(new DataColumn("Area", typeof(string)));
|
|
ds.Tables["piramideFooter"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
|
|
ds.Tables["piramideFooter"].Columns.Add(new DataColumn("Var", typeof(string)));
|
|
ds.Tables["piramideFooter"].Columns.Add(new DataColumn("FontBold", typeof(bool)));
|
|
if (listReturn.Count > 0)
|
|
{
|
|
ds.Tables["piramideFooter"].Rows.Add(
|
|
"Totale risorse allocate",
|
|
datiSeiUnico.CASA_SUBTOTALE,
|
|
financialResources.var,
|
|
true
|
|
//true,
|
|
//true
|
|
);
|
|
|
|
foreach (var item in listReturn)
|
|
{
|
|
ds.Tables["piramideFooter"].Rows.Add(
|
|
item.prodotto.nomeProdotto, //Colonna1
|
|
item.ctv, //Colonna3
|
|
item.prodotto.nomeProdotto.Equals("Conto corrente") || item.prodotto.nomeProdotto.Contains("Operazioni") ? "n.c." : "-", //Colonna4
|
|
false
|
|
//false,
|
|
//false
|
|
);
|
|
}
|
|
}
|
|
|
|
ds.Tables["piramideFooter"].Rows.Add(
|
|
string.Format("Patrimonio {0}", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment)),
|
|
datiSeiUnico.CASA_TOTALE,
|
|
totale.var + (GetNota().Length > 0 ? "*" : ""),
|
|
true
|
|
//true,
|
|
//true
|
|
);
|
|
#endregion
|
|
|
|
#region *** dtProdotti
|
|
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("SavingMap", typeof(string)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("Prodotto", typeof(string)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("VaR", typeof(string)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("PesoRelativo", typeof(decimal)));
|
|
ds.Tables["prodotti"].Columns.Add(new DataColumn("RischioRelativo", typeof(decimal)));
|
|
|
|
// La gestione del rischio tra Nucelo e non Nucelo sono diverse i dati del rischio relativo sono su Unit Diverse
|
|
#region Prodotti per Nucleo
|
|
//if (EnvironmentFacade.ReportEnvironment.ReportType.ToString() == "Unica_Nucleo")
|
|
//{
|
|
// foreach (var item in rischioProdottiNucleo.Take(numeroProdotti() == ProdottiPatrimonio.PrimiDieci ? 10 : rischioProdottiNucleo.Length).OrderByDescending(o => o.relativeRisk))
|
|
// {
|
|
// if (presenzaTabella())
|
|
// {
|
|
|
|
// ds.Tables["prodotti"].Rows.Add(
|
|
// "",//posizioni.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(item.id)).area,//area
|
|
|
|
// item.name,// prodotto
|
|
// item.currentEquivalent,// Controvalore attuale
|
|
// item.var,// var
|
|
// item.relativeWeight,//peso relativo
|
|
// //Convert.ToDouble(item.relativeRisk) == 0 ? 0.00 : Convert.ToDouble(item.relativeRisk)//rischio relativo
|
|
// item.relativeRisk * 100 // aggiunto * 100 09102017
|
|
// );
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
//}
|
|
|
|
//else
|
|
//{
|
|
#endregion
|
|
foreach (var item in rischioProdotti.Take(numeroProdotti() == ProdottiPatrimonio.PrimiDieci ? 10 : rischioProdotti.Length).OrderByDescending(o => o.relativeRisk))
|
|
{
|
|
if (presenzaTabella())
|
|
{
|
|
string sSavingMap = "";
|
|
// Modifica per Saving Map
|
|
if (posizioni.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(item.aggregationId)).savingMap)//SavingMap
|
|
//if (dettaglioProdotto.prodotto.nomeProdotto.Substring(0, 2).ToUpper() =="FV")
|
|
sSavingMap = "SavingMap.png";
|
|
// Fine Modifica
|
|
|
|
ds.Tables["prodotti"].Rows.Add(
|
|
posizioni.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(item.aggregationId)).area,//area
|
|
sSavingMap,
|
|
item.name,// prodotto
|
|
item.currentEquivalent,// Controvalore attuale
|
|
item.var,// var
|
|
item.relativeWeight,//peso relativo
|
|
//Convert.ToDouble(item.relativeRisk) == 0 ? 0.00 : Convert.ToDouble(item.relativeRisk)//rischio relativo
|
|
item.relativeRisk * 100 // aggiunto * 100 09102017
|
|
|
|
);
|
|
}
|
|
|
|
}
|
|
// }
|
|
#endregion
|
|
|
|
#region *** dtLegenda
|
|
ds.Tables["legenda"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string)));
|
|
ds.Tables["legenda"].Columns.Add(new DataColumn("Ordinamento", typeof(int)));
|
|
if (presenzaTabella())
|
|
{
|
|
foreach (DataRow item in ds.Tables["prodotti"].DefaultView.ToTable(true, "CodiceAreaBisogno").Rows)
|
|
{
|
|
ds.Tables["legenda"].Rows.Add(item["CodiceAreaBisogno"],
|
|
displayInfo.FirstOrDefault(o => o.key.Equals(item["CodiceAreaBisogno"].ToString().ToUpper())).value.order);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
return ds;
|
|
}
|
|
|
|
public virtual string TestoIntroduttivo()
|
|
{
|
|
string testo = "";
|
|
|
|
if (presenzaGrafico())
|
|
{
|
|
if (presenzaTabella())
|
|
testo = (numeroProdotti() == ProdottiPatrimonio.Tutti) ?
|
|
GetText().Rows[0]["testo2"].ToString() :
|
|
GetText().Rows[0]["testo1"].ToString();
|
|
else
|
|
testo = GetText().Rows[0]["testo3"].ToString();
|
|
}
|
|
else
|
|
{
|
|
if (presenzaTabella())
|
|
testo = (numeroProdotti() == ProdottiPatrimonio.Tutti) ?
|
|
GetText().Rows[0]["testo4"].ToString() :
|
|
GetText().Rows[0]["testo5"].ToString();
|
|
}
|
|
return Helper.ReplaceVariables(testo, base.EnvironmentFacade.ReportEnvironment);
|
|
}//TestoIntroduttivo
|
|
|
|
public virtual string GetNota()
|
|
{
|
|
string nota = "";
|
|
var totale = datiSeiUnico.rischioUnit().rischio.areeProgetti.total;
|
|
if (totale.coverage < 100)
|
|
{
|
|
nota = string.Format("Grado di copertura prodotti in termini di Rischio Mercato (VaR): {0}", Helper.FormatDecimal(totale.coverage.ToString(), 2));
|
|
}
|
|
return nota;
|
|
}//GetNota
|
|
|
|
public virtual bool presenzaGrafico()
|
|
{
|
|
return GetOption<Opzione4_1>().Valore;
|
|
}
|
|
|
|
public virtual bool presenzaTabella()
|
|
{
|
|
return GetOption<Opzione4_2>().Valore;
|
|
}
|
|
|
|
public virtual ProdottiPatrimonio numeroProdotti()
|
|
{
|
|
ProdottiPatrimonio numProdotti = GetOption<Opzione6_3>().ProdottiPatrimonio;
|
|
return numProdotti;
|
|
}
|
|
}
|
|
}
|