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; } } }