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);
                    }
                }
            }
        }
Exemple #2
0
        public async Task <CustomerMerchandiseReturnsModel> Handle(GetMerchandiseReturns request, CancellationToken cancellationToken)
        {
            var model = new CustomerMerchandiseReturnsModel();

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

            if (await _groupService.IsOwner(request.Customer))
            {
                query.OwnerId = request.Customer.Id;
            }
            else
            {
                query.CustomerId = request.Customer.Id;
            }

            var merchandiseReturns = await _mediator.Send(query);

            foreach (var merchandiseReturn in merchandiseReturns)
            {
                var order = await _orderService.GetOrderById(merchandiseReturn.OrderId);

                double total = 0;
                foreach (var rrItem in merchandiseReturn.MerchandiseReturnItems)
                {
                    var orderItem = order.OrderItems.Where(x => x.Id == rrItem.OrderItemId).First();

                    if (order.CustomerTaxDisplayTypeId == TaxDisplayType.IncludingTax)
                    {
                        //including tax
                        total += orderItem.UnitPriceInclTax * rrItem.Quantity;
                    }
                    else
                    {
                        //excluding tax
                        total += orderItem.UnitPriceExclTax * rrItem.Quantity;
                    }
                }

                var itemModel = new CustomerMerchandiseReturnsModel.MerchandiseReturnModel
                {
                    Id                      = merchandiseReturn.Id,
                    ReturnNumber            = merchandiseReturn.ReturnNumber,
                    MerchandiseReturnStatus = merchandiseReturn.MerchandiseReturnStatus.GetTranslationEnum(_translationService, request.Language.Id),
                    CreatedOn               = _dateTimeService.ConvertToUserTime(merchandiseReturn.CreatedOnUtc, DateTimeKind.Utc),
                    ProductsCount           = merchandiseReturn.MerchandiseReturnItems.Sum(x => x.Quantity),
                    ReturnTotal             = _priceFormatter.FormatPrice(total)
                };

                model.Items.Add(itemModel);
            }

            return(model);
        }
Exemple #3
0
        public Task <IQueryable <MerchandiseReturn> > Handle(GetMerchandiseReturnQuery request, CancellationToken cancellationToken)
        {
            var query = from p in _merchandiseReturnRepository.Table
                        select p;

            if (!string.IsNullOrEmpty(request.StoreId))
            {
                query = query.Where(rr => request.StoreId == rr.StoreId);
            }

            if (!string.IsNullOrEmpty(request.CustomerId))
            {
                query = query.Where(rr => request.CustomerId == rr.CustomerId);
            }

            if (!string.IsNullOrEmpty(request.VendorId))
            {
                query = query.Where(rr => request.VendorId == rr.VendorId);
            }

            if (!string.IsNullOrEmpty(request.OwnerId))
            {
                query = query.Where(rr => request.OwnerId == rr.OwnerId);
            }

            if (request.Rs.HasValue)
            {
                var returnStatusId = (int)request.Rs.Value;
                query = query.Where(rr => rr.MerchandiseReturnStatusId == returnStatusId);
            }
            if (!string.IsNullOrEmpty(request.OrderItemId))
            {
                query = query.Where(rr => rr.MerchandiseReturnItems.Any(x => x.OrderItemId == request.OrderItemId));
            }

            if (request.CreatedFromUtc.HasValue)
            {
                query = query.Where(rr => request.CreatedFromUtc.Value <= rr.CreatedOnUtc);
            }

            if (request.CreatedToUtc.HasValue)
            {
                query = query.Where(rr => request.CreatedToUtc.Value >= rr.CreatedOnUtc);
            }

            query = query.OrderByDescending(rr => rr.CreatedOnUtc);

            return(Task.FromResult(query));
        }
        /// <summary>
        /// Search merchandise returns
        /// </summary>
        /// <param name="storeId">Store identifier; 0 to load all entries</param>
        /// <param name="customerId">Customer identifier; null to load all entries</param>
        /// <param name="orderItemId">Order item identifier; 0 to load all entries</param>
        /// <param name="vendorId">Vendor identifier</param>
        /// <param name="ownerId">Owner identifier</param>
        /// <param name="createdFromUtc">Created date from (UTC); null to load all records</param>
        /// <param name="createdToUtc">Created date to (UTC); null to load all records</param>
        /// <param name="rs">Merchandise return status; null to load all entries</param>
        /// <param name="pageIndex">Page index</param>
        /// <param name="pageSize">Page size</param>
        /// <returns>Merchandise returns</returns>
        public virtual async Task <IPagedList <MerchandiseReturn> > SearchMerchandiseReturns(string storeId     = "", string customerId = "",
                                                                                             string orderItemId = "", string vendorId   = "", string ownerId                    = "", MerchandiseReturnStatus?rs = null,
                                                                                             int pageIndex      = 0, int pageSize       = int.MaxValue, DateTime?createdFromUtc = null, DateTime?createdToUtc    = null)
        {
            var model = new GetMerchandiseReturnQuery()
            {
                CreatedFromUtc = createdFromUtc,
                CreatedToUtc   = createdToUtc,
                PageIndex      = pageIndex,
                PageSize       = pageSize,
                CustomerId     = customerId,
                VendorId       = vendorId,
                OwnerId        = ownerId,
                StoreId        = storeId,
                OrderItemId    = orderItemId,
                Rs             = rs,
            };

            var query = await _mediator.Send(model);

            return(await PagedList <MerchandiseReturn> .Create(query, pageIndex, pageSize));
        }