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 DSS96RischioMercatoRischioCredito : IDataSection
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
public DSS96RischioMercatoRischioCredito ()
{
//
// TODO: Add constructor logic here
//
}
///
/// Recupera i dati per la stampa della S96
///
///
///
public DataSectionResult getDataSection (List tabelleSessione, string querySql, DataThread dataThread)
{
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; //cecco
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";
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)
{
rowIndicatori.Complessita = Convert.ToBoolean(dtRow["ComplexityIsOk"]);
rowIndicatori.RischioMercato = Convert.ToBoolean(dtRow["VarIsOk"]);
rowIndicatori.RischioCredito = Convert.ToBoolean(dtRow["RiskClassIsOk"]);
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;
}
}