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); } } } }
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); }
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)); }