public async Task <IHttpActionResult> FindAllActivities(string title = null, string description = null, string keyword = null, string locationId = null, string locationName = null, int?ageFrom = null, int?ageTo = null, DateTime?fromDate = null, DateTime?toDate = null, SharedEnums.TransportationFilter transportation = SharedEnums.TransportationFilter.All, SharedEnums.ActivityPostStatus postStatus = SharedEnums.ActivityPostStatus.Posted, bool myActivities = false, int pageIndex = 1, int pageSize = 10, string include = null, string orderBy = "CreateDate DESC", int?categoryId = null, int?maxPrice = null, int?minPrice = null, SharedEnums.ActivationStatus status = SharedEnums.ActivationStatus.Active, string adminKeyword = null, string bookingUserName = null, string bookingUserEmail = null, SharedEnums.BookingConfirmationStatus bookingStatus = SharedEnums.BookingConfirmationStatus.All, string bookingNumber = null, bool excludeAdminActivities = false, bool onlyAdminActivities = false) { try { Pager pager = new Pager() { PageSize = pageSize, PageIndex = pageIndex };; Expression <Func <Activity, bool> > Filter = x => !x.IsDeleted; if (!string.IsNullOrWhiteSpace(keyword)) { keyword = keyword.ToLower().Trim(); Filter = Filter.And((x) => x.TitleAr.ToLower().Trim().Contains(keyword) || x.TitleEn.ToLower().Trim().Contains(keyword) || x.DescriptionAr.ToLower().Trim().Contains(keyword) || x.DescriptionEn.ToLower().Trim().Contains(keyword) || x.Category.TitleAr.ToLower().Trim().Contains(keyword) || x.Category.TitleEn.ToLower().Trim().Contains(keyword) || x.LocationName.ToLower().Trim().Contains(keyword)); } if (!string.IsNullOrWhiteSpace(adminKeyword)) { adminKeyword = adminKeyword.ToLower().Trim(); Filter = Filter.And((x) => x.TitleAr.ToLower().Trim().Contains(adminKeyword) || x.TitleEn.ToLower().Trim().Contains(adminKeyword) || x.DescriptionAr.ToLower().Trim().Contains(adminKeyword) || x.DescriptionEn.ToLower().Trim().Contains(adminKeyword) || x.Category.TitleAr.ToLower().Trim().Contains(adminKeyword) || x.Category.TitleEn.ToLower().Trim().Contains(adminKeyword) || x.LocationName.ToLower().Trim().Contains(adminKeyword) || x.Supplier.FirstName.ToLower().Trim().Contains(adminKeyword) || x.Supplier.LastName.ToLower().Trim().Contains(adminKeyword) || (x.Supplier.FirstName.ToLower().Trim() + " " + x.Supplier.LastName.ToLower().Trim()).Contains(adminKeyword) || ("#" + x.Id.ToString()) == adminKeyword ); } if (!string.IsNullOrWhiteSpace(title)) { title = title.ToLower().Trim(); Filter = Filter.And((x) => x.TitleAr.ToLower().Trim().Contains(title) || x.TitleEn.ToLower().Trim().Contains(title)); } if (!string.IsNullOrWhiteSpace(description)) { description = description.ToLower().Trim(); Filter = Filter.And((x) => x.Description.ToLower().Trim().Contains(description)); } if (!string.IsNullOrWhiteSpace(locationId)) { locationId = locationId.ToLower().Trim(); Filter = Filter.And((x) => x.LocationId.ToLower().Trim() == locationId); } if (!string.IsNullOrWhiteSpace(locationName)) { locationName = locationName.ToLower().Trim(); Filter = Filter.And((x) => x.LocationName.ToLower().Trim() == locationName); } if (ageFrom.HasValue) { Filter = Filter.And((x) => x.AgeFrom >= ageFrom); } if (ageTo.HasValue) { Filter = Filter.And((x) => x.AgeTo >= ageTo); } if (categoryId.HasValue) { Filter = Filter.And((x) => x.CategoryId == categoryId.Value); } if (maxPrice.HasValue) { Filter = Filter.And((x) => x.Price <= maxPrice.Value); } if (minPrice.HasValue) { Filter = Filter.And((x) => x.Price >= minPrice.Value); } if (fromDate.HasValue && toDate.HasValue) { Filter = Filter.And(x => (DbFunctions.TruncateTime(x.From) >= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.From) <= DbFunctions.TruncateTime(toDate)) || (DbFunctions.TruncateTime(x.To) >= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.To) <= DbFunctions.TruncateTime(toDate)) || (DbFunctions.TruncateTime(x.From) <= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.To) >= DbFunctions.TruncateTime(toDate))); } else if (fromDate.HasValue || toDate.HasValue) { if (fromDate.HasValue) { Filter = Filter.And(x => DbFunctions.TruncateTime(x.From) >= DbFunctions.TruncateTime(fromDate)); } else { Filter = Filter.And(x => DbFunctions.TruncateTime(x.To) <= DbFunctions.TruncateTime(toDate)); } } switch (transportation) { case SharedEnums.TransportationFilter.Available: Filter = Filter.And(x => x.Transportation); break; case SharedEnums.TransportationFilter.NotAvailable: Filter = Filter.And(x => !x.Transportation); break; default: break; } if (excludeAdminActivities) { Filter = Filter.And(x => x.SupplierId.HasValue); } if (onlyAdminActivities) { Filter = Filter.And(x => !x.SupplierId.HasValue); } //TODO //if(Unit.UserId.IsSupplier) //if(this.ActiveUser.IsSupplier) if (this.ActiveUser == null || !this.ActiveUser.IsSupplier) { Filter = Filter.And(x => x.IsPosted); } else if (postStatus != SharedEnums.ActivityPostStatus.All) { if (postStatus == SharedEnums.ActivityPostStatus.Posted) { Filter = Filter.And(x => x.IsPosted); } else { Filter = Filter.And(x => !x.IsPosted); } } if (this.ActiveUser != null && this.ActiveUser.UserType == SharedEnums.UserTypes.Manager && !onlyAdminActivities) { if (status != SharedEnums.ActivationStatus.All) { if (status == SharedEnums.ActivationStatus.Active) { Filter = Filter.And(x => x.IsActive); } else { Filter = Filter.And(x => !x.IsActive); } } } else if (this.ActiveUser != null && myActivities && this.ActiveUser.IsSupplier) { Filter = Filter.And(x => x.SupplierId == this.ActiveUser.Id); } else if (!onlyAdminActivities) { Filter = Filter.And(x => x.IsActive); } if (!string.IsNullOrEmpty(bookingUserName)) { bookingUserName = bookingUserName.ToLower(); Filter = Filter.And(x => x.Bookings.Any(y => !y.IsDeleted && ((y.User.FirstName + " " + y.User.LastName).ToLower().Contains(bookingUserName)))); } if (!string.IsNullOrEmpty(bookingUserEmail)) { bookingUserEmail = bookingUserEmail.ToLower(); Filter = Filter.And(x => x.Bookings.Any(y => !y.IsDeleted && y.User.Email.ToLower().Contains(bookingUserEmail))); } if (!string.IsNullOrEmpty(bookingNumber)) { bookingNumber = bookingNumber.ToLower(); Filter = Filter.And(x => x.Bookings.Any(y => !y.IsDeleted && y.BookingNumber.Contains(bookingNumber))); } if (bookingStatus != SharedEnums.BookingConfirmationStatus.All) { Filter = Filter.And(x => x.Bookings.Any(y => !y.IsDeleted && y.Status == bookingStatus)); } //Get Order By var OrderBy = Mgr.DynamicOrderBy(orderBy); var activities = await Mgr.FindAll_Async(Filter, OrderBy, pager, Helper.ToStringArray(include)); HttpContext.Current.Response.Headers.Add("access-control-expose-headers", "X-Pager"); HttpContext.Current.Response.Headers.Add("X-Pager", Newtonsoft.Json.JsonConvert.SerializeObject(pager)); return(Ok(activities)); } catch (Exception ex) { Unit.LogError(ex, this.ToString(), this.ActionContext.ActionArguments.ToList()); return(InternalServerError(ex)); } }
public async Task <IHttpActionResult> FindAllMapMarks(decimal gLat, decimal gLng, decimal sLat, decimal sLng, string locationId = null, int?ageFrom = null, int?ageTo = null, DateTime?fromDate = null, DateTime?toDate = null, SharedEnums.TransportationFilter transportation = SharedEnums.TransportationFilter.All, bool isPosted = true, bool myActivities = false, int?categoryId = null, int?maxPrice = null, int?minPrice = null) { try { Pager pager = new Pager() { PageSize = 25, PageIndex = 1 };; Expression <Func <Activity, bool> > Filter = x => !x.IsDeleted && x.IsActive; Filter = Filter.And(x => x.Lat >= sLat && x.Lat <= gLat); Filter = Filter.And(x => x.Lng >= sLng && x.Lng <= gLng); Filter = Filter.And(x => !x.OnlineLocation && !x.AtUserLocation); if (ageFrom.HasValue) { Filter = Filter.And((x) => x.AgeFrom >= ageFrom); } if (ageTo.HasValue) { Filter = Filter.And((x) => x.AgeTo >= ageTo); } if (categoryId.HasValue) { Filter = Filter.And((x) => x.CategoryId == categoryId.Value); } if (maxPrice.HasValue) { Filter = Filter.And((x) => x.Price <= maxPrice.Value); } if (minPrice.HasValue) { Filter = Filter.And((x) => x.Price >= minPrice.Value); } if (fromDate.HasValue && toDate.HasValue) { Filter = Filter.And(x => (DbFunctions.TruncateTime(x.From) >= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.From) <= DbFunctions.TruncateTime(toDate)) || (DbFunctions.TruncateTime(x.To) >= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.To) <= DbFunctions.TruncateTime(toDate)) || (DbFunctions.TruncateTime(x.From) <= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(x.To) >= DbFunctions.TruncateTime(toDate))); } else if (fromDate.HasValue || toDate.HasValue) { if (fromDate.HasValue) { Filter = Filter.And(x => DbFunctions.TruncateTime(x.From) >= DbFunctions.TruncateTime(fromDate)); } else { Filter = Filter.And(x => DbFunctions.TruncateTime(x.To) <= DbFunctions.TruncateTime(toDate)); } } switch (transportation) { case SharedEnums.TransportationFilter.Available: Filter = Filter.And(x => x.Transportation); break; case SharedEnums.TransportationFilter.NotAvailable: Filter = Filter.And(x => !x.Transportation); break; default: break; } //TODO //if(Unit.UserId.IsSupplier) Filter = Filter.And(x => x.IsPosted == isPosted); if (myActivities) { Filter = Filter.And(x => x.SupplierId == Unit.UserId); } var marks = await Mgr.FindAllMarks(Filter); HttpContext.Current.Response.Headers.Add("access-control-expose-headers", "X-Pager"); HttpContext.Current.Response.Headers.Add("X-Pager", Newtonsoft.Json.JsonConvert.SerializeObject(pager)); return(Ok(marks)); } catch (Exception ex) { Unit.LogError(ex, this.ToString(), this.ActionContext.ActionArguments.ToList()); return(InternalServerError(ex)); } }