using System; using System.Data; using System.Collections.Generic; using System.Web; using PDFGenerator.BusinessLayer.DataSection; using PDFGenerator; using PDFGenerator.BusinessLayer; /// /// Summary description for DSS96RischioMercatoRischioCredito /// public class DSS169RischioMercatoRischioCredito : IDataSection { private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); public DSS169RischioMercatoRischioCredito() { // // TODO: Add constructor logic here // } public DataSectionResult getDataSection(List tabelleSessione, string querySql, DataThread dataThread) { // return new DataSectionResult(); try { DataSectionResult dsr = new DataSectionResult(); DataSetS96 ds96 = new DataSetS96(); FormatNum conv = new FormatNum(); DataTable dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread); DataSetS96.DatiGraficoRow row; DataSetS96.DatiTabellaDiagnosiRow rowTableDiagnosi; DataSetS96.DatiTabellaMonitoraggioRow rowTableMonit; DataSetS96.IndicatoriRow rowIndicatori; bool isMonit = dataThread.TipoReport.ToUpper() == "MONITORAGGIO"; DataView dw = new DataView(dt); DataTable table; if (dt.Rows.Count < 3) dw.RowFilter = "InstituteName <> 'Patrimonio Complessivo'"; table = dw.ToTable(); #region Precalcolo degli Intermediari decimal tempPerc = 0; decimal controvaloreIntermediarioDiRete = 0; decimal percentualeIntermediarioDiRete = 0; decimal controvaloreAltriIntermediari = 0; decimal percentualeAltriIntermediari = 0; //Contrazioni delle stringhe di controllo con cui sono marcate le tuple ritornate nella sezione s6: string s6_DescrizioneIntermediarioFideuram = "BANCAFIDEURAM"; string s6_DescrizioneIntermediarioSanPaolo = "SANPAOLOINVEST"; string s6_DescrizioneIntermediarioIWPrivateInvestments = "IWPRIVATEINVESTMENTS"; //cecco string s6_DescrizioneDiControllo = string.Empty; //Contrazioni delle stringhe di controllo con cui sono marcate le tuple ritornate nella sezione s96: string s96_DescrizioneIntermediarioFideuram = "PATRIMONIOBANCAFIDEURAM"; string s96_DescrizioneIntermediarioSanPaolo = "PATRIMONIOSANPAOLOINVEST"; string s96_DescrizioneIntemediarioIWPrivateInvestments = "PATRIMONIOIWPRIVATEINV."; string s96_DescrizioneAltriIstituti = "PATRIMONIOALTRIISTITUTI"; string s96_DescrizioneDiControllo = string.Empty; //Descrizioni usate nelle logiche di flusso: string descrizioneCorrente = string.Empty; //Se nel DataThread la DataTable relativa agli intermediari è diversa da NULL significa che la DSS6 è stata elaborata: //Nel caso abbia righe devo utilizzare i suoi controvalori e le sue percentuali per un calcolo di accorpamento in base alla rete. //Tale valore confluisce poi nella valorizzazione delle righe di diagnosi in questa classe. if (dataThread.DtDSS6Intermediari != null && dataThread.DtDSS6Intermediari.Rows.Count > 0) { //Specifica delle stringhe di controllo degli intermediari per le tuple sia per la DSS6 che per la DSS96: if (dataThread.Rete.ToUpper().Equals("F")) { s6_DescrizioneDiControllo = s6_DescrizioneIntermediarioFideuram; s96_DescrizioneDiControllo = s96_DescrizioneIntermediarioFideuram; } else if (dataThread.Rete.ToUpper().Equals("S")) { s6_DescrizioneDiControllo = s6_DescrizioneIntermediarioSanPaolo; s96_DescrizioneDiControllo = s96_DescrizioneIntermediarioSanPaolo; } else { s6_DescrizioneDiControllo = s6_DescrizioneIntermediarioIWPrivateInvestments; s96_DescrizioneDiControllo = s96_DescrizioneIntemediarioIWPrivateInvestments; } for (int i = 0; i < dataThread.DtDSS6Intermediari.Rows.Count; i++) { descrizioneCorrente = dataThread.DtDSS6Intermediari.Rows[i]["Descrizione"].ToString().Replace(" ", string.Empty).ToUpper(); if (descrizioneCorrente.Equals(s6_DescrizioneDiControllo)) { controvaloreIntermediarioDiRete += Convert.ToDecimal(dataThread.DtDSS6Intermediari.Rows[i]["Controvalore"]); percentualeIntermediarioDiRete += Convert.ToDecimal(dataThread.DtDSS6Intermediari.Rows[i]["Percentuale"]); } else { controvaloreAltriIntermediari += Convert.ToDecimal(dataThread.DtDSS6Intermediari.Rows[i]["Controvalore"]); percentualeAltriIntermediari += Convert.ToDecimal(dataThread.DtDSS6Intermediari.Rows[i]["Percentuale"]); } } } #endregion foreach (DataRow dtRow in table.Rows) { row = ds96.DatiGrafico.NewDatiGraficoRow(); rowTableDiagnosi = ds96.DatiTabellaDiagnosi.NewDatiTabellaDiagnosiRow(); rowTableMonit = ds96.DatiTabellaMonitoraggio.NewDatiTabellaMonitoraggioRow(); rowIndicatori = ds96.Indicatori.NewIndicatoriRow(); #region popolamento dataSet del grafico e dati tabella comuni row.DescrizionePatrimonio = dtRow["InstituteName"].ToString(); if (isMonit) { rowTableMonit.DescrizionePatrimonio = " " + dtRow["InstituteName"].ToString(); } else { rowTableDiagnosi.DescrizionePatrimonio = " " + dtRow["InstituteName"].ToString(); } if (dtRow["riskClassString"] != DBNull.Value) { row.ClasseRischioCreditoStr = dtRow["riskClassString"].ToString(); if (isMonit) rowTableMonit.RischioCredito = row.ClasseRischioCreditoStr; else rowTableDiagnosi.RischioCredito = row.ClasseRischioCreditoStr; } else { row.ClasseRischioCredito = Convert.ToInt16(dtRow["riskClass"]); if (isMonit) rowTableMonit.RischioCredito = UtilityBusinessLayer.GetRiskCreditClassName(row.ClasseRischioCredito.ToString()); else rowTableDiagnosi.RischioCredito = UtilityBusinessLayer.GetRiskCreditClassName(row.ClasseRischioCredito.ToString()); } //V attenzione vedere come si comporta il componente grafico, altrimenti inserire il riskClassMaxString if (dtRow["riskClassMax"] == DBNull.Value) row.RischioCreditoMaxStr = "N.C."; else row.RischioCreditoMax = Convert.ToInt16(dtRow["riskClassMax"]); if (dtRow["varString"] != DBNull.Value) { row.RischioMercatoStr = dtRow["varString"].ToString(); if (isMonit) rowTableMonit.RischioMercato = row.RischioMercatoStr; else rowTableDiagnosi.RischioMercato = row.RischioMercatoStr; } else { row.RischioMercato = Math.Round(Convert.ToDecimal(dtRow["var"]), 2); if (isMonit) rowTableMonit.RischioMercato = row.RischioMercato.ToString(); else rowTableDiagnosi.RischioMercato = row.RischioMercato.ToString(); } if (dtRow["varMax"] == DBNull.Value) row.RischioMercatoMaxStr = "N.C."; else row.RischioMercatoMax = Convert.ToDecimal(SoglieVar.ConvOld(dtRow["varMax"])); if (dtRow["coverageString"] != DBNull.Value) { row.CoperturaStr = dtRow["coverageString"].ToString(); if (isMonit) rowTableMonit.Copertura = row.CoperturaStr; else rowTableDiagnosi.Copertura = row.CoperturaStr; } else { row.Copertura = Math.Round(Convert.ToDecimal(dtRow["coverage"]), 2); if (isMonit) rowTableMonit.Copertura = row.Copertura.ToString(); else rowTableDiagnosi.Copertura = row.Copertura.ToString(); } if (dtRow["riskClassString"] != DBNull.Value) row.UllyPrec = 0.01M; else row.UllyPrec = Convert.ToDecimal(dtRow["Ully_perc"]); //V verificare if (dataThread.profiloIsAct) row.Profilo = "A"; row.ordine = Convert.ToInt32( dtRow["ordine"]); ds96.DatiGrafico.AddDatiGraficoRow(row); #endregion #region popolamento parte diagnosi if (!isMonit) { if (dataThread.DtDSS6Intermediari != null && dataThread.DtDSS6Intermediari.Rows.Count > 0) { descrizioneCorrente = dtRow["InstituteName"].ToString().Replace(" ", string.Empty).ToUpper(); if (descrizioneCorrente.Equals(s96_DescrizioneDiControllo)) { //V Lo prendo sempre dalla query il patrimonio casa, la s6 esclude solo il cc negativo e in caso di ppvv avrei una rapp //errata rowTableDiagnosi.Controvalore = Convert.ToDecimal(dtRow["CTV"]);//controvaloreIntermediarioDiRete; tempPerc = percentualeIntermediarioDiRete; } else if (descrizioneCorrente.Equals(s96_DescrizioneAltriIstituti)) { rowTableDiagnosi.Controvalore = controvaloreAltriIntermediari; tempPerc = percentualeAltriIntermediari; } else { rowTableDiagnosi.Controvalore = Convert.ToDecimal(dtRow["CTV"]); tempPerc = Math.Round(Convert.ToDecimal(dtRow["percentage"]), 2, MidpointRounding.AwayFromZero); } } else { rowTableDiagnosi.Controvalore = Convert.ToDecimal(dtRow["CTV"]); tempPerc = Math.Round(Convert.ToDecimal(dtRow["percentage"]), 2, MidpointRounding.AwayFromZero); } rowTableDiagnosi.Percentuale = tempPerc; ds96.DatiTabellaDiagnosi.AddDatiTabellaDiagnosiRow(rowTableDiagnosi); } #endregion #region popolamento parte monitoraggio if (isMonit) { //MIFID2 20180504 Campi inesistenti nella riga //rowIndicatori.Complessita = Convert.ToBoolean(dtRow["ComplexityIsOk"]); //rowIndicatori.RischioMercato = Convert.ToBoolean(dtRow["VarIsOk"]); //rowIndicatori.RischioCredito = Convert.ToBoolean(dtRow["RiskClassIsOk"]); //rowIndicatori.Complessita = true; //rowIndicatori.RischioMercato = true; //rowIndicatori.RischioCredito = true; //--MIFID2 ds96.DatiTabellaMonitoraggio.AddDatiTabellaMonitoraggioRow(rowTableMonit); ds96.Indicatori.AddIndicatoriRow(rowIndicatori); } #endregion } dsr.Esito = ds96.DatiGrafico.Rows.Count; dsr.DatiSezione = ds96; return dsr; }catch(Exception ex) { try { logger.Error(String.Concat(ex.Message, " ", dataThread.CodiceFiscale)); } catch { } } return null; } }