public async Task <PushNotificationListModel> PreparePushNotificationListModel(PushNotificationSearchModel searchModel) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } var pushNotifications = await _pushNotificationService.GetPushNotificationsAsync( storeIds : searchModel.SelectedStoreIds.ToArray(), pushCategoryIds : searchModel.SelectedNotificationCategoryIds.ToArray(), title : searchModel.SearchTitle, desc : searchModel.SearchDesc, stNo : searchModel.SearchStockTakeNo, pageIndex : searchModel.Page - 1, pageSize : searchModel.PageSize); var model = new PushNotificationListModel { Data = pushNotifications.Select(pushNotification => { var pushNotificationsModel = pushNotification.ToModel <PushNotificationModel>(); pushNotificationsModel.Title = pushNotification.Title; pushNotificationsModel.Description = pushNotification.Desc; pushNotificationsModel.StockTakeNo = pushNotification.StockTakeNo; pushNotificationsModel.CategoryName = pushNotification.NotificationCategory?.Name; if (pushNotificationsModel.StockTakeNo != 0) { pushNotificationsModel.StoreName = GetStockTakeStore(pushNotificationsModel.StockTakeNo); pushNotificationsModel.CategoryName += " (" + pushNotificationsModel.StockTakeNo + ")"; } else { pushNotificationsModel.StoreName = String.Join(", ", pushNotification.PushNotificationStores.Select(store => store.Store.P_BranchNo + " - " + store.Store.P_Name)); } pushNotificationsModel.CreatedOn = _dateTimeHelper.ConvertToUserTime(pushNotification.CreatedOnUtc, DateTimeKind.Utc); pushNotificationsModel.LastActivityDate = _dateTimeHelper.ConvertToUserTime(pushNotification.ModifiedOnUtc.GetValueOrDefault(DateTime.UtcNow), DateTimeKind.Utc); return(pushNotificationsModel); }), Total = pushNotifications.TotalCount }; // sort if (searchModel.Sort != null && searchModel.Sort.Any()) { foreach (var s in searchModel.Sort) { model.Data = await model.Data.Sort(s.Field, s.Dir); } } // filter if (searchModel.Filter != null && searchModel.Filter.Filters != null && searchModel.Filter.Filters.Any()) { var filter = searchModel.Filter; model.Data = await model.Data.Filter(filter); model.Total = model.Data.Count(); } return(model); }