예제 #1
0
        /// <summary>
        /// Get a list of all vehicles from the Star Wars API and present some summary information.
        /// The top portion of the view will display the total number of vehicles where the cost is not "unknown",
        /// as well as the total number of unique manufacturers.
        /// For the table, take the vehicles where the cost is not "unknown", and group them by manufacturer.
        /// For each group(table row), get the manufacturer name, the number of vehicles by that manufacturer,
        /// and their average cost.
        /// Sort them by vehicle count(highest to lowest), then by average cost(highest to lowest).
        /// </summary>
        /// <returns>ActionResult</returns>
        public async Task <IActionResult> VehicleSummary()
        {
            var model = new VehicleSummaryViewModel();

            var vehicles = await _StarWarsService.GetVehiclesAsync();

            var vehiclesWithKnownCost = vehicles.Where(v => v.Cost != "unknown").ToList();

            model.VehicleCount      = vehiclesWithKnownCost.Count;
            model.ManufacturerCount = vehicles.Select(v => v.Manufacturer).Distinct().Count();

            model.Details = vehiclesWithKnownCost
                            .Select(v => new VehicleViewModel
            {
                Cost         = v.Cost,
                Manufacturer = v.Manufacturer
            })
                            .GroupBy(v => v.Manufacturer)
                            .Select(g => new VehicleStatsViewModel
            {
                ManufacturerName = g.Key,
                VehicleCount     = g.Count(),
                AverageCost      = g.Average(v => v.CostAsDouble)
            })
                            .OrderByDescending(s => s.VehicleCount)
                            .ThenByDescending(s => s.AverageCost)
                            .ToList();

            return(View(model));
        }
예제 #2
0
        public VehicleSummaryViewModel ToVehicleSummaryViewModel()
        {
            var model = new VehicleSummaryViewModel();

            model.VehicleCount = Results.Where(v => v.Cost != "unknown").Count();
            var distinctModels = Results.Select(v => v.Manufacturer).Distinct().ToList();

            model.ManufacturerCount = distinctModels.Count();
            var allVehicleStats = new List <VehicleStatsViewModel>();

            distinctModels.ForEach(m =>
            {
                var manufacturerVehicles = Results.Where(v => v.Cost != "unknown" && v.Manufacturer == m).ToList();
                if (manufacturerVehicles.Count() > 0)
                {
                    var vehicleStats          = new VehicleStats();
                    vehicleStats.Manufacturer = m;
                    vehicleStats.Vehicles.AddRange(manufacturerVehicles);
                    allVehicleStats.Add(vehicleStats.ToVehicleStatsViewModel());
                }
            });
            allVehicleStats = allVehicleStats.OrderByDescending(v => v.VehicleCount).ThenByDescending(v => v.AverageCost).ToList();
            model.Details.AddRange(allVehicleStats);
            return(model);
        }
예제 #3
0
        public async Task <ActionResult> VehicleSummary(CancellationToken cancellationToken)
        {
            // TODO: Implement this controller action
            VehicleSummaryViewModel vm = null;

            try
            {
                vm = await _starWarsService.VehicleSummaryAsync(cancellationToken);
            }
            catch (NullReferenceException ex)
            {
                if (ex.Message.Contains("not found"))
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
                }

                //potentially log error here and return 500
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }
            catch (Exception ex)
            {
                //potentially log error and rethrow error, or, in this case, just return 500
                return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
            }

            return(View(vm));
        }
        public async Task <ActionResult> VehicleSummary()
        {
            var model = new VehicleSummaryViewModel();

            List <VehicleModel> vehicles = await starWarsApi.GetAllVehiclesAsync();

            model.VehicleCount      = vehicles.Where(x => x.VehicleCost != "unknown").Count();
            model.ManufacturerCount = vehicles.GroupBy(x => x.VehicleManufacturer).Count();
            //filter out vehicles where cost is unknown, order by manufacturer
            List <VehicleSummaryModel> vehicleSummary = vehicles.Where(v => v.VehicleCost != "unknown")
                                                        .GroupBy(v => v.VehicleManufacturer)
                                                        .Select(s1 => new VehicleSummaryModel
            {
                ManufacturerName   = s1.First().VehicleManufacturer,
                NumberOfVehicles   = s1.Count(),
                AverageVehicleCost = s1.Average(x => Convert.ToDouble(x.VehicleCost)),
            }).ToList();

            vehicleSummary = vehicleSummary.OrderByDescending(x => x.NumberOfVehicles)
                             .ThenByDescending(x => x.AverageVehicleCost).ToList();

            foreach (VehicleSummaryModel vsm in vehicleSummary)
            {
                VehicleStatsViewModel vsvm = new VehicleStatsViewModel();
                vsvm.ManufacturerName = vsm.ManufacturerName;
                vsvm.VehicleCount     = vsm.NumberOfVehicles;
                vsvm.AverageCost      = vsm.AverageVehicleCost;
                model.Details.Add(vsvm);
            }


            return(View(model));
        }
