예제 #1
0
        public AdicionarUmaPessoaResposta AdicionarUmaPessoa(AdicionarUmaPessoaRequisicao requisicao, int codPrograma)
        {
            var resposta = new AdicionarUmaPessoaResposta();

            try
            {
                var departamento = _departamentoRepositorio.ObterPor(requisicao.CodigoDoDepartamento);
                var perfil       = _perfilRepositorio.ObterPor(requisicao.CodigoDoPerfil);
                var senha        = GeradorDeSenhas.Gerar(GeradorDeSenhas.RandomType.Alphanumeric, 8);


                var novoUsuario           = new Usuario(requisicao.NomeDeUsuario, senha, perfil);
                var existeEmailCadastrado = _pessoaRepositorio.ObterPeloNomeDeUsuario(requisicao.NomeDeUsuario);
                if (existeEmailCadastrado != null)
                {
                    novoUsuario.RegraQuebrada(RegrasDeNegocioPessoa.EmailJaExiste);
                }
                novoUsuario.AlterarSenha(Crypto.HashPassword(senha));

                var programas = requisicao.CodigosDosProgramas.Select(codigoDoPrograma => _programaRepositorio.ObterPor(codigoDoPrograma)).ToList();

                //perfil.Grupo.Codigo

                if (perfil.Grupo.Codigo == 1)
                {
                    departamento = _departamentoRepositorio.ObterPor(1);
                    var cargo = _cargoRepositorio.ObterPor(1);
                    _funcionarioServico.AdicionarUmNovoFuncionario(requisicao.Nome, requisicao.Telefone,
                                                                   novoUsuario, departamento, cargo, programas, requisicao.Descricao);
                }
                else
                {
                    var cliente = _clienteServico.AdicionarUmNovoCliente(requisicao.Nome, requisicao.Telefone,
                                                                         requisicao.Inativo, novoUsuario, programas);

                    var tipoDoCrm = _tipoDeCrmRepositorio.ObterPor(requisicao.CodigoDoTipoDeCrm);
                    if (tipoDoCrm != null)
                    {
                        var crm = new CRM(requisicao.NumeroDoCrm, tipoDoCrm, requisicao.NomeDoCrm);
                        cliente.InformarCrm(crm);
                    }
                }
                foreach (var programa in programas)
                {
                    EnviarEmailParaNovoUsarioDoPrograma(programa.Codigo, novoUsuario, senha);
                    break;
                }

                _unitOfWork.Commit();
                resposta.Sucesso = true;
            }
            catch (RegraException regraDeNegocio)
            {
                resposta.Erros = regraDeNegocio.Erros.ToList();
            }

            return(resposta);
        }