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