public ActionResult ReturnRequestSubmit(int orderId, SubmitReturnRequestModel model, FormCollection form) { var order = _orderService.GetOrderById(orderId); if (order == null || order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId) return new HttpUnauthorizedResult(); if (!_orderProcessingService.IsReturnRequestAllowed(order)) return RedirectToRoute("HomePage"); int count = 0; foreach (var opv in order.OrderProductVariants) { int quantity = 0; //parse quantity foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("quantity{0}", opv.Id), StringComparison.InvariantCultureIgnoreCase)) { int.TryParse(form[formKey], out quantity); break; } if (quantity > 0) { var rr = new ReturnRequest() { StoreId = _storeContext.CurrentStore.Id, OrderProductVariantId = opv.Id, Quantity = quantity, CustomerId = _workContext.CurrentCustomer.Id, ReasonForReturn = model.ReturnReason, RequestedAction = model.ReturnAction, CustomerComments = model.Comments, StaffNotes = string.Empty, ReturnRequestStatus = ReturnRequestStatus.Pending, CreatedOnUtc = DateTime.UtcNow, UpdatedOnUtc = DateTime.UtcNow }; _workContext.CurrentCustomer.ReturnRequests.Add(rr); _customerService.UpdateCustomer(_workContext.CurrentCustomer); //notify store owner here (email) _workflowMessageService.SendNewReturnRequestStoreOwnerNotification(rr, opv, _localizationSettings.DefaultAdminLanguageId); count++; } } model = PrepareReturnRequestModel(model, order); if (count > 0) model.Result = _localizationService.GetResource("ReturnRequests.Submitted"); else model.Result = _localizationService.GetResource("ReturnRequests.NoItemsSubmitted"); return View(model); }
public ActionResult ReturnRequest(int orderId) { var order = _orderService.GetOrderById(orderId); if (order == null || order.Deleted || _workContext.CurrentCustomer.Id != order.CustomerId) return new HttpUnauthorizedResult(); if (!_orderProcessingService.IsReturnRequestAllowed(order)) return RedirectToRoute("HomePage"); var model = new SubmitReturnRequestModel(); model = PrepareReturnRequestModel(model, order); return View(model); }
protected SubmitReturnRequestModel PrepareReturnRequestModel(SubmitReturnRequestModel model, Order order) { if (order == null) throw new ArgumentNullException("order"); if (model == null) throw new ArgumentNullException("model"); model.OrderId = order.Id; //return reasons if (_orderSettings.ReturnRequestReasons != null) foreach (var rrr in _orderSettings.ReturnRequestReasons) { model.AvailableReturnReasons.Add(new SelectListItem() { Text = rrr, Value = rrr }); } //return actions if (_orderSettings.ReturnRequestActions != null) foreach (var rra in _orderSettings.ReturnRequestActions) { model.AvailableReturnActions.Add(new SelectListItem() { Text = rra, Value = rra }); } //products var orderProductVariants = _orderService.GetAllOrderProductVariants(order.Id, null, null, null, null, null, null); foreach (var opv in orderProductVariants) { var opvModel = new SubmitReturnRequestModel.OrderProductVariantModel() { Id = opv.Id, ProductId = opv.ProductVariant.ProductId, ProductSeName = opv.ProductVariant.Product.GetSeName(), AttributeInfo = opv.AttributeDescription, Quantity = opv.Quantity }; //product name if (!String.IsNullOrEmpty(opv.ProductVariant.GetLocalized(x => x.Name))) opvModel.ProductName = string.Format("{0} ({1})", opv.ProductVariant.Product.GetLocalized(x => x.Name), opv.ProductVariant.GetLocalized(x => x.Name)); else opvModel.ProductName = opv.ProductVariant.Product.GetLocalized(x => x.Name); model.Items.Add(opvModel); //unit price switch (order.CustomerTaxDisplayType) { case TaxDisplayType.ExcludingTax: { var opvUnitPriceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(opv.UnitPriceExclTax, order.CurrencyRate); opvModel.UnitPrice = _priceFormatter.FormatPrice(opvUnitPriceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, false); } break; case TaxDisplayType.IncludingTax: { var opvUnitPriceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(opv.UnitPriceInclTax, order.CurrencyRate); opvModel.UnitPrice = _priceFormatter.FormatPrice(opvUnitPriceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, true); } break; } } return model; }
protected virtual SubmitReturnRequestModel PrepareReturnRequestModel(SubmitReturnRequestModel model, Order order) { if (order == null) throw new ArgumentNullException("order"); if (model == null) throw new ArgumentNullException("model"); model.OrderId = order.ID; //return reasons if (_orderSettings.ReturnRequestReasons != null) foreach (var rrr in _orderSettings.ReturnRequestReasons) { model.AvailableReturnReasons.Add(new SelectListItem { Text = rrr, Value = rrr }); } //return actions if (_orderSettings.ReturnRequestActions != null) foreach (var rra in _orderSettings.ReturnRequestActions) { model.AvailableReturnActions.Add(new SelectListItem { Text = rra, Value = rra }); } //products var orderItems = _orderService.GetAllOrderItems(order.ID, null, null, null, null, null, null); foreach (var orderItem in orderItems) { var orderItemModel = new SubmitReturnRequestModel.OrderItemModel { Id = orderItem.ID, ProductId = orderItem.Product.ID, ProductName = orderItem.Product.GetLocalized(x => x.Name), ProductSeName = orderItem.Product.GetSeName(), AttributeInfo = orderItem.AttributeDescription, Quantity = orderItem.Quantity }; model.Items.Add(orderItemModel); //unit price if (order.CustomerTaxDisplayType == TaxDisplayType.IncludingTax) { //including tax var unitPriceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceInclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, true); } else { //excluding tax var unitPriceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceExclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, false); } } return model; }
protected virtual SubmitReturnRequestModel PrepareReturnRequestModel(SubmitReturnRequestModel model, Order order) { if (order == null) throw new ArgumentNullException("order"); if (model == null) throw new ArgumentNullException("model"); model.OrderId = order.Id; //return reasons model.AvailableReturnReasons = _cacheManager.Get(string.Format(ModelCacheEventConsumer.RETURNREQUESTREASONS_MODEL_KEY, _workContext.WorkingLanguage.Id), () => { var reasons = new List<SubmitReturnRequestModel.ReturnRequestReasonModel>(); foreach (var rrr in _returnRequestService.GetAllReturnRequestReasons()) reasons.Add(new SubmitReturnRequestModel.ReturnRequestReasonModel() { Id = rrr.Id, Name = rrr.GetLocalized(x => x.Name) }); return reasons; }); //return actions model.AvailableReturnActions = _cacheManager.Get(string.Format(ModelCacheEventConsumer.RETURNREQUESTACTIONS_MODEL_KEY, _workContext.WorkingLanguage.Id), () => { var actions = new List<SubmitReturnRequestModel.ReturnRequestActionModel>(); foreach (var rra in _returnRequestService.GetAllReturnRequestActions()) actions.Add(new SubmitReturnRequestModel.ReturnRequestActionModel() { Id = rra.Id, Name = rra.GetLocalized(x => x.Name) }); return actions; }); //returnable products var orderItems = order.OrderItems.Where(oi => !oi.Product.NotReturnable); foreach (var orderItem in orderItems) { var orderItemModel = new SubmitReturnRequestModel.OrderItemModel { Id = orderItem.Id, ProductId = orderItem.Product.Id, ProductName = orderItem.Product.GetLocalized(x => x.Name), ProductSeName = orderItem.Product.GetSeName(), AttributeInfo = orderItem.AttributeDescription, Quantity = orderItem.Quantity }; model.Items.Add(orderItemModel); //unit price if (order.CustomerTaxDisplayType == TaxDisplayType.IncludingTax) { //including tax var unitPriceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceInclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, true); } else { //excluding tax var unitPriceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceExclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, false); } } return model; }