예제 #5
0
        public ActionResult VehicleSummary()
        {
            // TODO: Implement this controller action
            List <Vehicle>          vehicleList = _starWarsService.GetVehicles().Result;
            VehicleSummaryViewModel model       = _viewMapperHelper.VehiclesMapper(vehicleList);

            return(View(model));
        }
        public ActionResult VehicleSummary()
        {
            var model = new VehicleSummaryViewModel();

            // TODO: Implement this controller action

            return(View(model));
        }
예제 #7
0
        private static VehicleSummaryViewModel CreateSummaryViewModel(ParkedVehicle vehicle)
        {
            var model = new VehicleSummaryViewModel();
            var owner = vehicle.Member;

            model.Colour             = vehicle.Colour;
            model.RegistrationNumber = vehicle.RegistrationNumber;
            model.ParkingTime        = DateTime.Now - vehicle.ParkingDate;
            model.Type      = vehicle.Type;
            model.OwnerName = owner.FullName;
            return(model);
        }
예제 #8
0
        private static VehicleSummaryViewModel CreateSummaryViewModel(ParkedVehicle vehicle, IEnumerable <Member> members)
        {
            var model = new VehicleSummaryViewModel();
            var owner = members.FirstOrDefault(m => m.MemberId == vehicle.MemberId);

            model.Colour             = vehicle.Colour;
            model.RegistrationNumber = vehicle.RegistrationNumber;
            model.ParkingTime        = DateTime.Now - vehicle.ParkingDate;
            model.Type      = vehicle.Type;
            model.OwnerName = owner.FirstName + " " + owner.LastName;
            return(model);
        }
예제 #9
0
        /// <summary>
        /// Creates a summary view of all manufacturers vehicles
        /// </summary>
        /// <returns>View of all the vehicles</returns>
        public VehicleSummaryViewModel GetAllVehicles()
        {
            // Create our vehicle Summary
            var vehicleSummary = new VehicleSummaryViewModel();

            // Get our list of vehicles
            var vehicles = vehiclesAPI.GetAllVehicles();

            // Get the total number of vehicles where the cost is unknnown
            vehicleSummary.VehicleCount = vehicles.Vehicles
                                          .Where(vehicle => vehicle.Cost_in_credits == "unknown")
                                          .Count();

            // Group the known cost models by manufacturer
            var vehiclesByManufacturer = vehicles.Vehicles
                                         .Where(vehicle => vehicle.Cost_in_credits != "unknown")
                                         .GroupBy(vehicle => vehicle.manufacturer).ToList();

            // Get the number of Manufacturers
            vehicleSummary.ManufacturerCount = vehiclesByManufacturer.Count();

            // Add each manufacturers vehicle summary to the view
            vehiclesByManufacturer.ToList().ForEach(manufacturer =>
            {
                // Create a new model for each manufacturer
                var vehicleStatsSummary = new VehicleStatsViewModel();

                // Set the manufacturer name
                vehicleStatsSummary.ManufacturerName = manufacturer.Key;

                // Set the number of vehicles
                vehicleStatsSummary.VehicleCount = manufacturer.Count();

                // Get the vehicles that the cost is known
                var vehiclesWithCost = manufacturer;

                // Set the average cost
                vehicleStatsSummary.AverageCost = vehiclesWithCost.Average(vehicle => long.Parse(vehicle.Cost_in_credits));

                // Add the manufacturer summary
                vehicleSummary.Details.Add(vehicleStatsSummary);
            });

            // Sort the results
            vehicleSummary.Details = vehicleSummary.Details
                                     .OrderByDescending(manufacturer => manufacturer.VehicleCount)
                                     .ThenByDescending(manufacturer => manufacturer.AverageCost)
                                     .ToList();

            return(vehicleSummary);
        }
