HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSWebParts/Ecommerce/Checkout/Forms/CustomerDetail.ascx.cs
using System;
using System.Linq;

using CMS.Base;
using CMS.Ecommerce;
using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.Helpers;


/// <summary>
/// Customer registration web part for checkout process
/// </summary>
public partial class CMSWebParts_Ecommerce_Checkout_Forms_CustomerDetail : CMSCheckoutWebPart
{
    #region "Constants"

    const string COMPANY_TYPE = "Company";

    #endregion


    #region "Properties"

    /// <summary>
    /// Gets or sets a value indicating whether propagating changes on postback is allowed.
    /// </summary>    
    public bool PropagateChangesOnPostback
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("PropagateChangesOnPostback"), false);
        }
        set
        {
            SetValue("PropagateChangesOnPostback", value);
        }
    }


    /// <summary>
    /// Alternative form name for this web part.
    /// </summary>
    public string AlternativeFormName
    {
        get
        {
            return ValidationHelper.GetString(GetValue("AlternativeFormName"), "");
        }
        set
        {
            SetValue("AlternativeFormName", value);
        }
    }


    /// <summary>
    /// Gets the customer type selector [Personal/Company]. Returns null if alternative form does not include this field.
    /// </summary>    
    private FormEngineUserControl TypeSelector
    {
        get
        {
            return customerForm.FieldControls["AccountType"];
        }
    }

    #endregion


    #region "Life cycle"

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        string[] splitFormName = AlternativeFormName.Split('.');
        // UIForm cant process full path of alternative form if object type is already specified.
        customerForm.AlternativeFormName = splitFormName.LastOrDefault();
    }


    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        customerForm.OnBeforeSave += customerForm_OnBeforeSave;

        // Set company type for customer with specified company name. Ignore in postback to ensure change selection is possible.
        if (!RequestHelper.IsPostBack())
        {
            FormEngineUserControl typeSelector = TypeSelector;
            string customerCompany = ShoppingCart.Customer == null ? "" : ShoppingCart.Customer.CustomerCompany;

            if ((typeSelector != null) && !string.IsNullOrEmpty(customerCompany))
            {
                typeSelector.Value = COMPANY_TYPE;
            }
        }
    }


    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        customerForm.SubmitButton.Visible = false;
    }

    #endregion


    #region "Form events"

    protected void customerForm_OnBeforeSave(object sender, EventArgs e)
    {
        // Cancel saving, just set current filed values into EditableObject through UIForm.SaveData method
        customerForm.StopProcessing = true;
    }

    #endregion


    #region "Wizard methods"

    protected override void StepLoaded(object sender, StepEventArgs e)
    {
        base.StepLoaded(sender, e);

        if (ShoppingCart.Customer != null)
        {
            customerForm.EditedObject = ShoppingCart.Customer;
        }

        if (!RequestHelper.IsPostBack())
        {
            customerForm.ReloadData();
        }

        // Set first time user customer for postback tax recalculation
        if (PropagateChangesOnPostback && (ShoppingCart.Customer == null))
        {
            ShoppingCart.Customer = customerForm.EditedObject as CustomerInfo;
        }

        // Propagate changes on postback if there is customer with company type and some tax registration id
        if (PropagateChangesOnPostback && (ShoppingCart.Customer != null))
        {
            FormEngineUserControl typeSelector = TypeSelector;
            bool isPersonalType = (typeSelector != null) && (!typeSelector.Value.Equals(COMPANY_TYPE));
            var customerTaxRegistrationID = customerForm.GetFieldValue("CustomerTaxRegistrationID");

            if ((customerTaxRegistrationID == null) || isPersonalType)
            {
                ShoppingCart.Customer.CustomerTaxRegistrationID = string.Empty;
            }
            else
            {
                ShoppingCart.Customer.CustomerTaxRegistrationID = customerTaxRegistrationID.ToString();
            }

            ShoppingCart.InvalidateCalculations();
            ComponentEvents.RequestEvents.RaiseEvent(null, e, SHOPPING_CART_CHANGED);
        }
    }


    protected override void ValidateStepData(object sender, StepEventArgs e)
    {
        base.ValidateStepData(sender, e);

        if (!customerForm.ValidateData())
        {
            if (e != null)
            {
                e.CancelEvent = true;
            }
        }
    }


    protected override void SaveStepData(object sender, StepEventArgs e)
    {
        base.SaveStepData(sender, e);

        // Just set current filed values into EditableObject, saving was canceled in OnBeforeSave
        customerForm.SaveData(null, false);

        CustomerInfo customer = customerForm.EditedObject as CustomerInfo;
        FormEngineUserControl typeSelector = TypeSelector;

        // Clear company fields for non-company type
        if ((typeSelector != null) && (!typeSelector.Value.Equals(COMPANY_TYPE)))
        {
            customer.CustomerCompany = "";
            customer.CustomerOrganizationID = "";
            customer.CustomerTaxRegistrationID = "";
        }

        ShoppingCart.Customer = customer;
    }

    #endregion
}