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); } } }