using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Collections; using System.Web.UI; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.Ecommerce; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.UIControls; using CMS.WebAnalytics; public partial class CMSModules_Ecommerce_Controls_ProductOptions_ShoppingCartItemSelector : CMSUserControl { #region "Variables" // String variable private string mAddToCartLinkText = ""; private string mAddToCartText = "shoppingcart.addtoshoppingcart"; private string mAddToCartTooltip = ""; private string mAddToWishlistImageButton = ""; private string mAddToWishlistLinkText = ""; private string mImageFolder = ""; private string mAddToCartImageButton = ""; private string mShoppingCartUrl = ""; private string mWishlistUrl = ""; // Bool variables private bool? mSKUHasOptions = null; private bool mSKUEnabled = true; private bool mDataLoaded = false; private bool mShowUnitsTextBox = false; private bool mShowProductOptions = false; private bool mShowDonationProperties = false; private bool mShowWishlistLink = true; private bool mShowPriceIncludingTax = ECommerceSettings.DisplayPriceIncludingTaxes(CMSContext.CurrentSiteName); private bool mShowTotalPrice = false; private bool mAlwaysShowTotalPrice = false; private bool mDialogMode = false; private bool? mRedirectToShoppingCart = null; private bool mRedirectToDetailsEnabled = true; private int mDefaultQuantity = 1; private ShoppingCartInfo mShoppingCart = null; private SKUInfo mSKU = null; private Hashtable mProductOptions = null; #endregion #region "Properties" /// /// Product ID (SKU ID). /// public int SKUID { get { return ValidationHelper.GetInteger(ViewState["SKUID"], 0); } set { ViewState["SKUID"] = value; // Invalidate SKU data mSKU = null; mSKUHasOptions = null; } } /// /// Product SKU data /// public SKUInfo SKU { get { if (mSKU == null) { mSKU = SKUInfoProvider.GetSKUInfo(SKUID); } return mSKU; } } /// /// Indicates if the product has product options /// public bool SKUHasOptions { get { if (!mSKUHasOptions.HasValue) { if (IsLiveSite) { // Get cache minutes int cacheMinutes = SettingsKeyProvider.GetIntValue(CMSContext.CurrentSiteName + ".CMSCacheMinutes"); // Try to get data from cache using (CachedSection cs = new CachedSection(ref mSKUHasOptions, cacheMinutes, true, null, "skuhasoptions", SKUID)) { if (cs.LoadData) { // Get the data mSKUHasOptions = SKUInfoProvider.HasSKUEnabledOptions(SKUID); // Save to the cache if (cs.Cached) { // Get dependencies List dependencies = new List(); dependencies.Add("ecommerce.sku|byid|" + SKUID); dependencies.Add("ecommerce.sku|all"); dependencies.Add("ecommerce.optioncategory|all"); // Set dependencies cs.CacheDependency = CacheHelper.GetCacheDependency(dependencies); } cs.Data = mSKUHasOptions; } } } else { // Get the data mSKUHasOptions = SKUInfoProvider.HasSKUEnabledOptions(SKUID); } } return mSKUHasOptions.Value; } } /// /// Indicates whether current product (SKU) is enabled, TRUE - button/link for adding product to the shopping cart is rendered, otherwise it is not rendered. /// public bool SKUEnabled { get { return mSKUEnabled; } set { mSKUEnabled = value; InitializeControls(); } } /// /// File name of the image which is used as a source for image button to add product to the shopping cart, default image folder is '~/App_Themes/(Skin_Folder)/Images/ShoppingCart/'. /// public string AddToCartImageButton { get { return mAddToCartImageButton; } set { mAddToCartImageButton = value; } } /// /// Simple string or localizable string of the link to add product to the shopping cart. /// public string AddToCartLinkText { get { return mAddToCartLinkText; } set { mAddToCartLinkText = value; } } /// /// Simple string or localizable string of add to shopping cart link or button. /// public string AddToCartText { get { return mAddToCartText; } set { mAddToCartText = value; } } /// /// Simple string or localizable string of add to shopping cart link or button tooltip. /// public string AddToCartTooltip { get { return mAddToCartTooltip; } set { mAddToCartTooltip = value; } } /// /// Indicates if textbox for entering number of units to add to the shopping cart should be displayed, if it is hidden number of units is equal to 1. /// public bool ShowUnitsTextBox { get { return mShowUnitsTextBox; } set { mShowUnitsTextBox = value; } } /// /// Indicates if product options of the current product should be displayed. /// public bool ShowProductOptions { get { return mShowProductOptions; } set { mShowProductOptions = value; } } /// /// Indicates if donation properties control is displayed. /// public bool ShowDonationProperties { get { return mShowDonationProperties; } set { mShowDonationProperties = value; } } /// /// Indicates if "Add to Wishlist" link or image should be displayed. Default value is true. /// public bool ShowWishlistLink { get { return mShowWishlistLink; } set { mShowWishlistLink = value; } } /// /// Default quantity when adding product to the shopping cart. /// public int DefaultQuantity { get { return mDefaultQuantity; } set { mDefaultQuantity = value; } } /// /// True - total price is shown when product has product options. /// public bool ShowTotalPrice { get { return mShowTotalPrice; } set { mShowTotalPrice = value; } } /// /// True - total price is shown always, no matter if product has product options /// public bool AlwaysShowTotalPrice { get { return mAlwaysShowTotalPrice; } set { mAlwaysShowTotalPrice = value; } } /// /// Text which is displayed next to the formatted total price. If empty, default text is used. /// public string TotalPriceLabel { get; set; } /// /// Quantity of the specified product to add to the shopping cart. /// public int Quantity { get { if (ShowUnitsTextBox) { return ValidationHelper.GetInteger(txtUnits.Text.Trim(), DefaultQuantity); } else { return DefaultQuantity; } } } /// /// Price of the product set by user. /// public double Price { get { return donationProperties.DonationAmount; } } /// /// Indicates if product is added to shopping cart as private. /// public bool IsPrivate { get { return donationProperties.DonationIsPrivate; } } /// /// Product options selected by inner selectors (string of SKUIDs separated byt the comma). /// public string ProductOptions { get { string options = ""; // Get product options from selectors foreach (Control selector in pnlSelectors.Controls) { if (selector is ProductOptionSelector) { options += ((ProductOptionSelector)selector).GetSelectedSKUOptions() + ","; } } return options.TrimEnd(','); } } /// /// List containing product options selected by inner selectors. /// public List ProductOptionsParameters { get { List options = new List(); // Get product options from selectors foreach (Control selector in pnlSelectors.Controls) { if (selector is ProductOptionSelector) { options.AddRange(((ProductOptionSelector)selector).GetSelectedOptionsParameters()); } } return options; } } /// /// Image folder, default image folder is '~/App_Themes/(Skin_Folder)/Images/ShoppingCart/'. /// public string ImageFolder { get { if (mImageFolder == "") { // Set default image folder mImageFolder = GetImageUrl("ShoppingCart/"); } return mImageFolder; } set { mImageFolder = value; } } /// /// Shopping cart url. By default Shopping cart url from SiteManager settings is returned. /// public string ShoppingCartUrl { get { if (mShoppingCartUrl == "") { mShoppingCartUrl = ECommerceSettings.ShoppingCartURL(CMSContext.CurrentSiteName); } return mShoppingCartUrl; } set { mShoppingCartUrl = value; } } /// /// Inidicates if user has to be redirected to shopping cart after adding an item to cart. Default value is taken from /// Ecommerce settings (keyname "CMSStoreRedirectToShoppingCart"). /// public bool RedirectToShoppingCart { get { if (!mRedirectToShoppingCart.HasValue) { mRedirectToShoppingCart = ECommerceSettings.RedirectToShoppingCart(CMSContext.CurrentSiteName); } return mRedirectToShoppingCart.Value; } set { mRedirectToShoppingCart = value; } } /// /// Wishlist url. By default WIshlist url from SiteManager settings is returned. /// public string WishlistUrl { get { if (mWishlistUrl == "") { mWishlistUrl = ECommerceSettings.WishListURL(CMSContext.CurrentSiteName); } return mWishlistUrl; } set { mWishlistUrl = value; } } /// /// File name of the image which is used as a source for image button to add product to the wishlist, default image folder is '~/App_Themes/(Skin_Folder)/Images/ShoppingCart/'. public string AddToWishlistImageButton { get { return mAddToWishlistImageButton; } set { mAddToWishlistImageButton = value; } } /// /// Simple string or localizable string of the link to add product to the wishlist. /// public string AddToWishlistLinkText { get { return mAddToWishlistLinkText; } set { mAddToWishlistLinkText = value; } } /// /// Shopping cart object required for formatting of the displayed prices. /// If it is not set, current shopping cart from E-commerce context is used. /// public ShoppingCartInfo ShoppingCart { get { if (mShoppingCart == null) { mShoppingCart = ECommerceContext.CurrentShoppingCart; } return mShoppingCart; } set { mShoppingCart = value; } } /// /// TRUE - product option price is displayed including tax, FALSE - product option price is displayed without tax. /// public bool ShowPriceIncludingTax { get { return mShowPriceIncludingTax; } set { mShowPriceIncludingTax = value; } } /// /// Indicates if shopping car item selector is modal dialog. /// public bool DialogMode { get { return mDialogMode; } set { mDialogMode = value; } } /// /// Control that is used to add the product to shopping cart. /// public Control AddToCartControl { get; private set; } /// /// Indicates if redirect to product details is enabled if other conditions are met. /// Set to true by default. /// public bool RedirectToDetailsEnabled { get { return mRedirectToDetailsEnabled; } set { mRedirectToDetailsEnabled = value; } } #endregion #region "Events" /// /// Fires when "Add to shopping cart" button is clicked, overrides original action. /// public event CancelEventHandler OnAddToShoppingCart; #endregion #region "Lifecycle" protected override void OnInit(EventArgs e) { base.OnInit(e); lnkAdd.Click += new EventHandler(lnkAdd_Click); btnAdd.Click += new EventHandler(btnAdd_Click); lnkWishlist.Click += new EventHandler(lnkWishlist_Click); btnWishlist.Click += new ImageClickEventHandler(btnWishlist_Click); ltlScript.Text = ScriptHelper.GetScript("function ShoppingCartItemAddedHandler(message) { alert(message); }"); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); ReloadData(); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); if (SKUID > 0) { InitializeControls(); if (!mDataLoaded) { ReloadData(); } // Get count of the product options if (AlwaysShowTotalPrice || (ShowTotalPrice && SKUHasOptions)) { CalculateTotalPrice(); if (!string.IsNullOrEmpty(TotalPriceLabel)) { // Use custom label lblPrice.Text = GetString(TotalPriceLabel); } else { // Use default label if (ShowPriceIncludingTax) { lblPrice.Text = GetString("ShoppingCartItemSelector.TotalPriceIncludeTax"); } else { lblPrice.Text = GetString("ShoppingCartItemSelector.TotalPriceWithoutTax"); } } pnlPrice.Visible = true; } else { // Hide total price container pnlPrice.Visible = false; } if (DialogMode) { pnlButton.CssClass += " PageFooterLine"; } } lblUnits.Style.Add("display", "none"); // Show panel only when some selectors loaded pnlSelectors.Visible = (ShowProductOptions && SKUHasOptions) || donationProperties.Visible; } #endregion #region "Methods" /// /// Reloads shopping cart item selector data. /// public void ReloadData() { if (SKUID <= 0) { return; } DebugHelper.SetContext("ShoppingCartItemSelector"); InitializeControls(); if (ShowProductOptions) { LoadProductOptions(); } // If donation properties should be shown and SKU product type is donation if (ShowDonationProperties && (SKU != null) && (SKU.SKUProductType == SKUProductTypeEnum.Donation)) { donationProperties.Visible = true; donationProperties.StopProcessing = false; donationProperties.SKU = SKU; donationProperties.ShoppingCart = ShoppingCart; donationProperties.ReloadData(); } // Fill units textbox with default quantity if (ShowUnitsTextBox) { if (txtUnits.Text.Trim() == "") { txtUnits.Text = DefaultQuantity.ToString(); } } mDataLoaded = true; DebugHelper.ReleaseContext(); } /// /// Initializes controls. /// private void InitializeControls() { if (lnkAdd == null) { upnlAjax.LoadContainer(); } if (SKUEnabled) { // Display/hide units textbox with default quantity if (ShowUnitsTextBox) { txtUnits.Visible = true; lblUnits.Visible = true; lblUnits.AssociatedControlID = "txtUnits"; } // Dispaly link button if (!String.IsNullOrEmpty(AddToCartLinkText)) { lnkAdd.Visible = true; lnkAdd.Text = GetString(AddToCartLinkText); lnkAdd.ToolTip = GetString(AddToCartTooltip); AddToCartControl = lnkAdd; } // Display image button else if (!String.IsNullOrEmpty(AddToCartImageButton)) { btnAddImage.ImageUrl = GetImageButtonUrl(AddToCartImageButton); btnAddImage.Visible = true; btnAddImage.AlternateText = GetString(AddToCartTooltip); btnAddImage.ToolTip = GetString(AddToCartTooltip); AddToCartControl = btnAddImage; } // Display classic button else { btnAdd.Visible = true; btnAdd.Text = GetString(AddToCartText); btnAdd.ToolTip = GetString(AddToCartTooltip); AddToCartControl = btnAdd; } } // Display "Add to Wishlist" link if (ShowWishlistLink) { if (AddToWishlistLinkText != "") { lnkWishlist.Visible = true; lnkWishlist.Text = ResHelper.LocalizeString(AddToWishlistLinkText); lnkWishlist.ToolTip = ResHelper.LocalizeString(AddToWishlistLinkText); } // Display "Add to Wishlist" image button else if (AddToWishlistImageButton != "") { // Image button btnWishlist.Visible = true; btnWishlist.ImageUrl = GetImageButtonUrl(AddToWishlistImageButton); btnWishlist.AlternateText = GetString("ShoppingCart.AddToWishlistToolTip"); btnWishlist.ToolTip = GetString("ShoppingCart.AddToWishlistToolTip"); } } } /// /// Returns path of the image which is used for the shopping cart selector button. /// /// Image name or image relative path. private string GetImageButtonUrl(string imageButton) { if (imageButton.StartsWithCSafe("~")) { return URLHelper.ResolveUrl(imageButton); } else { return ImageFolder.TrimEnd('/') + "/" + imageButton; } } /// /// Sets donation properties. /// /// Donation amount in shopping cart currency. /// Donation is private /// Donation units public void SetDonationProperties(double amount, bool isPrivate, int units) { donationProperties.DonationAmount = (amount > 0.0) ? amount : donationProperties.DonationAmount; donationProperties.DonationIsPrivate = isPrivate; DefaultQuantity = units; } /// /// Returns selected shopping cart item parameters containig product option parameters. /// public ShoppingCartItemParameters GetShoppingCartItemParameters() { // Get product options List options = ProductOptionsParameters; // Create params ShoppingCartItemParameters cartItemParams = new ShoppingCartItemParameters(SKUID, Quantity, options); // Ensure minimum allowed number of items is met if (SKU.SKUMinItemsInOrder > Quantity) { cartItemParams.Quantity = SKU.SKUMinItemsInOrder; } if (donationProperties.Visible || !RedirectToDetailsEnabled) { // Get exchange rate from cart currency to site main currency double rate = (SKU.IsGlobal) ? ShoppingCart.ExchangeRateForGlobalItems : ShoppingCart.ExchangeRate; // Set donation specific shopping cart item parameters cartItemParams.IsPrivate = donationProperties.DonationIsPrivate; // Get donation amount in site main currency cartItemParams.Price = ExchangeRateInfoProvider.ApplyExchangeRate(donationProperties.DonationAmount, 1 / rate); } return cartItemParams; } private void lnkWishlist_Click(object sender, EventArgs e) { // Add product to wishlist AddProductToWishlist(); } private void btnWishlist_Click(object sender, ImageClickEventArgs e) { // Add product to wishlist AddProductToWishlist(); } private void lnkAdd_Click(object sender, EventArgs e) { // Add product to shoppingcart AddProductToShoppingCart(); } protected void btnAddImage_Click(object sender, ImageClickEventArgs e) { // Add product to shoppingcart AddProductToShoppingCart(); } private void btnAdd_Click(object sender, EventArgs e) { // Add product to shoppingcart AddProductToShoppingCart(); } private void AddProductToWishlist() { SessionHelper.SetValue("ShoppingCartUrlReferrer", URLHelper.CurrentURL); URLHelper.Redirect(WishlistUrl + "?productid=" + SKUID); } /// /// Validates shopping cart item selector input data. /// private bool IsValid() { // Validates all product options if (ShowProductOptions) { foreach (Control selector in pnlSelectors.Controls) { if (selector is ProductOptionSelector) { // End if invalid option found if (!((ProductOptionSelector)selector).IsValid()) { return false; } } } } return true; } /// /// Adds product to the shopping cart. /// private void AddProductToShoppingCart() { // Validate input data if (!IsValid() || (SKU == null)) { // Do not proces return; } if (RedirectToDetailsEnabled) { if (!ShowProductOptions && !ShowDonationProperties) { // Does product have some enabled product option categories? bool hasOptions = !DataHelper.DataSourceIsEmpty(OptionCategoryInfoProvider.GetSKUOptionCategories(SKUID, true)); // Is product a customizable donation? bool isCustomizableDonation = ((SKU != null) && (SKU.SKUProductType == SKUProductTypeEnum.Donation) && (!((SKU.SKUPrice == SKU.SKUMinPrice) && (SKU.SKUPrice == SKU.SKUMaxPrice)) || SKU.SKUPrivateDonation)); if (hasOptions || isCustomizableDonation) { // Redirect to product details URLHelper.Redirect("~/CMSPages/GetProduct.aspx?productid=" + SKUID); } } } // Get cart item parameters ShoppingCartItemParameters cartItemParams = GetShoppingCartItemParameters(); string error = null; // Check if customer is enabled if ((ShoppingCart.Customer != null) && (!ShoppingCart.Customer.CustomerEnabled)) { error = GetString("ecommerce.cartcontent.customerdisabled"); } // Check if it is possible to add this item to shopping cart if ((error == null) && !ShoppingCartInfoProvider.CheckNewShoppingCartItems(ShoppingCart, cartItemParams)) { error = String.Format(GetString("ecommerce.cartcontent.productdisabled"), SKU.SKUName); } if (!string.IsNullOrEmpty(error)) { // Show error message and cancel adding the product to shopping cart ScriptHelper.RegisterStartupScript(Page, typeof(string), "ShoppingCartAddItemErrorAlert", ScriptHelper.GetAlertScript(error)); return; } // If donation properties are used and donation properties form is not valid if (donationProperties.Visible && !String.IsNullOrEmpty(donationProperties.Validate())) { return; } // Fire on add to shopping cart event CancelEventArgs eventArgs = new CancelEventArgs(); if (OnAddToShoppingCart != null) { OnAddToShoppingCart(this, eventArgs); } // If adding to shopping cart was cancelled if (eventArgs.Cancel) { return; } // Get cart item parameters in case something changed cartItemParams = GetShoppingCartItemParameters(); // Log activity LogProductAddedToSCActivity(SKUID, SKU.SKUName, Quantity); if (ShoppingCart != null) { bool updateCart = false; // Assign current shopping cart to current user CurrentUserInfo ui = CMSContext.CurrentUser; if (!ui.IsPublic()) { ShoppingCart.User = ui; updateCart = true; } // Shopping cart is not saved yet if (ShoppingCart.ShoppingCartID == 0) { updateCart = true; } // Update shopping cart when required if (updateCart) { ShoppingCartInfoProvider.SetShoppingCartInfo(ShoppingCart); } // Add item to shopping cart ShoppingCartItemInfo addedItem = ShoppingCart.SetShoppingCartItem(cartItemParams); if (addedItem != null) { // Update shopping cart item in database ShoppingCartItemInfoProvider.SetShoppingCartItemInfo(addedItem); // Update product options in database foreach (ShoppingCartItemInfo option in addedItem.ProductOptions) { ShoppingCartItemInfoProvider.SetShoppingCartItemInfo(option); } // Update bundle items in database foreach (ShoppingCartItemInfo bundleItem in addedItem.BundleItems) { ShoppingCartItemInfoProvider.SetShoppingCartItemInfo(bundleItem); } // Track 'Add to shopping cart' conversion ECommerceHelper.TrackAddToShoppingCartConversion(addedItem); // If user has to be redirected to shopping cart if (RedirectToShoppingCart) { // Set shopping cart referrer SessionHelper.SetValue("ShoppingCartUrlReferrer", URLHelper.CurrentURL); // Ensure shopping cart update SessionHelper.SetValue("checkinventory", true); // Redirect to shopping cart URLHelper.Redirect(ShoppingCartUrl); } else { // Localize SKU name string skuName = (addedItem.SKU != null) ? ResHelper.LocalizeString(addedItem.SKU.SKUName) : ""; // Check inventory ShoppingCartCheckResult checkResult = ShoppingCartInfoProvider.CheckShoppingCart(ShoppingCart); string checkInventoryMessage = checkResult.GetFormattedMessage(); // Get prodcut added message string message = String.Format(GetString("com.productadded"), skuName); // Add inventory check message if (!String.IsNullOrEmpty(checkInventoryMessage)) { message += "\n\n" + checkInventoryMessage; } // Count and show total price with options CalculateTotalPrice(); // Register the call of JS handler informing about added product ScriptHelper.RegisterStartupScript(Page, typeof(string), "ShoppingCartItemAddedHandler", "if (typeof ShoppingCartItemAddedHandler == 'function') { ShoppingCartItemAddedHandler(" + ScriptHelper.GetString(message) + "); }", true); } } } } /// /// Loads product options. /// private void LoadProductOptions() { DataSet dsCategories = null; if (IsLiveSite) { // Get cache minutes int cacheMinutes = SettingsKeyProvider.GetIntValue(CMSContext.CurrentSiteName + ".CMSCacheMinutes"); // Try to get data from cache using (CachedSection cs = new CachedSection(ref dsCategories, cacheMinutes, true, null, "skuoptioncategories", SKUID)) { if (cs.LoadData) { // Get the data dsCategories = OptionCategoryInfoProvider.GetSKUOptionCategories(SKUID, true); // Save to the cache if (cs.Cached) { // Get dependencies List dependencies = new List(); dependencies.Add("ecommerce.sku|byid|" + SKUID); dependencies.Add("ecommerce.optioncategory|all"); // Set dependencies cs.CacheDependency = CacheHelper.GetCacheDependency(dependencies); } cs.Data = dsCategories; } } } else { // Get the data dsCategories = OptionCategoryInfoProvider.GetSKUOptionCategories(SKUID, true); } // Initialize product option selectors if (!DataHelper.DataSourceIsEmpty(dsCategories)) { mProductOptions = new Hashtable(); foreach (DataRow dr in dsCategories.Tables[0].Rows) { try { // Load control for selection product options ProductOptionSelector selector = (ProductOptionSelector)LoadUserControl("~/CMSModules/Ecommerce/Controls/ProductOptions/ProductOptionSelector.ascx"); // Add control to the collection selector.ID = "opt" + ValidationHelper.GetInteger(dr["CategoryID"], 0); // Init selector selector.LocalShoppingCartObj = ShoppingCart; selector.ShowPriceIncludingTax = ShowPriceIncludingTax; selector.IsLiveSite = IsLiveSite; selector.SKUID = SKUID; selector.OptionCategory = new OptionCategoryInfo(dr); // Load all product options foreach (DictionaryEntry entry in selector.ProductOptions) { mProductOptions[entry.Key] = entry.Value; } if (AlwaysShowTotalPrice || ShowTotalPrice) { ListControl lc = selector.SelectionControl as ListControl; if (lc != null) { // Add Index change handler lc.AutoPostBack = true; } } pnlSelectors.Controls.Add(selector); } catch { } } } } /// /// Calculate total price with product options prices. /// private void CalculateTotalPrice() { // Add SKU price double price = SKUInfoProvider.GetSKUPrice(SKU, ShoppingCart, true, ShowPriceIncludingTax); // Add prices of all product options List optionParams = ProductOptionsParameters; foreach (ShoppingCartItemParameters optionParam in optionParams) { SKUInfo sku = null; if (mProductOptions.Contains(optionParam.SKUID)) { // Get option SKU data sku = (SKUInfo)mProductOptions[optionParam.SKUID]; if (sku.SKUProductType != SKUProductTypeEnum.Text) { // Add option price price += SKUInfoProvider.GetSKUPrice(sku, ShoppingCart, true, ShowPriceIncludingTax); } } } // Convert to shopping cart currency price = ShoppingCart.ApplyExchangeRate(price); lblPriceValue.Text = CurrencyInfoProvider.GetFormattedPrice(price, ShoppingCart.Currency); } /// /// Logs activity /// /// Product ID /// Product name /// Quantity private void LogProductAddedToSCActivity(int skuId, string skuName, int Quantity) { Activity activity = new ActivityProductAddedToShoppingCart(skuName, Quantity, skuId, CMSContext.ActivityEnvironmentVariables); activity.Log(); } #endregion }