public void CandidatoRepository_CrearCandidato_ShouldCreate() { using (SportsGoEntities context = new SportsGoEntities(false)) using (DbContextTransaction dbContextTransaction = context.Database.BeginTransaction()) { CandidatosRepository candidatoRepository = new CandidatosRepository(context); Candidatos candidatoParaCrear = new Candidatos { CodigoPersona = 8, CodigoGenero = 2, Estatura = 170, Peso = 60, Biografia = "Yo ser Niño MVC Angular y no leer comentarios", FechaNacimiento = new DateTime(1995, 11, 9) }; candidatoRepository.CrearCandidato(candidatoParaCrear); //Assert.IsNotNull(wrapperCrearCandidato); //Assert.IsTrue(wrapperCrearCandidato.Exitoso); //Assert.AreNotEqual(wrapperCrearCandidato.NumeroRegistrosAfectados, 0); } }
public async Task <WrapperSimpleTypesDTO> CrearCandidato(Candidatos candidatoParaCrear, string urlLogo, string urlBanner) { using (SportsGoEntities context = new SportsGoEntities(false)) { PlanesRepository planRepo = new PlanesRepository(context); int?codigoPlanDefault = await planRepo.BuscarCodigoPlanDefault(TipoPerfil.Candidato); if (!codigoPlanDefault.HasValue) { throw new InvalidOperationException("No existe un plan default para los candidatos!."); } PlanesUsuarios planUsuarioDefault = new PlanesUsuarios { CodigoPlan = codigoPlanDefault.Value, Adquisicion = DateTime.Now, Vencimiento = DateTime.MaxValue }; candidatoParaCrear.Personas.Usuarios.CuentaActiva = 0; candidatoParaCrear.Personas.Usuarios.PlanesUsuarios = planUsuarioDefault; candidatoParaCrear.Personas.Usuarios.TipoPerfil = candidatoParaCrear.Personas.TipoPerfil; bool soyMenorDeEdad = DateTimeHelper.DiferenciaEntreDosFechasAños(DateTime.Now, candidatoParaCrear.FechaNacimiento) < AppConstants.MayoriaEdad; // Si soy menor de edad y no tengo tutor o el tutor no tiene email, explota if (soyMenorDeEdad && (candidatoParaCrear.CandidatosResponsables == null || string.IsNullOrWhiteSpace(candidatoParaCrear.CandidatosResponsables.Email))) { throw new InvalidOperationException("Falta informacion para el tutor, esta persona es menor de edad!."); } // Si no requiero tutor no lo guardo if (soyMenorDeEdad) { candidatoParaCrear.CandidatosResponsables.Candidatos = null; } else { candidatoParaCrear.CandidatosResponsables = null; } candidatoParaCrear.Personas.Candidatos = null; candidatoParaCrear.Personas.Paises = null; candidatoParaCrear.Personas.Idiomas = null; candidatoParaCrear.Generos = null; candidatoParaCrear.Personas.Anunciantes = null; candidatoParaCrear.Personas.Grupos = null; candidatoParaCrear.Personas.Representantes = null; candidatoParaCrear.Personas.Usuarios.Personas = null; foreach (var categoriaCandidato in candidatoParaCrear.CategoriasCandidatos) { categoriaCandidato.Categorias = null; categoriaCandidato.Candidatos = null; foreach (var habilidadCandidato in categoriaCandidato.HabilidadesCandidatos) { habilidadCandidato.Habilidades = null; } } CandidatosRepository candidatosRepo = new CandidatosRepository(context); candidatosRepo.CrearCandidato(candidatoParaCrear); WrapperSimpleTypesDTO wrapperCrearCandidato = new WrapperSimpleTypesDTO(); wrapperCrearCandidato.NumeroRegistrosAfectados = await context.SaveChangesAsync(); if (wrapperCrearCandidato.NumeroRegistrosAfectados > 0) { wrapperCrearCandidato.ConsecutivoCreado = candidatoParaCrear.Consecutivo; wrapperCrearCandidato.ConsecutivoPersonaCreado = candidatoParaCrear.Personas.Consecutivo; wrapperCrearCandidato.ConsecutivoUsuarioCreado = candidatoParaCrear.Personas.Usuarios.Consecutivo; AuthenticateRepository authenticateRepo = new AuthenticateRepository(context); string formatoEmail = await authenticateRepo.BuscarFormatoCorreoPorCodigoIdioma(candidatoParaCrear.Personas.CodigoIdioma, TipoFormatosEnum.ConfirmacionCuenta); if (!string.IsNullOrWhiteSpace(formatoEmail)) { formatoEmail = formatoEmail.Replace(AppConstants.PlaceHolderNombre, candidatoParaCrear.Personas.Nombres); formatoEmail = formatoEmail.Replace(AppConstants.PlaceHolderImagenLogo, urlLogo); formatoEmail = formatoEmail.Replace(AppConstants.PlaceHolderImagenBanner, urlBanner); formatoEmail = formatoEmail.Replace(AppConstants.PlaceHolderUrlWeb, URL.UrlWeb); string urlConfirmacionFormated = string.Format(URL.UrlWeb + @"Authenticate/ConfirmationOfRegistration?ID={0}&Language={1}", candidatoParaCrear.Personas.Usuarios.Consecutivo, candidatoParaCrear.Personas.CodigoIdioma); formatoEmail = formatoEmail.Replace(AppConstants.PlaceHolderUrlPaginaConfirmacion, urlConfirmacionFormated); string tema = string.Empty; switch (candidatoParaCrear.Personas.IdiomaDeLaPersona) { case Idioma.Español: tema = "Confirmacion de registro"; break; case Idioma.Ingles: tema = "Confirmation of registration"; break; case Idioma.Portugues: tema = "Confirmação da inscrição"; break; } string emailParaEnviarConfirmacion = string.Empty; // Si soy menor de edad el correo de confirmacion va hacia el tutor, si no va normal como siempre if (soyMenorDeEdad) { emailParaEnviarConfirmacion = candidatoParaCrear.CandidatosResponsables.Email.Trim(); } else { emailParaEnviarConfirmacion = candidatoParaCrear.Personas.Usuarios.Email.Trim(); } // Recordar configurar la cuenta Gmail en este caso para que permita el logeo de manera insegura y poder mandar correos // https://myaccount.google.com/lesssecureapps?pli=1 CorreoHelper correoHelper = new CorreoHelper(emailParaEnviarConfirmacion, AppConstants.CorreoAplicacion, AppConstants.ClaveCorreoAplicacion); wrapperCrearCandidato.Exitoso = correoHelper.EnviarCorreoConHTML(formatoEmail, Correo.Gmail, tema, "SportsGo"); } else { throw new InvalidOperationException("No hay formatos parametrizados para la confirmacion de la clave"); } } return(wrapperCrearCandidato); } }