using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using CMS.Ecommerce; using CMS.GlobalHelper; using CMS.UIControls; public partial class CMSModules_Ecommerce_Controls_ProductOptions_DonationProperties : CMSUserControl { #region "Variables" private ShoppingCartInfo mShoppingCart = null; private bool mShowDonationAmount = true; private bool mShowCurrencyCode = true; private bool mShowDonationUnits = true; private bool mShowDonationIsPrivate = true; #endregion #region "Properties" /// /// Shopping cart data used for price calculation and formatting. /// public ShoppingCartInfo ShoppingCart { get { if (mShoppingCart == null) { mShoppingCart = ECommerceContext.CurrentShoppingCart; } return mShoppingCart; } set { mShoppingCart = value; } } /// /// Donation SKU data. /// public SKUInfo SKU { get; set; } /// /// Donation amount in shopping cart currency. /// public double DonationAmount { get { return amountPriceSelector.Price; } set { amountPriceSelector.Price = value; DonationAmountInitialized = true; } } /// /// Indicates if donation amount value was initialized already. /// public bool DonationAmountInitialized { get { return ValidationHelper.GetBoolean(ViewState["DonationAmountInitialized"], false); } protected set { ViewState["DonationAmountInitialized"] = value; } } /// /// Indicates if donation is private. /// public bool DonationIsPrivate { get { return chkIsPrivate.Checked; } set { chkIsPrivate.Checked = value; } } /// /// Donation units. /// public int DonationUnits { get { return ValidationHelper.GetInteger(txtUnits.Text, 1); } set { txtUnits.Text = ValidationHelper.GetString(value, "1"); } } /// /// Validation error message. /// public string ErrorMessage { get; set; } #endregion #region "Properties - Layout" /// /// Indicates if donation amount input field is displayed. /// public bool ShowDonationAmount { get { return mShowDonationAmount; } set { mShowDonationAmount = value; plcAmount.Visible = value; } } /// /// Indicates if currency code is displayed next to donation amount input field. /// public bool ShowCurrencyCode { get { return mShowCurrencyCode; } set { mShowCurrencyCode = value; amountPriceSelector.ShowCurrencyCode = value; } } /// /// Indicates if donation units input field is displayed. /// public bool ShowDonationUnits { get { return mShowDonationUnits; } set { mShowDonationUnits = value; plcUnits.Visible = value; } } /// /// Indicates if checkbox for private donation is displayed. /// public bool ShowDonationIsPrivate { get { return mShowDonationIsPrivate; } set { mShowDonationIsPrivate = value; plcIsPrivate.Visible = value; } } /// /// Indicates if at least one of donation properties editable fields is visible. /// public bool HasEditableFieldsVisible { get { return (plcAmount.Visible || plcUnits.Visible || plcIsPrivate.Visible); } } #endregion #region "Page methods" protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (StopProcessing) { return; } ReloadData(); } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Show donation amount error message if required lblAmountError.Visible = !String.IsNullOrEmpty(lblAmountError.Text); } #endregion #region "Methods" /// /// Reloads donation properties data. /// public void ReloadData() { // If SKU is donation if ((SKU != null) && (SKU.SKUProductType == SKUProductTypeEnum.Donation)) { amountPriceSelector.Currency = ShoppingCart.Currency; amountPriceSelector.ValidationErrorMessage = GetString("com.donationproperties.amountinvalid"); amountPriceSelector.EmptyErrorMessage = GetString("com.donationproperties.amountinvalid"); rvUnits.ErrorMessage = GetString("com.donationproperties.unitsinvalid"); if (!DonationAmountInitialized) { // Set donation default amount in cart currency amountPriceSelector.Price = ShoppingCart.ApplyExchangeRate(SKU.SKUPrice, SKU.IsGlobal); DonationAmountInitialized = true; } ShowDonationAmount &= !(((SKU.SKUMinPrice == SKU.SKUPrice) && (SKU.SKUMaxPrice == SKU.SKUPrice)) && (SKU.SKUPrice != 0.0)); ShowDonationIsPrivate &= SKU.SKUPrivateDonation; } } /// /// Validates form and returns error message in case form is not valid. /// public string Validate() { // Validate donation amount if (String.IsNullOrEmpty(ErrorMessage)) { ErrorMessage = amountPriceSelector.Validate(false); lblAmountError.Text = ErrorMessage; } // Validate donation amount range if (String.IsNullOrEmpty(ErrorMessage) && (SKU != null)) { // Get min/max prices in cart currency double minPrice = ShoppingCart.ApplyExchangeRate(SKU.SKUMinPrice, SKU.IsGlobal); double maxPrice = ShoppingCart.ApplyExchangeRate(SKU.SKUMaxPrice, SKU.IsGlobal); if ((minPrice > 0) && (amountPriceSelector.Price < minPrice) || ((maxPrice > 0) && (amountPriceSelector.Price > maxPrice))) { // Get formatted min/max prices string fMinPrice = ShoppingCart.GetFormattedPrice(minPrice); string fMaxPrice = ShoppingCart.GetFormattedPrice(maxPrice); // Set appropriate error message if ((minPrice > 0.0) && (maxPrice > 0.0)) { ErrorMessage = String.Format(GetString("com.donationproperties.amountrange"), fMinPrice, fMaxPrice); } else if (minPrice > 0.0) { ErrorMessage = String.Format(GetString("com.donationproperties.amountrangemin"), fMinPrice); } else if (maxPrice > 0.0) { ErrorMessage = String.Format(GetString("com.donationproperties.amountrangemax"), fMaxPrice); } lblAmountError.Text = ErrorMessage; } } // Validate donation units if (String.IsNullOrEmpty(ErrorMessage)) { rvUnits.Validate(); if (!rvUnits.IsValid) { ErrorMessage = rvUnits.ErrorMessage; } } return ErrorMessage; } #endregion }