public ActionResult GetVehicleListAPI(VehicleManagementFilterConditionModel filterConditions) { if (filterConditions.Draw == 0) { return(new HttpStatusCodeResult(400, "Unqualified request")); } if (filterConditions.OrderBy != null && typeof(VehicleManagementItemJsonModel).GetProperty(filterConditions.OrderBy) == null) { return(new HttpStatusCodeResult(400, "Invalid sorting property")); } filterConditions.ProviderID = User.Identity.GetUserId(); var service = this.Service <IVehicleService>(); var vehicles = service.FilterVehicle(filterConditions); return(Json(vehicles, JsonRequestBehavior.AllowGet)); }
public VehicleDataTablesJsonModel FilterVehicle(VehicleManagementFilterConditionModel filterConditions) { // Get only vehicles belonged to this user and is not deleted var vehicles = repository.Get(v => v.Garage.OwnerID == filterConditions.ProviderID && !v.IsDeleted); // Get vehicles belonged to this garage if (filterConditions.GarageID != null) { vehicles = vehicles.Where(v => v.GarageID == filterConditions.GarageID); } // Get vehicles belonged to this vehicle group if (filterConditions.VehicleGroupID != null) { vehicles = vehicles.Where(v => v.VehicleGroupID == filterConditions.VehicleGroupID); } var recordsTotal = vehicles.Count(); // Search, if Search param exists if (filterConditions.Search != null) { vehicles = vehicles.Where(v => v.Name.Contains(filterConditions.Search) || v.LicenseNumber.Contains(filterConditions.Search)); } // Parse into returnable model var results = vehicles.ToList().Select(v => new VehicleManagementItemJsonModel(v)); // Sort // Validate OrderBy in controller if (filterConditions.OrderBy == null || nameof(VehicleManagementItemJsonModel.ID) == filterConditions.OrderBy) { results = results.OrderBy(r => r.Name); } else { // Always sort by name after selected sorting prop if (nameof(VehicleManagementItemJsonModel.Name) == filterConditions.OrderBy) { results = filterConditions.IsDescendingOrder ? results.OrderByDescending(r => r.Name) : results.OrderBy(r => r.Name); } else { var sortingProp = typeof(VehicleManagementItemJsonModel).GetProperty(filterConditions.OrderBy); results = filterConditions.IsDescendingOrder ? results.OrderByDescending(r => sortingProp.GetValue(r)) : results.OrderBy(r => sortingProp.GetValue(r)); } } // Paginate var filteredRecords = results.Count(); if ((filterConditions.Page - 1) * filterConditions.RecordPerPage > filteredRecords) { filterConditions.Page = 1; } results = results.Skip((filterConditions.Page - 1) * filterConditions.RecordPerPage) .Take(filterConditions.RecordPerPage); return(new VehicleDataTablesJsonModel(results.ToList(), filterConditions.Draw, recordsTotal, filteredRecords)); }