274 lines
12 KiB
C#
274 lines
12 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Collections.Generic;
|
|
using System.Web;
|
|
using PDFGenerator.BusinessLayer.DataSection;
|
|
using PDFGenerator;
|
|
using PDFGenerator.BusinessLayer;
|
|
|
|
|
|
/// <summary>
|
|
/// Summary description for DSS96RischioMercatoRischioCredito
|
|
/// </summary>
|
|
public class DSS169RischioMercatoRischioCredito : IDataSection
|
|
{
|
|
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
public DSS169RischioMercatoRischioCredito()
|
|
{
|
|
//
|
|
// TODO: Add constructor logic here
|
|
//
|
|
}
|
|
|
|
public DataSectionResult getDataSection(List<SessionStruct> 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;
|
|
}
|
|
}
|
|
|