예제 #1
0
        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
            }
        }
예제 #2
0
        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
            }
        }
예제 #3
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));
        }
예제 #4
0
        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));
        }
예제 #5
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));
        }