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); } } }