/* 
 * GK application - OmniPOS Service API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 5.21.1-b03
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel.DataAnnotations;
using SwaggerDateConverter = IO.Swagger.Client.SwaggerDateConverter;

namespace IO.Swagger.Model
{
    /// <summary>
    /// CustomerIdentificationConfig &lt;p&gt;This config entity defines the CustomerIdentification process.&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig :  IEquatable<ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;This parameter defines the customer identification function to use.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: CustomerIdentificationFunction [CUSTOMERREGISTRATION, CUSTOMERSEARCH, CUSTOMERDATAENTRY]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;CustomerRegistration as &#39;CustomerRegistration&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerSearch as &#39;CustomerSearch&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerDataEntry as &#39;CustomerDataEntry&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the customer identification function to use.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: CustomerIdentificationFunction [CUSTOMERREGISTRATION, CUSTOMERSEARCH, CUSTOMERDATAENTRY]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;CustomerRegistration as &#39;CustomerRegistration&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerSearch as &#39;CustomerSearch&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerDataEntry as &#39;CustomerDataEntry&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum CustomerIdentificationFunctionEnum
        {
            
            /// <summary>
            /// Enum CustomerRegistration for value: CustomerRegistration
            /// </summary>
            [EnumMember(Value = "CustomerRegistration")]
            CustomerRegistration = 1,
            
            /// <summary>
            /// Enum CustomerSearch for value: CustomerSearch
            /// </summary>
            [EnumMember(Value = "CustomerSearch")]
            CustomerSearch = 2,
            
            /// <summary>
            /// Enum CustomerDataEntry for value: CustomerDataEntry
            /// </summary>
            [EnumMember(Value = "CustomerDataEntry")]
            CustomerDataEntry = 3
        }

        /// <summary>
        /// &lt;p&gt;This parameter defines the customer identification function to use.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: CustomerIdentificationFunction [CUSTOMERREGISTRATION, CUSTOMERSEARCH, CUSTOMERDATAENTRY]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;CustomerRegistration as &#39;CustomerRegistration&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerSearch as &#39;CustomerSearch&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerDataEntry as &#39;CustomerDataEntry&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the customer identification function to use.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: CustomerIdentificationFunction [CUSTOMERREGISTRATION, CUSTOMERSEARCH, CUSTOMERDATAENTRY]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;CustomerRegistration as &#39;CustomerRegistration&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerSearch as &#39;CustomerSearch&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerDataEntry as &#39;CustomerDataEntry&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="customerIdentificationFunction", EmitDefaultValue=false)]
        public CustomerIdentificationFunctionEnum? CustomerIdentificationFunction { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig" /> class.
        /// </summary>
        /// <param name="customerCardType">&lt;p&gt;This parameter defines the card type which has to be used for the customer identification (set only if a restriction is neccessary).&lt;/p&gt;.</param>
        /// <param name="customerIdentificationFunction">&lt;p&gt;This parameter defines the customer identification function to use.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: CustomerIdentificationFunction [CUSTOMERREGISTRATION, CUSTOMERSEARCH, CUSTOMERDATAENTRY]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;CustomerRegistration as &#39;CustomerRegistration&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerSearch as &#39;CustomerSearch&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;CustomerDataEntry as &#39;CustomerDataEntry&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="customerRequired">&lt;p&gt;This parameter controls whether it is mandatory to enter a customer.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;.</param>
        /// <param name="customerRequiredAudibleAlert">&lt;p&gt;This parameter controls if a missing customer identification will be signaled by an audible alert (it will work not before audible alerts can be implemented).&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;.</param>
        /// <param name="customerRequiredMessage">&lt;p&gt;This parameter controls if a message shall be triggered if the customer is required. At the same time there is a key for hinting a message.&lt;/p&gt;.</param>
        /// <param name="customerDataMissingMessage">&lt;p&gt;If one of the required conditions is not fulfilled then the warning customer data incomplete is displayed.&lt;/p&gt;.</param>
        /// <param name="retrieveCustomerId">&lt;p&gt;This parameter controls if the customer identification process shall provide a customer ID of an identified customer for the use by calling the process.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;.</param>
        /// <param name="customerRegistrationConfigId">&lt;p&gt;This parameter defines the config for the CustomerRegistration process. It is only in use if the customerIdentificationFunction is set to CustomerRegistration.&lt;/p&gt;.</param>
        /// <param name="customerSearchConfigId">&lt;p&gt;This parameter defines the config for the CustomerSearch process. It is only in use if the customerIdentificationFunction is set to CustomerSearch.&lt;/p&gt;.</param>
        /// <param name="customerDataEntryConfigId">&lt;p&gt;This parameter defines the config for the CustomerDataEntry process. It is only in use if the customerIdentificationFunction is set to CustomerDataEntry.&lt;/p&gt;.</param>
        /// <param name="firstNameRequired">&lt;p&gt;It defines if the first name of the customer is required.&lt;/p&gt;.</param>
        /// <param name="lastNameRequired">&lt;p&gt;It defines if the last name of the customer is required.&lt;/p&gt;.</param>
        /// <param name="streetRequired">&lt;p&gt;It defines if the street of the default home address of the customer is required.&lt;/p&gt;.</param>
        /// <param name="cityRequired">&lt;p&gt;It defines if the city of the default home address of the customer is required.&lt;/p&gt;.</param>
        /// <param name="postalCodeRequired">&lt;p&gt;It defines if the postal code of the default home address of the customer is required.&lt;/p&gt;.</param>
        /// <param name="federalStateRequired">&lt;p&gt;It defines if the federal state of the default home address of the customer is required.&lt;/p&gt;.</param>
        /// <param name="countryRequired">&lt;p&gt;It defines if the country of the default home address of the customer is required.&lt;/p&gt;.</param>
        /// <param name="taxIdRequired">&lt;p&gt;It defines if the tax id of the customer is required.&lt;/p&gt;.</param>
        /// <param name="xXCustom08">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom10">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom09">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom07">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom05">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom06">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom11">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom12">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom13">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom14">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom15">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom03">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom02">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom04">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom01">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        public ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig(string customerCardType = default(string), CustomerIdentificationFunctionEnum? customerIdentificationFunction = default(CustomerIdentificationFunctionEnum?), bool? customerRequired = default(bool?), bool? customerRequiredAudibleAlert = default(bool?), string customerRequiredMessage = default(string), string customerDataMissingMessage = default(string), bool? retrieveCustomerId = default(bool?), string customerRegistrationConfigId = default(string), string customerSearchConfigId = default(string), string customerDataEntryConfigId = default(string), bool? firstNameRequired = default(bool?), bool? lastNameRequired = default(bool?), bool? streetRequired = default(bool?), bool? cityRequired = default(bool?), bool? postalCodeRequired = default(bool?), bool? federalStateRequired = default(bool?), bool? countryRequired = default(bool?), bool? taxIdRequired = default(bool?), string xXCustom08 = default(string), string xXCustom10 = default(string), string xXCustom09 = default(string), string xXCustom07 = default(string), string xXCustom05 = default(string), string xXCustom06 = default(string), string xXCustom11 = default(string), string xXCustom12 = default(string), string xXCustom13 = default(string), string xXCustom14 = default(string), string xXCustom15 = default(string), string xXCustom03 = default(string), string xXCustom02 = default(string), string xXCustom04 = default(string), string xXCustom01 = default(string))
        {
            this.CustomerCardType = customerCardType;
            this.CustomerIdentificationFunction = customerIdentificationFunction;
            this.CustomerRequired = customerRequired;
            this.CustomerRequiredAudibleAlert = customerRequiredAudibleAlert;
            this.CustomerRequiredMessage = customerRequiredMessage;
            this.CustomerDataMissingMessage = customerDataMissingMessage;
            this.RetrieveCustomerId = retrieveCustomerId;
            this.CustomerRegistrationConfigId = customerRegistrationConfigId;
            this.CustomerSearchConfigId = customerSearchConfigId;
            this.CustomerDataEntryConfigId = customerDataEntryConfigId;
            this.FirstNameRequired = firstNameRequired;
            this.LastNameRequired = lastNameRequired;
            this.StreetRequired = streetRequired;
            this.CityRequired = cityRequired;
            this.PostalCodeRequired = postalCodeRequired;
            this.FederalStateRequired = federalStateRequired;
            this.CountryRequired = countryRequired;
            this.TaxIdRequired = taxIdRequired;
            this.XXCustom08 = xXCustom08;
            this.XXCustom10 = xXCustom10;
            this.XXCustom09 = xXCustom09;
            this.XXCustom07 = xXCustom07;
            this.XXCustom05 = xXCustom05;
            this.XXCustom06 = xXCustom06;
            this.XXCustom11 = xXCustom11;
            this.XXCustom12 = xXCustom12;
            this.XXCustom13 = xXCustom13;
            this.XXCustom14 = xXCustom14;
            this.XXCustom15 = xXCustom15;
            this.XXCustom03 = xXCustom03;
            this.XXCustom02 = xXCustom02;
            this.XXCustom04 = xXCustom04;
            this.XXCustom01 = xXCustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;This parameter defines the card type which has to be used for the customer identification (set only if a restriction is neccessary).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the card type which has to be used for the customer identification (set only if a restriction is neccessary).&lt;/p&gt;</value>
        [DataMember(Name="customerCardType", EmitDefaultValue=false)]
        public string CustomerCardType { get; set; }


        /// <summary>
        /// &lt;p&gt;This parameter controls whether it is mandatory to enter a customer.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter controls whether it is mandatory to enter a customer.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="customerRequired", EmitDefaultValue=false)]
        public bool? CustomerRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter controls if a missing customer identification will be signaled by an audible alert (it will work not before audible alerts can be implemented).&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter controls if a missing customer identification will be signaled by an audible alert (it will work not before audible alerts can be implemented).&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="customerRequiredAudibleAlert", EmitDefaultValue=false)]
        public bool? CustomerRequiredAudibleAlert { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter controls if a message shall be triggered if the customer is required. At the same time there is a key for hinting a message.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter controls if a message shall be triggered if the customer is required. At the same time there is a key for hinting a message.&lt;/p&gt;</value>
        [DataMember(Name="customerRequiredMessage", EmitDefaultValue=false)]
        public string CustomerRequiredMessage { get; set; }

        /// <summary>
        /// &lt;p&gt;If one of the required conditions is not fulfilled then the warning customer data incomplete is displayed.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;If one of the required conditions is not fulfilled then the warning customer data incomplete is displayed.&lt;/p&gt;</value>
        [DataMember(Name="customerDataMissingMessage", EmitDefaultValue=false)]
        public string CustomerDataMissingMessage { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter controls if the customer identification process shall provide a customer ID of an identified customer for the use by calling the process.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter controls if the customer identification process shall provide a customer ID of an identified customer for the use by calling the process.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="retrieveCustomerId", EmitDefaultValue=false)]
        public bool? RetrieveCustomerId { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter defines the config for the CustomerRegistration process. It is only in use if the customerIdentificationFunction is set to CustomerRegistration.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the config for the CustomerRegistration process. It is only in use if the customerIdentificationFunction is set to CustomerRegistration.&lt;/p&gt;</value>
        [DataMember(Name="customerRegistrationConfigId", EmitDefaultValue=false)]
        public string CustomerRegistrationConfigId { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter defines the config for the CustomerSearch process. It is only in use if the customerIdentificationFunction is set to CustomerSearch.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the config for the CustomerSearch process. It is only in use if the customerIdentificationFunction is set to CustomerSearch.&lt;/p&gt;</value>
        [DataMember(Name="customerSearchConfigId", EmitDefaultValue=false)]
        public string CustomerSearchConfigId { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter defines the config for the CustomerDataEntry process. It is only in use if the customerIdentificationFunction is set to CustomerDataEntry.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the config for the CustomerDataEntry process. It is only in use if the customerIdentificationFunction is set to CustomerDataEntry.&lt;/p&gt;</value>
        [DataMember(Name="customerDataEntryConfigId", EmitDefaultValue=false)]
        public string CustomerDataEntryConfigId { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the first name of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the first name of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="firstNameRequired", EmitDefaultValue=false)]
        public bool? FirstNameRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the last name of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the last name of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="lastNameRequired", EmitDefaultValue=false)]
        public bool? LastNameRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the street of the default home address of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the street of the default home address of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="streetRequired", EmitDefaultValue=false)]
        public bool? StreetRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the city of the default home address of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the city of the default home address of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="cityRequired", EmitDefaultValue=false)]
        public bool? CityRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the postal code of the default home address of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the postal code of the default home address of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="postalCodeRequired", EmitDefaultValue=false)]
        public bool? PostalCodeRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the federal state of the default home address of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the federal state of the default home address of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="federalStateRequired", EmitDefaultValue=false)]
        public bool? FederalStateRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the country of the default home address of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the country of the default home address of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="countryRequired", EmitDefaultValue=false)]
        public bool? CountryRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;It defines if the tax id of the customer is required.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;It defines if the tax id of the customer is required.&lt;/p&gt;</value>
        [DataMember(Name="taxIdRequired", EmitDefaultValue=false)]
        public bool? TaxIdRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom08", EmitDefaultValue=false)]
        public string XXCustom08 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom10", EmitDefaultValue=false)]
        public string XXCustom10 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom09", EmitDefaultValue=false)]
        public string XXCustom09 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom07", EmitDefaultValue=false)]
        public string XXCustom07 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom05", EmitDefaultValue=false)]
        public string XXCustom05 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom06", EmitDefaultValue=false)]
        public string XXCustom06 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom11", EmitDefaultValue=false)]
        public string XXCustom11 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom12", EmitDefaultValue=false)]
        public string XXCustom12 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom13", EmitDefaultValue=false)]
        public string XXCustom13 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom14", EmitDefaultValue=false)]
        public string XXCustom14 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom15", EmitDefaultValue=false)]
        public string XXCustom15 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom03", EmitDefaultValue=false)]
        public string XXCustom03 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom02", EmitDefaultValue=false)]
        public string XXCustom02 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom04", EmitDefaultValue=false)]
        public string XXCustom04 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom01", EmitDefaultValue=false)]
        public string XXCustom01 { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig {\n");
            sb.Append("  CustomerCardType: ").Append(CustomerCardType).Append("\n");
            sb.Append("  CustomerIdentificationFunction: ").Append(CustomerIdentificationFunction).Append("\n");
            sb.Append("  CustomerRequired: ").Append(CustomerRequired).Append("\n");
            sb.Append("  CustomerRequiredAudibleAlert: ").Append(CustomerRequiredAudibleAlert).Append("\n");
            sb.Append("  CustomerRequiredMessage: ").Append(CustomerRequiredMessage).Append("\n");
            sb.Append("  CustomerDataMissingMessage: ").Append(CustomerDataMissingMessage).Append("\n");
            sb.Append("  RetrieveCustomerId: ").Append(RetrieveCustomerId).Append("\n");
            sb.Append("  CustomerRegistrationConfigId: ").Append(CustomerRegistrationConfigId).Append("\n");
            sb.Append("  CustomerSearchConfigId: ").Append(CustomerSearchConfigId).Append("\n");
            sb.Append("  CustomerDataEntryConfigId: ").Append(CustomerDataEntryConfigId).Append("\n");
            sb.Append("  FirstNameRequired: ").Append(FirstNameRequired).Append("\n");
            sb.Append("  LastNameRequired: ").Append(LastNameRequired).Append("\n");
            sb.Append("  StreetRequired: ").Append(StreetRequired).Append("\n");
            sb.Append("  CityRequired: ").Append(CityRequired).Append("\n");
            sb.Append("  PostalCodeRequired: ").Append(PostalCodeRequired).Append("\n");
            sb.Append("  FederalStateRequired: ").Append(FederalStateRequired).Append("\n");
            sb.Append("  CountryRequired: ").Append(CountryRequired).Append("\n");
            sb.Append("  TaxIdRequired: ").Append(TaxIdRequired).Append("\n");
            sb.Append("  XXCustom08: ").Append(XXCustom08).Append("\n");
            sb.Append("  XXCustom10: ").Append(XXCustom10).Append("\n");
            sb.Append("  XXCustom09: ").Append(XXCustom09).Append("\n");
            sb.Append("  XXCustom07: ").Append(XXCustom07).Append("\n");
            sb.Append("  XXCustom05: ").Append(XXCustom05).Append("\n");
            sb.Append("  XXCustom06: ").Append(XXCustom06).Append("\n");
            sb.Append("  XXCustom11: ").Append(XXCustom11).Append("\n");
            sb.Append("  XXCustom12: ").Append(XXCustom12).Append("\n");
            sb.Append("  XXCustom13: ").Append(XXCustom13).Append("\n");
            sb.Append("  XXCustom14: ").Append(XXCustom14).Append("\n");
            sb.Append("  XXCustom15: ").Append(XXCustom15).Append("\n");
            sb.Append("  XXCustom03: ").Append(XXCustom03).Append("\n");
            sb.Append("  XXCustom02: ").Append(XXCustom02).Append("\n");
            sb.Append("  XXCustom04: ").Append(XXCustom04).Append("\n");
            sb.Append("  XXCustom01: ").Append(XXCustom01).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }
  
        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig);
        }

        /// <summary>
        /// Returns true if ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig instances are equal
        /// </summary>
        /// <param name="input">Instance of ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ComGkSoftwarePosApiModelConfigProcessFlowsCustomerIdentificationConfig input)
        {
            if (input == null)
                return false;

            return 
                (
                    this.CustomerCardType == input.CustomerCardType ||
                    (this.CustomerCardType != null &&
                    this.CustomerCardType.Equals(input.CustomerCardType))
                ) && 
                (
                    this.CustomerIdentificationFunction == input.CustomerIdentificationFunction ||
                    (this.CustomerIdentificationFunction != null &&
                    this.CustomerIdentificationFunction.Equals(input.CustomerIdentificationFunction))
                ) && 
                (
                    this.CustomerRequired == input.CustomerRequired ||
                    (this.CustomerRequired != null &&
                    this.CustomerRequired.Equals(input.CustomerRequired))
                ) && 
                (
                    this.CustomerRequiredAudibleAlert == input.CustomerRequiredAudibleAlert ||
                    (this.CustomerRequiredAudibleAlert != null &&
                    this.CustomerRequiredAudibleAlert.Equals(input.CustomerRequiredAudibleAlert))
                ) && 
                (
                    this.CustomerRequiredMessage == input.CustomerRequiredMessage ||
                    (this.CustomerRequiredMessage != null &&
                    this.CustomerRequiredMessage.Equals(input.CustomerRequiredMessage))
                ) && 
                (
                    this.CustomerDataMissingMessage == input.CustomerDataMissingMessage ||
                    (this.CustomerDataMissingMessage != null &&
                    this.CustomerDataMissingMessage.Equals(input.CustomerDataMissingMessage))
                ) && 
                (
                    this.RetrieveCustomerId == input.RetrieveCustomerId ||
                    (this.RetrieveCustomerId != null &&
                    this.RetrieveCustomerId.Equals(input.RetrieveCustomerId))
                ) && 
                (
                    this.CustomerRegistrationConfigId == input.CustomerRegistrationConfigId ||
                    (this.CustomerRegistrationConfigId != null &&
                    this.CustomerRegistrationConfigId.Equals(input.CustomerRegistrationConfigId))
                ) && 
                (
                    this.CustomerSearchConfigId == input.CustomerSearchConfigId ||
                    (this.CustomerSearchConfigId != null &&
                    this.CustomerSearchConfigId.Equals(input.CustomerSearchConfigId))
                ) && 
                (
                    this.CustomerDataEntryConfigId == input.CustomerDataEntryConfigId ||
                    (this.CustomerDataEntryConfigId != null &&
                    this.CustomerDataEntryConfigId.Equals(input.CustomerDataEntryConfigId))
                ) && 
                (
                    this.FirstNameRequired == input.FirstNameRequired ||
                    (this.FirstNameRequired != null &&
                    this.FirstNameRequired.Equals(input.FirstNameRequired))
                ) && 
                (
                    this.LastNameRequired == input.LastNameRequired ||
                    (this.LastNameRequired != null &&
                    this.LastNameRequired.Equals(input.LastNameRequired))
                ) && 
                (
                    this.StreetRequired == input.StreetRequired ||
                    (this.StreetRequired != null &&
                    this.StreetRequired.Equals(input.StreetRequired))
                ) && 
                (
                    this.CityRequired == input.CityRequired ||
                    (this.CityRequired != null &&
                    this.CityRequired.Equals(input.CityRequired))
                ) && 
                (
                    this.PostalCodeRequired == input.PostalCodeRequired ||
                    (this.PostalCodeRequired != null &&
                    this.PostalCodeRequired.Equals(input.PostalCodeRequired))
                ) && 
                (
                    this.FederalStateRequired == input.FederalStateRequired ||
                    (this.FederalStateRequired != null &&
                    this.FederalStateRequired.Equals(input.FederalStateRequired))
                ) && 
                (
                    this.CountryRequired == input.CountryRequired ||
                    (this.CountryRequired != null &&
                    this.CountryRequired.Equals(input.CountryRequired))
                ) && 
                (
                    this.TaxIdRequired == input.TaxIdRequired ||
                    (this.TaxIdRequired != null &&
                    this.TaxIdRequired.Equals(input.TaxIdRequired))
                ) && 
                (
                    this.XXCustom08 == input.XXCustom08 ||
                    (this.XXCustom08 != null &&
                    this.XXCustom08.Equals(input.XXCustom08))
                ) && 
                (
                    this.XXCustom10 == input.XXCustom10 ||
                    (this.XXCustom10 != null &&
                    this.XXCustom10.Equals(input.XXCustom10))
                ) && 
                (
                    this.XXCustom09 == input.XXCustom09 ||
                    (this.XXCustom09 != null &&
                    this.XXCustom09.Equals(input.XXCustom09))
                ) && 
                (
                    this.XXCustom07 == input.XXCustom07 ||
                    (this.XXCustom07 != null &&
                    this.XXCustom07.Equals(input.XXCustom07))
                ) && 
                (
                    this.XXCustom05 == input.XXCustom05 ||
                    (this.XXCustom05 != null &&
                    this.XXCustom05.Equals(input.XXCustom05))
                ) && 
                (
                    this.XXCustom06 == input.XXCustom06 ||
                    (this.XXCustom06 != null &&
                    this.XXCustom06.Equals(input.XXCustom06))
                ) && 
                (
                    this.XXCustom11 == input.XXCustom11 ||
                    (this.XXCustom11 != null &&
                    this.XXCustom11.Equals(input.XXCustom11))
                ) && 
                (
                    this.XXCustom12 == input.XXCustom12 ||
                    (this.XXCustom12 != null &&
                    this.XXCustom12.Equals(input.XXCustom12))
                ) && 
                (
                    this.XXCustom13 == input.XXCustom13 ||
                    (this.XXCustom13 != null &&
                    this.XXCustom13.Equals(input.XXCustom13))
                ) && 
                (
                    this.XXCustom14 == input.XXCustom14 ||
                    (this.XXCustom14 != null &&
                    this.XXCustom14.Equals(input.XXCustom14))
                ) && 
                (
                    this.XXCustom15 == input.XXCustom15 ||
                    (this.XXCustom15 != null &&
                    this.XXCustom15.Equals(input.XXCustom15))
                ) && 
                (
                    this.XXCustom03 == input.XXCustom03 ||
                    (this.XXCustom03 != null &&
                    this.XXCustom03.Equals(input.XXCustom03))
                ) && 
                (
                    this.XXCustom02 == input.XXCustom02 ||
                    (this.XXCustom02 != null &&
                    this.XXCustom02.Equals(input.XXCustom02))
                ) && 
                (
                    this.XXCustom04 == input.XXCustom04 ||
                    (this.XXCustom04 != null &&
                    this.XXCustom04.Equals(input.XXCustom04))
                ) && 
                (
                    this.XXCustom01 == input.XXCustom01 ||
                    (this.XXCustom01 != null &&
                    this.XXCustom01.Equals(input.XXCustom01))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.CustomerCardType != null)
                    hashCode = hashCode * 59 + this.CustomerCardType.GetHashCode();
                if (this.CustomerIdentificationFunction != null)
                    hashCode = hashCode * 59 + this.CustomerIdentificationFunction.GetHashCode();
                if (this.CustomerRequired != null)
                    hashCode = hashCode * 59 + this.CustomerRequired.GetHashCode();
                if (this.CustomerRequiredAudibleAlert != null)
                    hashCode = hashCode * 59 + this.CustomerRequiredAudibleAlert.GetHashCode();
                if (this.CustomerRequiredMessage != null)
                    hashCode = hashCode * 59 + this.CustomerRequiredMessage.GetHashCode();
                if (this.CustomerDataMissingMessage != null)
                    hashCode = hashCode * 59 + this.CustomerDataMissingMessage.GetHashCode();
                if (this.RetrieveCustomerId != null)
                    hashCode = hashCode * 59 + this.RetrieveCustomerId.GetHashCode();
                if (this.CustomerRegistrationConfigId != null)
                    hashCode = hashCode * 59 + this.CustomerRegistrationConfigId.GetHashCode();
                if (this.CustomerSearchConfigId != null)
                    hashCode = hashCode * 59 + this.CustomerSearchConfigId.GetHashCode();
                if (this.CustomerDataEntryConfigId != null)
                    hashCode = hashCode * 59 + this.CustomerDataEntryConfigId.GetHashCode();
                if (this.FirstNameRequired != null)
                    hashCode = hashCode * 59 + this.FirstNameRequired.GetHashCode();
                if (this.LastNameRequired != null)
                    hashCode = hashCode * 59 + this.LastNameRequired.GetHashCode();
                if (this.StreetRequired != null)
                    hashCode = hashCode * 59 + this.StreetRequired.GetHashCode();
                if (this.CityRequired != null)
                    hashCode = hashCode * 59 + this.CityRequired.GetHashCode();
                if (this.PostalCodeRequired != null)
                    hashCode = hashCode * 59 + this.PostalCodeRequired.GetHashCode();
                if (this.FederalStateRequired != null)
                    hashCode = hashCode * 59 + this.FederalStateRequired.GetHashCode();
                if (this.CountryRequired != null)
                    hashCode = hashCode * 59 + this.CountryRequired.GetHashCode();
                if (this.TaxIdRequired != null)
                    hashCode = hashCode * 59 + this.TaxIdRequired.GetHashCode();
                if (this.XXCustom08 != null)
                    hashCode = hashCode * 59 + this.XXCustom08.GetHashCode();
                if (this.XXCustom10 != null)
                    hashCode = hashCode * 59 + this.XXCustom10.GetHashCode();
                if (this.XXCustom09 != null)
                    hashCode = hashCode * 59 + this.XXCustom09.GetHashCode();
                if (this.XXCustom07 != null)
                    hashCode = hashCode * 59 + this.XXCustom07.GetHashCode();
                if (this.XXCustom05 != null)
                    hashCode = hashCode * 59 + this.XXCustom05.GetHashCode();
                if (this.XXCustom06 != null)
                    hashCode = hashCode * 59 + this.XXCustom06.GetHashCode();
                if (this.XXCustom11 != null)
                    hashCode = hashCode * 59 + this.XXCustom11.GetHashCode();
                if (this.XXCustom12 != null)
                    hashCode = hashCode * 59 + this.XXCustom12.GetHashCode();
                if (this.XXCustom13 != null)
                    hashCode = hashCode * 59 + this.XXCustom13.GetHashCode();
                if (this.XXCustom14 != null)
                    hashCode = hashCode * 59 + this.XXCustom14.GetHashCode();
                if (this.XXCustom15 != null)
                    hashCode = hashCode * 59 + this.XXCustom15.GetHashCode();
                if (this.XXCustom03 != null)
                    hashCode = hashCode * 59 + this.XXCustom03.GetHashCode();
                if (this.XXCustom02 != null)
                    hashCode = hashCode * 59 + this.XXCustom02.GetHashCode();
                if (this.XXCustom04 != null)
                    hashCode = hashCode * 59 + this.XXCustom04.GetHashCode();
                if (this.XXCustom01 != null)
                    hashCode = hashCode * 59 + this.XXCustom01.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
