private async Task PrepareItems(GetMerchandiseReturn request, MerchandiseReturnModel model)
        {
            var shipments = await _shipmentService.GetShipmentsByOrder(request.Order.Id);

            foreach (var orderItem in request.Order.OrderItems)
            {
                var qtyDelivery = shipments.Where(x => x.DeliveryDateUtc.HasValue).SelectMany(x => x.ShipmentItems).Where(x => x.OrderItemId == orderItem.Id).Sum(x => x.Quantity);

                var query = new GetMerchandiseReturnQuery()
                {
                    StoreId = request.Store.Id,
                };

                var merchandiseReturns = await _merchandiseReturnService.SearchMerchandiseReturns(orderItemId : orderItem.Id);

                int qtyReturn = 0;

                foreach (var rr in merchandiseReturns)
                {
                    foreach (var rrItem in rr.MerchandiseReturnItems)
                    {
                        qtyReturn += rrItem.Quantity;
                    }
                }

                var product = await _productService.GetProductByIdIncludeArch(orderItem.ProductId);

                if (!product.NotReturnable)
                {
                    var orderItemModel = new MerchandiseReturnModel.OrderItemModel
                    {
                        Id            = orderItem.Id,
                        ProductId     = orderItem.ProductId,
                        ProductName   = product.GetTranslation(x => x.Name, _workContext.WorkingLanguage.Id),
                        ProductSeName = product.GetSeName(_workContext.WorkingLanguage.Id),
                        AttributeInfo = orderItem.AttributeDescription,
                        VendorId      = orderItem.VendorId,
                        VendorName    = string.IsNullOrEmpty(orderItem.VendorId) ? "" : (await _vendorService.GetVendorById(orderItem.VendorId))?.Name,
                        Quantity      = qtyDelivery - qtyReturn,
                    };
                    if (orderItemModel.Quantity > 0)
                    {
                        model.Items.Add(orderItemModel);
                    }
                    //unit price
                    if (request.Order.CustomerTaxDisplayTypeId == TaxDisplayType.IncludingTax)
                    {
                        //including tax
                        orderItemModel.UnitPrice = await _priceFormatter.FormatPrice(orderItem.UnitPriceInclTax, request.Order.CustomerCurrencyCode, _workContext.WorkingLanguage, true);
                    }
                    else
                    {
                        //excluding tax
                        orderItemModel.UnitPrice = await _priceFormatter.FormatPrice(orderItem.UnitPriceExclTax, request.Order.CustomerCurrencyCode, _workContext.WorkingLanguage, false);
                    }
                }
            }
        }
Esempio n. 2
0
        public virtual async Task <(IList <MerchandiseReturnModel> merchandiseReturnModels, int totalCount)> PrepareMerchandiseReturnModel(MerchandiseReturnListModel model, int pageIndex, int pageSize)
        {
            string customerId = string.Empty;

            if (!string.IsNullOrEmpty(model.SearchCustomerEmail))
            {
                var customer = await _customerService.GetCustomerByEmail(model.SearchCustomerEmail.ToLowerInvariant());

                if (customer != null)
                {
                    customerId = customer.Id;
                }
                else
                {
                    customerId = "00000000-0000-0000-0000-000000000000";
                }
            }
            DateTime?startDateValue = (model.StartDate == null) ? null
                : (DateTime?)_dateTimeService.ConvertToUtcTime(model.StartDate.Value, _dateTimeService.CurrentTimeZone);

            DateTime?endDateValue = (model.EndDate == null) ? null
                : (DateTime?)_dateTimeService.ConvertToUtcTime(model.EndDate.Value, _dateTimeService.CurrentTimeZone);

            var merchandiseReturns = await _merchandiseReturnService.SearchMerchandiseReturns(model.StoreId,
                                                                                              customerId,
                                                                                              "",
                                                                                              _workContext.CurrentVendor?.Id,
                                                                                              "",
                                                                                              (model.SearchMerchandiseReturnStatusId >= 0 ? (MerchandiseReturnStatus?)model.SearchMerchandiseReturnStatusId : null),
                                                                                              pageIndex - 1,
                                                                                              pageSize,
                                                                                              startDateValue,
                                                                                              endDateValue);

            var merchandiseReturnModels = new List <MerchandiseReturnModel>();

            foreach (var rr in merchandiseReturns)
            {
                var rrmodel = new MerchandiseReturnModel();
                merchandiseReturnModels.Add(await PrepareMerchandiseReturnModel(rrmodel, rr, true));
            }
            return(merchandiseReturnModels, merchandiseReturns.TotalCount);
        }