public OrderReportModel GetOrderReport(GetReportRequest Request) { var Response = new OrderReportModel(); Response.AllOrders = _unitOfWork.RepositoryFactory <Order>() .GetMany(q => q.DateTime.Value.Date >= Request.From && q.DateTime.Value.Date <= Request.To).Select(q => new OrderDTO { AllOrder = q.Order_Meals.Select(w => new OrderMealModel { AddOns = (w.IsCombo ? "Compo 3LE" : "") + (w.IsSpicy ? " Spicy 3LE" : ""), Item = w.Meal.Name, Item_Id = w.Meal_Id, Price = (int)w.Meal.Price, TotalPrice = (((int)w.Meal.Price + (w.IsCombo ? 3 : 0) + (w.IsSpicy ? 3 : 0)) * w.Q), Q = w.Q }).ToList(), Date = q.DateTime.Value.ToShortTimeString() + ' ' + q.DateTime.Value.ToShortDateString(), OrderTotalPrice = (int)q.Order_Meals.Sum(w => ((w.Meal.Price + (w.IsCombo ? 3:0) + (w.IsSpicy ? 3 : 0)) * w.Q)), }).ToList(); Response.OverAllTotalPrice = Response.AllOrders.Sum(q => q.OrderTotalPrice); Response.OverAllTotalNumberOfMeals = Response.AllOrders.Sum(q => q.AllOrder.Sum(w => w.Q)); Response.OverAllTotalNumberOfOrders = Response.AllOrders.Count(); return(Response); }
/// <summary> /// Создает представление отчета из определенных параметров. /// </summary> /// <param name="report">Код отчета.</param> /// <param name="order">Код заказа.</param> /// <returns>Результат.</returns> public ActionResult Index(string report, string order) { _logger.InfoFormat("Страт генерации отчета {0} для заказа {1}", report, order); var model = new OrderReportModel(); try { var token = GetToken(); Guid reportID; if (Guid.TryParse(report, out reportID)) { Guid orderId; if (Guid.TryParse(order, out orderId)) { model.Report = RemontinkaServer.Instance.EntitiesFacade.CreateRepairOrderReport(token, reportID, orderId); var reportTitle = string.Empty; var orderNumber = RemontinkaServer.Instance.DataStore.GetRepairOrderNumber(orderId); var reportObj = RemontinkaServer.Instance.EntitiesFacade.GetCustomReportItem(token, reportID); if (reportObj != null) { reportTitle = reportObj.Title; } //if ViewBag.Title = string.Format("{0}, номер заказа \"{1}\"", reportTitle, orderNumber); } //if else { model.Error = "Неверный формат кода заказа"; } //else } //if else { model.Error = "Неверный формат кода отчета"; } //else } catch (Exception ex) { var innerException = string.Empty; if (ex.InnerException != null) { innerException = ex.InnerException.Message; } //if _logger.ErrorFormat("Во время генерации отчета {0} для заказа {1} произошла ошибка {2} {3} {4} {5}", report, order, ex.Message, ex.GetType(), innerException, ex.StackTrace); } //try return(View(model)); }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Load"/> event. /// </summary> /// <param name="e">The <see cref="T:System.EventArgs"/> object that contains the event data.</param> protected override void OnLoad(EventArgs e) { Debug.ArgumentNotNull(e, "e"); base.OnLoad(e); var repository = Ecommerce.Context.Entity.Resolve <MerchantOrderManager>(); var reportFactory = Ecommerce.Context.Entity.Resolve <StiReportFactory>(); this.Model = Ecommerce.Context.Entity.Resolve <OrderReportModel>(); this.presenter = new PrintOrderPresenter(this, repository, reportFactory); this.presenter.Initialize(); }
public ActionResult GetOrderReportList(DataSourceRequest command, OrderReportModel model) { DateTime?startDateValue = (model.StartDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, _dateTimeHelper.CurrentTimeZone); DateTime?endDateValue = (model.EndDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1); OrderStatus?orderStatus = model.OrderStatusId > 0 ? (OrderStatus?)(model.OrderStatusId) : null; orderStatus = OrderStatus.Complete; //load orders var orders = _orderService.SearchOrders(0, 0, 0, 0, 0, startDateValue, endDateValue, orderStatus, null, null, null, null, command.Page - 1, command.PageSize); var gridModel = new DataSourceResult { Data = orders.Select(x => { return(new OrderModel() { Id = x.Id, OrderTotal = _priceFormatter.FormatPrice(x.OrderTotal, true, false), OrderStatus = x.OrderStatus.GetLocalizedEnum(_localizationService, _workContext), CustomerEmail = x.BillingAddress.Email, CustomerFullName = string.Format("{0} {1}", x.BillingAddress.FirstName, x.BillingAddress.LastName), CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc) }); }), Total = orders.TotalCount, }; //summary report var reportSummary = _orderReportService.GetOrderAverageReportLine(0, 0, orderStatus, null, null, startDateValue, endDateValue, null); gridModel.ExtraData = new OrderAggreratorModel() { aggregatortotal = _priceFormatter.FormatPrice(reportSummary.SumOrders, true, false), avgOrderTotal = _priceFormatter.FormatPrice(reportSummary.SumOrders / gridModel.Total, true, false) }; return(Json(gridModel)); }
public IList <OrderReportModel> CreateOrderReportModels(out int totalResults, IList <Order> orders, GroupUnit groupBy, int page = 1, int count = 15) { totalResults = 0; if (!orders.Any()) { return(new List <OrderReportModel>()); } orders = orders.OrderBy(x => x.CreatedOn).ToList(); IEnumerable <IGrouping <string, Order> > groupedOrders; List <string> allValidGroupNames = null; var minDate = orders.Min(x => x.CreatedOn); var maxDate = orders.Max(x => x.CreatedOn); var allDates = DateTimeHelper.DatesBetween(minDate, maxDate); var currencies = orders.Select(x => x.CurrencyCode.ToUpperInvariant()).Distinct().ToList(); switch (groupBy) { case GroupUnit.Days: groupedOrders = orders.GroupBy(x => x.CreatedOn.ToFormattedString() + " - " + x.CurrencyCode.ToUpperInvariant()); allValidGroupNames = allDates.SelectMany(x => currencies.Select(y => x.ToFormattedString() + " - " + y)).ToList(); break; case GroupUnit.Months: groupedOrders = orders.GroupBy(x => $"{x.CreatedOn.GetMonthName()} {x.CreatedOn.Year} - {x.CurrencyCode.ToUpperInvariant()}"); allValidGroupNames = allDates .SelectMany(x => currencies.Select(y => $"{x.GetMonthName()} {x.Year} - {y}")).Distinct().ToList(); break; case GroupUnit.Years: groupedOrders = orders.GroupBy(x => $"{x.CreatedOn.Year} - {x.CurrencyCode.ToUpperInvariant()}"); allValidGroupNames = allDates.SelectMany(x => currencies.Select(y => $"{x.Year} - {y}")).Distinct() .ToList(); break; case GroupUnit.Weeks: default: minDate.GetWeekRangeDates(out var minWeekDate, out var maxWeekDate); var weekStartDate = minWeekDate; allValidGroupNames = new List <string>(); while (weekStartDate < maxDate) { var weekStr = $"{weekStartDate.ToFormattedString()} - {weekStartDate.AddDays(6).ToFormattedString()}"; foreach (var currency in currencies) { allValidGroupNames.Add($"{weekStr} - {currency}"); } //next week weekStartDate = weekStartDate.AddDays(7); } groupedOrders = orders.GroupBy(x => { x.CreatedOn.GetWeekRangeDates(out var startDate, out var endDate); return($"{startDate.ToFormattedString()} - {endDate.ToFormattedString()} - {x.CurrencyCode.ToUpperInvariant()}"); }); break; } var groupedOrdersAsList = groupedOrders.ToList(); var orderReports = new List <OrderReportModel>(); foreach (var groupName in allValidGroupNames) { var reportModel = new OrderReportModel() { GroupName = groupName, TotalOrders = 0, TotalProducts = 0, TotalAmount = 0, CurrencyCode = groupName.Substring(groupName.Length - 4).Trim() }; var group = groupedOrdersAsList.FirstOrDefault(x => x.Key == groupName); if (group != null) { var groupOrders = group.ToList(); reportModel.TotalOrders = groupOrders.Count; reportModel.TotalProducts = groupOrders.SelectMany(x => x.OrderItems).Count(); reportModel.TotalAmount = groupOrders.Sum(x => x.OrderTotal); } orderReports.Add(reportModel); } totalResults = orderReports.Count; return(orderReports.Skip(count * (page - 1)).Take(count).ToList()); }