/* 
 * 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>
    /// RetailTransactionPromotionRecommendationMissingTrigger &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="eligibilityTypeCode">A code that indicates the type of the price derivation rule eligibility. (required).</param>
        /// <param name="triggerID">The trigger identifier (item id, merchandise hierarchy group id, merchandise set id, coupon number, etc.)..</param>
        /// <param name="triggerIDQualifier">Further information regarding to the trigger (unit of measure code, merchandise hierarchy group id qualifier)..</param>
        /// <param name="thresholdTypeCode">A code for the type of threshold which applies to the eligibility..</param>
        /// <param name="thresholdQuantity">The quantity of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!.</param>
        /// <param name="thresholdAmount">A monetary amount of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="intervalQuantity">An interval quantity for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!.</param>
        /// <param name="intervalAmount">An interval monetary armount for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="limitQuantity">The maximum number of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!.</param>
        /// <param name="limitAmount">The maximum monetary amount of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="missingQuantity">The missing quantity to reach the threshold quantity. Only filled in case of quantity-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!.</param>
        /// <param name="missingAmount">The missing amount to reach the threshold amount. Only filled in case of amount-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="triggerIDQualifier2">Further information regarding to the trigger..</param>
        /// <param name="retailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList">The list of references to the line items partially fulfilling the eligibility of the promotion being recommended for the transaction.</param>
        /// <param name="xxcustom08">Customizable information.</param>
        /// <param name="xxcustom10">Customizable information.</param>
        /// <param name="xxcustom09">Customizable information.</param>
        /// <param name="xxcustom07">Customizable information.</param>
        /// <param name="xxcustom05">Customizable information.</param>
        /// <param name="xxcustom06">Customizable information.</param>
        /// <param name="xxcustom11">Customizable information.</param>
        /// <param name="xxcustom12">Customizable information.</param>
        /// <param name="xxcustom13">Customizable information.</param>
        /// <param name="xxcustom14">Customizable information.</param>
        /// <param name="xxcustom15">Customizable information.</param>
        /// <param name="xxcustom03">Customizable information.</param>
        /// <param name="xxcustom02">Customizable information.</param>
        /// <param name="xxcustom04">Customizable information.</param>
        /// <param name="xxcustom16">Customizable information.</param>
        /// <param name="xxcustom17">Customizable information.</param>
        /// <param name="xxcustom18">Customizable information.</param>
        /// <param name="xxcustom19">Customizable information.</param>
        /// <param name="xxcustom20">Customizable information.</param>
        /// <param name="xxcustom21">Customizable information.</param>
        /// <param name="xxcustom22">Customizable information.</param>
        /// <param name="xxcustom23">Customizable information.</param>
        /// <param name="xxcustom24">Customizable information.</param>
        /// <param name="xxcustom25">Customizable information.</param>
        /// <param name="xxcustom26">Customizable information.</param>
        /// <param name="xxcustom27">Customizable information.</param>
        /// <param name="xxcustom28">Customizable information.</param>
        /// <param name="xxcustom29">Customizable information.</param>
        /// <param name="xxcustom30">Customizable information.</param>
        /// <param name="xxcustom01">Customizable information.</param>
        public ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger(ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTriggerKey key = default(ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTriggerKey), string eligibilityTypeCode = default(string), string triggerID = default(string), string triggerIDQualifier = default(string), string thresholdTypeCode = default(string), double? thresholdQuantity = default(double?), double? thresholdAmount = default(double?), double? intervalQuantity = default(double?), double? intervalAmount = default(double?), double? limitQuantity = default(double?), double? limitAmount = default(double?), double? missingQuantity = default(double?), double? missingAmount = default(double?), string triggerIDQualifier2 = default(string), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReference> retailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReference>), 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 xxcustom16 = default(string), string xxcustom17 = default(string), string xxcustom18 = default(string), string xxcustom19 = default(string), string xxcustom20 = default(string), string xxcustom21 = default(string), string xxcustom22 = default(string), string xxcustom23 = default(string), string xxcustom24 = default(string), string xxcustom25 = default(string), string xxcustom26 = default(string), string xxcustom27 = default(string), string xxcustom28 = default(string), string xxcustom29 = default(string), string xxcustom30 = default(string), string xxcustom01 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "eligibilityTypeCode" is required (not null)
            if (eligibilityTypeCode == null)
            {
                throw new InvalidDataException("eligibilityTypeCode is a required property for ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger and cannot be null");
            }
            else
            {
                this.EligibilityTypeCode = eligibilityTypeCode;
            }
            this.TriggerID = triggerID;
            this.TriggerIDQualifier = triggerIDQualifier;
            this.ThresholdTypeCode = thresholdTypeCode;
            this.ThresholdQuantity = thresholdQuantity;
            this.ThresholdAmount = thresholdAmount;
            this.IntervalQuantity = intervalQuantity;
            this.IntervalAmount = intervalAmount;
            this.LimitQuantity = limitQuantity;
            this.LimitAmount = limitAmount;
            this.MissingQuantity = missingQuantity;
            this.MissingAmount = missingAmount;
            this.TriggerIDQualifier2 = triggerIDQualifier2;
            this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList = retailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList;
            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.Xxcustom16 = xxcustom16;
            this.Xxcustom17 = xxcustom17;
            this.Xxcustom18 = xxcustom18;
            this.Xxcustom19 = xxcustom19;
            this.Xxcustom20 = xxcustom20;
            this.Xxcustom21 = xxcustom21;
            this.Xxcustom22 = xxcustom22;
            this.Xxcustom23 = xxcustom23;
            this.Xxcustom24 = xxcustom24;
            this.Xxcustom25 = xxcustom25;
            this.Xxcustom26 = xxcustom26;
            this.Xxcustom27 = xxcustom27;
            this.Xxcustom28 = xxcustom28;
            this.Xxcustom29 = xxcustom29;
            this.Xxcustom30 = xxcustom30;
            this.Xxcustom01 = xxcustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;Getter for inner key class.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Getter for inner key class.&lt;/p&gt;</value>
        [DataMember(Name="key", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTriggerKey Key { get; set; }

        /// <summary>
        /// A code that indicates the type of the price derivation rule eligibility.
        /// </summary>
        /// <value>A code that indicates the type of the price derivation rule eligibility.</value>
        [DataMember(Name="eligibilityTypeCode", EmitDefaultValue=false)]
        public string EligibilityTypeCode { get; set; }

        /// <summary>
        /// The trigger identifier (item id, merchandise hierarchy group id, merchandise set id, coupon number, etc.).
        /// </summary>
        /// <value>The trigger identifier (item id, merchandise hierarchy group id, merchandise set id, coupon number, etc.).</value>
        [DataMember(Name="triggerID", EmitDefaultValue=false)]
        public string TriggerID { get; set; }

        /// <summary>
        /// Further information regarding to the trigger (unit of measure code, merchandise hierarchy group id qualifier).
        /// </summary>
        /// <value>Further information regarding to the trigger (unit of measure code, merchandise hierarchy group id qualifier).</value>
        [DataMember(Name="triggerIDQualifier", EmitDefaultValue=false)]
        public string TriggerIDQualifier { get; set; }

        /// <summary>
        /// A code for the type of threshold which applies to the eligibility.
        /// </summary>
        /// <value>A code for the type of threshold which applies to the eligibility.</value>
        [DataMember(Name="thresholdTypeCode", EmitDefaultValue=false)]
        public string ThresholdTypeCode { get; set; }

        /// <summary>
        /// The quantity of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The quantity of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!</value>
        [DataMember(Name="thresholdQuantity", EmitDefaultValue=false)]
        public double? ThresholdQuantity { get; set; }

        /// <summary>
        /// A monetary amount of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>A monetary amount of the trigger item required to be purchased to trigger the price derivation rule.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="thresholdAmount", EmitDefaultValue=false)]
        public double? ThresholdAmount { get; set; }

        /// <summary>
        /// An interval quantity for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!
        /// </summary>
        /// <value>An interval quantity for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!</value>
        [DataMember(Name="intervalQuantity", EmitDefaultValue=false)]
        public double? IntervalQuantity { get; set; }

        /// <summary>
        /// An interval monetary armount for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>An interval monetary armount for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="intervalAmount", EmitDefaultValue=false)]
        public double? IntervalAmount { get; set; }

        /// <summary>
        /// The maximum number of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The maximum number of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!</value>
        [DataMember(Name="limitQuantity", EmitDefaultValue=false)]
        public double? LimitQuantity { get; set; }

        /// <summary>
        /// The maximum monetary amount of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>The maximum monetary amount of the trigger item for which the price derivation rule is eligible.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="limitAmount", EmitDefaultValue=false)]
        public double? LimitAmount { get; set; }

        /// <summary>
        /// The missing quantity to reach the threshold quantity. Only filled in case of quantity-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The missing quantity to reach the threshold quantity. Only filled in case of quantity-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!</value>
        [DataMember(Name="missingQuantity", EmitDefaultValue=false)]
        public double? MissingQuantity { get; set; }

        /// <summary>
        /// The missing amount to reach the threshold amount. Only filled in case of amount-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>The missing amount to reach the threshold amount. Only filled in case of amount-related triggers.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="missingAmount", EmitDefaultValue=false)]
        public double? MissingAmount { get; set; }

        /// <summary>
        /// Further information regarding to the trigger.
        /// </summary>
        /// <value>Further information regarding to the trigger.</value>
        [DataMember(Name="triggerIDQualifier2", EmitDefaultValue=false)]
        public string TriggerIDQualifier2 { get; set; }

        /// <summary>
        /// The list of references to the line items partially fulfilling the eligibility of the promotion being recommended for the transaction
        /// </summary>
        /// <value>The list of references to the line items partially fulfilling the eligibility of the promotion being recommended for the transaction</value>
        [DataMember(Name="retailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReference> RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom08", EmitDefaultValue=false)]
        public string Xxcustom08 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom10", EmitDefaultValue=false)]
        public string Xxcustom10 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom09", EmitDefaultValue=false)]
        public string Xxcustom09 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom07", EmitDefaultValue=false)]
        public string Xxcustom07 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom05", EmitDefaultValue=false)]
        public string Xxcustom05 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom06", EmitDefaultValue=false)]
        public string Xxcustom06 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom11", EmitDefaultValue=false)]
        public string Xxcustom11 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom12", EmitDefaultValue=false)]
        public string Xxcustom12 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom13", EmitDefaultValue=false)]
        public string Xxcustom13 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom14", EmitDefaultValue=false)]
        public string Xxcustom14 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom15", EmitDefaultValue=false)]
        public string Xxcustom15 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom03", EmitDefaultValue=false)]
        public string Xxcustom03 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom02", EmitDefaultValue=false)]
        public string Xxcustom02 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom04", EmitDefaultValue=false)]
        public string Xxcustom04 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom16", EmitDefaultValue=false)]
        public string Xxcustom16 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom17", EmitDefaultValue=false)]
        public string Xxcustom17 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom18", EmitDefaultValue=false)]
        public string Xxcustom18 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom19", EmitDefaultValue=false)]
        public string Xxcustom19 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom20", EmitDefaultValue=false)]
        public string Xxcustom20 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom21", EmitDefaultValue=false)]
        public string Xxcustom21 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom22", EmitDefaultValue=false)]
        public string Xxcustom22 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom23", EmitDefaultValue=false)]
        public string Xxcustom23 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom24", EmitDefaultValue=false)]
        public string Xxcustom24 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom25", EmitDefaultValue=false)]
        public string Xxcustom25 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom26", EmitDefaultValue=false)]
        public string Xxcustom26 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom27", EmitDefaultValue=false)]
        public string Xxcustom27 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom28", EmitDefaultValue=false)]
        public string Xxcustom28 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom29", EmitDefaultValue=false)]
        public string Xxcustom29 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom30", EmitDefaultValue=false)]
        public string Xxcustom30 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</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 ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  EligibilityTypeCode: ").Append(EligibilityTypeCode).Append("\n");
            sb.Append("  TriggerID: ").Append(TriggerID).Append("\n");
            sb.Append("  TriggerIDQualifier: ").Append(TriggerIDQualifier).Append("\n");
            sb.Append("  ThresholdTypeCode: ").Append(ThresholdTypeCode).Append("\n");
            sb.Append("  ThresholdQuantity: ").Append(ThresholdQuantity).Append("\n");
            sb.Append("  ThresholdAmount: ").Append(ThresholdAmount).Append("\n");
            sb.Append("  IntervalQuantity: ").Append(IntervalQuantity).Append("\n");
            sb.Append("  IntervalAmount: ").Append(IntervalAmount).Append("\n");
            sb.Append("  LimitQuantity: ").Append(LimitQuantity).Append("\n");
            sb.Append("  LimitAmount: ").Append(LimitAmount).Append("\n");
            sb.Append("  MissingQuantity: ").Append(MissingQuantity).Append("\n");
            sb.Append("  MissingAmount: ").Append(MissingAmount).Append("\n");
            sb.Append("  TriggerIDQualifier2: ").Append(TriggerIDQualifier2).Append("\n");
            sb.Append("  RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList: ").Append(RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList).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("  Xxcustom16: ").Append(Xxcustom16).Append("\n");
            sb.Append("  Xxcustom17: ").Append(Xxcustom17).Append("\n");
            sb.Append("  Xxcustom18: ").Append(Xxcustom18).Append("\n");
            sb.Append("  Xxcustom19: ").Append(Xxcustom19).Append("\n");
            sb.Append("  Xxcustom20: ").Append(Xxcustom20).Append("\n");
            sb.Append("  Xxcustom21: ").Append(Xxcustom21).Append("\n");
            sb.Append("  Xxcustom22: ").Append(Xxcustom22).Append("\n");
            sb.Append("  Xxcustom23: ").Append(Xxcustom23).Append("\n");
            sb.Append("  Xxcustom24: ").Append(Xxcustom24).Append("\n");
            sb.Append("  Xxcustom25: ").Append(Xxcustom25).Append("\n");
            sb.Append("  Xxcustom26: ").Append(Xxcustom26).Append("\n");
            sb.Append("  Xxcustom27: ").Append(Xxcustom27).Append("\n");
            sb.Append("  Xxcustom28: ").Append(Xxcustom28).Append("\n");
            sb.Append("  Xxcustom29: ").Append(Xxcustom29).Append("\n");
            sb.Append("  Xxcustom30: ").Append(Xxcustom30).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 ComGkSoftwareGkrApiTxpoolDtoRetailTransactionPromotionRecommendationMissingTrigger);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.EligibilityTypeCode == input.EligibilityTypeCode ||
                    (this.EligibilityTypeCode != null &&
                    this.EligibilityTypeCode.Equals(input.EligibilityTypeCode))
                ) && 
                (
                    this.TriggerID == input.TriggerID ||
                    (this.TriggerID != null &&
                    this.TriggerID.Equals(input.TriggerID))
                ) && 
                (
                    this.TriggerIDQualifier == input.TriggerIDQualifier ||
                    (this.TriggerIDQualifier != null &&
                    this.TriggerIDQualifier.Equals(input.TriggerIDQualifier))
                ) && 
                (
                    this.ThresholdTypeCode == input.ThresholdTypeCode ||
                    (this.ThresholdTypeCode != null &&
                    this.ThresholdTypeCode.Equals(input.ThresholdTypeCode))
                ) && 
                (
                    this.ThresholdQuantity == input.ThresholdQuantity ||
                    (this.ThresholdQuantity != null &&
                    this.ThresholdQuantity.Equals(input.ThresholdQuantity))
                ) && 
                (
                    this.ThresholdAmount == input.ThresholdAmount ||
                    (this.ThresholdAmount != null &&
                    this.ThresholdAmount.Equals(input.ThresholdAmount))
                ) && 
                (
                    this.IntervalQuantity == input.IntervalQuantity ||
                    (this.IntervalQuantity != null &&
                    this.IntervalQuantity.Equals(input.IntervalQuantity))
                ) && 
                (
                    this.IntervalAmount == input.IntervalAmount ||
                    (this.IntervalAmount != null &&
                    this.IntervalAmount.Equals(input.IntervalAmount))
                ) && 
                (
                    this.LimitQuantity == input.LimitQuantity ||
                    (this.LimitQuantity != null &&
                    this.LimitQuantity.Equals(input.LimitQuantity))
                ) && 
                (
                    this.LimitAmount == input.LimitAmount ||
                    (this.LimitAmount != null &&
                    this.LimitAmount.Equals(input.LimitAmount))
                ) && 
                (
                    this.MissingQuantity == input.MissingQuantity ||
                    (this.MissingQuantity != null &&
                    this.MissingQuantity.Equals(input.MissingQuantity))
                ) && 
                (
                    this.MissingAmount == input.MissingAmount ||
                    (this.MissingAmount != null &&
                    this.MissingAmount.Equals(input.MissingAmount))
                ) && 
                (
                    this.TriggerIDQualifier2 == input.TriggerIDQualifier2 ||
                    (this.TriggerIDQualifier2 != null &&
                    this.TriggerIDQualifier2.Equals(input.TriggerIDQualifier2))
                ) && 
                (
                    this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList == input.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList ||
                    this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList != null &&
                    this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList.SequenceEqual(input.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList)
                ) && 
                (
                    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.Xxcustom16 == input.Xxcustom16 ||
                    (this.Xxcustom16 != null &&
                    this.Xxcustom16.Equals(input.Xxcustom16))
                ) && 
                (
                    this.Xxcustom17 == input.Xxcustom17 ||
                    (this.Xxcustom17 != null &&
                    this.Xxcustom17.Equals(input.Xxcustom17))
                ) && 
                (
                    this.Xxcustom18 == input.Xxcustom18 ||
                    (this.Xxcustom18 != null &&
                    this.Xxcustom18.Equals(input.Xxcustom18))
                ) && 
                (
                    this.Xxcustom19 == input.Xxcustom19 ||
                    (this.Xxcustom19 != null &&
                    this.Xxcustom19.Equals(input.Xxcustom19))
                ) && 
                (
                    this.Xxcustom20 == input.Xxcustom20 ||
                    (this.Xxcustom20 != null &&
                    this.Xxcustom20.Equals(input.Xxcustom20))
                ) && 
                (
                    this.Xxcustom21 == input.Xxcustom21 ||
                    (this.Xxcustom21 != null &&
                    this.Xxcustom21.Equals(input.Xxcustom21))
                ) && 
                (
                    this.Xxcustom22 == input.Xxcustom22 ||
                    (this.Xxcustom22 != null &&
                    this.Xxcustom22.Equals(input.Xxcustom22))
                ) && 
                (
                    this.Xxcustom23 == input.Xxcustom23 ||
                    (this.Xxcustom23 != null &&
                    this.Xxcustom23.Equals(input.Xxcustom23))
                ) && 
                (
                    this.Xxcustom24 == input.Xxcustom24 ||
                    (this.Xxcustom24 != null &&
                    this.Xxcustom24.Equals(input.Xxcustom24))
                ) && 
                (
                    this.Xxcustom25 == input.Xxcustom25 ||
                    (this.Xxcustom25 != null &&
                    this.Xxcustom25.Equals(input.Xxcustom25))
                ) && 
                (
                    this.Xxcustom26 == input.Xxcustom26 ||
                    (this.Xxcustom26 != null &&
                    this.Xxcustom26.Equals(input.Xxcustom26))
                ) && 
                (
                    this.Xxcustom27 == input.Xxcustom27 ||
                    (this.Xxcustom27 != null &&
                    this.Xxcustom27.Equals(input.Xxcustom27))
                ) && 
                (
                    this.Xxcustom28 == input.Xxcustom28 ||
                    (this.Xxcustom28 != null &&
                    this.Xxcustom28.Equals(input.Xxcustom28))
                ) && 
                (
                    this.Xxcustom29 == input.Xxcustom29 ||
                    (this.Xxcustom29 != null &&
                    this.Xxcustom29.Equals(input.Xxcustom29))
                ) && 
                (
                    this.Xxcustom30 == input.Xxcustom30 ||
                    (this.Xxcustom30 != null &&
                    this.Xxcustom30.Equals(input.Xxcustom30))
                ) && 
                (
                    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.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.EligibilityTypeCode != null)
                    hashCode = hashCode * 59 + this.EligibilityTypeCode.GetHashCode();
                if (this.TriggerID != null)
                    hashCode = hashCode * 59 + this.TriggerID.GetHashCode();
                if (this.TriggerIDQualifier != null)
                    hashCode = hashCode * 59 + this.TriggerIDQualifier.GetHashCode();
                if (this.ThresholdTypeCode != null)
                    hashCode = hashCode * 59 + this.ThresholdTypeCode.GetHashCode();
                if (this.ThresholdQuantity != null)
                    hashCode = hashCode * 59 + this.ThresholdQuantity.GetHashCode();
                if (this.ThresholdAmount != null)
                    hashCode = hashCode * 59 + this.ThresholdAmount.GetHashCode();
                if (this.IntervalQuantity != null)
                    hashCode = hashCode * 59 + this.IntervalQuantity.GetHashCode();
                if (this.IntervalAmount != null)
                    hashCode = hashCode * 59 + this.IntervalAmount.GetHashCode();
                if (this.LimitQuantity != null)
                    hashCode = hashCode * 59 + this.LimitQuantity.GetHashCode();
                if (this.LimitAmount != null)
                    hashCode = hashCode * 59 + this.LimitAmount.GetHashCode();
                if (this.MissingQuantity != null)
                    hashCode = hashCode * 59 + this.MissingQuantity.GetHashCode();
                if (this.MissingAmount != null)
                    hashCode = hashCode * 59 + this.MissingAmount.GetHashCode();
                if (this.TriggerIDQualifier2 != null)
                    hashCode = hashCode * 59 + this.TriggerIDQualifier2.GetHashCode();
                if (this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionPromotionRecommendationPartiallyFulfilledTriggerReferenceList.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.Xxcustom16 != null)
                    hashCode = hashCode * 59 + this.Xxcustom16.GetHashCode();
                if (this.Xxcustom17 != null)
                    hashCode = hashCode * 59 + this.Xxcustom17.GetHashCode();
                if (this.Xxcustom18 != null)
                    hashCode = hashCode * 59 + this.Xxcustom18.GetHashCode();
                if (this.Xxcustom19 != null)
                    hashCode = hashCode * 59 + this.Xxcustom19.GetHashCode();
                if (this.Xxcustom20 != null)
                    hashCode = hashCode * 59 + this.Xxcustom20.GetHashCode();
                if (this.Xxcustom21 != null)
                    hashCode = hashCode * 59 + this.Xxcustom21.GetHashCode();
                if (this.Xxcustom22 != null)
                    hashCode = hashCode * 59 + this.Xxcustom22.GetHashCode();
                if (this.Xxcustom23 != null)
                    hashCode = hashCode * 59 + this.Xxcustom23.GetHashCode();
                if (this.Xxcustom24 != null)
                    hashCode = hashCode * 59 + this.Xxcustom24.GetHashCode();
                if (this.Xxcustom25 != null)
                    hashCode = hashCode * 59 + this.Xxcustom25.GetHashCode();
                if (this.Xxcustom26 != null)
                    hashCode = hashCode * 59 + this.Xxcustom26.GetHashCode();
                if (this.Xxcustom27 != null)
                    hashCode = hashCode * 59 + this.Xxcustom27.GetHashCode();
                if (this.Xxcustom28 != null)
                    hashCode = hashCode * 59 + this.Xxcustom28.GetHashCode();
                if (this.Xxcustom29 != null)
                    hashCode = hashCode * 59 + this.Xxcustom29.GetHashCode();
                if (this.Xxcustom30 != null)
                    hashCode = hashCode * 59 + this.Xxcustom30.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;
        }
    }

}