예제 #10
0
        public VehicleSummaryViewModel VehiclesMapper(List <Vehicle> vehicles)
        {
            var model = new VehicleSummaryViewModel();

            model.VehicleCount = 0;
            int mfrCount = 0;

            foreach (Vehicle veh in vehicles)
            {
                if (veh.CostInCredits != "unknown")
                {
                    //manufacturer doesn't exist yet
                    if (!model.Details.Any(v => v.ManufacturerName == veh.Manufacturer))
                    {
                        List <Vehicle> mfrVehicles = vehicles.Where(v => v.Manufacturer == veh.Manufacturer).ToList();
                        //vStats.VehicleCount = mfrVehicles.Count;
                        //List<Vehicle> costVehicles = mfrVehicles.Where(v => (Int32.TryParse(v.CostInCredits, out int cost))).ToList();
                        List <Vehicle> costVehicles = mfrVehicles.Where(v => v.CostInCredits != "unknown").ToList();
                        if (costVehicles.Count > 0)
                        {
                            VehicleStatsViewModel vStats = new VehicleStatsViewModel
                            {
                                ManufacturerName = veh.Manufacturer,
                                AverageCost      = costVehicles.Average(v => Convert.ToInt32(v.CostInCredits)),
                                VehicleCount     = costVehicles.Count
                            };

                            var config = new MapperConfiguration(cfg =>
                                                                 cfg.CreateMap <Vehicle, VehicleDetailViewModel>()
                                                                 );

                            var mapper = config.CreateMapper();
                            vStats.Vehicles = mapper.Map <List <VehicleDetailViewModel> >(costVehicles);

                            //aveCost = costVehicles.Average(v => Convert.ToInt32(v.CostInCredits));
                            model.VehicleCount += costVehicles.Count;
                            model.Details.Add(vStats);
                            //vStats.AverageCost = vehicles.Where(v => !string.IsNullOrEmpty(v.CostInCredits) && v.CostInCredits.All(Char.IsDigit)).Convert.ToIntAverage(v => v.);
                            mfrCount++;
                        }
                    }
                }
            }
            model.ManufacturerCount = mfrCount;
            model.Details           = model.Details.OrderByDescending(v => v.VehicleCount).ThenByDescending(a => a.AverageCost).ToList();

            return(model);
        }
예제 #11
0
        public VehicleSummaryViewModel GetVehiclesSummary()
        {
            VehicleSummaryViewModel vehiclesSummary = new VehicleSummaryViewModel();

            List <VehicleModel> vehicles = swapiAccessors.RequestAllVehicles();

            List <VehicleModel> vehiclesWithCost = vehicles.Where(v => v.Cost != "unknown").ToList();
            var query = vehiclesWithCost
                        .GroupBy(v => v.Manufacturer,
                                 (man) => new VehicleStatsViewModel()
            {
                ManufacturerName = man.Manufacturer,
                VehicleCount     = vehiclesWithCost.Where(count => count.Manufacturer == man.Manufacturer).Count(),
                AverageCost      =
                    vehiclesWithCost
                    .Where(c => (c.Manufacturer == man.Manufacturer))
                    .Average(a => Convert.ToDouble(a.Cost))
            });

            vehiclesSummary.Details.AddRange(query.Where(m => !m.Key.Equals("Unknown")).Select(k => k.First <VehicleStatsViewModel>()).ToList().OrderByDescending(x => x.VehicleCount).ThenByDescending(y => y.AverageCost));
            vehiclesSummary.ManufacturerCount = vehiclesSummary.Details.Count();
            vehiclesSummary.VehicleCount      = vehicles.Where(c => c.Cost != "unknown").Count();
            return(vehiclesSummary);
        }
