/* 
 * 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>
    /// PromotionConditionSO &lt;p&gt;Condition of the promotion&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO :  IEquatable<ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;Determines whether the condition can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the condition can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SaleReturnTypeCodeEnum
        {
            
            /// <summary>
            /// Enum SALESRETURNS for value: SALES_RETURNS
            /// </summary>
            [EnumMember(Value = "SALES_RETURNS")]
            SALESRETURNS = 1,
            
            /// <summary>
            /// Enum SALES for value: SALES
            /// </summary>
            [EnumMember(Value = "SALES")]
            SALES = 2,
            
            /// <summary>
            /// Enum RETURNS for value: RETURNS
            /// </summary>
            [EnumMember(Value = "RETURNS")]
            RETURNS = 3
        }

        /// <summary>
        /// &lt;p&gt;Determines whether the condition can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the condition can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="saleReturnTypeCode", EmitDefaultValue=false)]
        public SaleReturnTypeCodeEnum? SaleReturnTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Determines whether the condition can be used only for sales, only for amendments, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for amendments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for amendments&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the condition can be used only for sales, only for amendments, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for amendments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for amendments&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AmendmentTypeCodeEnum
        {
            
            /// <summary>
            /// Enum SALESAMENDMENTS for value: SALES_AMENDMENTS
            /// </summary>
            [EnumMember(Value = "SALES_AMENDMENTS")]
            SALESAMENDMENTS = 1,
            
            /// <summary>
            /// Enum SALES for value: SALES
            /// </summary>
            [EnumMember(Value = "SALES")]
            SALES = 2,
            
            /// <summary>
            /// Enum AMENDMENTS for value: AMENDMENTS
            /// </summary>
            [EnumMember(Value = "AMENDMENTS")]
            AMENDMENTS = 3
        }

        /// <summary>
        /// &lt;p&gt;Determines whether the condition can be used only for sales, only for amendments, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for amendments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for amendments&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the condition can be used only for sales, only for amendments, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for amendments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for amendments&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="amendmentTypeCode", EmitDefaultValue=false)]
        public AmendmentTypeCodeEnum? AmendmentTypeCode { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO" /> class.
        /// </summary>
        /// <param name="promotionID">&lt;p&gt;The unique identifier for a promotion.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Mapped from promotion.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="conditionID">&lt;p&gt;A identifier for a condition.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generared, not imported.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="internalRuleID">&lt;p&gt;A identifier for a specific price derivation rule.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="internalEligibilityID">&lt;p&gt;A unique identifier for a Price Derivation Rule eligibility. It is the ID of the root eligibility of the condition. (useful if the combination eligibility is used).&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="timeGroup">&lt;p&gt;Time restrictions&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="typeCode">&lt;p&gt;Code of the condition type&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="rule">&lt;p&gt;Rule data&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="eligibility">&lt;p&gt;Eligibility data (tree)&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="sequence">&lt;p&gt;Sequence - for collision handling&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="resolution">&lt;p&gt;Resolution - for collision handling&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="notShowingFlag">&lt;p&gt;Determines whether the result of the applied condition is to be suppressed on displays / not printed on the receipt; e.g. position-dependent default points are not printed after each position, but only summarized at the end of the receipt.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="description">&lt;p&gt;Short description&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="receiptPrinterName">&lt;p&gt;Receipt text (overwrites the receipt text of the promotion)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="operatorDisplayName">&lt;p&gt;Operator display text (overwrites the operator display text of the promotion)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="customerDisplayName">&lt;p&gt;Customer display text (overwrites the customer display text of the promotion)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="itemDiscountControlVector">&lt;p&gt;&#39;vector&#39; which describes which discount typecodes are allowed for usage by the loyalty server; Item.DiscountTypeCode is used as an index in order to find the right position inside the vector;&lt;br /&gt; Possible values for each position are:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;0 - -&gt; no discount possible&lt;/li&gt;&lt;br /&gt; &lt;li&gt;1 - -&gt; discount possible&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="saleReturnTypeCode">&lt;p&gt;Determines whether the condition can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="amendmentTypeCode">&lt;p&gt;Determines whether the condition can be used only for sales, only for amendments, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00/null: for sales as well as for amendments&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01: only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02: only for amendments&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="exclusiveFlag">&lt;p&gt;determines whether this condition is an exclusive condition&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="iconID">&lt;p&gt;ID of the icon that should be displayed as sales information on POS&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.IconID&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="concurrenceControlVector">&lt;p&gt;Determines how this condition works in relation to other applicable conditions&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="notConsideredInLineItemModeFlag">&lt;p&gt;Describes whether the promotion is prohibited/cannot be applied in line item mode.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="recommendationThresholdPercentage">&lt;p&gt;Defines what percentage of the triggers of the recommended promotion have to be reached by the items in the transaction in order for the PCE to make the recommendation.&lt;br /&gt; The supported types of leaf eligibilities which are considered when evaluating the threshold percentage are: ITEM, MSET, MSTR, SITH, TOTL.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="recommendationContextList">&lt;p&gt;Defines the list of recommendation contexts in which the promotion can be recommended by the PCE.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="recommendationFlag">&lt;p&gt;Flag indicating if the promotion price derivation rule is available for recommendations or not.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="tid">&lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="promotionConditionTranslationList">&lt;p&gt;List of translations&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom08">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom10">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom09">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom07">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom05">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom06">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom11">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom12">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom13">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom14">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom15">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom03">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom02">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom04">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom16">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom17">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom18">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom19">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom20">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom21">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom22">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom23">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom24">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom25">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom26">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom27">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom28">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom29">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom30">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom01">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;.</param>
        public ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO(string promotionID = default(string), string conditionID = default(string), string internalRuleID = default(string), string internalEligibilityID = default(string), ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTimeGroupSO timeGroup = default(ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTimeGroupSO), string typeCode = default(string), ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionRuleSO rule = default(ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionRuleSO), ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionEligibilitySO eligibility = default(ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionEligibilitySO), string sequence = default(string), string resolution = default(string), bool? notShowingFlag = default(bool?), string description = default(string), string receiptPrinterName = default(string), string operatorDisplayName = default(string), string customerDisplayName = default(string), string itemDiscountControlVector = default(string), SaleReturnTypeCodeEnum? saleReturnTypeCode = default(SaleReturnTypeCodeEnum?), AmendmentTypeCodeEnum? amendmentTypeCode = default(AmendmentTypeCodeEnum?), bool? exclusiveFlag = default(bool?), string iconID = default(string), string concurrenceControlVector = default(string), bool? notConsideredInLineItemModeFlag = default(bool?), int? recommendationThresholdPercentage = default(int?), List<string> recommendationContextList = default(List<string>), bool? recommendationFlag = default(bool?), string tid = default(string), List<ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTranslationSO> promotionConditionTranslationList = default(List<ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTranslationSO>), 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 "rule" is required (not null)
            if (rule == null)
            {
                throw new InvalidDataException("rule is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.Rule = rule;
            }
            // to ensure "eligibility" is required (not null)
            if (eligibility == null)
            {
                throw new InvalidDataException("eligibility is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.Eligibility = eligibility;
            }
            // to ensure "sequence" is required (not null)
            if (sequence == null)
            {
                throw new InvalidDataException("sequence is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.Sequence = sequence;
            }
            // to ensure "resolution" is required (not null)
            if (resolution == null)
            {
                throw new InvalidDataException("resolution is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.Resolution = resolution;
            }
            // to ensure "notShowingFlag" is required (not null)
            if (notShowingFlag == null)
            {
                throw new InvalidDataException("notShowingFlag is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.NotShowingFlag = notShowingFlag;
            }
            // to ensure "exclusiveFlag" is required (not null)
            if (exclusiveFlag == null)
            {
                throw new InvalidDataException("exclusiveFlag is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.ExclusiveFlag = exclusiveFlag;
            }
            // to ensure "notConsideredInLineItemModeFlag" is required (not null)
            if (notConsideredInLineItemModeFlag == null)
            {
                throw new InvalidDataException("notConsideredInLineItemModeFlag is a required property for ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO and cannot be null");
            }
            else
            {
                this.NotConsideredInLineItemModeFlag = notConsideredInLineItemModeFlag;
            }
            this.PromotionID = promotionID;
            this.ConditionID = conditionID;
            this.InternalRuleID = internalRuleID;
            this.InternalEligibilityID = internalEligibilityID;
            this.TimeGroup = timeGroup;
            this.TypeCode = typeCode;
            this.Description = description;
            this.ReceiptPrinterName = receiptPrinterName;
            this.OperatorDisplayName = operatorDisplayName;
            this.CustomerDisplayName = customerDisplayName;
            this.ItemDiscountControlVector = itemDiscountControlVector;
            this.SaleReturnTypeCode = saleReturnTypeCode;
            this.AmendmentTypeCode = amendmentTypeCode;
            this.IconID = iconID;
            this.ConcurrenceControlVector = concurrenceControlVector;
            this.RecommendationThresholdPercentage = recommendationThresholdPercentage;
            this.RecommendationContextList = recommendationContextList;
            this.RecommendationFlag = recommendationFlag;
            this.Tid = tid;
            this.PromotionConditionTranslationList = promotionConditionTranslationList;
            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;The unique identifier for a promotion.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Mapped from promotion.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The unique identifier for a promotion.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Mapped from promotion.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="promotionID", EmitDefaultValue=false)]
        public string PromotionID { get; set; }

        /// <summary>
        /// &lt;p&gt;A identifier for a condition.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generared, not imported.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A identifier for a condition.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generared, not imported.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="conditionID", EmitDefaultValue=false)]
        public string ConditionID { get; set; }

        /// <summary>
        /// &lt;p&gt;A identifier for a specific price derivation rule.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A identifier for a specific price derivation rule.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="internalRuleID", EmitDefaultValue=false)]
        public string InternalRuleID { get; set; }

        /// <summary>
        /// &lt;p&gt;A unique identifier for a Price Derivation Rule eligibility. It is the ID of the root eligibility of the condition. (useful if the combination eligibility is used).&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A unique identifier for a Price Derivation Rule eligibility. It is the ID of the root eligibility of the condition. (useful if the combination eligibility is used).&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="internalEligibilityID", EmitDefaultValue=false)]
        public string InternalEligibilityID { get; set; }

        /// <summary>
        /// &lt;p&gt;Time restrictions&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Time restrictions&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.TimePeriod&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="timeGroup", EmitDefaultValue=false)]
        public ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTimeGroupSO TimeGroup { get; set; }

        /// <summary>
        /// &lt;p&gt;Code of the condition type&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Code of the condition type&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="typeCode", EmitDefaultValue=false)]
        public string TypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;Rule data&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Rule data&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="rule", EmitDefaultValue=false)]
        public ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionRuleSO Rule { get; set; }

        /// <summary>
        /// &lt;p&gt;Eligibility data (tree)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Eligibility data (tree)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="eligibility", EmitDefaultValue=false)]
        public ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionEligibilitySO Eligibility { get; set; }

        /// <summary>
        /// &lt;p&gt;Sequence - for collision handling&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Sequence - for collision handling&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="sequence", EmitDefaultValue=false)]
        public string Sequence { get; set; }

        /// <summary>
        /// &lt;p&gt;Resolution - for collision handling&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Resolution - for collision handling&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="resolution", EmitDefaultValue=false)]
        public string Resolution { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether the result of the applied condition is to be suppressed on displays / not printed on the receipt; e.g. position-dependent default points are not printed after each position, but only summarized at the end of the receipt.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the result of the applied condition is to be suppressed on displays / not printed on the receipt; e.g. position-dependent default points are not printed after each position, but only summarized at the end of the receipt.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="notShowingFlag", EmitDefaultValue=false)]
        public bool? NotShowingFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Short description&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Short description&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="description", EmitDefaultValue=false)]
        public string Description { get; set; }

        /// <summary>
        /// &lt;p&gt;Receipt text (overwrites the receipt text of the promotion)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Receipt text (overwrites the receipt text of the promotion)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="receiptPrinterName", EmitDefaultValue=false)]
        public string ReceiptPrinterName { get; set; }

        /// <summary>
        /// &lt;p&gt;Operator display text (overwrites the operator display text of the promotion)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Operator display text (overwrites the operator display text of the promotion)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="operatorDisplayName", EmitDefaultValue=false)]
        public string OperatorDisplayName { get; set; }

        /// <summary>
        /// &lt;p&gt;Customer display text (overwrites the customer display text of the promotion)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customer display text (overwrites the customer display text of the promotion)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="customerDisplayName", EmitDefaultValue=false)]
        public string CustomerDisplayName { get; set; }

        /// <summary>
        /// &lt;p&gt;&#39;vector&#39; which describes which discount typecodes are allowed for usage by the loyalty server; Item.DiscountTypeCode is used as an index in order to find the right position inside the vector;&lt;br /&gt; Possible values for each position are:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;0 - -&gt; no discount possible&lt;/li&gt;&lt;br /&gt; &lt;li&gt;1 - -&gt; discount possible&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;&#39;vector&#39; which describes which discount typecodes are allowed for usage by the loyalty server; Item.DiscountTypeCode is used as an index in order to find the right position inside the vector;&lt;br /&gt; Possible values for each position are:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;0 - -&gt; no discount possible&lt;/li&gt;&lt;br /&gt; &lt;li&gt;1 - -&gt; discount possible&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="itemDiscountControlVector", EmitDefaultValue=false)]
        public string ItemDiscountControlVector { get; set; }



        /// <summary>
        /// &lt;p&gt;determines whether this condition is an exclusive condition&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;determines whether this condition is an exclusive condition&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;masterdata_Promotion_SE.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.ExclusivenessFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="exclusiveFlag", EmitDefaultValue=false)]
        public bool? ExclusiveFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;ID of the icon that should be displayed as sales information on POS&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.IconID&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;ID of the icon that should be displayed as sales information on POS&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;PromotionCPD.xml: Promotion.Condition.GlobalData.IconID&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="iconID", EmitDefaultValue=false)]
        public string IconID { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines how this condition works in relation to other applicable conditions&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines how this condition works in relation to other applicable conditions&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="concurrenceControlVector", EmitDefaultValue=false)]
        public string ConcurrenceControlVector { get; set; }

        /// <summary>
        /// &lt;p&gt;Describes whether the promotion is prohibited/cannot be applied in line item mode.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Describes whether the promotion is prohibited/cannot be applied in line item mode.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="notConsideredInLineItemModeFlag", EmitDefaultValue=false)]
        public bool? NotConsideredInLineItemModeFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines what percentage of the triggers of the recommended promotion have to be reached by the items in the transaction in order for the PCE to make the recommendation.&lt;br /&gt; The supported types of leaf eligibilities which are considered when evaluating the threshold percentage are: ITEM, MSET, MSTR, SITH, TOTL.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines what percentage of the triggers of the recommended promotion have to be reached by the items in the transaction in order for the PCE to make the recommendation.&lt;br /&gt; The supported types of leaf eligibilities which are considered when evaluating the threshold percentage are: ITEM, MSET, MSTR, SITH, TOTL.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="recommendationThresholdPercentage", EmitDefaultValue=false)]
        public int? RecommendationThresholdPercentage { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines the list of recommendation contexts in which the promotion can be recommended by the PCE.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines the list of recommendation contexts in which the promotion can be recommended by the PCE.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="recommendationContextList", EmitDefaultValue=false)]
        public List<string> RecommendationContextList { get; set; }

        /// <summary>
        /// &lt;p&gt;Flag indicating if the promotion price derivation rule is available for recommendations or not.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Flag indicating if the promotion price derivation rule is available for recommendations or not.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="recommendationFlag", EmitDefaultValue=false)]
        public bool? RecommendationFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Generated, not imported.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tid", EmitDefaultValue=false)]
        public string Tid { get; set; }

        /// <summary>
        /// &lt;p&gt;List of translations&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;List of translations&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="promotionConditionTranslationList", EmitDefaultValue=false)]
        public List<ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionTranslationSO> PromotionConditionTranslationList { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom08", EmitDefaultValue=false)]
        public string Xxcustom08 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom10", EmitDefaultValue=false)]
        public string Xxcustom10 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom09", EmitDefaultValue=false)]
        public string Xxcustom09 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom07", EmitDefaultValue=false)]
        public string Xxcustom07 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom05", EmitDefaultValue=false)]
        public string Xxcustom05 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom06", EmitDefaultValue=false)]
        public string Xxcustom06 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom11", EmitDefaultValue=false)]
        public string Xxcustom11 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom12", EmitDefaultValue=false)]
        public string Xxcustom12 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom13", EmitDefaultValue=false)]
        public string Xxcustom13 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom14", EmitDefaultValue=false)]
        public string Xxcustom14 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom15", EmitDefaultValue=false)]
        public string Xxcustom15 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom03", EmitDefaultValue=false)]
        public string Xxcustom03 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom02", EmitDefaultValue=false)]
        public string Xxcustom02 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom04", EmitDefaultValue=false)]
        public string Xxcustom04 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom16", EmitDefaultValue=false)]
        public string Xxcustom16 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom17", EmitDefaultValue=false)]
        public string Xxcustom17 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom18", EmitDefaultValue=false)]
        public string Xxcustom18 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom19", EmitDefaultValue=false)]
        public string Xxcustom19 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom20", EmitDefaultValue=false)]
        public string Xxcustom20 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom21", EmitDefaultValue=false)]
        public string Xxcustom21 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom22", EmitDefaultValue=false)]
        public string Xxcustom22 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom23", EmitDefaultValue=false)]
        public string Xxcustom23 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom24", EmitDefaultValue=false)]
        public string Xxcustom24 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom25", EmitDefaultValue=false)]
        public string Xxcustom25 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom26", EmitDefaultValue=false)]
        public string Xxcustom26 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom27", EmitDefaultValue=false)]
        public string Xxcustom27 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom28", EmitDefaultValue=false)]
        public string Xxcustom28 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom29", EmitDefaultValue=false)]
        public string Xxcustom29 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xxcustom30", EmitDefaultValue=false)]
        public string Xxcustom30 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterdata_Promotion_SE.xml only.&lt;br /&gt;&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 ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO {\n");
            sb.Append("  PromotionID: ").Append(PromotionID).Append("\n");
            sb.Append("  ConditionID: ").Append(ConditionID).Append("\n");
            sb.Append("  InternalRuleID: ").Append(InternalRuleID).Append("\n");
            sb.Append("  InternalEligibilityID: ").Append(InternalEligibilityID).Append("\n");
            sb.Append("  TimeGroup: ").Append(TimeGroup).Append("\n");
            sb.Append("  TypeCode: ").Append(TypeCode).Append("\n");
            sb.Append("  Rule: ").Append(Rule).Append("\n");
            sb.Append("  Eligibility: ").Append(Eligibility).Append("\n");
            sb.Append("  Sequence: ").Append(Sequence).Append("\n");
            sb.Append("  Resolution: ").Append(Resolution).Append("\n");
            sb.Append("  NotShowingFlag: ").Append(NotShowingFlag).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  ReceiptPrinterName: ").Append(ReceiptPrinterName).Append("\n");
            sb.Append("  OperatorDisplayName: ").Append(OperatorDisplayName).Append("\n");
            sb.Append("  CustomerDisplayName: ").Append(CustomerDisplayName).Append("\n");
            sb.Append("  ItemDiscountControlVector: ").Append(ItemDiscountControlVector).Append("\n");
            sb.Append("  SaleReturnTypeCode: ").Append(SaleReturnTypeCode).Append("\n");
            sb.Append("  AmendmentTypeCode: ").Append(AmendmentTypeCode).Append("\n");
            sb.Append("  ExclusiveFlag: ").Append(ExclusiveFlag).Append("\n");
            sb.Append("  IconID: ").Append(IconID).Append("\n");
            sb.Append("  ConcurrenceControlVector: ").Append(ConcurrenceControlVector).Append("\n");
            sb.Append("  NotConsideredInLineItemModeFlag: ").Append(NotConsideredInLineItemModeFlag).Append("\n");
            sb.Append("  RecommendationThresholdPercentage: ").Append(RecommendationThresholdPercentage).Append("\n");
            sb.Append("  RecommendationContextList: ").Append(RecommendationContextList).Append("\n");
            sb.Append("  RecommendationFlag: ").Append(RecommendationFlag).Append("\n");
            sb.Append("  Tid: ").Append(Tid).Append("\n");
            sb.Append("  PromotionConditionTranslationList: ").Append(PromotionConditionTranslationList).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 ComGkSoftwareSweeSesApiServerMdPromotionDtoSoPromotionConditionSO);
        }

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

            return 
                (
                    this.PromotionID == input.PromotionID ||
                    (this.PromotionID != null &&
                    this.PromotionID.Equals(input.PromotionID))
                ) && 
                (
                    this.ConditionID == input.ConditionID ||
                    (this.ConditionID != null &&
                    this.ConditionID.Equals(input.ConditionID))
                ) && 
                (
                    this.InternalRuleID == input.InternalRuleID ||
                    (this.InternalRuleID != null &&
                    this.InternalRuleID.Equals(input.InternalRuleID))
                ) && 
                (
                    this.InternalEligibilityID == input.InternalEligibilityID ||
                    (this.InternalEligibilityID != null &&
                    this.InternalEligibilityID.Equals(input.InternalEligibilityID))
                ) && 
                (
                    this.TimeGroup == input.TimeGroup ||
                    (this.TimeGroup != null &&
                    this.TimeGroup.Equals(input.TimeGroup))
                ) && 
                (
                    this.TypeCode == input.TypeCode ||
                    (this.TypeCode != null &&
                    this.TypeCode.Equals(input.TypeCode))
                ) && 
                (
                    this.Rule == input.Rule ||
                    (this.Rule != null &&
                    this.Rule.Equals(input.Rule))
                ) && 
                (
                    this.Eligibility == input.Eligibility ||
                    (this.Eligibility != null &&
                    this.Eligibility.Equals(input.Eligibility))
                ) && 
                (
                    this.Sequence == input.Sequence ||
                    (this.Sequence != null &&
                    this.Sequence.Equals(input.Sequence))
                ) && 
                (
                    this.Resolution == input.Resolution ||
                    (this.Resolution != null &&
                    this.Resolution.Equals(input.Resolution))
                ) && 
                (
                    this.NotShowingFlag == input.NotShowingFlag ||
                    (this.NotShowingFlag != null &&
                    this.NotShowingFlag.Equals(input.NotShowingFlag))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.ReceiptPrinterName == input.ReceiptPrinterName ||
                    (this.ReceiptPrinterName != null &&
                    this.ReceiptPrinterName.Equals(input.ReceiptPrinterName))
                ) && 
                (
                    this.OperatorDisplayName == input.OperatorDisplayName ||
                    (this.OperatorDisplayName != null &&
                    this.OperatorDisplayName.Equals(input.OperatorDisplayName))
                ) && 
                (
                    this.CustomerDisplayName == input.CustomerDisplayName ||
                    (this.CustomerDisplayName != null &&
                    this.CustomerDisplayName.Equals(input.CustomerDisplayName))
                ) && 
                (
                    this.ItemDiscountControlVector == input.ItemDiscountControlVector ||
                    (this.ItemDiscountControlVector != null &&
                    this.ItemDiscountControlVector.Equals(input.ItemDiscountControlVector))
                ) && 
                (
                    this.SaleReturnTypeCode == input.SaleReturnTypeCode ||
                    (this.SaleReturnTypeCode != null &&
                    this.SaleReturnTypeCode.Equals(input.SaleReturnTypeCode))
                ) && 
                (
                    this.AmendmentTypeCode == input.AmendmentTypeCode ||
                    (this.AmendmentTypeCode != null &&
                    this.AmendmentTypeCode.Equals(input.AmendmentTypeCode))
                ) && 
                (
                    this.ExclusiveFlag == input.ExclusiveFlag ||
                    (this.ExclusiveFlag != null &&
                    this.ExclusiveFlag.Equals(input.ExclusiveFlag))
                ) && 
                (
                    this.IconID == input.IconID ||
                    (this.IconID != null &&
                    this.IconID.Equals(input.IconID))
                ) && 
                (
                    this.ConcurrenceControlVector == input.ConcurrenceControlVector ||
                    (this.ConcurrenceControlVector != null &&
                    this.ConcurrenceControlVector.Equals(input.ConcurrenceControlVector))
                ) && 
                (
                    this.NotConsideredInLineItemModeFlag == input.NotConsideredInLineItemModeFlag ||
                    (this.NotConsideredInLineItemModeFlag != null &&
                    this.NotConsideredInLineItemModeFlag.Equals(input.NotConsideredInLineItemModeFlag))
                ) && 
                (
                    this.RecommendationThresholdPercentage == input.RecommendationThresholdPercentage ||
                    (this.RecommendationThresholdPercentage != null &&
                    this.RecommendationThresholdPercentage.Equals(input.RecommendationThresholdPercentage))
                ) && 
                (
                    this.RecommendationContextList == input.RecommendationContextList ||
                    this.RecommendationContextList != null &&
                    this.RecommendationContextList.SequenceEqual(input.RecommendationContextList)
                ) && 
                (
                    this.RecommendationFlag == input.RecommendationFlag ||
                    (this.RecommendationFlag != null &&
                    this.RecommendationFlag.Equals(input.RecommendationFlag))
                ) && 
                (
                    this.Tid == input.Tid ||
                    (this.Tid != null &&
                    this.Tid.Equals(input.Tid))
                ) && 
                (
                    this.PromotionConditionTranslationList == input.PromotionConditionTranslationList ||
                    this.PromotionConditionTranslationList != null &&
                    this.PromotionConditionTranslationList.SequenceEqual(input.PromotionConditionTranslationList)
                ) && 
                (
                    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.PromotionID != null)
                    hashCode = hashCode * 59 + this.PromotionID.GetHashCode();
                if (this.ConditionID != null)
                    hashCode = hashCode * 59 + this.ConditionID.GetHashCode();
                if (this.InternalRuleID != null)
                    hashCode = hashCode * 59 + this.InternalRuleID.GetHashCode();
                if (this.InternalEligibilityID != null)
                    hashCode = hashCode * 59 + this.InternalEligibilityID.GetHashCode();
                if (this.TimeGroup != null)
                    hashCode = hashCode * 59 + this.TimeGroup.GetHashCode();
                if (this.TypeCode != null)
                    hashCode = hashCode * 59 + this.TypeCode.GetHashCode();
                if (this.Rule != null)
                    hashCode = hashCode * 59 + this.Rule.GetHashCode();
                if (this.Eligibility != null)
                    hashCode = hashCode * 59 + this.Eligibility.GetHashCode();
                if (this.Sequence != null)
                    hashCode = hashCode * 59 + this.Sequence.GetHashCode();
                if (this.Resolution != null)
                    hashCode = hashCode * 59 + this.Resolution.GetHashCode();
                if (this.NotShowingFlag != null)
                    hashCode = hashCode * 59 + this.NotShowingFlag.GetHashCode();
                if (this.Description != null)
                    hashCode = hashCode * 59 + this.Description.GetHashCode();
                if (this.ReceiptPrinterName != null)
                    hashCode = hashCode * 59 + this.ReceiptPrinterName.GetHashCode();
                if (this.OperatorDisplayName != null)
                    hashCode = hashCode * 59 + this.OperatorDisplayName.GetHashCode();
                if (this.CustomerDisplayName != null)
                    hashCode = hashCode * 59 + this.CustomerDisplayName.GetHashCode();
                if (this.ItemDiscountControlVector != null)
                    hashCode = hashCode * 59 + this.ItemDiscountControlVector.GetHashCode();
                if (this.SaleReturnTypeCode != null)
                    hashCode = hashCode * 59 + this.SaleReturnTypeCode.GetHashCode();
                if (this.AmendmentTypeCode != null)
                    hashCode = hashCode * 59 + this.AmendmentTypeCode.GetHashCode();
                if (this.ExclusiveFlag != null)
                    hashCode = hashCode * 59 + this.ExclusiveFlag.GetHashCode();
                if (this.IconID != null)
                    hashCode = hashCode * 59 + this.IconID.GetHashCode();
                if (this.ConcurrenceControlVector != null)
                    hashCode = hashCode * 59 + this.ConcurrenceControlVector.GetHashCode();
                if (this.NotConsideredInLineItemModeFlag != null)
                    hashCode = hashCode * 59 + this.NotConsideredInLineItemModeFlag.GetHashCode();
                if (this.RecommendationThresholdPercentage != null)
                    hashCode = hashCode * 59 + this.RecommendationThresholdPercentage.GetHashCode();
                if (this.RecommendationContextList != null)
                    hashCode = hashCode * 59 + this.RecommendationContextList.GetHashCode();
                if (this.RecommendationFlag != null)
                    hashCode = hashCode * 59 + this.RecommendationFlag.GetHashCode();
                if (this.Tid != null)
                    hashCode = hashCode * 59 + this.Tid.GetHashCode();
                if (this.PromotionConditionTranslationList != null)
                    hashCode = hashCode * 59 + this.PromotionConditionTranslationList.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;
        }
    }

}
