本文整理汇总了C#中Nop.Core.Domain.Orders.OrderItem类的典型用法代码示例。如果您正苦于以下问题:C# OrderItem类的具体用法?C# OrderItem怎么用?C# OrderItem使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
OrderItem类属于Nop.Core.Domain.Orders命名空间,在下文中一共展示了OrderItem类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DeleteOrderItem
/// <summary>
/// Delete an order item
/// </summary>
/// <param name="orderItem">The order item</param>
public virtual void DeleteOrderItem(OrderItem orderItem)
{
if (orderItem == null)
throw new ArgumentNullException("orderItem");
_orderItemRepository.Delete(orderItem);
//event notification
_eventPublisher.EntityDeleted(orderItem);
}
示例2: Can_save_and_load_orderItem_with_giftCard
public void Can_save_and_load_orderItem_with_giftCard()
{
var orderItem = new OrderItem
{
Order = GetTestOrder(),
Product = GetTestProduct(),
};
orderItem.AssociatedGiftCards.Add(GetTestGiftCard());
var fromDb = SaveAndLoadEntity(orderItem);
fromDb.ShouldNotBeNull();
fromDb.AssociatedGiftCards.ShouldNotBeNull();
(fromDb.AssociatedGiftCards.Count == 1).ShouldBeTrue();
fromDb.AssociatedGiftCards.First().Amount.ShouldEqual(10);
}
示例3: Can_save_and_load_orderItem
public void Can_save_and_load_orderItem()
{
var orderItem = new OrderItem
{
Order = GetTestOrder(),
Product= GetTestProduct(),
Quantity = 1,
UnitPriceInclTax= 1.1M,
UnitPriceExclTax = 2.1M,
PriceInclTax = 3.1M,
PriceExclTax = 4.1M,
DiscountAmountInclTax = 5.1M,
DiscountAmountExclTax = 6.1M,
OriginalProductCost = 7.1M,
AttributeDescription= "AttributeDescription1",
AttributesXml= "AttributesXml1",
DownloadCount= 7,
IsDownloadActivated=true,
LicenseDownloadId= 8,
ItemWeight = 9.87M,
RentalStartDateUtc = new DateTime(2010, 01, 01),
RentalEndDateUtc = new DateTime(2010, 01, 02)
};
var fromDb = SaveAndLoadEntity(orderItem);
fromDb.ShouldNotBeNull();
fromDb.Order.ShouldNotBeNull();
fromDb.Product.ShouldNotBeNull();
fromDb.UnitPriceInclTax.ShouldEqual(1.1M);
fromDb.UnitPriceExclTax.ShouldEqual(2.1M);
fromDb.PriceInclTax.ShouldEqual(3.1M);
fromDb.PriceExclTax.ShouldEqual(4.1M);
fromDb.DiscountAmountInclTax.ShouldEqual(5.1M);
fromDb.DiscountAmountExclTax.ShouldEqual(6.1M);
fromDb.OriginalProductCost.ShouldEqual(7.1M);
fromDb.AttributeDescription.ShouldEqual("AttributeDescription1");
fromDb.AttributesXml.ShouldEqual("AttributesXml1");
fromDb.DownloadCount.ShouldEqual(7);
fromDb.IsDownloadActivated.ShouldEqual(true);
fromDb.LicenseDownloadId.ShouldEqual(8);
fromDb.ItemWeight.ShouldEqual(9.87M);
fromDb.RentalStartDateUtc.ShouldEqual(new DateTime(2010, 01, 01));
fromDb.RentalEndDateUtc.ShouldEqual(new DateTime(2010, 01, 02));
fromDb.Order.ShouldNotBeNull();
}
示例4: AddReturnRequestTokens
public virtual void AddReturnRequestTokens(IList<Token> tokens, ReturnRequest returnRequest, OrderItem orderItem)
{
tokens.Add(new Token("ReturnRequest.ID", returnRequest.Id.ToString()));
tokens.Add(new Token("ReturnRequest.OrderId", orderItem.OrderId.ToString()));
tokens.Add(new Token("ReturnRequest.Product.Quantity", returnRequest.Quantity.ToString()));
tokens.Add(new Token("ReturnRequest.Product.Name", orderItem.Product.Name));
tokens.Add(new Token("ReturnRequest.Reason", returnRequest.ReasonForReturn));
tokens.Add(new Token("ReturnRequest.RequestedAction", returnRequest.RequestedAction));
tokens.Add(new Token("ReturnRequest.CustomerComment", HtmlHelper.FormatText(returnRequest.CustomerComments, false, true, false, false, false, false), true));
tokens.Add(new Token("ReturnRequest.StaffNotes", HtmlHelper.FormatText(returnRequest.StaffNotes, false, true, false, false, false, false), true));
tokens.Add(new Token("ReturnRequest.Status", returnRequest.ReturnRequestStatus.GetLocalizedEnum(_localizationService, _workContext)));
//event notification
_eventPublisher.EntityTokensAdded(returnRequest, tokens);
}
示例5: PaypalOrderDetails
//.........这里部分代码省略.........
CreatedOnUtc = DateTime.UtcNow
};
//_orderService.InsertOrder(order);
result.PlacedOrder = order;
if (!processPaymentRequest.IsRecurringPayment)
{
//move shopping cart items to order items
foreach (var sc in details.Cart)
{
//prices
decimal taxRate;
Discount scDiscount;
decimal discountAmount;
decimal scUnitPrice = _priceCalculationService.GetUnitPrice(sc);
decimal scSubTotal = _priceCalculationService.GetSubTotal(sc, true, out discountAmount, out scDiscount);
decimal scUnitPriceInclTax = _taxService.GetProductPrice(sc.Product, scUnitPrice, true, details.Customer, out taxRate);
decimal scUnitPriceExclTax = _taxService.GetProductPrice(sc.Product, scUnitPrice, false, details.Customer, out taxRate);
decimal scSubTotalInclTax = _taxService.GetProductPrice(sc.Product, scSubTotal, true, details.Customer, out taxRate);
decimal scSubTotalExclTax = _taxService.GetProductPrice(sc.Product, scSubTotal, false, details.Customer, out taxRate);
decimal discountAmountInclTax = _taxService.GetProductPrice(sc.Product, discountAmount, true, details.Customer, out taxRate);
decimal discountAmountExclTax = _taxService.GetProductPrice(sc.Product, discountAmount, false, details.Customer, out taxRate);
if (scDiscount != null && !details.AppliedDiscounts.ContainsDiscount(scDiscount))
details.AppliedDiscounts.Add(scDiscount);
//attributes
string attributeDescription = _productAttributeFormatter.FormatAttributes(sc.Product, sc.AttributesXml, details.Customer);
var itemWeight = _shippingService.GetShoppingCartItemWeight(sc);
//save order item
var orderItem = new OrderItem
{
OrderItemGuid = Guid.NewGuid(),
Order = order,
ProductId = sc.ProductId,
UnitPriceInclTax = scUnitPriceInclTax,
UnitPriceExclTax = scUnitPriceExclTax,
PriceInclTax = scSubTotalInclTax,
PriceExclTax = scSubTotalExclTax,
OriginalProductCost = _priceCalculationService.GetProductCost(sc.Product, sc.AttributesXml),
AttributeDescription = attributeDescription,
AttributesXml = sc.AttributesXml,
Quantity = sc.Quantity,
DiscountAmountInclTax = discountAmountInclTax,
DiscountAmountExclTax = discountAmountExclTax,
DownloadCount = 0,
IsDownloadActivated = false,
LicenseDownloadId = 0,
ItemWeight = itemWeight,
RentalStartDateUtc = sc.RentalStartDateUtc,
RentalEndDateUtc = sc.RentalEndDateUtc
};
order.OrderItems.Add(orderItem);
//_orderService.UpdateOrder(order);
//gift cards
if (sc.Product.IsGiftCard)
{
string giftCardRecipientName, giftCardRecipientEmail,
giftCardSenderName, giftCardSenderEmail, giftCardMessage;
_productAttributeParser.GetGiftCardAttribute(sc.AttributesXml,
out giftCardRecipientName, out giftCardRecipientEmail,
out giftCardSenderName, out giftCardSenderEmail, out giftCardMessage);
开发者ID:propeersinfo,项目名称:nopcommerce-PayPalStandard-3.70,代码行数:67,代码来源:PaypalStandardOrderProcessingService.cs
示例6: IsLicenseDownloadAllowed
/// <summary>
/// Gets a value indicating whether license download is allowed
/// </summary>
/// <param name="orderItem">Order item to check</param>
/// <returns>True if license download is allowed; otherwise, false.</returns>
public virtual bool IsLicenseDownloadAllowed(OrderItem orderItem)
{
if (orderItem == null)
return false;
return IsDownloadAllowed(orderItem) &&
orderItem.LicenseDownloadId.HasValue &&
orderItem.LicenseDownloadId > 0;
}
示例7: IsDownloadAllowed
/// <summary>
/// Gets a value indicating whether download is allowed
/// </summary>
/// <param name="orderItem">Order item to check</param>
/// <returns>True if download is allowed; otherwise, false.</returns>
public virtual bool IsDownloadAllowed(OrderItem orderItem)
{
if (orderItem == null)
return false;
var order = EngineContext.Current.Resolve<IOrderService>().GetOrderById(orderItem.OrderId);
if (order == null || order.Deleted)
return false;
//order status
if (order.OrderStatus == OrderStatus.Cancelled)
return false;
var product = orderItem.Product;
if (product == null || !product.IsDownload)
return false;
//payment status
switch (product.DownloadActivationType)
{
case DownloadActivationType.WhenOrderIsPaid:
{
if (order.PaymentStatus == PaymentStatus.Paid && order.PaidDateUtc.HasValue)
{
//expiration date
if (product.DownloadExpirationDays.HasValue)
{
if (order.PaidDateUtc.Value.AddDays(product.DownloadExpirationDays.Value) > DateTime.UtcNow)
{
return true;
}
}
else
{
return true;
}
}
}
break;
case DownloadActivationType.Manually:
{
if (orderItem.IsDownloadActivated)
{
//expiration date
if (product.DownloadExpirationDays.HasValue)
{
if (order.CreatedOnUtc.AddDays(product.DownloadExpirationDays.Value) > DateTime.UtcNow)
{
return true;
}
}
else
{
return true;
}
}
}
break;
default:
break;
}
return false;
}
示例8: AddProductToOrderDetails
//.........这里部分代码省略.........
{
recipientName = form[formKey];
continue;
}
if (formKey.Equals("giftcard.RecipientEmail", StringComparison.InvariantCultureIgnoreCase))
{
recipientEmail = form[formKey];
continue;
}
if (formKey.Equals("giftcard.SenderName", StringComparison.InvariantCultureIgnoreCase))
{
senderName = form[formKey];
continue;
}
if (formKey.Equals("giftcard.SenderEmail", StringComparison.InvariantCultureIgnoreCase))
{
senderEmail = form[formKey];
continue;
}
if (formKey.Equals("giftcard.Message", StringComparison.InvariantCultureIgnoreCase))
{
giftCardMessage = form[formKey];
continue;
}
}
attributes = _productAttributeParser.AddGiftCardAttribute(attributes,
recipientName, recipientEmail, senderName, senderEmail, giftCardMessage);
}
#endregion
//warnings
warnings.AddRange(_shoppingCartService.GetShoppingCartItemAttributeWarnings(order.Customer, ShoppingCartType.ShoppingCart, product, attributes));
warnings.AddRange(_shoppingCartService.GetShoppingCartItemGiftCardWarnings(ShoppingCartType.ShoppingCart, product, attributes));
if (warnings.Count == 0)
{
//no errors
//attributes
string attributeDescription = _productAttributeFormatter.FormatAttributes(product, attributes, order.Customer);
//save item
var orderItem = new OrderItem()
{
OrderItemGuid = Guid.NewGuid(),
Order = order,
ProductId = product.Id,
UnitPriceInclTax = unitPriceInclTax,
UnitPriceExclTax = unitPriceExclTax,
PriceInclTax = priceInclTax,
PriceExclTax = priceExclTax,
OriginalProductCost = _priceCalculationService.GetProductCost(product, attributes),
AttributeDescription = attributeDescription,
AttributesXml = attributes,
Quantity = quantity,
DiscountAmountInclTax = decimal.Zero,
DiscountAmountExclTax = decimal.Zero,
DownloadCount = 0,
IsDownloadActivated = false,
LicenseDownloadId = 0
};
order.OrderItems.Add(orderItem);
_orderService.UpdateOrder(order);
//gift cards
if (product.IsGiftCard)
{
for (int i = 0; i < orderItem.Quantity; i++)
{
var gc = new GiftCard()
{
GiftCardType = product.GiftCardType,
PurchasedWithOrderItem = orderItem,
Amount = unitPriceExclTax,
IsGiftCardActivated = false,
GiftCardCouponCode = _giftCardService.GenerateGiftCardCode(),
RecipientName = recipientName,
RecipientEmail = recipientEmail,
SenderName = senderName,
SenderEmail = senderEmail,
Message = giftCardMessage,
IsRecipientNotified = false,
CreatedOnUtc = DateTime.UtcNow
};
_giftCardService.InsertGiftCard(gc);
}
}
//redirect to order details page
return RedirectToAction("Edit", "Order", new { id = order.Id });
}
else
{
//errors
var model = PrepareAddProductToOrderModel(order.Id, product.Id);
model.Warnings.AddRange(warnings);
return View(model);
}
}
示例9: HasAccessToOrderItem
protected bool HasAccessToOrderItem(OrderItem orderItem)
{
if (orderItem == null)
throw new ArgumentNullException("orderItem");
if (_workContext.CurrentVendor == null)
//not a vendor; has access
return true;
var vendorId = _workContext.CurrentVendor.Id;
return orderItem.Product.VendorId == vendorId;
}
示例10: AddProductToOrderDetails
public ActionResult AddProductToOrderDetails(int orderId, int productId, FormCollection form)
{
if (!_permissionService.Authorize(StandardPermissionProvider.ManageOrders))
return AccessDeniedView();
//a vendor does not have access to this functionality
if (_workContext.CurrentVendor != null)
return RedirectToAction("Edit", "Order", new { id = orderId });
var order = _orderService.GetOrderById(orderId);
var product = _productService.GetProductById(productId);
//save order item
//basic properties
decimal unitPriceInclTax;
decimal.TryParse(form["UnitPriceInclTax"], out unitPriceInclTax);
decimal unitPriceExclTax;
decimal.TryParse(form["UnitPriceExclTax"], out unitPriceExclTax);
int quantity;
int.TryParse(form["Quantity"], out quantity);
decimal priceInclTax;
decimal.TryParse(form["SubTotalInclTax"], out priceInclTax);
decimal priceExclTax;
decimal.TryParse(form["SubTotalExclTax"], out priceExclTax);
//warnings
var warnings = new List<string>();
//attributes
var attributesXml = ParseProductAttributes(product, form);
#region Gift cards
string recipientName = "";
string recipientEmail = "";
string senderName = "";
string senderEmail = "";
string giftCardMessage = "";
if (product.IsGiftCard)
{
foreach (string formKey in form.AllKeys)
{
if (formKey.Equals("giftcard.RecipientName", StringComparison.InvariantCultureIgnoreCase))
{
recipientName = form[formKey];
continue;
}
if (formKey.Equals("giftcard.RecipientEmail", StringComparison.InvariantCultureIgnoreCase))
{
recipientEmail = form[formKey];
continue;
}
if (formKey.Equals("giftcard.SenderName", StringComparison.InvariantCultureIgnoreCase))
{
senderName = form[formKey];
continue;
}
if (formKey.Equals("giftcard.SenderEmail", StringComparison.InvariantCultureIgnoreCase))
{
senderEmail = form[formKey];
continue;
}
if (formKey.Equals("giftcard.Message", StringComparison.InvariantCultureIgnoreCase))
{
giftCardMessage = form[formKey];
continue;
}
}
attributesXml = _productAttributeParser.AddGiftCardAttribute(attributesXml,
recipientName, recipientEmail, senderName, senderEmail, giftCardMessage);
}
#endregion
#region Rental product
DateTime? rentalStartDate = null;
DateTime? rentalEndDate = null;
if (product.IsRental)
{
ParseRentalDates(form, out rentalStartDate, out rentalEndDate);
}
#endregion
//warnings
warnings.AddRange(_shoppingCartService.GetShoppingCartItemAttributeWarnings(order.Customer, ShoppingCartType.ShoppingCart, product, quantity, attributesXml));
warnings.AddRange(_shoppingCartService.GetShoppingCartItemGiftCardWarnings(ShoppingCartType.ShoppingCart, product, attributesXml));
warnings.AddRange(_shoppingCartService.GetRentalProductWarnings(product, rentalStartDate, rentalEndDate));
if (!warnings.Any())
{
//no errors
//attributes
var attributeDescription = _productAttributeFormatter.FormatAttributes(product, attributesXml, order.Customer);
//save item
var orderItem = new OrderItem
{
//.........这里部分代码省略.........
示例11: SendNewReturnRequestStoreOwnerNotification
/// <summary>
/// Sends 'New Return Request' message to a store owner
/// </summary>
/// <param name="returnRequest">Return request</param>
/// <param name="orderItem">Order item</param>
/// <param name="languageId">Message language identifier</param>
/// <returns>Queued email identifier</returns>
public virtual int SendNewReturnRequestStoreOwnerNotification(ReturnRequest returnRequest, OrderItem orderItem, int languageId)
{
if (returnRequest == null)
throw new ArgumentNullException("returnRequest");
var order = EngineContext.Current.Resolve<IOrderService>().GetOrderById(orderItem.OrderId);
var store = _storeService.GetStoreById(order.StoreId) ?? _storeContext.CurrentStore;
languageId = EnsureLanguageIsActive(languageId, store.Id);
var messageTemplate = GetActiveMessageTemplate("NewReturnRequest.StoreOwnerNotification", store.Id);
if (messageTemplate == null)
return 0;
//email account
var emailAccount = GetEmailAccountOfMessageTemplate(messageTemplate, languageId);
var customer = EngineContext.Current.Resolve<ICustomerService>().GetCustomerById(returnRequest.CustomerId);
//tokens
var tokens = new List<Token>();
_messageTokenProvider.AddStoreTokens(tokens, store, emailAccount);
_messageTokenProvider.AddCustomerTokens(tokens, customer);
_messageTokenProvider.AddReturnRequestTokens(tokens, returnRequest, orderItem);
//event notification
_eventPublisher.MessageTokensAdded(messageTemplate, tokens);
var toEmail = emailAccount.Email;
var toName = emailAccount.DisplayName;
return SendNotification(messageTemplate, emailAccount,
languageId, tokens,
toEmail, toName);
}
示例12: AddProductToOrderDetails
//.........这里部分代码省略.........
DateTime? rentalStartDate = null;
DateTime? rentalEndDate = null;
if (product.IsRental)
{
var ctrlStartDate = form["rental_start_date"];
var ctrlEndDate = form["rental_end_date"];
try
{
//currenly we support only this format (as in the \Views\Order\_ProductAddRentalInfo.cshtml file)
const string datePickerFormat = "MM/dd/yyyy";
rentalStartDate = DateTime.ParseExact(ctrlStartDate, datePickerFormat, CultureInfo.InvariantCulture);
rentalEndDate = DateTime.ParseExact(ctrlEndDate, datePickerFormat, CultureInfo.InvariantCulture);
}
catch
{
}
}
#endregion
//warnings
warnings.AddRange(_shoppingCartService.GetShoppingCartItemAttributeWarnings(order.Customer, ShoppingCartType.ShoppingCart, product, quantity, attributesXml));
warnings.AddRange(_shoppingCartService.GetShoppingCartItemGiftCardWarnings(ShoppingCartType.ShoppingCart, product, attributesXml));
warnings.AddRange(_shoppingCartService.GetRentalProductWarnings(product, rentalStartDate, rentalEndDate));
if (warnings.Count == 0)
{
//no errors
//attributes
string attributeDescription = _productAttributeFormatter.FormatAttributes(product, attributesXml, order.Customer);
//save item
var orderItem = new OrderItem
{
OrderItemGuid = Guid.NewGuid(),
Order = order,
ProductId = product.Id,
UnitPriceInclTax = unitPriceInclTax,
UnitPriceExclTax = unitPriceExclTax,
PriceInclTax = priceInclTax,
PriceExclTax = priceExclTax,
OriginalProductCost = _priceCalculationService.GetProductCost(product, attributesXml),
AttributeDescription = attributeDescription,
AttributesXml = attributesXml,
Quantity = quantity,
DiscountAmountInclTax = decimal.Zero,
DiscountAmountExclTax = decimal.Zero,
DownloadCount = 0,
IsDownloadActivated = false,
LicenseDownloadId = 0,
RentalStartDateUtc = rentalStartDate,
RentalEndDateUtc = rentalEndDate
};
order.OrderItems.Add(orderItem);
_orderService.UpdateOrder(order);
//adjust inventory
_productService.AdjustInventory(orderItem.Product, -orderItem.Quantity, orderItem.AttributesXml);
//add a note
order.OrderNotes.Add(new OrderNote
{
Note = "A new order item has been added",
DisplayToCustomer = false,
CreatedOnUtc = DateTime.UtcNow
示例13: DeleteOrderItem
/// <summary>
/// Delete an order item
/// </summary>
/// <param name="orderItem">The order item</param>
public virtual void DeleteOrderItem(OrderItem orderItem)
{
if (orderItem == null)
throw new ArgumentNullException("orderItem");
var updatebuilder = Builders<Order>.Update;
var updatefilter = updatebuilder.PullFilter(x => x.OrderItems, y => y.Id == orderItem.Id);
var result = _orderRepository.Collection.UpdateOneAsync(new BsonDocument("Id", orderItem.OrderId), updatefilter).Result;
var updateproduct = Builders<ProductAlsoPurchased>.Update;
var updatefilterproduct = updateproduct.PullFilter(x => x.Purchased, y => y.OrderId == orderItem.OrderId && y.ProductId == orderItem.ProductId);
var resultproduct = _productAlsoPurchasedRepository.Collection.UpdateManyAsync(new BsonDocument(), updatefilterproduct).Result;
//event notification
_eventPublisher.EntityDeleted(orderItem);
}
示例14: ProcessNextRecurringPayment
/// <summary>
/// Process next recurring payment
/// </summary>
/// <param name="recurringPayment">Recurring payment</param>
/// <param name="paymentResult">Process payment result (info about last payment for automatic recurring payments)</param>
public virtual void ProcessNextRecurringPayment(RecurringPayment recurringPayment, ProcessPaymentResult paymentResult = null)
{
if (recurringPayment == null)
throw new ArgumentNullException("recurringPayment");
try
{
if (!recurringPayment.IsActive)
throw new NopException("Recurring payment is not active");
var initialOrder = recurringPayment.InitialOrder;
if (initialOrder == null)
throw new NopException("Initial order could not be loaded");
var customer = initialOrder.Customer;
if (customer == null)
throw new NopException("Customer could not be loaded");
var nextPaymentDate = recurringPayment.NextPaymentDate;
if (!nextPaymentDate.HasValue)
throw new NopException("Next payment date could not be calculated");
//payment info
var processPaymentRequest = new ProcessPaymentRequest
{
StoreId = initialOrder.StoreId,
CustomerId = customer.Id,
OrderGuid = Guid.NewGuid(),
InitialOrderId = initialOrder.Id,
RecurringCycleLength = recurringPayment.CycleLength,
RecurringCyclePeriod = recurringPayment.CyclePeriod,
RecurringTotalCycles = recurringPayment.TotalCycles,
};
//prepare order details
var details = PrepareRecurringOrderDetails(processPaymentRequest);
ProcessPaymentResult processPaymentResult;
//skip payment workflow if order total equals zero
var skipPaymentWorkflow = details.OrderTotal == decimal.Zero;
if (!skipPaymentWorkflow)
{
var paymentMethod = _paymentService.LoadPaymentMethodBySystemName(processPaymentRequest.PaymentMethodSystemName);
if (paymentMethod == null)
throw new NopException("Payment method couldn't be loaded");
if (!paymentMethod.IsPaymentMethodActive(_paymentSettings))
throw new NopException("Payment method is not active");
//Old credit card info
if (details.InitialOrder.AllowStoringCreditCardNumber)
{
processPaymentRequest.CreditCardType = _encryptionService.DecryptText(details.InitialOrder.CardType);
processPaymentRequest.CreditCardName = _encryptionService.DecryptText(details.InitialOrder.CardName);
processPaymentRequest.CreditCardNumber = _encryptionService.DecryptText(details.InitialOrder.CardNumber);
processPaymentRequest.CreditCardCvv2 = _encryptionService.DecryptText(details.InitialOrder.CardCvv2);
try
{
processPaymentRequest.CreditCardExpireMonth = Convert.ToInt32(_encryptionService.DecryptText(details.InitialOrder.CardExpirationMonth));
processPaymentRequest.CreditCardExpireYear = Convert.ToInt32(_encryptionService.DecryptText(details.InitialOrder.CardExpirationYear));
}
catch { }
}
//payment type
switch (_paymentService.GetRecurringPaymentType(processPaymentRequest.PaymentMethodSystemName))
{
case RecurringPaymentType.NotSupported:
throw new NopException("Recurring payments are not supported by selected payment method");
case RecurringPaymentType.Manual:
processPaymentResult = _paymentService.ProcessRecurringPayment(processPaymentRequest);
break;
case RecurringPaymentType.Automatic:
//payment is processed on payment gateway site, info about last transaction in paymentResult parameter
processPaymentResult = paymentResult ?? new ProcessPaymentResult();
break;
default:
throw new NopException("Not supported recurring payment type");
}
}
else
processPaymentResult = paymentResult ?? new ProcessPaymentResult { NewPaymentStatus = PaymentStatus.Paid };
if (processPaymentResult == null)
throw new NopException("processPaymentResult is not available");
if (processPaymentResult.Success)
{
//save order details
var order = SaveOrderDetails(processPaymentRequest, processPaymentResult, details);
foreach (var orderItem in details.InitialOrder.OrderItems)
{
//save item
var newOrderItem = new OrderItem
//.........这里部分代码省略.........
示例15: PlaceOrder
/// <summary>
/// Places an order
/// </summary>
/// <param name="processPaymentRequest">Process payment request</param>
/// <returns>Place order result</returns>
public virtual PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest)
{
if (processPaymentRequest == null)
throw new ArgumentNullException("processPaymentRequest");
var result = new PlaceOrderResult();
try
{
if (processPaymentRequest.OrderGuid == Guid.Empty)
processPaymentRequest.OrderGuid = Guid.NewGuid();
//prepare order details
var details = PreparePlaceOrderDetails(processPaymentRequest);
#region Payment workflow
//process payment
ProcessPaymentResult processPaymentResult = null;
//skip payment workflow if order total equals zero
var skipPaymentWorkflow = details.OrderTotal == decimal.Zero;
if (!skipPaymentWorkflow)
{
var paymentMethod = _paymentService.LoadPaymentMethodBySystemName(processPaymentRequest.PaymentMethodSystemName);
if (paymentMethod == null)
throw new NopException("Payment method couldn't be loaded");
//ensure that payment method is active
if (!paymentMethod.IsPaymentMethodActive(_paymentSettings))
throw new NopException("Payment method is not active");
if (details.IsRecurringShoppingCart)
{
//recurring cart
switch (_paymentService.GetRecurringPaymentType(processPaymentRequest.PaymentMethodSystemName))
{
case RecurringPaymentType.NotSupported:
throw new NopException("Recurring payments are not supported by selected payment method");
case RecurringPaymentType.Manual:
case RecurringPaymentType.Automatic:
processPaymentResult = _paymentService.ProcessRecurringPayment(processPaymentRequest);
break;
default:
throw new NopException("Not supported recurring payment type");
}
}
else
//standard cart
processPaymentResult = _paymentService.ProcessPayment(processPaymentRequest);
}
else
//payment is not required
processPaymentResult = new ProcessPaymentResult { NewPaymentStatus = PaymentStatus.Paid };
if (processPaymentResult == null)
throw new NopException("processPaymentResult is not available");
#endregion
if (processPaymentResult.Success)
{
#region Save order details
var order = SaveOrderDetails(processPaymentRequest, processPaymentResult, details);
result.PlacedOrder = order;
//move shopping cart items to order items
foreach (var sc in details.Cart)
{
//prices
decimal taxRate;
List<Discount> scDiscounts;
decimal discountAmount;
var scUnitPrice = _priceCalculationService.GetUnitPrice(sc);
var scSubTotal = _priceCalculationService.GetSubTotal(sc, true, out discountAmount, out scDiscounts);
var scUnitPriceInclTax = _taxService.GetProductPrice(sc.Product, scUnitPrice, true, details.Customer, out taxRate);
var scUnitPriceExclTax = _taxService.GetProductPrice(sc.Product, scUnitPrice, false, details.Customer, out taxRate);
var scSubTotalInclTax = _taxService.GetProductPrice(sc.Product, scSubTotal, true, details.Customer, out taxRate);
var scSubTotalExclTax = _taxService.GetProductPrice(sc.Product, scSubTotal, false, details.Customer, out taxRate);
var discountAmountInclTax = _taxService.GetProductPrice(sc.Product, discountAmount, true, details.Customer, out taxRate);
var discountAmountExclTax = _taxService.GetProductPrice(sc.Product, discountAmount, false, details.Customer, out taxRate);
foreach (var disc in scDiscounts)
if (!details.AppliedDiscounts.ContainsDiscount(disc))
details.AppliedDiscounts.Add(disc);
//attributes
var attributeDescription = _productAttributeFormatter.FormatAttributes(sc.Product, sc.AttributesXml, details.Customer);
var itemWeight = _shippingService.GetShoppingCartItemWeight(sc);
//save order item
var orderItem = new OrderItem
{
OrderItemGuid = Guid.NewGuid(),
Order = order,
//.........这里部分代码省略.........