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
}