コード例 #1
0
ファイル: ShopModels.cs プロジェクト: HighLoadDigitalCore/CRM
        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();
            }
        }
コード例 #2
0
        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();
        }