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.ExtendedControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using CMS.URLRewritingEngine; public partial class CMSModules_Ecommerce_Controls_MyDetails_MyDetails : CMSAdminControl { /// /// Inform on new customer creation. /// /// Url of the page where control currently sits public delegate void CustomerCreated(); /// /// Fired when new customer is created. /// public event CustomerCreated OnCustomerCrated; private CustomerInfo mCustomer = null; /// /// Customer info object. /// public CustomerInfo Customer { get { return mCustomer; } set { mCustomer = value; } } /// /// If true, control does not process the data. /// public override bool StopProcessing { get { return ValidationHelper.GetBoolean(ViewState["StopProcessing"], false); } set { ViewState["StopProcessing"] = value; drpCountry.StopProcessing = value; drpPayment.StopProcessing = value; drpShipping.StopProcessing = value; } } public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMessages; } } /// /// Page load. /// protected void Page_Load(object sender, EventArgs e) { if (!StopProcessing) { if (CMSContext.CurrentUser.IsAuthenticated()) { btnOk.Text = GetString("General.OK"); lblCustomerLastName.Text = GetString("Customers_Edit.CustomerLastNameLabel"); lblCustomerFirstName.Text = GetString("Customers_Edit.CustomerFirstNameLabel"); lblCustomerCompany.Text = GetString("Customers_Edit.CustomerCompanyLabel"); lblCustomerFax.Text = GetString("customers_edit.CustomerFax"); lblCustomerPhone.Text = GetString("customers_edit.CustomerPhone"); lblCustomerPreferredCurrency.Text = GetString("customers_edit.CustomerCurrency"); lblCustomerPreferredShippingOption.Text = GetString("customers_edit.CustomerShipping"); lblCustomerPrefferedPaymentOption.Text = GetString("customers_edit.CustomerPayment"); lblCustomerEmail.Text = GetString("general.email"); lblCustomerCountry.Text = GetString("Customers_Edit.CustomerCountry"); lblCompanyAccount.Text = GetString("Customers_Edit.lblCompanyAccount"); // WAI validation lblCustomerPreferredCurrency.AssociatedControlClientID = selectCurrency.InputClientID; lblCustomerPreferredShippingOption.AssociatedControlClientID = drpShipping.InputClientID; lblCustomerPrefferedPaymentOption.AssociatedControlClientID = drpPayment.InputClientID; lblCustomerCountry.AssociatedControlClientID = drpCountry.InputClientID; if (ECommerceSettings.ShowTaxRegistrationID(CMSContext.CurrentSite.SiteName)) { lblTaxRegistrationID.Text = GetString("Customers_Edit.lblTaxRegistrationID"); } else { plhTaxRegistrationID.Visible = false; } if (ECommerceSettings.ShowOrganizationID(CMSContext.CurrentSite.SiteName)) { lblOrganizationID.Text = GetString("Customers_Edit.lblOrganizationID"); } else { plhOrganizationID.Visible = false; } int siteId = CMSContext.CurrentSiteID; // Set site IDs drpPayment.SiteID = siteId; drpShipping.SiteID = siteId; selectCurrency.SiteID = siteId; if (mCustomer != null) { // Fill editing form if (!RequestHelper.IsPostBack()) { LoadData(); // Show that the customer was created or updated successfully if (QueryHelper.GetString("saved", String.Empty) == "1") { ShowChangesSaved(); } } } else { if (!RequestHelper.IsPostBack()) { txtCustomerEmail.Text = CMSContext.CurrentUser.Email; } // Show message ShowInformation(GetString("MyAccount.MyDetails.CreateNewCustomer")); } } else { // Hide if user is not authenticated Visible = false; } } } /// /// Load form data. /// public void LoadData() { // Fill the form txtCustomerCompany.Text = mCustomer.CustomerCompany; txtCustomerEmail.Text = mCustomer.CustomerEmail; txtCustomerFax.Text = mCustomer.CustomerFax; txtCustomerFirstName.Text = mCustomer.CustomerFirstName; txtCustomerLastName.Text = mCustomer.CustomerLastName; txtCustomerPhone.Text = mCustomer.CustomerPhone; txtOraganizationID.Text = mCustomer.CustomerOrganizationID; txtTaxRegistrationID.Text = mCustomer.CustomerTaxRegistrationID; if (mCustomer.CustomerCountryID > 0) { drpCountry.CountryID = mCustomer.CustomerCountryID; } if (mCustomer.CustomerStateID > 0) { drpCountry.StateID = mCustomer.CustomerStateID; } // Select customer preferences string currentSiteName = CMSContext.CurrentSiteName; int currencyId = (Customer.CustomerUser != null) ? Customer.CustomerUser.GetUserPreferredCurrencyID(currentSiteName) : 0; currencyId = (currencyId > 0) ? currencyId : Customer.CustomerPreferredCurrencyID; if (currencyId > 0) { selectCurrency.CurrencyID = currencyId; } int paymentId = (Customer.CustomerUser != null) ? Customer.CustomerUser.GetUserPreferredPaymentOptionID(currentSiteName) : 0; paymentId = (paymentId > 0) ? paymentId : Customer.CustomerPreferredPaymentOptionID; if (paymentId > 0) { drpPayment.PaymentID = paymentId; } int shippingId = (Customer.CustomerUser != null) ? Customer.CustomerUser.GetUserPreferredShippingOptionID(currentSiteName) : 0; shippingId = (shippingId > 0) ? shippingId : Customer.CustomerPreferredShippingOptionID; if (shippingId > 0) { drpShipping.ShippingID = shippingId; } if (!DataHelper.IsEmpty(txtCustomerCompany.Text) || !DataHelper.IsEmpty(txtOraganizationID.Text) || !DataHelper.IsEmpty(txtTaxRegistrationID.Text)) { chkCompanyAccount.Checked = true; plcCompanyInfo.Visible = true; } } /// /// On chkCompanyAccount check box check changed event handler. /// protected void chkCompanyAccount_CheckChanged(object sender, EventArgs e) { // Displays/hides company info region if (chkCompanyAccount.Checked) { plcCompanyInfo.Visible = true; } else { plcCompanyInfo.Visible = false; } } /// /// Sets data to database. /// protected void btnOK_Click(object sender, EventArgs e) { string errorMessage = ""; string siteName = CMSContext.CurrentSiteName; if ((txtCustomerCompany.Text.Trim() == "" || !chkCompanyAccount.Checked) && ((txtCustomerFirstName.Text.Trim() == "") || (txtCustomerLastName.Text.Trim() == ""))) { errorMessage = GetString("Customers_Edit.errorInsert"); } // Check the following items if complete company info is required for company account if (errorMessage == "" && ECommerceSettings.RequireCompanyInfo(siteName) && chkCompanyAccount.Checked) { errorMessage = new Validator().NotEmpty(txtCustomerCompany.Text, GetString("customers_edit.errorCompany")) .NotEmpty(txtOraganizationID.Text, GetString("customers_edit.errorOrganizationID")) .NotEmpty(txtTaxRegistrationID.Text, GetString("customers_edit.errorTaxRegID")).Result; } if (errorMessage == "") { errorMessage = new Validator().IsEmail(txtCustomerEmail.Text.Trim(), GetString("customers_edit.erroremailformat")).Result; } plcCompanyInfo.Visible = chkCompanyAccount.Checked; if (errorMessage == "") { // If customer doesn't already exist, create new one if (mCustomer == null) { mCustomer = new CustomerInfo(); mCustomer.CustomerEnabled = true; mCustomer.CustomerUserID = CMSContext.CurrentUser.UserID; } int currencyId = selectCurrency.CurrencyID; if (ECommerceContext.CurrentShoppingCart != null) { ECommerceContext.CurrentShoppingCart.ShoppingCartCurrencyID = currencyId; } mCustomer.CustomerEmail = txtCustomerEmail.Text.Trim(); mCustomer.CustomerFax = txtCustomerFax.Text.Trim(); mCustomer.CustomerLastName = txtCustomerLastName.Text.Trim(); mCustomer.CustomerPhone = txtCustomerPhone.Text.Trim(); mCustomer.CustomerFirstName = txtCustomerFirstName.Text.Trim(); mCustomer.CustomerCountryID = drpCountry.CountryID; mCustomer.CustomerStateID = drpCountry.StateID; mCustomer.CustomerCreated = DateTime.Now; // Set customers's preferences mCustomer.CustomerPreferredCurrencyID = (currencyId > 0) ? currencyId : 0; mCustomer.CustomerPreferredPaymentOptionID = drpPayment.PaymentID; mCustomer.CustomerPreferredShippingOptionID = drpShipping.ShippingID; // Check if customer is registered if (mCustomer.CustomerIsRegistered) { // Find user-site binding UserSiteInfo userSite = UserSiteInfoProvider.GetUserSiteInfo(Customer.CustomerUserID, CMSContext.CurrentSiteID); if (userSite != null) { // Set user's preferences userSite.UserPreferredCurrencyID = mCustomer.CustomerPreferredCurrencyID; userSite.UserPreferredPaymentOptionID = mCustomer.CustomerPreferredPaymentOptionID; userSite.UserPreferredShippingOptionID = mCustomer.CustomerPreferredShippingOptionID; UserSiteInfoProvider.SetUserSiteInfo(userSite); } } if (chkCompanyAccount.Checked) { mCustomer.CustomerCompany = txtCustomerCompany.Text.Trim(); if (ECommerceSettings.ShowOrganizationID(siteName)) { mCustomer.CustomerOrganizationID = txtOraganizationID.Text.Trim(); } if (ECommerceSettings.ShowTaxRegistrationID(siteName)) { mCustomer.CustomerTaxRegistrationID = txtTaxRegistrationID.Text.Trim(); } } else { mCustomer.CustomerCompany = ""; mCustomer.CustomerOrganizationID = ""; mCustomer.CustomerTaxRegistrationID = ""; } // Update customer data CustomerInfoProvider.SetCustomerInfo(mCustomer); // Update corresponding user email UserInfo user = mCustomer.CustomerUser; if (user != null) { user.Email = mCustomer.CustomerEmail; user.UserSettings.SetValue("UserPhone", Customer.CustomerPhone); UserInfoProvider.SetUserInfo(user); } // Update corresponding contact data ModuleCommands.OnlineMarketingUpdateContactFromExternalData(mCustomer, DataClassInfoProvider.GetDataClass(CustomerInfo.TYPEINFO.ObjectClassName).ClassContactOverwriteEnabled, ModuleCommands.OnlineMarketingGetCurrentContactID()); // Let others now that customer was created if (OnCustomerCrated != null) { OnCustomerCrated(); ShowChangesSaved(); } else { URLHelper.Redirect(URLHelper.AddParameterToUrl(URLRewriter.CurrentURL, "saved", "1")); } } else { //Show error ShowError(errorMessage); } } /// /// Raises OnShippingChange event. /// protected void drpShipping_ShippingChange(object sender, EventArgs e) { drpPayment.ShippingOptionID = drpShipping.ShippingID; drpPayment.PaymentID = 0; } /// /// Overridden SetValue - because of MyAccount webpart. /// /// Name of the property to set /// Value to set public override void SetValue(string propertyName, object value) { base.SetValue(propertyName, value); switch (propertyName.ToLowerCSafe()) { case "customer": GeneralizedInfo gi = value as GeneralizedInfo; if (gi != null) { Customer = gi.MainObject as CustomerInfo; } break; } } }