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
{
///
/// S66.MonitoraggioSintesi idSezione = 109
///
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
avvio") { HeaderFontSize = 7, PaddingRight = 4 });
if (RendimentoDaAvvio())
tabella.Columns.Add(new ColumnPDF("RendimentoAvvio", larghezzaRendimentoAvvio, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "RendimentoAvvio", "Rend. da
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
attuale (€)") { HeaderFontSize = 7, PaddingRight = 4 });
tabella.Columns.Add(new ColumnPDF("AllocazioneAttuale", allocazioneAttuale, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "AllocazioneAttuale", "Allocazione
attuale (%)") { HeaderFontSize = 7, PaddingRight = 4 });
if (AllocazioneModello())
tabella.Columns.Add(new ColumnPDF("AllocazioneModello", larghezzaAllocazioneModello, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "AllocazioneModello", "Allocazione
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() {
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();
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().Valore; }
public virtual bool AllocazioneModello() { return GetOption().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);
}
}
}