public async Task Select_ProyectoSeleccionados() { using (context) { // ARRANGE: Set the test case will use the inMemoty database created in the constructor var controller = new InversionsController(context); controller.ControllerContext.HttpContext = inversionContext; String[] ids = new string[1] { "1" }; SelectedProyectosForInversionViewModel Proyectos = new SelectedProyectosForInversionViewModel { IdsToAdd = ids }; // ACT var result = controller.SelectProyectosForInversion(Proyectos); //ASSERT var viewResult = Assert.IsType <RedirectToActionResult>(result); Assert.Equal(viewResult.ActionName, "Create"); var resultadoproyectos = viewResult.RouteValues.Values.First(); Assert.Equal(Proyectos.IdsToAdd, resultadoproyectos); // Check that both collections (expected and result returned) have the same elements with the same name } }
public async Task Select_NoProyectoSeleccionados() { using (context) { // ARRANGE: Set the test case will use the inMemoty database created in the constructor var controller = new InversionsController(context); controller.ControllerContext.HttpContext = inversionContext; //Proyectos var expectedProyectos = new Proyecto[2] { new Proyecto { ProyectoId = 1, FechaExpiracion = new DateTime(2019, 01, 23), Importe = 30000, Interes = (float)5.90, MinInversion = 50, Nombre = "E-MEDICA", NumInversores = 0, Plazo = 12, Progreso = 0, RatingId = 3 }, new Proyecto { ProyectoId = 2, FechaExpiracion = new DateTime(2019, 01, 14), Importe = 70000, Interes = (float)7.25, MinInversion = 0, Nombre = "PROTOS", NumInversores = 0, Plazo = 48, Progreso = 0, RatingId = 2 } }; //Areas var expectedAreas = new Areas[1] { new Areas { Nombre = "Sanidad" } }; //Tipos de Inversiones var expectedTiposInversiones = new TiposInversiones[1] { new TiposInversiones { Nombre = "Crowdfunding" } }; //Rating var expectedRating = new Rating[1] { new Rating { Nombre = "A" } }; SelectedProyectosForInversionViewModel Proyectos = new SelectedProyectosForInversionViewModel { IdsToAdd = null }; // ACT var result = controller.SelectProyectosForInversion(Proyectos); //ASSERT var viewResult = Assert.IsType <ViewResult>(result); SelectProyectosForInversionViewModel model = viewResult.Model as SelectProyectosForInversionViewModel; Assert.Equal(expectedProyectos, model.Proyectos, Comparer.Get <Proyecto>((p1, p2) => p1.Nombre == p2.Nombre && p1.Importe == p2.Importe && p1.MinInversion == p2.MinInversion && p1.Progreso == p2.Progreso && p1.ProyectoId == p2.ProyectoId)); Assert.Equal(expectedTiposInversiones, model.TiposInversiones, Comparer.Get <TiposInversiones>((p1, p2) => p1.Nombre == p2.Nombre)); Assert.Equal(expectedAreas, model.Areas, Comparer.Get <Areas>((a1, b2) => a1.Nombre == a1.Nombre)); Assert.Equal(expectedRating, model.Rating, Comparer.Get <Rating>((r1, r2) => r1.Nombre == r2.Nombre)); // Check that both collections (expected and result returned) have the same elements with the same name } }
//CREATE // GET: Inversions public IActionResult Create(SelectedProyectosForInversionViewModel selectedProyectos) { Proyecto proyecto; int id; InversionesCreateViewModel inversion = new InversionesCreateViewModel(); inversion.inversiones = new List <InversionCreateViewModel>(); Inversor inversor = _context.Users.OfType <Inversor>().Include(m => m.Monedero).FirstOrDefault <Inversor>(p => p.UserName.Equals(User.Identity.Name)); inversion.Name = inversor.Nombre; inversion.FirstSurname = inversor.Apellido1; inversion.SecondSurname = inversor.Apellido2; inversion.Cantidad = inversor.Monedero.Dinero; if (selectedProyectos.IdsToAdd == null || selectedProyectos.IdsToAdd.Count() == 0) { return(RedirectToAction("SelectProyectosForInversion")); } else { foreach (string ids in selectedProyectos.IdsToAdd) { id = int.Parse(ids); proyecto = _context.Proyecto.Include(p => p.Rating).Include(p => p.ProyectoAreas). ThenInclude <Proyecto, ProyectoAreas, Areas>(p => p.Areas).Include(p => p.ProyectoTiposInversiones). ThenInclude <Proyecto, ProyectoTiposInversiones, TiposInversiones>(p => p.TiposInversiones).Where(p => p.Plazo != null).Where(p => p.RatingId != null). FirstOrDefault <Proyecto>(p => p.ProyectoId.Equals(id)); inversion.inversiones.Add(new InversionCreateViewModel() { Cuota = 0, Interes = (float)proyecto.Interes, NombreProyecto = proyecto.Nombre, MinInver = proyecto.MinInversion, TiposInversion = new SelectList(proyecto.ProyectoTiposInversiones.Select(pro => pro.TiposInversiones.Nombre).ToList()), Rating = proyecto.Rating.Nombre, Plazo = (int)proyecto.Plazo, ProyectoId = proyecto.ProyectoId, Cantidad = inversion.Cantidad, inversion = new Inversion() { Proyecto = proyecto } }); } } ViewBag.Cuota = new SelectList(_context.Inversion.Select(c => c.Cuota).Distinct()); ViewBag.Inversor = inversor; return(View(inversion)); }
public IActionResult SelectProyectosForInversion(SelectedProyectosForInversionViewModel selectedProyectos) { if (selectedProyectos.IdsToAdd != null) { return(RedirectToAction("Create", selectedProyectos)); } //Se mostrará un mensaje de error al usuario para indicar que seleccione algún proyecto ModelState.AddModelError(string.Empty, "Debes seleccionar al menos un proyecto para invertir"); //Se recreará otra vez el View Model SelectProyectosForInversionViewModel selectProyectos = new SelectProyectosForInversionViewModel(); selectProyectos.TiposInversiones = _context.TiposInversiones; selectProyectos.Areas = _context.Areas; selectProyectos.Rating = _context.Rating; selectProyectos.Proyectos = _context.Proyecto.Include(p => p.Rating).Include(p => p.ProyectoAreas). ThenInclude <Proyecto, ProyectoAreas, Areas>(p => p.Areas).Include(p => p.ProyectoTiposInversiones). ThenInclude <Proyecto, ProyectoTiposInversiones, TiposInversiones>(p => p.TiposInversiones).Where(p => p.Plazo != null).Where(p => p.RatingId != null); return(View(selectProyectos)); }
public async Task <IActionResult> Create(InversionesCreateViewModel inversionCreate) { //var inversiones = new List<InversionCreateViewModel>(); Inversion inversion; Proyecto proyecto; Inversor inversor = _context.Users.OfType <Inversor>().Include(m => m.Monedero).FirstOrDefault <Inversor>(p => p.UserName.Equals(User.Identity.Name)); int[] idsInversion; ModelState.Clear(); int i = 0; foreach (InversionCreateViewModel itemInversion in inversionCreate.inversiones) { proyecto = await _context.Proyecto.FirstOrDefaultAsync <Proyecto>(m => m.ProyectoId == itemInversion.inversion.Proyecto.ProyectoId); inversion = new Inversion(); if (itemInversion.Cuota.CompareTo(itemInversion.MinInver) <= 0 && itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("Cuota y Tipo de Inversión incorrecto", $"Cuota y Tipo de Inversión incorrectos en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo((float)itemInversion.Cantidad) >= 0 && itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("Cuota y Tipo de Inversión incorrecto", $"Cuota y Tipo de Inversión incorrectos en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo(itemInversion.MinInver) <= 0) { ModelState.AddModelError("Ha introducido una cuota incorrecta", $"Ha introducido una cuota incorrecta en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.Cuota.CompareTo((float)itemInversion.Cantidad) >= 0) { ModelState.AddModelError("Ha introducido una cuota incorrecta", $"Ha introducido una cuota incorrecta en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else if (itemInversion.TiposInversionSelected == null) { ModelState.AddModelError("No ha seleccionado un tipo de inversión", $"No ha seleccionado un tipo de inversión en {inversionCreate.inversiones[i].NombreProyecto}. Por favor, vuelva a introducir los datos para realizar las inversiones."); } else { itemInversion.inversion.Cuota = itemInversion.Cuota; itemInversion.inversion.Intereses = (float)itemInversion.Interes; itemInversion.inversion.Inversor = inversor; if (itemInversion.TiposInversionSelected == "Business Angels") { itemInversion.inversion.TipoInversionesId = 1; } else if (itemInversion.TiposInversionSelected == "Crownfunding") { itemInversion.inversion.TipoInversionesId = 2; } else { itemInversion.inversion.TipoInversionesId = 3; } itemInversion.inversion.EstadosInversiones = "En Curso"; itemInversion.inversion.Total = (itemInversion.Cuota * (itemInversion.Interes / 100)) + itemInversion.Cuota; itemInversion.inversion.Inversor.Monedero.Dinero = itemInversion.Cantidad - (decimal)itemInversion.Cuota; _context.Add(itemInversion.inversion); } i++; } if (ModelState.ErrorCount > 0) { inversionCreate.Name = inversor.Nombre; inversionCreate.FirstSurname = inversor.Apellido1; inversionCreate.SecondSurname = inversor.Apellido2; SelectedProyectosForInversionViewModel selectedProyectos = new SelectedProyectosForInversionViewModel(); int j = 0; int tam = inversionCreate.inversiones.Count; String[] IdsToAdd2 = new string[tam]; foreach (InversionCreateViewModel itemInversion2 in inversionCreate.inversiones) { int proyId = itemInversion2.ProyectoId; string str = Convert.ToString(proyId); IdsToAdd2[j] = str; selectedProyectos.IdsToAdd = IdsToAdd2; j++; } selectedProyectos.IdsToAdd = IdsToAdd2; return(Create(selectedProyectos)); } await _context.SaveChangesAsync(); //DETAILS idsInversion = new int[inversionCreate.inversiones.Count]; for (int k = 0; k < idsInversion.Length; k++) { idsInversion[k] = inversionCreate.inversiones[k].inversion.InversionId; } InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel(); detailsViewModel.ids = idsInversion; return(RedirectToAction("Details", detailsViewModel)); }