/* 
 * 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>
    /// EwicPaymentOperationConfig &lt;p&gt;This configuration entity defines eWIC payment related operations.&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig :  IEquatable<ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;This parameter defines the input amount constraint.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: InputAmountConstraint [TENDER, REQUIRED, OPTIONAL, PROHIBITED, CONFIRM]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Required as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Optional as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Prohibited as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Confirm as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the input amount constraint.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: InputAmountConstraint [TENDER, REQUIRED, OPTIONAL, PROHIBITED, CONFIRM]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Required as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Optional as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Prohibited as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Confirm as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InputAmountConstraintEnum
        {
            
            /// <summary>
            /// Enum Tender for value: Tender
            /// </summary>
            [EnumMember(Value = "Tender")]
            Tender = 1,
            
            /// <summary>
            /// Enum Required for value: Required
            /// </summary>
            [EnumMember(Value = "Required")]
            Required = 2,
            
            /// <summary>
            /// Enum Optional for value: Optional
            /// </summary>
            [EnumMember(Value = "Optional")]
            Optional = 3,
            
            /// <summary>
            /// Enum Prohibited for value: Prohibited
            /// </summary>
            [EnumMember(Value = "Prohibited")]
            Prohibited = 4,
            
            /// <summary>
            /// Enum Confirm for value: Confirm
            /// </summary>
            [EnumMember(Value = "Confirm")]
            Confirm = 5
        }

        /// <summary>
        /// &lt;p&gt;This parameter defines the input amount constraint.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: InputAmountConstraint [TENDER, REQUIRED, OPTIONAL, PROHIBITED, CONFIRM]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Required as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Optional as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Prohibited as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Confirm as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the input amount constraint.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: InputAmountConstraint [TENDER, REQUIRED, OPTIONAL, PROHIBITED, CONFIRM]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Required as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Optional as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Prohibited as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Confirm as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="inputAmountConstraint", EmitDefaultValue=false)]
        public InputAmountConstraintEnum InputAmountConstraint { get; set; }
        /// <summary>
        /// &lt;p&gt;This parameter defines the allowed amount type code.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: AllowedAmountTypeCode [TENDER, EXACTLY, EXACTLYANDLESS, EXACTLYANDMORE, ALL]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exactly as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndLess as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndMore as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the allowed amount type code.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: AllowedAmountTypeCode [TENDER, EXACTLY, EXACTLYANDLESS, EXACTLYANDMORE, ALL]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exactly as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndLess as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndMore as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AllowedAmountTypeCodeEnum
        {
            
            /// <summary>
            /// Enum Tender for value: Tender
            /// </summary>
            [EnumMember(Value = "Tender")]
            Tender = 1,
            
            /// <summary>
            /// Enum Exactly for value: Exactly
            /// </summary>
            [EnumMember(Value = "Exactly")]
            Exactly = 2,
            
            /// <summary>
            /// Enum ExactlyAndLess for value: ExactlyAndLess
            /// </summary>
            [EnumMember(Value = "ExactlyAndLess")]
            ExactlyAndLess = 3,
            
            /// <summary>
            /// Enum ExactlyAndMore for value: ExactlyAndMore
            /// </summary>
            [EnumMember(Value = "ExactlyAndMore")]
            ExactlyAndMore = 4,
            
            /// <summary>
            /// Enum All for value: All
            /// </summary>
            [EnumMember(Value = "All")]
            All = 5
        }

        /// <summary>
        /// &lt;p&gt;This parameter defines the allowed amount type code.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: AllowedAmountTypeCode [TENDER, EXACTLY, EXACTLYANDLESS, EXACTLYANDMORE, ALL]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exactly as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndLess as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndMore as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the allowed amount type code.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: AllowedAmountTypeCode [TENDER, EXACTLY, EXACTLYANDLESS, EXACTLYANDMORE, ALL]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exactly as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndLess as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndMore as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="allowedAmountTypeCode", EmitDefaultValue=false)]
        public AllowedAmountTypeCodeEnum AllowedAmountTypeCode { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig" /> class.
        /// </summary>
        /// <param name="amount">&lt;p&gt;This parameter defines the payment amount which is used by the function (in the case of fixed amounts which are assigned to keys).&lt;/p&gt;.</param>
        /// <param name="askForAmount">&lt;p&gt;This parameter specifies whether the operator should be asked to enter the amount (in an additional view).&lt;br /&gt; It is only taken into account if the amount input for the tender is &#39;optional&#39; or &#39;required&#39;.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 01, 02&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Required 01&#39; or&lt;/li&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Optional 02&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="tenderClassCode">&lt;p&gt;This parameter defines the assignment to a particular tender in the master data.&lt;/p&gt; (required).</param>
        /// <param name="currencyCode">&lt;p&gt;This parameter defines the code of the currency which is used. It overrides the currency selection.&lt;/p&gt;.</param>
        /// <param name="confirmPartialPayment">&lt;p&gt;This parameter specifies whether the payment amount must be confirmed for partial payments. It is only taken into account if the amount input for the tender must be confirmed.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: 04&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Confirm 04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="inputAmountConstraint">&lt;p&gt;This parameter defines the input amount constraint.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: InputAmountConstraint [TENDER, REQUIRED, OPTIONAL, PROHIBITED, CONFIRM]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Required as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Optional as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Prohibited as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Confirm as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="allowedAmountTypeCode">&lt;p&gt;This parameter defines the allowed amount type code.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: AllowedAmountTypeCode [TENDER, EXACTLY, EXACTLYANDLESS, EXACTLYANDMORE, ALL]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Tender as &#39;&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exactly as &#39;01&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndLess as &#39;02&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;ExactlyAndMore as &#39;03&#39;,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;All as &#39;04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="ewicStore">&lt;p&gt;This parameter specifies whether the eWIC functionality is active for the store.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt; (required).</param>
        /// <param name="ewicType">&lt;p&gt;This parameter specifies whether the store takes &#39;WIC Online EBT Cards&#39;, &#39;WIC Smart Cards&#39;, or both.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 1, 2, 3&lt;br /&gt;&lt;/pre&gt; (required).</param>
        /// <param name="ewicPhone">&lt;p&gt;This parameter specifies the telephone number to call for offline authorizations to State Agency.&lt;/p&gt; (required).</param>
        /// <param name="ewicStraddled">&lt;p&gt;This parameter specifies the number of items that may be split among a regular subcategory and a broad band subcategory in a transaction.&lt;/p&gt; (required).</param>
        /// <param name="ewicSplit">&lt;p&gt;This parameter specifies the number of items that may be split tendered between an eWIC tender and a customer provided tender in a transaction.&lt;/p&gt; (required).</param>
        /// <param name="ewicMaxOnline">&lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Online EBT Card is used.&lt;/p&gt; (required).</param>
        /// <param name="ewicMaxSmart">&lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Smart Card is used.&lt;/p&gt; (required).</param>
        /// <param name="ewicMerchantID">&lt;p&gt;This parameter specifies the eWIC Merchant Identification.&lt;/p&gt; (required).</param>
        /// <param name="straddleSubcategory">&lt;p&gt;This parameter specifies the straddle subcategory identification.&lt;/p&gt; (required).</param>
        /// <param name="cvbUomCode">&lt;p&gt;This parameter specifies the cash sign for CVB. The Cash Value Benefit (CVB) provides a cash amount of benefits instead of an UOM Code.&lt;/p&gt; (required).</param>
        /// <param name="confirmCancelEwicPayment">&lt;p&gt;This parameter specifies whether the confirm dialog to confirm the cancellation of the eWIC payment should be displayed or not.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt; (required).</param>
        /// <param name="limitExceededConfirmDialogConfig">&lt;p&gt;This config defines the dialog for eWIC items limit exceeded action.&lt;/p&gt; (required).</param>
        /// <param name="previousTenderAllowed">&lt;p&gt;This parameter specifies the list of allowed tenders before eWIC payment. If there is not restriction for previous tender the value should be null.&lt;/p&gt; (required).</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 ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig(double? amount = default(double?), bool? askForAmount = default(bool?), string tenderClassCode = default(string), string currencyCode = default(string), bool? confirmPartialPayment = default(bool?), InputAmountConstraintEnum inputAmountConstraint = default(InputAmountConstraintEnum), AllowedAmountTypeCodeEnum allowedAmountTypeCode = default(AllowedAmountTypeCodeEnum), bool? ewicStore = default(bool?), int? ewicType = default(int?), string ewicPhone = default(string), int? ewicStraddled = default(int?), int? ewicSplit = default(int?), int? ewicMaxOnline = default(int?), int? ewicMaxSmart = default(int?), string ewicMerchantID = default(string), string straddleSubcategory = default(string), string cvbUomCode = default(string), bool? confirmCancelEwicPayment = default(bool?), ComGkSoftwarePosApiModelConfigProcessUiMessageDialogConfig limitExceededConfirmDialogConfig = default(ComGkSoftwarePosApiModelConfigProcessUiMessageDialogConfig), List<string> previousTenderAllowed = default(List<string>), 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))
        {
            // to ensure "askForAmount" is required (not null)
            if (askForAmount == null)
            {
                throw new InvalidDataException("askForAmount is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.AskForAmount = askForAmount;
            }
            // to ensure "tenderClassCode" is required (not null)
            if (tenderClassCode == null)
            {
                throw new InvalidDataException("tenderClassCode is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.TenderClassCode = tenderClassCode;
            }
            // to ensure "confirmPartialPayment" is required (not null)
            if (confirmPartialPayment == null)
            {
                throw new InvalidDataException("confirmPartialPayment is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.ConfirmPartialPayment = confirmPartialPayment;
            }
            // to ensure "inputAmountConstraint" is required (not null)
            if (inputAmountConstraint == null)
            {
                throw new InvalidDataException("inputAmountConstraint is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.InputAmountConstraint = inputAmountConstraint;
            }
            // to ensure "allowedAmountTypeCode" is required (not null)
            if (allowedAmountTypeCode == null)
            {
                throw new InvalidDataException("allowedAmountTypeCode is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.AllowedAmountTypeCode = allowedAmountTypeCode;
            }
            // to ensure "ewicStore" is required (not null)
            if (ewicStore == null)
            {
                throw new InvalidDataException("ewicStore is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicStore = ewicStore;
            }
            // to ensure "ewicType" is required (not null)
            if (ewicType == null)
            {
                throw new InvalidDataException("ewicType is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicType = ewicType;
            }
            // to ensure "ewicPhone" is required (not null)
            if (ewicPhone == null)
            {
                throw new InvalidDataException("ewicPhone is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicPhone = ewicPhone;
            }
            // to ensure "ewicStraddled" is required (not null)
            if (ewicStraddled == null)
            {
                throw new InvalidDataException("ewicStraddled is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicStraddled = ewicStraddled;
            }
            // to ensure "ewicSplit" is required (not null)
            if (ewicSplit == null)
            {
                throw new InvalidDataException("ewicSplit is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicSplit = ewicSplit;
            }
            // to ensure "ewicMaxOnline" is required (not null)
            if (ewicMaxOnline == null)
            {
                throw new InvalidDataException("ewicMaxOnline is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicMaxOnline = ewicMaxOnline;
            }
            // to ensure "ewicMaxSmart" is required (not null)
            if (ewicMaxSmart == null)
            {
                throw new InvalidDataException("ewicMaxSmart is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicMaxSmart = ewicMaxSmart;
            }
            // to ensure "ewicMerchantID" is required (not null)
            if (ewicMerchantID == null)
            {
                throw new InvalidDataException("ewicMerchantID is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.EwicMerchantID = ewicMerchantID;
            }
            // to ensure "straddleSubcategory" is required (not null)
            if (straddleSubcategory == null)
            {
                throw new InvalidDataException("straddleSubcategory is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.StraddleSubcategory = straddleSubcategory;
            }
            // to ensure "cvbUomCode" is required (not null)
            if (cvbUomCode == null)
            {
                throw new InvalidDataException("cvbUomCode is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.CvbUomCode = cvbUomCode;
            }
            // to ensure "confirmCancelEwicPayment" is required (not null)
            if (confirmCancelEwicPayment == null)
            {
                throw new InvalidDataException("confirmCancelEwicPayment is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.ConfirmCancelEwicPayment = confirmCancelEwicPayment;
            }
            // to ensure "limitExceededConfirmDialogConfig" is required (not null)
            if (limitExceededConfirmDialogConfig == null)
            {
                throw new InvalidDataException("limitExceededConfirmDialogConfig is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.LimitExceededConfirmDialogConfig = limitExceededConfirmDialogConfig;
            }
            // to ensure "previousTenderAllowed" is required (not null)
            if (previousTenderAllowed == null)
            {
                throw new InvalidDataException("previousTenderAllowed is a required property for ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig and cannot be null");
            }
            else
            {
                this.PreviousTenderAllowed = previousTenderAllowed;
            }
            this.Amount = amount;
            this.CurrencyCode = currencyCode;
            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 payment amount which is used by the function (in the case of fixed amounts which are assigned to keys).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the payment amount which is used by the function (in the case of fixed amounts which are assigned to keys).&lt;/p&gt;</value>
        [DataMember(Name="amount", EmitDefaultValue=false)]
        public double? Amount { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies whether the operator should be asked to enter the amount (in an additional view).&lt;br /&gt; It is only taken into account if the amount input for the tender is &#39;optional&#39; or &#39;required&#39;.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 01, 02&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Required 01&#39; or&lt;/li&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Optional 02&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies whether the operator should be asked to enter the amount (in an additional view).&lt;br /&gt; It is only taken into account if the amount input for the tender is &#39;optional&#39; or &#39;required&#39;.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 01, 02&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Required 01&#39; or&lt;/li&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Optional 02&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="askForAmount", EmitDefaultValue=false)]
        public bool? AskForAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter defines the assignment to a particular tender in the master data.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the assignment to a particular tender in the master data.&lt;/p&gt;</value>
        [DataMember(Name="tenderClassCode", EmitDefaultValue=false)]
        public string TenderClassCode { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter defines the code of the currency which is used. It overrides the currency selection.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter defines the code of the currency which is used. It overrides the currency selection.&lt;/p&gt;</value>
        [DataMember(Name="currencyCode", EmitDefaultValue=false)]
        public string CurrencyCode { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies whether the payment amount must be confirmed for partial payments. It is only taken into account if the amount input for the tender must be confirmed.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: 04&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Confirm 04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies whether the payment amount must be confirmed for partial payments. It is only taken into account if the amount input for the tender must be confirmed.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;value: 04&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;InputAmountConstraint &#x3D; &#39;Confirm 04&#39;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="confirmPartialPayment", EmitDefaultValue=false)]
        public bool? ConfirmPartialPayment { get; set; }



        /// <summary>
        /// &lt;p&gt;This parameter specifies whether the eWIC functionality is active for the store.&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 specifies whether the eWIC functionality is active for the store.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="ewicStore", EmitDefaultValue=false)]
        public bool? EwicStore { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies whether the store takes &#39;WIC Online EBT Cards&#39;, &#39;WIC Smart Cards&#39;, or both.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 1, 2, 3&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies whether the store takes &#39;WIC Online EBT Cards&#39;, &#39;WIC Smart Cards&#39;, or both.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: 1, 2, 3&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="ewicType", EmitDefaultValue=false)]
        public int? EwicType { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the telephone number to call for offline authorizations to State Agency.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the telephone number to call for offline authorizations to State Agency.&lt;/p&gt;</value>
        [DataMember(Name="ewicPhone", EmitDefaultValue=false)]
        public string EwicPhone { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the number of items that may be split among a regular subcategory and a broad band subcategory in a transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the number of items that may be split among a regular subcategory and a broad band subcategory in a transaction.&lt;/p&gt;</value>
        [DataMember(Name="ewicStraddled", EmitDefaultValue=false)]
        public int? EwicStraddled { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the number of items that may be split tendered between an eWIC tender and a customer provided tender in a transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the number of items that may be split tendered between an eWIC tender and a customer provided tender in a transaction.&lt;/p&gt;</value>
        [DataMember(Name="ewicSplit", EmitDefaultValue=false)]
        public int? EwicSplit { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Online EBT Card is used.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Online EBT Card is used.&lt;/p&gt;</value>
        [DataMember(Name="ewicMaxOnline", EmitDefaultValue=false)]
        public int? EwicMaxOnline { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Smart Card is used.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the maximum number of items allowed to be paid for with eWIC tender in a transaction when WIC Smart Card is used.&lt;/p&gt;</value>
        [DataMember(Name="ewicMaxSmart", EmitDefaultValue=false)]
        public int? EwicMaxSmart { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the eWIC Merchant Identification.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the eWIC Merchant Identification.&lt;/p&gt;</value>
        [DataMember(Name="ewicMerchantID", EmitDefaultValue=false)]
        public string EwicMerchantID { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the straddle subcategory identification.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the straddle subcategory identification.&lt;/p&gt;</value>
        [DataMember(Name="straddleSubcategory", EmitDefaultValue=false)]
        public string StraddleSubcategory { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the cash sign for CVB. The Cash Value Benefit (CVB) provides a cash amount of benefits instead of an UOM Code.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the cash sign for CVB. The Cash Value Benefit (CVB) provides a cash amount of benefits instead of an UOM Code.&lt;/p&gt;</value>
        [DataMember(Name="cvbUomCode", EmitDefaultValue=false)]
        public string CvbUomCode { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies whether the confirm dialog to confirm the cancellation of the eWIC payment should be displayed or not.&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 specifies whether the confirm dialog to confirm the cancellation of the eWIC payment should be displayed or not.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;values: true, false&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="confirmCancelEwicPayment", EmitDefaultValue=false)]
        public bool? ConfirmCancelEwicPayment { get; set; }

        /// <summary>
        /// &lt;p&gt;This config defines the dialog for eWIC items limit exceeded action.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This config defines the dialog for eWIC items limit exceeded action.&lt;/p&gt;</value>
        [DataMember(Name="limitExceededConfirmDialogConfig", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigProcessUiMessageDialogConfig LimitExceededConfirmDialogConfig { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies the list of allowed tenders before eWIC payment. If there is not restriction for previous tender the value should be null.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies the list of allowed tenders before eWIC payment. If there is not restriction for previous tender the value should be null.&lt;/p&gt;</value>
        [DataMember(Name="previousTenderAllowed", EmitDefaultValue=false)]
        public List<string> PreviousTenderAllowed { 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 ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig {\n");
            sb.Append("  Amount: ").Append(Amount).Append("\n");
            sb.Append("  AskForAmount: ").Append(AskForAmount).Append("\n");
            sb.Append("  TenderClassCode: ").Append(TenderClassCode).Append("\n");
            sb.Append("  CurrencyCode: ").Append(CurrencyCode).Append("\n");
            sb.Append("  ConfirmPartialPayment: ").Append(ConfirmPartialPayment).Append("\n");
            sb.Append("  InputAmountConstraint: ").Append(InputAmountConstraint).Append("\n");
            sb.Append("  AllowedAmountTypeCode: ").Append(AllowedAmountTypeCode).Append("\n");
            sb.Append("  EwicStore: ").Append(EwicStore).Append("\n");
            sb.Append("  EwicType: ").Append(EwicType).Append("\n");
            sb.Append("  EwicPhone: ").Append(EwicPhone).Append("\n");
            sb.Append("  EwicStraddled: ").Append(EwicStraddled).Append("\n");
            sb.Append("  EwicSplit: ").Append(EwicSplit).Append("\n");
            sb.Append("  EwicMaxOnline: ").Append(EwicMaxOnline).Append("\n");
            sb.Append("  EwicMaxSmart: ").Append(EwicMaxSmart).Append("\n");
            sb.Append("  EwicMerchantID: ").Append(EwicMerchantID).Append("\n");
            sb.Append("  StraddleSubcategory: ").Append(StraddleSubcategory).Append("\n");
            sb.Append("  CvbUomCode: ").Append(CvbUomCode).Append("\n");
            sb.Append("  ConfirmCancelEwicPayment: ").Append(ConfirmCancelEwicPayment).Append("\n");
            sb.Append("  LimitExceededConfirmDialogConfig: ").Append(LimitExceededConfirmDialogConfig).Append("\n");
            sb.Append("  PreviousTenderAllowed: ").Append(PreviousTenderAllowed).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 ComGkSoftwarePosApiModelConfigProcessActionEwicPaymentOperationConfig);
        }

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

            return 
                (
                    this.Amount == input.Amount ||
                    (this.Amount != null &&
                    this.Amount.Equals(input.Amount))
                ) && 
                (
                    this.AskForAmount == input.AskForAmount ||
                    (this.AskForAmount != null &&
                    this.AskForAmount.Equals(input.AskForAmount))
                ) && 
                (
                    this.TenderClassCode == input.TenderClassCode ||
                    (this.TenderClassCode != null &&
                    this.TenderClassCode.Equals(input.TenderClassCode))
                ) && 
                (
                    this.CurrencyCode == input.CurrencyCode ||
                    (this.CurrencyCode != null &&
                    this.CurrencyCode.Equals(input.CurrencyCode))
                ) && 
                (
                    this.ConfirmPartialPayment == input.ConfirmPartialPayment ||
                    (this.ConfirmPartialPayment != null &&
                    this.ConfirmPartialPayment.Equals(input.ConfirmPartialPayment))
                ) && 
                (
                    this.InputAmountConstraint == input.InputAmountConstraint ||
                    (this.InputAmountConstraint != null &&
                    this.InputAmountConstraint.Equals(input.InputAmountConstraint))
                ) && 
                (
                    this.AllowedAmountTypeCode == input.AllowedAmountTypeCode ||
                    (this.AllowedAmountTypeCode != null &&
                    this.AllowedAmountTypeCode.Equals(input.AllowedAmountTypeCode))
                ) && 
                (
                    this.EwicStore == input.EwicStore ||
                    (this.EwicStore != null &&
                    this.EwicStore.Equals(input.EwicStore))
                ) && 
                (
                    this.EwicType == input.EwicType ||
                    (this.EwicType != null &&
                    this.EwicType.Equals(input.EwicType))
                ) && 
                (
                    this.EwicPhone == input.EwicPhone ||
                    (this.EwicPhone != null &&
                    this.EwicPhone.Equals(input.EwicPhone))
                ) && 
                (
                    this.EwicStraddled == input.EwicStraddled ||
                    (this.EwicStraddled != null &&
                    this.EwicStraddled.Equals(input.EwicStraddled))
                ) && 
                (
                    this.EwicSplit == input.EwicSplit ||
                    (this.EwicSplit != null &&
                    this.EwicSplit.Equals(input.EwicSplit))
                ) && 
                (
                    this.EwicMaxOnline == input.EwicMaxOnline ||
                    (this.EwicMaxOnline != null &&
                    this.EwicMaxOnline.Equals(input.EwicMaxOnline))
                ) && 
                (
                    this.EwicMaxSmart == input.EwicMaxSmart ||
                    (this.EwicMaxSmart != null &&
                    this.EwicMaxSmart.Equals(input.EwicMaxSmart))
                ) && 
                (
                    this.EwicMerchantID == input.EwicMerchantID ||
                    (this.EwicMerchantID != null &&
                    this.EwicMerchantID.Equals(input.EwicMerchantID))
                ) && 
                (
                    this.StraddleSubcategory == input.StraddleSubcategory ||
                    (this.StraddleSubcategory != null &&
                    this.StraddleSubcategory.Equals(input.StraddleSubcategory))
                ) && 
                (
                    this.CvbUomCode == input.CvbUomCode ||
                    (this.CvbUomCode != null &&
                    this.CvbUomCode.Equals(input.CvbUomCode))
                ) && 
                (
                    this.ConfirmCancelEwicPayment == input.ConfirmCancelEwicPayment ||
                    (this.ConfirmCancelEwicPayment != null &&
                    this.ConfirmCancelEwicPayment.Equals(input.ConfirmCancelEwicPayment))
                ) && 
                (
                    this.LimitExceededConfirmDialogConfig == input.LimitExceededConfirmDialogConfig ||
                    (this.LimitExceededConfirmDialogConfig != null &&
                    this.LimitExceededConfirmDialogConfig.Equals(input.LimitExceededConfirmDialogConfig))
                ) && 
                (
                    this.PreviousTenderAllowed == input.PreviousTenderAllowed ||
                    this.PreviousTenderAllowed != null &&
                    this.PreviousTenderAllowed.SequenceEqual(input.PreviousTenderAllowed)
                ) && 
                (
                    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.Amount != null)
                    hashCode = hashCode * 59 + this.Amount.GetHashCode();
                if (this.AskForAmount != null)
                    hashCode = hashCode * 59 + this.AskForAmount.GetHashCode();
                if (this.TenderClassCode != null)
                    hashCode = hashCode * 59 + this.TenderClassCode.GetHashCode();
                if (this.CurrencyCode != null)
                    hashCode = hashCode * 59 + this.CurrencyCode.GetHashCode();
                if (this.ConfirmPartialPayment != null)
                    hashCode = hashCode * 59 + this.ConfirmPartialPayment.GetHashCode();
                if (this.InputAmountConstraint != null)
                    hashCode = hashCode * 59 + this.InputAmountConstraint.GetHashCode();
                if (this.AllowedAmountTypeCode != null)
                    hashCode = hashCode * 59 + this.AllowedAmountTypeCode.GetHashCode();
                if (this.EwicStore != null)
                    hashCode = hashCode * 59 + this.EwicStore.GetHashCode();
                if (this.EwicType != null)
                    hashCode = hashCode * 59 + this.EwicType.GetHashCode();
                if (this.EwicPhone != null)
                    hashCode = hashCode * 59 + this.EwicPhone.GetHashCode();
                if (this.EwicStraddled != null)
                    hashCode = hashCode * 59 + this.EwicStraddled.GetHashCode();
                if (this.EwicSplit != null)
                    hashCode = hashCode * 59 + this.EwicSplit.GetHashCode();
                if (this.EwicMaxOnline != null)
                    hashCode = hashCode * 59 + this.EwicMaxOnline.GetHashCode();
                if (this.EwicMaxSmart != null)
                    hashCode = hashCode * 59 + this.EwicMaxSmart.GetHashCode();
                if (this.EwicMerchantID != null)
                    hashCode = hashCode * 59 + this.EwicMerchantID.GetHashCode();
                if (this.StraddleSubcategory != null)
                    hashCode = hashCode * 59 + this.StraddleSubcategory.GetHashCode();
                if (this.CvbUomCode != null)
                    hashCode = hashCode * 59 + this.CvbUomCode.GetHashCode();
                if (this.ConfirmCancelEwicPayment != null)
                    hashCode = hashCode * 59 + this.ConfirmCancelEwicPayment.GetHashCode();
                if (this.LimitExceededConfirmDialogConfig != null)
                    hashCode = hashCode * 59 + this.LimitExceededConfirmDialogConfig.GetHashCode();
                if (this.PreviousTenderAllowed != null)
                    hashCode = hashCode * 59 + this.PreviousTenderAllowed.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;
        }
    }

}
