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;
        }
        private AdicionarUmaPessoaResposta AdicionarPessoa(AdicionarUsuarioViewModel novoUsuarioModel)
        {
            var novoUsuarioRequisicao = new AdicionarUmaPessoaRequisicao
                                            {
                                                CodigoDoPerfil = novoUsuarioModel.PerfilSelecionado,
                                                NomeDeUsuario = novoUsuarioModel.NomeDeUsuario,
                                                CodigoDoGrupo = novoUsuarioModel.GrupoSelecionado,
                                                CodigoDoTipoDeCrm = novoUsuarioModel.TipoDeCrmSelecionado,
                                                NumeroDoCrm = novoUsuarioModel.NumeroDoCrm,
                                                CodigoDoDepartamento = novoUsuarioModel.CodigoDoDepartamento,
                                                CodigoDoCargo = novoUsuarioModel.CodigoDoCargo,
                                                Nome = novoUsuarioModel.Nome,
                                                Telefone = novoUsuarioModel.Telefone,
                                                Inativo = novoUsuarioModel.Status,
                                                Descricao = novoUsuarioModel.DescricaoDoCargo,
                                                CodigosDosProgramas = novoUsuarioModel.CodigosDosProgramas,
                                                NomeDoCrm = novoUsuarioModel.NomeDoCrm
                                            };

            var resposta = _pessoaServicoDeAplicacao.AdicionarUmaPessoa(novoUsuarioRequisicao, Session.ProgramaAtivo().CodPrograma);
            return resposta;
        }