private async Task PrepareOrder(CustomerOrderListModel model, GetCustomerOrderList request)
        {
            if (request.Command.PageSize <= 0)
            {
                request.Command.PageSize = _orderSettings.PageSize;
            }
            if (request.Command.PageNumber <= 0)
            {
                request.Command.PageNumber = 1;
            }
            if (request.Command.PageSize == 0)
            {
                request.Command.PageSize = 10;
            }

            var customerId = string.Empty;
            var ownerId    = string.Empty;

            if (!await _groupService.IsOwner(request.Customer))
            {
                customerId = request.Customer.Id;
            }
            else
            {
                ownerId = request.Customer.Id;
            }

            var orders = await _orderService.SearchOrders(
                customerId : customerId,
                ownerId : ownerId,
                storeId : request.Store.Id,
                pageIndex : request.Command.PageNumber - 1,
                pageSize : request.Command.PageSize);

            model.PagingContext.LoadPagedList(orders);

            foreach (var order in orders)
            {
                var status = await _orderStatusService.GetByStatusId(order.OrderStatusId);

                var orderModel = new CustomerOrderListModel.OrderDetailsModel
                {
                    Id                         = order.Id,
                    OrderNumber                = order.OrderNumber,
                    OrderCode                  = order.Code,
                    CustomerEmail              = order.BillingAddress?.Email,
                    CreatedOn                  = _dateTimeService.ConvertToUserTime(order.CreatedOnUtc, DateTimeKind.Utc),
                    OrderStatusId              = order.OrderStatusId,
                    OrderStatus                = status?.Name,
                    PaymentStatus              = order.PaymentStatusId.GetTranslationEnum(_translationService, request.Language.Id),
                    ShippingStatus             = order.ShippingStatusId.GetTranslationEnum(_translationService, request.Language.Id),
                    IsMerchandiseReturnAllowed = await _mediator.Send(new IsMerchandiseReturnAllowedQuery()
                    {
                        Order = order
                    })
                };
                orderModel.OrderTotal = await _priceFormatter.FormatPrice(order.OrderTotal, order.CustomerCurrencyCode, false, request.Language);

                model.Orders.Add(orderModel);
            }
        }
Ejemplo n.º 2
0
        public async Task <OrderDetailsModel> Handle(GetOrderDetails request, CancellationToken cancellationToken)
        {
            var model = new OrderDetailsModel();

            model.Id                         = request.Order.Id;
            model.OrderNumber                = request.Order.OrderNumber;
            model.OrderCode                  = request.Order.Code;
            model.CreatedOn                  = _dateTimeService.ConvertToUserTime(request.Order.CreatedOnUtc, DateTimeKind.Utc);
            model.OrderStatus                = (await _orderStatusService.GetByStatusId(request.Order.OrderStatusId))?.Name;
            model.IsReOrderAllowed           = _orderSettings.IsReOrderAllowed;
            model.IsMerchandiseReturnAllowed = await _mediator.Send(new IsMerchandiseReturnAllowedQuery()
            {
                Order = request.Order
            });

            model.PdfInvoiceDisabled = _pdfSettings.DisablePdfInvoicesForPendingOrders && request.Order.OrderStatusId == (int)OrderStatusSystem.Pending;
            model.ShowAddOrderNote   = _orderSettings.AllowCustomerToAddOrderNote;

            //shipping info
            await PrepareShippingInfo(request, model);

            //billing info
            model.BillingAddress = await _mediator.Send(new GetAddressModel()
            {
                Language          = request.Language,
                Model             = null,
                Address           = request.Order.BillingAddress,
                ExcludeProperties = false,
            });

            //VAT number
            model.VatNumber = request.Order.VatNumber;

            //payment method
            await PreparePaymentMethod(request, model);

            //order subtotal
            await PrepareOrderTotal(request, model);

            //tax
            await PrepareTax(request, model);

            //discount (applied to order total)
            await PrepareDiscount(request, model);

            //gift vouchers
            await PrepareGiftVouchers(request, model);

            //loyalty points
            await PrepareLoyaltyPoints(request, model);

            //checkout attributes
            model.CheckoutAttributeInfo = request.Order.CheckoutAttributeDescription;

            //order notes
            await PrepareOrderNotes(request, model);

            //allow cancel order
            if (_orderSettings.UserCanCancelUnpaidOrder)
            {
                if (request.Order.OrderStatusId == (int)OrderStatusSystem.Pending && request.Order.PaymentStatusId == Domain.Payments.PaymentStatus.Pending &&
                    (request.Order.ShippingStatusId == ShippingStatus.ShippingNotRequired || request.Order.ShippingStatusId == ShippingStatus.Pending))
                {
                    model.UserCanCancelUnpaidOrder = true;
                }
            }

            //purchased products
            await PrepareOrderItems(request, model);

            return(model);
        }