public ActionResult RefundOrderOffline(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) throw new ArgumentException("No order found with the specified id"); try { _orderProcessingService.RefundOffline(order); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); } catch (Exception exc) { //error var model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification(exc, false); return View(model); } }
protected void PrepareOrderDetailsModel(OrderModel model, Order order) { if (order == null) throw new ArgumentNullException("order"); if (model == null) throw new ArgumentNullException("model"); model.Id = order.Id; model.OrderStatus = order.OrderStatus.GetLocalizedEnum(_localizationService, _workContext); model.OrderGuid = order.OrderGuid; model.CustomerId = order.CustomerId; model.CustomerIp = order.CustomerIp; model.VatNumber = order.VatNumber; model.CreatedOn = _dateTimeHelper.ConvertToUserTime(order.CreatedOnUtc, DateTimeKind.Utc); model.DisplayPdfInvoice = _pdfSettings.Enabled; model.AllowCustomersToSelectTaxDisplayType = _taxSettings.AllowCustomersToSelectTaxDisplayType; model.TaxDisplayType = _taxSettings.TaxDisplayType; model.AffiliateId = order.AffiliateId; #region Order totals var primaryStoreCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId); //subtotal model.OrderSubtotalInclTax = _priceFormatter.FormatPrice(order.OrderSubtotalInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.OrderSubtotalExclTax = _priceFormatter.FormatPrice(order.OrderSubtotalExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); model.OrderSubtotalInclTaxValue = order.OrderSubtotalInclTax; model.OrderSubtotalExclTaxValue = order.OrderSubtotalExclTax; //discount (applied to order subtotal) string orderSubtotalDiscountInclTaxStr = _priceFormatter.FormatPrice(order.OrderSubTotalDiscountInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); string orderSubtotalDiscountExclTaxStr = _priceFormatter.FormatPrice(order.OrderSubTotalDiscountExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); if (order.OrderSubTotalDiscountInclTax > decimal.Zero) model.OrderSubTotalDiscountInclTax = orderSubtotalDiscountInclTaxStr; if (order.OrderSubTotalDiscountExclTax > decimal.Zero) model.OrderSubTotalDiscountExclTax = orderSubtotalDiscountExclTaxStr; model.OrderSubTotalDiscountInclTaxValue = order.OrderSubTotalDiscountInclTax; model.OrderSubTotalDiscountExclTaxValue = order.OrderSubTotalDiscountExclTax; //shipping model.OrderShippingInclTax = _priceFormatter.FormatShippingPrice(order.OrderShippingInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.OrderShippingExclTax = _priceFormatter.FormatShippingPrice(order.OrderShippingExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); model.OrderShippingInclTaxValue = order.OrderShippingInclTax; model.OrderShippingExclTaxValue = order.OrderShippingExclTax; //payment method additional fee if (order.PaymentMethodAdditionalFeeInclTax > decimal.Zero) { model.PaymentMethodAdditionalFeeInclTax = _priceFormatter.FormatPaymentMethodAdditionalFee(order.PaymentMethodAdditionalFeeInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.PaymentMethodAdditionalFeeExclTax = _priceFormatter.FormatPaymentMethodAdditionalFee(order.PaymentMethodAdditionalFeeExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); } model.PaymentMethodAdditionalFeeInclTaxValue = order.PaymentMethodAdditionalFeeInclTax; model.PaymentMethodAdditionalFeeExclTaxValue = order.PaymentMethodAdditionalFeeExclTax; //tax model.Tax = _priceFormatter.FormatPrice(order.OrderTax, true, false); SortedDictionary<decimal, decimal> taxRates = order.TaxRatesDictionary; bool displayTaxRates = _taxSettings.DisplayTaxRates && taxRates.Count > 0; bool displayTax = !displayTaxRates; foreach (var tr in order.TaxRatesDictionary) { model.TaxRates.Add(new OrderModel.TaxRate() { Rate = _priceFormatter.FormatTaxRate(tr.Key), Value = _priceFormatter.FormatPrice(tr.Value, true, false), }); } model.DisplayTaxRates = displayTaxRates; model.DisplayTax = displayTax; model.TaxValue = order.OrderTax; model.TaxRatesValue = order.TaxRates; //discount if (order.OrderDiscount > 0) model.OrderTotalDiscount = _priceFormatter.FormatPrice(-order.OrderDiscount, true, false); model.OrderTotalDiscountValue = order.OrderDiscount; //gift cards foreach (var gcuh in order.GiftCardUsageHistory) { model.GiftCards.Add(new OrderModel.GiftCard() { CouponCode = gcuh.GiftCard.GiftCardCouponCode, Amount = _priceFormatter.FormatPrice(-gcuh.UsedValue, true, false), }); } //reward points if (order.RedeemedRewardPointsEntry != null) { model.RedeemedRewardPoints = -order.RedeemedRewardPointsEntry.Points; model.RedeemedRewardPointsAmount = _priceFormatter.FormatPrice(-order.RedeemedRewardPointsEntry.UsedAmount, true, false); } //total model.OrderTotal = _priceFormatter.FormatPrice(order.OrderTotal, true, false); model.OrderTotalValue = order.OrderTotal; //refunded amount if (order.RefundedAmount > decimal.Zero) model.RefundedAmount = _priceFormatter.FormatPrice(order.RefundedAmount, true, false); #endregion #region Payment info if (order.AllowStoringCreditCardNumber) { //card type model.CardType = _encryptionService.DecryptText(order.CardType); //cardholder name model.CardName = _encryptionService.DecryptText(order.CardName); //card number model.CardNumber = _encryptionService.DecryptText(order.CardNumber); //cvv model.CardCvv2 = _encryptionService.DecryptText(order.CardCvv2); //expiry date string cardExpirationMonthDecrypted = _encryptionService.DecryptText(order.CardExpirationMonth); if (!String.IsNullOrEmpty(cardExpirationMonthDecrypted) && cardExpirationMonthDecrypted != "0") model.CardExpirationMonth = cardExpirationMonthDecrypted; string cardExpirationYearDecrypted = _encryptionService.DecryptText(order.CardExpirationYear); if (!String.IsNullOrEmpty(cardExpirationYearDecrypted) && cardExpirationYearDecrypted != "0") model.CardExpirationYear = cardExpirationYearDecrypted; model.AllowStoringCreditCardNumber = true; } else { string maskedCreditCardNumberDecrypted = _encryptionService.DecryptText(order.MaskedCreditCardNumber); if (!String.IsNullOrEmpty(maskedCreditCardNumberDecrypted)) model.CardNumber = maskedCreditCardNumberDecrypted; } //purchase order number (we have to find a better to inject this information because it's related to a certain plugin) var pm = _paymentService.LoadPaymentMethodBySystemName(order.PaymentMethodSystemName); if (pm != null && pm.PluginDescriptor.SystemName.Equals("Payments.PurchaseOrder", StringComparison.InvariantCultureIgnoreCase)) { model.DisplayPurchaseOrderNumber = true; model.PurchaseOrderNumber = order.PurchaseOrderNumber; } //payment transaction info model.AuthorizationTransactionId = order.AuthorizationTransactionId; model.CaptureTransactionId = order.CaptureTransactionId; model.SubscriptionTransactionId = order.SubscriptionTransactionId; //payment method info model.PaymentMethod = pm != null ? pm.PluginDescriptor.FriendlyName : order.PaymentMethodSystemName; model.PaymentStatus = order.PaymentStatus.GetLocalizedEnum(_localizationService, _workContext); //payment method buttons model.CanCancelOrder = _orderProcessingService.CanCancelOrder(order); model.CanCapture = _orderProcessingService.CanCapture(order); model.CanMarkOrderAsPaid = _orderProcessingService.CanMarkOrderAsPaid(order); model.CanRefund = _orderProcessingService.CanRefund(order); model.CanRefundOffline = _orderProcessingService.CanRefundOffline(order); model.CanPartiallyRefund = _orderProcessingService.CanPartiallyRefund(order, decimal.Zero); model.CanPartiallyRefundOffline = _orderProcessingService.CanPartiallyRefundOffline(order, decimal.Zero); model.CanVoid = _orderProcessingService.CanVoid(order); model.CanVoidOffline = _orderProcessingService.CanVoidOffline(order); model.PrimaryStoreCurrencyCode = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId).CurrencyCode; model.MaxAmountToRefund = order.OrderTotal - order.RefundedAmount; //recurring payment record var recurringPayment = _orderService.SearchRecurringPayments(0, order.Id, null, 0, int.MaxValue, true).FirstOrDefault(); if (recurringPayment != null) { model.RecurringPaymentId = recurringPayment.Id; } #endregion #region Billing & shipping info model.BillingAddress = order.BillingAddress.ToModel(); model.BillingAddress.FirstNameEnabled = true; model.BillingAddress.FirstNameRequired = true; model.BillingAddress.LastNameEnabled = true; model.BillingAddress.LastNameRequired = true; model.BillingAddress.EmailEnabled = true; model.BillingAddress.EmailRequired = true; model.BillingAddress.CompanyEnabled = _addressSettings.CompanyEnabled; model.BillingAddress.CompanyRequired = _addressSettings.CompanyRequired; model.BillingAddress.CountryEnabled = _addressSettings.CountryEnabled; model.BillingAddress.StateProvinceEnabled = _addressSettings.StateProvinceEnabled; model.BillingAddress.CityEnabled = _addressSettings.CityEnabled; model.BillingAddress.CityRequired = _addressSettings.CityRequired; model.BillingAddress.StreetAddressEnabled = _addressSettings.StreetAddressEnabled; model.BillingAddress.StreetAddressRequired = _addressSettings.StreetAddressRequired; model.BillingAddress.StreetAddress2Enabled = _addressSettings.StreetAddress2Enabled; model.BillingAddress.StreetAddress2Required = _addressSettings.StreetAddress2Required; model.BillingAddress.ZipPostalCodeEnabled = _addressSettings.ZipPostalCodeEnabled; model.BillingAddress.ZipPostalCodeRequired = _addressSettings.ZipPostalCodeRequired; model.BillingAddress.PhoneEnabled = _addressSettings.PhoneEnabled; model.BillingAddress.PhoneRequired = _addressSettings.PhoneRequired; model.BillingAddress.FaxEnabled = _addressSettings.FaxEnabled; model.BillingAddress.FaxRequired = _addressSettings.FaxRequired; model.ShippingStatus = order.ShippingStatus.GetLocalizedEnum(_localizationService, _workContext); ; if (order.ShippingStatus != ShippingStatus.ShippingNotRequired) { model.IsShippable = true; model.ShippingAddress = order.ShippingAddress.ToModel(); model.ShippingAddress.FirstNameEnabled = true; model.ShippingAddress.FirstNameRequired = true; model.ShippingAddress.LastNameEnabled = true; model.ShippingAddress.LastNameRequired = true; model.ShippingAddress.EmailEnabled = true; model.ShippingAddress.EmailRequired = true; model.ShippingAddress.CompanyEnabled = _addressSettings.CompanyEnabled; model.ShippingAddress.CompanyRequired = _addressSettings.CompanyRequired; model.ShippingAddress.CountryEnabled = _addressSettings.CountryEnabled; model.ShippingAddress.StateProvinceEnabled = _addressSettings.StateProvinceEnabled; model.ShippingAddress.CityEnabled = _addressSettings.CityEnabled; model.ShippingAddress.CityRequired = _addressSettings.CityRequired; model.ShippingAddress.StreetAddressEnabled = _addressSettings.StreetAddressEnabled; model.ShippingAddress.StreetAddressRequired = _addressSettings.StreetAddressRequired; model.ShippingAddress.StreetAddress2Enabled = _addressSettings.StreetAddress2Enabled; model.ShippingAddress.StreetAddress2Required = _addressSettings.StreetAddress2Required; model.ShippingAddress.ZipPostalCodeEnabled = _addressSettings.ZipPostalCodeEnabled; model.ShippingAddress.ZipPostalCodeRequired = _addressSettings.ZipPostalCodeRequired; model.ShippingAddress.PhoneEnabled = _addressSettings.PhoneEnabled; model.ShippingAddress.PhoneRequired = _addressSettings.PhoneRequired; model.ShippingAddress.FaxEnabled = _addressSettings.FaxEnabled; model.ShippingAddress.FaxRequired = _addressSettings.FaxRequired; model.ShippingMethod = order.ShippingMethod; model.ShippingAddressGoogleMapsUrl = string.Format("http://maps.google.com/maps?f=q&hl=en&ie=UTF8&oe=UTF8&geocode=&q={0}", Server.UrlEncode(order.ShippingAddress.Address1 + " " + order.ShippingAddress.ZipPostalCode + " " + order.ShippingAddress.City + " " + (order.ShippingAddress.Country != null ? order.ShippingAddress.Country.Name : ""))); model.CanAddNewShipments = order.HasItemsToAddToShipment(); } #endregion #region Products model.CheckoutAttributeInfo = order.CheckoutAttributeDescription; bool hasDownloadableItems = false; foreach (var opv in order.OrderProductVariants) { if (opv.ProductVariant != null && opv.ProductVariant.IsDownload) hasDownloadableItems = true; var opvModel = new OrderModel.OrderProductVariantModel() { Id = opv.Id, ProductVariantId = opv.ProductVariantId, Sku = opv.ProductVariant.Sku, Quantity = opv.Quantity, IsDownload = opv.ProductVariant.IsDownload, DownloadCount = opv.DownloadCount, DownloadActivationType = opv.ProductVariant.DownloadActivationType, IsDownloadActivated = opv.IsDownloadActivated, LicenseDownloadId = opv.LicenseDownloadId }; //product name if (!String.IsNullOrEmpty(opv.ProductVariant.Name)) opvModel.FullProductName = string.Format("{0} ({1})", opv.ProductVariant.Product.Name, opv.ProductVariant.Name); else opvModel.FullProductName = opv.ProductVariant.Product.Name; //unit price opvModel.UnitPriceInclTaxValue = opv.UnitPriceInclTax; opvModel.UnitPriceExclTaxValue = opv.UnitPriceExclTax; opvModel.UnitPriceInclTax = _priceFormatter.FormatPrice(opv.UnitPriceInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); opvModel.UnitPriceExclTax = _priceFormatter.FormatPrice(opv.UnitPriceExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); //discounts opvModel.DiscountInclTaxValue = opv.DiscountAmountInclTax; opvModel.DiscountExclTaxValue = opv.DiscountAmountExclTax; opvModel.DiscountInclTax = _priceFormatter.FormatPrice(opv.DiscountAmountInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); opvModel.DiscountExclTax = _priceFormatter.FormatPrice(opv.DiscountAmountExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); //subtotal opvModel.SubTotalInclTaxValue = opv.PriceInclTax; opvModel.SubTotalExclTaxValue = opv.PriceExclTax; opvModel.SubTotalInclTax = _priceFormatter.FormatPrice(opv.PriceInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); opvModel.SubTotalExclTax = _priceFormatter.FormatPrice(opv.PriceExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); opvModel.AttributeInfo = opv.AttributeDescription; if (opv.ProductVariant.IsRecurring) opvModel.RecurringInfo = string.Format(_localizationService.GetResource("Admin.Orders.Products.RecurringPeriod"), opv.ProductVariant.RecurringCycleLength, opv.ProductVariant.RecurringCyclePeriod.GetLocalizedEnum(_localizationService, _workContext)); //return requests opvModel.ReturnRequestIds = _orderService.SearchReturnRequests(0, opv.Id, null, 0, int.MaxValue) .Select(rr => rr.Id).ToList(); //gift cards opvModel.PurchasedGiftCardIds = _giftCardService.GetGiftCardsByPurchasedWithOrderProductVariantId(opv.Id) .Select(gc => gc.Id).ToList(); model.Items.Add(opvModel); } model.HasDownloadableProducts = hasDownloadableItems; #endregion }
public ActionResult DeleteLicenseFilePopup(string btnId, string formId, OrderModel.UploadLicenseModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(model.OrderId); if (order == null) //No order found with the specified id return RedirectToAction("List"); var orderProductVariant = order.OrderProductVariants.Where(x => x.Id == model.OrderProductVariantId).FirstOrDefault(); if (orderProductVariant == null) throw new ArgumentException("No order product variant found with the specified id"); //attach license orderProductVariant.LicenseDownloadId = null; _orderService.UpdateOrder(order); //success ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); }
public ActionResult OrderList(GridCommand command, OrderListModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); DateTime? startDateValue = (model.StartDate == null) ? null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, _dateTimeHelper.CurrentTimeZone); DateTime? endDateValue = (model.EndDate == null) ? null :(DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1); OrderStatus? orderStatus = model.OrderStatusId > 0 ? (OrderStatus?)(model.OrderStatusId) : null; PaymentStatus? paymentStatus = model.PaymentStatusId > 0 ? (PaymentStatus?)(model.PaymentStatusId) : null; ShippingStatus? shippingStatus = model.ShippingStatusId > 0 ? (ShippingStatus?)(model.ShippingStatusId) : null; //load orders var orders = _orderService.SearchOrders(startDateValue, endDateValue, orderStatus, paymentStatus, shippingStatus, model.CustomerEmail, model.OrderGuid, command.Page - 1, command.PageSize); var gridModel = new GridModel<OrderModel> { Data = orders.Select(x => { return new OrderModel() { Id = x.Id, OrderTotal = _priceFormatter.FormatPrice(x.OrderTotal, true, false), OrderStatus = x.OrderStatus.GetLocalizedEnum(_localizationService, _workContext), PaymentStatus = x.PaymentStatus.GetLocalizedEnum(_localizationService, _workContext), ShippingStatus = x.ShippingStatus.GetLocalizedEnum(_localizationService, _workContext), CustomerEmail = x.BillingAddress.Email, CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc) }; }), Total = orders.TotalCount }; //summary report //implemented as a workaround described here: http://www.telerik.com/community/forums/aspnet-mvc/grid/gridmodel-aggregates-how-to-use.aspx var reportSummary = _orderReportService.GetOrderAverageReportLine (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail); var profit = _orderReportService.ProfitReport (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail); var aggregator = new OrderModel() { aggregatorprofit = _priceFormatter.FormatPrice(profit, true, false), aggregatortax = _priceFormatter.FormatPrice(reportSummary.SumTax, true, false), aggregatortotal = _priceFormatter.FormatPrice(reportSummary.SumOrders, true, false) }; gridModel.Aggregates = aggregator; return new JsonResult { Data = gridModel }; }
public ActionResult PartiallyRefundOrderPopup(string btnId, string formId, int id, bool online, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); try { decimal amountToRefund = model.AmountToRefund; if (amountToRefund <= decimal.Zero) throw new NopException("Enter amount to refund"); decimal maxAmountToRefund = order.OrderTotal - order.RefundedAmount; if (amountToRefund > maxAmountToRefund) amountToRefund = maxAmountToRefund; var errors = new List<string>(); if (online) errors = _orderProcessingService.PartiallyRefund(order, amountToRefund).ToList(); else _orderProcessingService.PartiallyRefundOffline(order, amountToRefund); if (errors.Count == 0) { //success ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; PrepareOrderDetailsModel(model, order); return View(model); } else { //error PrepareOrderDetailsModel(model, order); foreach (var error in errors) ErrorNotification(error, false); return View(model); } } catch (Exception exc) { //error PrepareOrderDetailsModel(model, order); ErrorNotification(exc, false); return View(model); } }
public ActionResult CancelOrder(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); try { _orderProcessingService.CancelOrder(order, true); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); } catch (Exception exc) { //error var model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification(exc, false); return View(model); } }
public ActionResult EditOrderProductVariant(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); ViewData["selectedTab"] = "products"; //get order product variant identifier int opvId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnSaveOpv", StringComparison.InvariantCultureIgnoreCase)) opvId = Convert.ToInt32(formValue.Substring("btnSaveOpv".Length)); var orderProductVariant = order.OrderProductVariants.Where(x => x.Id == opvId).FirstOrDefault(); if (orderProductVariant == null) throw new ArgumentException("No order product variant found with the specified id"); decimal unitPriceInclTax, unitPriceExclTax, discountInclTax, discountExclTax,priceInclTax,priceExclTax; int quantity; if (!decimal.TryParse(form["pvUnitPriceInclTax" + opvId], out unitPriceInclTax)) unitPriceInclTax =orderProductVariant.UnitPriceInclTax; if (!decimal.TryParse(form["pvUnitPriceExclTax" + opvId], out unitPriceExclTax)) unitPriceExclTax = orderProductVariant.UnitPriceExclTax; if (!int.TryParse(form["pvQuantity" + opvId], out quantity)) quantity = orderProductVariant.Quantity; if (!decimal.TryParse(form["pvDiscountInclTax" + opvId], out discountInclTax)) discountInclTax = orderProductVariant.DiscountAmountInclTax; if (!decimal.TryParse(form["pvDiscountExclTax" + opvId], out discountExclTax)) discountExclTax = orderProductVariant.DiscountAmountExclTax; if (!decimal.TryParse(form["pvPriceInclTax" + opvId], out priceInclTax)) priceInclTax = orderProductVariant.PriceInclTax; if (!decimal.TryParse(form["pvPriceExclTax" + opvId], out priceExclTax)) priceExclTax = orderProductVariant.PriceExclTax; if (quantity > 0) { orderProductVariant.UnitPriceInclTax = unitPriceInclTax; orderProductVariant.UnitPriceExclTax = unitPriceExclTax; orderProductVariant.Quantity = quantity; orderProductVariant.DiscountAmountInclTax = discountInclTax; orderProductVariant.DiscountAmountExclTax = discountExclTax; orderProductVariant.PriceInclTax = priceInclTax; orderProductVariant.PriceExclTax = priceExclTax; _orderService.UpdateOrder(order); } else { _orderService.DeleteOrderProductVariant(orderProductVariant); } var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult EditOrderTotals(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageActualSales)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); order.OrderSubtotalInclTax = model.OrderSubtotalInclTaxValue; order.OrderSubtotalExclTax = model.OrderSubtotalExclTaxValue; order.OrderSubTotalDiscountInclTax = model.OrderSubTotalDiscountInclTaxValue; order.OrderSubTotalDiscountExclTax = model.OrderSubTotalDiscountExclTaxValue; order.OrderShippingInclTax = model.OrderShippingInclTaxValue; order.OrderShippingExclTax = model.OrderShippingExclTaxValue; order.PaymentMethodAdditionalFeeInclTax = model.PaymentMethodAdditionalFeeInclTaxValue; order.PaymentMethodAdditionalFeeExclTax = model.PaymentMethodAdditionalFeeExclTaxValue; order.TaxRates = model.TaxRatesValue; order.OrderTax = model.TaxValue; order.OrderDiscount = model.OrderTotalDiscountValue; order.OrderTotal = model.OrderTotalValue; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote { Note = "Order totals have been edited", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult EditShippingMethod(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); order.ShippingMethod = model.ShippingMethod; _orderService.UpdateOrder(order); PrepareOrderDetailsModel(model, order); //selected tab SaveSelectedTabIndex(persistForTheNextRequest: false); return View(model); }
public ActionResult ChangeOrderStatus(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageActualSales)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); try { order.OrderStatusId = model.OrderStatusId; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote { Note = string.Format("Order status has been edited. New status: {0}", order.OrderStatus.GetLocalizedEnum(_localizationService, _workContext)), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); } catch (Exception exc) { //error model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification(exc, false); return View(model); } }
public ActionResult EditCreditCardInfo(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageActualSales)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); if (order.AllowStoringCreditCardNumber) { string cardType = model.CardType; string cardName = model.CardName; string cardNumber = model.CardNumber; string cardCvv2 = model.CardCvv2; string cardExpirationMonth = model.CardExpirationMonth; string cardExpirationYear = model.CardExpirationYear; order.CardType = _encryptionService.EncryptText(cardType); order.CardName = _encryptionService.EncryptText(cardName); order.CardNumber = _encryptionService.EncryptText(cardNumber); order.MaskedCreditCardNumber = _encryptionService.EncryptText(_paymentService.GetMaskedCreditCardNumber(cardNumber)); order.CardCvv2 = _encryptionService.EncryptText(cardCvv2); order.CardExpirationMonth = _encryptionService.EncryptText(cardExpirationMonth); order.CardExpirationYear = _encryptionService.EncryptText(cardExpirationYear); _orderService.UpdateOrder(order); } //add a note order.OrderNotes.Add(new OrderNote { Note = "Credit card info has been edited", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult DeleteOrderItem(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnDeleteOrderItem", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnDeleteOrderItem".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.Id == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); if (_giftCardService.GetGiftCardsByPurchasedWithOrderItemId(orderItem.Id).Any()) { //we cannot delete an order item with associated gift cards //a store owner should delete them first var model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification("This order item has an associated gift card record. Please delete it first.", false); //selected tab SaveSelectedTabName(persistForTheNextRequest: false); return View(model); } else { //adjust inventory _productService.AdjustInventory(orderItem.Product, orderItem.Quantity, orderItem.AttributesXml); //delete item _orderService.DeleteOrderItem(orderItem); //update order totals var updateOrderParameters = new UpdateOrderParameters { UpdatedOrder = order, UpdatedOrderItem = orderItem }; _orderProcessingService.UpdateOrderTotals(updateOrderParameters); //add a note order.OrderNotes.Add(new OrderNote { Note = "Order item has been deleted", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); LogEditOrder(order.Id); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); model.Warnings = updateOrderParameters.Warnings; //selected tab SaveSelectedTabName(persistForTheNextRequest: false); return View(model); } }
public ActionResult EditOrderItem(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnSaveOrderItem", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnSaveOrderItem".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.Id == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); decimal unitPriceInclTax, unitPriceExclTax, discountInclTax, discountExclTax,priceInclTax,priceExclTax; int quantity; if (!decimal.TryParse(form["pvUnitPriceInclTax" + orderItemId], out unitPriceInclTax)) unitPriceInclTax = orderItem.UnitPriceInclTax; if (!decimal.TryParse(form["pvUnitPriceExclTax" + orderItemId], out unitPriceExclTax)) unitPriceExclTax = orderItem.UnitPriceExclTax; if (!int.TryParse(form["pvQuantity" + orderItemId], out quantity)) quantity = orderItem.Quantity; if (!decimal.TryParse(form["pvDiscountInclTax" + orderItemId], out discountInclTax)) discountInclTax = orderItem.DiscountAmountInclTax; if (!decimal.TryParse(form["pvDiscountExclTax" + orderItemId], out discountExclTax)) discountExclTax = orderItem.DiscountAmountExclTax; if (!decimal.TryParse(form["pvPriceInclTax" + orderItemId], out priceInclTax)) priceInclTax = orderItem.PriceInclTax; if (!decimal.TryParse(form["pvPriceExclTax" + orderItemId], out priceExclTax)) priceExclTax = orderItem.PriceExclTax; if (quantity > 0) { int qtyDifference = orderItem.Quantity - quantity; if (!_orderSettings.AutoUpdateOrderTotalsOnEditingOrder) { orderItem.UnitPriceInclTax = unitPriceInclTax; orderItem.UnitPriceExclTax = unitPriceExclTax; orderItem.Quantity = quantity; orderItem.DiscountAmountInclTax = discountInclTax; orderItem.DiscountAmountExclTax = discountExclTax; orderItem.PriceInclTax = priceInclTax; orderItem.PriceExclTax = priceExclTax; _orderService.UpdateOrder(order); } //adjust inventory _productService.AdjustInventory(orderItem.Product, qtyDifference, orderItem.AttributesXml); } else { //adjust inventory _productService.AdjustInventory(orderItem.Product, orderItem.Quantity, orderItem.AttributesXml); //delete item _orderService.DeleteOrderItem(orderItem); } //update order totals var updateOrderParameters = new UpdateOrderParameters { UpdatedOrder = order, UpdatedOrderItem = orderItem, PriceInclTax = unitPriceInclTax, PriceExclTax = unitPriceExclTax, DiscountAmountInclTax = discountInclTax, DiscountAmountExclTax = discountExclTax, SubTotalInclTax = priceInclTax, SubTotalExclTax = priceExclTax, Quantity = quantity }; _orderProcessingService.UpdateOrderTotals(updateOrderParameters); //add a note order.OrderNotes.Add(new OrderNote { Note = "Order item has been edited", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); LogEditOrder(order.Id); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); model.Warnings = updateOrderParameters.Warnings; //selected tab SaveSelectedTabName(persistForTheNextRequest: false); return View(model); }
public ActionResult EditShippingMethod(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); order.ShippingMethod = model.ShippingMethod; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote { Note = "Shipping method has been edited", DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); LogEditOrder(order.Id); PrepareOrderDetailsModel(model, order); //selected tab SaveSelectedTabName(persistForTheNextRequest: false); return View(model); }
public ActionResult AddProductToOrder(GridCommand command, OrderModel.AddOrderProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); //a vendor does not have to this functionality if (_workContext.CurrentVendor != null) return Content(""); var gridModel = new GridModel(); var products = _productService.SearchProducts(categoryIds: new List<int>() {model.SearchCategoryId}, manufacturerId: model.SearchManufacturerId, productType: model.SearchProductTypeId > 0 ? (ProductType?)model.SearchProductTypeId : null, keywords: model.SearchProductName, pageIndex: command.Page - 1, pageSize: command.PageSize, showHidden: true); gridModel.Data = products.Select(x => { var productModel = new OrderModel.AddOrderProductModel.ProductModel() { Id = x.Id, Name = x.Name, Sku = x.Sku, }; return productModel; }); gridModel.Total = products.TotalCount; return new JsonResult { Data = gridModel }; }
public ActionResult EditOrderItem(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnSaveOrderItem", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnSaveOrderItem".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.ID == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); decimal unitPriceInclTax, unitPriceExclTax, discountInclTax, discountExclTax,priceInclTax,priceExclTax; int quantity; if (!decimal.TryParse(form["pvUnitPriceInclTax" + orderItemId], out unitPriceInclTax)) unitPriceInclTax = orderItem.UnitPriceInclTax; if (!decimal.TryParse(form["pvUnitPriceExclTax" + orderItemId], out unitPriceExclTax)) unitPriceExclTax = orderItem.UnitPriceExclTax; if (!int.TryParse(form["pvQuantity" + orderItemId], out quantity)) quantity = orderItem.Quantity; if (!decimal.TryParse(form["pvDiscountInclTax" + orderItemId], out discountInclTax)) discountInclTax = orderItem.DiscountAmountInclTax; if (!decimal.TryParse(form["pvDiscountExclTax" + orderItemId], out discountExclTax)) discountExclTax = orderItem.DiscountAmountExclTax; if (!decimal.TryParse(form["pvPriceInclTax" + orderItemId], out priceInclTax)) priceInclTax = orderItem.PriceInclTax; if (!decimal.TryParse(form["pvPriceExclTax" + orderItemId], out priceExclTax)) priceExclTax = orderItem.PriceExclTax; if (quantity > 0) { orderItem.UnitPriceInclTax = unitPriceInclTax; orderItem.UnitPriceExclTax = unitPriceExclTax; orderItem.Quantity = quantity; orderItem.DiscountAmountInclTax = discountInclTax; orderItem.DiscountAmountExclTax = discountExclTax; orderItem.PriceInclTax = priceInclTax; orderItem.PriceExclTax = priceExclTax; _orderService.UpdateOrder(order); } else { _orderService.DeleteOrderItem(orderItem); } var model = new OrderModel(); PrepareOrderDetailsModel(model, order); //selected tab SaveSelectedTabIndex(persistForTheNextRequest: false); return View(model); }
public ActionResult UploadLicenseFilePopup(string btnId, string formId, OrderModel.UploadLicenseModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(model.OrderId); if (order == null) //No order found with the specified id return RedirectToAction("List"); var orderItem = order.OrderItems.FirstOrDefault(x => x.Id == model.OrderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); //ensure a vendor has access only to his products if (_workContext.CurrentVendor != null && !HasAccessToOrderItem(orderItem)) return RedirectToAction("List"); //attach license if (model.LicenseDownloadId > 0) orderItem.LicenseDownloadId = model.LicenseDownloadId; else orderItem.LicenseDownloadId = null; _orderService.UpdateOrder(order); //success ViewBag.RefreshPage = true; ViewBag.btnId = btnId; ViewBag.formId = formId; return View(model); }
public ActionResult DeleteOrderItem(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have access to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnDeleteOrderItem", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnDeleteOrderItem".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.ID == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); if (_giftCardService.GetGiftCardsByPurchasedWithOrderItemId(orderItem.ID).Count > 0) { //we cannot delete an order item with associated gift cards //a store owner should delete them first var model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification("This order item has an associated gift card record. Please delete it first.", false); //selected tab SaveSelectedTabIndex(persistForTheNextRequest: false); return View(model); } else { _orderService.DeleteOrderItem(orderItem); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); //selected tab SaveSelectedTabIndex(persistForTheNextRequest: false); return View(model); } }
public ActionResult EditCreditCardInfo(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); if (order.AllowStoringCreditCardNumber) { string cardType = model.CardType; string cardName = model.CardName; string cardNumber = model.CardNumber; string cardCvv2 = model.CardCvv2; string cardExpirationMonth = model.CardExpirationMonth; string cardExpirationYear = model.CardExpirationYear; order.CardType = _encryptionService.EncryptText(cardType); order.CardName = _encryptionService.EncryptText(cardName); order.CardNumber = _encryptionService.EncryptText(cardNumber); order.MaskedCreditCardNumber = _encryptionService.EncryptText(_paymentService.GetMaskedCreditCardNumber(cardNumber)); order.CardCvv2 = _encryptionService.EncryptText(cardCvv2); order.CardExpirationMonth = _encryptionService.EncryptText(cardExpirationMonth); order.CardExpirationYear = _encryptionService.EncryptText(cardExpirationYear); _orderService.UpdateOrder(order); } PrepareOrderDetailsModel(model, order); return View(model); }
protected virtual void PrepareOrderDetailsModel(OrderModel model, Order order) { if (order == null) throw new ArgumentNullException("order"); if (model == null) throw new ArgumentNullException("model"); model.Id = order.ID; model.OrderStatus = order.OrderStatus.GetLocalizedEnum(_localizationService, _workContext); model.OrderStatusId = order.OrderStatusId; model.OrderGuid = order.OrderGuid; var store = _storeService.GetStoreById(order.StoreId); model.StoreName = store != null ? store.Name : "Unknown"; model.CustomerId = order.CustomerId; var customer = order.Customer; model.CustomerInfo = customer.IsRegistered() ? customer.Email : _localizationService.GetResource("Admin.Customers.Guest"); model.CustomerIp = order.CustomerIp; model.VatNumber = order.VatNumber; model.CreatedOn = _dateTimeHelper.ConvertToUserTime(order.CreatedOnUtc, DateTimeKind.Utc); model.AllowCustomersToSelectTaxDisplayType = _taxSettings.AllowCustomersToSelectTaxDisplayType; model.TaxDisplayType = _taxSettings.TaxDisplayType; var affiliate = _affiliateService.GetAffiliateById(order.AffiliateId); if (affiliate != null) { model.AffiliateId = affiliate.ID; model.AffiliateName = affiliate.GetFullName(); } //a vendor should have access only to his products model.IsLoggedInAsVendor = _workContext.CurrentVendor != null; //custom values model.CustomValues = order.DeserializeCustomValues(); #region Order totals var primaryStoreCurrency = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId); if (primaryStoreCurrency == null) throw new Exception("Cannot load primary store currency"); //subtotal model.OrderSubtotalInclTax = _priceFormatter.FormatPrice(order.OrderSubtotalInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.OrderSubtotalExclTax = _priceFormatter.FormatPrice(order.OrderSubtotalExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); model.OrderSubtotalInclTaxValue = order.OrderSubtotalInclTax; model.OrderSubtotalExclTaxValue = order.OrderSubtotalExclTax; //discount (applied to order subtotal) string orderSubtotalDiscountInclTaxStr = _priceFormatter.FormatPrice(order.OrderSubTotalDiscountInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); string orderSubtotalDiscountExclTaxStr = _priceFormatter.FormatPrice(order.OrderSubTotalDiscountExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); if (order.OrderSubTotalDiscountInclTax > decimal.Zero) model.OrderSubTotalDiscountInclTax = orderSubtotalDiscountInclTaxStr; if (order.OrderSubTotalDiscountExclTax > decimal.Zero) model.OrderSubTotalDiscountExclTax = orderSubtotalDiscountExclTaxStr; model.OrderSubTotalDiscountInclTaxValue = order.OrderSubTotalDiscountInclTax; model.OrderSubTotalDiscountExclTaxValue = order.OrderSubTotalDiscountExclTax; //shipping model.OrderShippingInclTax = _priceFormatter.FormatShippingPrice(order.OrderShippingInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.OrderShippingExclTax = _priceFormatter.FormatShippingPrice(order.OrderShippingExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); model.OrderShippingInclTaxValue = order.OrderShippingInclTax; model.OrderShippingExclTaxValue = order.OrderShippingExclTax; //payment method additional fee if (order.PaymentMethodAdditionalFeeInclTax > decimal.Zero) { model.PaymentMethodAdditionalFeeInclTax = _priceFormatter.FormatPaymentMethodAdditionalFee(order.PaymentMethodAdditionalFeeInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true); model.PaymentMethodAdditionalFeeExclTax = _priceFormatter.FormatPaymentMethodAdditionalFee(order.PaymentMethodAdditionalFeeExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false); } model.PaymentMethodAdditionalFeeInclTaxValue = order.PaymentMethodAdditionalFeeInclTax; model.PaymentMethodAdditionalFeeExclTaxValue = order.PaymentMethodAdditionalFeeExclTax; //tax model.Tax = _priceFormatter.FormatPrice(order.OrderTax, true, false); SortedDictionary<decimal, decimal> taxRates = order.TaxRatesDictionary; bool displayTaxRates = _taxSettings.DisplayTaxRates && taxRates.Count > 0; bool displayTax = !displayTaxRates; foreach (var tr in order.TaxRatesDictionary) { model.TaxRates.Add(new OrderModel.TaxRate { Rate = _priceFormatter.FormatTaxRate(tr.Key), Value = _priceFormatter.FormatPrice(tr.Value, true, false), }); } model.DisplayTaxRates = displayTaxRates; model.DisplayTax = displayTax; model.TaxValue = order.OrderTax; model.TaxRatesValue = order.TaxRates; //discount if (order.OrderDiscount > 0) model.OrderTotalDiscount = _priceFormatter.FormatPrice(-order.OrderDiscount, true, false); model.OrderTotalDiscountValue = order.OrderDiscount; //gift cards foreach (var gcuh in order.GiftCardUsageHistory) { model.GiftCards.Add(new OrderModel.GiftCard { CouponCode = gcuh.GiftCard.GiftCardCouponCode, Amount = _priceFormatter.FormatPrice(-gcuh.UsedValue, true, false), }); } //reward points if (order.RedeemedRewardPointsEntry != null) { model.RedeemedRewardPoints = -order.RedeemedRewardPointsEntry.Points; model.RedeemedRewardPointsAmount = _priceFormatter.FormatPrice(-order.RedeemedRewardPointsEntry.UsedAmount, true, false); } //total model.OrderTotal = _priceFormatter.FormatPrice(order.OrderTotal, true, false); model.OrderTotalValue = order.OrderTotal; //refunded amount if (order.RefundedAmount > decimal.Zero) model.RefundedAmount = _priceFormatter.FormatPrice(order.RefundedAmount, true, false); //used discounts var duh = _discountService.GetAllDiscountUsageHistory(orderId: order.ID); foreach (var d in duh) { model.UsedDiscounts.Add(new OrderModel.UsedDiscountModel { DiscountId = d.DiscountId, DiscountName = d.Discount.Name }); } //profit (hide for vendors) if (_workContext.CurrentVendor == null) { var profit = _orderReportService.ProfitReport(orderId: order.ID); model.Profit = _priceFormatter.FormatPrice(profit, true, false); } #endregion #region Payment info if (order.AllowStoringCreditCardNumber) { //card type model.CardType = _encryptionService.DecryptText(order.CardType); //cardholder name model.CardName = _encryptionService.DecryptText(order.CardName); //card number model.CardNumber = _encryptionService.DecryptText(order.CardNumber); //cvv model.CardCvv2 = _encryptionService.DecryptText(order.CardCvv2); //expiry date string cardExpirationMonthDecrypted = _encryptionService.DecryptText(order.CardExpirationMonth); if (!String.IsNullOrEmpty(cardExpirationMonthDecrypted) && cardExpirationMonthDecrypted != "0") model.CardExpirationMonth = cardExpirationMonthDecrypted; string cardExpirationYearDecrypted = _encryptionService.DecryptText(order.CardExpirationYear); if (!String.IsNullOrEmpty(cardExpirationYearDecrypted) && cardExpirationYearDecrypted != "0") model.CardExpirationYear = cardExpirationYearDecrypted; model.AllowStoringCreditCardNumber = true; } else { string maskedCreditCardNumberDecrypted = _encryptionService.DecryptText(order.MaskedCreditCardNumber); if (!String.IsNullOrEmpty(maskedCreditCardNumberDecrypted)) model.CardNumber = maskedCreditCardNumberDecrypted; } //payment transaction info model.AuthorizationTransactionId = order.AuthorizationTransactionId; model.CaptureTransactionId = order.CaptureTransactionId; model.SubscriptionTransactionId = order.SubscriptionTransactionId; //payment method info var pm = _paymentService.LoadPaymentMethodBySystemName(order.PaymentMethodSystemName); model.PaymentMethod = pm != null ? pm.PluginDescriptor.FriendlyName : order.PaymentMethodSystemName; model.PaymentStatus = order.PaymentStatus.GetLocalizedEnum(_localizationService, _workContext); //payment method buttons model.CanCancelOrder = _orderProcessingService.CanCancelOrder(order); model.CanCapture = _orderProcessingService.CanCapture(order); model.CanMarkOrderAsPaid = _orderProcessingService.CanMarkOrderAsPaid(order); model.CanRefund = _orderProcessingService.CanRefund(order); model.CanRefundOffline = _orderProcessingService.CanRefundOffline(order); model.CanPartiallyRefund = _orderProcessingService.CanPartiallyRefund(order, decimal.Zero); model.CanPartiallyRefundOffline = _orderProcessingService.CanPartiallyRefundOffline(order, decimal.Zero); model.CanVoid = _orderProcessingService.CanVoid(order); model.CanVoidOffline = _orderProcessingService.CanVoidOffline(order); model.PrimaryStoreCurrencyCode = _currencyService.GetCurrencyById(_currencySettings.PrimaryStoreCurrencyId).CurrencyCode; model.MaxAmountToRefund = order.OrderTotal - order.RefundedAmount; //recurring payment record var recurringPayment = _orderService.SearchRecurringPayments(initialOrderId: order.ID, showHidden: true).FirstOrDefault(); if (recurringPayment != null) { model.RecurringPaymentId = recurringPayment.ID; } #endregion #region Billing & shipping info model.BillingAddress = order.BillingAddress.ToModel(); model.BillingAddress.FormattedCustomAddressAttributes = _addressAttributeFormatter.FormatAttributes(order.BillingAddress.CustomAttributes); model.BillingAddress.FirstNameEnabled = true; model.BillingAddress.FirstNameRequired = true; model.BillingAddress.LastNameEnabled = true; model.BillingAddress.LastNameRequired = true; model.BillingAddress.EmailEnabled = true; model.BillingAddress.EmailRequired = true; model.BillingAddress.CompanyEnabled = _addressSettings.CompanyEnabled; model.BillingAddress.CompanyRequired = _addressSettings.CompanyRequired; model.BillingAddress.CountryEnabled = _addressSettings.CountryEnabled; model.BillingAddress.StateProvinceEnabled = _addressSettings.StateProvinceEnabled; model.BillingAddress.CityEnabled = _addressSettings.CityEnabled; model.BillingAddress.CityRequired = _addressSettings.CityRequired; model.BillingAddress.StreetAddressEnabled = _addressSettings.StreetAddressEnabled; model.BillingAddress.StreetAddressRequired = _addressSettings.StreetAddressRequired; model.BillingAddress.StreetAddress2Enabled = _addressSettings.StreetAddress2Enabled; model.BillingAddress.StreetAddress2Required = _addressSettings.StreetAddress2Required; model.BillingAddress.ZipPostalCodeEnabled = _addressSettings.ZipPostalCodeEnabled; model.BillingAddress.ZipPostalCodeRequired = _addressSettings.ZipPostalCodeRequired; model.BillingAddress.PhoneEnabled = _addressSettings.PhoneEnabled; model.BillingAddress.PhoneRequired = _addressSettings.PhoneRequired; model.BillingAddress.FaxEnabled = _addressSettings.FaxEnabled; model.BillingAddress.FaxRequired = _addressSettings.FaxRequired; model.ShippingStatus = order.ShippingStatus.GetLocalizedEnum(_localizationService, _workContext); ; if (order.ShippingStatus != ShippingStatus.ShippingNotRequired) { model.IsShippable = true; model.PickUpInStore = order.PickUpInStore; if (!order.PickUpInStore) { model.ShippingAddress = order.ShippingAddress.ToModel(); model.ShippingAddress.FormattedCustomAddressAttributes = _addressAttributeFormatter.FormatAttributes(order.ShippingAddress.CustomAttributes); model.ShippingAddress.FirstNameEnabled = true; model.ShippingAddress.FirstNameRequired = true; model.ShippingAddress.LastNameEnabled = true; model.ShippingAddress.LastNameRequired = true; model.ShippingAddress.EmailEnabled = true; model.ShippingAddress.EmailRequired = true; model.ShippingAddress.CompanyEnabled = _addressSettings.CompanyEnabled; model.ShippingAddress.CompanyRequired = _addressSettings.CompanyRequired; model.ShippingAddress.CountryEnabled = _addressSettings.CountryEnabled; model.ShippingAddress.StateProvinceEnabled = _addressSettings.StateProvinceEnabled; model.ShippingAddress.CityEnabled = _addressSettings.CityEnabled; model.ShippingAddress.CityRequired = _addressSettings.CityRequired; model.ShippingAddress.StreetAddressEnabled = _addressSettings.StreetAddressEnabled; model.ShippingAddress.StreetAddressRequired = _addressSettings.StreetAddressRequired; model.ShippingAddress.StreetAddress2Enabled = _addressSettings.StreetAddress2Enabled; model.ShippingAddress.StreetAddress2Required = _addressSettings.StreetAddress2Required; model.ShippingAddress.ZipPostalCodeEnabled = _addressSettings.ZipPostalCodeEnabled; model.ShippingAddress.ZipPostalCodeRequired = _addressSettings.ZipPostalCodeRequired; model.ShippingAddress.PhoneEnabled = _addressSettings.PhoneEnabled; model.ShippingAddress.PhoneRequired = _addressSettings.PhoneRequired; model.ShippingAddress.FaxEnabled = _addressSettings.FaxEnabled; model.ShippingAddress.FaxRequired = _addressSettings.FaxRequired; model.ShippingAddressGoogleMapsUrl = string.Format("http://maps.google.com/maps?f=q&hl=en&ie=UTF8&oe=UTF8&geocode=&q={0}", Server.UrlEncode(order.ShippingAddress.Address1 + " " + order.ShippingAddress.ZipPostalCode + " " + order.ShippingAddress.City + " " + (order.ShippingAddress.Country != null ? order.ShippingAddress.Country.Name : ""))); } model.ShippingMethod = order.ShippingMethod; model.CanAddNewShipments = order.HasItemsToAddToShipment(); } #endregion #region Products model.CheckoutAttributeInfo = order.CheckoutAttributeDescription; bool hasDownloadableItems = false; var products = order.OrderItems; //a vendor should have access only to his products if (_workContext.CurrentVendor != null) { products = products .Where(orderItem => orderItem.Product.VendorId == _workContext.CurrentVendor.ID) .ToList(); } foreach (var orderItem in products) { if (orderItem.Product.IsDownload) hasDownloadableItems = true; var orderItemModel = new OrderModel.OrderItemModel { Id = orderItem.ID, ProductId = orderItem.ProductId, ProductName = orderItem.Product.Name, Sku = orderItem.Product.FormatSku(orderItem.AttributesXml, _productAttributeParser), Quantity = orderItem.Quantity, IsDownload = orderItem.Product.IsDownload, DownloadCount = orderItem.DownloadCount, DownloadActivationType = orderItem.Product.DownloadActivationType, IsDownloadActivated = orderItem.IsDownloadActivated }; //picture var orderItemPicture = orderItem.Product.GetProductPicture(orderItem.AttributesXml, _pictureService, _productAttributeParser); orderItemModel.PictureThumbnailUrl = _pictureService.GetPictureUrl(orderItemPicture, 75, true); //license file if (orderItem.LicenseDownloadId.HasValue) { var licenseDownload = _downloadService.GetDownloadById(orderItem.LicenseDownloadId.Value); if (licenseDownload != null) { orderItemModel.LicenseDownloadGuid = licenseDownload.DownloadGuid; } } //vendor var vendor = _vendorService.GetVendorById(orderItem.Product.VendorId); orderItemModel.VendorName = vendor != null ? vendor.Name : ""; //unit price orderItemModel.UnitPriceInclTaxValue = orderItem.UnitPriceInclTax; orderItemModel.UnitPriceExclTaxValue = orderItem.UnitPriceExclTax; orderItemModel.UnitPriceInclTax = _priceFormatter.FormatPrice(orderItem.UnitPriceInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); orderItemModel.UnitPriceExclTax = _priceFormatter.FormatPrice(orderItem.UnitPriceExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); //discounts orderItemModel.DiscountInclTaxValue = orderItem.DiscountAmountInclTax; orderItemModel.DiscountExclTaxValue = orderItem.DiscountAmountExclTax; orderItemModel.DiscountInclTax = _priceFormatter.FormatPrice(orderItem.DiscountAmountInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); orderItemModel.DiscountExclTax = _priceFormatter.FormatPrice(orderItem.DiscountAmountExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); //subtotal orderItemModel.SubTotalInclTaxValue = orderItem.PriceInclTax; orderItemModel.SubTotalExclTaxValue = orderItem.PriceExclTax; orderItemModel.SubTotalInclTax = _priceFormatter.FormatPrice(orderItem.PriceInclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, true, true); orderItemModel.SubTotalExclTax = _priceFormatter.FormatPrice(orderItem.PriceExclTax, true, primaryStoreCurrency, _workContext.WorkingLanguage, false, true); orderItemModel.AttributeInfo = orderItem.AttributeDescription; if (orderItem.Product.IsRecurring) orderItemModel.RecurringInfo = string.Format(_localizationService.GetResource("Admin.Orders.Products.RecurringPeriod"), orderItem.Product.RecurringCycleLength, orderItem.Product.RecurringCyclePeriod.GetLocalizedEnum(_localizationService, _workContext)); //rental info if (orderItem.Product.IsRental) { var rentalStartDate = orderItem.RentalStartDateUtc.HasValue ? orderItem.Product.FormatRentalDate(orderItem.RentalStartDateUtc.Value) : ""; var rentalEndDate = orderItem.RentalEndDateUtc.HasValue ? orderItem.Product.FormatRentalDate(orderItem.RentalEndDateUtc.Value) : ""; orderItemModel.RentalInfo = string.Format(_localizationService.GetResource("Order.Rental.FormattedDate"), rentalStartDate, rentalEndDate); } //return requests orderItemModel.ReturnRequestIds = _orderService.SearchReturnRequests(orderItemId: orderItem.ID) .Select(rr => rr.ID).ToList(); //gift cards orderItemModel.PurchasedGiftCardIds = _giftCardService.GetGiftCardsByPurchasedWithOrderItemId(orderItem.ID) .Select(gc => gc.ID).ToList(); model.Items.Add(orderItemModel); } model.HasDownloadableProducts = hasDownloadableItems; #endregion }
public ActionResult EditOrderTotals(int id, OrderModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); order.OrderSubtotalInclTax = model.OrderSubtotalInclTaxValue; order.OrderSubtotalExclTax = model.OrderSubtotalExclTaxValue; order.OrderSubTotalDiscountInclTax = model.OrderSubTotalDiscountInclTaxValue; order.OrderSubTotalDiscountExclTax = model.OrderSubTotalDiscountExclTaxValue; order.OrderShippingInclTax = model.OrderShippingInclTaxValue; order.OrderShippingExclTax = model.OrderShippingExclTaxValue; order.PaymentMethodAdditionalFeeInclTax = model.PaymentMethodAdditionalFeeInclTaxValue; order.PaymentMethodAdditionalFeeExclTax = model.PaymentMethodAdditionalFeeExclTaxValue; order.TaxRates = model.TaxRatesValue; order.OrderTax = model.TaxValue; order.OrderDiscount = model.OrderTotalDiscountValue; order.OrderTotal = model.OrderTotalValue; _orderService.UpdateOrder(order); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult DeleteOrderItem(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); ViewData["selectedTab"] = "products"; //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnDeleteOrderItem", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnDeleteOrderItem".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.Id == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); _orderService.DeleteOrderItem(orderItem); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult PartiallyRefundOrderPopup(int id, bool online) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult Edit(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null || order.Deleted) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have to this functionality if (_workContext.CurrentVendor != null && !HasAccessToOrder(order)) return RedirectToAction("List"); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult AddProductToOrder(GridCommand command, OrderModel.AddOrderProductModel model) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var gridModel = new GridModel(); var productVariants = _productService.SearchProductVariants(model.SearchCategoryId, model.SearchManufacturerId, model.SearchProductName, false, command.Page - 1, command.PageSize, true); gridModel.Data = productVariants.Select(x => { var productVariantModel = new OrderModel.AddOrderProductModel.ProductVariantLineModel() { Id = x.Id, Name = x.FullProductName, Sku = x.Sku, }; return productVariantModel; }); gridModel.Total = productVariants.TotalCount; return new JsonResult { Data = gridModel }; }
public ActionResult PartiallyRefundOrderPopup(int id, bool online) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); //a vendor does not have to this functionality if (_workContext.CurrentVendor != null) return RedirectToAction("Edit", "Order", new { id = id }); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult CaptureOrder(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); try { var errors = _orderProcessingService.Capture(order); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); foreach (var error in errors) ErrorNotification(error, false); return View(model); } catch (Exception exc) { //error var model = new OrderModel(); PrepareOrderDetailsModel(model, order); ErrorNotification(exc, false); return View(model); } }
public ActionResult ResetDownloadCount(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); ViewData["selectedTab"] = "products"; //get order item identifier int orderItemId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnResetDownloadCount", StringComparison.InvariantCultureIgnoreCase)) orderItemId = Convert.ToInt32(formValue.Substring("btnResetDownloadCount".Length)); var orderItem = order.OrderItems.FirstOrDefault(x => x.Id == orderItemId); if (orderItem == null) throw new ArgumentException("No order item found with the specified id"); //ensure a vendor has access only to his products if (_workContext.CurrentVendor != null && !HasAccessToOrderItem(orderItem)) return RedirectToAction("List"); orderItem.DownloadCount = 0; _orderService.UpdateOrder(order); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult DeleteOrderProductVariant(int id, FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null) //No order found with the specified id return RedirectToAction("List"); ViewData["selectedTab"] = "products"; //get order product variant identifier int opvId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("btnDeleteOpv", StringComparison.InvariantCultureIgnoreCase)) opvId = Convert.ToInt32(formValue.Substring("btnDeleteOpv".Length)); var orderProductVariant = order.OrderProductVariants.Where(x => x.Id == opvId).FirstOrDefault(); if (orderProductVariant == null) throw new ArgumentException("No order product variant found with the specified id"); _orderService.DeleteOrderProductVariant(orderProductVariant); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }
public ActionResult Edit(int id) { if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders)) return AccessDeniedView(); var order = _orderService.GetOrderById(id); if (order == null || order.Deleted) throw new ArgumentException("No order found with the specified id", "id"); var model = new OrderModel(); PrepareOrderDetailsModel(model, order); return View(model); }