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; string returnRequestReasons = _orderSettings.GetLocalized(x => x.ReturnRequestReasons, order.CustomerLanguageId, true, false); string returnRequestActions = _orderSettings.GetLocalized(x => x.ReturnRequestActions, order.CustomerLanguageId, true, false); //return reasons foreach (var rrr in returnRequestReasons.SplitSafe(",")) { model.AvailableReturnReasons.Add(new SelectListItem() { Text = rrr, Value = rrr }); } //return actions foreach (var rra in returnRequestActions.SplitSafe(",")) { 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 switch (order.CustomerTaxDisplayType) { case TaxDisplayType.ExcludingTax: { var unitPriceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceExclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, false); } break; case TaxDisplayType.IncludingTax: { var unitPriceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceInclTax, order.CurrencyRate); orderItemModel.UnitPrice = _priceFormatter.FormatPrice(unitPriceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, _workContext.WorkingLanguage, true); } break; } } return model; }
/// <summary> /// Deletes an order /// </summary> /// <param name="order">The order</param> public virtual void DeleteOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); order.Deleted = true; UpdateOrder(order); }
public virtual void AddOrderNote(Order order, string note, bool displayToCustomer = false) { if (order != null && note.HasValue()) { order.OrderNotes.Add(new OrderNote { Note = note, DisplayToCustomer = displayToCustomer, CreatedOnUtc = DateTime.UtcNow }); UpdateOrder(order); } }
/// <summary> /// Gets a value indicating whether the order can be marked as completed /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether the order can be marked as completed</returns> public virtual bool CanCompleteOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); return (order.OrderStatus != OrderStatus.Complete && order.OrderStatus != OrderStatus.Cancelled); }
public void Can_save_and_load_order_with_giftCardUsageHistory() { var testCustomer = GetTestCustomer(); var order = new Order { OrderGuid = Guid.NewGuid(), Customer = testCustomer, BillingAddress = GetTestBillingAddress(), CreatedOnUtc = new DateTime(2010, 01, 01) }; order.GiftCardUsageHistory.Add ( new GiftCardUsageHistory() { UsedValue = 1.1M, CreatedOnUtc = new DateTime(2010, 01, 01), GiftCard = GetTestGiftCard() } ); var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.GiftCardUsageHistory.ShouldNotBeNull(); fromDb.GiftCardUsageHistory.Count.ShouldEqual(1); fromDb.GiftCardUsageHistory.First().CreatedOnUtc.ShouldEqual(new DateTime(2010, 01, 01)); }
/// <summary> /// Gets a value indicating whether customers can complete a payment after order is placed but not completed (for redirection payment methods) /// </summary> /// <param name="order">Order</param> /// <returns>Result</returns> public virtual bool CanRePostProcessPayment(Order order) { if (order == null) throw new ArgumentNullException("order"); if (!_paymentSettings.AllowRePostingPayments) return false; var paymentMethod = LoadPaymentMethodBySystemName(order.PaymentMethodSystemName); if (paymentMethod == null) return false; //Payment method couldn't be loaded (for example, was uninstalled) if (paymentMethod.Value.PaymentMethodType != PaymentMethodType.Redirection && paymentMethod.Value.PaymentMethodType != PaymentMethodType.StandardAndRedirection) return false; //this option is available only for redirection payment methods if (order.Deleted) return false; //do not allow for deleted orders if (order.OrderStatus == OrderStatus.Cancelled) return false; //do not allow for cancelled orders if (order.PaymentStatus != PaymentStatus.Pending) return false; //payment status should be Pending return paymentMethod.Value.CanRePostProcessPayment(order); }
/// <summary> /// Updates the order /// </summary> /// <param name="order">The order</param> public virtual void UpdateOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); order.UpdatedOnUtc = DateTime.UtcNow; _orderRepository.Update(order); //event notifications _eventPublisher.EntityUpdated(order); _eventPublisher.PublishOrderUpdated(order); }
public void Can_save_and_load_order_with_shipping_address() { var order = new Order { OrderGuid = Guid.NewGuid(), Customer = GetTestCustomer(), BillingAddress = GetTestBillingAddress(), ShippingAddress = GetTestShippingAddress(), CreatedOnUtc = new DateTime(2010, 01, 04) }; var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.ShippingAddress.ShouldNotBeNull(); fromDb.ShippingAddress.FirstName.ShouldEqual("FirstName 2"); }
//codehint: sm-add end public virtual void AddOrderTokens(IList<Token> tokens, Order order, int languageId) { tokens.Add(new Token("Order.OrderNumber", order.GetOrderNumber())); tokens.Add(new Token("Order.CustomerFullName", string.Format("{0} {1}", order.BillingAddress.FirstName, order.BillingAddress.LastName))); tokens.Add(new Token("Order.CustomerEmail", order.BillingAddress.Email)); tokens.Add(new Token("Order.BillingFirstName", order.BillingAddress.FirstName)); tokens.Add(new Token("Order.BillingLastName", order.BillingAddress.LastName)); tokens.Add(new Token("Order.BillingPhoneNumber", order.BillingAddress.PhoneNumber)); tokens.Add(new Token("Order.BillingEmail", order.BillingAddress.Email)); tokens.Add(new Token("Order.BillingFaxNumber", order.BillingAddress.FaxNumber)); tokens.Add(new Token("Order.BillingCompany", order.BillingAddress.Company)); tokens.Add(new Token("Order.BillingAddress1", order.BillingAddress.Address1)); tokens.Add(new Token("Order.BillingAddress2", order.BillingAddress.Address2)); tokens.Add(new Token("Order.BillingCity", order.BillingAddress.City)); tokens.Add(new Token("Order.BillingStateProvince", order.BillingAddress.StateProvince != null ? order.BillingAddress.StateProvince.GetLocalized(x => x.Name) : "")); tokens.Add(new Token("Order.BillingZipPostalCode", order.BillingAddress.ZipPostalCode)); tokens.Add(new Token("Order.BillingCountry", order.BillingAddress.Country != null ? order.BillingAddress.Country.GetLocalized(x => x.Name) : "")); tokens.Add(new Token("Order.ShippingMethod", order.ShippingMethod)); tokens.Add(new Token("Order.ShippingFirstName", order.ShippingAddress != null ? order.ShippingAddress.FirstName : "")); tokens.Add(new Token("Order.ShippingLastName", order.ShippingAddress != null ? order.ShippingAddress.LastName : "")); tokens.Add(new Token("Order.ShippingPhoneNumber", order.ShippingAddress != null ? order.ShippingAddress.PhoneNumber : "")); tokens.Add(new Token("Order.ShippingEmail", order.ShippingAddress != null ? order.ShippingAddress.Email : "")); tokens.Add(new Token("Order.ShippingFaxNumber", order.ShippingAddress != null ? order.ShippingAddress.FaxNumber : "")); tokens.Add(new Token("Order.ShippingCompany", order.ShippingAddress != null ? order.ShippingAddress.Company : "")); tokens.Add(new Token("Order.ShippingAddress1", order.ShippingAddress != null ? order.ShippingAddress.Address1 : "")); tokens.Add(new Token("Order.ShippingAddress2", order.ShippingAddress != null ? order.ShippingAddress.Address2 : "")); tokens.Add(new Token("Order.ShippingCity", order.ShippingAddress != null ? order.ShippingAddress.City : "")); tokens.Add(new Token("Order.ShippingStateProvince", order.ShippingAddress != null && order.ShippingAddress.StateProvince != null ? order.ShippingAddress.StateProvince.GetLocalized(x => x.Name) : "")); tokens.Add(new Token("Order.ShippingZipPostalCode", order.ShippingAddress != null ? order.ShippingAddress.ZipPostalCode : "")); tokens.Add(new Token("Order.ShippingCountry", order.ShippingAddress != null && order.ShippingAddress.Country != null ? order.ShippingAddress.Country.GetLocalized(x => x.Name) : "")); var paymentMethod = _paymentService.LoadPaymentMethodBySystemName(order.PaymentMethodSystemName); var paymentMethodName = paymentMethod != null ? GetLocalizedValue(paymentMethod.Metadata, "FriendlyName", x => x.FriendlyName) : order.PaymentMethodSystemName; tokens.Add(new Token("Order.PaymentMethod", paymentMethodName)); tokens.Add(new Token("Order.VatNumber", order.VatNumber)); tokens.Add(new Token("Order.Product(s)", ProductListToHtmlTable(order, languageId), true)); tokens.Add(new Token("Order.CustomerComment", order.CustomerOrderComment, true)); var language = _languageService.GetLanguageById(languageId); if (language != null && !String.IsNullOrEmpty(language.LanguageCulture)) { DateTime createdOn = _dateTimeHelper.ConvertToUserTime(order.CreatedOnUtc, TimeZoneInfo.Utc, _dateTimeHelper.GetCustomerTimeZone(order.Customer)); tokens.Add(new Token("Order.CreatedOn", createdOn.ToString("D", new CultureInfo(language.LanguageCulture)))); } else { tokens.Add(new Token("Order.CreatedOn", order.CreatedOnUtc.ToString("D"))); } //TODO add a method for getting URL (use routing because it handles all SEO friendly URLs) tokens.Add(new Token("Order.OrderURLForCustomer", string.Format("{0}order/details/{1}", _webHelper.GetStoreLocation(false), order.Id), true)); tokens.Add(new Token("Order.Disclaimer", TopicToHtml("Disclaimer", languageId), true)); tokens.Add(new Token("Order.ConditionsOfUse", TopicToHtml("ConditionsOfUse", languageId), true)); //event notification _eventPublisher.EntityTokensAdded(order, tokens); }
/// <summary> /// Capture an order (from admin panel) /// </summary> /// <param name="order">Order</param> /// <returns>A list of errors; empty list if no errors</returns> public virtual IList<string> Capture(Order order) { if (order == null) throw new ArgumentNullException("order"); if (!CanCapture(order)) throw new SmartException("Cannot do capture for order."); var request = new CapturePaymentRequest(); CapturePaymentResult result = null; try { //old info from placing order request.Order = order; result = _paymentService.Capture(request); if (result.Success) { var paidDate = order.PaidDateUtc; if (result.NewPaymentStatus == PaymentStatus.Paid) paidDate = DateTime.UtcNow; order.CaptureTransactionId = result.CaptureTransactionId; order.CaptureTransactionResult = result.CaptureTransactionResult; order.PaymentStatus = result.NewPaymentStatus; order.PaidDateUtc = paidDate; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote() { Note = T("OrderCaptured"), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); CheckOrderStatus(order); //raise event if (order.PaymentStatus == PaymentStatus.Paid) { _eventPublisher.PublishOrderPaid(order); } } } catch (Exception exc) { if (result == null) result = new CapturePaymentResult(); result.AddError(string.Format("Error: {0}. Full exception: {1}", exc.Message, exc.ToString())); } //process errors string error = ""; for (int i = 0; i < result.Errors.Count; i++) { error += string.Format("Error {0}: {1}", i, result.Errors[i]); if (i != result.Errors.Count - 1) error += ". "; } if (!String.IsNullOrEmpty(error)) { //add a note order.OrderNotes.Add(new OrderNote() { Note = string.Format("Unable to capture order. {0}", error), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); //log it string logError = string.Format(T("OrderCaptureError"), order.GetOrderNumber(), error); _logger.InsertLog(LogLevel.Error, logError, logError); } return result.Errors; }
public void Can_save_and_load_order_with_shipments() { var order = new Order { OrderGuid = Guid.NewGuid(), Customer = GetTestCustomer(), BillingAddress = GetTestBillingAddress(), CreatedOnUtc = new DateTime(2010, 01, 01) }; order.Shipments.Add ( new Shipment() { TrackingNumber = "TrackingNumber 1", ShippedDateUtc = new DateTime(2010, 01, 01), DeliveryDateUtc = new DateTime(2010, 01, 02), CreatedOnUtc = new DateTime(2010, 01, 03), } ); var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.Shipments.ShouldNotBeNull(); fromDb.Shipments.Count.ShouldEqual(1); fromDb.Shipments.First().TrackingNumber.ShouldEqual("TrackingNumber 1"); }
/// <summary> /// Gets a value indicating whether refund from admin panel is allowed /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether refund from admin panel is allowed</returns> public virtual bool CanRefund(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderTotal == decimal.Zero) return false; //uncomment the lines below in order to allow this operation for cancelled orders //if (order.OrderStatus == OrderStatus.Cancelled) // return false; if (order.PaymentStatus == PaymentStatus.Paid && _paymentService.SupportRefund(order.PaymentMethodSystemName)) return true; return false; }
/// <summary> /// Gets a value indicating whether order can be marked as voided /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether order can be marked as voided</returns> public virtual bool CanVoidOffline(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderTotal == decimal.Zero) return false; //uncomment the lines below in order to allow this operation for cancelled orders //if (order.OrderStatus == OrderStatus.Cancelled) // return false; if (order.PaymentStatus == PaymentStatus.Authorized) return true; return false; }
/// <summary> /// Gets a value indicating whether order can be marked as partially refunded /// </summary> /// <param name="order">Order</param> /// <param name="amountToRefund">Amount to refund</param> /// <returns>A value indicating whether order can be marked as partially refunded</returns> public virtual bool CanPartiallyRefundOffline(Order order, decimal amountToRefund) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderTotal == decimal.Zero) return false; //uncomment the lines below in order to allow this operation for cancelled orders //if (order.OrderStatus == OrderStatus.Cancelled) // return false; decimal canBeRefunded = order.OrderTotal - order.RefundedAmount; if (canBeRefunded <= decimal.Zero) return false; if (amountToRefund > canBeRefunded) return false; if (order.PaymentStatus == PaymentStatus.Paid || order.PaymentStatus == PaymentStatus.PartiallyRefunded) return true; return false; }
/// <summary> /// Gets a value indicating whether order can be marked as paid /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether order can be marked as paid</returns> public virtual bool CanMarkOrderAsPaid(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderStatus == OrderStatus.Cancelled) return false; if (order.PaymentStatus == PaymentStatus.Paid || order.PaymentStatus == PaymentStatus.Refunded || order.PaymentStatus == PaymentStatus.Voided) return false; return true; }
/// <summary> /// Gets a value indicating whether order can be marked as authorized /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether order can be marked as authorized</returns> public virtual bool CanMarkOrderAsAuthorized(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderStatus == OrderStatus.Cancelled) return false; if (order.PaymentStatus == PaymentStatus.Pending) return true; return false; }
public void Can_save_and_load_order_with_orderItems() { var order = new Order { OrderGuid = Guid.NewGuid(), Customer = GetTestCustomer(), BillingAddress = GetTestBillingAddress(), CreatedOnUtc = new DateTime(2010, 01, 01) }; order.OrderItems.Add ( new OrderItem() { Product = GetTestProduct(), Quantity = 1 } ); var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.OrderItems.ShouldNotBeNull(); fromDb.OrderItems.Count.ShouldEqual(1); fromDb.OrderItems.First().Quantity.ShouldEqual(1); }
/// <summary> /// Checks order status /// </summary> /// <param name="order">Order</param> /// <returns>Validated order</returns> public void CheckOrderStatus(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.PaymentStatus == PaymentStatus.Paid && !order.PaidDateUtc.HasValue) { //ensure that paid date is set order.PaidDateUtc = DateTime.UtcNow; _orderService.UpdateOrder(order); } if (order.OrderStatus == OrderStatus.Pending) { if (order.PaymentStatus == PaymentStatus.Authorized || order.PaymentStatus == PaymentStatus.Paid) { SetOrderStatus(order, OrderStatus.Processing, false); } } if (order.OrderStatus == OrderStatus.Pending) { if (order.ShippingStatus == ShippingStatus.PartiallyShipped || order.ShippingStatus == ShippingStatus.Shipped || order.ShippingStatus == ShippingStatus.Delivered) { SetOrderStatus(order, OrderStatus.Processing, false); } } if (order.OrderStatus != OrderStatus.Cancelled && order.OrderStatus != OrderStatus.Complete) { if (order.PaymentStatus == PaymentStatus.Paid) { if (order.ShippingStatus == ShippingStatus.ShippingNotRequired || order.ShippingStatus == ShippingStatus.Delivered) { SetOrderStatus(order, OrderStatus.Complete, true); } } } }
public void Can_save_and_load_order_with_orderNotes() { var order = new Order { OrderGuid = Guid.NewGuid(), Customer = GetTestCustomer(), BillingAddress = GetTestBillingAddress(), CreatedOnUtc = new DateTime(2010, 01, 01) }; order.OrderNotes.Add ( new OrderNote() { Note = "Note 1", CreatedOnUtc = new DateTime(2010, 01, 01), } ); var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.OrderNotes.ShouldNotBeNull(); fromDb.OrderNotes.Count.ShouldEqual(1); fromDb.OrderNotes.First().Note.ShouldEqual("Note 1"); }
/// <summary> /// Marks the order as completed /// </summary> /// <param name="order">Order</param> public virtual void CompleteOrder(Order order) { if (!CanCompleteOrder(order)) throw new SmartException("You can't mark this order as completed"); if (CanMarkOrderAsPaid(order)) { MarkOrderAsPaid(order); } if (order.ShippingStatus != ShippingStatus.ShippingNotRequired) { order.ShippingStatusId = (int)ShippingStatus.Delivered; } _orderService.UpdateOrder(order); CheckOrderStatus(order); }
public void Can_save_and_load_order() { var order = new Order { OrderGuid = Guid.NewGuid(), StoreId = 1, Customer = GetTestCustomer(), OrderStatus = OrderStatus.Complete, ShippingStatus = ShippingStatus.Shipped, PaymentStatus = PaymentStatus.Paid, PaymentMethodSystemName = "PaymentMethodSystemName1", CustomerCurrencyCode = "RUR", CurrencyRate = 1.1M, CustomerTaxDisplayType = TaxDisplayType.ExcludingTax, VatNumber = "123456789", OrderSubtotalInclTax = 2.1M, OrderSubtotalExclTax = 3.1M, OrderSubTotalDiscountInclTax = 4.1M, OrderSubTotalDiscountExclTax = 5.1M, OrderShippingInclTax = 6.1M, OrderShippingExclTax = 7.1M, PaymentMethodAdditionalFeeInclTax = 8.1M, PaymentMethodAdditionalFeeExclTax = 9.1M, TaxRates = "1,3,5,7", OrderTax = 10.1M, OrderDiscount = 11.1M, OrderTotal = 12.1M, RefundedAmount = 13.1M, RewardPointsWereAdded = true, CheckoutAttributeDescription = "CheckoutAttributeDescription1", CheckoutAttributesXml = "CheckoutAttributesXml1", CustomerLanguageId = 14, CustomerIp="CustomerIp1", AllowStoringCreditCardNumber= true, CardType= "Visa", CardName = "John Smith", CardNumber = "4111111111111111", MaskedCreditCardNumber= "************1111", CardCvv2= "123", CardExpirationMonth= "12", CardExpirationYear = "2010", AuthorizationTransactionId = "AuthorizationTransactionId1", AuthorizationTransactionCode="AuthorizationTransactionCode1", AuthorizationTransactionResult="AuthorizationTransactionResult1", CaptureTransactionId= "CaptureTransactionId1", CaptureTransactionResult = "CaptureTransactionResult1", SubscriptionTransactionId = "SubscriptionTransactionId1", PurchaseOrderNumber= "PurchaseOrderNumber1", PaidDateUtc= new DateTime(2010, 01, 01), BillingAddress = GetTestBillingAddress(), ShippingAddress = null, ShippingMethod = "ShippingMethod1", ShippingRateComputationMethodSystemName="ShippingRateComputationMethodSystemName1", Deleted = false, CreatedOnUtc = new DateTime(2010, 01, 04) }; var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.StoreId.ShouldEqual(1); fromDb.Customer.ShouldNotBeNull(); fromDb.OrderStatus.ShouldEqual(OrderStatus.Complete); fromDb.ShippingStatus.ShouldEqual(ShippingStatus.Shipped); fromDb.PaymentStatus.ShouldEqual(PaymentStatus.Paid); fromDb.PaymentMethodSystemName.ShouldEqual("PaymentMethodSystemName1"); fromDb.CustomerCurrencyCode.ShouldEqual("RUR"); fromDb.CurrencyRate.ShouldEqual(1.1M); fromDb.CustomerTaxDisplayType.ShouldEqual(TaxDisplayType.ExcludingTax); fromDb.VatNumber.ShouldEqual("123456789"); fromDb.OrderSubtotalInclTax.ShouldEqual(2.1M); fromDb.OrderSubtotalExclTax.ShouldEqual(3.1M); fromDb.OrderSubTotalDiscountInclTax.ShouldEqual(4.1M); fromDb.OrderSubTotalDiscountExclTax.ShouldEqual(5.1M); fromDb.OrderShippingInclTax.ShouldEqual(6.1M); fromDb.OrderShippingExclTax.ShouldEqual(7.1M); fromDb.PaymentMethodAdditionalFeeInclTax.ShouldEqual(8.1M); fromDb.PaymentMethodAdditionalFeeExclTax.ShouldEqual(9.1M); fromDb.TaxRates.ShouldEqual("1,3,5,7"); fromDb.OrderTax.ShouldEqual(10.1M); fromDb.OrderDiscount.ShouldEqual(11.1M); fromDb.OrderTotal.ShouldEqual(12.1M); fromDb.RefundedAmount.ShouldEqual(13.1M); fromDb.RewardPointsWereAdded.ShouldEqual(true); fromDb.CheckoutAttributeDescription.ShouldEqual("CheckoutAttributeDescription1"); fromDb.CheckoutAttributesXml.ShouldEqual("CheckoutAttributesXml1"); fromDb.CustomerLanguageId.ShouldEqual(14); fromDb.CustomerIp.ShouldEqual("CustomerIp1"); fromDb.AllowStoringCreditCardNumber.ShouldEqual(true); fromDb.CardType.ShouldEqual("Visa"); fromDb.CardName.ShouldEqual("John Smith"); fromDb.CardNumber.ShouldEqual("4111111111111111"); fromDb.MaskedCreditCardNumber.ShouldEqual("************1111"); fromDb.CardCvv2.ShouldEqual("123"); fromDb.CardExpirationMonth.ShouldEqual("12"); fromDb.CardExpirationYear.ShouldEqual("2010"); fromDb.AuthorizationTransactionId.ShouldEqual("AuthorizationTransactionId1"); fromDb.AuthorizationTransactionCode.ShouldEqual("AuthorizationTransactionCode1"); fromDb.AuthorizationTransactionResult.ShouldEqual("AuthorizationTransactionResult1"); fromDb.CaptureTransactionId.ShouldEqual("CaptureTransactionId1"); fromDb.CaptureTransactionResult.ShouldEqual("CaptureTransactionResult1"); fromDb.SubscriptionTransactionId.ShouldEqual("SubscriptionTransactionId1"); fromDb.PurchaseOrderNumber.ShouldEqual("PurchaseOrderNumber1"); fromDb.PaidDateUtc.ShouldEqual(new DateTime(2010, 01, 01)); fromDb.BillingAddress.ShouldNotBeNull(); fromDb.BillingAddress.FirstName.ShouldEqual("FirstName 1"); fromDb.ShippingAddress.ShouldBeNull(); fromDb.ShippingMethod.ShouldEqual("ShippingMethod1"); fromDb.ShippingRateComputationMethodSystemName.ShouldEqual("ShippingRateComputationMethodSystemName1"); fromDb.Deleted.ShouldEqual(false); fromDb.CreatedOnUtc.ShouldEqual(new DateTime(2010, 01, 04)); }
/// <summary> /// Deletes an order /// </summary> /// <param name="order">The order</param> public virtual void DeleteOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); //reward points ReduceRewardPoints(order); //cancel recurring payments var recurringPayments = _orderService.SearchRecurringPayments(0, 0, order.Id, null); foreach (var rp in recurringPayments) { //use errors? var errors = CancelRecurringPayment(rp); } //Adjust inventory foreach (var orderItem in order.OrderItems) { _productService.AdjustInventory(orderItem, false, orderItem.Quantity); } //add a note order.OrderNotes.Add(new OrderNote() { Note = T("OrderDeleted"), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); //now delete an order _orderService.DeleteOrder(order); }
public void Can_save_and_load_order_with_usedRewardPoints() { var order = new Order { OrderGuid = Guid.NewGuid(), Customer = GetTestCustomer(), RedeemedRewardPointsEntry = new RewardPointsHistory() { Customer = GetTestCustomer(), Points = -1, Message = "Used with order", PointsBalance = 2, UsedAmount = 3, CreatedOnUtc = new DateTime(2010, 01, 01) }, BillingAddress = GetTestBillingAddress(), CreatedOnUtc = new DateTime(2010, 01, 01) }; var fromDb = SaveAndLoadEntity(order); fromDb.ShouldNotBeNull(); fromDb.Deleted.ShouldEqual(false); fromDb.CreatedOnUtc.ShouldEqual(new DateTime(2010, 01, 01)); fromDb.RedeemedRewardPointsEntry.ShouldNotBeNull(); fromDb.RedeemedRewardPointsEntry.Points.ShouldEqual(-1); }
/// <summary> /// Check whether return request is allowed /// </summary> /// <param name="order">Order</param> /// <returns>Result</returns> public virtual bool IsReturnRequestAllowed(Order order) { if (!_orderSettings.ReturnRequestsEnabled) return false; if (order == null || order.Deleted) return false; if (order.OrderStatus != OrderStatus.Complete) return false; bool numberOfDaysReturnRequestAvailableValid = false; if (_orderSettings.NumberOfDaysReturnRequestAvailable == 0) { numberOfDaysReturnRequestAvailableValid = true; } else { var daysPassed = (DateTime.UtcNow - order.CreatedOnUtc).TotalDays; numberOfDaysReturnRequestAvailableValid = (daysPassed - _orderSettings.NumberOfDaysReturnRequestAvailable) < 0; } return numberOfDaysReturnRequestAvailableValid; }
/// <summary> /// Convert a collection to a HTML table /// </summary> /// <param name="order">Order</param> /// <param name="languageId">Language identifier</param> /// <returns>HTML table of products</returns> protected virtual string ProductListToHtmlTable(Order order, int languageId) { var result = ""; var language = _languageService.GetLanguageById(languageId); var sb = new StringBuilder(); sb.AppendLine("<table border=\"0\" style=\"width:100%;\">"); #region Products sb.AppendLine(string.Format("<tr style=\"background-color:{0};text-align:center;\">", _templatesSettings.Color1)); sb.AppendLine(string.Format("<th>{0}</th>", _localizationService.GetResource("Messages.Order.Product(s).Name", languageId))); sb.AppendLine(string.Format("<th>{0}</th>", _localizationService.GetResource("Messages.Order.Product(s).Price", languageId))); sb.AppendLine(string.Format("<th>{0}</th>", _localizationService.GetResource("Messages.Order.Product(s).Quantity", languageId))); sb.AppendLine(string.Format("<th>{0}</th>", _localizationService.GetResource("Messages.Order.Product(s).Total", languageId))); sb.AppendLine("</tr>"); var table = order.OrderItems.ToList(); for (int i = 0; i <= table.Count - 1; i++) { var orderItem = table[i]; var product = orderItem.Product; if (product == null) continue; DeliveryTime deliveryTime = null; // merging attribute combination data required? if (_catalogSettings.ShowProductSku || (_shoppingCartSettings.ShowDeliveryTimes && product.IsShipEnabled)) { product.MergeWithCombination(orderItem.AttributesXml, _productAttributeParser); } if (_shoppingCartSettings.ShowDeliveryTimes && product.IsShipEnabled) { deliveryTime = _deliveryTimeService.GetDeliveryTimeById(product.DeliveryTimeId ?? 0); } sb.AppendLine(string.Format("<tr style=\"background-color: {0};text-align: center;\">", _templatesSettings.Color2)); //product name string productName = product.GetLocalized(x => x.Name, languageId); sb.AppendLine("<td style=\"padding: 0.6em 0.4em;text-align: left;\">" + HttpUtility.HtmlEncode(productName)); //add download link if (_downloadService.IsDownloadAllowed(orderItem)) { //TODO add a method for getting URL (use routing because it handles all SEO friendly URLs) string downloadUrl = string.Format("{0}download/getdownload/{1}", _webHelper.GetStoreLocation(false), orderItem.OrderItemGuid); string downloadLink = string.Format("<a class=\"link\" href=\"{0}\">{1}</a>", downloadUrl, _localizationService.GetResource("Messages.Order.Product(s).Download", languageId)); sb.AppendLine(" ("); sb.AppendLine(downloadLink); sb.AppendLine(")"); } //deliverytime if (deliveryTime != null) { string deliveryTimeName = HttpUtility.HtmlEncode(deliveryTime.GetLocalized(x => x.Name)); sb.AppendLine("<br />"); sb.AppendLine("<div class=\"delivery-time\">"); sb.AppendLine("<span class=\"delivery-time-label\">" + _localizationService.GetResource("Products.DeliveryTime") + "</span>"); sb.AppendLine("<span class=\"delivery-time-color\" style=\"background-color:" + deliveryTime.ColorHexValue + "\" title=\"" + deliveryTimeName + "\"></span>"); sb.AppendLine("<span class=\"delivery-time-value\">" + deliveryTimeName + "</span>"); sb.AppendLine("</div>"); } //attributes if (!String.IsNullOrEmpty(orderItem.AttributeDescription)) { sb.AppendLine("<br />"); sb.AppendLine(orderItem.AttributeDescription); } //sku if (_catalogSettings.ShowProductSku) { if (!String.IsNullOrEmpty(product.Sku)) { sb.AppendLine("<br />"); sb.AppendLine(string.Format(_localizationService.GetResource("Messages.Order.Product(s).SKU", languageId), HttpUtility.HtmlEncode(product.Sku))); } } sb.AppendLine("</td>"); string unitPriceStr = string.Empty; switch (order.CustomerTaxDisplayType) { case TaxDisplayType.ExcludingTax: { var unitPriceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceExclTax, order.CurrencyRate); unitPriceStr = _priceFormatter.FormatPrice(unitPriceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); } break; case TaxDisplayType.IncludingTax: { var unitPriceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.UnitPriceInclTax, order.CurrencyRate); unitPriceStr = _priceFormatter.FormatPrice(unitPriceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); } break; } sb.AppendLine(string.Format("<td style=\"padding: 0.6em 0.4em;text-align: right;\">{0}</td>", unitPriceStr)); var quantityUnit = _quantityUnitService.GetQuantityUnitById(product.QuantityUnitId); sb.AppendLine(string.Format("<td style=\"padding: 0.6em 0.4em;text-align: center;\">{0} {1}</td>", orderItem.Quantity, quantityUnit == null ? "" : quantityUnit.GetLocalized(x => x.Name))); string priceStr = string.Empty; switch (order.CustomerTaxDisplayType) { case TaxDisplayType.ExcludingTax: { var priceExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.PriceExclTax, order.CurrencyRate); priceStr = _priceFormatter.FormatPrice(priceExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); } break; case TaxDisplayType.IncludingTax: { var priceInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(orderItem.PriceInclTax, order.CurrencyRate); priceStr = _priceFormatter.FormatPrice(priceInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); } break; } sb.AppendLine(string.Format("<td style=\"padding: 0.6em 0.4em;text-align: right;\">{0}</td>", priceStr)); sb.AppendLine("</tr>"); } #endregion #region Checkout Attributes if (!String.IsNullOrEmpty(order.CheckoutAttributeDescription)) { sb.AppendLine("<tr><td style=\"text-align:right;\" colspan=\"1\"> </td><td colspan=\"3\" style=\"text-align:right\">"); //codehint: sm-edit //sb.AppendLine(order.CheckoutAttributeDescription); sb.AppendLine(HtmlUtils.ConvertPlainTextToTable(HtmlUtils.ConvertHtmlToPlainText(order.CheckoutAttributeDescription))); sb.AppendLine("</td></tr>"); } #endregion #region Totals string cusSubTotal = string.Empty; bool dislaySubTotalDiscount = false; string cusSubTotalDiscount = string.Empty; string cusShipTotal = string.Empty; string cusPaymentMethodAdditionalFee = string.Empty; var taxRates = new SortedDictionary<decimal, decimal>(); string cusTaxTotal = string.Empty; string cusDiscount = string.Empty; string cusTotal = string.Empty; //subtotal, shipping, payment method fee switch (order.CustomerTaxDisplayType) { case TaxDisplayType.ExcludingTax: { //subtotal var orderSubtotalExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderSubtotalExclTax, order.CurrencyRate); cusSubTotal = _priceFormatter.FormatPrice(orderSubtotalExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); //discount (applied to order subtotal) var orderSubTotalDiscountExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderSubTotalDiscountExclTax, order.CurrencyRate); if (orderSubTotalDiscountExclTaxInCustomerCurrency > decimal.Zero) { cusSubTotalDiscount = _priceFormatter.FormatPrice(-orderSubTotalDiscountExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); dislaySubTotalDiscount = true; } //shipping var orderShippingExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderShippingExclTax, order.CurrencyRate); cusShipTotal = _priceFormatter.FormatShippingPrice(orderShippingExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); //payment method additional fee var paymentMethodAdditionalFeeExclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.PaymentMethodAdditionalFeeExclTax, order.CurrencyRate); cusPaymentMethodAdditionalFee = _priceFormatter.FormatPaymentMethodAdditionalFee(paymentMethodAdditionalFeeExclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, false); } break; case TaxDisplayType.IncludingTax: { //subtotal var orderSubtotalInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderSubtotalInclTax, order.CurrencyRate); cusSubTotal = _priceFormatter.FormatPrice(orderSubtotalInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); //discount (applied to order subtotal) var orderSubTotalDiscountInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderSubTotalDiscountInclTax, order.CurrencyRate); if (orderSubTotalDiscountInclTaxInCustomerCurrency > decimal.Zero) { cusSubTotalDiscount = _priceFormatter.FormatPrice(-orderSubTotalDiscountInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); dislaySubTotalDiscount = true; } //shipping var orderShippingInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderShippingInclTax, order.CurrencyRate); cusShipTotal = _priceFormatter.FormatShippingPrice(orderShippingInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); //payment method additional fee var paymentMethodAdditionalFeeInclTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.PaymentMethodAdditionalFeeInclTax, order.CurrencyRate); cusPaymentMethodAdditionalFee = _priceFormatter.FormatPaymentMethodAdditionalFee(paymentMethodAdditionalFeeInclTaxInCustomerCurrency, true, order.CustomerCurrencyCode, language, true); } break; } //shipping bool dislayShipping = order.ShippingStatus != ShippingStatus.ShippingNotRequired; //payment method fee bool displayPaymentMethodFee = true; if (order.PaymentMethodAdditionalFeeExclTax == decimal.Zero) { displayPaymentMethodFee = false; } //tax bool displayTax = true; bool displayTaxRates = true; if (_taxSettings.HideTaxInOrderSummary && order.CustomerTaxDisplayType == TaxDisplayType.IncludingTax) { displayTax = false; displayTaxRates = false; } else { if (order.OrderTax == 0 && _taxSettings.HideZeroTax) { displayTax = false; displayTaxRates = false; } else { taxRates = new SortedDictionary<decimal, decimal>(); foreach (var tr in order.TaxRatesDictionary) taxRates.Add(tr.Key, _currencyService.ConvertCurrency(tr.Value, order.CurrencyRate)); displayTaxRates = _taxSettings.DisplayTaxRates && taxRates.Count > 0; displayTax = !displayTaxRates; var orderTaxInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderTax, order.CurrencyRate); string taxStr = _priceFormatter.FormatPrice(orderTaxInCustomerCurrency, true, order.CustomerCurrencyCode, false, language); cusTaxTotal = taxStr; } } //discount bool dislayDiscount = false; if (order.OrderDiscount > decimal.Zero) { var orderDiscountInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderDiscount, order.CurrencyRate); cusDiscount = _priceFormatter.FormatPrice(-orderDiscountInCustomerCurrency, true, order.CustomerCurrencyCode, false, language); dislayDiscount = true; } //total var orderTotalInCustomerCurrency = _currencyService.ConvertCurrency(order.OrderTotal, order.CurrencyRate); cusTotal = _priceFormatter.FormatPrice(orderTotalInCustomerCurrency, true, order.CustomerCurrencyCode, false, language); //subtotal //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.SubTotal", languageId), cusSubTotal)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", _localizationService.GetResource("Messages.Order.SubTotal", languageId), cusSubTotal)); //discount (applied to order subtotal) if (dislaySubTotalDiscount) { //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.SubTotalDiscount", languageId), cusSubTotalDiscount)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", _localizationService.GetResource("Messages.Order.SubTotalDiscount", languageId), cusSubTotalDiscount)); } //shipping if (dislayShipping) { //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.Shipping", languageId), cusShipTotal)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", _localizationService.GetResource("Messages.Order.Shipping", languageId), cusShipTotal)); } //payment method fee if (displayPaymentMethodFee) { string paymentMethodFeeTitle = _localizationService.GetResource("Messages.Order.PaymentMethodAdditionalFee", languageId); //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, paymentMethodFeeTitle, cusPaymentMethodAdditionalFee)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", paymentMethodFeeTitle, cusPaymentMethodAdditionalFee)); } //tax if (displayTax) { //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.Tax", languageId), cusTaxTotal)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", _localizationService.GetResource("Messages.Order.Tax", languageId), cusTaxTotal)); } if (displayTaxRates) { foreach (var item in taxRates) { string taxRate = String.Format(_localizationService.GetResource("Messages.Order.TaxRateLine"), _priceFormatter.FormatTaxRate(item.Key)); string taxValue = _priceFormatter.FormatPrice(item.Value, true, order.CustomerCurrencyCode, false, language); //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, taxRate, taxValue)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", taxRate, taxValue)); } } //discount if (dislayDiscount) { //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.TotalDiscount", languageId), cusDiscount)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", _localizationService.GetResource("Messages.Order.TotalDiscount", languageId), cusDiscount)); } //gift cards var gcuhC = order.GiftCardUsageHistory; foreach (var gcuh in gcuhC) { string giftCardText = String.Format(_localizationService.GetResource("Messages.Order.GiftCardInfo", languageId), HttpUtility.HtmlEncode(gcuh.GiftCard.GiftCardCouponCode)); string giftCardAmount = _priceFormatter.FormatPrice(-(_currencyService.ConvertCurrency(gcuh.UsedValue, order.CurrencyRate)), true, order.CustomerCurrencyCode, false, language); //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, giftCardText, giftCardAmount)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", giftCardText, giftCardAmount)); } //reward points if (order.RedeemedRewardPointsEntry != null) { string rpTitle = string.Format(_localizationService.GetResource("Messages.Order.RewardPoints", languageId), -order.RedeemedRewardPointsEntry.Points); string rpAmount = _priceFormatter.FormatPrice(-(_currencyService.ConvertCurrency(order.RedeemedRewardPointsEntry.UsedAmount, order.CurrencyRate)), true, order.CustomerCurrencyCode, false, language); //sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{1}</strong></td> <td style=\"background-color: {0};padding:0.6em 0.4 em;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, rpTitle, rpAmount)); sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"padding:8px 0;border-top:1px solid #ddd;\"><strong>{0}</strong></td> <td style=\"padding:8px;border-top:1px solid #ddd;\">{1}</td></tr>", rpTitle, rpAmount)); } //total sb.AppendLine(string.Format("<tr style=\"text-align:right;\"><td> </td><td colspan=\"2\" style=\"background-color: {0};padding:8px 0;border-top:1px solid #ddd;\"><strong>{1}</strong></td><td style=\"background-color: {0};padding:8px;border-top:1px solid #ddd;\"><strong>{2}</strong></td></tr>", _templatesSettings.Color3, _localizationService.GetResource("Messages.Order.OrderTotal", languageId), cusTotal)); #endregion sb.AppendLine("</table>"); result = sb.ToString(); return result; }
/// <summary> /// Gets a value indicating whether capture from admin panel is allowed /// </summary> /// <param name="order">Order</param> /// <returns>A value indicating whether capture from admin panel is allowed</returns> public virtual bool CanCapture(Order order) { if (order == null) throw new ArgumentNullException("order"); if (order.OrderStatus == OrderStatus.Cancelled || order.OrderStatus == OrderStatus.Pending) return false; if (order.PaymentStatus == PaymentStatus.Authorized && _paymentService.SupportCapture(order.PaymentMethodSystemName)) return true; return false; }
/// <summary> /// Inserts an order /// </summary> /// <param name="order">Order</param> public virtual void InsertOrder(Order order) { if (order == null) throw new ArgumentNullException("order"); _orderRepository.Insert(order); //event notification _eventPublisher.EntityInserted(order); }
/// <summary> /// Marks order as paid /// </summary> /// <param name="order">Order</param> public virtual void MarkOrderAsPaid(Order order) { if (order == null) throw new ArgumentNullException("order"); if (!CanMarkOrderAsPaid(order)) throw new SmartException("You can't mark this order as paid"); order.PaymentStatusId = (int)PaymentStatus.Paid; order.PaidDateUtc = DateTime.UtcNow; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote() { Note = T("OrderMarkedAsPaid"), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); CheckOrderStatus(order); //raise event if (order.PaymentStatus == PaymentStatus.Paid) { _eventPublisher.PublishOrderPaid(order); } }
/// <summary> /// Marks order as authorized /// </summary> /// <param name="order">Order</param> public virtual void MarkAsAuthorized(Order order) { if (order == null) throw new ArgumentNullException("order"); order.PaymentStatusId = (int)PaymentStatus.Authorized; _orderService.UpdateOrder(order); //add a note order.OrderNotes.Add(new OrderNote() { Note = T("OrderMarkedAsAuthorized"), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); //check order status CheckOrderStatus(order); }
/// <summary> /// Cancels order /// </summary> /// <param name="order">Order</param> /// <param name="notifyCustomer">True to notify customer</param> public virtual void CancelOrder(Order order, bool notifyCustomer) { if (order == null) throw new ArgumentNullException("order"); if (!CanCancelOrder(order)) throw new SmartException("Cannot do cancel for order."); //Cancel order SetOrderStatus(order, OrderStatus.Cancelled, notifyCustomer); //add a note order.OrderNotes.Add(new OrderNote() { Note = T("OrderCancelled"), DisplayToCustomer = false, CreatedOnUtc = DateTime.UtcNow }); _orderService.UpdateOrder(order); //cancel recurring payments var recurringPayments = _orderService.SearchRecurringPayments(0, 0, order.Id, null); foreach (var rp in recurringPayments) { //use errors? var errors = CancelRecurringPayment(rp); } //Adjust inventory foreach (var orderItem in order.OrderItems) { _productService.AdjustInventory(orderItem, false, orderItem.Quantity); } }