コード例 #1
0
ファイル: OrderController.Get.cs プロジェクト: p8b/OSnack
        public async Task <IActionResult> All(
            int selectedPage,
            int maxNumberPerItemsPage,
            string searchValue   = "",
            string filterStatus  = CoreConst.GetAllRecords,
            bool isSortAsce      = true,
            string sortName      = "Date",
            string disputeFilter = CoreConst.GetAllRecords)
        {
            try
            {
                _ = bool.TryParse(disputeFilter, out bool boolDisputeFilter);


                bool closeDisput = await _DbContext.Orders.Include(o => o.Dispute)
                                   .AnyAsync(o => !o.Dispute.Status).ConfigureAwait(false);

                bool openDisput = await _DbContext.Orders.Include(o => o.Dispute)
                                  .AnyAsync(o => o.Dispute.Status).ConfigureAwait(false);


                int totalCount = await _DbContext.Orders
                                 .Include(o => o.User)
                                 .Include(o => o.Payment)
                                 .Include(o => o.Dispute)
                                 .Where(o => filterStatus.Equals(CoreConst.GetAllRecords) || o.Status.Equals((OrderStatusType)Enum.Parse(typeof(OrderStatusType), filterStatus, true)))
                                 .Where(o => disputeFilter.Equals(CoreConst.GetAllRecords) || o.Dispute.Status == boolDisputeFilter)
                                 .CountAsync(o => searchValue.Equals(CoreConst.GetAllRecords) || o.Name.Contains(searchValue) ||
                                             o.User.FirstName.Contains(searchValue) ||
                                             o.User.Surname.Contains(searchValue) ||
                                             o.User.Email.Contains(searchValue) ||
                                             o.Id.Contains(searchValue) ||
                                             o.Postcode.Contains(searchValue) ||
                                             o.Payment.Email.Contains(searchValue) ||
                                             o.Payment.Reference.Contains(searchValue))
                                 .ConfigureAwait(false);

                List <OrderStatusType> availebeStatusTypes = await _DbContext.Orders
                                                             .Select(o => o.Status)
                                                             .Distinct()
                                                             .ToListAsync()
                                                             .ConfigureAwait(false);

                List <Order> list = await _DbContext.Orders
                                    .Include(o => o.User)
                                    .Include(o => o.Payment)
                                    .Include(o => o.Dispute)
                                    .ThenInclude(c => c.Messages)
                                    .Where(o => filterStatus.Equals(CoreConst.GetAllRecords) || o.Status.Equals((OrderStatusType)Enum.Parse(typeof(OrderStatusType), filterStatus, true)))
                                    .Where(o => disputeFilter.Equals(CoreConst.GetAllRecords) || o.Dispute.Status == boolDisputeFilter)
                                    .Where(o => searchValue.Equals(CoreConst.GetAllRecords) || o.Name.Contains(searchValue) ||
                                           o.User.FirstName.Contains(searchValue) ||
                                           o.User.Surname.Contains(searchValue) ||
                                           o.User.Email.Contains(searchValue) ||
                                           o.Id.Contains(searchValue) ||
                                           o.Postcode.Contains(searchValue) ||
                                           o.Payment.Email.Contains(searchValue) ||
                                           o.Payment.Reference.Contains(searchValue))
                                    .OrderByDynamic(sortName, isSortAsce)
                                    .Skip((selectedPage - 1) * maxNumberPerItemsPage)
                                    .Take(maxNumberPerItemsPage)
                                    .Include(o => o.OrderItems)
                                    .ThenInclude(oi => oi.Product)
                                    .ToListAsync()
                                    .ConfigureAwait(false);

                return(Ok(new MultiResult <List <Order>, List <OrderStatusType>, int, DisputeFilterTypes>(list, availebeStatusTypes, totalCount,
                                                                                                          AppFunc.GetDisputeFilterTypes(closeDisput, openDisput),
                                                                                                          CoreFunc.GetCustomAttributeTypedArgument(this.ControllerContext))));
            }
            catch (Exception ex)
            {
                CoreFunc.Error(ref ErrorsList, _LoggingService.LogException(Request.Path, ex, User));
                return(StatusCode(417, ErrorsList));
            }
        }