108 lines
3.8 KiB
C#

using Consulenza.DataServices.fideuram.data.service;
using System.Linq;
namespace Consulenza.ReportWriter.Business
{
/// <summary>
/// Classe utilizzata per determinare il tipo di profilo (professionale, retail) di un Cliente o di un Nucleo e il grado di aggressività.
/// </summary>
public class Profiler
{
/// <summary>
/// Imposta o recupera l'informazione se il Cliente ha un profilo professionale.
/// </summary>
public bool ProfiloProfessionale { get; set; }
/// <summary>
/// Imposta o recupera l'informazione se il Cliente ha un profilo aggressivo.
/// </summary>
public bool ProfiloAggressivo { get; set; }
/// <summary>
/// Imposta o recupera l'informazione se il Cliente ha un profilo professionale aggressivo.
/// </summary>
public bool ProfiloProfessionaleAggressivo { get; set; }
private rsAnagraficaNucleo _rsAnagraficaNucleo;
private rsClienteAnagrafica _rsClienteAnagrafica;
private enum TipoReport { cliente, nucleo };
private TipoReport _tipo;
/// <summary>
/// Costruttore
/// </summary>
public Profiler()
{
}
/// <summary>
/// Costruttore
/// </summary>
/// <param name="rsAnagraficaNucleo">rsAnagraficaNucleo Anagrafica Nucleo</param>
public Profiler(rsAnagraficaNucleo rsAnagraficaNucleo)
{
_rsAnagraficaNucleo = rsAnagraficaNucleo;
_tipo = TipoReport.nucleo;
SetProfilo();
}
/// <summary>
/// Costruttore
/// </summary>
/// <param name="rsClienteAnagrafica">rsClienteAnagrafica Anagrafica Cliente</param>
public Profiler(rsClienteAnagrafica rsClienteAnagrafica)
{
_rsClienteAnagrafica = rsClienteAnagrafica;
_tipo = TipoReport.cliente;
SetProfilo();
}
/// <summary>
/// Imposta il profilo
/// </summary>
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;
}
}
}