public void Search(DataContext db) { if (!ShopList.Any()) { Result = new List <Order>(); return; } IQueryable <Order> result = null; if (ListOverride != null && ListOverride.Any()) { Result = db.Orders.Where(x => ListOverride.Contains(x.ID)).ToList(); return; } if (!ShopID.HasValue) { ShopID = HttpContext.Current.Request.QueryString["ShopID"].ToNullInt(); } if (!ShopID.HasValue) { ShopID = ShopList.First().Value.ToInt(); } if (CurrentUser.UserRoles.Contains("ShopOwner")) { var orderAuthors = db.ShopManagers.Where(x => x.Manager.ShopOwnerID == CurrentUser.ID) .Select(x => x.Manager.ManagerUserID) .ToList(); orderAuthors.Add(CurrentUser.ID); result = db.Orders.Where(x => orderAuthors.Contains(x.AddedByID)); result = result.Where(x => x.ShopID == ShopID.Value || (!x.ShopID.HasValue && x.AddedByID == CurrentUser.ID)); var contracted = db.ContractedOrders.Where( x => x.Contractor.UserBy == CurrentUser.ShopOwnerID && x.Contractor.ShopID == ShopID).Select(x => x.Order); result = result.Concat(contracted); } else if (CurrentUser.UserRoles.Contains("Manager")) { var orderAuthors = db.ShopManagers.Where(x => x.Manager.ShopOwnerID == CurrentUser.ManagerProfiles.First().ShopOwnerID) .Select(x => x.Manager.ManagerUserID) .ToList(); orderAuthors.Add(CurrentUser.ManagerProfiles.First().ShopOwnerID); var shids = db.ShopManagers.Where(x => x.Manager.ManagerUserID == CurrentUser.ID).Select(x => x.ShopID).ToList(); result = db.Orders.Where(x => orderAuthors.Contains(x.AddedByID) && shids.Contains(x.ShopID)); result = result.Where(x => x.ShopID == ShopID.Value || (!x.ShopID.HasValue && x.AddedByID == CurrentUser.ID)); var contracted = db.ContractedOrders.Where( x => x.Contractor.UserFor == CurrentUser.ShopOwnerID && x.Contractor.ShopID == ShopID) .Select(x => x.Order); result = result.Concat(contracted); } else if (CurrentUser.UserRoles.Contains("Operator")) { var shds = db.OperatorShops.Where(x => x.UserID == CurrentUser.ID).Select(x => x.ShopID).ToList(); result = db.Orders.Where(x => shds.Contains(x.ShopID ?? 0)); } else { result = db.Orders.Where(x => x.AddedByID == CurrentUser.ID); } if (MinDate.HasValue) { result = result.Where( x => x.CreateDate.Date >= MinDate.Value); } if (MaxDate.HasValue) { result = result.Where( x => x.CreateDate <= MaxDate.Value); } if (MinDateDelivery.HasValue) { result = result.Where(x => x.DeliveryDate.HasValue && x.DeliveryDate.Value.Date >= MinDateDelivery.Value.Date); } if (MaxDateDelivery.HasValue) { result = result.Where(x => x.DeliveryDate.HasValue && x.DeliveryDate.Value.Date <= MaxDateDelivery.Value.Date); } if (LoginOrName.IsFilled()) { result = result.Where( x => x.Consumer != null && ( SqlMethods.Like(x.Consumer.Name.ToLower(), LoginOrNameLike) || SqlMethods.Like(x.Consumer.Surname.ToLower(), LoginOrNameLike) || SqlMethods.Like(x.Consumer.Phone.ToLower(), LoginOrNameLike))); } if (Status.HasValue) { result = result.Where(x => x.Status == Status.Value); } var chars = DB.ShopProductChars.Where( x => x.UserID == CurrentUser.ShopOwnerID && (!x.ShopID.HasValue || x.ShopID == ShopID) && x.IsMain) .OrderBy(x => x.Name).ToList(); ShopChars = chars.ToList(); if (Overage) { result = result.Where(x => x.Marks.Any() && x.Marks.First().MarkDate > DateTime.Now.AddDays(-14)); } if (ExactDateDelivery.HasValue) { result = result.Where( x => x.DeliveryDate.HasValue && x.DeliveryDate.Value.Date == ExactDateDelivery.Value.Date); } if (Regions.Any()) { IQueryable <Order> filtered = null; foreach (var region in Regions) { if (filtered == null) { filtered = result.Where( x => x.OrderDelivery != null && x.OrderDelivery.Region.ToLower() == region.ToLower()); } else { filtered = filtered.Concat(result.Where( x => x.OrderDelivery != null && x.OrderDelivery.Region.ToLower() == region.ToLower())); } } result = filtered; } Result = result.OrderByDescending(x => x.Status).ThenByDescending(x => x.ID).Take(2000).ToList(); if (CurrentUser.UserRoles.Contains("Operator")) { Result = Result.Where(x => x.Status == 100 && x.DeliveryDate.HasValue).OrderBy(x => x.Marks.Any()).ThenBy(x => x.DeliveryDate).ToList(); } }
public void Search(DataContext db) { IQueryable <User> result = null; if (CurrentUser.UserRoles.Contains("Admin")) { result = db.Users.AsQueryable(); } else if (CurrentUser.UserRoles.Contains("ShopOwner")) { var mans = DB.Managers.Where(x => x.ShopOwnerID == CurrentUser.ID).Select(x => x.ManagerUserID).ToList(); mans.Add(CurrentUser.ID); result = db.Users.Where(x => mans.Contains(x.ID) && !(x.IsDeleted ?? false)); } else if (CurrentUser.UserRoles.Contains("Manager")) { var mans = DB.Managers.Where(x => x.ShopOwnerID == CurrentUser.ManagerProfiles.First().ShopOwnerID).Select(x => x.ManagerUserID).ToList(); result = db.Users.Where(x => mans.Contains(x.ID) && !(x.IsDeleted ?? false)); } if (MinDate.HasValue) { result = result.Where( x => x.Membership.CreateDate.HasValue && x.Membership.CreateDate.Value.Date >= MinDate.Value.Date); } if (MaxDate.HasValue) { result = result.Where( x => x.Membership.CreateDate.HasValue && x.Membership.CreateDate.Value.Date <= MaxDate.Value.Date); } if (LoginOrName.IsFilled()) { result = result.Where( x => SqlMethods.Like(x.DigitID.ToLower(), LoginOrNameLike) || SqlMethods.Like(x.Email.ToLower(), LoginOrNameLike) || SqlMethods.Like(x.Name.ToLower(), LoginOrNameLike) || SqlMethods.Like(x.Phone, LoginOrNameLike) || SqlMethods.Like( (x.UserSurname ?? "") + " " + (x.UserName ?? "") + " " + (x.UserPatrinomic ?? ""), LoginOrNameLike)); } if (RoleID.HasValue) { result = result.Where(x => x.UsersInRoles.Any(z => z.RoleId == RoleID)); } /* * if (CurrentUser.UserRoles.Contains("ShopOwner")) * { * var managers = DB.Managers.Where(x => x.ShopOwnerID == CurrentUser.ID); * result = result.Where(x => managers.Any(z => z.ManagerUserID == x.ID)); * } */ Result = result.OrderByDescending(x => x.ID).Take(2000).ToList(); }