using System;
using System.Data;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.BusinessLayer;
using System.Collections.Generic;
using PDFGenerator;
///
/// Summary description for DSS82DatiSintetici
///
public class DSS82DatiSinteticiBIS : IDataSection
{
FormatNum conv;
private decimal calcolaTotaleCTV(DataTable dt)
{
object sumExt = dt.Compute("Sum(CONTROVALOREATTUALE)", "NEED_AREA='Ext'");
if (sumExt.ToString() == string.Empty)
sumExt = 0M;
object sumInv = dt.Compute("Sum(CONTROVALOREATTUALE)", "NEED_AREA='Inv'");
if (sumInv.ToString() == string.Empty)
sumInv = 0M;
object sumLiq = dt.Compute("Sum(CONTROVALOREATTUALE)", "NEED_AREA='Liq'");
if (sumLiq.ToString() == string.Empty)
sumLiq = 0M;
object sumPre = dt.Compute("Sum(CONTROVALOREATTUALE)", "NEED_AREA='Pre'");
if (sumPre.ToString() == string.Empty)
sumPre = 0M;
object sumRis = dt.Compute("Sum(CONTROVALOREATTUALE)", "NEED_AREA='Ris'");
if (sumRis.ToString() == string.Empty)
sumRis = 0M;
decimal totale = Convert.ToDecimal(sumExt) +
Convert.ToDecimal(sumInv) +
Convert.ToDecimal(sumLiq) +
Convert.ToDecimal(sumRis) +
Convert.ToDecimal(sumPre);
return totale;
}
private decimal calcolaPesoPercentuale(decimal ctvArea, DataTable dt)
{
decimal peso = (ctvArea / this.calcolaTotaleCTV(dt)) * 100;
return peso;
}
private DataRow getRowDatiSintesi(DataTable dt, string area, string nomeprogetto, Int32? ordinamento)
{
DataRow[] rowArray = null;
if (dt == null)
return null;
if (area.ToUpper() == "INV")
{
// Progetti
if (ordinamento == null)
rowArray = dt.Select(" nome_progetto = '" + nomeprogetto.Replace("'", "''") + "' and NEED_AREA = '" + area.Replace("'", "''") + "'");
else
rowArray = dt.Select(" ordinamento_progetto = " + ordinamento.ToString() + " and nome_progetto = '" + nomeprogetto.Replace("'", "''") + "' and NEED_AREA = '" + area.Replace("'", "''") + "'");
}
else
{
// no progetti
rowArray = dt.Select(" NEED_AREA = '" + area.Replace("'", "''") + "'");
}
if (rowArray.Length > 0)
{
return rowArray[0];
}
else
{
return null;
}
}
private Int32? _ordinamentoProgettoPerAreeMonitorate;
public Int32? OrdinamentoProgettoPerAreeMonitorate { set { _ordinamentoProgettoPerAreeMonitorate = value; } }
public DataSectionResult getDataSection(List tabelleSessione, string querySql, DataThread dataThread)
{
DataSectionResult dsr = new DataSectionResult();
conv = new FormatNum();
string var = conv.ConvertNum(0, 2);
string copertura = string.Empty;
decimal ctvArea = 0;
DataTable dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
if(dt.Rows.Count==0)
return dsr;
DataSetS82 ds82 = new DataSetS82();
DataSetS82.DatiSintetici_DettaglioRow drDettaglio;
DataSetS82.DT_CoperturaRow drCopertura;
DataSetS82.HeaderRow hRow;
DataSetS82.SeparatoreRow separatore;
DataSetS82.DT_TabellaBassaRow tabBassa;
DataSetS82.HeaderTemporaleRow htemporaleRow;
DataSetS82.DT_OrizTemporaleRow tabOriz;
// Filtro su area/progetto
DataRow rowDatiSintesi = getRowDatiSintesi(dt, dataThread.Area, dataThread.Progetto, _ordinamentoProgettoPerAreeMonitorate);
// Recupero copertura e VaR
copertura = rowDatiSintesi["copertura_needareaString"]==DBNull.Value ? conv.ConvertNum(rowDatiSintesi["copertura_needarea"].ToString()) : rowDatiSintesi["copertura_needarea"].ToString();
var = rowDatiSintesi["var_needareaString"] == DBNull.Value ? conv.ConvertNum(rowDatiSintesi["var_needarea"].ToString()) : rowDatiSintesi["var_needareastring"].ToString();
drDettaglio = ds82.DatiSintetici_Dettaglio.NewDatiSintetici_DettaglioRow();
drDettaglio.Descrizione = "Controvalore";
if (rowDatiSintesi != null)
{
if (rowDatiSintesi["controvaloreAttuale"] != DBNull.Value)
{
drDettaglio.Valore = conv.ConvertNum(rowDatiSintesi["controvaloreAttuale"], 2) + " €";
ctvArea = Convert.ToDecimal(rowDatiSintesi["controvaloreAttuale"]);
}
else
{
drDettaglio.Valore = conv.ConvertNum(0, 2) + " €";
ctvArea = 0;
}
}
ds82.DatiSintetici_Dettaglio.Rows.Add(drDettaglio);
#region Popolo il dataset dati sintetici di grafico
//Header.. Controvalore e Rischio
hRow = ds82.Header.NewHeaderRow();
hRow.Descrizione = "Controvalore e Rischio";
ds82.Header.AddHeaderRow(hRow);
separatore = ds82.Separatore.NewSeparatoreRow();
separatore.Descrizione = "";
ds82.Separatore.AddSeparatoreRow(separatore);
// VAR ATTUALE
drDettaglio = ds82.DatiSintetici_Dettaglio.NewDatiSintetici_DettaglioRow();
drDettaglio.Descrizione = "Rischio Mercato (VaR %)";
if (var.ToLower() == "n.c.")
drDettaglio.Valore = var;
else
drDettaglio.Valore = var + " %";
ds82.DatiSintetici_Dettaglio.Rows.Add(drDettaglio);
//GRADO COPERTURA
drCopertura = ds82.DT_Copertura.NewDT_CoperturaRow();
drCopertura.Descrizione = "Copertura";
drCopertura.Valore = copertura + " %";
if (copertura != "100,00")
ds82.DT_Copertura.Rows.Add(drCopertura);
//Peso PErcentuale ctv
tabBassa = ds82.DT_TabellaBassa.NewDT_TabellaBassaRow();
tabBassa.Descrizione = "Peso percentuale controvalore";
DataView dwPeso = new DataView(dataThread.PesoPercentuale);
dwPeso.RowFilter = " AreaBisogno='" + dataThread.Area + "' and NomeProgetto= '" + dataThread.Progetto.Replace("'", "''") + "'";
DataTable dtPeso = dwPeso.ToTable();
tabBassa.Valore = conv.ConvertNum(Convert.ToDecimal(dtPeso.Rows[0]["PesoPercentuale"])) + " %";
ds82.DT_TabellaBassa.Rows.Add(tabBassa);
//Rischio Relativo
//RischioRelativo rischio = new RischioRelativo();
tabBassa = ds82.DT_TabellaBassa.NewDT_TabellaBassaRow();
tabBassa.Descrizione = "Rischio relativo";
DataView dwRischio = new DataView(dataThread.RischioRelativo);
dwRischio.RowFilter = " AreaBisogno='" + dataThread.Area + "' and NomeProgetto= '" + dataThread.Progetto.Replace("'", "''") + "'";
DataTable dtRischio = dwRischio.ToTable();
tabBassa.Valore = dtRischio.Rows[0]["RischioRelativoString"].ToString().ToLower() == "n.c." ? "n.c." : conv.ConvertNum(Convert.ToDecimal(dtRischio.Rows[0]["RischioRelativo"]), 2) + " %";
ds82.DT_TabellaBassa.Rows.Add(tabBassa);
#endregion
#region Popolo la tabella degli Orizzonti Temporali
//Header.. Controvalore e Rischio
htemporaleRow = ds82.HeaderTemporale.NewHeaderTemporaleRow();
htemporaleRow.Descrizione = "Orizzonte temporale";
ds82.HeaderTemporale.AddHeaderTemporaleRow(htemporaleRow);
//Orizzonte Temporale
tabOriz = ds82.DT_OrizTemporale.NewDT_OrizTemporaleRow();
tabOriz.Descrizione = "Orizzonte pianificato";
if (rowDatiSintesi == null)
tabOriz.Valore = "0 anni";
else
tabOriz.Valore = rowDatiSintesi["Orizzonte_Pianificato"].ToString();
ds82.DT_OrizTemporale.Rows.Add(tabOriz);
//Durata Residua
tabOriz = ds82.DT_OrizTemporale.NewDT_OrizTemporaleRow();
tabOriz.Descrizione = "Durata residua";
if (dt.Rows.Count.Equals(0))
tabOriz.Valore = "0 mesi";
else
tabOriz.Valore = rowDatiSintesi["durataResidua"].ToString();
ds82.DT_OrizTemporale.Rows.Add(tabOriz);
#endregion
dsr.DatiSezione = ds82;
dsr.Esito = ds82.DatiSintetici_Dettaglio.Rows.Count;
return dsr;
}
}