using System; using Consulenza.ReportWriter.Business; using Consulenza.ReportWriter.Business.OBJ_PDF; using System.Data; using System.Collections.Generic; using Consulenza.ReportCommon; using Consulenza.ReportWriter.Business.CUSTOM_PDF.ConsulenzaUnica; using System.Linq; using Consulenza.ReportWriter.Business.Entity; using Consulenza.DataServices.fideuram.data.service; using Consulenza.ReportWriter.Business.CHART_PDF; using Dundas.Charting.WebControl; namespace Consulenza.ReportWriter.Manager.Section.Unica { public class S55 : Entity.Section { /// ///S55.PropostaDettaglioProdotti idSezione = 98 /// bool notaCodici; public S55(EnvironmentFacade environmentFacade, int idSection) : base(environmentFacade, idSection) { try { Draw(); } catch (Exception ex) { SectionLogger.Write("S55", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment); } } protected override sealed void Draw() { var dati = GetDataSet(); bool isAdeguata = datiSeiUnico.flagAdeguatezzaPro(); AddElement(new PagePDF(PagePDF.PagePDFType.Generic)); var intestazione = new SectionHeadingPDF( (isAdeguata ? "Proposta" : "Operazioni richieste") + ": dettaglio prodotti", EnvironmentFacade.RendererFacade.XLeftLimit, EnvironmentFacade.RendererFacade.YUpperLimit, EnvironmentFacade.ReportEnvironment.FontFamily); AddElement(intestazione.ToElement()); 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(10)); } var tabellaAreeUltima = new TablePDF(); Boolean isCP = false; int dimensione = dati.Tables.Count; foreach (DataTable dt in dati.Tables) { dimensione--; if (dt.Rows.Count > 1) //0=totale { var tabellaAree = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dt) { Style = Style.ConsulenzaUnica, Footer = false, AlternateRow = false, ShowBorderLastLine = false, HeaderHeight = 27, //FooterHeight=25, RowHeight = 25, TitleRow = true, TitleRowText = dt.Rows[0]["titolo"].ToString(), TitleRowBorder = BorderTitleRowType.Nessuno, TitleRowSpace = 13 }; // Modifica per Saving Map tabellaAree.Columns.Add(new ColumnPDF("SavingMap", 13, HorizontalAlignmentType.Sinistra, false, false, 6, ColumnType.Immagine, "SavingMap", string.Empty) { DeltaYContent = 10, ScaleColumnTypeImage = 0.50F }); // Fine Modifica tabellaAree.Columns.Add(new ColumnPDF("Descrizione", 120, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Prodotto") { HeaderFontSize = 7 }); tabellaAree.Columns.Add(new ColumnPDF("StatoCP", 29, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Immagine, "StatoCP", string.Empty) { DeltaYContent = 10, ScaleColumnTypeImage = 0.50F }); tabellaAree.Columns.Add(new ColumnPDF("Controvaloreattuale", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvaloreattuale", "Controvalore
attuale (€)") { HeaderPaddingLeft = 10, HeaderFontSize = 7, PaddingRight = 6 }); tabellaAree.Columns.Add(new ColumnPDF("ApportiDisinvest", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "ApportiDisinvest", "Apporti/
Disinvest. (€)") { HeaderPaddingLeft = 7, HeaderFontSize = 7, PaddingRight = 6 }); tabellaAree.Columns.Add(new ColumnPDF("Controvaloreproposto", 90, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvaloreproposto", "Controvalore
" + (isAdeguata ? "proposto (€)" : "prospettico (€)")) { HeaderPaddingLeft = 7, HeaderFontSize = 7, PaddingRight = 6 }); tabellaAree.Columns.Add(new ColumnPDF("Rischiocredito", 53, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Rischiocredito", "Rischio
Credito") { HeaderPaddingLeft = 7, HeaderFontSize = 7, PaddingRight = 6 }); tabellaAree.Columns.Add(new ColumnPDF("VaR", 35, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "VaR", "VaR (%)") { HeaderPaddingLeft = 0, HeaderFontSize = 7, PaddingRight = 4 }); tabellaAreeUltima = tabellaAree; for (int e = 0; e < dt.Rows.Count; e++) { DataRow dr = dt.Rows[e]; int indexVar = 5; switch (dr["tipoRow"].ToString()) { case "totale": for (int c = 0; c < tabellaAree.Columns.Count; c++) { tabellaAree.Cells[c, e].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella; tabellaAree.Cells[c, e].FontBold = true; } if (dr["nota"].ToString().Length > 0) { AddElement(new FormattedTextAreaPDF("(*) " + dr["nota"].ToString(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); dr[indexVar] += "*"; } break; case "sottotitolo": for (int c = 0; c < tabellaAree.Columns.Count; c++) { tabellaAree.Cells[c, e].BackgroundColor = ColorPDF.Standard_Grigio_SfondoColonnaTabella; tabellaAree.Cells[c, e].FontBold = true; } break; case "Dettaglio": if (dr["StatoCP"].ToString().Length > 0) isCP = true; break; default: break; } } int a = 0; foreach (DataRow ro in dt.Rows) { tabellaAree.Cells[2, a].HorizontalAlignment = tabellaAree.Cells[3, a].HorizontalAlignment = tabellaAree.Cells[4, a].HorizontalAlignment = tabellaAree.Cells[5, a].HorizontalAlignment = tabellaAree.Cells[6, a].HorizontalAlignment = HorizontalAlignmentType.Destra; a++; } if (isCP && dimensione == 0) { tabellaAreeUltima.Footer = true; tabellaAreeUltima.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, "Prodotto con servizio Step Up attivo. Gli apporti indicati nella colonna \"Controvalore Proposto\" tengono in considerazione il versamento in fase di Sottoscrizione e gli importi relativi allo Step Up in uscita.", new[] { "" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella, new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.60F, "cpInUscita.png")) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left }); tabellaAreeUltima.Notes.Add( new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella, "Prodotto con servizio Step Up attivo. Gli apporti indicati nella colonna \"Controvalore Proposto\" tengono in considerazione il versamento in fase di Sottoscrizione e gli importi relativi allo Step Up in entrata.", new[] { "" }, string.Empty, TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella, new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.60F, "cpInEntrata.png")) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Left }); } AddElement(tabellaAree); #region NOTE AD AZ 90, RM RS PPR, KM KS PPI SOTTOSCRIZIONE, KM KS PPI CONTRATTO string noteText = "*"; if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaAD")) != null) { //for (int b = 0; b < dt.Rows.Count - 1; b++) for (int b = 0; b < dt.Rows.Count; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaAD"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText +") "+ getNotaAD(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaAZ")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaAZ"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaAZ(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaRM")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaRM"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaRM(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaRS")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaRS"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaRS(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaCKS")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaCKS"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaCKS(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaCKE")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaCKE"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaCKE(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaSKS")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaSKS"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaSKS(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } if (dt.AsEnumerable().FirstOrDefault(o => o.Field("notaSKE")) != null) { for (int b = 0; b < dt.Rows.Count - 1; b++) { if (Convert.ToBoolean(dt.Rows[b]["notaSKE"])) tabellaAree.Cells[0, b].Value += dt.Rows[b]["Descrizione"].ToString() + noteText; } AddElement(new SpacePDF(5)); AddElement(new FormattedTextAreaPDF("(" + noteText + getNotaSKE(), EnvironmentFacade.RendererFacade.XLeftLimit) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }); noteText += "*"; } #endregion } AddElement(new SpacePDF(5)); } } /// /// Recupera i dati necessari alla Section restituendo un DataTable. /// /// protected sealed override DataTable GetDataTable() { return null; } /// /// Recupera i dati necessari alla Section restituendo un DataSet. /// /// protected sealed override DataSet GetDataSet() { #region Estrazione dati + definizione Dataset var ds = new DataSet(); var aree = datiSeiUnico.propostaUnit().stPianificazioneVerticale.stAreePianificazione; var dettaglioProdotti = datiSeiUnico.propostaUnit().dettaglioProdotti.dettaglioProdotti.Where(x => x.ctvPro != 0 || (x.ctvPro == 0 && x.ctvAttuale != 0) || (x.isCPUscita)); #endregion string[] notChAgg = { "PAT", "RA" }; #region Checkbox - Opzione Raggruppamento var raggruppaProdotti = getRaggruppaProdotti(); #endregion var operazioni = datiSeiUnico.propostaUnit().dettaglioOperazioni.elencoDettagliOperazioni; #region RaggruppaProdotti.AreaBisogno if (raggruppaProdotti == RaggruppaProdotti.AreaBisogno) { string codArea = ""; rsAggregatoPosizioni itemPreEss = null; rsAggregatoPosizioni itemPreSec = null; var elencoAreeProgetti = datiSeiUnico.propostaUnit().dettaglioProdotti.elencoAggregati.elencoAreeProgetti; var areeDisplayInfos = datiSeiUnico.displayInfos().areeDisplayInfos; int count = 0; int indexTotaleInvPre = 0; var listaelencoaggregati = (from o in elencoAreeProgetti join a in areeDisplayInfos on o.chiaveAggregazione.ToUpper() equals a.key.ToUpper() where o.posizioniAggregate != null && !notChAgg.Contains(o.chiaveAggregazione) /*&& o.ctvPro != 0 && o.ctvAttuale != 0*/ orderby a.value.order, o.ctvPro descending select o).ToList(); var indexPreEssenziale = listaelencoaggregati.ToList().FindIndex(o => o.descrizione.Equals("Previdenza Essenziale")); var indexPreSecondaria = listaelencoaggregati.ToList().FindIndex(o => o.descrizione.Equals("Previdenza Secondaria")); if (indexPreEssenziale > indexPreSecondaria) { itemPreEss = indexPreEssenziale != -1 ? listaelencoaggregati[indexPreEssenziale] : null; itemPreSec = indexPreSecondaria != -1 ? listaelencoaggregati[indexPreSecondaria] : null; if (itemPreEss != null && itemPreSec != null)//se non ci sono tutte e due l'ordinamento vien da sé { listaelencoaggregati[indexPreSecondaria] = itemPreEss; listaelencoaggregati[indexPreEssenziale] = itemPreSec; } } foreach (rsAggregatoPosizioni areeProgetti in listaelencoaggregati.Where(x => x.ctvPro != 0 || (x.ctvPro == 0 && x.ctvAttuale != 0))) { if (codArea != areeProgetti.chiaveAggregazione) { codArea = areeProgetti.chiaveAggregazione; ds.Tables.Add(new DataTable(codArea)); ds.Tables[codArea].Columns.Add(new DataColumn("SavingMap", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("StatoCP", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("Controvaloreattuale", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("ApportiDisinvest", typeof(decimal))); ds.Tables[codArea].Columns.Add(new DataColumn("Controvaloreproposto", typeof(decimal))); ds.Tables[codArea].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("tipoRow", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("titolo", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("nota", typeof(string))); ds.Tables[codArea].Columns.Add(new DataColumn("notaAD", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaAZ", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaRM", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaRS", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaCKS", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaCKE", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaSKS", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("notaSKE", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("BackgroundColor", typeof(bool))); ds.Tables[codArea].Columns.Add(new DataColumn("FontBold", typeof(bool))); } if (areeProgetti.chiaveProgettoLinea == null) { if (codArea.Equals("Inv") || codArea.Equals("Pre")) { indexTotaleInvPre = count; count++; continue; } } if (areeProgetti.chiaveAggregazione.Equals("Inv") || areeProgetti.chiaveAggregazione.Equals("Pre")) { DataRow dr = ElencoProdotti(ds.Tables[codArea], areeProgetti, areeProgetti.chiaveAggregazione.Equals("Inv") ? "Investimento" : "Previdenza", areeProgetti.descrizione, true, true); } foreach (rsSTPosizione dettaglioProdotto in from a in areeProgetti.posizioniAggregate join d in dettaglioProdotti on new { a.chiaveAggregazione, a.posizionePro } equals new { d.chiaveAggregazione, d.posizionePro } orderby d.ctvPro descending select d) { var operazione = operazioni.Where(o => o.chiaveAggregazione == dettaglioProdotto.chiaveAggregazione && o.posizionePro == dettaglioProdotto.posizionePro).FirstOrDefault(); string codcontratto = operazione != null ? operazione.listaOperzioni[0].stDettaglioContratto != null ? operazione.listaOperzioni[0].stDettaglioContratto.tipoContratto : "": ""; string tipoOperazione = operazione != null ? operazione.listaOperzioni[0].codTipoOperazione : ""; ElencoProdotti(ds.Tables[codArea], dettaglioProdotto, "", new AreaBisogno(codArea).Nome, codcontratto, tipoOperazione); } if (areeProgetti.chiaveAggregazione == "Inv" || areeProgetti.chiaveAggregazione == "Pre") { if ((count + 1) > listaelencoaggregati.Count - 1 || !listaelencoaggregati[count].chiaveAggregazione.Equals(areeProgetti.chiaveAggregazione)) { ElencoProdottiTotali(ds.Tables[codArea], listaelencoaggregati[indexTotaleInvPre]);//area inv o pre x totale } } else { ElencoProdottiTotali(ds.Tables[codArea], areeProgetti);//area x totale } count++; } } #endregion #region RaggruppaProdotti.Contratto if (raggruppaProdotti == RaggruppaProdotti.Contratto) { var elencoContrattiLinea = datiSeiUnico.propostaUnit().dettaglioProdotti.elencoAggregati.elencoContrattiLinea; string nomeLineaContratto = ""; var listaContrattiLinee = (from o in elencoContrattiLinea where o.posizioniAggregate != null && !notChAgg.Contains(o.chiaveAggregazione) select o).ToList(); var listaContratti = (from o in listaContrattiLinee where o.chiaveProgettoLinea == null orderby o.ctvPro descending select o).ToList(); var listaLinee = (from o in listaContrattiLinee where o.chiaveProgettoLinea != null orderby o.ctvPro descending select o).ToList(); foreach (rsAggregatoPosizioni contratto in listaContratti) { if (nomeLineaContratto != contratto.chiaveAggregazione && contratto.chiaveProgettoLinea == null) { nomeLineaContratto = contratto.chiaveAggregazione; ds.Tables.Add(new DataTable(nomeLineaContratto)); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("SavingMap", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("StatoCP", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("Controvaloreattuale", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("ApportiDisinvest", typeof(decimal))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("Controvaloreproposto", typeof(decimal))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("tipoRow", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("titolo", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("nota", typeof(string))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaAD", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaAZ", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaRM", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaRS", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaCKS", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaCKE", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaSKS", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("notaSKE", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("BackgroundColor", typeof(bool))); ds.Tables[nomeLineaContratto].Columns.Add(new DataColumn("FontBold", typeof(bool))); } foreach (rsSTPosizione dettaglioProdotto in from a in contratto.posizioniAggregate join d in dettaglioProdotti on new { a.chiaveAggregazione, a.posizionePro } equals new { d.chiaveAggregazione, d.posizionePro } where a.flagLinea == false orderby d.ctvPro descending select d) { var operazione = operazioni.Where(o => o.chiaveAggregazione == dettaglioProdotto.chiaveAggregazione && o.posizionePro == dettaglioProdotto.posizionePro).FirstOrDefault(); string codcontratto = operazione != null ? operazione.listaOperzioni[0].stDettaglioContratto != null ? operazione.listaOperzioni[0].stDettaglioContratto.tipoContratto : "" : ""; string tipoOperazione = operazione != null ? operazione.listaOperzioni[0].codTipoOperazione : ""; ElencoProdotti(ds.Tables[nomeLineaContratto], dettaglioProdotto, "", contratto.descrizione, codcontratto, tipoOperazione); } foreach (rsAggregatoPosizioni linea in listaLinee) { if (linea.chiaveAggregazione.Equals(contratto.chiaveAggregazione)) { DataRow dr = ElencoProdotti(ds.Tables[nomeLineaContratto], linea, contratto.descrizione, linea.descrizione, true, true); foreach (rsSTPosizione dettaglioProdotto in from a in linea.posizioniAggregate join d in dettaglioProdotti on new { a.chiaveAggregazione, a.posizionePro } equals new { d.chiaveAggregazione, d.posizionePro } where a.flagLinea == true && d.ctvPro != 0 && d.ctvAttuale != 0 orderby d.ctvPro descending select d) { var operazione = operazioni.Where(o => o.chiaveAggregazione == dettaglioProdotto.chiaveAggregazione && o.posizionePro == dettaglioProdotto.posizionePro).FirstOrDefault(); string codcontratto = operazione != null ? operazione.listaOperzioni[0].stDettaglioContratto != null ? operazione.listaOperzioni[0].stDettaglioContratto.tipoContratto : "" : ""; string tipoOperazione = operazione != null ? operazione.listaOperzioni[0].codTipoOperazione : ""; //if (dettaglioProdotto.ctvPro != 0 && dettaglioProdotto.ctvAttuale != 0) ElencoProdotti(ds.Tables[nomeLineaContratto], dettaglioProdotto, "", linea.descrizione, codcontratto, tipoOperazione); } } } ElencoProdottiTotali(ds.Tables[nomeLineaContratto], contratto); } } #endregion #region RaggruppaProdotti.Categoria if (raggruppaProdotti == RaggruppaProdotti.Categoria) { var displaycat = datiSeiUnico.displayInfos().categoriaDisplayInfos; var elencoCategoria = datiSeiUnico.propostaUnit().dettaglioProdotti.elencoAggregati.elencoCategoria; foreach (rsAggregatoPosizioni Categoria in from o in elencoCategoria join l in displaycat on o.descrizione.ToUpper().Replace(" ", "") equals l.key where o.posizioniAggregate != null && !notChAgg.Contains(o.chiaveAggregazione) orderby l.value.order, o.ctvPro descending select o) { ds.Tables.Add(new DataTable(Categoria.chiaveAggregazione)); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("SavingMap", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("Descrizione", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("StatoCP", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("Controvaloreattuale", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("ApportiDisinvest", typeof(decimal))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("Controvaloreproposto", typeof(decimal))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("Rischiocredito", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("VaR", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("tipoRow", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("titolo", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("nota", typeof(string))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaAD", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaAZ", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaRM", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaRS", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaCKS", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaCKE", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaSKS", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("notaSKE", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("BackgroundColor", typeof(bool))); ds.Tables[Categoria.chiaveAggregazione].Columns.Add(new DataColumn("FontBold", typeof(bool))); foreach (rsSTPosizione dettaglioProdotto in from a in Categoria.posizioniAggregate join d in dettaglioProdotti on new { a.chiaveAggregazione, a.posizionePro } equals new { d.chiaveAggregazione, d.posizionePro } orderby d.ctvPro descending select d) { var operazione = operazioni.Where(o => o.chiaveAggregazione == dettaglioProdotto.chiaveAggregazione && o.posizionePro == dettaglioProdotto.posizionePro).FirstOrDefault(); string codcontratto = operazione != null ? operazione.listaOperzioni[0].stDettaglioContratto != null ? operazione.listaOperzioni[0].stDettaglioContratto.tipoContratto : "" : ""; string tipoOperazione = operazione != null ? operazione.listaOperzioni[0].codTipoOperazione : ""; // if (dettaglioProdotto.ctvPro != 0) //Fix #4948 ElencoProdotti(ds.Tables[Categoria.chiaveAggregazione], dettaglioProdotto, "", Categoria.descrizione, codcontratto, tipoOperazione); } ElencoProdottiTotali(ds.Tables[Categoria.chiaveAggregazione], Categoria); //ElencoProdotti(ds.Tables[Categoria.chiaveAggregazione], Categoria, "", Categoria.descrizione, true, true); } } #endregion return ds; } public virtual RaggruppaProdotti getRaggruppaProdotti() { return GetOption().RaggruppaProdotti; } private DataRow ElencoProdotti(DataTable prodotti, rsAggregatoPosizioni areaProgetti, string codArea, string descrizione, bool fontBold = true, bool backGroundColor = true) { DataRow dr = prodotti.NewRow(); dr["SavingMap"] = ""; dr["Descrizione"] = areaProgetti.descrizione; dr["StatoCP"] = ""; dr["Controvaloreattuale"] = areaProgetti.ctvAttuale; dr["ApportiDisinvest"] = areaProgetti.investi + areaProgetti.disinvesti * (-1); dr["Controvaloreproposto"] = areaProgetti.ctvPro; dr["Rischiocredito"] = "-"; dr["VaR"] = areaProgetti.prometeiaInfos != null ? areaProgetti.prometeiaInfos.varDecodificato : "-"; dr["tipoRow"] = "sottotitolo"; dr["titolo"] = codArea; dr["nota"] = getNotaRow1(100m); dr["notaAD"] = false; dr["notaAZ"] = false; dr["notaRM"] = false; dr["notaRS"] = false; dr["notaCKS"] = false; dr["notaCKE"] = false; dr["notaSKS"] = false; dr["notaSKE"] = false; dr["BackgroundColor"] = true; dr["FontBold"] = true; prodotti.Rows.Add(dr); return dr; } private DataRow ElencoProdottiold(DataTable prodotti, rsAggregatoPosizioni areaProgetti, string codArea, string descrizione, bool fontBold = false, bool backGroundColor = false) { DataRow dr = prodotti.NewRow(); dr["Descrizione"] = codArea != "" ? descrizione : "Totale " + descrizione; dr["Controvaloreattuale"] = codArea != "" ? areaProgetti.ctvAttuale : prodotti.AsEnumerable().Where(x => !x.Field("FontBold")).Sum(x => x.Field("Controvaloreattuale")); dr["ApportiDisinvest"] = codArea != "" ? areaProgetti.investi + areaProgetti.disinvesti * (-1) : prodotti.AsEnumerable().Where(x => !x.Field("FontBold")).Sum(x => x.Field("ApportiDisinvest")); dr["Controvaloreproposto"] = codArea != "" ? areaProgetti.ctvPro : prodotti.AsEnumerable().Where(x => !x.Field("FontBold")).Sum(x => x.Field("Controvaloreproposto")); dr["Rischiocredito"] = "-"; dr["VaR"] = codArea != "" ? areaProgetti.prometeiaInfos.varDecodificato : ""; dr["tipoRow"] = "totale"; dr["titolo"] = codArea != "" ? codArea : descrizione; dr["nota"] = getNotaRow1(100m); dr["notaAD"] = false; dr["notaAZ"] = false; dr["notaRM"] = false; dr["notaRS"] = false; dr["notaCKS"] = false; dr["notaCKE"] = false; dr["notaSKS"] = false; dr["notaSKE"] = false; dr["FontBold"] = fontBold; dr["BackgroundColor"] = backGroundColor; prodotti.Rows.Add(dr); return dr; } private DataRow ElencoProdotti(DataTable prodotti, rsSTPosizione dettaglioProdotto, string codArea, string descrizione,string codContratto, string codTipoOperazione, bool fontBold = false, bool backGroundColor = false) { DataRow dr = prodotti.NewRow(); if (dettaglioProdotto.savingMap) dr["SavingMap"] = "SavingMap.png"; else dr["SavingMap"] = ""; dr["Descrizione"] = dettaglioProdotto.prodotto.nomeProdotto; dr["StatoCP"] = ""; if (dettaglioProdotto.isCPEntrata) dr["StatoCP"] = "cpInEntrata.png"; else if (dettaglioProdotto.isCPUscita) dr["StatoCP"] = "cpInUscita.png"; dr["Controvaloreattuale"] = dettaglioProdotto.ctvAttuale; dr["ApportiDisinvest"] = dettaglioProdotto.investi + dettaglioProdotto.disinvesti * (-1); dr["Controvaloreproposto"] = dettaglioProdotto.ctvPro; dr["Rischiocredito"] = dettaglioProdotto.prodotto.rischioCreditoDec != null ?Helper.resultValueVariousString(dettaglioProdotto.prodotto.rischioCreditoDec) : ""; dr["VaR"] = dettaglioProdotto.prodotto.varProDec; dr["tipoRow"] = "Dettaglio"; dr["titolo"] = descrizione; dr["nota"] = ""; dr["notaAD"] = dettaglioProdotto.prodotto.codInterno == "90" && codTipoOperazione == "AD"; dr["notaAZ"] = dettaglioProdotto.prodotto.codInterno == "90" && codTipoOperazione == "AZ"; dr["notaRM"] = dettaglioProdotto.prodotto.codInterno == "RM" && codContratto == "PPR" && (codTipoOperazione=="NS" || codTipoOperazione=="TR"); dr["notaRS"] = dettaglioProdotto.prodotto.codInterno == "RS" && codContratto == "PPR" && (codTipoOperazione == "NS" || codTipoOperazione == "TR"); dr["notaCKS"] = dettaglioProdotto.prodotto.codInterno == "KS" && dettaglioProdotto.ctvPro > 0 && codTipoOperazione=="CV" && codContratto=="PPI";//conversione dr["notaCKE"] = dettaglioProdotto.prodotto.codInterno == "KE" && dettaglioProdotto.ctvPro > 0 && codTipoOperazione == "CV" && codContratto == "PPI";//conversione dr["notaSKS"] = dettaglioProdotto.prodotto.codInterno == "KS" && codTipoOperazione == "NS" && codContratto == "PPI"; //sottoscrizione dr["notaSKE"] = dettaglioProdotto.prodotto.codInterno == "KE" && codTipoOperazione == "NS" && codContratto == "PPI"; dr["FontBold"] = fontBold; dr["BackgroundColor"] = backGroundColor; prodotti.Rows.Add(dr); return dr; } private DataRow ElencoProdottiTotali(DataTable prodotti, rsAggregatoPosizioni areaProgetti) { DataRow dr = prodotti.NewRow(); dr["Descrizione"] = "Totale "+ areaProgetti.descrizione; dr["Controvaloreattuale"] = areaProgetti.ctvAttuale; dr["ApportiDisinvest"] = areaProgetti.investi + areaProgetti.disinvesti * (-1); dr["Controvaloreproposto"] = areaProgetti.ctvPro; dr["Rischiocredito"] = "-"; dr["VaR"] = areaProgetti.prometeiaInfos != null ? areaProgetti.prometeiaInfos.varDecodificato : "-"; dr["tipoRow"] = "totale"; dr["titolo"] = areaProgetti.descrizione; dr["nota"] = getNotaRow1(100m); dr["notaAD"] = false; dr["notaAZ"] = false; dr["notaRM"] = false; dr["notaRS"] = false; dr["notaCKS"] = false; dr["notaCKE"] = false; dr["notaSKS"] = false; dr["notaSKE"] = false; dr["BackgroundColor"] = true; dr["FontBold"] = true; prodotti.Rows.Add(dr); return dr; } public virtual string getTesto1() { bool Adeguata = datiSeiUnico.flagAdeguatezzaPro(); string nota = ""; if(!Adeguata) nota = "In questa scheda sono riportati i prodotti che lei attualmente detiene presso $/Banca/$ e quelli da lei richiesti al suo private banker, con evidenza delle operazioni effettuate su sua richiesta. "; else nota = "In questa scheda sono riportati i prodotti che lei attualmente detiene presso $/Banca/$ e quelli selezionati nella presente proposta, con evidenza delle operazioni effettuate. "; switch (GetOption().RaggruppaProdotti) { case RaggruppaProdotti.AreaBisogno: nota+= "I prodotti sono raggruppati per area di bisogno e, dove necessario, per progetto di investimento."; break; case RaggruppaProdotti.Categoria: nota+= "I prodotti sono raggruppati sulla base della categoria di appartenenza."; break; case RaggruppaProdotti.Contratto: nota += "I prodotti sono raggruppati sulla base del contratto di appartenenza."; break; } return Helper.ReplaceVariables(nota,EnvironmentFacade.ReportEnvironment); } public virtual string getNotaRow1(decimal gradoCopertura) { string nota = ""; if (gradoCopertura < 100 && Convert.ToDouble(gradoCopertura) != 0) { nota += "Grado di copertura prodotti in termini di Rischio Mercato (VaR %): {0}."; } return string.Format(nota, Helper.FormatDecimal(gradoCopertura.ToString(), 2)); } public virtual string getNotaAD() { return "Adesione al Fondo Pensione Fideuram con versamento di un contributo iniziale. Gli apporti indicati rappresentano il totale dei contributi versati dall’aderente in fase di adesione."; } public virtual string getNotaAZ() { //string nota = ""; //if (codInt == "90" && codTipoCont == "AZ") return ") Adesione al Fondo Pensione Fideuram senza versamento di un contributo iniziale. In corrispondenza del singolo comparto non è quindi possibile valorizzare gli apporti né il controvalore finale."; //return nota; } public virtual string getNotaRM() { return ") Prodotto a premio periodico. Gli apporti indicati rappresentano il totale dei premi versati in fase di sottoscrizione (prima rata + premio unico aggiuntivo)"; } public virtual string getNotaRS() { return ") Prodotto a premio periodico. Gli apporti indicati rappresentano il totale dei premi versati in fase di sottoscrizione (prima rata + premio unico aggiuntivo)"; } public virtual string getNotaCKS() { return ") Programma periodico che prevede l’investimento iniziale nel portafoglio monetario “In Prima Persona – Linea Liquidità”. Gli apporti indicati rappresentano il totale dei premi versati su ciascun fondo al termine del programma periodico."; } public virtual string getNotaCKE() { return ") Programma periodico che prevede l’investimento iniziale nel portafoglio monetario “In Persona – Linea Liquidità”. Gli apporti indicati rappresentano il totale dei premi versati su ciascun fondo al termine del programma periodico."; } public virtual string getNotaSKS() { return ") Programma periodico che prevede l’investimento iniziale nel portafoglio monetario “In Prima Persona – Linea Liquidità”. Gli apporti indicati rappresentano il totale dei premi versati su ciascun fondo al termine del programma periodico."; } public virtual string getNotaSKE() { return ") Programma periodico che prevede l’investimento iniziale nel portafoglio monetario “In Persona – Linea Liquidità”. Gli apporti indicati rappresentano il totale dei premi versati su ciascun fondo al termine del programma periodico."; } } }