using System; using System.Data; using System.Collections; 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.SettingsProvider; using CMS.SiteProvider; public partial class CMSModules_Ecommerce_Controls_ShoppingCart_ShoppingCartOrderAddresses : ShoppingCartStep { #region "ViewState Constants" // Constants for billing address private const string BILLING_ADDRESS_ID = "BillingAddressID"; private const string BILLING_ADDRESS_NAME = "BillingAddressName"; private const string BILLING_ADDRESS_LINE1 = "BillingAddressLine1"; private const string BILLING_ADDRESS_LINE2 = "BillingAddressLine2"; private const string BILLING_ADDRESS_CITY = "BillingAddressCity"; private const string BILLING_ADDRESS_ZIP = "BillingAddressZIP"; private const string BILLING_ADDRESS_COUNTRY_ID = "BillingAddressCountryID"; private const string BILLING_ADDRESS_STATE_ID = "BillingAddressStateID"; private const string BILLING_ADDRESS_PHONE = "BillingAddressPhone"; // Constants for shipping address private const string SHIPPING_ADDRESS_CHECKED = "ShippingAddressChecked"; private const string SHIPPING_ADDRESS_ID = "ShippingAddressID"; private const string SHIPPING_ADDRESS_NAME = "ShippingAddressName"; private const string SHIPPING_ADDRESS_LINE1 = "ShippingAddressLine1"; private const string SHIPPING_ADDRESS_LINE2 = "ShippingAddressLine2"; private const string SHIPPING_ADDRESS_CITY = "ShippingAddressCity"; private const string SHIPPING_ADDRESS_ZIP = "ShippingAddressZIP"; private const string SHIPPING_ADDRESS_COUNTRY_ID = "ShippingAddressCountryID"; private const string SHIPPING_ADDRESS_STATE_ID = "ShippingAddressStateID"; private const string SHIPPING_ADDRESS_PHONE = "ShippingAddressPhone"; // Constants for company address private const string COMPANY_ADDRESS_CHECKED = "CompanyAddressChecked"; private const string COMPANY_ADDRESS_ID = "CompanyAddressID"; private const string COMPANY_ADDRESS_NAME = "CompanyAddressName"; private const string COMPANY_ADDRESS_LINE1 = "CompanyAddressLine1"; private const string COMPANY_ADDRESS_LINE2 = "CompanyAddressLine2"; private const string COMPANY_ADDRESS_CITY = "CompanyAddressCity"; private const string COMPANY_ADDRESS_ZIP = "CompanyAddressZIP"; private const string COMPANY_ADDRESS_COUNTRY_ID = "CompanyAddressCountryID"; private const string COMPANY_ADDRESS_STATE_ID = "CompanyAddressStateID"; private const string COMPANY_ADDRESS_PHONE = "CompanyAddressPhone"; #endregion #region "Temporary values operations" /// /// Removes billing address values from ShoppingCart ViewState. /// private void RemoveBillingTempValues() { // Billing address values ShoppingCartControl.SetTempValue(BILLING_ADDRESS_ID, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_CITY, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_COUNTRY_ID, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_LINE1, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_LINE2, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_NAME, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_PHONE, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_STATE_ID, null); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_ZIP, null); } /// /// Removes shipping address values from ShoppingCart ViewState. /// private void RemoveShippingTempValues() { // Shipping address values ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_CHECKED, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_ID, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_CITY, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_COUNTRY_ID, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_LINE1, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_LINE2, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_NAME, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_PHONE, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_STATE_ID, null); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_ZIP, null); } /// /// Removes company address values from ShoppingCart ViewState. /// private void RemoveCompanyTempValues() { // Company address values ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_CHECKED, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_ID, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_CITY, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_COUNTRY_ID, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_LINE1, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_LINE2, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_NAME, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_PHONE, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_STATE_ID, null); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_ZIP, null); } /// /// Loads billing address temp values. /// private void LoadBillingFromViewState() { txtBillingName.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_NAME)); txtBillingAddr1.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_LINE1)); txtBillingAddr2.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_LINE2)); txtBillingCity.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_CITY)); txtBillingZip.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_ZIP)); txtBillingPhone.Text = Convert.ToString(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_PHONE)); CountrySelector1.CountryID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_COUNTRY_ID), 0); CountrySelector1.StateID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(BILLING_ADDRESS_STATE_ID), 0); } /// /// Loads shipping address temp values. /// private void LoadShippingFromViewState() { txtShippingName.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_NAME)); txtShippingAddr1.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_LINE1)); txtShippingAddr2.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_LINE2)); txtShippingCity.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_CITY)); txtShippingZip.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_ZIP)); txtShippingPhone.Text = Convert.ToString(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_PHONE)); CountrySelector2.CountryID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_COUNTRY_ID), 0); CountrySelector2.StateID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_STATE_ID), 0); } /// /// Loads company address temp values. /// private void LoadCompanyFromViewState() { txtCompanyName.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_NAME)); txtCompanyLine1.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_LINE1)); txtCompanyLine2.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_LINE2)); txtCompanyCity.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_CITY)); txtCompanyZip.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_ZIP)); txtCompanyPhone.Text = Convert.ToString(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_PHONE)); CountrySelector3.CountryID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_COUNTRY_ID), 0); CountrySelector3.StateID = ValidationHelper.GetInteger(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_STATE_ID), 0); } /// /// Back button actions. /// public override void ButtonBackClickAction() { // Billing address values ShoppingCartControl.SetTempValue(BILLING_ADDRESS_ID, drpBillingAddr.SelectedValue); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_CITY, txtBillingCity.Text); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_COUNTRY_ID, CountrySelector1.CountryID); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_LINE1, txtBillingAddr1.Text); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_LINE2, txtBillingAddr2.Text); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_NAME, txtBillingName.Text); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_PHONE, txtBillingPhone.Text); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_STATE_ID, CountrySelector1.StateID); ShoppingCartControl.SetTempValue(BILLING_ADDRESS_ZIP, txtBillingZip.Text); // Shipping address values ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_CHECKED, chkShippingAddr.Checked); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_ID, drpShippingAddr.SelectedValue); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_CITY, txtShippingCity.Text); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_COUNTRY_ID, CountrySelector2.CountryID); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_LINE1, txtShippingAddr1.Text); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_LINE2, txtShippingAddr2.Text); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_NAME, txtShippingName.Text); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_PHONE, txtShippingPhone.Text); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_STATE_ID, CountrySelector2.StateID); ShoppingCartControl.SetTempValue(SHIPPING_ADDRESS_ZIP, txtShippingZip.Text); // Company address values ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_CHECKED, chkCompanyAddress.Checked); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_ID, drpCompanyAddress.SelectedValue); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_CITY, txtCompanyCity.Text); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_COUNTRY_ID, CountrySelector3.CountryID); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_LINE1, txtCompanyLine1.Text); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_LINE2, txtCompanyLine2.Text); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_NAME, txtCompanyName.Text); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_PHONE, txtCompanyPhone.Text); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_STATE_ID, CountrySelector3.StateID); ShoppingCartControl.SetTempValue(COMPANY_ADDRESS_ZIP, txtCompanyZip.Text); base.ButtonBackClickAction(); } #endregion /// /// Private properties. /// private int mCustomerId = 0; private SiteInfo mCurrentSite = null; /// /// Page load. /// protected void Page_Load(object sender, EventArgs e) { mCurrentSite = CMSContext.CurrentSite; CountrySelector1.IsLiveSite = IsLiveSite; CountrySelector2.IsLiveSite = IsLiveSite; CountrySelector3.IsLiveSite = IsLiveSite; lblBillingTitle.Text = GetString("ShoppingCart.BillingAddress"); lblShippingTitle.Text = GetString("ShoppingCart.ShippingAddress"); lblCompanyAddressTitle.Text = GetString("ShoppingCart.CompanyAddress"); drpBillingAddr.SelectedIndexChanged += drpBillingAddr_SelectedIndexChanged; drpShippingAddr.SelectedIndexChanged += drpShippingAddr_SelectedIndexChanged; drpCompanyAddress.SelectedIndexChanged += drpCompanyAddress_SelectedIndexChanged; // Initialize labels. LabelInitialize(); // Get customer ID from ShoppingCartInfoObj mCustomerId = ShoppingCart.ShoppingCartCustomerID; // Display/ Hide company address panel with checkbox to display company address detail plcCompanyAll.Visible = ((mCurrentSite != null) && (ECommerceSettings.UseExtraCompanyAddress(mCurrentSite.SiteName))); // Get customer info. CustomerInfo ci = CustomerInfoProvider.GetCustomerInfo(mCustomerId); if (ci != null) { // Display customer addresses if customer is not anonymous if (ci.CustomerID > 0) { plhBillAddr.Visible = true; plhShippAddr.Visible = true; plcCompanyAddress.Visible = true; if (!ShoppingCartControl.IsCurrentStepPostBack) { // Initialize customer billing and shipping addresses InitializeAddresses(); } } } else { lblError.Visible = true; lblError.Text = GetString("Ecommerce.NoCustomerSelected"); // Hide forms when no customer selected plcCompanyAll.Visible = false; plcShippingAddress.Visible = false; plcBillingAddress.Visible = false; } // If shopping cart does not need shipping if (!ShippingOptionInfoProvider.IsShippingNeeded(ShoppingCart)) { // Hide title lblBillingTitle.Visible = false; // Hide shipping address section plcShippingAddress.Visible = false; // Change current checkout process step caption ShoppingCartControl.CheckoutProcessSteps[ShoppingCartControl.CurrentStepIndex].Caption = GetString("order_new.shoppingcartorderaddresses.titlenoshipping"); } } /// /// Initialize page labels. /// protected void LabelInitialize() { lblBillingAddr.Text = GetString("ShoppingCartOrderAddresses.BillingAddr"); lblBillingName.Text = GetString("ShoppingCartOrderAddresses.BillingName"); lblBillingAddrLine.Text = GetString("ShoppingCartOrderAddresses.BillingAddrLine"); lblBillingAddrLine2.Text = lblBillingAddrLine.Text; lblBillingAddrLine2.Style["display"] = "none"; lblBillingCity.Text = GetString("ShoppingCartOrderAddresses.BillingCity"); lblBillingZip.Text = GetString("ShoppingCartOrderAddresses.BillingZIP"); lblBillingCountry.Text = GetString("ShoppingCartOrderAddresses.BillingCountry"); lblBillingPhone.Text = GetString("ShoppingCartOrderAddresses.BillingPhone"); chkShippingAddr.Text = GetString("ShoppingCartOrderAddresses.DifferentShippingAddr"); lblShippingAddr.Text = GetString("ShoppingCartOrderAddresses.ShippingAddr"); lblShippingName.Text = lblBillingName.Text; lblShippingAddrLine.Text = lblBillingAddrLine.Text; lblShippingAddrLine2.Text = lblShippingAddrLine.Text; lblShippingAddrLine2.Style["display"] = "none"; lblShippingCity.Text = lblBillingCity.Text; lblShippingZip.Text = lblBillingZip.Text; lblShippingCountry.Text = lblBillingCountry.Text; lblShippingPhone.Text = lblBillingPhone.Text; lblCompanyName.Text = lblBillingName.Text; lblCompanyLines.Text = lblBillingAddrLine.Text; lblCompanyLines2.Text = lblBillingAddrLine.Text; lblCompanyLines2.Style["display"] = "none"; lblCompanyCity.Text = lblBillingCity.Text; lblCompanyZip.Text = lblBillingZip.Text; lblCompanyCountry.Text = lblBillingCountry.Text; lblCompanyPhone.Text = lblBillingPhone.Text; lblCompanyAddress.Text = GetString("ShoppingCartOrderAddresses.lblCompanyAddress"); chkCompanyAddress.Text = GetString("ShoppingCartOrderAddresses.chkCompanyAddress"); lblError.Text = ""; lblError.Visible = false; // Mark required field if (ShoppingCartControl.RequiredFieldsMark != "") { string mark = ShoppingCartControl.RequiredFieldsMark; lblMark1.Text = mark; lblMark2.Text = mark; lblMark3.Text = mark; lblMark4.Text = mark; lblMark5.Text = mark; lblMark6.Text = mark; lblMark7.Text = mark; lblMark8.Text = mark; lblMark9.Text = mark; lblMark10.Text = mark; lblMark11.Text = mark; lblMark12.Text = mark; lblMark13.Text = mark; lblMark14.Text = mark; lblMark15.Text = mark; } } /// /// Initialize customer's addresses in billing and shipping dropdown lists. /// protected void InitializeAddresses() { // add new item <(new), 0> ListItem li = new ListItem(GetString("ShoppingCartOrderAddresses.NewAddress"), "0"); // get all billing addresses of the customer if (drpBillingAddr.Items.Count == 0) { DataSet ds = AddressInfoProvider.GetAddresses(mCustomerId, true, false, false, true); drpBillingAddr.DataSource = ds; drpBillingAddr.DataBind(); drpBillingAddr.Items.Insert(0, li); } li = new ListItem(GetString("ShoppingCartOrderAddresses.NewAddress"), "0"); // get all shipping addresses of the customer if (drpShippingAddr.Items.Count == 0) { DataSet ds = AddressInfoProvider.GetAddresses(mCustomerId, false, true, false, true); drpShippingAddr.DataSource = ds; drpShippingAddr.DataBind(); drpShippingAddr.Items.Insert(0, li); } li = new ListItem(GetString("ShoppingCartOrderAddresses.NewAddress"), "0"); // get all shipping addresses of the customer if (drpCompanyAddress.Items.Count == 0) { DataSet ds = AddressInfoProvider.GetAddresses(mCustomerId, false, false, true, true); drpCompanyAddress.DataSource = ds; drpCompanyAddress.DataBind(); drpCompanyAddress.Items.Insert(0, li); } LoadBillingSelectedValue(); // Try remove same shipping address as selected billing address // (if the selected value is not "0") if (drpBillingAddr.SelectedValue != "0") { try { drpShippingAddr.Items.Remove(drpBillingAddr.SelectedItem); } catch { } } LoadShippingSelectedValue(); // Try remove same company address as selected billing address // (if the selected value is not "0") if (drpBillingAddr.SelectedValue != "0") { try { drpCompanyAddress.Items.Remove(drpBillingAddr.SelectedItem); } catch { } } LoadCompanySelectedValue(); LoadBillingAddressInfo(); LoadShippingAddressInfo(); LoadCompanyAddressInfo(); } protected void LoadBillingSelectedValue() { try { drpBillingAddr.ClearSelection(); int lastBillingAddressId = 0; // Get last used shipping and billing addresses in the order DataSet ds = OrderInfoProvider.GetOrders("OrderCustomerID=" + mCustomerId, "OrderDate DESC"); if (!DataHelper.DataSourceIsEmpty(ds)) { OrderInfo oi = new OrderInfo(ds.Tables[0].Rows[0]); lastBillingAddressId = oi.OrderBillingAddressID; } // Set billing address // Try to select billing address from ViewState first object viewStateValue = ShoppingCartControl.GetTempValue(BILLING_ADDRESS_ID); if (viewStateValue != null) { try { drpBillingAddr.SelectedValue = Convert.ToString(viewStateValue); } catch { } } // If there is already selected billing address, set it else if (ShoppingCart.ShoppingCartBillingAddressID > 0) { try { drpBillingAddr.SelectedValue = ShoppingCart.ShoppingCartBillingAddressID.ToString(); } catch { } } // If there is last used billing address, set it else if (lastBillingAddressId != 0) { try { drpBillingAddr.SelectedValue = lastBillingAddressId.ToString(); } catch { } } else if (drpBillingAddr.Items.Count > 1) { drpBillingAddr.SelectedIndex = 1; } } catch { } } protected void LoadShippingSelectedValue() { try { drpShippingAddr.ClearSelection(); int lastShippingAddressId = 0; // Get last used shipping and billing addresses in the order DataSet ds = OrderInfoProvider.GetOrders("OrderCustomerID=" + mCustomerId, "OrderDate DESC"); if (!DataHelper.DataSourceIsEmpty(ds)) { OrderInfo oi = new OrderInfo(ds.Tables[0].Rows[0]); lastShippingAddressId = oi.OrderShippingAddressID; } // Try to select shipping address from ViewState first object viewStateValue = ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_ID); bool viewStateChecked = ValidationHelper.GetBoolean(ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_CHECKED), false); if (viewStateValue != null) { try { drpShippingAddr.SelectedValue = Convert.ToString(viewStateValue); plhShipping.Visible = viewStateChecked; chkShippingAddr.Checked = viewStateChecked; return; } catch { } } else if ((ShoppingCart.ShoppingCartShippingAddressID > 0) && (ShoppingCart.ShoppingCartShippingAddressID != ShoppingCart.ShoppingCartBillingAddressID)) { try { drpShippingAddr.SelectedValue = ShoppingCart.ShoppingCartShippingAddressID.ToString(); // Display Shipping part of the form and check checkbox plhShipping.Visible = true; chkShippingAddr.Checked = true; return; } catch { } } // Select some address only if ShippingAddressID is diferent from BillingAddressID else if (lastShippingAddressId != 0) { try { drpShippingAddr.SelectedValue = lastShippingAddressId.ToString(); if (drpShippingAddr.SelectedIndex != 0) { return; } } catch { } } if (drpShippingAddr.Items.Count > 1) { drpShippingAddr.SelectedIndex = 1; } } catch { } } protected void LoadCompanySelectedValue() { try { drpCompanyAddress.ClearSelection(); int lastCompanyAddressId = 0; // Get last used shipping and billing addresses in the order DataSet ds = OrderInfoProvider.GetOrders("OrderCustomerID=" + mCustomerId, "OrderDate DESC"); if (!DataHelper.DataSourceIsEmpty(ds)) { OrderInfo oi = new OrderInfo(ds.Tables[0].Rows[0]); lastCompanyAddressId = oi.OrderCompanyAddressID; } // Try to select company address from ViewState first object viewStateValue = ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_ID); bool viewStateChecked = ValidationHelper.GetBoolean(ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_CHECKED), false); if ((viewStateValue != null)) { try { drpCompanyAddress.SelectedValue = Convert.ToString(viewStateValue); plcCompanyDetail.Visible = viewStateChecked; chkCompanyAddress.Checked = viewStateChecked; return; } catch { } } else if ((ShoppingCart.ShoppingCartCompanyAddressID > 0) && (ShoppingCart.ShoppingCartCompanyAddressID != ShoppingCart.ShoppingCartBillingAddressID)) { try { drpCompanyAddress.SelectedValue = ShoppingCart.ShoppingCartCompanyAddressID.ToString(); // Display company address part of the form and check checkbox plcCompanyDetail.Visible = true; chkCompanyAddress.Checked = true; return; } catch { } } // Select some address only if CompanyAddressID is diferent from BillingAddressID else if (lastCompanyAddressId != 0) { try { drpCompanyAddress.SelectedValue = lastCompanyAddressId.ToString(); if (drpCompanyAddress.SelectedIndex != 0) { return; } } catch { } } if (drpCompanyAddress.Items.Count > 1) { drpCompanyAddress.SelectedIndex = 1; } } catch { } } /// /// Change visibility of shipping address. /// /// Sender /// Parameter protected void chkShippingAddr_CheckedChanged(object sender, EventArgs e) { if (plhShipping.Visible) { plhShipping.Visible = false; } else { plhShipping.Visible = true; LoadShippingAddressInfo(); } } /// /// Change visibility of company address. /// /// Sender /// Parameter protected void chkCompanyAddress_CheckedChanged(object sender, EventArgs e) { if (plcCompanyDetail.Visible) { plcCompanyDetail.Visible = false; } else { plcCompanyDetail.Visible = true; LoadCompanyAddressInfo(); } } /// /// On drpBillingAddr selected index changed. /// private void drpBillingAddr_SelectedIndexChanged(object sender, EventArgs e) { UpdateShippingAddresses(); UpdateCompanyAddresses(); LoadBillingAddressInfo(); } /// /// On drpShippingAddr selected index changed. /// private void drpShippingAddr_SelectedIndexChanged(object sender, EventArgs e) { LoadShippingAddressInfo(); } /// /// On drpCompanyAddress selected index changed. /// private void drpCompanyAddress_SelectedIndexChanged(object sender, EventArgs e) { LoadCompanyAddressInfo(); } /// /// Clean specified part of the form. /// private void CleanForm(bool billing, bool shipping, bool company) { int defaultCountryId = 0; int defaultStateId = 0; // Prefill country from customer if any if ((ShoppingCart != null) && (ShoppingCart.Customer != null)) { defaultCountryId = ShoppingCart.Customer.CustomerCountryID; defaultStateId = ShoppingCart.Customer.CustomerStateID; } // Prefill default store country if customers country not found if ((defaultCountryId <= 0) && (CMSContext.CurrentSite != null)) { string countryName = ECommerceSettings.DefaultCountryName(CMSContext.CurrentSite.SiteName); CountryInfo ci = CountryInfoProvider.GetCountryInfo(countryName); defaultCountryId = (ci != null) ? ci.CountryID : 0; defaultStateId = 0; } if (shipping) { txtShippingName.Text = ""; txtShippingAddr1.Text = ""; txtShippingAddr2.Text = ""; txtShippingCity.Text = ""; txtShippingZip.Text = ""; txtShippingPhone.Text = ""; // Pre-load default country CountrySelector2.CountryID = defaultCountryId; CountrySelector2.StateID = defaultStateId; CountrySelector2.ReloadData(true); } if (billing) { txtBillingName.Text = ""; txtBillingAddr1.Text = ""; txtBillingAddr2.Text = ""; txtBillingCity.Text = ""; txtBillingZip.Text = ""; txtBillingPhone.Text = ""; // Pre-load default country CountrySelector1.CountryID = defaultCountryId; CountrySelector1.StateID = defaultStateId; CountrySelector1.ReloadData(true); } if (company) { txtCompanyName.Text = ""; txtCompanyLine1.Text = ""; txtCompanyLine2.Text = ""; txtCompanyCity.Text = ""; txtCompanyZip.Text = ""; txtCompanyPhone.Text = ""; // Pre-load default country CountrySelector3.CountryID = defaultCountryId; CountrySelector3.StateID = defaultStateId; CountrySelector3.ReloadData(true); } } /// /// Loads selected billing address info. /// protected void LoadBillingAddressInfo() { // Try to select company address from ViewState first if (!ShoppingCartControl.IsCurrentStepPostBack && ShoppingCartControl.GetTempValue(BILLING_ADDRESS_ID) != null) { LoadBillingFromViewState(); } else { int addressId = 0; if (drpBillingAddr.SelectedValue != "0") { addressId = Convert.ToInt32(drpBillingAddr.SelectedValue); AddressInfo ai = AddressInfoProvider.GetAddressInfo(addressId); if (ai != null) { txtBillingName.Text = ai.AddressPersonalName; txtBillingAddr1.Text = ai.AddressLine1; txtBillingAddr2.Text = ai.AddressLine2; txtBillingCity.Text = ai.AddressCity; txtBillingZip.Text = ai.AddressZip; txtBillingPhone.Text = ai.AddressPhone; CountrySelector1.CountryID = ai.AddressCountryID; CountrySelector1.StateID = ai.AddressStateID; CountrySelector1.ReloadData(true); } } else { // Clean billing part of the form CleanForm(true, false, false); // Prefill customer company name or full name txtBillingName.Text = GetDefaultAddressName(ShoppingCart.Customer); } } } /// /// Loads selected shipping address info. /// protected void LoadShippingAddressInfo() { int addressId = 0; // Load shipping info only if shipping part is visible if (plhShipping.Visible) { // Try to select company address from ViewState first if (!ShoppingCartControl.IsCurrentStepPostBack && ShoppingCartControl.GetTempValue(SHIPPING_ADDRESS_ID) != null) { LoadShippingFromViewState(); } else { if (drpShippingAddr.SelectedValue != "0") { addressId = Convert.ToInt32(drpShippingAddr.SelectedValue); AddressInfo ai = AddressInfoProvider.GetAddressInfo(addressId); if (ai != null) { txtShippingName.Text = ai.AddressPersonalName; txtShippingAddr1.Text = ai.AddressLine1; txtShippingAddr2.Text = ai.AddressLine2; txtShippingCity.Text = ai.AddressCity; txtShippingZip.Text = ai.AddressZip; txtShippingPhone.Text = ai.AddressPhone; CountrySelector2.CountryID = ai.AddressCountryID; CountrySelector2.StateID = ai.AddressStateID; CountrySelector2.ReloadData(true); } } else { // clean shipping part of the form CleanForm(false, true, false); // Prefill customer company name or full name txtShippingName.Text = GetDefaultAddressName(ShoppingCart.Customer); } } } } /// /// Loads selected company address info. /// protected void LoadCompanyAddressInfo() { int addressId = 0; // Load company address info only if company part is visible if (plcCompanyDetail.Visible) { // Try to select company address from ViewState first if (!ShoppingCartControl.IsCurrentStepPostBack && ShoppingCartControl.GetTempValue(COMPANY_ADDRESS_ID) != null) { LoadCompanyFromViewState(); } else { if (drpCompanyAddress.SelectedValue != "0") { addressId = Convert.ToInt32(drpCompanyAddress.SelectedValue); AddressInfo ai = AddressInfoProvider.GetAddressInfo(addressId); if (ai != null) { txtCompanyName.Text = ai.AddressPersonalName; txtCompanyLine1.Text = ai.AddressLine1; txtCompanyLine2.Text = ai.AddressLine2; txtCompanyCity.Text = ai.AddressCity; txtCompanyZip.Text = ai.AddressZip; txtCompanyPhone.Text = ai.AddressPhone; CountrySelector3.CountryID = ai.AddressCountryID; CountrySelector3.StateID = ai.AddressStateID; CountrySelector3.ReloadData(true); } } else { // clean shipping part of the form CleanForm(false, false, true); // Prefill customer company name or full name txtCompanyName.Text = GetDefaultAddressName(ShoppingCart.Customer); } } } } /// /// Check if the form is well filled. /// /// True or false. public override bool IsValid() { Validator val = new Validator(); // check billing part of the form string result = val.NotEmpty(txtBillingName.Text.Trim(), GetString("ShoppingCartOrderAddresses.BillingNameErr")) .NotEmpty(txtBillingAddr1.Text.Trim(), GetString("ShoppingCartOrderAddresses.BillingAddressLineErr")) .NotEmpty(txtBillingCity.Text.Trim(), GetString("ShoppingCartOrderAddresses.BillingCityErr")) .NotEmpty(txtBillingZip.Text.Trim(), GetString("ShoppingCartOrderAddresses.BillingZIPErr")).Result; if (result == "") { // Check shipping address if (chkShippingAddr.Checked) { // check shipping part of the form if checkbox is checked result = val.NotEmpty(txtShippingName.Text.Trim(), GetString("ShoppingCartOrderAddresses.ShippingNameErr")) .NotEmpty(txtShippingAddr1.Text.Trim(), GetString("ShoppingCartOrderAddresses.ShippingAddressLineErr")) .NotEmpty(txtShippingCity.Text.Trim(), GetString("ShoppingCartOrderAddresses.ShippingCityErr")) .NotEmpty(txtShippingZip.Text.Trim(), GetString("ShoppingCartOrderAddresses.ShippingZIPErr")).Result; } // Check company address if ((result == "") && (chkCompanyAddress.Checked)) { // check company part of the form if checkbox is checked result = val.NotEmpty(txtCompanyName.Text.Trim(), GetString("ShoppingCartOrderAddresses.CompanyNameErr")) .NotEmpty(txtCompanyLine1.Text.Trim(), GetString("ShoppingCartOrderAddresses.CompanyAddressLineErr")) .NotEmpty(txtCompanyCity.Text.Trim(), GetString("ShoppingCartOrderAddresses.CompanyCityErr")) .NotEmpty(txtCompanyZip.Text.Trim(), GetString("ShoppingCartOrderAddresses.CompanyZIPErr")).Result; } } if (result != "") { // display error lblError.Visible = true; lblError.Text = result; return false; } return true; } /// /// Process valid values of this step. /// public override bool ProcessStep() { AddressInfo ai = null; bool newAddress = false; if (mCustomerId > 0) { // Clean the viewstate RemoveBillingTempValues(); RemoveShippingTempValues(); RemoveCompanyTempValues(); // Check country presence if (CountrySelector1.CountryID <= 0) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedcountryerr"); return false; } if (!CountrySelector1.StateSelectionIsValid) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedstateerr"); return false; } // Process billing address //------------------------ ai = AddressInfoProvider.GetAddressInfo(ValidationHelper.GetInteger(drpBillingAddr.SelectedValue, 0)); if (ai == null) { ai = new AddressInfo(); newAddress = true; } ai.AddressPersonalName = txtBillingName.Text.Trim(); ai.AddressLine1 = txtBillingAddr1.Text.Trim(); ai.AddressLine2 = txtBillingAddr2.Text.Trim(); ai.AddressCity = txtBillingCity.Text.Trim(); ai.AddressZip = txtBillingZip.Text.Trim(); ai.AddressCountryID = CountrySelector1.CountryID; ai.AddressStateID = CountrySelector1.StateID; ai.AddressPhone = txtBillingPhone.Text.Trim(); if (newAddress) { ai.AddressIsBilling = true; ai.AddressIsShipping = !chkShippingAddr.Checked; ai.AddressIsCompany = !chkCompanyAddress.Checked; ai.AddressEnabled = true; } ai.AddressCustomerID = mCustomerId; ai.AddressName = AddressInfoProvider.GetAddressName(ai); // Save address and set it's ID to ShoppingCartInfoObj AddressInfoProvider.SetAddressInfo(ai); // Update current contact's address ModuleCommands.OnlineMarketingMapAddress(ai, ContactID); ShoppingCart.ShoppingCartBillingAddressID = ai.AddressID; // If shopping cart does not need shipping if (!ShippingOptionInfoProvider.IsShippingNeeded(ShoppingCart)) { ShoppingCart.ShoppingCartShippingAddressID = 0; } // If shipping address is different from billing address else if (chkShippingAddr.Checked) { // Check country presence if (CountrySelector2.CountryID <= 0) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedcountryerr"); return false; } if (!CountrySelector2.StateSelectionIsValid) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedstateerr"); return false; } newAddress = false; // Process shipping address //------------------------- ai = AddressInfoProvider.GetAddressInfo(Convert.ToInt32(drpShippingAddr.SelectedValue)); if (ai == null) { ai = new AddressInfo(); newAddress = true; } ai.AddressPersonalName = txtShippingName.Text.Trim(); ai.AddressLine1 = txtShippingAddr1.Text.Trim(); ai.AddressLine2 = txtShippingAddr2.Text.Trim(); ai.AddressCity = txtShippingCity.Text.Trim(); ai.AddressZip = txtShippingZip.Text.Trim(); ai.AddressCountryID = CountrySelector2.CountryID; ai.AddressStateID = CountrySelector2.StateID; ai.AddressPhone = txtShippingPhone.Text.Trim(); if (newAddress) { ai.AddressIsShipping = true; ai.AddressEnabled = true; ai.AddressIsBilling = false; ai.AddressIsCompany = false; ai.AddressEnabled = true; } ai.AddressCustomerID = mCustomerId; ai.AddressName = AddressInfoProvider.GetAddressName(ai); // Save address and set it's ID to ShoppingCartInfoObj AddressInfoProvider.SetAddressInfo(ai); ShoppingCart.ShoppingCartShippingAddressID = ai.AddressID; } // Shipping address is the same as billing address else { ShoppingCart.ShoppingCartShippingAddressID = ShoppingCart.ShoppingCartBillingAddressID; } if (chkCompanyAddress.Checked) { // Check country presence if (CountrySelector3.CountryID <= 0) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedcountryerr"); return false; } if (!CountrySelector3.StateSelectionIsValid) { lblError.Visible = true; lblError.Text = GetString("countryselector.selectedstateerr"); return false; } newAddress = false; // Process company address //------------------------- ai = AddressInfoProvider.GetAddressInfo(Convert.ToInt32(drpCompanyAddress.SelectedValue)); if (ai == null) { ai = new AddressInfo(); newAddress = true; } ai.AddressPersonalName = txtCompanyName.Text.Trim(); ai.AddressLine1 = txtCompanyLine1.Text.Trim(); ai.AddressLine2 = txtCompanyLine2.Text.Trim(); ai.AddressCity = txtCompanyCity.Text.Trim(); ai.AddressZip = txtCompanyZip.Text.Trim(); ai.AddressCountryID = CountrySelector3.CountryID; ai.AddressStateID = CountrySelector3.StateID; ai.AddressPhone = txtCompanyPhone.Text.Trim(); if (newAddress) { ai.AddressIsCompany = true; ai.AddressIsBilling = false; ai.AddressIsShipping = false; ai.AddressEnabled = true; } ai.AddressCustomerID = mCustomerId; ai.AddressName = AddressInfoProvider.GetAddressName(ai); // Save address and set it's ID to ShoppingCartInfoObj AddressInfoProvider.SetAddressInfo(ai); ShoppingCart.ShoppingCartCompanyAddressID = ai.AddressID; } // Company address is the same as billing address else { // Save information about company address or not (according to the site settings) if (ECommerceSettings.UseExtraCompanyAddress(mCurrentSite.SiteName)) { ShoppingCart.ShoppingCartCompanyAddressID = ShoppingCart.ShoppingCartBillingAddressID; } else { ShoppingCart.ShoppingCartCompanyAddressID = 0; } } try { // Update changes in database only when on the live site if (!ShoppingCartControl.IsInternalOrder) { ShoppingCartInfoProvider.SetShoppingCartInfo(ShoppingCart); } return true; } catch (Exception ex) { // Show error message lblError.Visible = true; lblError.Text = ex.Message; return false; } } else { lblError.Visible = true; lblError.Text = GetString("Ecommerce.NoCustomerSelected"); return false; } } protected override void Render(HtmlTextWriter writer) { if (!ShoppingCartControl.IsCurrentStepPostBack) { // Load values LoadShippingSelectedValue(); LoadBillingSelectedValue(); LoadCompanySelectedValue(); } base.Render(writer); } private void UpdateShippingAddresses() { string oldSelectedValue = drpShippingAddr.SelectedValue; drpShippingAddr.ClearSelection(); drpShippingAddr.SelectedIndex = -1; // Add new item <(new), 0> ListItem li = new ListItem(GetString("ShoppingCartOrderAddresses.NewAddress"), "0"); DataSet ds = AddressInfoProvider.GetAddresses(mCustomerId, false, true, false, true); drpShippingAddr.DataSource = ds; drpShippingAddr.DataBind(); drpShippingAddr.Items.Insert(0, li); // Try to remove selected biling address try { // Do not remove (new) item if (drpBillingAddr.SelectedIndex != 0) { drpShippingAddr.Items.Remove(drpBillingAddr.SelectedItem); } drpShippingAddr.SelectedValue = oldSelectedValue; } catch { LoadShippingSelectedValue(); LoadShippingAddressInfo(); } if (drpShippingAddr.SelectedIndex != 0) { LoadShippingSelectedValue(); LoadShippingAddressInfo(); } } private void UpdateCompanyAddresses() { string oldSelectedValue = drpCompanyAddress.SelectedValue; drpCompanyAddress.ClearSelection(); drpCompanyAddress.SelectedIndex = -1; // Add new item <(new), 0> ListItem li = new ListItem(GetString("ShoppingCartOrderAddresses.NewAddress"), "0"); DataSet ds = AddressInfoProvider.GetAddresses(mCustomerId, false, false, true, true); drpCompanyAddress.DataSource = ds; drpCompanyAddress.DataBind(); drpCompanyAddress.Items.Insert(0, li); // Try to remove selected biling address try { // Do not remove (new) item if (drpBillingAddr.SelectedIndex != 0) { drpCompanyAddress.Items.Remove(drpBillingAddr.SelectedItem); } drpCompanyAddress.SelectedValue = oldSelectedValue; } catch { LoadCompanySelectedValue(); LoadCompanyAddressInfo(); } if (drpCompanyAddress.SelectedIndex != 0) { LoadCompanySelectedValue(); LoadCompanyAddressInfo(); } } private string GetDefaultAddressName(CustomerInfo customer) { if (customer == null) { return string.Empty; } if (customer.CustomerCompany != "") { return customer.CustomerCompany; } return customer.CustomerFirstName + " " + customer.CustomerLastName; } }