170 lines
8.4 KiB
C#
170 lines
8.4 KiB
C#
using Nop.Core.Domain.Customers;
|
|
using Nop.Core.Domain.Discounts;
|
|
using Nop.Core.Domain.Orders;
|
|
|
|
namespace Nop.Services.Orders;
|
|
|
|
/// <summary>
|
|
/// Order service interface
|
|
/// </summary>
|
|
public partial interface IOrderTotalCalculationService
|
|
{
|
|
/// <summary>
|
|
/// Gets shopping cart subtotal
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="includingTax">A value indicating whether calculated price should include tax</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the applied discount amount. Applied discounts. Sub total (without discount). Sub total (with discount). Tax rates (of order sub total)
|
|
/// </returns>
|
|
Task<(decimal discountAmount, List<Discount> appliedDiscounts, decimal subTotalWithoutDiscount, decimal subTotalWithDiscount, SortedDictionary<decimal, decimal> taxRates)> GetShoppingCartSubTotalAsync(IList<ShoppingCartItem> cart,
|
|
bool includingTax);
|
|
|
|
/// <summary>
|
|
/// Gets shopping cart subtotal
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the applied discount amount. Applied discounts. Sub total (without discount). Sub total (with discount). Tax rates (of order sub total)
|
|
/// </returns>
|
|
Task<(decimal discountAmountInclTax, decimal discountAmountExclTax, List<Discount> appliedDiscounts, decimal subTotalWithoutDiscountInclTax, decimal subTotalWithoutDiscountExclTax, decimal subTotalWithDiscountInclTax, decimal subTotalWithDiscountExclTax, SortedDictionary<decimal, decimal> taxRates)> GetShoppingCartSubTotalsAsync(IList<ShoppingCartItem> cart);
|
|
|
|
/// <summary>
|
|
/// Adjust shipping rate (free shipping, additional charges, discounts)
|
|
/// </summary>
|
|
/// <param name="shippingRate">Shipping rate to adjust</param>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="applyToPickupInStore">Adjust shipping rate to pickup in store shipping option rate</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the adjusted shipping rate. Applied discounts
|
|
/// </returns>
|
|
Task<(decimal adjustedShippingRate, List<Discount> appliedDiscounts)> AdjustShippingRateAsync(decimal shippingRate,
|
|
IList<ShoppingCartItem> cart, bool applyToPickupInStore = false);
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether shipping is free
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="subTotal">Subtotal amount; pass null to calculate subtotal</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains a value indicating whether shipping is free
|
|
/// </returns>
|
|
Task<bool> IsFreeShippingAsync(IList<ShoppingCartItem> cart, decimal? subTotal = null);
|
|
|
|
/// <summary>
|
|
/// Gets shopping cart shipping total
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the shipping total
|
|
/// </returns>
|
|
Task<decimal?> GetShoppingCartShippingTotalAsync(IList<ShoppingCartItem> cart);
|
|
|
|
/// <summary>
|
|
/// Gets shopping cart shipping total
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="includingTax">A value indicating whether calculated price should include tax</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the shipping total. Applied tax rate. Applied discounts
|
|
/// </returns>
|
|
Task<(decimal? shippingTotal, decimal taxRate, List<Discount> appliedDiscounts)> GetShoppingCartShippingTotalAsync(
|
|
IList<ShoppingCartItem> cart, bool includingTax);
|
|
|
|
/// <summary>
|
|
/// Gets shopping cart shipping total
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the shipping total. Applied tax rate. Applied discounts
|
|
/// </returns>
|
|
Task<(decimal? shippingTotalInclTax, decimal? shippingTotaExclTax, decimal taxRate, List<Discount> appliedDiscounts)> GetShoppingCartShippingTotalsAsync(
|
|
IList<ShoppingCartItem> cart);
|
|
|
|
/// <summary>
|
|
/// Gets tax
|
|
/// </summary>
|
|
/// <param name="cart">Shopping cart</param>
|
|
/// <param name="usePaymentMethodAdditionalFee">A value indicating whether we should use payment method additional fee when calculating tax</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the ax total, Tax rates
|
|
/// </returns>
|
|
Task<(decimal taxTotal, SortedDictionary<decimal, decimal> taxRates)> GetTaxTotalAsync(IList<ShoppingCartItem> cart, bool usePaymentMethodAdditionalFee = true);
|
|
|
|
/// <summary>
|
|
/// Gets shopping cart total
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="useRewardPoints">A value indicating reward points should be used; null to detect current choice of the customer</param>
|
|
/// <param name="usePaymentMethodAdditionalFee">A value indicating whether we should use payment method additional fee when calculating order total</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the shopping cart total;Null if shopping cart total couldn't be calculated now. Applied gift cards. Applied discount amount. Applied discounts. Reward points to redeem. Reward points amount in primary store currency to redeem
|
|
/// </returns>
|
|
Task<(decimal? shoppingCartTotal, decimal discountAmount, List<Discount> appliedDiscounts, List<AppliedGiftCard> appliedGiftCards, int redeemedRewardPoints, decimal redeemedRewardPointsAmount)> GetShoppingCartTotalAsync(IList<ShoppingCartItem> cart,
|
|
bool? useRewardPoints = null, bool usePaymentMethodAdditionalFee = true);
|
|
|
|
/// <summary>
|
|
/// Calculate payment method fee
|
|
/// </summary>
|
|
/// <param name="cart">Cart</param>
|
|
/// <param name="fee">Fee value</param>
|
|
/// <param name="usePercentage">Is fee amount specified as percentage or fixed value?</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the result
|
|
/// </returns>
|
|
Task<decimal> CalculatePaymentAdditionalFeeAsync(IList<ShoppingCartItem> cart, decimal fee, bool usePercentage);
|
|
|
|
/// <summary>
|
|
/// Update order totals
|
|
/// </summary>
|
|
/// <param name="updateOrderParameters">Parameters for the updating order</param>
|
|
/// <param name="restoredCart">Shopping cart</param>
|
|
/// <returns>A task that represents the asynchronous operation</returns>
|
|
Task UpdateOrderTotalsAsync(UpdateOrderParameters updateOrderParameters, IList<ShoppingCartItem> restoredCart);
|
|
|
|
/// <summary>
|
|
/// Converts existing reward points to amount
|
|
/// </summary>
|
|
/// <param name="rewardPoints">Reward points</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the converted value
|
|
/// </returns>
|
|
Task<decimal> ConvertRewardPointsToAmountAsync(int rewardPoints);
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether a customer has minimum amount of reward points to use (if enabled)
|
|
/// </summary>
|
|
/// <param name="rewardPoints">Reward points to check</param>
|
|
/// <returns>true - reward points could use; false - cannot be used.</returns>
|
|
bool CheckMinimumRewardPointsToUseRequirement(int rewardPoints);
|
|
|
|
/// <summary>
|
|
/// Calculate how order total (maximum amount) for which reward points could be earned/reduced
|
|
/// </summary>
|
|
/// <param name="orderShippingInclTax">Order shipping (including tax)</param>
|
|
/// <param name="orderTotal">Order total</param>
|
|
/// <returns>Applicable order total</returns>
|
|
decimal CalculateApplicableOrderTotalForRewardPoints(decimal orderShippingInclTax, decimal orderTotal);
|
|
|
|
/// <summary>
|
|
/// Calculate how much reward points will be earned/reduced based on certain amount spent
|
|
/// </summary>
|
|
/// <param name="customer">Customer</param>
|
|
/// <param name="amount">Amount (in primary store currency)</param>
|
|
/// <returns>
|
|
/// A task that represents the asynchronous operation
|
|
/// The task result contains the number of reward points
|
|
/// </returns>
|
|
Task<int> CalculateRewardPointsAsync(Customer customer, decimal amount);
|
|
} |