Ejemplo n.º 1
0
        //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));
        }
Ejemplo n.º 2
0
        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));
        }