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