public IEnumerable <BikeRent> GetList(BikeRentListFilter filter, PagingInfo paging, out int totalRowCount) { return(this.BikeRentDataProvider.GetList(filter, paging, out totalRowCount)); }
/// <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); }