using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
namespace PDFGenerator.BusinessLayer.DataSection
{
class DSS86MacroAssetClass : IDataSection
{
private bool _hasselectedpatrimnonrap = true;
///
/// Filtro il datatable comprensivo di tutte le aree/progetto per il solo area/progetto corrente.
///
///
///
///
///
private DataRow[] getRowMacroAsset(DataTable dt, string area, string nomeprogetto, Int32? ordinamento)
{
try
{
DataRow[] rowArray = null;
if (dt != null)
{
if (dt.Rows.Count > 0)
{
if (area.ToUpper() == "INV")
{
// Progetti
if(ordinamento == null)
rowArray = dt.Select(" nome_progetto = '" + nomeprogetto.Replace("'", "''") + "' and NEED_AREA = '" + area.Replace("'", "''") + "'");
else
rowArray = dt.Select(" ord_progetto = " + ordinamento.ToString() + " and nome_progetto = '" + nomeprogetto.Replace("'", "''") + "' and NEED_AREA = '" + area.Replace("'", "''") + "'");
}
else
{
// no progetti
rowArray = dt.Select(" NEED_AREA = '" + area.Replace("'", "''") + "'");
}
}
}
return rowArray;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// Ritorna il patrimonio non rappresentabile per area/progetto
///
///
///
///
///
private Decimal getPatrimonioNonRappresentabile(DataTable DatatablePatrimonioNonRappresentabile, string area, string nomeprogetto, Int32? ordinamento)
{
try
{
decimal patNonRapp = 0;
DataRow[] rowArray = null;
if (DatatablePatrimonioNonRappresentabile != null)
if (DatatablePatrimonioNonRappresentabile.Rows.Count > 0)
{
if (area.ToUpper() == "INV")
{
// Progetti
if(ordinamento == null)
rowArray = DatatablePatrimonioNonRappresentabile.Select(" progetto = '" + nomeprogetto.Replace("'", "''") + "' and needarea = '" + area.Replace("'", "''") + "'");
else
rowArray = DatatablePatrimonioNonRappresentabile.Select(" ord_progetto = " + ordinamento.ToString() + " and progetto = '" + nomeprogetto.Replace("'", "''") + "' and needarea = '" + area.Replace("'", "''") + "'");
}
else
{
// no progetti
rowArray = DatatablePatrimonioNonRappresentabile.Select(" needarea = '" + area.Replace("'", "''") + "'");
}
}
if ((rowArray != null) && (rowArray.Length > 0))
{
foreach (DataRow dr in rowArray)
{
if (dr["controvalore"] != DBNull.Value)
patNonRapp += (decimal)dr["controvalore"];
}
}
return patNonRapp;
}
catch (Exception ex)
{
throw ex;
}
}
private Int32? _ordinamentoProgettoPerAreeMonitorate;
public Int32? OrdinamentoProgettoPerAreeMonitorate { set { _ordinamentoProgettoPerAreeMonitorate = value; } }
public StructColor toBeFound = new StructColor();
///
/// Imposta o recupera la selezione dell'utente della stampa del patrimonio non rappresentabile.
/// Nel modello corrente che si stampa per il report di monitoraggio questa selezione è sempre richesta.
/// Di default true.
///
public bool HasSelectedPatrimNonRap
{
set { _hasselectedpatrimnonrap = value; }
get { return _hasselectedpatrimnonrap; }
}
///
/// Recupero i dati per la S86
///
///
///
///
///
public DataSectionResult getDataSection(List tabelleSessione, string querySql, DataThread dataThread)
{
try
{
DataTable dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
Decimal ctvTotale = 0; // controvalore totale preso come somma di tutti i controvalori presi dalla strored della S86.
DataSectionResult dsr = new DataSectionResult();
#region Recupero il Patrimonio non rappresentabile
DataTable datatablePatrimonioNonRappresentabile = new DataTable();
datatablePatrimonioNonRappresentabile = SectionManager.GetDataSection(tabelleSessione, "[C6MartPeriodico].[PL_S76AlternativaPatrimonioNonRappresentabileAssettClass]", dataThread);
Decimal patrimonioNonRappresentabile = getPatrimonioNonRappresentabile(datatablePatrimonioNonRappresentabile, dataThread.Area, dataThread.Progetto, _ordinamentoProgettoPerAreeMonitorate);
#endregion
toBeFound.Tipo = "MacroAssetClass";
DataSetS86 ds86 = new DataSetS86();
DataSetS86.MacroAssetClassRow drMacroAsset;
ds86.MacroAssetClass.ControvaloreColumn.Caption = "Controvalore
(€) ";
#region Filtro per area/progetto
DataRow[] MacroAssetClassRows = getRowMacroAsset(dt, dataThread.Area, dataThread.Progetto, _ordinamentoProgettoPerAreeMonitorate);
#endregion
if (MacroAssetClassRows != null)
{
if (MacroAssetClassRows.Length > 0)
{
//V
DataSetS86.MacroAssetClassRow tuplaMaggiore = null;
decimal valoreCTV_tuplaMaggiore = 0;
decimal residuoPercentuale = 100;
//
foreach (DataRow dr in MacroAssetClassRows)
{
drMacroAsset = ds86.MacroAssetClass.NewMacroAssetClassRow();
drMacroAsset.Descrizione = dr["assetclassname"].ToString();
drMacroAsset.Controvalore = (decimal)dr["controvalore"];
//V
if (drMacroAsset.Controvalore > valoreCTV_tuplaMaggiore)
{
valoreCTV_tuplaMaggiore = drMacroAsset.Controvalore;
tuplaMaggiore = drMacroAsset;
}
//
drMacroAsset.Percentuale = (decimal)dr["percentuale"];
residuoPercentuale -= drMacroAsset.Percentuale;
toBeFound.Codice = dr["AssetClassId"].ToString();
int foundIdx = ClsFunzioniGeneriche.findRightColors(toBeFound);
drMacroAsset.Red = ClsFunzioniGeneriche.Colors[foundIdx].Red;
drMacroAsset.Green = ClsFunzioniGeneriche.Colors[foundIdx].Green;
drMacroAsset.Blue = ClsFunzioniGeneriche.Colors[foundIdx].Blue;
ctvTotale += (Decimal)dr["controvalore"];
ds86.MacroAssetClass.Rows.Add(drMacroAsset);
}
//V
//Riallineamento della percentuale a 100
if (residuoPercentuale != 0 && tuplaMaggiore != null)
{
tuplaMaggiore.Percentuale += residuoPercentuale;
}
decimal temp = 0;
#region Allineamento del controvalore totale con il dataThread.ControvaloriTotali
DataView dwCTV = new DataView(dataThread.ControvaloriTotali);
dwCTV.RowFilter = " ORDINAMENTO_PROGETTO=" + _ordinamentoProgettoPerAreeMonitorate + " and AreaBisogno='" + dataThread.Area + "' and NomeProgetto= '" + dataThread.Progetto.Replace("'", "''") + "'";
DataTable CTV = dwCTV.ToTable();
decimal controvaloreTotale = Convert.ToDecimal(CTV.Rows[0]["ControvaloreTotale"]) - patrimonioNonRappresentabile; // va sottratto il patrimonioNonRappresentabile perche nel totale che allinea tutti gli altri (dataThread.ControvaloriTotali) è già compreso.
temp = controvaloreTotale - ctvTotale;
#endregion
ctvTotale += temp;
if(ctvTotale == 0)
throw new Exception("ERRORE S86 - Controvalore totale = 0");
//if (temp > 2) //2 la soglia pattuita con Magri massima di approssimazione
// throw new Exception("ERRORE S86 - La soglia di approssimazione è maggiore di 2E.");
tuplaMaggiore.Controvalore += temp;
if(tuplaMaggiore.Controvalore < 0)
throw new Exception("ERRORE S86- Assett Negativa");
#region Riga del patrimonio non rappresentabile
if (patrimonioNonRappresentabile > 0)
{
DataSetS86.PatrimonioNonRappresentabileRow drPatrimonioNonRappresentabile;
drPatrimonioNonRappresentabile = ds86.PatrimonioNonRappresentabile.NewPatrimonioNonRappresentabileRow();
if (_hasselectedpatrimnonrap)
drPatrimonioNonRappresentabile.Descrizione = Resource.PatrimonioNonRappresentabile_label;
else
drPatrimonioNonRappresentabile.Descrizione = Resource.PatrimonioNonRappresentabile_label_NoNota;
drPatrimonioNonRappresentabile.ControValore = patrimonioNonRappresentabile;
ds86.PatrimonioNonRappresentabile.Rows.Add(drPatrimonioNonRappresentabile);
}
#endregion
#region Riga del Totale
DataSetS86.MacroAssetTotaleRow drTot = ds86.MacroAssetTotale.NewMacroAssetTotaleRow();
if (patrimonioNonRappresentabile > 0)
drTot.Totale = Resource.DSS86MacroAssetClass_Totale;
else
drTot.Totale = Resource.Totale;
drTot.Controvalore = ctvTotale;
drTot.Percentuale = 100.00M;
ds86.MacroAssetTotale.Rows.Add(drTot);
if (patrimonioNonRappresentabile > 0)
{
DataSetS86.TotaleRow drTotale;
drTotale = ds86.Totale.NewTotaleRow();
drTotale.Descrizione = Resource.Totale;
drTotale.ControValore = (ctvTotale + patrimonioNonRappresentabile);
if (patrimonioNonRappresentabile > 0)
ds86.Totale.Rows.Add(drTotale);
}
#endregion
}
}
dsr.DatiSezione = ds86;
dsr.Esito = ds86.MacroAssetClass.Rows.Count;
return dsr;
}
catch (Exception ex)
{
throw ex;
}
}
}
}