using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Text.RegularExpressions; using Gestor.Model.API; using Gestor.Model.Attributes; using Gestor.Model.Common; using Gestor.Model.Domain.Common; using Gestor.Model.Domain.Generic; using Gestor.Model.Helper; using Gestor.Model.Resources; using Gestor.Model.Validation; using Newtonsoft.Json; namespace Gestor.Model.Domain.Seguros; public class Usuario : EnderecoBase, IDomain { private string _nome; private string _prefixo; private string _telefone; private string _prefixo2; private string _telefone2; private string _email; private string _documento; private string _identidade; private string _estadoEmissor; private string _agencia; private string _conta; private string _login; private bool? _segunda; private bool? _terca; private bool? _quarta; private bool? _quinta; private bool? _sexta; private bool? _sabado; private bool? _domingo; private bool? _dashboard; private TipoTelaInicial? _telaInicial; public long IdEmpresa { get; set; } [Log(true)] public TipoTelaInicial? TelaInicial { get { return _telaInicial.GetValueOrDefault(); } set { _telaInicial = value.GetValueOrDefault(); } } [Log(true)] [Name(true)] public string Nome { get { return _nome; } set { _nome = value; } } public bool Selecionado { get; set; } [Log(true)] [Description("DATA DE NASCIMENTO")] public DateTime? Nascimento { get; set; } [Log(true)] public Sexo Sexo { get; set; } [Log(true)] public string Login { get { return _login?.ToUpper(); } set { _login = value; } } public string SenhaAnterior { get; set; } = string.Empty; public string Senha { get; set; } [Log(true)] [Description("TIPO DO TELEFONE 1")] public TipoTelefone? TipoTelefone { get; set; } [Log(true)] [Description("PREFIXO TELEFONE 1")] public string Prefixo { get { return _prefixo?.ToUpper().Trim(); } set { _prefixo = value; } } [Log(true)] [Description("TELEFONE 1")] public string Telefone { get { return _telefone?.ToUpper().Trim(); } set { _telefone = value; } } [Log(true)] [Description("TIPO DO TELEFONE 2")] public TipoTelefone? TipoTelefone2 { get; set; } [Log(true)] [Description("PREFIXO TELEFONE 2")] public string Prefixo2 { get { return _prefixo2?.ToUpper().Trim(); } set { _prefixo2 = value; } } [Log(true)] [Description("TELEFONE 2")] public string Telefone2 { get { return _telefone2?.ToUpper().Trim(); } set { _telefone2 = value; } } [Log(true)] public string Email { get { return _email?.ToLower().Trim(); } set { _email = value; } } [Log(true)] public string Documento { get { return _documento?.ToUpper().Trim(); } set { _documento = value; } } [Log(true)] public string Identidade { get { return _identidade?.ToUpper().Trim(); } set { _identidade = value; } } [Log(true)] [Description("ESTADO EMISSOR")] public string EstadoEmissor { get { return _estadoEmissor?.ToUpper().Trim(); } set { _estadoEmissor = value; } } [Log(true)] [Description("DATA DE EXPEDIÇÃO")] public DateTime? Expedicao { get; set; } [Log(true)] public Banco Banco { get; set; } [Log(true)] [Description("AGÊNCIA")] public string Agencia { get { return _agencia?.ToUpper().Trim(); } set { _agencia = value; } } [Log(true)] public string Conta { get { return _conta?.ToUpper().Trim(); } set { _conta = value; } } [Log(true)] [Description("ACESSO AO MOBILE")] public bool Mobile { get; set; } [Log(true)] [Description("ACESSO AOS RESULTADOS MOBILE")] public bool Resultados { get; set; } public bool Aggilizador { get; set; } public bool Excluido { get; set; } [Log(true)] [Description("PERMISSÃO ACESSO AGGILIZADOR")] public long? PermissaoAggilizador { get; set; } [Log(true)] public bool Administrador { get; set; } [Description("INÍCIO DO ACESSO")] public DateTime? InicioAcesso { get; set; } [Description("FIM DO ACESSO")] public DateTime? FimAcesso { get; set; } [Log(true)] [Description("ACESSO ÀS SEGUNDAS-FEIRAS")] public bool? Segunda { get { return _segunda; } set { _segunda = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO ÀS TERÇAS-FEIRAS")] public bool? Terca { get { return _terca; } set { _terca = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO ÁS QUARTAS-FEIRAS")] public bool? Quarta { get { return _quarta; } set { _quarta = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO ÁS QUINTAS-FEIRAS")] public bool? Quinta { get { return _quinta; } set { _quinta = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO ÁS SEXTAS-FEIRAS")] public bool? Sexta { get { return _sexta; } set { _sexta = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO AOS SÁBADOS")] public bool? Sabado { get { return _sabado; } set { _sabado = value.GetValueOrDefault(true); } } [Log(true)] [Description("ACESSO AOS DOMINGOS")] public bool? Domingo { get { return _domingo; } set { _domingo = value.GetValueOrDefault(true); } } [Log(true)] public string Cargo { get; set; } public string Visita { get; set; } [Log(true)] [Description("FILTRO INICIAL")] public TipoFiltroCliente? FiltroInicial { get; set; } [Log(true)] [Description("ACESSO AO DASHBOARD")] public bool? Dashboard { get { return _dashboard; } set { _dashboard = value.GetValueOrDefault(true); } } [Log(true)] [Description("PERMISSÃO ADMINISTRADOR CENTRAL SEGURADO")] public bool AdministradorCentralSegurado { get; set; } public string SsoId { get; set; } public string TokenSso { get; set; } [JsonIgnore] public Func>> ValidationEvent => Validate; public UserSso ToUserSso(string serial, string documentoEmpresa, string ssoId = null) { return new UserSso { Id = ssoId, Name = Nome, Username = Login, Password = Senha, Serial = serial, CustomerDocument = documentoEmpresa, IdEmpresa = IdEmpresa, Document = Documento, IsDeleted = false, Email = (Email ?? string.Empty), Phone = ((string.IsNullOrEmpty(Prefixo) || string.IsNullOrEmpty(Telefone)) ? string.Empty : (Prefixo.Clear() + Telefone.Clear())) }; } public List> Validate() { List> list = ValidationHelper.AddValue(); if (Expedicao.HasValue && (DateTime.Compare(Expedicao.Value, new DateTime(1753, 1, 1)) < 0 || DateTime.Compare(Expedicao.Value, new DateTime(9999, 12, 31)) > 0)) { list.AddValue("Expedicao", string.Format(Messages.DataInvalida)); } if (Nascimento.HasValue && (DateTime.Compare(Nascimento.Value, new DateTime(1753, 1, 1)) < 0 || DateTime.Compare(Nascimento.Value, new DateTime(9999, 12, 31)) > 0)) { list.AddValue("Nascimento", string.Format(Messages.DataInvalida)); } if (InicioAcesso.HasValue && FimAcesso.HasValue && InicioAcesso.Value.TimeOfDay > FimAcesso.Value.TimeOfDay) { list.AddValue("FimAcesso|FIM DO ACESSO", "O HORÁRIO DO FIM DO ACESSO NÃO PODE SER ANTERIOR AO HORÁRIO DO INICIO DO ACESSO"); } if (string.IsNullOrEmpty(Nome)) { list.AddValue("Nome", Messages.Obrigatorio); } else if (Nome.Length > 50) { list.AddValue("Nome", string.Format(Messages.MaiorQueLimite, 50)); } if (!string.IsNullOrEmpty(Documento) && !Documento.ValidacaoDocumento()) { list.AddValue("Documento", Messages.Invalido); } if (string.IsNullOrEmpty(Login)) { list.AddValue("Login", Messages.Obrigatorio); } else if (Login.Length > 30) { list.AddValue("Login", string.Format(Messages.MaiorQueLimite, 30)); } if (!string.IsNullOrEmpty(Login) && !Regex.IsMatch(Login, "^(?!.* {2})[a-zA-Z0-9](?:[a-zA-Z0-9 .]{0,49}[a-zA-Z0-9])?$")) { list.AddValue("Login|USUARIO", "USUARIO INVALIDO,\nUSUARIO SOMENTE DEVE CONTER LETRAS E NUMEROS,\nNÃO DEVE CONTER MAIS DE UM ESPAÇO,\nNÃO DEVE TER ESPAÇO NO INICIO E NO FIM.\nEXEMPLO VALIDO:\nUSUARIO01 OU USUARIO 02 OU USUARIO.03"); } if (string.IsNullOrEmpty(Senha)) { list.AddValue("Senha", Messages.Obrigatorio); } if (string.IsNullOrEmpty(Email)) { list.AddValue("Email", Messages.Obrigatorio); } if (!string.IsNullOrEmpty(EstadoEmissor) && !EstadoEmissor.ValidacaoEstado()) { list.AddValue("EstadoEmissor", Messages.Invalido); } if (Expedicao.HasValue && !Expedicao.ValidacaoDataPassada()) { list.AddValue("Expedicao", Messages.Invalido); } if (Nascimento.HasValue && !Nascimento.ValidacaoDataPassada()) { list.AddValue("Nascimento", Messages.Invalido); } if (!string.IsNullOrEmpty(base.Cep) && !base.Cep.ValidacaoCep()) { list.AddValue("Cep", Messages.Invalido); } if (!string.IsNullOrEmpty(base.Endereco) && base.Endereco.Length > 60) { list.AddValue("Endereco", string.Format(Messages.MaiorQueLimite, 60)); } if (!string.IsNullOrEmpty(base.Numero) && base.Numero.Length > 5) { list.AddValue("Numero", string.Format(Messages.MaiorQueLimite, 5)); } if (!string.IsNullOrEmpty(base.Bairro) && base.Bairro.Length > 60) { list.AddValue("Bairro", string.Format(Messages.MaiorQueLimite, 60)); } if (!string.IsNullOrEmpty(base.Cidade) && base.Cidade.Length > 30) { list.AddValue("Cidade", string.Format(Messages.MaiorQueLimite, 30)); } if (!string.IsNullOrEmpty(base.Estado) && !base.Estado.ValidacaoEstado()) { list.AddValue("Estado", Messages.Invalido); } if (!string.IsNullOrEmpty(base.Cep) || !string.IsNullOrEmpty(base.Numero) || !string.IsNullOrEmpty(base.Complemento) || !string.IsNullOrEmpty(base.Endereco) || !string.IsNullOrEmpty(base.Bairro) || !string.IsNullOrEmpty(base.Cidade) || !string.IsNullOrEmpty(base.Estado)) { if (string.IsNullOrEmpty(base.Cep)) { list.AddValue("Cep", Messages.Obrigatorio); } if (string.IsNullOrEmpty(base.Endereco)) { list.AddValue("Endereco", Messages.Obrigatorio); } if (string.IsNullOrEmpty(base.Numero)) { list.AddValue("Numero", Messages.Obrigatorio); } if (string.IsNullOrEmpty(base.Bairro)) { list.AddValue("Bairro", Messages.Obrigatorio); } if (string.IsNullOrEmpty(base.Cidade)) { list.AddValue("Cidade", Messages.Obrigatorio); } if (string.IsNullOrEmpty(base.Estado)) { list.AddValue("Estado", Messages.Obrigatorio); } } if (AdministradorCentralSegurado && string.IsNullOrEmpty(Documento)) { list.AddValue("Documento", Messages.Obrigatorio); } if (AdministradorCentralSegurado && string.IsNullOrEmpty(Prefixo)) { list.AddValue("Prefixo", Messages.Obrigatorio); } if (AdministradorCentralSegurado && string.IsNullOrEmpty(Telefone)) { list.AddValue("Telefone", Messages.Obrigatorio); } if (AdministradorCentralSegurado && string.IsNullOrEmpty(Email)) { list.AddValue("Email", Messages.Obrigatorio); } if (InicioAcesso.HasValue && FimAcesso.HasValue && FimAcesso.Value.TimeOfDay == InicioAcesso.Value.TimeOfDay) { list.AddValue("InicioAcesso", Messages.Invalido); list.AddValue("FimAcesso", Messages.Invalido); } if (Documento == null || string.IsNullOrEmpty(Documento)) { list.AddValue("Documento", Messages.Obrigatorio); } return list; } public List Log() { return new List { new TupleList { Tuples = new ObservableCollection> { new Tuple("NOME", string.IsNullOrWhiteSpace(Nome) ? "" : Nome, ""), new Tuple("CPF/CNPJ", string.IsNullOrWhiteSpace(Documento) ? "" : Documento, ""), new Tuple("USUÁRIO", string.IsNullOrWhiteSpace(Login) ? "" : Login, ""), new Tuple("IDENTIDADE", string.IsNullOrWhiteSpace(Identidade) ? "" : Identidade, ""), new Tuple("ESTADO EMISSOR", string.IsNullOrWhiteSpace(EstadoEmissor) ? "" : EstadoEmissor, ""), new Tuple("DATA DE EXPEDIÇÃO", (!Expedicao.HasValue) ? "" : Expedicao?.ToShortDateString(), ""), new Tuple("SEXO", Sexo.GetDescription(), ""), new Tuple("DATA DE NASCIMENTO", (!Nascimento.HasValue) ? "" : Nascimento?.ToShortDateString(), ""), new Tuple("BANCO", (Banco == null) ? "" : Banco?.Nome, ""), new Tuple("AGÊNCIA", string.IsNullOrWhiteSpace(Agencia) ? "" : Agencia, ""), new Tuple("CONTA", string.IsNullOrWhiteSpace(Conta) ? "" : Conta, ""), new Tuple("ENDEREÇO", string.IsNullOrWhiteSpace(base.Endereco) ? "" : base.Endereco, ""), new Tuple("NÚMERO", string.IsNullOrWhiteSpace(base.Numero) ? "" : base.Numero, ""), new Tuple("COMPLEMENTO", string.IsNullOrWhiteSpace(base.Complemento) ? "" : base.Complemento, ""), new Tuple("BAIRRO", string.IsNullOrWhiteSpace(base.Bairro) ? "" : base.Bairro, ""), new Tuple("CIDADE", string.IsNullOrWhiteSpace(base.Cidade) ? "" : base.Cidade, ""), new Tuple("ESTADO", string.IsNullOrWhiteSpace(base.Estado) ? "" : base.Estado, ""), new Tuple("CEP", string.IsNullOrWhiteSpace(base.Cep) ? "" : base.Cep, ""), new Tuple("TIPO TELEFONE", (!TipoTelefone.HasValue) ? "" : TipoTelefone.GetDescription(), ""), new Tuple("PRIMEIRO PREFIXO", string.IsNullOrWhiteSpace(Prefixo) ? "" : Prefixo, ""), new Tuple("PRIMEIRO TELEFONE", string.IsNullOrWhiteSpace(Telefone) ? "" : Telefone, ""), new Tuple("TIPO TELEFONE", (!TipoTelefone2.HasValue) ? "" : TipoTelefone2.GetDescription(), ""), new Tuple("SEGUNDO PREFIXO", string.IsNullOrWhiteSpace(Prefixo2) ? "" : Prefixo2, ""), new Tuple("SEGUNDO TELEFONE", string.IsNullOrWhiteSpace(Telefone2) ? "" : Telefone2, ""), new Tuple("EMAIL", string.IsNullOrWhiteSpace(Email) ? "" : Email, ""), new Tuple("ACESSO MOBILE", Mobile ? "SIM" : "NÃO", ""), new Tuple("ACESSO RESULTADOS", Resultados ? "SIM" : "NÃO", ""), new Tuple("ACESSO INDIVIDUAL AGGILIZADOR", Aggilizador ? "SIM" : "NÃO", ""), new Tuple("INÍCIO DO ACESSO", (!InicioAcesso.HasValue) ? "" : InicioAcesso?.ToShortTimeString(), ""), new Tuple("FIM DO ACESSO", (!FimAcesso.HasValue) ? "" : FimAcesso?.ToShortTimeString(), ""), new Tuple("ADMINISTRADOR CENTRAL SEGURADO", AdministradorCentralSegurado ? "SIM" : "NÃO", "") } } }; } }