public ActionResult GetListBooking(BookingsFilterConditions conditions) { if (conditions.Draw == 0) { return(new HttpStatusCodeResult(400, "Unqualified request")); } if (conditions.OrderBy != null && typeof(BookingsRecordJsonModel).GetProperty(conditions.OrderBy) == null) { return(new HttpStatusCodeResult(400, "Invalid sorting property")); } conditions.providerID = User.Identity.GetUserId(); var service = this.Service <IBookingReceiptService>(); var bookings = service.FilterBookings(conditions); return(Json(bookings, JsonRequestBehavior.AllowGet)); }
public BookingsDataTablesJsonModel FilterBookings(BookingsFilterConditions conditions) { // Get all available booking receipt var bookings = repository.Get(b => b.Garage.OwnerID == conditions.providerID && b.IsPending == false); if (conditions.vehicleID != null) { bookings = bookings.Where(b => b.VehicleID == conditions.vehicleID); } if (conditions.garageID != null) { bookings = bookings.Where(b => b.GarageID == conditions.garageID); } // Exclude canceled receipt while IsCanceled is not checked if (!conditions.IsCanceled) { bookings = bookings.Where(b => b.IsCanceled == false); } // Exclude canceled receipt while IsSelfBooking is not checked if (!conditions.IsSelfBooking) { bookings = bookings.Where(b => b.CustomerID != b.Garage.OwnerID); } if (conditions.IsInThePast != null) { DateTime now = DateTime.Now; // while only IsInThePast is checked if (conditions.IsInThePast == true) { bookings = bookings.Where(b => b.StartTime < now); } // while only IsInFuture is checked else { bookings = bookings.Where(b => b.StartTime >= now); } } var recordsTotal = bookings.Count(); // Search, if Search param exists if (conditions.Search != null) { bookings = bookings.Where(b => b.AspNetUser.FullName.Contains(conditions.Search) || b.VehicleName.Contains(conditions.Search) || b.LicenseNumber.Contains(conditions.Search)); } var result = bookings.ToList().Select(b => new BookingsRecordJsonModel(b)); // Sort // Default sort if (conditions.OrderBy == null || nameof(BookingsRecordJsonModel.ID) == conditions.OrderBy) { result = result.OrderBy(r => r.CustomerName); } else { if (nameof(BookingsRecordJsonModel.CustomerName) == conditions.OrderBy) { result = conditions.IsDescendingOrder ? result.OrderByDescending(r => r.CustomerName) : result.OrderBy(r => r.CustomerName); } else { var sortingProp = typeof(BookingsRecordJsonModel).GetProperty(conditions.OrderBy); result = conditions.IsDescendingOrder ? result.OrderByDescending(r => sortingProp.GetValue(r)) : result.OrderBy(r => sortingProp.GetValue(r)); } } // Paginate var filteredRecords = result.Count(); if ((conditions.Page - 1) * conditions.RecordPerPage > filteredRecords) { conditions.Page = 1; } result = result.Skip((conditions.Page - 1) * conditions.RecordPerPage) .Take(conditions.RecordPerPage); return(new BookingsDataTablesJsonModel(result.ToList(), conditions.Draw, recordsTotal, filteredRecords)); }