using Consulenza.DataServices.fideuram.data.service;
using System.Configuration;
using System;
using System.Data;
using System.Collections.Generic;
namespace Consulenza.DataServices
{
///
/// Classe astratta da cui erediteranno tutte le classi di Consulenza.DataServices.
/// Contiene tutti gli oggetti necessari per la chiamata al servizio dati (fideuram.data.service).
///
public abstract class FideuramData
{
private ReportManagerService _dataservice;
private const string ClassName = "FideuramData";
///
/// Recupera il servizio attraverso cui recuperare i dati.
///
public ReportManagerService DataService { get { return _dataservice ?? (_dataservice = GetDataService()); } }
///
/// Recupera il servizio dati.
///
///
private static ReportManagerService GetDataService()
{
return new ReportManagerService
{
Url = ConfigurationManager.AppSettings["UrlFideuramDati"],
UseDefaultCredentials = true,
Timeout = Convert.ToInt32(ConfigurationManager.AppSettings["TimeoutFideuramDati"]) * 1000
};
}
private uidConsulenza _userIdConsulenza;
///
/// La chiave con cui accedere al servizio dati.
///
public uidConsulenza UserIdConsulenza { get { return _userIdConsulenza ?? (_userIdConsulenza = GetUserIdConsulenza()); } }
///
/// Recupera la UserIdConsulenza. La chiave con cui accedere al servizio dati.
///
///
private uidConsulenza GetUserIdConsulenza()
{
var keyForCache = GetKeyForCache(ClassName, "GetUserIdConsulenza");
uidConsulenza uidConsulenza;
//if (CacheStore.Exists(keyForCache))
//{
// // Rileggo dalla cache
// uidConsulenza = CacheStore.Get(keyForCache);
//}
//else
//{
DataTable dtCliente;
try
{
dtCliente = DataAccess.ExecuteDataTableStoredProcedure(
DBProvider.SqlServerConsulenzaUnica,
"REP_INFOCLIENTEPB",
new List { new Parametro
{
Direction = ParameterDirection.Input,
DbType = DbType.Int64,
ParameterName = "chiaveClientePb",
Value = ChiaveClientePb
}});
if (dtCliente.Rows.Count <= 0)
throw new Exception("Consulenza.DataServices.GetUserIdConsulenza: Cliente non trovato");
}
catch (Exception ex)
{
throw new Exception("Consulenza.DataServices.GetUserIdConsulenza:" + ex.Message);
}
uidConsulenza = new uidConsulenza
{
codiceAgente = dtCliente.Rows[0]["CodAge"].ToString().ToUpper(),
codiceFiscale = dtCliente.Rows[0]["CodFis"].ToString().ToUpper(),
codiceRete = dtCliente.Rows[0]["Rete"].ToString().ToUpper(),
codiceMandato = dtCliente.Rows[0]["CodMan"].ToString().ToUpper()
};
// Memorizzo in chache
// CacheStore.Add(keyForCache, uidConsulenza);
//}
return uidConsulenza;
}
///
/// Imposta o recupera la ChiaveClientePb.
///
public Int64 ChiaveClientePb { get; set; }
///
/// Recupera la chiave di memorizzazione in cache.
///
/// nome della classe
/// nome del metodo
///
public string GetKeyForCache(string className, string methodName)
{
return string.Format("{0}.{1}_{2}", className, methodName, ChiaveClientePb);
}
///
/// Esegue la request passata in input restituendo un oggetto di response popolato con la stessa struttura di input.
///
/// oggetto request
///
public rsReportManager Execute(rqData requestdata)
{
throw new Exception("class FideuramData Deprecated");
try
{
var data = DataService.reportManagerWS(new rqReportManager
{
chiaveClientePB = UserIdConsulenza,
requestData = requestdata
});
if (data.info.elencoErrori.Length > 0)
throw new Exception(string.Format("Consulenza.DataServices.Execute: {0}-{1}-{2}", data.info.elencoErrori[0].tipoErrore, data.info.elencoErrori[0].codiceErrore, data.info.elencoErrori[0].messaggio));
return data;
}
catch (Exception ex)
{
throw new Exception("Consulenza.DataServices.Execute: " + ex.Message);
}
}
}
///
/// Interfaccia
///
public interface IFideuramData
{
decimal GetTotale(TipoTotaleOutput output);
//List GetListaProdotti();
rsComposizione GetDistribuzioneAssetClass();
rsComposizione GetDistribuzioneMacroAssetClass();
rsComposizione GetDistribuzioneCategoriaProdotto();
rsComposizione GetDistribuzioneMacroCategoriaProdotto();
}
///
/// Enumeratore del tipo di totale in output
///
public enum TipoTotaleOutput
{
NonSpecificato, // Totale non specificato
RisorseFinanziarie, // Richiesto il totale delle sole Risorse Finanziarie
Complessivo, // Richiesto il totale compessivo
ContiCorrentiPositivi, // Totale dei conticorrenti positivi
ContiCorrentiNegativi, // Totale dei conticorrenti negativi
ContiCorrentiComplessivi, // Totale dei conticorrenti (somma tra positivi e negativi)
EligoFondiNegativi, //Totale eligo fondi negativi
EligoTitoliNegativi, //Totale eligo titoli negativi
EligoComplessivi, // Totale delgi Eligo(linea Self) (somma tra EligoFondiNegativi e EligoTitoliNegativi)
OperazioniInCorso, // Totale delle operazioni in corso (partite viaggianti)
ProdottiNonRappresentabili_MacroAssetClass, //Totale dei prodotti non rappresentabili per Macro Asset Class
}
///
/// Enumerato della tipologia di non rappresentabilità del prodotto.
///
public enum TipoNonRappresentabilitaProdotto
{
AssetClass, //Prodotto non rappresentabile in termini di AssetClass
EsposizioneValutaria, //Prodotto non rappresentabile in termini di Esposizione Valutaria
CalcoloRendimenti, // Prodotto non rappresentabile in termine di Calcolo dei Rendimenti
NonCopertoRischioCredito // Prodotto non rappresentabile in termine di Rischio di Credito
}
}