using Consulenza.DataServices.fideuram.data.service;
using System.Linq;
namespace Consulenza.ReportWriter.Business
{
///
/// Classe utilizzata per determinare il tipo di profilo (professionale, retail) di un Cliente o di un Nucleo e il grado di aggressività.
///
public class Profiler
{
///
/// Imposta o recupera l'informazione se il Cliente ha un profilo professionale.
///
public bool ProfiloProfessionale { get; set; }
///
/// Imposta o recupera l'informazione se il Cliente ha un profilo aggressivo.
///
public bool ProfiloAggressivo { get; set; }
///
/// Imposta o recupera l'informazione se il Cliente ha un profilo professionale aggressivo.
///
public bool ProfiloProfessionaleAggressivo { get; set; }
private rsAnagraficaNucleo _rsAnagraficaNucleo;
private rsClienteAnagrafica _rsClienteAnagrafica;
private enum TipoReport { cliente, nucleo };
private TipoReport _tipo;
///
/// Costruttore
///
public Profiler()
{
}
///
/// Costruttore
///
/// rsAnagraficaNucleo Anagrafica Nucleo
public Profiler(rsAnagraficaNucleo rsAnagraficaNucleo)
{
_rsAnagraficaNucleo = rsAnagraficaNucleo;
_tipo = TipoReport.nucleo;
SetProfilo();
}
///
/// Costruttore
///
/// rsClienteAnagrafica Anagrafica Cliente
public Profiler(rsClienteAnagrafica rsClienteAnagrafica)
{
_rsClienteAnagrafica = rsClienteAnagrafica;
_tipo = TipoReport.cliente;
SetProfilo();
}
///
/// Imposta il profilo
///
private void SetProfilo()
{
if (_tipo == TipoReport.nucleo)
{
ProfiloProfessionale = isNucleoProfessionale(_rsAnagraficaNucleo.listaClientiNucleo);
ProfiloAggressivo = isNucleoAggressivo(_rsAnagraficaNucleo.listaClientiNucleo);
}
else
{
//ProfiloProfessionale = _rsClienteAnagrafica.idTipoCliente == 1 ? true: false;
//a regime vanno letti da datiSeiUnico...
ProfiloProfessionale = _rsClienteAnagrafica.clienteProfile.clienteProfessionale;
ProfiloAggressivo = _rsClienteAnagrafica.codProfilo >= 5 ? true : false;
}
// indica che il cliente è professionale con profilo aggressivo (le modifiche sui valori di rischio etc si applicano su questa tipologia)
ProfiloProfessionaleAggressivo = ProfiloProfessionale && ProfiloAggressivo;
}
private bool isNucleoProfessionale(rsAnagraficaClienteNucleo[] listaClientiNucleo)
{
//In attesa di un valore indicativo sulla categoria Cliente
if (listaClientiNucleo.Where(x => x.tipoConsulenza != "P").ToList().Count() > 0)
return false;
else
return true;
//if (listaClientiNucleo.Where(x => x.clienteProfessionale == false).ToList().Count() > 0)
// return false;
//else
// return true;
}
//--Adriano
//Adriano: serve per determinare se tutti i clienti appartenenti al nucleo hanno un profilo aggressivo (codProfilo >=5)
private bool isNucleoAggressivo(rsAnagraficaClienteNucleo[] listaClientiNucleo)
{
if (listaClientiNucleo.Min(c => c.codProfilo) >= 5)
return true;
else
return false;
}
}
}