using System; using System.Collections.Generic; using System.Data; namespace PDFGenerator.BusinessLayer.DataSection { /// /// Summary description for DSS172ProtezioneCapitaleAreeBisogno /// public class DSS172ProtezioneCapitaleAreeBisogno : IDataSection { public DSS172ProtezioneCapitaleAreeBisogno() { // // TODO: Add constructor logic here // } /// /// Recupera i dati per la stampa della S172. /// /// /// /// /// public DataSectionResult getDataSection(List tabelleSessione, string querySql, DataThread dataThread) { DataSetS172 dataset172 = new DataSetS172(); FormatNum conv = new FormatNum(); DataSectionResult dsr = new DataSectionResult(); #region DataSetS172Bis LineeProtette DataSetS172Bis dataset172bis = new DataSetS172Bis(); DataSectionResult dsr172bis = new DataSectionResult(); DataTable dtLineeProtette = SectionManager.GetDataSection(tabelleSessione, "[C6MartPeriodico].[PL_S172ProtezioneCapitaleLineeProdotti]", dataThread); #endregion Random rnd = new Random(); DataTable dt = new DataTable(); bool _mostracolonnacopertura = false; if (dataThread.Patrimoniobancafideuramctv != 0) { Decimal ctvTotale = 0; //Decimal ctvCC = 0; Decimal ctvNA = 0; dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread); decimal residuo = 100; //decimal valorePercMaggiore = 0; DataSetS172.GraficoFarfallaRow tupla_maggiore = null; //Se il cliente ha solo CC presso BF la query ritorna solo 2 righe e non bisogna visualizzare niente if (dt.Rows.Count > 3) { #region Tabella del GraficoPiramide decimal totaleRisorseAllocate = 0; decimal totaleControvaloreProtetto = 0; int iOrderNeedArea = 1; foreach(DataRow row in dtLineeProtette.Rows) { DataSetS172.LineeProtetteRow newRow; newRow = dataset172.LineeProtette.NewLineeProtetteRow(); newRow.Linea = row["Linea"].ToString(); newRow.Contratto = row["Contratto"].ToString(); newRow.VersatoNetto = Convert.ToDecimal(row["VersatoNetto"]); newRow.Controvalore = Convert.ToDecimal(row["Controvalore"]); newRow.ComponentePerformance = Convert.ToDecimal(row["ComponentePerformance"]); newRow.ComponenteProtezione = Convert.ToDecimal(row["ComponenteProtezione"]); newRow.ControvaloreProtetto = Convert.ToDecimal(row["ControvaloreProtetto"]); newRow.DataRiferimento = row["DataRiferimento"].ToString(); newRow.PercentualePerformance = Convert.ToDecimal(row["PercentualePerformance"]); newRow.PercentualeProtezione = Convert.ToDecimal(row["PercentualeProtezione"]); dataset172.LineeProtette.AddLineeProtetteRow(newRow); } foreach (DataRow row in dt.Rows) { // escludo risorse non allocate (na), contocorrente (cc) , pro, pre1 e pre2 if (row["needarea"].ToString().ToLower() != "na" && row["needarea"].ToString().ToLower() != "cc" && row["needarea"].ToString().ToLower() != "pro" && row["needarea"].ToString().ToLower() != "pre1" && row["needarea"].ToString().ToLower() != "pre2") { //Grafico Piramide DataSetS172.GraficoPiramideRow rowDSS172GraficoPiramide; rowDSS172GraficoPiramide = dataset172.GraficoPiramide.NewGraficoPiramideRow(); rowDSS172GraficoPiramide.AreaBisogno = row["needarea"].ToString(); rowDSS172GraficoPiramide.Controvalore = conv.ConvertNum(row["controvaloreAttuale"].ToString()); rowDSS172GraficoPiramide.ControvaloreProtetto = conv.ConvertNum(row["capprot"].ToString()); rowDSS172GraficoPiramide.ContributoProtezione = ""; rowDSS172GraficoPiramide.ContributoProtezioneColumn = ""; totaleRisorseAllocate += Convert.ToDecimal(row["controvaloreAttuale"]); totaleControvaloreProtetto += Convert.ToDecimal(row["capprot"].ToString()); rowDSS172GraficoPiramide.Rischio = row["var_needareaString"] == DBNull.Value ? conv.ConvertNum(row["var_needarea"].ToString()) : row["var_needareaString"].ToString(); rowDSS172GraficoPiramide.Copertura = row["copertura_needareaString"] == DBNull.Value ? conv.ConvertNum(row["copertura_needarea"].ToString()) : row["copertura_needareaString"].ToString(); if ((Convert.ToDecimal(rowDSS172GraficoPiramide.Controvalore) == 0) || (Convert.ToDecimal(rowDSS172GraficoPiramide.Controvalore) == 0M) || (Convert.ToDecimal(rowDSS172GraficoPiramide.Controvalore) == 0M)) { rowDSS172GraficoPiramide.Rischio = "0,00"; rowDSS172GraficoPiramide.Copertura = "100,00"; } rowDSS172GraficoPiramide.OrderNeedArea = iOrderNeedArea; dataset172.GraficoPiramide.AddGraficoPiramideRow(rowDSS172GraficoPiramide); #region istogramma a barre //Istogramma a barre DataSetS172.GraficoBarreRow rowDSS172ContributoProtezione; rowDSS172ContributoProtezione = dataset172.GraficoBarre.NewGraficoBarreRow(); rowDSS172ContributoProtezione.NeedArea = row["needarea"].ToString().ToLower(); rowDSS172ContributoProtezione.OrderNeedArea = iOrderNeedArea; dataset172.GraficoBarre.AddGraficoBarreRow(rowDSS172ContributoProtezione); //--Istogramma a barre #endregion iOrderNeedArea++; } } //V Approssimazione diagnosi if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") { if (residuo != 0 && tupla_maggiore != null) { tupla_maggiore.PercentualeAttuale += residuo; } } #endregion #region Risorse Allocate DataSetS172.RisorseAllocateRow rowDSS172RisorseAllocate; rowDSS172RisorseAllocate = dataset172.RisorseAllocate.NewRisorseAllocateRow(); rowDSS172RisorseAllocate.Descrizione = "TOTALE RISORSE ALLOCATE"; rowDSS172RisorseAllocate.Controvalore = conv.ConvertNum(totaleRisorseAllocate); rowDSS172RisorseAllocate.ControvaloreProtetto = conv.ConvertNum(totaleControvaloreProtetto); //V Cambiato il puntamento alla query per prendere il var della piramide invece che quello complessivo che tiene conto delle risorse non associate rowDSS172RisorseAllocate.Rischio = dt.Rows[0]["var_tot_pirString"] == DBNull.Value ? conv.ConvertNum(dt.Rows[0]["var_tot_pir"].ToString()) : dt.Rows[0]["var_tot_pirString"].ToString(); rowDSS172RisorseAllocate.Copertura = dt.Rows[0]["copertura_tot_pirString"] == DBNull.Value ? conv.ConvertNum(dt.Rows[0]["copertura_tot_pir"].ToString()) : dt.Rows[0]["copertura_tot_pirString"].ToString(); rowDSS172RisorseAllocate.ContributoProtezione = ""; if (Convert.ToDecimal(rowDSS172RisorseAllocate.Controvalore) == 0) { rowDSS172RisorseAllocate.Rischio = "0,00"; rowDSS172RisorseAllocate.Copertura = "100,00"; } // #endregion #region Risorse non allocate decimal rischioRisorsenonAllocate = 0; decimal coperturaRisorseNonAllocate = -1; decimal ctvRisorseNonAllocate = 0; DataSetS172.RisorseNonAllocateRow rowDSS172RisorseNonAllocate; rowDSS172RisorseNonAllocate = dataset172.RisorseNonAllocate.NewRisorseNonAllocateRow(); rowDSS172RisorseNonAllocate.Descrizione = "Risorse non allocate"; DataRow[] drRisorseNonAllocate = dt.Select(" NeedArea='Na'"); if (drRisorseNonAllocate.Length > 0) { rowDSS172RisorseNonAllocate.Controvalore = conv.ConvertNum(drRisorseNonAllocate[0]["controvaloreAttuale"]); ctvRisorseNonAllocate = drRisorseNonAllocate[0]["controvaloreAttuale"] == DBNull.Value ? 0 : Convert.ToDecimal(drRisorseNonAllocate[0]["controvaloreAttuale"]); if (ctvRisorseNonAllocate != 0) { rischioRisorsenonAllocate = drRisorseNonAllocate[0]["var_needarea"] == DBNull.Value ? 0 : Convert.ToDecimal(drRisorseNonAllocate[0]["var_needarea"]); coperturaRisorseNonAllocate = drRisorseNonAllocate[0]["copertura_needarea"] == DBNull.Value ? 0 : Convert.ToDecimal(drRisorseNonAllocate[0]["copertura_needarea"]); } } rowDSS172RisorseNonAllocate.Controvalore = conv.ConvertNum(ctvRisorseNonAllocate); rowDSS172RisorseNonAllocate.ControvaloreProtetto = "-"; rowDSS172RisorseNonAllocate.Rischio = conv.ConvertNum(rischioRisorsenonAllocate); rowDSS172RisorseNonAllocate.Copertura = conv.ConvertNum(coperturaRisorseNonAllocate); //V lo setto per le approsimazioni ctvNA = ctvRisorseNonAllocate; // In caso in cui le risorse non allocate siano uguali a 0 non deve essere mostrata la riga; // non deve essere mostrata nemmeno la riga delle risorse allocate, ma direttamente delle risorse finanziarie if (ctvRisorseNonAllocate != 0M) { dataset172.RisorseAllocate.AddRisorseAllocateRow(rowDSS172RisorseAllocate); dataset172.RisorseNonAllocate.AddRisorseNonAllocateRow(rowDSS172RisorseNonAllocate); } #endregion #region Risorse Finanziarie // totale delle Risorse Finanziarie DataSetS172.RisorseFinanziarieRow rowDSS172RisorseFinanziarie; rowDSS172RisorseFinanziarie = dataset172.RisorseFinanziarie.NewRisorseFinanziarieRow(); rowDSS172RisorseFinanziarie.Descrizione = "TOTALE RISORSE FINANZIARIE"; rowDSS172RisorseFinanziarie.Controvalore = conv.ConvertNum(totaleRisorseAllocate + ctvRisorseNonAllocate); rowDSS172RisorseFinanziarie.Rischio = dt.Rows[0]["var_risfinString"] == DBNull.Value ? conv.ConvertNum(dt.Rows[0]["var_risfin"].ToString()) : dt.Rows[0]["var_risfinString"].ToString(); //D //conv.ConvertNum(ptfTotaleBF.misureRischio.varp); rowDSS172RisorseFinanziarie.Copertura = dt.Rows[0]["copertura_risfinString"] == DBNull.Value ? conv.ConvertNum(dt.Rows[0]["copertura_risfin"].ToString()) : dt.Rows[0]["copertura_risfinString"].ToString(); //D rowDSS172RisorseFinanziarie.ControvaloreProtetto = "-"; rowDSS172RisorseFinanziarie.ContributoProtezione = ""; //V Setto copertura = 100 e var = 0 nel caso il ctv sia uguale a 0 if (totaleRisorseAllocate + ctvRisorseNonAllocate == 0) { rowDSS172RisorseFinanziarie.Rischio = "0,00"; rowDSS172RisorseFinanziarie.Copertura = "100,00"; } dataset172.RisorseFinanziarie.AddRisorseFinanziarieRow(rowDSS172RisorseFinanziarie); #endregion #region Conto Corrente decimal ctvContoCorrente = 0; DataSetS172.ContoCorrenteRow rowDSS172ContoCorrente; rowDSS172ContoCorrente = dataset172.ContoCorrente.NewContoCorrenteRow(); rowDSS172ContoCorrente.Descrizione = "C/C a saldo negativo"; ctvContoCorrente = dataThread.ContoCorrente; rowDSS172ContoCorrente.Controvalore = conv.ConvertNum(ctvContoCorrente); rowDSS172ContoCorrente.Rischio = "0,00"; rowDSS172ContoCorrente.Copertura = "100,00"; rowDSS172ContoCorrente.ControvaloreProtetto = "-"; dataset172.ContoCorrente.AddContoCorrenteRow(rowDSS172ContoCorrente); #endregion #region Linea Self Negativa decimal ctvLineaSelfNegativa = 0; DataSetS172.LineaSelfRow rowDSS172LineaSelfNegativa; rowDSS172LineaSelfNegativa = dataset172.LineaSelf.NewLineaSelfRow(); rowDSS172LineaSelfNegativa.Descrizione = "Liquidità negativa \"Linee GP Eligo\" "; ctvLineaSelfNegativa = dataThread.TotalSelfNegCurrentAccountValue; rowDSS172LineaSelfNegativa.Controvalore = conv.ConvertNum(ctvLineaSelfNegativa); rowDSS172LineaSelfNegativa.Rischio = "n.c."; rowDSS172LineaSelfNegativa.Copertura = "100,00"; rowDSS172LineaSelfNegativa.ControvaloreProtetto = "-"; dataset172.LineaSelf.AddLineaSelfRow(rowDSS172LineaSelfNegativa); #endregion #region PartiteViaggianti DataSetS172.PartiteViaggiantiRow rowDSS172PartiteViaggianti; rowDSS172PartiteViaggianti = dataset172.PartiteViaggianti.NewPartiteViaggiantiRow(); rowDSS172PartiteViaggianti.Descrizione = Resource.PartiteViaggianti; rowDSS172PartiteViaggianti.ControvaloreProtetto = "-"; decimal totalePartiteViaggianti = dataThread.PartiteViaggiantiInvestimento + dataThread.PartiteViaggiantiDisinvestimento; rowDSS172PartiteViaggianti.ControValore = conv.ConvertNum(totalePartiteViaggianti); if (totalePartiteViaggianti != 0) dataset172.PartiteViaggianti.AddPartiteViaggiantiRow(rowDSS172PartiteViaggianti); #endregion #region Totale Patrimonio DataSetS172.TotalePatrimonioRow rowDSS172TotalePatrimonio; rowDSS172TotalePatrimonio = dataset172.TotalePatrimonio.NewTotalePatrimonioRow(); rowDSS172TotalePatrimonio.Descrizione = "TOTALE PATRIMONIO"; decimal totalePatrimonio = totaleRisorseAllocate + ctvContoCorrente + totalePartiteViaggianti + ctvRisorseNonAllocate + ctvLineaSelfNegativa; rowDSS172TotalePatrimonio.ControValore = conv.ConvertNum(totalePatrimonio); rowDSS172TotalePatrimonio.ControvaloreProtetto = conv.ConvertNum(totaleControvaloreProtetto); //V Settato per le approsimazioni ctvTotale = totaleRisorseAllocate; //Hazem if (dt.Rows[0]["var_totString"] != DBNull.Value) rowDSS172TotalePatrimonio.Rischio = dt.Rows[0]["var_totString"].ToString(); else rowDSS172TotalePatrimonio.Rischio = conv.ConvertNum(dt.Rows[0]["var_tot"]); if (dt.Rows[0]["copertura_totString"] != DBNull.Value) rowDSS172TotalePatrimonio.Copertura = dt.Rows[0]["copertura_totString"].ToString(); else rowDSS172TotalePatrimonio.Copertura = conv.ConvertNum(dt.Rows[0]["copertura_tot"]); rowDSS172TotalePatrimonio.ContributoProtezione = ""; dataset172.TotalePatrimonio.AddTotalePatrimonioRow(rowDSS172TotalePatrimonio); foreach (DataRow row in dataset172.GraficoPiramide.Rows) { //row["ContributoProtezione"] = (Convert.ToDouble( row["ControvaloreProtetto"])/Convert.ToDouble(dataset172.TotalePatrimonio.Rows[0]["Controvalore"]) * 100.00).ToString(); if (Convert.ToDouble(totaleControvaloreProtetto) > 0) row["ContributoProtezione"] = ((Convert.ToDouble(row["ControvaloreProtetto"]) / Convert.ToDouble(totaleControvaloreProtetto)) * 100.00).ToString(); else row["ContributoProtezione"] = 0; } #endregion #region Resulset // verifico se nel datatable GraficoPiramide almeno 1 grado copertura è diverso da 100 e il grado di copertura delle risorse non allocate è diverso da 100 // se si verrà disegnata la colonna relativa al grado di coperura. DataTable dtMostraColonnaCopertura; DataView dwMostraColonnaCopertura = new DataView(dataset172.GraficoPiramide); dwMostraColonnaCopertura.RowFilter = "Copertura <> '100,00'"; dtMostraColonnaCopertura = dwMostraColonnaCopertura.ToTable(); _mostracolonnacopertura = (dtMostraColonnaCopertura.Rows.Count > 0 || (coperturaRisorseNonAllocate != 100M && coperturaRisorseNonAllocate != -1M)); DataSetS172.ResultSetRow rowDSS172ResultSet; rowDSS172ResultSet = dataset172.ResultSet.NewResultSetRow(); rowDSS172ResultSet.MostraColonnaCopertura = _mostracolonnacopertura; dataset172.ResultSet.AddResultSetRow(rowDSS172ResultSet); #endregion } //V condizione presente nella S57 non riportata nella bis //dataThread.TotaleS57 = ctvTotale + ctvNA + dataThread.ContoCorrente - dataThread.PatrimonioNonRappresentabile; } dsr.DatiSezione = dataset172; dsr.Esito = dataset172.GraficoPiramide.Rows.Count; return dsr; } } }