/* 
 * 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>
    /// RegistrationResult &lt;p&gt;The entity RegistrationResult&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiServiceTransactionRegistrationResult :  IEquatable<ComGkSoftwarePosApiServiceTransactionRegistrationResult>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;The promotion trigger signal type&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The promotion trigger signal type&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PromotionTriggerSignalTypeEnum
        {
            
            /// <summary>
            /// Enum OK for value: OK
            /// </summary>
            [EnumMember(Value = "OK")]
            OK = 1,
            
            /// <summary>
            /// Enum FORBIDDEN for value: FORBIDDEN
            /// </summary>
            [EnumMember(Value = "FORBIDDEN")]
            FORBIDDEN = 2,
            
            /// <summary>
            /// Enum AUTHORIZATION for value: AUTHORIZATION
            /// </summary>
            [EnumMember(Value = "AUTHORIZATION")]
            AUTHORIZATION = 3,
            
            /// <summary>
            /// Enum WARNING for value: WARNING
            /// </summary>
            [EnumMember(Value = "WARNING")]
            WARNING = 4,
            
            /// <summary>
            /// Enum HIGHERPRICEFORBIDDEN for value: HIGHER_PRICE_FORBIDDEN
            /// </summary>
            [EnumMember(Value = "HIGHER_PRICE_FORBIDDEN")]
            HIGHERPRICEFORBIDDEN = 5,
            
            /// <summary>
            /// Enum LOWERPRICEFORBIDDEN for value: LOWER_PRICE_FORBIDDEN
            /// </summary>
            [EnumMember(Value = "LOWER_PRICE_FORBIDDEN")]
            LOWERPRICEFORBIDDEN = 6,
            
            /// <summary>
            /// Enum ZEROPRICEFORBIDDEN for value: ZERO_PRICE_FORBIDDEN
            /// </summary>
            [EnumMember(Value = "ZERO_PRICE_FORBIDDEN")]
            ZEROPRICEFORBIDDEN = 7,
            
            /// <summary>
            /// Enum PRICECHANGEFORBIDDEN for value: PRICE_CHANGE_FORBIDDEN
            /// </summary>
            [EnumMember(Value = "PRICE_CHANGE_FORBIDDEN")]
            PRICECHANGEFORBIDDEN = 8,
            
            /// <summary>
            /// Enum LINEITEMNOTREBATABLE for value: LINE_ITEM_NOT_REBATABLE
            /// </summary>
            [EnumMember(Value = "LINE_ITEM_NOT_REBATABLE")]
            LINEITEMNOTREBATABLE = 9,
            
            /// <summary>
            /// Enum PROMOTIONTRIGGERNOTAPPLIED for value: PROMOTION_TRIGGER_NOT_APPLIED
            /// </summary>
            [EnumMember(Value = "PROMOTION_TRIGGER_NOT_APPLIED")]
            PROMOTIONTRIGGERNOTAPPLIED = 10
        }

        /// <summary>
        /// &lt;p&gt;The promotion trigger signal type&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The promotion trigger signal type&lt;/p&gt;</value>
        [DataMember(Name="promotionTriggerSignalType", EmitDefaultValue=false)]
        public PromotionTriggerSignalTypeEnum PromotionTriggerSignalType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceTransactionRegistrationResult" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwarePosApiServiceTransactionRegistrationResult() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceTransactionRegistrationResult" /> class.
        /// </summary>
        /// <param name="primaryEntry">&lt;p&gt;The primary transaction result entry.&lt;/p&gt;.</param>
        /// <param name="additionalEntries">&lt;p&gt;Additional result entries.&lt;/p&gt; (required).</param>
        /// <param name="filtered">&lt;p&gt;Indicates whether the transaction result is filtered. A filtered transaction does not contain the details of a retail transaction object in order to optimize service communication.&lt;/p&gt;.</param>
        /// <param name="failure">&lt;p&gt;Reference to a failure entity in case a failure occurs during a service execution. This field can be used when a managed exception occurs and we still want to synchronize the resulting transaction instead of throwing an exception containing no information on transaction updates.&lt;/p&gt;.</param>
        /// <param name="statusOk">&lt;p&gt;indicates if the registration could be proceeded without error or callback&lt;/p&gt; (required).</param>
        /// <param name="mainPOSItemId">&lt;p&gt;the unique id of this item&lt;/p&gt;.</param>
        /// <param name="posItemId">posItemId.</param>
        /// <param name="itemId">&lt;p&gt;the item id (may be different than mainPOSItemId)&lt;/p&gt;.</param>
        /// <param name="itemName">&lt;p&gt;the item name&lt;/p&gt;.</param>
        /// <param name="itemDescription">&lt;p&gt;the item description&lt;/p&gt;.</param>
        /// <param name="itemTare">&lt;p&gt;a tare value for this item&lt;/p&gt;.</param>
        /// <param name="forcePriceInput">&lt;p&gt;The manually entered price&lt;/p&gt; (required).</param>
        /// <param name="forceQuantityInput">&lt;p&gt;The manually entered quantity&lt;/p&gt; (required).</param>
        /// <param name="priceInputSignal">&lt;p&gt;The price input signal&lt;/p&gt; (required).</param>
        /// <param name="quantityInputSignal">&lt;p&gt;The quantity input signal&lt;/p&gt; (required).</param>
        /// <param name="promotionTriggerSignal">&lt;p&gt;The promotion trigger signal&lt;/p&gt; (required).</param>
        /// <param name="promotionTriggerSignalType">&lt;p&gt;The promotion trigger signal type&lt;/p&gt; (required).</param>
        /// <param name="salesRestrictions">&lt;p&gt;list of sales restrictions&lt;/p&gt;.</param>
        /// <param name="salesRestrictionList">&lt;p&gt;The sales restriction list&lt;/p&gt;.</param>
        /// <param name="prepaidItem">&lt;p&gt;not used atm&lt;/p&gt; (required).</param>
        /// <param name="hasLinkedItems">&lt;p&gt;not used atm&lt;/p&gt; (required).</param>
        /// <param name="reasonResult">&lt;p&gt;reason objects for selection&lt;/p&gt;.</param>
        /// <param name="forceReturnReasonInput">&lt;p&gt;ask for return reason&lt;/p&gt; (required).</param>
        /// <param name="forceSerialNumberInput">&lt;p&gt;ask for serial number&lt;/p&gt; (required).</param>
        /// <param name="variantItemsAvailable">&lt;p&gt;indicates if there exist variants and one must be selected&lt;/p&gt; (required).</param>
        /// <param name="emptiesReturn">&lt;p&gt;The empties return object&lt;/p&gt; (required).</param>
        /// <param name="accumulateExistingQuantity">&lt;p&gt;The accumulate existing quantity&lt;/p&gt; (required).</param>
        /// <param name="price">&lt;p&gt;if price could be calculated it is stored in here&lt;/p&gt; (required).</param>
        /// <param name="quantityInputMethod">&lt;p&gt;quantity input method of this item&lt;/p&gt;.</param>
        /// <param name="itemClassCode">itemClassCode.</param>
        /// <param name="preregisteredQuantity">&lt;p&gt;quantity registered before item registration&lt;/p&gt;.</param>
        /// <param name="itemKey">&lt;p&gt;key of the item about to be registered&lt;/p&gt;.</param>
        /// <param name="usedBarcode">&lt;p&gt;String - he barcode originally used to register the item&lt;/p&gt;.</param>
        /// <param name="limitExceedResult">&lt;p&gt;The limit exceed result&lt;/p&gt;.</param>
        /// <param name="discountIconList">&lt;p&gt;A list of discount item icon info&lt;/p&gt;.</param>
        /// <param name="prepaidType">&lt;p&gt;The limit exceed action for price difference checks&lt;/p&gt;.</param>
        /// <param name="hasInvalidQuantity">&lt;p&gt;The has invalid quantity flag&lt;/p&gt; (required).</param>
        /// <param name="packagePriceQuantity">&lt;p&gt;The quantity for which the unit price is applied to.&lt;/p&gt;.</param>
        /// <param name="comboMealItem">&lt;p&gt;The register combo meal flag&lt;/p&gt; (required).</param>
        /// <param name="originalPositionAmount">&lt;p&gt;The position amount from the item barcode.&lt;/p&gt;.</param>
        /// <param name="xXCustom08">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom10">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom09">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom07">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom05">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom06">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom11">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom12">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom13">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom14">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom15">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom03">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom02">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom04">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom01">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        public ComGkSoftwarePosApiServiceTransactionRegistrationResult(ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry primaryEntry = default(ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry), List<ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry> additionalEntries = default(List<ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry>), bool? filtered = default(bool?), ComGkSoftwarePosApiServiceTransactionTransactionOperationFailureResult failure = default(ComGkSoftwarePosApiServiceTransactionTransactionOperationFailureResult), bool? statusOk = default(bool?), string mainPOSItemId = default(string), string posItemId = default(string), string itemId = default(string), string itemName = default(string), string itemDescription = default(string), double? itemTare = default(double?), bool? forcePriceInput = default(bool?), bool? forceQuantityInput = default(bool?), bool? priceInputSignal = default(bool?), bool? quantityInputSignal = default(bool?), bool? promotionTriggerSignal = default(bool?), PromotionTriggerSignalTypeEnum promotionTriggerSignalType = default(PromotionTriggerSignalTypeEnum), List<string> salesRestrictions = default(List<string>), List<ComGkSoftwareSweeSesApiServerMdSalesRestrictionDtoSoSalesRestrictionSO> salesRestrictionList = default(List<ComGkSoftwareSweeSesApiServerMdSalesRestrictionDtoSoSalesRestrictionSO>), bool? prepaidItem = default(bool?), bool? hasLinkedItems = default(bool?), ComGkSoftwarePosApiServiceMasterdataReasonResult reasonResult = default(ComGkSoftwarePosApiServiceMasterdataReasonResult), bool? forceReturnReasonInput = default(bool?), bool? forceSerialNumberInput = default(bool?), bool? variantItemsAvailable = default(bool?), bool? emptiesReturn = default(bool?), bool? accumulateExistingQuantity = default(bool?), double? price = default(double?), string quantityInputMethod = default(string), string itemClassCode = default(string), int? preregisteredQuantity = default(int?), ComGkSoftwarePosApiModelDomAppServicesTransactionPosUOMItemDoKey itemKey = default(ComGkSoftwarePosApiModelDomAppServicesTransactionPosUOMItemDoKey), string usedBarcode = default(string), ComGkSoftwarePosApiServiceTransactionLimitExceedResult limitExceedResult = default(ComGkSoftwarePosApiServiceTransactionLimitExceedResult), List<ComGkSoftwarePosFlowLibsTransactionDiscountIconList> discountIconList = default(List<ComGkSoftwarePosFlowLibsTransactionDiscountIconList>), ComGkSoftwarePosApiModelConfigComponentServerPrepaidTypePrepaidType prepaidType = default(ComGkSoftwarePosApiModelConfigComponentServerPrepaidTypePrepaidType), bool? hasInvalidQuantity = default(bool?), int? packagePriceQuantity = default(int?), bool? comboMealItem = default(bool?), double? originalPositionAmount = default(double?), string xXCustom08 = default(string), string xXCustom10 = default(string), string xXCustom09 = default(string), string xXCustom07 = default(string), string xXCustom05 = default(string), string xXCustom06 = default(string), string xXCustom11 = default(string), string xXCustom12 = default(string), string xXCustom13 = default(string), string xXCustom14 = default(string), string xXCustom15 = default(string), string xXCustom03 = default(string), string xXCustom02 = default(string), string xXCustom04 = default(string), string xXCustom01 = default(string))
        {
            // to ensure "additionalEntries" is required (not null)
            if (additionalEntries == null)
            {
                throw new InvalidDataException("additionalEntries is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.AdditionalEntries = additionalEntries;
            }
            // to ensure "statusOk" is required (not null)
            if (statusOk == null)
            {
                throw new InvalidDataException("statusOk is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.StatusOk = statusOk;
            }
            // to ensure "forcePriceInput" is required (not null)
            if (forcePriceInput == null)
            {
                throw new InvalidDataException("forcePriceInput is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.ForcePriceInput = forcePriceInput;
            }
            // to ensure "forceQuantityInput" is required (not null)
            if (forceQuantityInput == null)
            {
                throw new InvalidDataException("forceQuantityInput is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.ForceQuantityInput = forceQuantityInput;
            }
            // to ensure "priceInputSignal" is required (not null)
            if (priceInputSignal == null)
            {
                throw new InvalidDataException("priceInputSignal is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.PriceInputSignal = priceInputSignal;
            }
            // to ensure "quantityInputSignal" is required (not null)
            if (quantityInputSignal == null)
            {
                throw new InvalidDataException("quantityInputSignal is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.QuantityInputSignal = quantityInputSignal;
            }
            // to ensure "promotionTriggerSignal" is required (not null)
            if (promotionTriggerSignal == null)
            {
                throw new InvalidDataException("promotionTriggerSignal is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.PromotionTriggerSignal = promotionTriggerSignal;
            }
            // to ensure "promotionTriggerSignalType" is required (not null)
            if (promotionTriggerSignalType == null)
            {
                throw new InvalidDataException("promotionTriggerSignalType is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.PromotionTriggerSignalType = promotionTriggerSignalType;
            }
            // to ensure "prepaidItem" is required (not null)
            if (prepaidItem == null)
            {
                throw new InvalidDataException("prepaidItem is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.PrepaidItem = prepaidItem;
            }
            // to ensure "hasLinkedItems" is required (not null)
            if (hasLinkedItems == null)
            {
                throw new InvalidDataException("hasLinkedItems is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.HasLinkedItems = hasLinkedItems;
            }
            // to ensure "forceReturnReasonInput" is required (not null)
            if (forceReturnReasonInput == null)
            {
                throw new InvalidDataException("forceReturnReasonInput is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.ForceReturnReasonInput = forceReturnReasonInput;
            }
            // to ensure "forceSerialNumberInput" is required (not null)
            if (forceSerialNumberInput == null)
            {
                throw new InvalidDataException("forceSerialNumberInput is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.ForceSerialNumberInput = forceSerialNumberInput;
            }
            // to ensure "variantItemsAvailable" is required (not null)
            if (variantItemsAvailable == null)
            {
                throw new InvalidDataException("variantItemsAvailable is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.VariantItemsAvailable = variantItemsAvailable;
            }
            // to ensure "emptiesReturn" is required (not null)
            if (emptiesReturn == null)
            {
                throw new InvalidDataException("emptiesReturn is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.EmptiesReturn = emptiesReturn;
            }
            // to ensure "accumulateExistingQuantity" is required (not null)
            if (accumulateExistingQuantity == null)
            {
                throw new InvalidDataException("accumulateExistingQuantity is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.AccumulateExistingQuantity = accumulateExistingQuantity;
            }
            // to ensure "price" is required (not null)
            if (price == null)
            {
                throw new InvalidDataException("price is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.Price = price;
            }
            // to ensure "hasInvalidQuantity" is required (not null)
            if (hasInvalidQuantity == null)
            {
                throw new InvalidDataException("hasInvalidQuantity is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.HasInvalidQuantity = hasInvalidQuantity;
            }
            // to ensure "comboMealItem" is required (not null)
            if (comboMealItem == null)
            {
                throw new InvalidDataException("comboMealItem is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationResult and cannot be null");
            }
            else
            {
                this.ComboMealItem = comboMealItem;
            }
            this.PrimaryEntry = primaryEntry;
            this.Filtered = filtered;
            this.Failure = failure;
            this.MainPOSItemId = mainPOSItemId;
            this.PosItemId = posItemId;
            this.ItemId = itemId;
            this.ItemName = itemName;
            this.ItemDescription = itemDescription;
            this.ItemTare = itemTare;
            this.SalesRestrictions = salesRestrictions;
            this.SalesRestrictionList = salesRestrictionList;
            this.ReasonResult = reasonResult;
            this.QuantityInputMethod = quantityInputMethod;
            this.ItemClassCode = itemClassCode;
            this.PreregisteredQuantity = preregisteredQuantity;
            this.ItemKey = itemKey;
            this.UsedBarcode = usedBarcode;
            this.LimitExceedResult = limitExceedResult;
            this.DiscountIconList = discountIconList;
            this.PrepaidType = prepaidType;
            this.PackagePriceQuantity = packagePriceQuantity;
            this.OriginalPositionAmount = originalPositionAmount;
            this.XXCustom08 = xXCustom08;
            this.XXCustom10 = xXCustom10;
            this.XXCustom09 = xXCustom09;
            this.XXCustom07 = xXCustom07;
            this.XXCustom05 = xXCustom05;
            this.XXCustom06 = xXCustom06;
            this.XXCustom11 = xXCustom11;
            this.XXCustom12 = xXCustom12;
            this.XXCustom13 = xXCustom13;
            this.XXCustom14 = xXCustom14;
            this.XXCustom15 = xXCustom15;
            this.XXCustom03 = xXCustom03;
            this.XXCustom02 = xXCustom02;
            this.XXCustom04 = xXCustom04;
            this.XXCustom01 = xXCustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;The primary transaction result entry.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The primary transaction result entry.&lt;/p&gt;</value>
        [DataMember(Name="primaryEntry", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry PrimaryEntry { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional result entries.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional result entries.&lt;/p&gt;</value>
        [DataMember(Name="additionalEntries", EmitDefaultValue=false)]
        public List<ComGkSoftwarePosApiServiceTransactionTransactionOperationResultEntry> AdditionalEntries { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether the transaction result is filtered. A filtered transaction does not contain the details of a retail transaction object in order to optimize service communication.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether the transaction result is filtered. A filtered transaction does not contain the details of a retail transaction object in order to optimize service communication.&lt;/p&gt;</value>
        [DataMember(Name="filtered", EmitDefaultValue=false)]
        public bool? Filtered { get; set; }

        /// <summary>
        /// &lt;p&gt;Reference to a failure entity in case a failure occurs during a service execution. This field can be used when a managed exception occurs and we still want to synchronize the resulting transaction instead of throwing an exception containing no information on transaction updates.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Reference to a failure entity in case a failure occurs during a service execution. This field can be used when a managed exception occurs and we still want to synchronize the resulting transaction instead of throwing an exception containing no information on transaction updates.&lt;/p&gt;</value>
        [DataMember(Name="failure", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionTransactionOperationFailureResult Failure { get; set; }

        /// <summary>
        /// &lt;p&gt;indicates if the registration could be proceeded without error or callback&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;indicates if the registration could be proceeded without error or callback&lt;/p&gt;</value>
        [DataMember(Name="statusOk", EmitDefaultValue=false)]
        public bool? StatusOk { get; set; }

        /// <summary>
        /// &lt;p&gt;the unique id of this item&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;the unique id of this item&lt;/p&gt;</value>
        [DataMember(Name="mainPOSItemId", EmitDefaultValue=false)]
        public string MainPOSItemId { get; set; }

        /// <summary>
        /// Gets or Sets PosItemId
        /// </summary>
        [DataMember(Name="posItemId", EmitDefaultValue=false)]
        public string PosItemId { get; set; }

        /// <summary>
        /// &lt;p&gt;the item id (may be different than mainPOSItemId)&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;the item id (may be different than mainPOSItemId)&lt;/p&gt;</value>
        [DataMember(Name="itemId", EmitDefaultValue=false)]
        public string ItemId { get; set; }

        /// <summary>
        /// &lt;p&gt;the item name&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;the item name&lt;/p&gt;</value>
        [DataMember(Name="itemName", EmitDefaultValue=false)]
        public string ItemName { get; set; }

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

        /// <summary>
        /// &lt;p&gt;a tare value for this item&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;a tare value for this item&lt;/p&gt;</value>
        [DataMember(Name="itemTare", EmitDefaultValue=false)]
        public double? ItemTare { get; set; }

        /// <summary>
        /// &lt;p&gt;The manually entered price&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The manually entered price&lt;/p&gt;</value>
        [DataMember(Name="forcePriceInput", EmitDefaultValue=false)]
        public bool? ForcePriceInput { get; set; }

        /// <summary>
        /// &lt;p&gt;The manually entered quantity&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The manually entered quantity&lt;/p&gt;</value>
        [DataMember(Name="forceQuantityInput", EmitDefaultValue=false)]
        public bool? ForceQuantityInput { get; set; }

        /// <summary>
        /// &lt;p&gt;The price input signal&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The price input signal&lt;/p&gt;</value>
        [DataMember(Name="priceInputSignal", EmitDefaultValue=false)]
        public bool? PriceInputSignal { get; set; }

        /// <summary>
        /// &lt;p&gt;The quantity input signal&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The quantity input signal&lt;/p&gt;</value>
        [DataMember(Name="quantityInputSignal", EmitDefaultValue=false)]
        public bool? QuantityInputSignal { get; set; }

        /// <summary>
        /// &lt;p&gt;The promotion trigger signal&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The promotion trigger signal&lt;/p&gt;</value>
        [DataMember(Name="promotionTriggerSignal", EmitDefaultValue=false)]
        public bool? PromotionTriggerSignal { get; set; }


        /// <summary>
        /// &lt;p&gt;list of sales restrictions&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;list of sales restrictions&lt;/p&gt;</value>
        [DataMember(Name="salesRestrictions", EmitDefaultValue=false)]
        public List<string> SalesRestrictions { get; set; }

        /// <summary>
        /// &lt;p&gt;The sales restriction list&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The sales restriction list&lt;/p&gt;</value>
        [DataMember(Name="salesRestrictionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareSweeSesApiServerMdSalesRestrictionDtoSoSalesRestrictionSO> SalesRestrictionList { get; set; }

        /// <summary>
        /// &lt;p&gt;not used atm&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;not used atm&lt;/p&gt;</value>
        [DataMember(Name="prepaidItem", EmitDefaultValue=false)]
        public bool? PrepaidItem { get; set; }

        /// <summary>
        /// &lt;p&gt;not used atm&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;not used atm&lt;/p&gt;</value>
        [DataMember(Name="hasLinkedItems", EmitDefaultValue=false)]
        public bool? HasLinkedItems { get; set; }

        /// <summary>
        /// &lt;p&gt;reason objects for selection&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;reason objects for selection&lt;/p&gt;</value>
        [DataMember(Name="reasonResult", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceMasterdataReasonResult ReasonResult { get; set; }

        /// <summary>
        /// &lt;p&gt;ask for return reason&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;ask for return reason&lt;/p&gt;</value>
        [DataMember(Name="forceReturnReasonInput", EmitDefaultValue=false)]
        public bool? ForceReturnReasonInput { get; set; }

        /// <summary>
        /// &lt;p&gt;ask for serial number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;ask for serial number&lt;/p&gt;</value>
        [DataMember(Name="forceSerialNumberInput", EmitDefaultValue=false)]
        public bool? ForceSerialNumberInput { get; set; }

        /// <summary>
        /// &lt;p&gt;indicates if there exist variants and one must be selected&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;indicates if there exist variants and one must be selected&lt;/p&gt;</value>
        [DataMember(Name="variantItemsAvailable", EmitDefaultValue=false)]
        public bool? VariantItemsAvailable { get; set; }

        /// <summary>
        /// &lt;p&gt;The empties return object&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The empties return object&lt;/p&gt;</value>
        [DataMember(Name="emptiesReturn", EmitDefaultValue=false)]
        public bool? EmptiesReturn { get; set; }

        /// <summary>
        /// &lt;p&gt;The accumulate existing quantity&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The accumulate existing quantity&lt;/p&gt;</value>
        [DataMember(Name="accumulateExistingQuantity", EmitDefaultValue=false)]
        public bool? AccumulateExistingQuantity { get; set; }

        /// <summary>
        /// &lt;p&gt;if price could be calculated it is stored in here&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;if price could be calculated it is stored in here&lt;/p&gt;</value>
        [DataMember(Name="price", EmitDefaultValue=false)]
        public double? Price { get; set; }

        /// <summary>
        /// &lt;p&gt;quantity input method of this item&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;quantity input method of this item&lt;/p&gt;</value>
        [DataMember(Name="quantityInputMethod", EmitDefaultValue=false)]
        public string QuantityInputMethod { get; set; }

        /// <summary>
        /// Gets or Sets ItemClassCode
        /// </summary>
        [DataMember(Name="itemClassCode", EmitDefaultValue=false)]
        public string ItemClassCode { get; set; }

        /// <summary>
        /// &lt;p&gt;quantity registered before item registration&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;quantity registered before item registration&lt;/p&gt;</value>
        [DataMember(Name="preregisteredQuantity", EmitDefaultValue=false)]
        public int? PreregisteredQuantity { get; set; }

        /// <summary>
        /// &lt;p&gt;key of the item about to be registered&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;key of the item about to be registered&lt;/p&gt;</value>
        [DataMember(Name="itemKey", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelDomAppServicesTransactionPosUOMItemDoKey ItemKey { get; set; }

        /// <summary>
        /// &lt;p&gt;String - he barcode originally used to register the item&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String - he barcode originally used to register the item&lt;/p&gt;</value>
        [DataMember(Name="usedBarcode", EmitDefaultValue=false)]
        public string UsedBarcode { get; set; }

        /// <summary>
        /// &lt;p&gt;The limit exceed result&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The limit exceed result&lt;/p&gt;</value>
        [DataMember(Name="limitExceedResult", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionLimitExceedResult LimitExceedResult { get; set; }

        /// <summary>
        /// &lt;p&gt;A list of discount item icon info&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A list of discount item icon info&lt;/p&gt;</value>
        [DataMember(Name="discountIconList", EmitDefaultValue=false)]
        public List<ComGkSoftwarePosFlowLibsTransactionDiscountIconList> DiscountIconList { get; set; }

        /// <summary>
        /// &lt;p&gt;The limit exceed action for price difference checks&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The limit exceed action for price difference checks&lt;/p&gt;</value>
        [DataMember(Name="prepaidType", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigComponentServerPrepaidTypePrepaidType PrepaidType { get; set; }

        /// <summary>
        /// &lt;p&gt;The has invalid quantity flag&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The has invalid quantity flag&lt;/p&gt;</value>
        [DataMember(Name="hasInvalidQuantity", EmitDefaultValue=false)]
        public bool? HasInvalidQuantity { get; set; }

        /// <summary>
        /// &lt;p&gt;The quantity for which the unit price is applied to.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The quantity for which the unit price is applied to.&lt;/p&gt;</value>
        [DataMember(Name="packagePriceQuantity", EmitDefaultValue=false)]
        public int? PackagePriceQuantity { get; set; }

        /// <summary>
        /// &lt;p&gt;The register combo meal flag&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The register combo meal flag&lt;/p&gt;</value>
        [DataMember(Name="comboMealItem", EmitDefaultValue=false)]
        public bool? ComboMealItem { get; set; }

        /// <summary>
        /// &lt;p&gt;The position amount from the item barcode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The position amount from the item barcode.&lt;/p&gt;</value>
        [DataMember(Name="originalPositionAmount", EmitDefaultValue=false)]
        public double? OriginalPositionAmount { get; set; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class ComGkSoftwarePosApiServiceTransactionRegistrationResult {\n");
            sb.Append("  PrimaryEntry: ").Append(PrimaryEntry).Append("\n");
            sb.Append("  AdditionalEntries: ").Append(AdditionalEntries).Append("\n");
            sb.Append("  Filtered: ").Append(Filtered).Append("\n");
            sb.Append("  Failure: ").Append(Failure).Append("\n");
            sb.Append("  StatusOk: ").Append(StatusOk).Append("\n");
            sb.Append("  MainPOSItemId: ").Append(MainPOSItemId).Append("\n");
            sb.Append("  PosItemId: ").Append(PosItemId).Append("\n");
            sb.Append("  ItemId: ").Append(ItemId).Append("\n");
            sb.Append("  ItemName: ").Append(ItemName).Append("\n");
            sb.Append("  ItemDescription: ").Append(ItemDescription).Append("\n");
            sb.Append("  ItemTare: ").Append(ItemTare).Append("\n");
            sb.Append("  ForcePriceInput: ").Append(ForcePriceInput).Append("\n");
            sb.Append("  ForceQuantityInput: ").Append(ForceQuantityInput).Append("\n");
            sb.Append("  PriceInputSignal: ").Append(PriceInputSignal).Append("\n");
            sb.Append("  QuantityInputSignal: ").Append(QuantityInputSignal).Append("\n");
            sb.Append("  PromotionTriggerSignal: ").Append(PromotionTriggerSignal).Append("\n");
            sb.Append("  PromotionTriggerSignalType: ").Append(PromotionTriggerSignalType).Append("\n");
            sb.Append("  SalesRestrictions: ").Append(SalesRestrictions).Append("\n");
            sb.Append("  SalesRestrictionList: ").Append(SalesRestrictionList).Append("\n");
            sb.Append("  PrepaidItem: ").Append(PrepaidItem).Append("\n");
            sb.Append("  HasLinkedItems: ").Append(HasLinkedItems).Append("\n");
            sb.Append("  ReasonResult: ").Append(ReasonResult).Append("\n");
            sb.Append("  ForceReturnReasonInput: ").Append(ForceReturnReasonInput).Append("\n");
            sb.Append("  ForceSerialNumberInput: ").Append(ForceSerialNumberInput).Append("\n");
            sb.Append("  VariantItemsAvailable: ").Append(VariantItemsAvailable).Append("\n");
            sb.Append("  EmptiesReturn: ").Append(EmptiesReturn).Append("\n");
            sb.Append("  AccumulateExistingQuantity: ").Append(AccumulateExistingQuantity).Append("\n");
            sb.Append("  Price: ").Append(Price).Append("\n");
            sb.Append("  QuantityInputMethod: ").Append(QuantityInputMethod).Append("\n");
            sb.Append("  ItemClassCode: ").Append(ItemClassCode).Append("\n");
            sb.Append("  PreregisteredQuantity: ").Append(PreregisteredQuantity).Append("\n");
            sb.Append("  ItemKey: ").Append(ItemKey).Append("\n");
            sb.Append("  UsedBarcode: ").Append(UsedBarcode).Append("\n");
            sb.Append("  LimitExceedResult: ").Append(LimitExceedResult).Append("\n");
            sb.Append("  DiscountIconList: ").Append(DiscountIconList).Append("\n");
            sb.Append("  PrepaidType: ").Append(PrepaidType).Append("\n");
            sb.Append("  HasInvalidQuantity: ").Append(HasInvalidQuantity).Append("\n");
            sb.Append("  PackagePriceQuantity: ").Append(PackagePriceQuantity).Append("\n");
            sb.Append("  ComboMealItem: ").Append(ComboMealItem).Append("\n");
            sb.Append("  OriginalPositionAmount: ").Append(OriginalPositionAmount).Append("\n");
            sb.Append("  XXCustom08: ").Append(XXCustom08).Append("\n");
            sb.Append("  XXCustom10: ").Append(XXCustom10).Append("\n");
            sb.Append("  XXCustom09: ").Append(XXCustom09).Append("\n");
            sb.Append("  XXCustom07: ").Append(XXCustom07).Append("\n");
            sb.Append("  XXCustom05: ").Append(XXCustom05).Append("\n");
            sb.Append("  XXCustom06: ").Append(XXCustom06).Append("\n");
            sb.Append("  XXCustom11: ").Append(XXCustom11).Append("\n");
            sb.Append("  XXCustom12: ").Append(XXCustom12).Append("\n");
            sb.Append("  XXCustom13: ").Append(XXCustom13).Append("\n");
            sb.Append("  XXCustom14: ").Append(XXCustom14).Append("\n");
            sb.Append("  XXCustom15: ").Append(XXCustom15).Append("\n");
            sb.Append("  XXCustom03: ").Append(XXCustom03).Append("\n");
            sb.Append("  XXCustom02: ").Append(XXCustom02).Append("\n");
            sb.Append("  XXCustom04: ").Append(XXCustom04).Append("\n");
            sb.Append("  XXCustom01: ").Append(XXCustom01).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }
  
        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

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

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

            return 
                (
                    this.PrimaryEntry == input.PrimaryEntry ||
                    (this.PrimaryEntry != null &&
                    this.PrimaryEntry.Equals(input.PrimaryEntry))
                ) && 
                (
                    this.AdditionalEntries == input.AdditionalEntries ||
                    this.AdditionalEntries != null &&
                    this.AdditionalEntries.SequenceEqual(input.AdditionalEntries)
                ) && 
                (
                    this.Filtered == input.Filtered ||
                    (this.Filtered != null &&
                    this.Filtered.Equals(input.Filtered))
                ) && 
                (
                    this.Failure == input.Failure ||
                    (this.Failure != null &&
                    this.Failure.Equals(input.Failure))
                ) && 
                (
                    this.StatusOk == input.StatusOk ||
                    (this.StatusOk != null &&
                    this.StatusOk.Equals(input.StatusOk))
                ) && 
                (
                    this.MainPOSItemId == input.MainPOSItemId ||
                    (this.MainPOSItemId != null &&
                    this.MainPOSItemId.Equals(input.MainPOSItemId))
                ) && 
                (
                    this.PosItemId == input.PosItemId ||
                    (this.PosItemId != null &&
                    this.PosItemId.Equals(input.PosItemId))
                ) && 
                (
                    this.ItemId == input.ItemId ||
                    (this.ItemId != null &&
                    this.ItemId.Equals(input.ItemId))
                ) && 
                (
                    this.ItemName == input.ItemName ||
                    (this.ItemName != null &&
                    this.ItemName.Equals(input.ItemName))
                ) && 
                (
                    this.ItemDescription == input.ItemDescription ||
                    (this.ItemDescription != null &&
                    this.ItemDescription.Equals(input.ItemDescription))
                ) && 
                (
                    this.ItemTare == input.ItemTare ||
                    (this.ItemTare != null &&
                    this.ItemTare.Equals(input.ItemTare))
                ) && 
                (
                    this.ForcePriceInput == input.ForcePriceInput ||
                    (this.ForcePriceInput != null &&
                    this.ForcePriceInput.Equals(input.ForcePriceInput))
                ) && 
                (
                    this.ForceQuantityInput == input.ForceQuantityInput ||
                    (this.ForceQuantityInput != null &&
                    this.ForceQuantityInput.Equals(input.ForceQuantityInput))
                ) && 
                (
                    this.PriceInputSignal == input.PriceInputSignal ||
                    (this.PriceInputSignal != null &&
                    this.PriceInputSignal.Equals(input.PriceInputSignal))
                ) && 
                (
                    this.QuantityInputSignal == input.QuantityInputSignal ||
                    (this.QuantityInputSignal != null &&
                    this.QuantityInputSignal.Equals(input.QuantityInputSignal))
                ) && 
                (
                    this.PromotionTriggerSignal == input.PromotionTriggerSignal ||
                    (this.PromotionTriggerSignal != null &&
                    this.PromotionTriggerSignal.Equals(input.PromotionTriggerSignal))
                ) && 
                (
                    this.PromotionTriggerSignalType == input.PromotionTriggerSignalType ||
                    (this.PromotionTriggerSignalType != null &&
                    this.PromotionTriggerSignalType.Equals(input.PromotionTriggerSignalType))
                ) && 
                (
                    this.SalesRestrictions == input.SalesRestrictions ||
                    this.SalesRestrictions != null &&
                    this.SalesRestrictions.SequenceEqual(input.SalesRestrictions)
                ) && 
                (
                    this.SalesRestrictionList == input.SalesRestrictionList ||
                    this.SalesRestrictionList != null &&
                    this.SalesRestrictionList.SequenceEqual(input.SalesRestrictionList)
                ) && 
                (
                    this.PrepaidItem == input.PrepaidItem ||
                    (this.PrepaidItem != null &&
                    this.PrepaidItem.Equals(input.PrepaidItem))
                ) && 
                (
                    this.HasLinkedItems == input.HasLinkedItems ||
                    (this.HasLinkedItems != null &&
                    this.HasLinkedItems.Equals(input.HasLinkedItems))
                ) && 
                (
                    this.ReasonResult == input.ReasonResult ||
                    (this.ReasonResult != null &&
                    this.ReasonResult.Equals(input.ReasonResult))
                ) && 
                (
                    this.ForceReturnReasonInput == input.ForceReturnReasonInput ||
                    (this.ForceReturnReasonInput != null &&
                    this.ForceReturnReasonInput.Equals(input.ForceReturnReasonInput))
                ) && 
                (
                    this.ForceSerialNumberInput == input.ForceSerialNumberInput ||
                    (this.ForceSerialNumberInput != null &&
                    this.ForceSerialNumberInput.Equals(input.ForceSerialNumberInput))
                ) && 
                (
                    this.VariantItemsAvailable == input.VariantItemsAvailable ||
                    (this.VariantItemsAvailable != null &&
                    this.VariantItemsAvailable.Equals(input.VariantItemsAvailable))
                ) && 
                (
                    this.EmptiesReturn == input.EmptiesReturn ||
                    (this.EmptiesReturn != null &&
                    this.EmptiesReturn.Equals(input.EmptiesReturn))
                ) && 
                (
                    this.AccumulateExistingQuantity == input.AccumulateExistingQuantity ||
                    (this.AccumulateExistingQuantity != null &&
                    this.AccumulateExistingQuantity.Equals(input.AccumulateExistingQuantity))
                ) && 
                (
                    this.Price == input.Price ||
                    (this.Price != null &&
                    this.Price.Equals(input.Price))
                ) && 
                (
                    this.QuantityInputMethod == input.QuantityInputMethod ||
                    (this.QuantityInputMethod != null &&
                    this.QuantityInputMethod.Equals(input.QuantityInputMethod))
                ) && 
                (
                    this.ItemClassCode == input.ItemClassCode ||
                    (this.ItemClassCode != null &&
                    this.ItemClassCode.Equals(input.ItemClassCode))
                ) && 
                (
                    this.PreregisteredQuantity == input.PreregisteredQuantity ||
                    (this.PreregisteredQuantity != null &&
                    this.PreregisteredQuantity.Equals(input.PreregisteredQuantity))
                ) && 
                (
                    this.ItemKey == input.ItemKey ||
                    (this.ItemKey != null &&
                    this.ItemKey.Equals(input.ItemKey))
                ) && 
                (
                    this.UsedBarcode == input.UsedBarcode ||
                    (this.UsedBarcode != null &&
                    this.UsedBarcode.Equals(input.UsedBarcode))
                ) && 
                (
                    this.LimitExceedResult == input.LimitExceedResult ||
                    (this.LimitExceedResult != null &&
                    this.LimitExceedResult.Equals(input.LimitExceedResult))
                ) && 
                (
                    this.DiscountIconList == input.DiscountIconList ||
                    this.DiscountIconList != null &&
                    this.DiscountIconList.SequenceEqual(input.DiscountIconList)
                ) && 
                (
                    this.PrepaidType == input.PrepaidType ||
                    (this.PrepaidType != null &&
                    this.PrepaidType.Equals(input.PrepaidType))
                ) && 
                (
                    this.HasInvalidQuantity == input.HasInvalidQuantity ||
                    (this.HasInvalidQuantity != null &&
                    this.HasInvalidQuantity.Equals(input.HasInvalidQuantity))
                ) && 
                (
                    this.PackagePriceQuantity == input.PackagePriceQuantity ||
                    (this.PackagePriceQuantity != null &&
                    this.PackagePriceQuantity.Equals(input.PackagePriceQuantity))
                ) && 
                (
                    this.ComboMealItem == input.ComboMealItem ||
                    (this.ComboMealItem != null &&
                    this.ComboMealItem.Equals(input.ComboMealItem))
                ) && 
                (
                    this.OriginalPositionAmount == input.OriginalPositionAmount ||
                    (this.OriginalPositionAmount != null &&
                    this.OriginalPositionAmount.Equals(input.OriginalPositionAmount))
                ) && 
                (
                    this.XXCustom08 == input.XXCustom08 ||
                    (this.XXCustom08 != null &&
                    this.XXCustom08.Equals(input.XXCustom08))
                ) && 
                (
                    this.XXCustom10 == input.XXCustom10 ||
                    (this.XXCustom10 != null &&
                    this.XXCustom10.Equals(input.XXCustom10))
                ) && 
                (
                    this.XXCustom09 == input.XXCustom09 ||
                    (this.XXCustom09 != null &&
                    this.XXCustom09.Equals(input.XXCustom09))
                ) && 
                (
                    this.XXCustom07 == input.XXCustom07 ||
                    (this.XXCustom07 != null &&
                    this.XXCustom07.Equals(input.XXCustom07))
                ) && 
                (
                    this.XXCustom05 == input.XXCustom05 ||
                    (this.XXCustom05 != null &&
                    this.XXCustom05.Equals(input.XXCustom05))
                ) && 
                (
                    this.XXCustom06 == input.XXCustom06 ||
                    (this.XXCustom06 != null &&
                    this.XXCustom06.Equals(input.XXCustom06))
                ) && 
                (
                    this.XXCustom11 == input.XXCustom11 ||
                    (this.XXCustom11 != null &&
                    this.XXCustom11.Equals(input.XXCustom11))
                ) && 
                (
                    this.XXCustom12 == input.XXCustom12 ||
                    (this.XXCustom12 != null &&
                    this.XXCustom12.Equals(input.XXCustom12))
                ) && 
                (
                    this.XXCustom13 == input.XXCustom13 ||
                    (this.XXCustom13 != null &&
                    this.XXCustom13.Equals(input.XXCustom13))
                ) && 
                (
                    this.XXCustom14 == input.XXCustom14 ||
                    (this.XXCustom14 != null &&
                    this.XXCustom14.Equals(input.XXCustom14))
                ) && 
                (
                    this.XXCustom15 == input.XXCustom15 ||
                    (this.XXCustom15 != null &&
                    this.XXCustom15.Equals(input.XXCustom15))
                ) && 
                (
                    this.XXCustom03 == input.XXCustom03 ||
                    (this.XXCustom03 != null &&
                    this.XXCustom03.Equals(input.XXCustom03))
                ) && 
                (
                    this.XXCustom02 == input.XXCustom02 ||
                    (this.XXCustom02 != null &&
                    this.XXCustom02.Equals(input.XXCustom02))
                ) && 
                (
                    this.XXCustom04 == input.XXCustom04 ||
                    (this.XXCustom04 != null &&
                    this.XXCustom04.Equals(input.XXCustom04))
                ) && 
                (
                    this.XXCustom01 == input.XXCustom01 ||
                    (this.XXCustom01 != null &&
                    this.XXCustom01.Equals(input.XXCustom01))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.PrimaryEntry != null)
                    hashCode = hashCode * 59 + this.PrimaryEntry.GetHashCode();
                if (this.AdditionalEntries != null)
                    hashCode = hashCode * 59 + this.AdditionalEntries.GetHashCode();
                if (this.Filtered != null)
                    hashCode = hashCode * 59 + this.Filtered.GetHashCode();
                if (this.Failure != null)
                    hashCode = hashCode * 59 + this.Failure.GetHashCode();
                if (this.StatusOk != null)
                    hashCode = hashCode * 59 + this.StatusOk.GetHashCode();
                if (this.MainPOSItemId != null)
                    hashCode = hashCode * 59 + this.MainPOSItemId.GetHashCode();
                if (this.PosItemId != null)
                    hashCode = hashCode * 59 + this.PosItemId.GetHashCode();
                if (this.ItemId != null)
                    hashCode = hashCode * 59 + this.ItemId.GetHashCode();
                if (this.ItemName != null)
                    hashCode = hashCode * 59 + this.ItemName.GetHashCode();
                if (this.ItemDescription != null)
                    hashCode = hashCode * 59 + this.ItemDescription.GetHashCode();
                if (this.ItemTare != null)
                    hashCode = hashCode * 59 + this.ItemTare.GetHashCode();
                if (this.ForcePriceInput != null)
                    hashCode = hashCode * 59 + this.ForcePriceInput.GetHashCode();
                if (this.ForceQuantityInput != null)
                    hashCode = hashCode * 59 + this.ForceQuantityInput.GetHashCode();
                if (this.PriceInputSignal != null)
                    hashCode = hashCode * 59 + this.PriceInputSignal.GetHashCode();
                if (this.QuantityInputSignal != null)
                    hashCode = hashCode * 59 + this.QuantityInputSignal.GetHashCode();
                if (this.PromotionTriggerSignal != null)
                    hashCode = hashCode * 59 + this.PromotionTriggerSignal.GetHashCode();
                if (this.PromotionTriggerSignalType != null)
                    hashCode = hashCode * 59 + this.PromotionTriggerSignalType.GetHashCode();
                if (this.SalesRestrictions != null)
                    hashCode = hashCode * 59 + this.SalesRestrictions.GetHashCode();
                if (this.SalesRestrictionList != null)
                    hashCode = hashCode * 59 + this.SalesRestrictionList.GetHashCode();
                if (this.PrepaidItem != null)
                    hashCode = hashCode * 59 + this.PrepaidItem.GetHashCode();
                if (this.HasLinkedItems != null)
                    hashCode = hashCode * 59 + this.HasLinkedItems.GetHashCode();
                if (this.ReasonResult != null)
                    hashCode = hashCode * 59 + this.ReasonResult.GetHashCode();
                if (this.ForceReturnReasonInput != null)
                    hashCode = hashCode * 59 + this.ForceReturnReasonInput.GetHashCode();
                if (this.ForceSerialNumberInput != null)
                    hashCode = hashCode * 59 + this.ForceSerialNumberInput.GetHashCode();
                if (this.VariantItemsAvailable != null)
                    hashCode = hashCode * 59 + this.VariantItemsAvailable.GetHashCode();
                if (this.EmptiesReturn != null)
                    hashCode = hashCode * 59 + this.EmptiesReturn.GetHashCode();
                if (this.AccumulateExistingQuantity != null)
                    hashCode = hashCode * 59 + this.AccumulateExistingQuantity.GetHashCode();
                if (this.Price != null)
                    hashCode = hashCode * 59 + this.Price.GetHashCode();
                if (this.QuantityInputMethod != null)
                    hashCode = hashCode * 59 + this.QuantityInputMethod.GetHashCode();
                if (this.ItemClassCode != null)
                    hashCode = hashCode * 59 + this.ItemClassCode.GetHashCode();
                if (this.PreregisteredQuantity != null)
                    hashCode = hashCode * 59 + this.PreregisteredQuantity.GetHashCode();
                if (this.ItemKey != null)
                    hashCode = hashCode * 59 + this.ItemKey.GetHashCode();
                if (this.UsedBarcode != null)
                    hashCode = hashCode * 59 + this.UsedBarcode.GetHashCode();
                if (this.LimitExceedResult != null)
                    hashCode = hashCode * 59 + this.LimitExceedResult.GetHashCode();
                if (this.DiscountIconList != null)
                    hashCode = hashCode * 59 + this.DiscountIconList.GetHashCode();
                if (this.PrepaidType != null)
                    hashCode = hashCode * 59 + this.PrepaidType.GetHashCode();
                if (this.HasInvalidQuantity != null)
                    hashCode = hashCode * 59 + this.HasInvalidQuantity.GetHashCode();
                if (this.PackagePriceQuantity != null)
                    hashCode = hashCode * 59 + this.PackagePriceQuantity.GetHashCode();
                if (this.ComboMealItem != null)
                    hashCode = hashCode * 59 + this.ComboMealItem.GetHashCode();
                if (this.OriginalPositionAmount != null)
                    hashCode = hashCode * 59 + this.OriginalPositionAmount.GetHashCode();
                if (this.XXCustom08 != null)
                    hashCode = hashCode * 59 + this.XXCustom08.GetHashCode();
                if (this.XXCustom10 != null)
                    hashCode = hashCode * 59 + this.XXCustom10.GetHashCode();
                if (this.XXCustom09 != null)
                    hashCode = hashCode * 59 + this.XXCustom09.GetHashCode();
                if (this.XXCustom07 != null)
                    hashCode = hashCode * 59 + this.XXCustom07.GetHashCode();
                if (this.XXCustom05 != null)
                    hashCode = hashCode * 59 + this.XXCustom05.GetHashCode();
                if (this.XXCustom06 != null)
                    hashCode = hashCode * 59 + this.XXCustom06.GetHashCode();
                if (this.XXCustom11 != null)
                    hashCode = hashCode * 59 + this.XXCustom11.GetHashCode();
                if (this.XXCustom12 != null)
                    hashCode = hashCode * 59 + this.XXCustom12.GetHashCode();
                if (this.XXCustom13 != null)
                    hashCode = hashCode * 59 + this.XXCustom13.GetHashCode();
                if (this.XXCustom14 != null)
                    hashCode = hashCode * 59 + this.XXCustom14.GetHashCode();
                if (this.XXCustom15 != null)
                    hashCode = hashCode * 59 + this.XXCustom15.GetHashCode();
                if (this.XXCustom03 != null)
                    hashCode = hashCode * 59 + this.XXCustom03.GetHashCode();
                if (this.XXCustom02 != null)
                    hashCode = hashCode * 59 + this.XXCustom02.GetHashCode();
                if (this.XXCustom04 != null)
                    hashCode = hashCode * 59 + this.XXCustom04.GetHashCode();
                if (this.XXCustom01 != null)
                    hashCode = hashCode * 59 + this.XXCustom01.GetHashCode();
                return hashCode;
            }
        }

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

}
