本文整理汇总了C#中IList.RequiresShipping方法的典型用法代码示例。如果您正苦于以下问题:C# IList.RequiresShipping方法的具体用法?C# IList.RequiresShipping怎么用?C# IList.RequiresShipping使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IList
的用法示例。
在下文中一共展示了IList.RequiresShipping方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: IsFreeShipping
/// <summary>
/// Gets a value indicating whether shipping is free
/// </summary>
/// <param name="cart">Cart</param>
/// <returns>A value indicating whether shipping is free</returns>
public virtual bool IsFreeShipping(IList<ShoppingCartItem> cart)
{
Customer customer = cart.GetCustomer();
if (customer != null)
{
//check whether customer is in a customer role with free shipping applied
var customerRoles = customer.CustomerRoles.Where(cr => cr.Active);
foreach (var customerRole in customerRoles)
if (customerRole.FreeShipping)
return true;
}
bool shoppingCartRequiresShipping = cart.RequiresShipping();
if (!shoppingCartRequiresShipping)
return true;
//check whether all shopping cart items are marked as free shipping
bool allItemsAreFreeShipping = true;
foreach (var sc in cart)
{
if (sc.IsShipEnabled && !sc.IsFreeShipping)
{
allItemsAreFreeShipping = false;
break;
}
}
if (allItemsAreFreeShipping)
return true;
//free shipping over $X
if (_shippingSettings.FreeShippingOverXEnabled)
{
//check whether we have subtotal enough to have free shipping
decimal subTotalDiscountAmount = decimal.Zero;
Discount subTotalAppliedDiscount = null;
decimal subTotalWithoutDiscountBase = decimal.Zero;
decimal subTotalWithDiscountBase = decimal.Zero;
GetShoppingCartSubTotal(cart, _shippingSettings.FreeShippingOverXIncludingTax, out subTotalDiscountAmount,
out subTotalAppliedDiscount, out subTotalWithoutDiscountBase, out subTotalWithDiscountBase);
if (subTotalWithDiscountBase > _shippingSettings.FreeShippingOverXValue)
return true;
}
//otherwise, return false
return false;
}
示例2: HidePaymentMethod
/// <summary>
/// Returns a value indicating whether payment method should be hidden during checkout
/// </summary>
/// <param name="cart">Shoping cart</param>
/// <returns>true - hide; false - display.</returns>
public bool HidePaymentMethod(IList<ShoppingCartItem> cart)
{
//you can put any logic here
//for example, hide this payment method if all products in the cart are downloadable
//or hide this payment method if current customer is from certain country
if (_purchaseOrderPaymentSettings.ShippableProductRequired && !cart.RequiresShipping())
return true;
return false;
}
示例3: GetShoppingCartWarnings
/// <summary>
/// Validates whether this shopping cart is valid
/// </summary>
/// <param name="shoppingCart">Shopping cart</param>
/// <param name="checkoutAttributes">Checkout attributes</param>
/// <param name="validateCheckoutAttributes">A value indicating whether to validate checkout attributes</param>
/// <returns>Warnings</returns>
public virtual IList<string> GetShoppingCartWarnings(IList<ShoppingCartItem> shoppingCart,
string checkoutAttributes, bool validateCheckoutAttributes)
{
var warnings = new List<string>();
bool hasStandartProducts = false;
bool hasRecurringProducts = false;
foreach (var sci in shoppingCart)
{
var productVariant = sci.ProductVariant;
if (productVariant == null)
{
warnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.CannotLoadProductVariant"), sci.ProductVariantId));
return warnings;
}
if (productVariant.IsRecurring)
hasRecurringProducts = true;
else
hasStandartProducts = true;
}
//don't mix standard and recurring products
if (hasStandartProducts && hasRecurringProducts)
warnings.Add(_localizationService.GetResource("ShoppingCart.CannotMixStandardAndAutoshipProducts"));
//recurring cart validation
if (hasRecurringProducts)
{
int cycleLength = 0;
RecurringProductCyclePeriod cyclePeriod = RecurringProductCyclePeriod.Days;
int totalCycles = 0;
string cyclesError = shoppingCart.GetRecurringCycleInfo(out cycleLength, out cyclePeriod, out totalCycles);
if (!string.IsNullOrEmpty(cyclesError))
{
warnings.Add(cyclesError);
return warnings;
}
}
//validate checkout attributes
if (validateCheckoutAttributes)
{
//selected attributes
var ca1Collection = _checkoutAttributeParser.ParseCheckoutAttributes(checkoutAttributes);
//existing checkout attributes
var ca2Collection = _checkoutAttributeService.GetAllCheckoutAttributes();
if (!shoppingCart.RequiresShipping())
{
//remove attributes which require shippable products
ca2Collection = ca2Collection.RemoveShippableAttributes();
}
foreach (var ca2 in ca2Collection)
{
if (ca2.IsRequired)
{
bool found = false;
//selected checkout attributes
foreach (var ca1 in ca1Collection)
{
if (ca1.Id == ca2.Id)
{
var caValuesStr = _checkoutAttributeParser.ParseValues(checkoutAttributes, ca1.Id);
foreach (string str1 in caValuesStr)
if (!String.IsNullOrEmpty(str1.Trim()))
{
found = true;
break;
}
}
}
//if not found
if (!found)
{
if (!string.IsNullOrEmpty(ca2.GetLocalized(a => a.TextPrompt)))
warnings.Add(ca2.GetLocalized(a => a.TextPrompt));
else
warnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.SelectAttribute"), ca2.GetLocalized(a => a.Name)));
}
}
}
}
return warnings;
}
示例4: GetShoppingCartWarnings
/// <summary>
/// Validates whether this shopping cart is valid
/// </summary>
/// <param name="shoppingCart">Shopping cart</param>
/// <param name="checkoutAttributesXml">Checkout attributes in XML format</param>
/// <param name="validateCheckoutAttributes">A value indicating whether to validate checkout attributes</param>
/// <returns>Warnings</returns>
public virtual IList<string> GetShoppingCartWarnings(IList<ShoppingCartItem> shoppingCart,
string checkoutAttributesXml, bool validateCheckoutAttributes)
{
var warnings = new List<string>();
bool hasStandartProducts = false;
bool hasRecurringProducts = false;
foreach (var sci in shoppingCart)
{
var product = sci.Product;
if (product == null)
{
warnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.CannotLoadProduct"), sci.ProductId));
return warnings;
}
if (product.IsRecurring)
hasRecurringProducts = true;
else
hasStandartProducts = true;
}
//don't mix standard and recurring products
if (hasStandartProducts && hasRecurringProducts)
warnings.Add(_localizationService.GetResource("ShoppingCart.CannotMixStandardAndAutoshipProducts"));
//recurring cart validation
if (hasRecurringProducts)
{
int cycleLength;
RecurringProductCyclePeriod cyclePeriod;
int totalCycles;
string cyclesError = shoppingCart.GetRecurringCycleInfo(_localizationService,
out cycleLength, out cyclePeriod, out totalCycles);
if (!string.IsNullOrEmpty(cyclesError))
{
warnings.Add(cyclesError);
return warnings;
}
}
//validate checkout attributes
if (validateCheckoutAttributes)
{
//selected attributes
var attributes1 = _checkoutAttributeParser.ParseCheckoutAttributes(checkoutAttributesXml);
//existing checkout attributes
var attributes2 = _checkoutAttributeService.GetAllCheckoutAttributes(_storeContext.CurrentStore.ID, !shoppingCart.RequiresShipping());
foreach (var a2 in attributes2)
{
if (a2.IsRequired)
{
bool found = false;
//selected checkout attributes
foreach (var a1 in attributes1)
{
if (a1.ID == a2.ID)
{
var attributeValuesStr = _checkoutAttributeParser.ParseValues(checkoutAttributesXml, a1.ID);
foreach (string str1 in attributeValuesStr)
if (!String.IsNullOrEmpty(str1.Trim()))
{
found = true;
break;
}
}
}
//if not found
if (!found)
{
if (!string.IsNullOrEmpty(a2.GetLocalized(a => a.TextPrompt)))
warnings.Add(a2.GetLocalized(a => a.TextPrompt));
else
warnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.SelectAttribute"), a2.GetLocalized(a => a.Name)));
}
}
}
//now validation rules
//minimum length
foreach (var ca in attributes2)
{
if (ca.ValidationMinLength.HasValue)
{
if (ca.AttributeControlType == AttributeControlType.TextBox ||
ca.AttributeControlType == AttributeControlType.MultilineTextbox)
{
var valuesStr = _checkoutAttributeParser.ParseValues(checkoutAttributesXml, ca.ID);
var enteredText = valuesStr.FirstOrDefault();
//.........这里部分代码省略.........
示例5: PrepareShoppingCartModel
protected virtual void PrepareShoppingCartModel(ShoppingCartModel model,
IList<ShoppingCartItem> cart, bool isEditable = true,
bool validateCheckoutAttributes = false,
bool prepareEstimateShippingIfEnabled = true, bool setEstimateShippingDefaultAddress = true,
bool prepareAndDisplayOrderReviewData = false)
{
if (cart == null)
throw new ArgumentNullException("cart");
if (model == null)
throw new ArgumentNullException("model");
if (cart.Count == 0)
return;
#region Simple properties
model.IsEditable = isEditable;
model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart;
model.ShowSku = _catalogSettings.ShowProductSku;
var checkoutAttributesXml = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id);
model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(checkoutAttributesXml, _workContext.CurrentCustomer);
bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart);
if (!minOrderSubtotalAmountOk)
{
decimal minOrderSubtotalAmount = _currencyService.ConvertFromPrimaryStoreCurrency(_orderSettings.MinOrderSubtotalAmount, _workContext.WorkingCurrency);
model.MinOrderSubtotalWarning = string.Format(_localizationService.GetResource("Checkout.MinOrderSubtotalAmount"), _priceFormatter.FormatPrice(minOrderSubtotalAmount, true, false));
}
model.TermsOfServiceOnShoppingCartPage = _orderSettings.TermsOfServiceOnShoppingCartPage;
model.TermsOfServiceOnOrderConfirmPage = _orderSettings.TermsOfServiceOnOrderConfirmPage;
model.OnePageCheckoutEnabled = _orderSettings.OnePageCheckoutEnabled;
//gift card and gift card boxes
model.DiscountBox.Display= _shoppingCartSettings.ShowDiscountBox;
var discountCouponCode = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode);
var discount = _discountService.GetDiscountByCouponCode(discountCouponCode);
if (discount != null &&
discount.RequiresCouponCode &&
_discountService.IsDiscountValid(discount, _workContext.CurrentCustomer))
model.DiscountBox.CurrentCode = discount.CouponCode;
model.GiftCardBox.Display = _shoppingCartSettings.ShowGiftCardBox;
//cart warnings
var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, checkoutAttributesXml, validateCheckoutAttributes);
foreach (var warning in cartWarnings)
model.Warnings.Add(warning);
#endregion
#region Checkout attributes
var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(_storeContext.CurrentStore.Id, !cart.RequiresShipping());
foreach (var attribute in checkoutAttributes)
{
var caModel = new ShoppingCartModel.CheckoutAttributeModel()
{
Id = attribute.Id,
Name = attribute.GetLocalized(x => x.Name),
TextPrompt = attribute.GetLocalized(x => x.TextPrompt),
IsRequired = attribute.IsRequired,
AttributeControlType = attribute.AttributeControlType,
DefaultValue = attribute.DefaultValue
};
if (!String.IsNullOrEmpty(attribute.ValidationFileAllowedExtensions))
{
caModel.AllowedFileExtensions = attribute.ValidationFileAllowedExtensions
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.ToList();
}
if (attribute.ShouldHaveValues())
{
//values
var caValues = _checkoutAttributeService.GetCheckoutAttributeValues(attribute.Id);
foreach (var caValue in caValues)
{
var pvaValueModel = new ShoppingCartModel.CheckoutAttributeValueModel()
{
Id = caValue.Id,
Name = caValue.GetLocalized(x => x.Name),
ColorSquaresRgb = caValue.ColorSquaresRgb,
IsPreSelected = caValue.IsPreSelected,
};
caModel.Values.Add(pvaValueModel);
//display price if allowed
if (_permissionService.Authorize(StandardPermissionProvider.DisplayPrices))
{
decimal priceAdjustmentBase = _taxService.GetCheckoutAttributePrice(caValue);
decimal priceAdjustment = _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency);
if (priceAdjustmentBase > decimal.Zero)
pvaValueModel.PriceAdjustment = "+" + _priceFormatter.FormatPrice(priceAdjustment);
else if (priceAdjustmentBase < decimal.Zero)
pvaValueModel.PriceAdjustment = "-" + _priceFormatter.FormatPrice(-priceAdjustment);
}
}
}
//set already selected attributes
string selectedCheckoutAttributes = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id);
//.........这里部分代码省略.........
示例6: EnsureOnlyActiveAttributes
/// <summary>
/// Removes checkout attributes which cannot be applied to the current cart and returns an update attributes in XML format
/// </summary>
/// <param name="attributesXml">Attributes in XML format</param>
/// <param name="cart">Shopping cart items</param>
/// <returns>Updated attributes in XML format</returns>
public virtual string EnsureOnlyActiveAttributes(string attributesXml, IList<ShoppingCartItem> cart)
{
if (String.IsNullOrEmpty(attributesXml))
return attributesXml;
var result = attributesXml;
//removing "shippable" checkout attributes if there's no any shippable products in the cart
if (!cart.RequiresShipping())
{
//find attribute IDs to remove
var checkoutAttributeIdsToRemove = new List<int>();
var attributes = ParseCheckoutAttributes(attributesXml);
foreach (var ca in attributes)
if (ca.ShippableProductRequired)
checkoutAttributeIdsToRemove.Add(ca.Id);
//remove them from XML
try
{
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(attributesXml);
var nodesToRemove = new List<XmlNode>();
foreach (XmlNode node in xmlDoc.SelectNodes(@"//Attributes/CheckoutAttribute"))
{
if (node.Attributes != null && node.Attributes["ID"] != null)
{
string str1 = node.Attributes["ID"].InnerText.Trim();
int id;
if (int.TryParse(str1, out id))
{
if (checkoutAttributeIdsToRemove.Contains(id))
{
nodesToRemove.Add(node);
}
}
}
}
foreach(var node in nodesToRemove)
{
node.ParentNode.RemoveChild(node);
}
result = xmlDoc.OuterXml;
}
catch (Exception exc)
{
Debug.Write(exc.ToString());
}
}
return result;
}
示例7: PostCartToGoogle
/// <summary>
/// Post cart to google
/// </summary>
/// <param name="req">Pre-generated request</param>
/// <param name="cart">Shopping cart</param>
/// <returns>Response</returns>
public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest req,
IList<Core.Domain.Orders.ShoppingCartItem> cart)
{
//there's no need to round prices (Math.Round(,2)) because GCheckout library does it for us
//items
foreach (Core.Domain.Orders.ShoppingCartItem sci in cart)
{
var productVariant = sci.ProductVariant;
if (productVariant != null)
{
decimal taxRate = decimal.Zero;
string description = _productAttributeFormatter.FormatAttributes(productVariant,
sci.AttributesXml, _workContext.CurrentCustomer,
", ", false, true, true, true, false);
string fullName = "";
if (!String.IsNullOrEmpty(sci.ProductVariant.GetLocalized(x => x.Name)))
fullName = string.Format("{0} ({1})", sci.ProductVariant.Product.GetLocalized(x => x.Name), sci.ProductVariant.GetLocalized(x => x.Name));
else
fullName = sci.ProductVariant.Product.GetLocalized(x => x.Name);
decimal unitPrice = _taxService.GetProductPrice(sci.ProductVariant, _priceCalculationService.GetUnitPrice(sci, true), out taxRate);
req.AddItem(fullName, description, sci.Id.ToString(), unitPrice, sci.Quantity);
}
}
if (cart.RequiresShipping())
{
//AddMerchantCalculatedShippingMethod
//AddCarrierCalculatedShippingOption
var shippingOptions = _shippingService.GetShippingOptions(cart, null);
foreach (ShippingOption shippingOption in shippingOptions.ShippingOptions)
{
//adjust rate
Discount appliedDiscount = null;
var shippingTotal = _orderTotalCalculationService.AdjustShippingRate(
shippingOption.Rate, cart, out appliedDiscount);
decimal shippingRateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer);
req.AddFlatRateShippingMethod(shippingOption.Name, shippingRateBase);
}
}
//add only US, GB states
//CountryCollection countries = IoC.Resolve<ICountryService>().GetAllCountries();
//foreach (Country country in countries)
//{
// foreach (StateProvince state in country.StateProvinces)
// {
// TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByIoC.Resolve<IStateProvinceService>().GetAllByStateProvinceID(state.StateProvinceID);
// foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
// {
// if (!String.IsNullOrEmpty(state.Abbreviation))
// {
// Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
// }
// }
// }
//}
//if (subTotalDiscountBase > decimal.Zero)
//{
// req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * subTotalDiscountBase, 1);
//}
//foreach (AppliedGiftCard agc in appliedGiftCards)
//{
// req.AddItem(string.Format("Gift Card - {0}", agc.GiftCard.GiftCardCouponCode), string.Empty, string.Empty, (decimal)(-1.0) * agc.AmountCanBeUsed, 1);
//}
var customerInfoDoc = new XmlDocument();
XmlElement customerInfo = customerInfoDoc.CreateElement("CustomerInfo");
customerInfo.SetAttribute("CustomerID", _workContext.CurrentCustomer.Id.ToString());
customerInfo.SetAttribute("CustomerLanguageID", _workContext.WorkingLanguage.Id.ToString());
customerInfo.SetAttribute("CustomerCurrencyID", _workContext.WorkingCurrency.Id.ToString());
req.AddMerchantPrivateDataNode(customerInfo);
req.ContinueShoppingUrl = _webHelper.GetStoreLocation(false);
req.EditCartUrl = _webHelper.GetStoreLocation(false) + "cart";
GCheckoutResponse resp = req.Send();
return resp;
}
示例8: PrepareShoppingCartModel
protected void PrepareShoppingCartModel(ShoppingCartModel model,
IList<OrganizedShoppingCartItem> cart, bool isEditable = true,
bool validateCheckoutAttributes = false,
bool prepareEstimateShippingIfEnabled = true, bool setEstimateShippingDefaultAddress = true,
bool prepareAndDisplayOrderReviewData = false)
{
if (cart == null)
throw new ArgumentNullException("cart");
if (model == null)
throw new ArgumentNullException("model");
if (cart.Count == 0)
return;
#region Simple properties
model.MediaDimensions = _mediaSettings.CartThumbPictureSize;
model.BundleThumbSize = _mediaSettings.CartThumbBundleItemPictureSize;
model.DisplayDeliveryTime = _shoppingCartSettings.ShowDeliveryTimes;
model.DisplayShortDesc = _shoppingCartSettings.ShowShortDesc;
model.DisplayBasePrice = _shoppingCartSettings.ShowBasePrice;
model.DisplayWeight = _shoppingCartSettings.ShowWeight;
model.IsEditable = isEditable;
model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart;
model.ShowProductBundleImages = _shoppingCartSettings.ShowProductBundleImagesOnShoppingCart;
model.ShowSku = _catalogSettings.ShowProductSku;
var checkoutAttributesXml = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService);
model.CheckoutAttributeInfo = HtmlUtils.ConvertPlainTextToTable(HtmlUtils.ConvertHtmlToPlainText(
_checkoutAttributeFormatter.FormatAttributes(checkoutAttributesXml, _workContext.CurrentCustomer)
));
//model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(_workContext.CurrentCustomer.CheckoutAttributes, _workContext.CurrentCustomer);
//model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(_workContext.CurrentCustomer.CheckoutAttributes, _workContext.CurrentCustomer, "", false);
bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart);
if (!minOrderSubtotalAmountOk)
{
decimal minOrderSubtotalAmount = _currencyService.ConvertFromPrimaryStoreCurrency(_orderSettings.MinOrderSubtotalAmount, _workContext.WorkingCurrency);
model.MinOrderSubtotalWarning = string.Format(_localizationService.GetResource("Checkout.MinOrderSubtotalAmount"), _priceFormatter.FormatPrice(minOrderSubtotalAmount, true, false));
}
model.TermsOfServiceEnabled = _orderSettings.TermsOfServiceEnabled;
//gift card and gift card boxes
model.DiscountBox.Display = _shoppingCartSettings.ShowDiscountBox;
var discountCouponCode = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode);
var discount = _discountService.GetDiscountByCouponCode(discountCouponCode);
if (discount != null &&
discount.RequiresCouponCode &&
_discountService.IsDiscountValid(discount, _workContext.CurrentCustomer))
model.DiscountBox.CurrentCode = discount.CouponCode;
model.GiftCardBox.Display = _shoppingCartSettings.ShowGiftCardBox;
model.DisplayCommentBox = _shoppingCartSettings.ShowCommentBox;
//cart warnings
var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, checkoutAttributesXml, validateCheckoutAttributes);
foreach (var warning in cartWarnings)
model.Warnings.Add(warning);
#endregion
#region Checkout attributes
var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes();
if (!cart.RequiresShipping())
{
//remove attributes which require shippable products
checkoutAttributes = checkoutAttributes.RemoveShippableAttributes();
}
foreach (var attribute in checkoutAttributes)
{
var caModel = new ShoppingCartModel.CheckoutAttributeModel()
{
Id = attribute.Id,
Name = attribute.GetLocalized(x => x.Name),
TextPrompt = attribute.GetLocalized(x => x.TextPrompt),
IsRequired = attribute.IsRequired,
AttributeControlType = attribute.AttributeControlType
};
if (attribute.ShouldHaveValues())
{
//values
var caValues = _checkoutAttributeService.GetCheckoutAttributeValues(attribute.Id);
foreach (var caValue in caValues)
{
var pvaValueModel = new ShoppingCartModel.CheckoutAttributeValueModel()
{
Id = caValue.Id,
Name = caValue.GetLocalized(x => x.Name),
IsPreSelected = caValue.IsPreSelected
};
caModel.Values.Add(pvaValueModel);
//display price if allowed
if (_permissionService.Authorize(StandardPermissionProvider.DisplayPrices))
{
decimal priceAdjustmentBase = _taxService.GetCheckoutAttributePrice(caValue);
decimal priceAdjustment = _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency);
if (priceAdjustmentBase > decimal.Zero)
pvaValueModel.PriceAdjustment = "+" + _priceFormatter.FormatPrice(priceAdjustment);
else if (priceAdjustmentBase < decimal.Zero)
//.........这里部分代码省略.........
示例9: PrepareShoppingCartModel
protected ShoppingCartModel PrepareShoppingCartModel(ShoppingCartModel model,
IList<ShoppingCartItem> cart, bool isEditable, bool setEstimateShippingDefaultAddress = true)
{
if (cart == null)
throw new ArgumentNullException("cart");
if (model == null)
throw new ArgumentNullException("model");
if (cart.Count == 0)
return model;
#region Simple properties
model.IsEditable = isEditable;
model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart;
model.ShowSku = _catalogSettings.ShowProductSku;
model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(_workContext.CurrentCustomer.CheckoutAttributes, _workContext.CurrentCustomer);
bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart);
if (!minOrderSubtotalAmountOk)
{
decimal minOrderSubtotalAmount = _currencyService.ConvertFromPrimaryStoreCurrency(_orderSettings.MinOrderSubtotalAmount, _workContext.WorkingCurrency);
model.MinOrderSubtotalWarning = string.Format(_localizationService.GetResource("Checkout.MinOrderSubtotalAmount"), _priceFormatter.FormatPrice(minOrderSubtotalAmount, true, false));
}
model.TermsOfServiceEnabled = _orderSettings.TermsOfServiceEnabled;
//gift card and gift card boxes
model.ShowDiscountBox = _shoppingCartSettings.ShowDiscountBox;
var currentDiscountWithCode = _discountService.GetDiscountByCouponCode(_workContext.CurrentCustomer.DiscountCouponCode);
model.CurrentDiscountCode = currentDiscountWithCode != null && currentDiscountWithCode.RequiresCouponCode
? currentDiscountWithCode.CouponCode : null;
model.ShowGiftCardBox = _shoppingCartSettings.ShowGiftCardBox;
//cart warnings
var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, "", false);
foreach (var warning in cartWarnings)
model.Warnings.Add(warning);
#endregion
#region Checkout attributes
var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(!cart.RequiresShipping());
foreach (var attribute in checkoutAttributes)
{
var caModel = new ShoppingCartModel.CheckoutAttributeModel()
{
Id = attribute.Id,
Name = attribute.GetLocalized(x => x.Name),
TextPrompt = attribute.TextPrompt,
IsRequired = attribute.IsRequired,
AttributeControlType = attribute.AttributeControlType
};
if (attribute.ShouldHaveValues())
{
//values
var caValues = _checkoutAttributeService.GetCheckoutAttributeValues(attribute.Id);
foreach (var caValue in caValues)
{
var pvaValueModel = new ShoppingCartModel.CheckoutAttributeValueModel()
{
Id = caValue.Id,
Name = caValue.GetLocalized(x => x.Name),
IsPreSelected = caValue.IsPreSelected
};
caModel.Values.Add(pvaValueModel);
//display price if allowed
if (_permissionService.Authorize(StandardPermissionProvider.DisplayPrices))
{
decimal priceAdjustmentBase = _taxService.GetCheckoutAttributePrice(caValue);
decimal priceAdjustment = _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency);
if (priceAdjustmentBase > decimal.Zero)
pvaValueModel.PriceAdjustment = "+" + _priceFormatter.FormatPrice(priceAdjustment);
else if (priceAdjustmentBase < decimal.Zero)
pvaValueModel.PriceAdjustment = "-" + _priceFormatter.FormatPrice(-priceAdjustment);
}
}
}
//set already selected attributes
string selectedCheckoutAttributes = _workContext.CurrentCustomer.CheckoutAttributes;
switch (attribute.AttributeControlType)
{
case AttributeControlType.DropdownList:
case AttributeControlType.RadioList:
case AttributeControlType.Checkboxes:
{
if (!String.IsNullOrEmpty(selectedCheckoutAttributes))
{
//clear default selection
foreach (var item in caModel.Values)
item.IsPreSelected = false;
//select new values
var selectedCaValues = _checkoutAttributeParser.ParseCheckoutAttributeValues(selectedCheckoutAttributes);
foreach (var caValue in selectedCaValues)
foreach (var item in caModel.Values)
if (caValue.Id == item.Id)
//.........这里部分代码省略.........
示例10: PrepareOrderTotalsModel
protected virtual OrderTotalsModel PrepareOrderTotalsModel(IList<ShoppingCartItem> cart, bool isEditable)
{
var model = new OrderTotalsModel();
model.IsEditable = isEditable;
if (cart.Count > 0)
{
//subtotal
decimal orderSubTotalDiscountAmountBase;
Discount orderSubTotalAppliedDiscount;
decimal subTotalWithoutDiscountBase;
decimal subTotalWithDiscountBase;
var subTotalIncludingTax = _workContext.TaxDisplayType == TaxDisplayType.IncludingTax && !_taxSettings.ForceTaxExclusionFromOrderSubtotal;
_orderTotalCalculationService.GetShoppingCartSubTotal(cart, subTotalIncludingTax,
out orderSubTotalDiscountAmountBase, out orderSubTotalAppliedDiscount,
out subTotalWithoutDiscountBase, out subTotalWithDiscountBase);
decimal subtotalBase = subTotalWithoutDiscountBase;
decimal subtotal = _currencyService.ConvertFromPrimaryStoreCurrency(subtotalBase, _workContext.WorkingCurrency);
model.SubTotal = _priceFormatter.FormatPrice(subtotal, true, _workContext.WorkingCurrency, _workContext.WorkingLanguage, subTotalIncludingTax);
if (orderSubTotalDiscountAmountBase > decimal.Zero)
{
decimal orderSubTotalDiscountAmount = _currencyService.ConvertFromPrimaryStoreCurrency(orderSubTotalDiscountAmountBase, _workContext.WorkingCurrency);
model.SubTotalDiscount = _priceFormatter.FormatPrice(-orderSubTotalDiscountAmount, true, _workContext.WorkingCurrency, _workContext.WorkingLanguage, subTotalIncludingTax);
model.AllowRemovingSubTotalDiscount = orderSubTotalAppliedDiscount != null &&
orderSubTotalAppliedDiscount.RequiresCouponCode &&
!String.IsNullOrEmpty(orderSubTotalAppliedDiscount.CouponCode) &&
model.IsEditable;
}
//shipping info
model.RequiresShipping = cart.RequiresShipping();
if (model.RequiresShipping)
{
decimal? shoppingCartShippingBase = _orderTotalCalculationService.GetShoppingCartShippingTotal(cart);
if (shoppingCartShippingBase.HasValue)
{
decimal shoppingCartShipping = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartShippingBase.Value, _workContext.WorkingCurrency);
model.Shipping = _priceFormatter.FormatShippingPrice(shoppingCartShipping, true);
//selected shipping method
var shippingOption = _workContext.CurrentCustomer.GetAttribute<ShippingOption>(SystemCustomerAttributeNames.SelectedShippingOption, _storeContext.CurrentStore.Id);
if (shippingOption != null)
model.SelectedShippingMethod = shippingOption.Name;
}
}
//payment method fee
var paymentMethodSystemName = _workContext.CurrentCustomer.GetAttribute<string>(
SystemCustomerAttributeNames.SelectedPaymentMethod, _storeContext.CurrentStore.Id);
decimal paymentMethodAdditionalFee = _paymentService.GetAdditionalHandlingFee(cart, paymentMethodSystemName);
decimal paymentMethodAdditionalFeeWithTaxBase = _taxService.GetPaymentMethodAdditionalFee(paymentMethodAdditionalFee, _workContext.CurrentCustomer);
if (paymentMethodAdditionalFeeWithTaxBase > decimal.Zero)
{
decimal paymentMethodAdditionalFeeWithTax = _currencyService.ConvertFromPrimaryStoreCurrency(paymentMethodAdditionalFeeWithTaxBase, _workContext.WorkingCurrency);
model.PaymentMethodAdditionalFee = _priceFormatter.FormatPaymentMethodAdditionalFee(paymentMethodAdditionalFeeWithTax, true);
}
//tax
bool displayTax = true;
bool displayTaxRates = true;
if (_taxSettings.HideTaxInOrderSummary && _workContext.TaxDisplayType == TaxDisplayType.IncludingTax)
{
displayTax = false;
displayTaxRates = false;
}
else
{
SortedDictionary<decimal, decimal> taxRates;
decimal shoppingCartTaxBase = _orderTotalCalculationService.GetTaxTotal(cart, out taxRates);
decimal shoppingCartTax = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartTaxBase, _workContext.WorkingCurrency);
if (shoppingCartTaxBase == 0 && _taxSettings.HideZeroTax)
{
displayTax = false;
displayTaxRates = false;
}
else
{
displayTaxRates = _taxSettings.DisplayTaxRates && taxRates.Count > 0;
displayTax = !displayTaxRates;
model.Tax = _priceFormatter.FormatPrice(shoppingCartTax, true, false);
foreach (var tr in taxRates)
{
model.TaxRates.Add(new OrderTotalsModel.TaxRate
{
Rate = _priceFormatter.FormatTaxRate(tr.Key),
Value = _priceFormatter.FormatPrice(_currencyService.ConvertFromPrimaryStoreCurrency(tr.Value, _workContext.WorkingCurrency), true, false),
});
}
}
}
model.DisplayTaxRates = displayTaxRates;
model.DisplayTax = displayTax;
//total
decimal orderTotalDiscountAmountBase;
Discount orderTotalAppliedDiscount;
List<AppliedGiftCard> appliedGiftCards;
//.........这里部分代码省略.........
示例11: PrepareBillingAddressModel
protected virtual CheckoutBillingAddressModel PrepareBillingAddressModel(IList<ShoppingCartItem> cart,
int? selectedCountryId = null,
bool prePopulateNewAddressWithCustomerFields = false,
string overrideAttributesXml = "")
{
var model = new CheckoutBillingAddressModel();
model.ShipToSameAddressAllowed = _shippingSettings.ShipToSameAddress && cart.RequiresShipping();
model.ShipToSameAddress = true;
//existing addresses
var addresses = _workContext.CurrentCustomer.Addresses
.Where(a => a.Country == null ||
(//published
a.Country.Published &&
//allow billing
a.Country.AllowsBilling &&
//enabled for the current store
_storeMappingService.Authorize(a.Country)))
.ToList();
foreach (var address in addresses)
{
var addressModel = new AddressModel();
addressModel.PrepareModel(
address: address,
excludeProperties: false,
addressSettings: _addressSettings,
addressAttributeFormatter: _addressAttributeFormatter);
model.ExistingAddresses.Add(addressModel);
}
//new address
model.NewAddress.CountryId = selectedCountryId;
model.NewAddress.PrepareModel(address:
null,
excludeProperties: false,
addressSettings: _addressSettings,
localizationService: _localizationService,
stateProvinceService: _stateProvinceService,
addressAttributeService: _addressAttributeService,
addressAttributeParser: _addressAttributeParser,
loadCountries: () => _countryService.GetAllCountriesForBilling(_workContext.WorkingLanguage.Id),
prePopulateWithCustomerFields: prePopulateNewAddressWithCustomerFields,
customer: _workContext.CurrentCustomer,
overrideAttributesXml: overrideAttributesXml);
return model;
}
示例12: IsFreeShipping
/// <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 value indicating whether shipping is free</returns>
public virtual bool IsFreeShipping(IList<ShoppingCartItem> cart, decimal? subTotal = null)
{
if (!cart.RequiresShipping())
return true;
//check whether customer is in a customer role with free shipping applied
var customer = cart.GetCustomer();
if (customer != null && customer.CustomerRoles.Where(role => role.Active).Any(role => role.FreeShipping))
return true;
//check whether all shopping cart items are marked as free shipping
if (cart.All(item => item.IsShipEnabled && item.IsFreeShipping))
return true;
//free shipping over $X
if (_shippingSettings.FreeShippingOverXEnabled)
{
if (!subTotal.HasValue)
{
decimal discountAmount;
List<Discount> appliedDiscounts;
decimal subTotalWithoutDiscount;
decimal subTotalWithDiscount;
GetShoppingCartSubTotal(cart, _shippingSettings.FreeShippingOverXIncludingTax, out discountAmount,
out appliedDiscounts, out subTotalWithoutDiscount, out subTotalWithDiscount);
subTotal = subTotalWithDiscount;
}
//check whether we have subtotal enough to have free shipping
if (subTotal.Value > _shippingSettings.FreeShippingOverXValue)
return true;
}
return false;
}
示例13: UpdateOrderTotals
//.........这里部分代码省略.........
{
var discountTaxValue = kvp.Value * (discountAmountExclTax / subTotalExclTax);
discountAmountInclTax += discountTaxValue;
subTotalTaxRates[kvp.Key] = kvp.Value - discountTaxValue;
}
}
//rounding
if (_shoppingCartSettings.RoundPricesDuringCalculation)
{
subTotalExclTax = RoundingHelper.RoundPrice(subTotalExclTax);
subTotalInclTax = RoundingHelper.RoundPrice(subTotalInclTax);
discountAmountExclTax = RoundingHelper.RoundPrice(discountAmountExclTax);
discountAmountInclTax = RoundingHelper.RoundPrice(discountAmountInclTax);
}
updatedOrder.OrderSubtotalExclTax = subTotalExclTax;
updatedOrder.OrderSubtotalInclTax = subTotalInclTax;
updatedOrder.OrderSubTotalDiscountExclTax = discountAmountExclTax;
updatedOrder.OrderSubTotalDiscountInclTax = discountAmountInclTax;
foreach (var discount in subTotalDiscounts)
if (!updateOrderParameters.AppliedDiscounts.ContainsDiscount(discount))
updateOrderParameters.AppliedDiscounts.Add(discount);
#endregion
#region Shipping
var shippingTotalExclTax = decimal.Zero;
var shippingTotalInclTax = decimal.Zero;
var shippingTaxRate = decimal.Zero;
if (restoredCart.RequiresShipping())
{
if (!IsFreeShipping(restoredCart, _shippingSettings.FreeShippingOverXIncludingTax ? subTotalInclTax : subTotalExclTax))
{
var shippingTotal = decimal.Zero;
if (!string.IsNullOrEmpty(updatedOrder.ShippingRateComputationMethodSystemName))
{
//in the updated order were shipping items
if (updatedOrder.PickUpInStore)
{
//customer chose pickup in store method, try to get chosen pickup point
if (_shippingSettings.AllowPickUpInStore)
{
var pickupPointsResponse = _shippingService.GetPickupPoints(updatedOrder.BillingAddress,
updatedOrder.ShippingRateComputationMethodSystemName, _storeContext.CurrentStore.Id);
if (pickupPointsResponse.Success)
{
var selectedPickupPoint = pickupPointsResponse.PickupPoints.FirstOrDefault(point => updatedOrder.ShippingMethod.Contains(point.Name));
if (selectedPickupPoint != null)
shippingTotal = selectedPickupPoint.PickupFee;
else
updateOrderParameters.Warnings.Add(string.Format("Shipping method {0} could not be loaded", updatedOrder.ShippingMethod));
}
else
updateOrderParameters.Warnings.AddRange(pickupPointsResponse.Errors);
}
else
updateOrderParameters.Warnings.Add("Pick up in store is not available");
}
else
{
//customer chose shipping to address, try to get chosen shipping option
var shippingOptionsResponse = _shippingService.GetShippingOptions(restoredCart,
示例14: IsFreeShipping
/// <summary>
/// Gets a value indicating whether shipping is free
/// </summary>
/// <param name="cart">Cart</param>
/// <returns>A value indicating whether shipping is free</returns>
public virtual bool IsFreeShipping(IList<ShoppingCartItem> cart)
{
Customer customer = cart.GetCustomer();
if (customer != null)
{
//check whether customer is in a customer role with free shipping applied
var customerRoles = customer.CustomerRoles.Where(cr => cr.Active);
foreach (var customerRole in customerRoles)
if (customerRole.FreeShipping)
return true;
}
bool shoppingCartRequiresShipping = cart.RequiresShipping();
if (!shoppingCartRequiresShipping)
return true;
//check whether all shopping cart items are marked as free shipping
bool allItemsAreFreeShipping = true;
foreach (var sc in cart)
{
if (sc.IsShipEnabled && !sc.IsFreeShipping)
{
allItemsAreFreeShipping = false;
break;
}
}
if (allItemsAreFreeShipping)
return true;
//otherwise, return false
return false;
}