Beispiel #1
0
 public IEnumerable <BikeRent> GetList(BikeRentListFilter filter, PagingInfo paging, out int totalRowCount)
 {
     return(this.BikeRentDataProvider.GetList(filter, paging, out totalRowCount));
 }
Beispiel #2
0
        /// <summary>
        /// Get entity collection
        /// freeTextSearch - looks for in any text field
        /// </summary>
        public BikeRentListData GetList(BikeRentListFilter filter, PagingInfo paging)
        {
            using (var scope = Scope("GetList"))
            {
                // authorize
                AuthProvider.Authorize(Permission.BikeRents_ViewAll, Permission.BikeRents_ManageAll, Permission.BikeRents_ManageOwn);

                if (!AuthProvider.HasPermission(Permission.BikeRents_ViewAll, Permission.BikeRents_ManageAll))
                {
                    filter.Users = new[] { AuthProvider.CurrentUser.UserId }
                }
                ;

                // process
                var list = BikeRentManager.GetList(filter, paging, out int totalRowCount).ToArray();
                Helper.ValidateResult(list);

                return(scope.Complete(
                           () => new BikeRentListData()
                {
                    List = list.Select(t => new Models.Rents.BikeRentListItem(t)).ToArray(),
                    TotalRowCount = totalRowCount
                },
                           t => $"BikeRent list loaded {t.List.Length} items."
                           ));
            }
        }

        #endregion

        //#region Get (single entity)

        ///// <summary>
        ///// Get single entity
        ///// id == bikeId or "new"
        ///// </summary>
        //public BikeFormData GetById(int bikeId)
        //{
        //    using (var scope = Scope("Get", new BikeFormData()))
        //    {
        //        AuthProvider.Authenticate(); // throws UnauthenticatedException or we have CurrentUser after this

        //        // prepare
        //        var isNew = string.Compare(bikeId, "new", true) == 0;

        //        // authorize
        //        AuthProvider.Authorize(Permission.Bike_ViewAll);

        //        // process
        //        scope.Result.Entity = isNew ? new Bike() : BikeManager.Get(bikeId);
        //        scope.Result.Colors = ColorManager.GetList().ToArray();
        //        scope.Result.Bik

        //        return scope.Complete(() => scope.Result, t => $"User loaded with Id={t.Entity.UserId}.");
        //    }
        //}

        //#endregion

        //#region Post (create single)

        ///// <summary>
        ///// Create new entity
        ///// </summary>
        //public void Post(User user)
        //{
        //    using (var scope = Scope("Post"))
        //    {
        //        AuthProvider.Authenticate(); // throws UnauthenticatedException or we have CurrentUser after this

        //        // prepare
        //        Helper.Expect(user);
        //        user.UserName = user.Email;

        //        // authorize
        //        AuthProvider.Authorize(Permission.User_Management);

        //        // only Admin can set roles other than User
        //        if (!AuthProvider.HasPermission(Permission.User_Management_SetRole) && user.Role != RoleType.User)
        //            throw new ValidationException("Role cannot be set.", false);

        //        // validate
        //        Helper.ValidateModel(user, true);

        //        // process
        //        UserManager.Add(user.ToEntity());

        //        scope.Complete(() => $"User has been created with Id={user.UserId}.");
        //    }
        //}

        //#endregion

        //#region Put (update single entity)

        ///// <summary>
        ///// Update single entity
        ///// </summary>
        //public void Put(User user)
        //{
        //    using (var scope = Scope("Put"))
        //    {
        //        AuthProvider.Authenticate(); // throws UnauthenticatedException or we have CurrentUser after this

        //        // prepare
        //        Helper.Expect(user, user.UserId);

        //        user.UserName = user.Email;

        //        if (user.UserId != null)
        //            user.UserId = user.UserId.ToLower();

        //        var ownProfile = string.Compare(user.UserId, AuthProvider.CurrentUser.UserId, true) == 0;
        //        var oldUser = UserManager.Get(user.UserId); // throws EntityNotFoundException

        //        // authorize
        //        if (ownProfile)
        //            AuthProvider.Authorize(Permission.User_EditProfile);
        //        else if (oldUser.Role != RoleType.User)
        //            AuthProvider.Authorize(Permission.User_Management_EditAdmins); // only Admin can edit Admin
        //        else
        //            AuthProvider.Authorize(Permission.User_Management);

        //        // only Admin can set roles other than User
        //        if (!AuthProvider.HasPermission(Permission.User_Management_SetRole) && oldUser.Role != user.Role)
        //            throw new ValidationException("Role cannot be set.", false);

        //        // validate
        //        Helper.ValidateModel(user, true);

        //        // process
        //        UserManager.Update(user.ToEntity());

        //        scope.Complete(() => $"User has been updated with Id={user.UserId}.");
        //    }
        //}

        //#endregion

        //#region Delete (single entity)

        ///// <summary>
        ///// Delete single entity
        ///// </summary>
        //public void Delete(string id)
        //{
        //    using (var scope = Scope("Delete"))
        //    {
        //        AuthProvider.Authenticate(); // throws UnauthenticatedException or we have CurrentUser after this

        //        // prepare
        //        Helper.Expect(typeof(User), id);

        //        id = id.ToLower();

        //        var ownProfile = string.Compare(id, AuthProvider.CurrentUser.UserId, true) == 0;
        //        var oldUser = UserManager.Get(id);

        //        // authorize
        //        if (ownProfile)
        //            AuthProvider.Authorize(Permission.User_EditProfile);
        //        else if (oldUser.Role == RoleType.Admin)
        //            AuthProvider.Authorize(Permission.User_Management_EditAdmins); // only Admin can edit Admin
        //        else
        //            AuthProvider.Authorize(Permission.User_Management);

        //        // process
        //        UserManager.Delete(id);

        //        scope.Complete(() => $"User has been deleted with Id={id}.");
        //    }
        //}

        //#endregion
    }
        /// <summary>
        /// Returns entities for listing purposes.
        /// </summary>
        public IEnumerable <BikeRent> GetList(BikeRentListFilter filter, PagingInfo paging, out int totalRowCount)
        {
            IQueryable <BikeRent> query = Include(AppDbContext.BikeRents);

            totalRowCount = 0;

            if (filter != null && !filter.IsEmpty)
            {
                #region Filtering

                // State
                if (filter.State.HasValue)
                {
                    query = query.Where(t => t.BikeRentState == filter.State.Value);

                    // Late
                    if (filter.State.Value == BikeRentState.Reserved && filter.Late.HasValue)
                    {
                        var now = DateTime.UtcNow;

                        if (filter.Late.Value)
                        {
                            query = query.Where(t => t.BikeRentState == BikeRentState.Reserved && t.EndDateUtc < now);
                        }
                        else
                        {
                            query = query.Where(t => t.BikeRentState == BikeRentState.Reserved && t.EndDateUtc >= now);
                        }
                    }
                }

                // Colors
                if (filter.Colors != null && filter.Colors.Any())
                {
                    // LINQ will generate proper SQL like this
                    var ids = filter.Colors.ToArray();
                    query = query.Where(t => ids.Contains(t.Bike.Color.ColorId));
                }

                // Models
                if (filter.BikeModels != null && filter.BikeModels.Any())
                {
                    var ids = filter.BikeModels.ToArray();
                    query = query.Where(t => ids.Contains(t.Bike.BikeModel.BikeModelId));
                }

                // BikeId
                if (filter.BikeId.HasValue)
                {
                    query = query.Where(t => t.Bike.BikeId == filter.BikeId.Value);
                }

                // StartDate
                if (filter.StartDateUtc.From.HasValue)
                {
                    query = query.Where(t => t.StartDateUtc >= filter.StartDateUtc.From.Value);
                }
                if (filter.StartDateUtc.To.HasValue)
                {
                    query = query.Where(t => t.StartDateUtc <= filter.StartDateUtc.To.Value);
                }

                // EndDate
                if (filter.EndDateUtc.From.HasValue)
                {
                    query = query.Where(t => t.EndDateUtc >= filter.EndDateUtc.From.Value);
                }
                if (filter.EndDateUtc.To.HasValue)
                {
                    query = query.Where(t => t.EndDateUtc <= filter.EndDateUtc.To.Value);
                }

                // Users
                if (filter.Users != null && filter.Users.Any())
                {
                    var ids = filter.Users.ToArray();
                    query = query.Where(t => ids.Contains(t.User.UserId));
                }

                // BikeRentId
                if (!string.IsNullOrEmpty(filter.BikeRentId))
                {
                    query = query.Where(t => t.BikeRentId == filter.BikeRentId);
                }

                #endregion
            }

            // count before paging applied
            if (paging.ReturnTotalRowCount)
            {
                totalRowCount = query.Count();
            }

            if (paging != null && !paging.IsEmpty)
            {
                #region Paging

                // order
                if (paging.OrderBy != null && paging.OrderBy.Length > 0)
                {
                    // use LINQ dynamic
                    query = query.OrderBy(string.Format("{0} {1}", string.Join(",", FormatFieldNames(paging.OrderBy)), paging.OrderByDescending ? "DESC" : "ASC"));
                }

                // paging
                if (paging.FirstRow.GetValueOrDefault(0) > 0)
                {
                    query = query.Skip(paging.FirstRow.Value);
                }

                if (paging.RowCount.GetValueOrDefault(int.MaxValue) < int.MaxValue)
                {
                    query = query.Take(paging.RowCount.Value);
                }

                #endregion
            }

            return(query);
        }