using System;
using System.Data;
using System.Collections;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CMS.CMSHelper;
using CMS.Ecommerce;
using CMS.EcommerceProvider;
using CMS.GlobalHelper;
using CMS.SiteProvider;
using CMS.WebAnalytics;
using CMS.EventLog;
public partial class CMSModules_Ecommerce_Controls_ShoppingCart_ShoppingCartPreview : ShoppingCartStep
{
#region "ViewState Constants"
private const string ORDER_NOTE = "OrderNote";
#endregion
private SiteInfo currentSite = null;
private int mAddressCount = 1;
protected void Page_Load(object sender, EventArgs e)
{
currentSite = CMSContext.CurrentSite;
lblTitle.Text = GetString("ShoppingCartPreview.Title");
if ((ShoppingCart != null) && (ShoppingCart.CountryID == 0) && (currentSite != null))
{
string countryName = ECommerceSettings.DefaultCountryName(currentSite.SiteName);
CountryInfo ci = CountryInfoProvider.GetCountryInfo(countryName);
ShoppingCart.CountryID = (ci != null) ? ci.CountryID : 0;
}
ShoppingCartControl.ButtonNext.Text = GetString("Ecommerce.OrderPreview.NextButtonText");
// Addresses initialization
pnlBillingAddress.GroupingText = GetString("Ecommerce.CartPreview.BillingAddressPanel");
pnlShippingAddress.GroupingText = GetString("Ecommerce.CartPreview.ShippingAddressPanel");
pnlCompanyAddress.GroupingText = GetString("Ecommerce.CartPreview.CompanyAddressPanel");
FillBillingAddressForm(ShoppingCart.ShoppingCartBillingAddressID);
FillShippingAddressForm(ShoppingCart.ShoppingCartShippingAddressID);
// Load company address
if (ShoppingCart.ShoppingCartCompanyAddressID > 0)
{
lblCompany.Text = OrderInfoProvider.GetAddress(ShoppingCart.ShoppingCartCompanyAddressID);
mAddressCount++;
tdCompanyAddress.Visible = true;
}
else
{
tdCompanyAddress.Visible = false;
}
// Enable sending order notifications when creating order from CMSDesk
if ((ShoppingCartControl.CheckoutProcessType == CheckoutProcessEnum.CMSDeskOrder) ||
ShoppingCartControl.CheckoutProcessType == CheckoutProcessEnum.CMSDeskCustomer)
{
chkSendEmail.Visible = true;
chkSendEmail.Checked = ECommerceSettings.SendOrderNotification(currentSite.SiteName);
chkSendEmail.Text = GetString("ShoppingCartPreview.SendNotification");
}
// Show tax registration ID and organization ID
InitializeIDs();
// shopping cart content table initialization
gridData.Columns[4].HeaderText = GetString("Ecommerce.ShoppingCartContent.SKUName");
gridData.Columns[5].HeaderText = GetString("Ecommerce.ShoppingCartContent.SKUUnits");
gridData.Columns[6].HeaderText = GetString("Ecommerce.ShoppingCartContent.UnitPrice");
gridData.Columns[7].HeaderText = GetString("Ecommerce.ShoppingCartContent.UnitDiscount");
gridData.Columns[8].HeaderText = GetString("Ecommerce.ShoppingCartContent.Tax");
gridData.Columns[9].HeaderText = GetString("Ecommerce.ShoppingCartContent.Subtotal");
// Product tax summary table initialiazation
gridTaxSummary.Columns[0].HeaderText = GetString("Ecommerce.CartContent.TaxDisplayName");
gridTaxSummary.Columns[1].HeaderText = GetString("Ecommerce.CartContent.TaxSummary");
// Shipping tax summary table initialiazation
gridShippingTaxSummary.Columns[0].HeaderText = GetString("com.CartContent.ShippingTaxDisplayName");
gridShippingTaxSummary.Columns[1].HeaderText = GetString("Ecommerce.CartContent.TaxSummary");
ReloadData();
// Order note initialization
lblNote.Text = GetString("ecommerce.cartcontent.notelabel");
if (!ShoppingCartControl.IsCurrentStepPostBack)
{
// Try to select payment from ViewState first
object viewStateValue = ShoppingCartControl.GetTempValue(ORDER_NOTE);
if (viewStateValue != null)
{
txtNote.Text = Convert.ToString(viewStateValue);
}
else
{
txtNote.Text = ShoppingCart.ShoppingCartNote;
}
}
// Display/Hide column with applied discount
gridData.Columns[7].Visible = ShoppingCart.IsDiscountApplied;
if (mAddressCount == 2)
{
tblAddressPreview.Attributes["class"] = "AddressPreviewWithTwoColumns";
}
else if (mAddressCount == 3)
{
tblAddressPreview.Attributes["class"] = "AddressPreviewWithThreeColumns";
}
}
protected void Page_Prerender(object sender, EventArgs e)
{
// Hide columns with identifiers
gridData.Columns[0].Visible = false;
gridData.Columns[1].Visible = false;
gridData.Columns[2].Visible = false;
gridData.Columns[3].Visible = false;
// Disable default button in the order preview to
// force approvement of the order by mouse click
if (ShoppingCartControl.ShoppingCartContainer != null)
{
ShoppingCartControl.ShoppingCartContainer.DefaultButton = "";
}
// Display/hide error message
lblError.Visible = !string.IsNullOrEmpty(lblError.Text.Trim());
}
protected void ReloadData()
{
gridData.DataSource = ShoppingCart.ContentTable;
gridData.DataBind();
gridTaxSummary.DataSource = ShoppingCart.ContentTaxesTable;
gridTaxSummary.DataBind();
gridShippingTaxSummary.DataSource = ShoppingCart.ShippingTaxesTable;
gridShippingTaxSummary.DataBind();
// shipping option, payment method initialization
InitPaymentShipping();
}
///
/// Fills billing address form.
///
/// Billing address id
protected void FillBillingAddressForm(int addressId)
{
lblBill.Text = OrderInfoProvider.GetAddress(addressId);
}
///
/// Fills shipping address form.
///
/// Shipping address id
protected void FillShippingAddressForm(int addressId)
{
lblShip.Text = OrderInfoProvider.GetAddress(addressId);
}
///
/// Back button actions.
///
public override void ButtonBackClickAction()
{
// Save the values to ShoppingCart ViewState
ShoppingCartControl.SetTempValue(ORDER_NOTE, txtNote.Text);
base.ButtonBackClickAction();
}
///
/// Validates shopping cart content.
///
public override bool IsValid()
{
// Force loading current values
ShoppingCartInfoProvider.EvaluateShoppingCart(ShoppingCart);
// Check inventory
ShoppingCartCheckResult checkResult = ShoppingCartInfoProvider.CheckShoppingCart(ShoppingCart);
if (checkResult.CheckFailed)
{
lblError.Text = checkResult.GetHTMLFormattedMessage();
return false;
}
return true;
}
///
/// Saves order information from ShoppingCartInfo object to database as new order.
///
public override bool ProcessStep()
{
// Load first step if there is no address
if (ShoppingCart.ShoppingCartBillingAddressID <= 0)
{
ShoppingCartControl.LoadStep(0);
return false;
}
// Check if customer is enabled
if ((ShoppingCart.Customer != null) && (!ShoppingCart.Customer.CustomerEnabled))
{
lblError.Text = GetString("ecommerce.cartcontent.customerdisabled");
return false;
}
// Deal with order note
ShoppingCartControl.SetTempValue(ORDER_NOTE, null);
ShoppingCart.ShoppingCartNote = txtNote.Text.Trim();
try
{
// Set order culture
ShoppingCart.ShoppingCartCulture = CMSContext.PreferredCultureCode;
// Update customer preferences
CustomerInfoProvider.SetCustomerPreferredSettings(ShoppingCart);
// Create order
ShoppingCartInfoProvider.SetOrder(ShoppingCart);
}
catch (Exception ex)
{
// Show error
lblError.Text = GetString("Ecommerce.OrderPreview.ErrorOrderSave");
// Log exception
EventLogProvider.LogException("Shopping cart", "SAVEORDER", ex, ShoppingCart.ShoppingCartSiteID, null);
return false;
}
// Track order items conversions
ECommerceHelper.TrackOrderItemsConversions(ShoppingCart);
// Track order conversion
string name = ShoppingCartControl.OrderTrackConversionName;
ECommerceHelper.TrackOrderConversion(ShoppingCart, name);
// Track order activity
string siteName = CMSContext.CurrentSiteName;
if (LogActivityForCustomer)
{
ShoppingCartControl.TrackActivityPurchasedProducts(ShoppingCart, siteName, ContactID);
ShoppingCartControl.TrackActivityPurchase(ShoppingCart.OrderId, ContactID,
CMSContext.CurrentSiteName, URLHelper.CurrentRelativePath,
ShoppingCart.TotalPriceInMainCurrency, CurrencyInfoProvider.GetFormattedPrice(ShoppingCart.TotalPriceInMainCurrency,
CurrencyInfoProvider.GetMainCurrency(CMSContext.CurrentSiteID)));
}
// Raise finish order event
ShoppingCartControl.RaiseOrderCompletedEvent();
// When in CMSDesk
if (ShoppingCartControl.IsInternalOrder)
{
if (chkSendEmail.Checked)
{
// Send order notification emails
OrderInfoProvider.SendOrderNotificationToAdministrator(ShoppingCart);
OrderInfoProvider.SendOrderNotificationToCustomer(ShoppingCart);
}
}
// When on the live site
else if (ECommerceSettings.SendOrderNotification(CMSContext.CurrentSite.SiteName))
{
// Send order notification emails
OrderInfoProvider.SendOrderNotificationToAdministrator(ShoppingCart);
OrderInfoProvider.SendOrderNotificationToCustomer(ShoppingCart);
}
return true;
}
protected void InitPaymentShipping()
{
// shipping option and payment method
lblShippingOption.Text = GetString("Ecommerce.CartContent.ShippingOption");
lblPaymentMethod.Text = GetString("Ecommerce.CartContent.PaymentMethod");
lblShipping.Text = GetString("Ecommerce.CartContent.Shipping");
if (currentSite != null)
{
// get shipping option name
ShippingOptionInfo shippingObj = ShoppingCart.ShippingOption;
if (shippingObj != null)
{
mAddressCount++;
//plcShippingAddress.Visible = true;
tdShippingAddress.Visible = true;
plcShipping.Visible = true;
plcShippingOption.Visible = true;
lblShippingOptionValue.Text = HTMLHelper.HTMLEncode(shippingObj.ShippingOptionDisplayName);
lblShippingValue.Text = CurrencyInfoProvider.GetFormattedPrice(ShoppingCart.TotalShipping, ShoppingCart.Currency);
}
else
{
//plcShippingAddress.Visible = false;
tdShippingAddress.Visible = false;
plcShippingOption.Visible = false;
plcShipping.Visible = false;
}
}
// get payment method name
PaymentOptionInfo paymentObj = PaymentOptionInfoProvider.GetPaymentOptionInfo(ShoppingCart.ShoppingCartPaymentOptionID);
if (paymentObj != null)
{
lblPaymentMethodValue.Text = HTMLHelper.HTMLEncode(paymentObj.PaymentOptionDisplayName);
}
// total price initialization
lblTotalPrice.Text = GetString("ecommerce.cartcontent.totalprice");
lblTotalPriceValue.Text = CurrencyInfoProvider.GetFormattedPrice(ShoppingCart.RoundedTotalPrice, ShoppingCart.Currency);
}
///
/// Displays product error message in shopping cart content table.
///
/// Error message to be displayed
protected string DisplaySKUErrorMessage(object skuErrorMessage)
{
string err = ValidationHelper.GetString(skuErrorMessage, "");
if (err != "")
{
return "
" + err + "";
}
return "";
}
///
/// Initializes tax registration ID and orgranization ID.
///
protected void InitializeIDs()
{
SiteInfo si = CMSContext.CurrentSite;
if (si != null)
{
if ((ECommerceSettings.ShowOrganizationID(si.SiteName)) && (ShoppingCart.Customer != null))
{
// Initialize organization ID
plcIDs.Visible = true;
lblOrganizationID.Text = GetString("OrderPreview.OrganizationID");
lblOrganizationIDVal.Text = HTMLHelper.HTMLEncode(ShoppingCart.Customer.CustomerOrganizationID);
}
else
{
lblOrganizationID.Visible = false;
lblOrganizationIDVal.Visible = false;
}
if ((ECommerceSettings.ShowTaxRegistrationID(si.SiteName)) && (ShoppingCart.Customer != null))
{
// Initialize tax registration ID
plcIDs.Visible = true;
lblTaxRegistrationID.Text = GetString("OrderPreview.TaxRegistrationID");
lblTaxRegistrationIDVal.Text = HTMLHelper.HTMLEncode(ShoppingCart.Customer.CustomerTaxRegistrationID);
}
else
{
lblTaxRegistrationID.Visible = false;
lblTaxRegistrationIDVal.Visible = false;
}
}
}
///
/// Returns formated value string.
///
/// Value to format
protected string GetFormattedValue(object value)
{
double price = ValidationHelper.GetDouble(value, 0);
return CurrencyInfoProvider.GetFormattedValue(price, ShoppingCart.Currency);
}
///
/// Returns formatted and localized SKU name.
///
/// SKU name
/// Indicates if cart item is product option
/// Indicates if cart item is bundle item
protected string GetSKUName(object value, object isProductOption, object isBundleItem, object itemText)
{
string name = ResHelper.LocalizeString((string)value);
string text = itemText as string;
// If it is a product option or bundle item
if (ValidationHelper.GetBoolean(isProductOption, false) || ValidationHelper.GetBoolean(isBundleItem, false))
{
StringBuilder skuName = new StringBuilder(" - ");
skuName.Append(HTMLHelper.HTMLEncode(name));
if (!string.IsNullOrEmpty(text))
{
skuName.Append(" '" + HTMLHelper.HTMLEncode(text) + "'");
}
skuName.Append("");
return skuName.ToString();
}
// If it is a parent product
else
{
return HTMLHelper.HTMLEncode(name);
}
}
}