using System;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportCommon;
using System.Linq;
using Consulenza.DataServices.fideuram.data.service;
using Consulenza.ReportWriter.Business.Entity;
using System.Collections.Generic;
namespace Consulenza.ReportWriter.Manager.Section.Unica
{
///
/// S24.PatrimonioFideuramProdottiNonRappresentabili idSezione = 67
///
public class S24 : Entity.Section
{
public S24(EnvironmentFacade environmentFacade, int idSection)
: base(environmentFacade, idSection)
{
try
{
Draw();
}
catch (Exception ex)
{
SectionLogger.Write("S24", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
}
}
///
/// Disegna la scheda S24.
///
protected override sealed void Draw()
{
var dati = GetDataSet();
var testi = GetText();
foreach (DataTable table in dati.Tables)
{
if (table.TableName.Contains("_"))
{
int indiceTabella = Convert.ToInt32(table.ExtendedProperties["IndiceTabella"]);
//Vincoli sulla visualizzazione
if ((indiceTabella == 1 && mostraTabella_Asset()) || (indiceTabella == 3 && mostraTabella_Valute()) || (indiceTabella == 5 && mostraTabella_Rendimenti()))
{
var titolo = Helper.ReplaceVariables(testi.Rows[0][string.Format("testo{0}", indiceTabella)].ToString(), EnvironmentFacade.ReportEnvironment);
var testoIntroduttivo = Helper.ReplaceVariables(testi.Rows[0][string.Format("testo{0}", indiceTabella + 1)].ToString(), EnvironmentFacade.ReportEnvironment);
AddElement(new SpacePDF(20));
AddElement(new FormattedTextAreaPDF(titolo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 11, FontBold = true });
AddElement(new SpacePDF(15));
AddElement(new FormattedTextAreaPDF(testoIntroduttivo, EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
AddElement(new SpacePDF(10));
#region Tabella dei prodotti non rappresentabili
var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, table)
{
Style = Style.ConsulenzaUnica,
Header = true,
Footer = true,
WhiteSpacesHorizontalSeparator = true,
ShowSeparationLines = false,
AlternateRow = false,
HeaderHeight = 30,
HeaderMargin = 2
};
#region Columns e FooterColumns
tabella.Columns.Add(new ColumnPDF("Immagine", 15, HorizontalAlignmentType.Sinistra, false, false, 6, ColumnType.Objectpdf, string.Empty, string.Empty) { HeaderFontSize = 7, FontSize = 7, DeltaYContent = 4, PaddingLeft = 2 });
tabella.Columns.Add(new ColumnPDF("DataSottoscrizione", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data
sottoscrizione") { HeaderFontSize = 7, FontSize = 7, BackgroundColor = ColorPDF.Bianco, DeltaYContent = -1 });
tabella.Columns.Add(new ColumnPDF("CodiceContratto", 70, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Codicecontratto", "Codice
contratto") { HeaderFontSize = 7, FontSize = 7, BackgroundColor = ColorPDF.Bianco, DeltaYContent = -1 });
tabella.Columns.Add(new ColumnPDF("Descrizione", 235, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderFontSize = 7, BackgroundColor = ColorPDF.Bianco, FontSize = 7, DeltaYContent = -1 });
tabella.FooterColumns.Add(new ColumnPDF("Totale", tabella.Columns.Sum(o => o.Width), HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Testo));
tabella.FooterCells[0, 0].Value = "Totale prodotti non rappresentabili";
tabella.Columns.Add(new ColumnPDF("ControvaloreAttuale", 80, HorizontalAlignmentType.Sinistra, false, true, 7, ColumnType.Decimale, "ControvaloreAttuale", "Controvalore
attuale (€)") { HeaderFontSize = 7, FontSize = 7, BackgroundColor = ColorPDF.Bianco, PaddingRight = 4, DeltaYContent = -1 });
tabella.FooterColumns.Add(new ColumnPDF("ControvaloreAttuale", 80, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7, PaddingRight = 4});
tabella.FooterCells[1, 0].Value = Helper.FormatCurrency(table.Select("IsTotal='false' AND IsSubTotal='false'").AsEnumerable().Sum(x => x.Field("ControvaloreAttuale")).ToString());
tabella.Columns.Add(new ColumnPDF("VaR", 50, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderFontSize = 7, FontSize = 7, BackgroundColor = ColorPDF.Bianco, PaddingRight = 4, DeltaYContent = -1 });
tabella.FooterColumns.Add(new ColumnPDF("VaR", 50, HorizontalAlignmentType.Destra, false, true, 7, ColumnType.Testo) { FontSize = 7, PaddingRight = 2 });
tabella.FooterCells[2, 0].Value = "";
#endregion
#region Cells
int i = 0;
foreach (DataRow rw in table.Rows)
{
var isTotal = Convert.ToBoolean(rw["IsTotal"]);
var isSubTotal = Convert.ToBoolean(rw["IsSubTotal"]);
if (isTotal || isSubTotal)
{
// Sfondo grigio per la riga identificata con isTotal [quella di intestazione di area]
for (int c = 0; c < tabella.Columns.Count; c++)
{
tabella.Cells[c, i].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella;
}
// Simboli dell'area di bisogno
if (isTotal)
{
tabella.Cells[1, i].ColSpan = 2;
tabella.Cells[1, i].Value = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Nome;
var listaOggetti = new List
{
new RectanglePDF(10, 10, ColorPDF.GetBy_AreaBisogno(rw["CodiceAreaBisogno"].ToString())),
new FormattedTextAreaPDF
{
Text = new AreaBisogno(rw["CodiceAreaBisogno"].ToString()).Abbreviazione,
FontBold = true,
FontColor = ColorPDF.Bianco,
DeltaX = 2.5F
}
};
//Quadrato colorato indicatore Area
tabella.Cells[0, i].ValueObjectList.AddRange(listaOggetti);
}
}
tabella.Cells[4, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
tabella.Cells[5, i].Value = rw["VaR"].ToString();
i++;
}
#endregion
AddElement(tabella);
#endregion
AddElement(new SpacePDF(15));
}
}
}
}
protected sealed override DataTable GetDataTable()
{
return null;
}
protected sealed override DataSet GetDataSet()
{
var ds = new DataSet();
#region dtNonRappresentabiliAsset
var dtNonRappresentabiliAsset = new DataTable("dtNonRappresentabiliAsset");
dtNonRappresentabiliAsset.ExtendedProperties.Add("IndiceTabella", 1);
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("CodiceAreaBisogno", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("DescrizioneAreaBisogno", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("OrdinamentoAreaBisogno", typeof(int)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("DescrizioneProgetto", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("DataSottoscrizione", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("CodiceContratto", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("Descrizione", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("VaR", typeof(string)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("FontBold", typeof(bool)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("CanLastRow", typeof(bool)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("IsTotal", typeof(bool)));
dtNonRappresentabiliAsset.Columns.Add(new DataColumn("IsSubTotal", typeof(bool)));
#endregion
const string stringReplaceIfZero = " ";
#region dati
var dataDettaglioProdotti = datiSeiUnico.patrimonioUnit().patrimonioCasa.dettaglioProdotti.dettaglioProdotti.ToList();
var dataProdottiNonRappresentabili_Asset = datiSeiUnico.patrimonioUnit().patrimonioCasa.assetClass.distribuzionePerProdotti.listaProdotti.Where(o => o.rappresentabile == false).ToList();
var dataProdottiNonRappresentabili_Valute = datiSeiUnico.patrimonioUnit().patrimonioCasa.esposizioneValutariaTutte.distribuzionePerProdotti.listaProdotti.Where(o => o.rappresentabile == false).ToList();
var dataProdottiNonRappresentabili_Rendimento = mostraTabella_Rendimenti() ? datiSeiUnico.patrimonioUnit().patrimonioCasa.dettaglioProdotti.dettaglioProdotti.Where(p => !p.flagRendimentoMonitoraggio).ToList() : null;
// var areaMon = mostraTabella_Rendimenti() ? datiSeiUnico.monitoraggioUnit().monitoraggio.Where(p => p.progetti != null).ToList() : null;
var displayInfo = datiSeiUnico.displayInfos();
#endregion
#region Prodotti non rappresentabili per asset
foreach (var prodotto in dataProdottiNonRappresentabili_Asset)
{
var itemPosizione = dataDettaglioProdotti.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(prodotto.chiaveAggregazione));
//var itemPiramideModello = dataPiramideModello.FirstOrDefault(o => o.area.ToLower().Trim().Equals(itemPosizione.area.ToLower().Trim()));
var itemOrdinamento = displayInfo.areeDisplayInfos.LastOrDefault(o => o.key.ToLower() == itemPosizione.area.ToLower().Trim());
var rowProdotto = dtNonRappresentabiliAsset.NewRow();
rowProdotto["CodiceAreaBisogno"] = itemPosizione.area;
rowProdotto["DescrizioneAreaBisogno"] = itemPosizione.descAreaEstesa;
rowProdotto["OrdinamentoAreaBisogno"] = itemOrdinamento.value.order;
rowProdotto["DescrizioneProgetto"] = itemPosizione.nomeProgetto;
rowProdotto["DataSottoscrizione"] = itemPosizione.dtInizioRendimentoSpecified ?
itemPosizione.dtInizioRendimento.ToShortDateString() :
itemPosizione.dtSottoscrizione.ToShortDateString();
rowProdotto["CodiceContratto"] = itemPosizione.codContratto;
rowProdotto["Descrizione"] = itemPosizione.prodotto.nomeProdotto;
rowProdotto["ControvaloreAttuale"] = itemPosizione.ctv;
rowProdotto["VaR"] = itemPosizione.prodotto.varDecodificato;
rowProdotto["FontBold"] = false;
rowProdotto["CanLastRow"] = true;
rowProdotto["IsTotal"] = false;
rowProdotto["IsSubTotal"] = false;
dtNonRappresentabiliAsset.Rows.Add(rowProdotto);
}
if (dtNonRappresentabiliAsset.Rows.Count > 0)
ds.Tables.Add(dtNonRappresentabiliAsset);
#endregion
#region Prodotti non rappresentabili per esposizione valutaria
var dtNonRappresentabiliValute = new DataTable();
dtNonRappresentabiliValute = dtNonRappresentabiliAsset.Clone();
dtNonRappresentabiliValute.TableName = "dtNonRappresentabiliValute";
dtNonRappresentabiliValute.ExtendedProperties["IndiceTabella"] = 3;
foreach (var prodotto in dataProdottiNonRappresentabili_Valute)
{
var itemPosizione = dataDettaglioProdotti.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(prodotto.chiaveAggregazione));
var itemOrdinamento = displayInfo.areeDisplayInfos.LastOrDefault(o => o.key.ToLower() == itemPosizione.area.ToLower().Trim());
var rowProdotto = dtNonRappresentabiliValute.NewRow();
rowProdotto["CodiceAreaBisogno"] = itemPosizione.area;
rowProdotto["DescrizioneAreaBisogno"] = itemPosizione.descAreaEstesa;
rowProdotto["OrdinamentoAreaBisogno"] = itemOrdinamento.value.order;
rowProdotto["DescrizioneProgetto"] = itemPosizione.nomeProgetto;
rowProdotto["DataSottoscrizione"] = itemPosizione.dtInizioRendimentoSpecified ?
itemPosizione.dtInizioRendimento.ToShortDateString() :
itemPosizione.dtSottoscrizione.ToShortDateString();
rowProdotto["CodiceContratto"] = itemPosizione.codContratto;
rowProdotto["Descrizione"] = itemPosizione.prodotto.nomeProdotto;
rowProdotto["ControvaloreAttuale"] = itemPosizione.ctv;
rowProdotto["VaR"] = itemPosizione.prodotto.varDecodificato;
rowProdotto["FontBold"] = false;
rowProdotto["CanLastRow"] = true;
rowProdotto["IsTotal"] = false;
rowProdotto["IsSubTotal"] = false;
dtNonRappresentabiliValute.Rows.Add(rowProdotto);
}
if (dtNonRappresentabiliValute.Rows.Count > 0)
ds.Tables.Add(dtNonRappresentabiliValute);
#endregion
if (mostraTabella_Rendimenti())
{
#region Prodotti non rappresentabili per calcolo di rendimento
var dtNonRappresentabiliRendimenti = new DataTable();
dtNonRappresentabiliRendimenti = dtNonRappresentabiliAsset.Clone();
dtNonRappresentabiliRendimenti.TableName = "dtNonRappresentabiliRendimenti";
dtNonRappresentabiliRendimenti.ExtendedProperties["IndiceTabella"] = 5;
int d = 0;
if (dataProdottiNonRappresentabili_Rendimento.Count > 0)
{
foreach (var progetti in dataProdottiNonRappresentabili_Rendimento)
{
var itemPosizione = dataDettaglioProdotti.FirstOrDefault(o => o.chiavePosizionePortafoglio.Equals(progetti.chiavePosizionePortafoglio) && o.area.ToLower() != "cc");
if (itemPosizione != null && !itemPosizione.flagRendimentoMonitoraggio)
{
var itemOrdinamento = displayInfo.areeDisplayInfos.LastOrDefault(o => o.key.ToLower() == itemPosizione.area.ToLower().Trim());
var rowProdotto = dtNonRappresentabiliRendimenti.NewRow();
d = d == 0 ? 1 : d += 1;
rowProdotto["CodiceAreaBisogno"] = itemPosizione.area;
rowProdotto["DescrizioneAreaBisogno"] = itemPosizione.descAreaEstesa;
rowProdotto["OrdinamentoAreaBisogno"] = itemOrdinamento.value.order;
rowProdotto["DescrizioneProgetto"] = itemPosizione.nomeProgetto;
rowProdotto["DataSottoscrizione"] = itemPosizione.dtInizioRendimentoSpecified ?
itemPosizione.dtInizioRendimento.ToShortDateString() :
itemPosizione.dtSottoscrizione.ToShortDateString();
rowProdotto["CodiceContratto"] = itemPosizione.codContratto;
rowProdotto["Descrizione"] = itemPosizione.prodotto.nomeProdotto;
rowProdotto["ControvaloreAttuale"] = itemPosizione.ctv;
rowProdotto["VaR"] = itemPosizione.prodotto.varDecodificato;
rowProdotto["FontBold"] = false;
rowProdotto["CanLastRow"] = true;
rowProdotto["IsTotal"] = false;
rowProdotto["IsSubTotal"] = false;
dtNonRappresentabiliRendimenti.Rows.Add(rowProdotto);
}
}
if (dtNonRappresentabiliRendimenti.Rows.Count > 0)
ds.Tables.Add(dtNonRappresentabiliRendimenti);
}
#endregion
}
#region Raggruppamento per area di bisogno
var dsCopy = new DataSet();
dsCopy = ds.Copy();
foreach (DataTable table in dsCopy.Tables)
{
#region Prodotti raggruppati per area
var dtProdottiPerArea = new DataTable();
dtProdottiPerArea = table.Clone(); // Clono la struttura
dtProdottiPerArea.TableName = table.TableName + "_ProdottiPerArea";
var viewAree = new DataView(table) { Sort = "OrdinamentoAreaBisogno" };
var dtAree = viewAree.ToTable(true, "CodiceAreaBisogno", "DescrizioneAreaBisogno", "OrdinamentoAreaBisogno");
var area = string.Empty;
var progetto = string.Empty;
#region Prodotti delle Risorse Finanziarie
foreach (DataRow rowAreaProgetto in dtAree.Rows)
{
area = rowAreaProgetto["CodiceAreaBisogno"].ToString();
if (new AreaBisogno(area).Visibile)
{
//Progetti
var viewProgetti = new DataView(table.Select("CodiceAreaBisogno='" + area + "'").OrderByDescending(x => x.Field("ControvaloreAttuale")).CopyToDataTable()); //{ Sort = "ControvaloreAttuale DESC" };
var dtProgetti = viewProgetti.ToTable(true, "DescrizioneProgetto");
var bIntestazioneArea = true; // la riga di intestazione dell'area va stampata una sola volta.
var bItestazioneProgetto = area == "Inv" || area == "Pre"; // la riga di intestazione del progetto va stampata solo per area Inv e Pre.
DataRow rowProdottiPerArea;
foreach (DataRow itemProgetto in dtProgetti.Rows)
{
progetto = itemProgetto["DescrizioneProgetto"].ToString();
// Subset di prodotti filtrati per Area/Progetto
var totalecontrovaloreArea = table.Select("CodiceAreaBisogno='" + area + "'").CopyToDataTable().AsEnumerable().Sum(p => p.Field("ControvaloreAttuale"));
var dtArea = new DataView(table.Select("CodiceAreaBisogno='" + area + "' AND " + string.Format("DescrizioneProgetto ='{0}'", itemProgetto["DescrizioneProgetto"].ToString().Replace("'", "''"))).CopyToDataTable()) { Sort = "ControvaloreAttuale DESC" }.ToTable();
var dtAreaProgetto = table.Select("CodiceAreaBisogno='" + area + "' AND " + string.Format("DescrizioneProgetto ='{0}'", itemProgetto["DescrizioneProgetto"].ToString().Replace("'", "''"))).OrderByDescending(x => x.Field("ControvaloreAttuale")).CopyToDataTable();
if (bIntestazioneArea)
{
#region riga con background grigio di intestazione per ogni area
rowProdottiPerArea = dtProdottiPerArea.NewRow();
rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"];
rowProdottiPerArea["DataSottoscrizione"] = rowAreaProgetto["DescrizioneAreaBisogno"];
// Totali per area
rowProdottiPerArea["ControvaloreAttuale"] = totalecontrovaloreArea;// dtArea.AsEnumerable().Sum(p => p.Field("ControvaloreAttuale"));
rowProdottiPerArea["VaR"] = "";
rowProdottiPerArea["FontBold"] = true;
rowProdottiPerArea["CanLastRow"] = false;
rowProdottiPerArea["IsTotal"] = true;
rowProdottiPerArea["IsSubTotal"] = false;
dtProdottiPerArea.Rows.Add(rowProdottiPerArea);
bIntestazioneArea = false;
#endregion
}
if (bItestazioneProgetto)
{
#region Riga con background grigio di intestazione per ogni Progetto
rowProdottiPerArea = dtProdottiPerArea.NewRow();
rowProdottiPerArea["CodiceAreaBisogno"] = rowAreaProgetto["CodiceAreaBisogno"];
rowProdottiPerArea["DataSottoscrizione"] = progetto;
// Totali per area
rowProdottiPerArea["ControvaloreAttuale"] = dtArea.AsEnumerable().Where(o => o.Field("DescrizioneProgetto").Equals(progetto)).Sum(p => p.Field("ControvaloreAttuale"));
rowProdottiPerArea["VaR"] = "";
rowProdottiPerArea["FontBold"] = true;
rowProdottiPerArea["CanLastRow"] = false;
rowProdottiPerArea["IsTotal"] = false;
rowProdottiPerArea["IsSubTotal"] = true;
dtProdottiPerArea.Rows.Add(rowProdottiPerArea);
#endregion
}
// I prodotti della dtProdotti vengono mergiati sulla dtProdottiPerArea
dtProdottiPerArea.Merge(dtArea);
}
}
}
#endregion
#endregion
ds.Tables.Add(dtProdottiPerArea);
}
#endregion
return ds;
}
public virtual bool mostraTabella_Asset(){return GetOption().Valore;}
public virtual bool mostraTabella_Valute(){return GetOption().Valore;}
public virtual bool mostraTabella_Rendimenti() { return GetOption().Valore; }
}
}