/// <summary> /// Prepare paged country report list model /// </summary> /// <param name="searchModel">Country report search model</param> /// <returns>Country report list model</returns> public virtual async Task <CountryReportListModel> PrepareCountrySalesListModelAsync(CountryReportSearchModel searchModel) { if (searchModel == null) { throw new ArgumentNullException(nameof(searchModel)); } //get parameters to filter countryReports var orderStatus = searchModel.OrderStatusId > 0 ? (OrderStatus?)searchModel.OrderStatusId : null; var paymentStatus = searchModel.PaymentStatusId > 0 ? (PaymentStatus?)searchModel.PaymentStatusId : null; var startDateValue = !searchModel.StartDate.HasValue ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.StartDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()); var endDateValue = !searchModel.EndDate.HasValue ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(searchModel.EndDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()).AddDays(1); //get items var items = (await _orderReportService.GetCountryReportAsync(os: orderStatus, ps: paymentStatus, startTimeUtc: startDateValue, endTimeUtc: endDateValue)).ToPagedList(searchModel); //prepare list model var model = await new CountryReportListModel().PrepareToGridAsync(searchModel, items, () => { return(items.SelectAwait(async item => { //fill in model values from the entity var countryReportModel = new CountryReportModel { TotalOrders = item.TotalOrders }; //fill in additional values (not existing in the entity) countryReportModel.SumOrders = await _priceFormatter.FormatPriceAsync(item.SumOrders, true, false); countryReportModel.CountryName = (await _countryService.GetCountryByIdAsync(item.CountryId ?? 0))?.Name; return countryReportModel; })); }); return(model); }