예제 #12
0
        public async Task <IActionResult> Index(string RegNum, int?type, string sortOrder)
        {
            ViewBag.TypeSortParm = String.IsNullOrEmpty(sortOrder) ? "type_desc" : "";
            ViewBag.RegistrationNumberSortParm = sortOrder == "RegistrationNumber" ? "RegistrationNumber_desc" : "RegistrationNumber";
            ViewBag.ColourSortParm             = sortOrder == "Colour" ? "Colour_desc" : "Colour";
            ViewBag.ParkingTimeSortParm        = sortOrder == "ParkingTime" ? "ParkingTime_desc" : "ParkingTime";
            ViewBag.OwnerNameSortParm          = sortOrder == "OwnerName" ? "OwnerName_desc" : "OwnerName";



            var vehicles = string.IsNullOrWhiteSpace(RegNum) ?
                           _context.ParkedVehicles.Include(v => v.Member) :
                           _context.ParkedVehicles.Include(v => v.Member).Where(m => m.RegistrationNumber.Contains(RegNum));

            IEnumerable <SelectListItem> vehicleTypeSelectItems = await GetVehicleTypeSelectListItems();

            vehicles = type == null ?
                       vehicles :
                       vehicles.Where(m => m.VehicleTypeId == type);

            var viewModels = new List <VehicleSummaryViewModel>();
            IEnumerable <Member> members = _context.Members;

            foreach (ParkedVehicle vehicle in vehicles)
            {
                if (vehicle.IsParked)
                {
                    VehicleSummaryViewModel viewModel = CreateSummaryViewModel(vehicle);
                    viewModels.Add(viewModel);
                }
            }

            switch (sortOrder)
            {
            case "type_desc":
                viewModels = viewModels.OrderByDescending(s => s.Type).ToList();
                break;

            case "RegistrationNumber":
                viewModels = viewModels.OrderBy(s => s.RegistrationNumber).ToList();
                break;

            case "RegistrationNumber_desc":
                viewModels = viewModels.OrderByDescending(s => s.RegistrationNumber).ToList();
                break;

            case "ParkingTime":
                viewModels = viewModels.OrderBy(s => s.ParkingTime).ToList();
                break;

            case "ParkingTime_desc":
                viewModels = viewModels.OrderByDescending(s => s.ParkingTime).ToList();
                break;

            case "Colour":
                viewModels = viewModels.OrderBy(s => s.Colour).ToList();
                break;

            case "Colour_desc":
                viewModels = viewModels.OrderByDescending(s => s.Colour).ToList();
                break;

            case "OwnerName":
                viewModels = viewModels.OrderBy(s => s.OwnerName).ToList();
                break;

            case "OwnerName_desc":
                viewModels = viewModels.OrderByDescending(s => s.OwnerName).ToList();
                break;

            default:
                viewModels = viewModels.OrderBy(s => s.Type).ToList();
                break;
            }

            return(View(new Tuple <IEnumerable <VehicleSummaryViewModel>, IEnumerable <SelectListItem> >
                            (viewModels, vehicleTypeSelectItems)));
        }
예제 #13
0
        public ActionResult VehicleSummary()
        {
            var model = new VehicleSummaryViewModel();

            return(View(model));
        }