Exemplo n.º 1
0
        public void Armazenar(FuncionarioDto dto)
        {
            if (!CpfHelper.Valido(dto.Cpf))
            {
                _notificationContext.AddNotification(TipoDeNotificacao.ErroDeServico, "CPF inválido");
                return;
            }

            dto.Cpf = CpfHelper.RemoveMascara(dto.Cpf);

            Funcionario funcionario;

            if (dto.Id == 0)
            {
                funcionario = FuncionarioBuilder.Novo()
                              .ComNome(dto.Nome)
                              .ComCpf(dto.Cpf)
                              .ComDataContratacao(dto.DataContratacao)
                              .Build();
            }
            else
            {
                funcionario = _funcionarioRepositorio.ObterPorId(dto.Id);
                if (funcionario == null)
                {
                    _notificationContext.AddNotification(TipoDeNotificacao.ErroDeServico, "Funcionario não encontrado");
                    return;
                }

                List <Funcionario> funcionarios = _funcionarioRepositorio.ObterPorFiltro(string.Empty, dto.Cpf, null);

                if (funcionarios.Count > 0 && funcionarios.Any(x => x.Id != funcionario.Id))
                {
                    _notificationContext.AddNotification(TipoDeNotificacao.ErroDeServico, "CPF utilizado");
                    return;
                }

                funcionario.Nome            = dto.Nome;
                funcionario.Cpf             = dto.Cpf;
                funcionario.DataContratacao = dto.DataContratacao;
                funcionario.CargoId         = dto.CargoId;
                funcionario.EmpresaId       = dto.EmpresaId;

                _funcionarioRepositorio.Put(funcionario);
            }

            if (!funcionario.Validar())
            {
                _notificationContext.AddNotification(TipoDeNotificacao.ErroDeServico, "Funcionario inválido");
                return;
            }

            if (dto.Id == 0)
            {
                List <Funcionario> funcionarios = _funcionarioRepositorio.ObterPorFiltro(string.Empty, dto.Cpf, null);

                if (funcionarios.Count > 0)
                {
                    _notificationContext.AddNotification(TipoDeNotificacao.ErroDeServico, "CPF utilizado");
                    return;
                }

                _funcionarioRepositorio.Post(funcionario);
            }
        }