385 lines
21 KiB
C#
385 lines
21 KiB
C#
using System;
|
|
using Consulenza.ReportWriter.Business;
|
|
using Consulenza.ReportWriter.Business.OBJ_PDF;
|
|
using System.Data;
|
|
using Consulenza.ReportCommon;
|
|
using Consulenza.ReportWriter.Business.Entity;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Consulenza.DataServices.fideuram.data.service;
|
|
|
|
namespace Consulenza.ReportWriter.Manager.Section.Unica
|
|
{
|
|
public class S66 : Entity.Section
|
|
{
|
|
/// <summary>
|
|
/// S66.MonitoraggioSintesi idSezione = 109
|
|
/// </summary>
|
|
protected S66(EnvironmentFacade environmentFacade, int idSection)
|
|
: base(environmentFacade, idSection)
|
|
{
|
|
try
|
|
{
|
|
Draw();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SectionLogger.Write("S66", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
|
|
}
|
|
}
|
|
|
|
protected override sealed void Draw()
|
|
{
|
|
var dati = GetDataSet();
|
|
var testi = GetText();
|
|
|
|
|
|
|
|
#region Testo introduttivo
|
|
if (GetTesto1().Length > 0) {
|
|
AddElement(new SpacePDF(20));
|
|
AddElement(new FormattedTextAreaPDF(GetTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) {FontSize=7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
|
|
AddElement(new SpacePDF(15));
|
|
}
|
|
#endregion
|
|
|
|
#region Tabella
|
|
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["monitoraggio"])
|
|
{
|
|
Style = Style.ConsulenzaUnica,
|
|
Header = true,
|
|
Footer = true,
|
|
RowHeight=24,
|
|
AlternateRow = false,
|
|
HeaderHeight = 30,
|
|
HeaderMargin = 2
|
|
};
|
|
|
|
|
|
#region Columns
|
|
int immagine = 10;
|
|
int larghezzaColonnaAreaBisogno = 155;
|
|
int dataAvvio = 55;
|
|
int larghezzaRendimentoAvvio = 55;
|
|
int vaR = 55;
|
|
int controvaloreAttuale = 80;
|
|
int allocazioneAttuale = 55;
|
|
int larghezzaAllocazioneModello = 55;
|
|
|
|
if (!RendimentoDaAvvio())
|
|
larghezzaColonnaAreaBisogno += larghezzaRendimentoAvvio;
|
|
if (!AllocazioneModello())
|
|
larghezzaColonnaAreaBisogno += larghezzaAllocazioneModello;
|
|
|
|
tabella.Columns.Add(new ColumnPDF("Immagine", immagine, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Objectpdf, string.Empty, string.Empty) { DeltaYContent = 7, PaddingLeft = 2, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("DescrizioneAreaBisogno", larghezzaColonnaAreaBisogno, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "DescrizioneAreaBisogno", "Area di bisogno") {PaddingLeft=5, HeaderFontSize = 7 });
|
|
tabella.Columns.Add(new ColumnPDF("DataAvvio", dataAvvio, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "sDataAvvio", "Data<br>avvio") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
if (RendimentoDaAvvio())
|
|
tabella.Columns.Add(new ColumnPDF("RendimentoAvvio", larghezzaRendimentoAvvio, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RendimentoAvvio", "Rend. da<br>avvio (%)") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
tabella.Columns.Add(new ColumnPDF("VaR", vaR, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
tabella.Columns.Add(new ColumnPDF("ControvaloreAttuale", controvaloreAttuale, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore<br>attuale (€)") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
tabella.Columns.Add(new ColumnPDF("AllocazioneAttuale", allocazioneAttuale, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "AllocazioneAttuale", "Allocazione<br>attuale (%)") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
if (AllocazioneModello())
|
|
tabella.Columns.Add(new ColumnPDF("AllocazioneModello", larghezzaAllocazioneModello, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "AllocazioneModello", "Allocazione<br>modello (%)") { HeaderFontSize = 7, PaddingRight = 4 });
|
|
|
|
#endregion
|
|
|
|
|
|
#region Cells
|
|
|
|
|
|
for (int r = 0; r < dati.Tables["monitoraggio"].Rows.Count; r++)
|
|
{
|
|
DataRow rw = dati.Tables["monitoraggio"].Rows[r];
|
|
int iImmagine = 0;
|
|
string testo = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione;
|
|
float deltaXSwitch;
|
|
switch (testo.ToUpper()){
|
|
case "E":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
case "I":
|
|
deltaXSwitch = 2;
|
|
break;
|
|
case "P":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
case "R":
|
|
deltaXSwitch = 1;
|
|
break;
|
|
case "L":
|
|
deltaXSwitch = 1.5F;
|
|
break;
|
|
default:
|
|
deltaXSwitch = 2;
|
|
break;
|
|
}
|
|
if (rw["DescrizioneProgetto"].Equals("Default")) {
|
|
var listaOggetti = new List<ObjectPDF>() {
|
|
new RectanglePDF(7.5F, 8, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())){DeltaY = 0.75F},
|
|
new FormattedTextAreaPDF
|
|
{
|
|
Text = testo,
|
|
FontBold = true,
|
|
FontColor = ColorPDF.Bianco,
|
|
FontSize=7,
|
|
DeltaX = deltaXSwitch
|
|
}
|
|
};
|
|
tabella.Cells[iImmagine, r].ValueObjectList.AddRange(listaOggetti);
|
|
}
|
|
else
|
|
{
|
|
tabella.Cells[iImmagine, r].ColSpan = 2;
|
|
var deltay = rw["DescrizioneProgetto"].ToString().Length > 30 ? -2 : 0;
|
|
tabella.Cells[iImmagine, r].ValueObject = new FormattedTextAreaPDF() { Text = rw["DescrizioneProgetto"].ToString(), FontSize = 7, Width = larghezzaColonnaAreaBisogno, DeltaY = deltay, FontBold = Convert.ToBoolean(rw["FontBold"]) };
|
|
}
|
|
|
|
|
|
for (int c = 0; c < tabella.Columns.Count; c++) {
|
|
if (Convert.ToBoolean(rw["BackgroundGray"]))
|
|
tabella.Cells[c, r].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella;
|
|
if(tabella.Columns[c].Name.Equals("RendimentoAvvio"))
|
|
tabella.Cells[c, r].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
if (tabella.Columns[c].Name.Equals("VaR"))
|
|
tabella.Cells[c, r].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
if (tabella.Columns[c].Name.Equals("ControvaloreAttuale"))
|
|
tabella.Cells[c, r].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
if (tabella.Columns[c].Name.Equals("AllocazioneAttuale"))
|
|
tabella.Cells[c, r].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
if (tabella.Columns[c].Name.Equals("AllocazioneModello"))
|
|
tabella.Cells[c, r].HorizontalAlignment = HorizontalAlignmentType.Destra;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
AddElement(tabella);
|
|
#endregion
|
|
}
|
|
|
|
|
|
protected sealed override DataTable GetDataTable()
|
|
{
|
|
return null;
|
|
}
|
|
|
|
|
|
protected override DataSet GetDataSet()
|
|
{
|
|
var ds = new DataSet();
|
|
ds.Tables.Add("monitoraggio");
|
|
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("ChiaveProgetto", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("sDataAvvio", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("RendimentoAvvio", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("VaR", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("AllocazioneAttuale", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("AllocazioneModello", typeof(string)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("FontBold", typeof(bool)));
|
|
ds.Tables["monitoraggio"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool)));
|
|
//ds.Tables["monitoraggio"].Columns.Add(new DataColumn("ReplaceIfZero", typeof(string)));
|
|
//ds.Tables["monitoraggio"].Columns.Add(new DataColumn("IsTotal", typeof(bool)));
|
|
//ds.Tables["monitoraggio"].Columns.Add(new DataColumn("IsSubTotal", typeof(bool)));
|
|
|
|
|
|
|
|
var areeMonitorate = datiSeiUnico.monitoraggioUnit().monitoraggio.ToList();
|
|
var areeDisplayInfos = datiSeiUnico.displayInfos().areeDisplayInfos;
|
|
var prodottiPatrimonioAltro = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale;
|
|
var pianificazione = datiSeiUnico.all().pianificazioneUnit.pianificazioneVerticale;
|
|
var piramideModello = datiSeiUnico.piramideModelloUnit().piramideModello;
|
|
|
|
|
|
#region Recupero i dati
|
|
|
|
|
|
foreach (var area in from o in pianificazione.aree
|
|
join i in areeDisplayInfos on o.area.ToUpper() equals i.key.ToUpper()
|
|
where o.isVisibile && o.ctvArea > 0
|
|
orderby i.value.order select o) {
|
|
|
|
|
|
var areaModello = piramideModello.areaModello.LastOrDefault(o => o.area == area.area);
|
|
var areaPianificazione = pianificazione.aree.LastOrDefault(o => o.area == area.area);
|
|
|
|
if (area.area.Equals("Inv") || area.area.Equals("Pre"))
|
|
{
|
|
var row = ds.Tables["monitoraggio"].NewRow();
|
|
row["CodiceAreaBisogno"] = area.area;
|
|
row["DescrizioneAreaBisogno"] = area.descAreaEstesa;
|
|
row["DescrizioneProgetto"] = "Default";
|
|
row["ChiaveProgetto"] = 0;
|
|
row["OrdinamentoAreaBisogno"] = 0;
|
|
row["sDataAvvio"] = "";
|
|
row["RendimentoAvvio"] = "";
|
|
row["VaR"] = area.varInfos.varDecodificato;
|
|
row["ControvaloreAttuale"] = area.ctvArea;
|
|
row["AllocazioneAttuale"] = area.percArea * 100;
|
|
row["AllocazioneModello"] = areaModello.percentualeArea;
|
|
row["FontBold"] = true;
|
|
row["BackgroundGray"] = true;
|
|
ds.Tables["monitoraggio"].Rows.Add(row);
|
|
}
|
|
|
|
foreach (var progetto in from o in area.progetti orderby o.ctvProgetto descending select o)
|
|
{
|
|
var progettoPianificazione = areaPianificazione.progetti.LastOrDefault(o => o.chiaveProgetto == progetto.chiaveProgetto);
|
|
string sDataAvvio = progetto.progettoModello.nomeProgetto.Equals("Default") ? "" : "-";
|
|
string RendimentoAvvio = progetto.progettoModello.nomeProgetto.Equals("Default") ? "" : "-";
|
|
try {
|
|
var progettoMonitorato = areeMonitorate.LastOrDefault(o => o.area == area.area).progetti.LastOrDefault(o => o.chiaveProgetto == progetto.chiaveProgetto);
|
|
sDataAvvio = progettoMonitorato.rendimentoProgetto.dtAvvio == DateTime.MinValue ? "" : progettoMonitorato.rendimentoProgetto.dtAvvio.ToShortDateString();
|
|
RendimentoAvvio = progettoMonitorato.rendimentoProgetto.rendAvvio.ToString();
|
|
} catch {}
|
|
|
|
|
|
if (progettoPianificazione.ctvProgetto > 0)
|
|
{
|
|
|
|
var row = ds.Tables["monitoraggio"].NewRow();
|
|
row["CodiceAreaBisogno"] = area.area;
|
|
row["DescrizioneAreaBisogno"] = area.descAreaEstesa;
|
|
row["DescrizioneProgetto"] = progetto.progettoModello.nomeProgetto;
|
|
row["ChiaveProgetto"] = progetto.chiaveProgetto;
|
|
row["OrdinamentoAreaBisogno"] = 0;
|
|
row["sDataAvvio"] = sDataAvvio;
|
|
row["RendimentoAvvio"] = RendimentoAvvio;
|
|
row["VaR"] = progettoPianificazione.progettoVarInfos.varDecodificato;
|
|
row["ControvaloreAttuale"] = progettoPianificazione.ctvProgetto;
|
|
row["AllocazioneAttuale"] = progettoPianificazione.percProgetto * 100;
|
|
row["AllocazioneModello"] = progettoPianificazione.progettoModello.percentualeProgetto;
|
|
row["FontBold"] = progetto.progettoModello.nomeProgetto.Equals("Default") ? true : false;
|
|
row["BackgroundGray"] = progetto.progettoModello.nomeProgetto.Equals("Default") ? true : false;
|
|
ds.Tables["monitoraggio"].Rows.Add(row);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#region OC + CCN + Eligo
|
|
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 });
|
|
#endregion
|
|
|
|
if (listReturn.Count >0 )
|
|
{
|
|
ds.Tables["monitoraggio"].Rows.Add(
|
|
"",//CodiceAreaBisogno
|
|
"",//DescrizioneAreaBisogno
|
|
0,//OrdinamentoAreaBisogno
|
|
datiSeiUnico.FormatBanca("Totale risorse allocate"),//DescrizioneProgetto
|
|
0,//ChiaveProgetto
|
|
"-",//sDataAvvio
|
|
"-",//RendimentoAvvio
|
|
pianificazione.varRisorseAllocateInfos.varDecodificato,//VaR
|
|
datiSeiUnico.CASA_SUBTOTALE,//ControvaloreAttuale
|
|
pianificazione.percentualeTot * 100,//AllocazioneAttuale
|
|
piramideModello.totPercModello,//AllocazioneModello
|
|
true,//FontBold
|
|
true//BackgroundGray
|
|
);
|
|
|
|
|
|
foreach (var item in listReturn)
|
|
{
|
|
ds.Tables["monitoraggio"].Rows.Add(
|
|
"",//CodiceAreaBisogno
|
|
"",//DescrizioneAreaBisogno
|
|
0,//OrdinamentoAreaBisogno
|
|
item.prodotto.nomeProdotto, //Colonna1
|
|
0,//ChiaveProgetto
|
|
"-",//sDataAvvio
|
|
"-",//RendimentoAvvio
|
|
"-",//VaR
|
|
item.ctv, //Colonna3
|
|
"-",//AllocazioneAttuale
|
|
"-",//AllocazioneModello
|
|
false,//FontBold
|
|
false//BackgroundGray
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
ds.Tables["monitoraggio"].Rows.Add(
|
|
"",//CodiceAreaBisogno
|
|
"",//DescrizioneAreaBisogno
|
|
0,//OrdinamentoAreaBisogno
|
|
datiSeiUnico.FormatBanca("Patrimonio $/Banca/$"),//DescrizioneProgetto
|
|
0,//ChiaveProgetto
|
|
"-",//sDataAvvio
|
|
"-",//RendimentoAvvio
|
|
pianificazione.varInfos.varDecodificato,//VaR
|
|
datiSeiUnico.CASA_TOTALE,//ControvaloreAttuale
|
|
pianificazione.altro != 0 ? "" : (pianificazione.percentualeTot * 100).ToString(),//AllocazioneAttuale
|
|
pianificazione.altro != 0 ? "" : (piramideModello.totPercModello).ToString(),//AllocazioneModello
|
|
true,//FontBold
|
|
true//BackgroundGray
|
|
);
|
|
#endregion
|
|
|
|
|
|
return ds;
|
|
}
|
|
private DataTable dtFooter(decimal contoCorrenteNegativo, decimal partiteViaggianti, decimal liqEligoFondiNeg, decimal liqEligoTitoliNeg)
|
|
{
|
|
DataTable dt = new DataTable();
|
|
dt.Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
|
|
|
|
if (contoCorrenteNegativo != 0)
|
|
dt.Rows.Add("Conto Corrente", contoCorrenteNegativo);
|
|
|
|
|
|
|
|
if (liqEligoFondiNeg != 0)
|
|
dt.Rows.Add("GP EF - Liquidità", liqEligoFondiNeg);
|
|
|
|
if (liqEligoTitoliNeg != 0)
|
|
dt.Rows.Add("GP ET - Liquidità", liqEligoTitoliNeg);
|
|
|
|
if (partiteViaggianti != 0)
|
|
dt.Rows.Add("Operazioni in corso", partiteViaggianti);
|
|
|
|
return dt;// new DataView(dt) { Sort = "ControvaloreAttuale" }.ToTable();
|
|
}
|
|
|
|
public virtual bool RendimentoDaAvvio() { return GetOption<Opzione4_1>().Valore; }
|
|
public virtual bool AllocazioneModello() { return GetOption<Opzione4_2>().Valore; }
|
|
public virtual string GetTesto1() {
|
|
string nota = "";
|
|
|
|
if(AllocazioneModello() && !RendimentoDaAvvio())
|
|
nota+= "In questa scheda sono riportati i principali dettagli relativi alle aree di bisogno e ai progetti di investimento su cui è attivo il monitoraggio: data di avvio del monitoraggio, Rischio Mercato (VaR), allocazione corrente e ottimale, sulle aree di bisogno e sui progetti di investimento, delle risorse finanziarie che lei detiene presso $/Banca/$.";
|
|
|
|
if(!AllocazioneModello() && RendimentoDaAvvio())
|
|
nota+= "In questa scheda sono riportati i principali dettagli relativi alle aree di bisogno e ai progetti di investimento su cui è attivo il monitoraggio: data di avvio del monitoraggio, rendimento da avvio monitoraggio, Rischio Mercato (VaR), e allocazione corrente, sulle aree di bisogno e sui progetti di investimento, delle risorse finanziarie che lei detiene presso $/Banca/$.";
|
|
|
|
if(!AllocazioneModello() && !RendimentoDaAvvio())
|
|
nota+= "In questa scheda sono riportati i principali dettagli relativi alle aree di bisogno e ai progetti di investimento su cui è attivo il monitoraggio: data di avvio del monitoraggio, Rischio Mercato (VaR) e allocazione corrente, sulle aree di bisogno e sui progetti di investimento, delle risorse finanziarie che lei detiene presso $/Banca/$.";
|
|
|
|
if(AllocazioneModello() && RendimentoDaAvvio())
|
|
nota+= "In questa scheda sono riportati i principali dettagli relativi alle aree di bisogno e ai progetti di investimento su cui è attivo il monitoraggio: data di avvio del monitoraggio, rendimento da avvio monitoraggio, Rischio Mercato (VaR), allocazione corrente e ottimale, sulle aree di bisogno e sui progetti di investimento, delle risorse finanziarie che lei detiene presso $/Banca/$.";
|
|
|
|
return datiSeiUnico.FormatBanca(nota);
|
|
}
|
|
|
|
|
|
}
|
|
}
|