Example #1
0
        //DETAILS
        // GET: Inversions
        public async Task <IActionResult> Details(InversionDetailsViewModel detailsIds)
        {
            if (detailsIds.ids == null || detailsIds.ids.Count() == 0)
            {
                return(RedirectToAction("Create"));
            }

            int[] ids = detailsIds.ids;

            var inversion = _context.Inversion.Include(s => s.TipoInversiones).
                            Include(s => s.Proyecto).
                            ThenInclude <Inversion, Proyecto, Rating>(s => s.Rating).
                            Where(s => ids.Contains(s.InversionId)).ToList();


            return(View(inversion));
        }
        //Details con ids pero vacío.
        public async Task Details_Inversion_NotFound()
        {
            using (context)
            {
                //Arrange
                var controller = new InversionsController(context);
                controller.ControllerContext.HttpContext = inversionContext;
                InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel();
                detailsViewModel.ids = new int[0];

                //Act
                var result = await controller.Details(detailsViewModel);

                //Assert
                var viewResult = Assert.IsType <RedirectToActionResult>(result);
                Assert.Equal(viewResult.ActionName, "Create");
            }
        }
        //Details sin ids
        public async Task Details_withoutIds()
        {
            using (context)
            {
                // Arrenge
                var controller = new InversionsController(context);
                //Simular una conexion de usuario
                controller.ControllerContext.HttpContext = inversionContext;
                InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel();

                //Act
                var result = await controller.Details(detailsViewModel);

                //Assert
                var viewResult = Assert.IsType <RedirectToActionResult>(result);
                Assert.Equal(viewResult.ActionName, "Create");
            }
        }
Example #4
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));
        }
        public async Task Details_Inversion_Found()
        {
            using (context)
            {
                // Arrenge
                var controller = new InversionsController(context);
                //Simular una conexion de usuario
                controller.ControllerContext.HttpContext = inversionContext;

                int[] ids = new int[2] {
                    1, 2
                };
                InversionDetailsViewModel detailsViewModel = new InversionDetailsViewModel()
                {
                    ids = ids
                };

                //Inversor esperado
                Inversor expectedinversor = new Inversor
                {
                    Id               = "1",
                    Nombre           = "Yasin",
                    Email            = "*****@*****.**",
                    Apellido1        = "Muñoz",
                    Apellido2        = "El Merabety",
                    Domicilio        = "C/Gabriel Ciscar",
                    Municipio        = "Albacete",
                    NIF              = "47446245",
                    Nacionalidad     = "Española",
                    PaisDeResidencia = "España",
                    Provincia        = "Albacete",
                    PhoneNumber      = "684010548",
                    PasswordHash     = "password",
                    UserName         = "******"
                };

                //Proyectos esperados
                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 = 1
                    },
                    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 = 1
                    }
                };

                //Inversion esperada
                var expectedInversiones = new Inversion[]
                {
                    new Inversion
                    {
                        InversionId        = 1,
                        Cuota              = 750,
                        EstadosInversiones = "En Curso",
                        Intereses          = (float)5.9,
                        InversorId         = "1",
                        Proyecto           = expectedProyectos[0],
                        Inversor           = expectedinversor,
                        TipoInversionesId  = 2,
                        Total              = (float)794.25
                    },
                    new Inversion
                    {
                        InversionId        = 2,
                        Cuota              = 850,
                        EstadosInversiones = "En Curso",
                        Intereses          = (float)7.25,
                        InversorId         = "2",
                        Proyecto           = expectedProyectos[1],
                        Inversor           = expectedinversor,
                        TipoInversionesId  = 1,
                        Total              = (float)911.625
                    }
                };

                //Act
                var result = await controller.Details(detailsViewModel);

                //Assert

                ViewResult viewResult = Assert.IsType <ViewResult>(result);
                var        model      = viewResult.Model as IEnumerable <Inversion>;

                Assert.Equal(expectedInversiones, model, Comparer.Get <Inversion>((i1, i2) => i1.Equals(i2)));
            }
        }