/* 
 * 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>
    /// RegistrationRequest &lt;p&gt;Domain object for Registration Request.&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiServiceTransactionRegistrationRequest :  IEquatable<ComGkSoftwarePosApiServiceTransactionRegistrationRequest>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;price variant to use.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;price variant to use.&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PriceVariantEnum
        {
            
            /// <summary>
            /// Enum Normal for value: Normal
            /// </summary>
            [EnumMember(Value = "Normal")]
            Normal = 1,
            
            /// <summary>
            /// Enum Special for value: Special
            /// </summary>
            [EnumMember(Value = "Special")]
            Special = 2,
            
            /// <summary>
            /// Enum Actual for value: Actual
            /// </summary>
            [EnumMember(Value = "Actual")]
            Actual = 3,
            
            /// <summary>
            /// Enum Group for value: Group
            /// </summary>
            [EnumMember(Value = "Group")]
            Group = 4
        }

        /// <summary>
        /// &lt;p&gt;price variant to use.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;price variant to use.&lt;/p&gt;</value>
        [DataMember(Name="priceVariant", EmitDefaultValue=false)]
        public PriceVariantEnum? PriceVariant { get; set; }
        /// <summary>
        /// &lt;p&gt;The current active scale mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The current active scale mode.&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ScaleModeEnum
        {
            
            /// <summary>
            /// Enum SelfService for value: SelfService
            /// </summary>
            [EnumMember(Value = "SelfService")]
            SelfService = 1,
            
            /// <summary>
            /// Enum Prepackaging for value: Prepackaging
            /// </summary>
            [EnumMember(Value = "Prepackaging")]
            Prepackaging = 2,
            
            /// <summary>
            /// Enum Service for value: Service
            /// </summary>
            [EnumMember(Value = "Service")]
            Service = 3
        }

        /// <summary>
        /// &lt;p&gt;The current active scale mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The current active scale mode.&lt;/p&gt;</value>
        [DataMember(Name="scaleMode", EmitDefaultValue=false)]
        public ScaleModeEnum? ScaleMode { get; set; }
        /// <summary>
        /// &lt;p&gt;The current active scale selling mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The current active scale selling mode.&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ScaleSellingModeEnum
        {
            
            /// <summary>
            /// Enum Standard for value: Standard
            /// </summary>
            [EnumMember(Value = "Standard")]
            Standard = 1,
            
            /// <summary>
            /// Enum Fast for value: Fast
            /// </summary>
            [EnumMember(Value = "Fast")]
            Fast = 2
        }

        /// <summary>
        /// &lt;p&gt;The current active scale selling mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The current active scale selling mode.&lt;/p&gt;</value>
        [DataMember(Name="scaleSellingMode", EmitDefaultValue=false)]
        public ScaleSellingModeEnum? ScaleSellingMode { get; set; }
        /// <summary>
        /// &lt;p&gt;The parameter defines the provider for the item data.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The parameter defines the provider for the item data.&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ItemProviderEnum
        {
            
            /// <summary>
            /// Enum Local for value: Local
            /// </summary>
            [EnumMember(Value = "Local")]
            Local = 1,
            
            /// <summary>
            /// Enum Remote for value: Remote
            /// </summary>
            [EnumMember(Value = "Remote")]
            Remote = 2
        }

        /// <summary>
        /// &lt;p&gt;The parameter defines the provider for the item data.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The parameter defines the provider for the item data.&lt;/p&gt;</value>
        [DataMember(Name="itemProvider", EmitDefaultValue=false)]
        public ItemProviderEnum? ItemProvider { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceTransactionRegistrationRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwarePosApiServiceTransactionRegistrationRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceTransactionRegistrationRequest" /> class.
        /// </summary>
        /// <param name="operationConfiguration">&lt;p&gt;The position operation configuration.&lt;/p&gt;.</param>
        /// <param name="lineItemKey">&lt;p&gt;The line item key the operation refers to.&lt;/p&gt;.</param>
        /// <param name="returnMode">&lt;p&gt;Indicated whether the item should be returned or registered.&lt;/p&gt; (required).</param>
        /// <param name="emptiesReturnMode">&lt;p&gt;Flag indicating client is in empties return mode.&lt;/p&gt; (required).</param>
        /// <param name="createReturnReceipt">&lt;p&gt;This parameter specifies whether a return receipt should be created for returned items.&lt;br /&gt; This has only an impact in case returnMode&#x3D;true.&lt;/p&gt; (required).</param>
        /// <param name="barcode">&lt;p&gt;The barcode of the item to register. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;.</param>
        /// <param name="itemIdentificator">&lt;p&gt;The item identificator. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;.</param>
        /// <param name="wicMode">&lt;p&gt;Wic mode flag.&lt;/p&gt; (required).</param>
        /// <param name="takeOverSetItems">&lt;p&gt;Indicated whether set items should be registered individually or be added to head item.&lt;/p&gt; (required).</param>
        /// <param name="orderMode">&lt;p&gt;The order mode.&lt;/p&gt; (required).</param>
        /// <param name="layawayMode">&lt;p&gt;Indicates whether the layaway mode is active.&lt;/p&gt; (required).</param>
        /// <param name="takeAwaySaleMode">&lt;p&gt;Indicates whether the take away sale mode is active.&lt;/p&gt; (required).</param>
        /// <param name="checkForVariants">&lt;p&gt;Indicates if variant check should be performed.&lt;/p&gt; (required).</param>
        /// <param name="salesRestrictionsCheckNeeded">&lt;p&gt;Indicates if validation process should check sales restrictions.&lt;/p&gt; (required).</param>
        /// <param name="returnReasonRequired">&lt;p&gt;indicates if variant check should be performed.&lt;/p&gt; (required).</param>
        /// <param name="linkedEmptiesItem">&lt;p&gt;Indicates the request is for a linked empties deposit item.&lt;/p&gt; (required).</param>
        /// <param name="closeLineItem">&lt;p&gt;Indicates whether line item should be closed during the registration (used for empties return using deposit collections).&lt;/p&gt; (required).</param>
        /// <param name="getPromoIcons">&lt;p&gt;Indicates whether promo icons should be retrieved.&lt;/p&gt; (required).</param>
        /// <param name="emptiesReturnQuantity">&lt;p&gt;Quantity to be overwritten for deposit item registered as empties during item registration.&lt;/p&gt;.</param>
        /// <param name="priceVariant">&lt;p&gt;price variant to use.&lt;/p&gt;.</param>
        /// <param name="overridingPrice">&lt;p&gt;The overriding price.&lt;/p&gt;.</param>
        /// <param name="overridingQuantity">&lt;p&gt;the overriding quantity.&lt;/p&gt;.</param>
        /// <param name="overridingPositionAmount">&lt;p&gt;The overriding position amount.&lt;/p&gt;.</param>
        /// <param name="weightResult">&lt;p&gt;The weight result from a previously done weighing process (e.g. item required weight input).&lt;/p&gt;.</param>
        /// <param name="doPriceDifferenceLimitCheck">&lt;p&gt;Indicates whether the price difference limit checks should be done or not.&lt;/p&gt; (required).</param>
        /// <param name="priceTypeCode">&lt;p&gt;Price type code (for price change).&lt;/p&gt;.</param>
        /// <param name="setPriceMode">&lt;p&gt;Set price mode (for price change).&lt;/p&gt;.</param>
        /// <param name="reasonCode">&lt;p&gt;A reason code for this request (e.g. reason for returns).&lt;/p&gt;.</param>
        /// <param name="reasonCodeGroupCode">&lt;p&gt;A reason code group code for this request (e.g. reason for returns).&lt;/p&gt;.</param>
        /// <param name="reasonDescription">&lt;p&gt;A reason description for this request (e.g. reason for returns).&lt;/p&gt;.</param>
        /// <param name="reasonParameter">&lt;p&gt;A reason parameter used for handling of salable information.&lt;/p&gt;.</param>
        /// <param name="priceChangeReasonCode">&lt;p&gt;A price change reason code.&lt;/p&gt;.</param>
        /// <param name="priceChangeReasonCodeGroupCode">&lt;p&gt;A price change reason code group code.&lt;/p&gt;.</param>
        /// <param name="priceChangeReasonDescription">&lt;p&gt;A price change reason description.&lt;/p&gt;.</param>
        /// <param name="serialNumber">&lt;p&gt;Serial number to set.&lt;/p&gt;.</param>
        /// <param name="itemTraceableUnitID">&lt;p&gt;A universally unique identifier (min&#x3D;0, max&#x3D;32) used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item.&lt;/p&gt;.</param>
        /// <param name="receiptText">&lt;p&gt;Receipt text to set.&lt;/p&gt;.</param>
        /// <param name="linkedItemRegistrationRequest">&lt;p&gt;Object for linked item information.&lt;/p&gt;.</param>
        /// <param name="externalItemRegistrationRequest">&lt;p&gt;A request to register an external item to transaction.&lt;/p&gt;.</param>
        /// <param name="factor">&lt;p&gt;Double.&lt;/p&gt;.</param>
        /// <param name="activeCustomerOrderId">&lt;p&gt;The active customer order id.&lt;/p&gt;.</param>
        /// <param name="customerSequenceNumber">&lt;p&gt;The customer oder sequence number.&lt;br /&gt; @deprecated use customerOrderSequenceNumber instead.&lt;/p&gt;.</param>
        /// <param name="customerOrderSequenceNumber">&lt;p&gt;The customer order sequence number.&lt;/p&gt;.</param>
        /// <param name="salesOrderTypeCode">&lt;p&gt;The sales order type code.&lt;/p&gt;.</param>
        /// <param name="salesOrderDeliveryTypeCode">&lt;p&gt;The sales order delivery type code.&lt;/p&gt;.</param>
        /// <param name="requestedDeliveryDate">&lt;p&gt;The requested delivery date for the item.&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="itemEntryConfig">&lt;p&gt;ItemEntryConfig - bring config to server side.&lt;/p&gt;.</param>
        /// <param name="salesPersonNumberRequest">&lt;p&gt;Request for Sales Person Number.&lt;/p&gt;.</param>
        /// <param name="alternativeTaxInfos">&lt;p&gt;The alternative tax infos for updating the tax group.&lt;/p&gt;.</param>
        /// <param name="entryMethodCode">&lt;p&gt;The entry method code. It specifies how the action was triggered (keyed, scanned, ...).&lt;/p&gt;.</param>
        /// <param name="scaleTransactionParams">&lt;p&gt;Scale transaction parameters to add to transaction.&lt;/p&gt;.</param>
        /// <param name="keyedOnline">&lt;p&gt;The keyed online state.&lt;/p&gt;.</param>
        /// <param name="postValidationSalesRestrictionIds">&lt;p&gt;The list of post validation sales restriction ids to add to SaleReturnLineItem.&lt;/p&gt; (required).</param>
        /// <param name="promotionTriggerActive">&lt;p&gt;The promotion trigger active state.&lt;/p&gt;.</param>
        /// <param name="lineItemItemType">&lt;p&gt;The qualified line item type.&lt;/p&gt;.</param>
        /// <param name="retailPriceModifierList">&lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;.</param>
        /// <param name="lineItemExtensionList">&lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;.</param>
        /// <param name="printAdditionalLineItemTextLineList">&lt;p&gt;The print list for additional line item text to print.&lt;/p&gt;.</param>
        /// <param name="scaleMode">&lt;p&gt;The current active scale mode.&lt;/p&gt;.</param>
        /// <param name="scaleSellingMode">&lt;p&gt;The current active scale selling mode.&lt;/p&gt;.</param>
        /// <param name="courseNumber">&lt;p&gt;The course Number to be set on line item.&lt;/p&gt;.</param>
        /// <param name="itemProvider">&lt;p&gt;The parameter defines the provider for the item data.&lt;/p&gt;.</param>
        /// <param name="comboMealRegistrationRequest">&lt;p&gt;The parameter consists all information for a combo meal item registration.&lt;/p&gt;.</param>
        /// <param name="appEnablement">appEnablement.</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 ComGkSoftwarePosApiServiceTransactionRegistrationRequest(ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig operationConfiguration = default(ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig), ComGkSoftwarePosApiModelDomAppServicesTransactionRetailTransactionLineItemKey lineItemKey = default(ComGkSoftwarePosApiModelDomAppServicesTransactionRetailTransactionLineItemKey), bool? returnMode = default(bool?), bool? emptiesReturnMode = default(bool?), bool? createReturnReceipt = default(bool?), string barcode = default(string), ComGkSoftwarePosApiServiceTransactionItemIdentificator itemIdentificator = default(ComGkSoftwarePosApiServiceTransactionItemIdentificator), bool? wicMode = default(bool?), bool? takeOverSetItems = default(bool?), bool? orderMode = default(bool?), bool? layawayMode = default(bool?), bool? takeAwaySaleMode = default(bool?), bool? checkForVariants = default(bool?), bool? salesRestrictionsCheckNeeded = default(bool?), bool? returnReasonRequired = default(bool?), bool? linkedEmptiesItem = default(bool?), bool? closeLineItem = default(bool?), bool? getPromoIcons = default(bool?), int? emptiesReturnQuantity = default(int?), PriceVariantEnum? priceVariant = default(PriceVariantEnum?), double? overridingPrice = default(double?), ComGkSoftwarePosApiServiceTransactionQuantityInput overridingQuantity = default(ComGkSoftwarePosApiServiceTransactionQuantityInput), double? overridingPositionAmount = default(double?), ComGkSoftwarePosApiServiceClientHardwareScaleWeightResult weightResult = default(ComGkSoftwarePosApiServiceClientHardwareScaleWeightResult), bool? doPriceDifferenceLimitCheck = default(bool?), string priceTypeCode = default(string), string setPriceMode = default(string), string reasonCode = default(string), string reasonCodeGroupCode = default(string), string reasonDescription = default(string), ComGkSoftwareSweeSesApiServerMdReasonDtoSoReasonParameterSO reasonParameter = default(ComGkSoftwareSweeSesApiServerMdReasonDtoSoReasonParameterSO), string priceChangeReasonCode = default(string), string priceChangeReasonCodeGroupCode = default(string), string priceChangeReasonDescription = default(string), string serialNumber = default(string), string itemTraceableUnitID = default(string), string receiptText = default(string), ComGkSoftwarePosApiServiceTransactionLinkedItemRegistrationRequest linkedItemRegistrationRequest = default(ComGkSoftwarePosApiServiceTransactionLinkedItemRegistrationRequest), ComGkSoftwarePosApiServiceTransactionExternalItemRegistrationRequest externalItemRegistrationRequest = default(ComGkSoftwarePosApiServiceTransactionExternalItemRegistrationRequest), double? factor = default(double?), string activeCustomerOrderId = default(string), int? customerSequenceNumber = default(int?), int? customerOrderSequenceNumber = default(int?), string salesOrderTypeCode = default(string), string salesOrderDeliveryTypeCode = default(string), string requestedDeliveryDate = default(string), ComGkSoftwarePosApiModelConfigProcessFlowsItemEntryConfig itemEntryConfig = default(ComGkSoftwarePosApiModelConfigProcessFlowsItemEntryConfig), ComGkSoftwarePosApiServiceTransactionSalesPersonNumberRequest salesPersonNumberRequest = default(ComGkSoftwarePosApiServiceTransactionSalesPersonNumberRequest), ComGkSoftwarePosApiModelConfigProcessFlowsAlternativeTaxInfos alternativeTaxInfos = default(ComGkSoftwarePosApiModelConfigProcessFlowsAlternativeTaxInfos), string entryMethodCode = default(string), ComGkSoftwarePosApiServiceTransactionScaleTransactionParams scaleTransactionParams = default(ComGkSoftwarePosApiServiceTransactionScaleTransactionParams), bool? keyedOnline = default(bool?), List<string> postValidationSalesRestrictionIds = default(List<string>), bool? promotionTriggerActive = default(bool?), string lineItemItemType = default(string), List<ComGkSoftwarePosApiModelDomAppServicesTransactionExternalRetailPriceModifier> retailPriceModifierList = default(List<ComGkSoftwarePosApiModelDomAppServicesTransactionExternalRetailPriceModifier>), List<ComGkSoftwarePosApiModelDomAppServicesTransactionLineItemExtension> lineItemExtensionList = default(List<ComGkSoftwarePosApiModelDomAppServicesTransactionLineItemExtension>), List<ComGkSoftwarePosApiModelDomAppServicesTransactionPrintAdditionalLineItemTextLine> printAdditionalLineItemTextLineList = default(List<ComGkSoftwarePosApiModelDomAppServicesTransactionPrintAdditionalLineItemTextLine>), ScaleModeEnum? scaleMode = default(ScaleModeEnum?), ScaleSellingModeEnum? scaleSellingMode = default(ScaleSellingModeEnum?), string courseNumber = default(string), ItemProviderEnum? itemProvider = default(ItemProviderEnum?), ComGkSoftwarePosApiServiceTransactionComboMealRegistrationRequest comboMealRegistrationRequest = default(ComGkSoftwarePosApiServiceTransactionComboMealRegistrationRequest), bool? appEnablement = default(bool?), string xXCustom08 = default(string), string xXCustom10 = default(string), string xXCustom09 = default(string), string xXCustom07 = default(string), string xXCustom05 = default(string), string xXCustom06 = default(string), string xXCustom11 = default(string), string xXCustom12 = default(string), string xXCustom13 = default(string), string xXCustom14 = default(string), string xXCustom15 = default(string), string xXCustom03 = default(string), string xXCustom02 = default(string), string xXCustom04 = default(string), string xXCustom01 = default(string))
        {
            // to ensure "returnMode" is required (not null)
            if (returnMode == null)
            {
                throw new InvalidDataException("returnMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.ReturnMode = returnMode;
            }
            // to ensure "emptiesReturnMode" is required (not null)
            if (emptiesReturnMode == null)
            {
                throw new InvalidDataException("emptiesReturnMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.EmptiesReturnMode = emptiesReturnMode;
            }
            // to ensure "createReturnReceipt" is required (not null)
            if (createReturnReceipt == null)
            {
                throw new InvalidDataException("createReturnReceipt is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.CreateReturnReceipt = createReturnReceipt;
            }
            // to ensure "wicMode" is required (not null)
            if (wicMode == null)
            {
                throw new InvalidDataException("wicMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.WicMode = wicMode;
            }
            // to ensure "takeOverSetItems" is required (not null)
            if (takeOverSetItems == null)
            {
                throw new InvalidDataException("takeOverSetItems is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.TakeOverSetItems = takeOverSetItems;
            }
            // to ensure "orderMode" is required (not null)
            if (orderMode == null)
            {
                throw new InvalidDataException("orderMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.OrderMode = orderMode;
            }
            // to ensure "layawayMode" is required (not null)
            if (layawayMode == null)
            {
                throw new InvalidDataException("layawayMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.LayawayMode = layawayMode;
            }
            // to ensure "takeAwaySaleMode" is required (not null)
            if (takeAwaySaleMode == null)
            {
                throw new InvalidDataException("takeAwaySaleMode is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.TakeAwaySaleMode = takeAwaySaleMode;
            }
            // to ensure "checkForVariants" is required (not null)
            if (checkForVariants == null)
            {
                throw new InvalidDataException("checkForVariants is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.CheckForVariants = checkForVariants;
            }
            // to ensure "salesRestrictionsCheckNeeded" is required (not null)
            if (salesRestrictionsCheckNeeded == null)
            {
                throw new InvalidDataException("salesRestrictionsCheckNeeded is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.SalesRestrictionsCheckNeeded = salesRestrictionsCheckNeeded;
            }
            // to ensure "returnReasonRequired" is required (not null)
            if (returnReasonRequired == null)
            {
                throw new InvalidDataException("returnReasonRequired is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.ReturnReasonRequired = returnReasonRequired;
            }
            // to ensure "linkedEmptiesItem" is required (not null)
            if (linkedEmptiesItem == null)
            {
                throw new InvalidDataException("linkedEmptiesItem is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.LinkedEmptiesItem = linkedEmptiesItem;
            }
            // to ensure "closeLineItem" is required (not null)
            if (closeLineItem == null)
            {
                throw new InvalidDataException("closeLineItem is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.CloseLineItem = closeLineItem;
            }
            // to ensure "getPromoIcons" is required (not null)
            if (getPromoIcons == null)
            {
                throw new InvalidDataException("getPromoIcons is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.GetPromoIcons = getPromoIcons;
            }
            // to ensure "doPriceDifferenceLimitCheck" is required (not null)
            if (doPriceDifferenceLimitCheck == null)
            {
                throw new InvalidDataException("doPriceDifferenceLimitCheck is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.DoPriceDifferenceLimitCheck = doPriceDifferenceLimitCheck;
            }
            // to ensure "postValidationSalesRestrictionIds" is required (not null)
            if (postValidationSalesRestrictionIds == null)
            {
                throw new InvalidDataException("postValidationSalesRestrictionIds is a required property for ComGkSoftwarePosApiServiceTransactionRegistrationRequest and cannot be null");
            }
            else
            {
                this.PostValidationSalesRestrictionIds = postValidationSalesRestrictionIds;
            }
            this.OperationConfiguration = operationConfiguration;
            this.LineItemKey = lineItemKey;
            this.Barcode = barcode;
            this.ItemIdentificator = itemIdentificator;
            this.EmptiesReturnQuantity = emptiesReturnQuantity;
            this.PriceVariant = priceVariant;
            this.OverridingPrice = overridingPrice;
            this.OverridingQuantity = overridingQuantity;
            this.OverridingPositionAmount = overridingPositionAmount;
            this.WeightResult = weightResult;
            this.PriceTypeCode = priceTypeCode;
            this.SetPriceMode = setPriceMode;
            this.ReasonCode = reasonCode;
            this.ReasonCodeGroupCode = reasonCodeGroupCode;
            this.ReasonDescription = reasonDescription;
            this.ReasonParameter = reasonParameter;
            this.PriceChangeReasonCode = priceChangeReasonCode;
            this.PriceChangeReasonCodeGroupCode = priceChangeReasonCodeGroupCode;
            this.PriceChangeReasonDescription = priceChangeReasonDescription;
            this.SerialNumber = serialNumber;
            this.ItemTraceableUnitID = itemTraceableUnitID;
            this.ReceiptText = receiptText;
            this.LinkedItemRegistrationRequest = linkedItemRegistrationRequest;
            this.ExternalItemRegistrationRequest = externalItemRegistrationRequest;
            this.Factor = factor;
            this.ActiveCustomerOrderId = activeCustomerOrderId;
            this.CustomerSequenceNumber = customerSequenceNumber;
            this.CustomerOrderSequenceNumber = customerOrderSequenceNumber;
            this.SalesOrderTypeCode = salesOrderTypeCode;
            this.SalesOrderDeliveryTypeCode = salesOrderDeliveryTypeCode;
            this.RequestedDeliveryDate = requestedDeliveryDate;
            this.ItemEntryConfig = itemEntryConfig;
            this.SalesPersonNumberRequest = salesPersonNumberRequest;
            this.AlternativeTaxInfos = alternativeTaxInfos;
            this.EntryMethodCode = entryMethodCode;
            this.ScaleTransactionParams = scaleTransactionParams;
            this.KeyedOnline = keyedOnline;
            this.PromotionTriggerActive = promotionTriggerActive;
            this.LineItemItemType = lineItemItemType;
            this.RetailPriceModifierList = retailPriceModifierList;
            this.LineItemExtensionList = lineItemExtensionList;
            this.PrintAdditionalLineItemTextLineList = printAdditionalLineItemTextLineList;
            this.ScaleMode = scaleMode;
            this.ScaleSellingMode = scaleSellingMode;
            this.CourseNumber = courseNumber;
            this.ItemProvider = itemProvider;
            this.ComboMealRegistrationRequest = comboMealRegistrationRequest;
            this.AppEnablement = appEnablement;
            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 position operation configuration.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The position operation configuration.&lt;/p&gt;</value>
        [DataMember(Name="operationConfiguration", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig OperationConfiguration { get; set; }

        /// <summary>
        /// &lt;p&gt;The line item key the operation refers to.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The line item key the operation refers to.&lt;/p&gt;</value>
        [DataMember(Name="lineItemKey", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelDomAppServicesTransactionRetailTransactionLineItemKey LineItemKey { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicated whether the item should be returned or registered.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicated whether the item should be returned or registered.&lt;/p&gt;</value>
        [DataMember(Name="returnMode", EmitDefaultValue=false)]
        public bool? ReturnMode { get; set; }

        /// <summary>
        /// &lt;p&gt;Flag indicating client is in empties return mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Flag indicating client is in empties return mode.&lt;/p&gt;</value>
        [DataMember(Name="emptiesReturnMode", EmitDefaultValue=false)]
        public bool? EmptiesReturnMode { get; set; }

        /// <summary>
        /// &lt;p&gt;This parameter specifies whether a return receipt should be created for returned items.&lt;br /&gt; This has only an impact in case returnMode&#x3D;true.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This parameter specifies whether a return receipt should be created for returned items.&lt;br /&gt; This has only an impact in case returnMode&#x3D;true.&lt;/p&gt;</value>
        [DataMember(Name="createReturnReceipt", EmitDefaultValue=false)]
        public bool? CreateReturnReceipt { get; set; }

        /// <summary>
        /// &lt;p&gt;The barcode of the item to register. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The barcode of the item to register. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;</value>
        [DataMember(Name="barcode", EmitDefaultValue=false)]
        public string Barcode { get; set; }

        /// <summary>
        /// &lt;p&gt;The item identificator. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The item identificator. At least the barcode OR the itemIdentificator are mandatory request attributes.&lt;/p&gt;</value>
        [DataMember(Name="itemIdentificator", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionItemIdentificator ItemIdentificator { get; set; }

        /// <summary>
        /// &lt;p&gt;Wic mode flag.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Wic mode flag.&lt;/p&gt;</value>
        [DataMember(Name="wicMode", EmitDefaultValue=false)]
        public bool? WicMode { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicated whether set items should be registered individually or be added to head item.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicated whether set items should be registered individually or be added to head item.&lt;/p&gt;</value>
        [DataMember(Name="takeOverSetItems", EmitDefaultValue=false)]
        public bool? TakeOverSetItems { get; set; }

        /// <summary>
        /// &lt;p&gt;The order mode.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The order mode.&lt;/p&gt;</value>
        [DataMember(Name="orderMode", EmitDefaultValue=false)]
        public bool? OrderMode { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether the layaway mode is active.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether the layaway mode is active.&lt;/p&gt;</value>
        [DataMember(Name="layawayMode", EmitDefaultValue=false)]
        public bool? LayawayMode { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether the take away sale mode is active.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether the take away sale mode is active.&lt;/p&gt;</value>
        [DataMember(Name="takeAwaySaleMode", EmitDefaultValue=false)]
        public bool? TakeAwaySaleMode { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates if variant check should be performed.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates if variant check should be performed.&lt;/p&gt;</value>
        [DataMember(Name="checkForVariants", EmitDefaultValue=false)]
        public bool? CheckForVariants { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates if validation process should check sales restrictions.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates if validation process should check sales restrictions.&lt;/p&gt;</value>
        [DataMember(Name="salesRestrictionsCheckNeeded", EmitDefaultValue=false)]
        public bool? SalesRestrictionsCheckNeeded { get; set; }

        /// <summary>
        /// &lt;p&gt;indicates if variant check should be performed.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;indicates if variant check should be performed.&lt;/p&gt;</value>
        [DataMember(Name="returnReasonRequired", EmitDefaultValue=false)]
        public bool? ReturnReasonRequired { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates the request is for a linked empties deposit item.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates the request is for a linked empties deposit item.&lt;/p&gt;</value>
        [DataMember(Name="linkedEmptiesItem", EmitDefaultValue=false)]
        public bool? LinkedEmptiesItem { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether line item should be closed during the registration (used for empties return using deposit collections).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether line item should be closed during the registration (used for empties return using deposit collections).&lt;/p&gt;</value>
        [DataMember(Name="closeLineItem", EmitDefaultValue=false)]
        public bool? CloseLineItem { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether promo icons should be retrieved.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether promo icons should be retrieved.&lt;/p&gt;</value>
        [DataMember(Name="getPromoIcons", EmitDefaultValue=false)]
        public bool? GetPromoIcons { get; set; }

        /// <summary>
        /// &lt;p&gt;Quantity to be overwritten for deposit item registered as empties during item registration.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Quantity to be overwritten for deposit item registered as empties during item registration.&lt;/p&gt;</value>
        [DataMember(Name="emptiesReturnQuantity", EmitDefaultValue=false)]
        public int? EmptiesReturnQuantity { get; set; }


        /// <summary>
        /// &lt;p&gt;The overriding price.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The overriding price.&lt;/p&gt;</value>
        [DataMember(Name="overridingPrice", EmitDefaultValue=false)]
        public double? OverridingPrice { get; set; }

        /// <summary>
        /// &lt;p&gt;the overriding quantity.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;the overriding quantity.&lt;/p&gt;</value>
        [DataMember(Name="overridingQuantity", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionQuantityInput OverridingQuantity { get; set; }

        /// <summary>
        /// &lt;p&gt;The overriding position amount.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The overriding position amount.&lt;/p&gt;</value>
        [DataMember(Name="overridingPositionAmount", EmitDefaultValue=false)]
        public double? OverridingPositionAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;The weight result from a previously done weighing process (e.g. item required weight input).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The weight result from a previously done weighing process (e.g. item required weight input).&lt;/p&gt;</value>
        [DataMember(Name="weightResult", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceClientHardwareScaleWeightResult WeightResult { get; set; }

        /// <summary>
        /// &lt;p&gt;Indicates whether the price difference limit checks should be done or not.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Indicates whether the price difference limit checks should be done or not.&lt;/p&gt;</value>
        [DataMember(Name="doPriceDifferenceLimitCheck", EmitDefaultValue=false)]
        public bool? DoPriceDifferenceLimitCheck { get; set; }

        /// <summary>
        /// &lt;p&gt;Price type code (for price change).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Price type code (for price change).&lt;/p&gt;</value>
        [DataMember(Name="priceTypeCode", EmitDefaultValue=false)]
        public string PriceTypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;Set price mode (for price change).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Set price mode (for price change).&lt;/p&gt;</value>
        [DataMember(Name="setPriceMode", EmitDefaultValue=false)]
        public string SetPriceMode { get; set; }

        /// <summary>
        /// &lt;p&gt;A reason code for this request (e.g. reason for returns).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A reason code for this request (e.g. reason for returns).&lt;/p&gt;</value>
        [DataMember(Name="reasonCode", EmitDefaultValue=false)]
        public string ReasonCode { get; set; }

        /// <summary>
        /// &lt;p&gt;A reason code group code for this request (e.g. reason for returns).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A reason code group code for this request (e.g. reason for returns).&lt;/p&gt;</value>
        [DataMember(Name="reasonCodeGroupCode", EmitDefaultValue=false)]
        public string ReasonCodeGroupCode { get; set; }

        /// <summary>
        /// &lt;p&gt;A reason description for this request (e.g. reason for returns).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A reason description for this request (e.g. reason for returns).&lt;/p&gt;</value>
        [DataMember(Name="reasonDescription", EmitDefaultValue=false)]
        public string ReasonDescription { get; set; }

        /// <summary>
        /// &lt;p&gt;A reason parameter used for handling of salable information.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A reason parameter used for handling of salable information.&lt;/p&gt;</value>
        [DataMember(Name="reasonParameter", EmitDefaultValue=false)]
        public ComGkSoftwareSweeSesApiServerMdReasonDtoSoReasonParameterSO ReasonParameter { get; set; }

        /// <summary>
        /// &lt;p&gt;A price change reason code.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A price change reason code.&lt;/p&gt;</value>
        [DataMember(Name="priceChangeReasonCode", EmitDefaultValue=false)]
        public string PriceChangeReasonCode { get; set; }

        /// <summary>
        /// &lt;p&gt;A price change reason code group code.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A price change reason code group code.&lt;/p&gt;</value>
        [DataMember(Name="priceChangeReasonCodeGroupCode", EmitDefaultValue=false)]
        public string PriceChangeReasonCodeGroupCode { get; set; }

        /// <summary>
        /// &lt;p&gt;A price change reason description.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A price change reason description.&lt;/p&gt;</value>
        [DataMember(Name="priceChangeReasonDescription", EmitDefaultValue=false)]
        public string PriceChangeReasonDescription { get; set; }

        /// <summary>
        /// &lt;p&gt;Serial number to set.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Serial number to set.&lt;/p&gt;</value>
        [DataMember(Name="serialNumber", EmitDefaultValue=false)]
        public string SerialNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;A universally unique identifier (min&#x3D;0, max&#x3D;32) used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A universally unique identifier (min&#x3D;0, max&#x3D;32) used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item.&lt;/p&gt;</value>
        [DataMember(Name="itemTraceableUnitID", EmitDefaultValue=false)]
        public string ItemTraceableUnitID { get; set; }

        /// <summary>
        /// &lt;p&gt;Receipt text to set.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Receipt text to set.&lt;/p&gt;</value>
        [DataMember(Name="receiptText", EmitDefaultValue=false)]
        public string ReceiptText { get; set; }

        /// <summary>
        /// &lt;p&gt;Object for linked item information.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Object for linked item information.&lt;/p&gt;</value>
        [DataMember(Name="linkedItemRegistrationRequest", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionLinkedItemRegistrationRequest LinkedItemRegistrationRequest { get; set; }

        /// <summary>
        /// &lt;p&gt;A request to register an external item to transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A request to register an external item to transaction.&lt;/p&gt;</value>
        [DataMember(Name="externalItemRegistrationRequest", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionExternalItemRegistrationRequest ExternalItemRegistrationRequest { get; set; }

        /// <summary>
        /// &lt;p&gt;Double.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Double.&lt;/p&gt;</value>
        [DataMember(Name="factor", EmitDefaultValue=false)]
        public double? Factor { get; set; }

        /// <summary>
        /// &lt;p&gt;The active customer order id.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The active customer order id.&lt;/p&gt;</value>
        [DataMember(Name="activeCustomerOrderId", EmitDefaultValue=false)]
        public string ActiveCustomerOrderId { get; set; }

        /// <summary>
        /// &lt;p&gt;The customer oder sequence number.&lt;br /&gt; @deprecated use customerOrderSequenceNumber instead.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The customer oder sequence number.&lt;br /&gt; @deprecated use customerOrderSequenceNumber instead.&lt;/p&gt;</value>
        [DataMember(Name="customerSequenceNumber", EmitDefaultValue=false)]
        public int? CustomerSequenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;The customer order sequence number.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The customer order sequence number.&lt;/p&gt;</value>
        [DataMember(Name="customerOrderSequenceNumber", EmitDefaultValue=false)]
        public int? CustomerOrderSequenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;The sales order type code.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The sales order type code.&lt;/p&gt;</value>
        [DataMember(Name="salesOrderTypeCode", EmitDefaultValue=false)]
        public string SalesOrderTypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;The sales order delivery type code.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The sales order delivery type code.&lt;/p&gt;</value>
        [DataMember(Name="salesOrderDeliveryTypeCode", EmitDefaultValue=false)]
        public string SalesOrderDeliveryTypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;The requested delivery date for the item.&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>&lt;p&gt;The requested delivery date for the item.&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="requestedDeliveryDate", EmitDefaultValue=false)]
        public string RequestedDeliveryDate { get; set; }

        /// <summary>
        /// &lt;p&gt;ItemEntryConfig - bring config to server side.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;ItemEntryConfig - bring config to server side.&lt;/p&gt;</value>
        [DataMember(Name="itemEntryConfig", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigProcessFlowsItemEntryConfig ItemEntryConfig { get; set; }

        /// <summary>
        /// &lt;p&gt;Request for Sales Person Number.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Request for Sales Person Number.&lt;/p&gt;</value>
        [DataMember(Name="salesPersonNumberRequest", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionSalesPersonNumberRequest SalesPersonNumberRequest { get; set; }

        /// <summary>
        /// &lt;p&gt;The alternative tax infos for updating the tax group.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The alternative tax infos for updating the tax group.&lt;/p&gt;</value>
        [DataMember(Name="alternativeTaxInfos", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigProcessFlowsAlternativeTaxInfos AlternativeTaxInfos { get; set; }

        /// <summary>
        /// &lt;p&gt;The entry method code. It specifies how the action was triggered (keyed, scanned, ...).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The entry method code. It specifies how the action was triggered (keyed, scanned, ...).&lt;/p&gt;</value>
        [DataMember(Name="entryMethodCode", EmitDefaultValue=false)]
        public string EntryMethodCode { get; set; }

        /// <summary>
        /// &lt;p&gt;Scale transaction parameters to add to transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Scale transaction parameters to add to transaction.&lt;/p&gt;</value>
        [DataMember(Name="scaleTransactionParams", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionScaleTransactionParams ScaleTransactionParams { get; set; }

        /// <summary>
        /// &lt;p&gt;The keyed online state.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The keyed online state.&lt;/p&gt;</value>
        [DataMember(Name="keyedOnline", EmitDefaultValue=false)]
        public bool? KeyedOnline { get; set; }

        /// <summary>
        /// &lt;p&gt;The list of post validation sales restriction ids to add to SaleReturnLineItem.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The list of post validation sales restriction ids to add to SaleReturnLineItem.&lt;/p&gt;</value>
        [DataMember(Name="postValidationSalesRestrictionIds", EmitDefaultValue=false)]
        public List<string> PostValidationSalesRestrictionIds { get; set; }

        /// <summary>
        /// &lt;p&gt;The promotion trigger active state.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The promotion trigger active state.&lt;/p&gt;</value>
        [DataMember(Name="promotionTriggerActive", EmitDefaultValue=false)]
        public bool? PromotionTriggerActive { get; set; }

        /// <summary>
        /// &lt;p&gt;The qualified line item type.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The qualified line item type.&lt;/p&gt;</value>
        [DataMember(Name="lineItemItemType", EmitDefaultValue=false)]
        public string LineItemItemType { get; set; }

        /// <summary>
        /// &lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;</value>
        [DataMember(Name="retailPriceModifierList", EmitDefaultValue=false)]
        public List<ComGkSoftwarePosApiModelDomAppServicesTransactionExternalRetailPriceModifier> RetailPriceModifierList { get; set; }

        /// <summary>
        /// &lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The list of external retail price modifier to add to transaction.&lt;/p&gt;</value>
        [DataMember(Name="lineItemExtensionList", EmitDefaultValue=false)]
        public List<ComGkSoftwarePosApiModelDomAppServicesTransactionLineItemExtension> LineItemExtensionList { get; set; }

        /// <summary>
        /// &lt;p&gt;The print list for additional line item text to print.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The print list for additional line item text to print.&lt;/p&gt;</value>
        [DataMember(Name="printAdditionalLineItemTextLineList", EmitDefaultValue=false)]
        public List<ComGkSoftwarePosApiModelDomAppServicesTransactionPrintAdditionalLineItemTextLine> PrintAdditionalLineItemTextLineList { get; set; }



        /// <summary>
        /// &lt;p&gt;The course Number to be set on line item.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The course Number to be set on line item.&lt;/p&gt;</value>
        [DataMember(Name="courseNumber", EmitDefaultValue=false)]
        public string CourseNumber { get; set; }


        /// <summary>
        /// &lt;p&gt;The parameter consists all information for a combo meal item registration.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The parameter consists all information for a combo meal item registration.&lt;/p&gt;</value>
        [DataMember(Name="comboMealRegistrationRequest", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiServiceTransactionComboMealRegistrationRequest ComboMealRegistrationRequest { get; set; }

        /// <summary>
        /// Gets or Sets AppEnablement
        /// </summary>
        [DataMember(Name="appEnablement", EmitDefaultValue=false)]
        public bool? AppEnablement { 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 ComGkSoftwarePosApiServiceTransactionRegistrationRequest {\n");
            sb.Append("  OperationConfiguration: ").Append(OperationConfiguration).Append("\n");
            sb.Append("  LineItemKey: ").Append(LineItemKey).Append("\n");
            sb.Append("  ReturnMode: ").Append(ReturnMode).Append("\n");
            sb.Append("  EmptiesReturnMode: ").Append(EmptiesReturnMode).Append("\n");
            sb.Append("  CreateReturnReceipt: ").Append(CreateReturnReceipt).Append("\n");
            sb.Append("  Barcode: ").Append(Barcode).Append("\n");
            sb.Append("  ItemIdentificator: ").Append(ItemIdentificator).Append("\n");
            sb.Append("  WicMode: ").Append(WicMode).Append("\n");
            sb.Append("  TakeOverSetItems: ").Append(TakeOverSetItems).Append("\n");
            sb.Append("  OrderMode: ").Append(OrderMode).Append("\n");
            sb.Append("  LayawayMode: ").Append(LayawayMode).Append("\n");
            sb.Append("  TakeAwaySaleMode: ").Append(TakeAwaySaleMode).Append("\n");
            sb.Append("  CheckForVariants: ").Append(CheckForVariants).Append("\n");
            sb.Append("  SalesRestrictionsCheckNeeded: ").Append(SalesRestrictionsCheckNeeded).Append("\n");
            sb.Append("  ReturnReasonRequired: ").Append(ReturnReasonRequired).Append("\n");
            sb.Append("  LinkedEmptiesItem: ").Append(LinkedEmptiesItem).Append("\n");
            sb.Append("  CloseLineItem: ").Append(CloseLineItem).Append("\n");
            sb.Append("  GetPromoIcons: ").Append(GetPromoIcons).Append("\n");
            sb.Append("  EmptiesReturnQuantity: ").Append(EmptiesReturnQuantity).Append("\n");
            sb.Append("  PriceVariant: ").Append(PriceVariant).Append("\n");
            sb.Append("  OverridingPrice: ").Append(OverridingPrice).Append("\n");
            sb.Append("  OverridingQuantity: ").Append(OverridingQuantity).Append("\n");
            sb.Append("  OverridingPositionAmount: ").Append(OverridingPositionAmount).Append("\n");
            sb.Append("  WeightResult: ").Append(WeightResult).Append("\n");
            sb.Append("  DoPriceDifferenceLimitCheck: ").Append(DoPriceDifferenceLimitCheck).Append("\n");
            sb.Append("  PriceTypeCode: ").Append(PriceTypeCode).Append("\n");
            sb.Append("  SetPriceMode: ").Append(SetPriceMode).Append("\n");
            sb.Append("  ReasonCode: ").Append(ReasonCode).Append("\n");
            sb.Append("  ReasonCodeGroupCode: ").Append(ReasonCodeGroupCode).Append("\n");
            sb.Append("  ReasonDescription: ").Append(ReasonDescription).Append("\n");
            sb.Append("  ReasonParameter: ").Append(ReasonParameter).Append("\n");
            sb.Append("  PriceChangeReasonCode: ").Append(PriceChangeReasonCode).Append("\n");
            sb.Append("  PriceChangeReasonCodeGroupCode: ").Append(PriceChangeReasonCodeGroupCode).Append("\n");
            sb.Append("  PriceChangeReasonDescription: ").Append(PriceChangeReasonDescription).Append("\n");
            sb.Append("  SerialNumber: ").Append(SerialNumber).Append("\n");
            sb.Append("  ItemTraceableUnitID: ").Append(ItemTraceableUnitID).Append("\n");
            sb.Append("  ReceiptText: ").Append(ReceiptText).Append("\n");
            sb.Append("  LinkedItemRegistrationRequest: ").Append(LinkedItemRegistrationRequest).Append("\n");
            sb.Append("  ExternalItemRegistrationRequest: ").Append(ExternalItemRegistrationRequest).Append("\n");
            sb.Append("  Factor: ").Append(Factor).Append("\n");
            sb.Append("  ActiveCustomerOrderId: ").Append(ActiveCustomerOrderId).Append("\n");
            sb.Append("  CustomerSequenceNumber: ").Append(CustomerSequenceNumber).Append("\n");
            sb.Append("  CustomerOrderSequenceNumber: ").Append(CustomerOrderSequenceNumber).Append("\n");
            sb.Append("  SalesOrderTypeCode: ").Append(SalesOrderTypeCode).Append("\n");
            sb.Append("  SalesOrderDeliveryTypeCode: ").Append(SalesOrderDeliveryTypeCode).Append("\n");
            sb.Append("  RequestedDeliveryDate: ").Append(RequestedDeliveryDate).Append("\n");
            sb.Append("  ItemEntryConfig: ").Append(ItemEntryConfig).Append("\n");
            sb.Append("  SalesPersonNumberRequest: ").Append(SalesPersonNumberRequest).Append("\n");
            sb.Append("  AlternativeTaxInfos: ").Append(AlternativeTaxInfos).Append("\n");
            sb.Append("  EntryMethodCode: ").Append(EntryMethodCode).Append("\n");
            sb.Append("  ScaleTransactionParams: ").Append(ScaleTransactionParams).Append("\n");
            sb.Append("  KeyedOnline: ").Append(KeyedOnline).Append("\n");
            sb.Append("  PostValidationSalesRestrictionIds: ").Append(PostValidationSalesRestrictionIds).Append("\n");
            sb.Append("  PromotionTriggerActive: ").Append(PromotionTriggerActive).Append("\n");
            sb.Append("  LineItemItemType: ").Append(LineItemItemType).Append("\n");
            sb.Append("  RetailPriceModifierList: ").Append(RetailPriceModifierList).Append("\n");
            sb.Append("  LineItemExtensionList: ").Append(LineItemExtensionList).Append("\n");
            sb.Append("  PrintAdditionalLineItemTextLineList: ").Append(PrintAdditionalLineItemTextLineList).Append("\n");
            sb.Append("  ScaleMode: ").Append(ScaleMode).Append("\n");
            sb.Append("  ScaleSellingMode: ").Append(ScaleSellingMode).Append("\n");
            sb.Append("  CourseNumber: ").Append(CourseNumber).Append("\n");
            sb.Append("  ItemProvider: ").Append(ItemProvider).Append("\n");
            sb.Append("  ComboMealRegistrationRequest: ").Append(ComboMealRegistrationRequest).Append("\n");
            sb.Append("  AppEnablement: ").Append(AppEnablement).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 ComGkSoftwarePosApiServiceTransactionRegistrationRequest);
        }

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

            return 
                (
                    this.OperationConfiguration == input.OperationConfiguration ||
                    (this.OperationConfiguration != null &&
                    this.OperationConfiguration.Equals(input.OperationConfiguration))
                ) && 
                (
                    this.LineItemKey == input.LineItemKey ||
                    (this.LineItemKey != null &&
                    this.LineItemKey.Equals(input.LineItemKey))
                ) && 
                (
                    this.ReturnMode == input.ReturnMode ||
                    (this.ReturnMode != null &&
                    this.ReturnMode.Equals(input.ReturnMode))
                ) && 
                (
                    this.EmptiesReturnMode == input.EmptiesReturnMode ||
                    (this.EmptiesReturnMode != null &&
                    this.EmptiesReturnMode.Equals(input.EmptiesReturnMode))
                ) && 
                (
                    this.CreateReturnReceipt == input.CreateReturnReceipt ||
                    (this.CreateReturnReceipt != null &&
                    this.CreateReturnReceipt.Equals(input.CreateReturnReceipt))
                ) && 
                (
                    this.Barcode == input.Barcode ||
                    (this.Barcode != null &&
                    this.Barcode.Equals(input.Barcode))
                ) && 
                (
                    this.ItemIdentificator == input.ItemIdentificator ||
                    (this.ItemIdentificator != null &&
                    this.ItemIdentificator.Equals(input.ItemIdentificator))
                ) && 
                (
                    this.WicMode == input.WicMode ||
                    (this.WicMode != null &&
                    this.WicMode.Equals(input.WicMode))
                ) && 
                (
                    this.TakeOverSetItems == input.TakeOverSetItems ||
                    (this.TakeOverSetItems != null &&
                    this.TakeOverSetItems.Equals(input.TakeOverSetItems))
                ) && 
                (
                    this.OrderMode == input.OrderMode ||
                    (this.OrderMode != null &&
                    this.OrderMode.Equals(input.OrderMode))
                ) && 
                (
                    this.LayawayMode == input.LayawayMode ||
                    (this.LayawayMode != null &&
                    this.LayawayMode.Equals(input.LayawayMode))
                ) && 
                (
                    this.TakeAwaySaleMode == input.TakeAwaySaleMode ||
                    (this.TakeAwaySaleMode != null &&
                    this.TakeAwaySaleMode.Equals(input.TakeAwaySaleMode))
                ) && 
                (
                    this.CheckForVariants == input.CheckForVariants ||
                    (this.CheckForVariants != null &&
                    this.CheckForVariants.Equals(input.CheckForVariants))
                ) && 
                (
                    this.SalesRestrictionsCheckNeeded == input.SalesRestrictionsCheckNeeded ||
                    (this.SalesRestrictionsCheckNeeded != null &&
                    this.SalesRestrictionsCheckNeeded.Equals(input.SalesRestrictionsCheckNeeded))
                ) && 
                (
                    this.ReturnReasonRequired == input.ReturnReasonRequired ||
                    (this.ReturnReasonRequired != null &&
                    this.ReturnReasonRequired.Equals(input.ReturnReasonRequired))
                ) && 
                (
                    this.LinkedEmptiesItem == input.LinkedEmptiesItem ||
                    (this.LinkedEmptiesItem != null &&
                    this.LinkedEmptiesItem.Equals(input.LinkedEmptiesItem))
                ) && 
                (
                    this.CloseLineItem == input.CloseLineItem ||
                    (this.CloseLineItem != null &&
                    this.CloseLineItem.Equals(input.CloseLineItem))
                ) && 
                (
                    this.GetPromoIcons == input.GetPromoIcons ||
                    (this.GetPromoIcons != null &&
                    this.GetPromoIcons.Equals(input.GetPromoIcons))
                ) && 
                (
                    this.EmptiesReturnQuantity == input.EmptiesReturnQuantity ||
                    (this.EmptiesReturnQuantity != null &&
                    this.EmptiesReturnQuantity.Equals(input.EmptiesReturnQuantity))
                ) && 
                (
                    this.PriceVariant == input.PriceVariant ||
                    (this.PriceVariant != null &&
                    this.PriceVariant.Equals(input.PriceVariant))
                ) && 
                (
                    this.OverridingPrice == input.OverridingPrice ||
                    (this.OverridingPrice != null &&
                    this.OverridingPrice.Equals(input.OverridingPrice))
                ) && 
                (
                    this.OverridingQuantity == input.OverridingQuantity ||
                    (this.OverridingQuantity != null &&
                    this.OverridingQuantity.Equals(input.OverridingQuantity))
                ) && 
                (
                    this.OverridingPositionAmount == input.OverridingPositionAmount ||
                    (this.OverridingPositionAmount != null &&
                    this.OverridingPositionAmount.Equals(input.OverridingPositionAmount))
                ) && 
                (
                    this.WeightResult == input.WeightResult ||
                    (this.WeightResult != null &&
                    this.WeightResult.Equals(input.WeightResult))
                ) && 
                (
                    this.DoPriceDifferenceLimitCheck == input.DoPriceDifferenceLimitCheck ||
                    (this.DoPriceDifferenceLimitCheck != null &&
                    this.DoPriceDifferenceLimitCheck.Equals(input.DoPriceDifferenceLimitCheck))
                ) && 
                (
                    this.PriceTypeCode == input.PriceTypeCode ||
                    (this.PriceTypeCode != null &&
                    this.PriceTypeCode.Equals(input.PriceTypeCode))
                ) && 
                (
                    this.SetPriceMode == input.SetPriceMode ||
                    (this.SetPriceMode != null &&
                    this.SetPriceMode.Equals(input.SetPriceMode))
                ) && 
                (
                    this.ReasonCode == input.ReasonCode ||
                    (this.ReasonCode != null &&
                    this.ReasonCode.Equals(input.ReasonCode))
                ) && 
                (
                    this.ReasonCodeGroupCode == input.ReasonCodeGroupCode ||
                    (this.ReasonCodeGroupCode != null &&
                    this.ReasonCodeGroupCode.Equals(input.ReasonCodeGroupCode))
                ) && 
                (
                    this.ReasonDescription == input.ReasonDescription ||
                    (this.ReasonDescription != null &&
                    this.ReasonDescription.Equals(input.ReasonDescription))
                ) && 
                (
                    this.ReasonParameter == input.ReasonParameter ||
                    (this.ReasonParameter != null &&
                    this.ReasonParameter.Equals(input.ReasonParameter))
                ) && 
                (
                    this.PriceChangeReasonCode == input.PriceChangeReasonCode ||
                    (this.PriceChangeReasonCode != null &&
                    this.PriceChangeReasonCode.Equals(input.PriceChangeReasonCode))
                ) && 
                (
                    this.PriceChangeReasonCodeGroupCode == input.PriceChangeReasonCodeGroupCode ||
                    (this.PriceChangeReasonCodeGroupCode != null &&
                    this.PriceChangeReasonCodeGroupCode.Equals(input.PriceChangeReasonCodeGroupCode))
                ) && 
                (
                    this.PriceChangeReasonDescription == input.PriceChangeReasonDescription ||
                    (this.PriceChangeReasonDescription != null &&
                    this.PriceChangeReasonDescription.Equals(input.PriceChangeReasonDescription))
                ) && 
                (
                    this.SerialNumber == input.SerialNumber ||
                    (this.SerialNumber != null &&
                    this.SerialNumber.Equals(input.SerialNumber))
                ) && 
                (
                    this.ItemTraceableUnitID == input.ItemTraceableUnitID ||
                    (this.ItemTraceableUnitID != null &&
                    this.ItemTraceableUnitID.Equals(input.ItemTraceableUnitID))
                ) && 
                (
                    this.ReceiptText == input.ReceiptText ||
                    (this.ReceiptText != null &&
                    this.ReceiptText.Equals(input.ReceiptText))
                ) && 
                (
                    this.LinkedItemRegistrationRequest == input.LinkedItemRegistrationRequest ||
                    (this.LinkedItemRegistrationRequest != null &&
                    this.LinkedItemRegistrationRequest.Equals(input.LinkedItemRegistrationRequest))
                ) && 
                (
                    this.ExternalItemRegistrationRequest == input.ExternalItemRegistrationRequest ||
                    (this.ExternalItemRegistrationRequest != null &&
                    this.ExternalItemRegistrationRequest.Equals(input.ExternalItemRegistrationRequest))
                ) && 
                (
                    this.Factor == input.Factor ||
                    (this.Factor != null &&
                    this.Factor.Equals(input.Factor))
                ) && 
                (
                    this.ActiveCustomerOrderId == input.ActiveCustomerOrderId ||
                    (this.ActiveCustomerOrderId != null &&
                    this.ActiveCustomerOrderId.Equals(input.ActiveCustomerOrderId))
                ) && 
                (
                    this.CustomerSequenceNumber == input.CustomerSequenceNumber ||
                    (this.CustomerSequenceNumber != null &&
                    this.CustomerSequenceNumber.Equals(input.CustomerSequenceNumber))
                ) && 
                (
                    this.CustomerOrderSequenceNumber == input.CustomerOrderSequenceNumber ||
                    (this.CustomerOrderSequenceNumber != null &&
                    this.CustomerOrderSequenceNumber.Equals(input.CustomerOrderSequenceNumber))
                ) && 
                (
                    this.SalesOrderTypeCode == input.SalesOrderTypeCode ||
                    (this.SalesOrderTypeCode != null &&
                    this.SalesOrderTypeCode.Equals(input.SalesOrderTypeCode))
                ) && 
                (
                    this.SalesOrderDeliveryTypeCode == input.SalesOrderDeliveryTypeCode ||
                    (this.SalesOrderDeliveryTypeCode != null &&
                    this.SalesOrderDeliveryTypeCode.Equals(input.SalesOrderDeliveryTypeCode))
                ) && 
                (
                    this.RequestedDeliveryDate == input.RequestedDeliveryDate ||
                    (this.RequestedDeliveryDate != null &&
                    this.RequestedDeliveryDate.Equals(input.RequestedDeliveryDate))
                ) && 
                (
                    this.ItemEntryConfig == input.ItemEntryConfig ||
                    (this.ItemEntryConfig != null &&
                    this.ItemEntryConfig.Equals(input.ItemEntryConfig))
                ) && 
                (
                    this.SalesPersonNumberRequest == input.SalesPersonNumberRequest ||
                    (this.SalesPersonNumberRequest != null &&
                    this.SalesPersonNumberRequest.Equals(input.SalesPersonNumberRequest))
                ) && 
                (
                    this.AlternativeTaxInfos == input.AlternativeTaxInfos ||
                    (this.AlternativeTaxInfos != null &&
                    this.AlternativeTaxInfos.Equals(input.AlternativeTaxInfos))
                ) && 
                (
                    this.EntryMethodCode == input.EntryMethodCode ||
                    (this.EntryMethodCode != null &&
                    this.EntryMethodCode.Equals(input.EntryMethodCode))
                ) && 
                (
                    this.ScaleTransactionParams == input.ScaleTransactionParams ||
                    (this.ScaleTransactionParams != null &&
                    this.ScaleTransactionParams.Equals(input.ScaleTransactionParams))
                ) && 
                (
                    this.KeyedOnline == input.KeyedOnline ||
                    (this.KeyedOnline != null &&
                    this.KeyedOnline.Equals(input.KeyedOnline))
                ) && 
                (
                    this.PostValidationSalesRestrictionIds == input.PostValidationSalesRestrictionIds ||
                    this.PostValidationSalesRestrictionIds != null &&
                    this.PostValidationSalesRestrictionIds.SequenceEqual(input.PostValidationSalesRestrictionIds)
                ) && 
                (
                    this.PromotionTriggerActive == input.PromotionTriggerActive ||
                    (this.PromotionTriggerActive != null &&
                    this.PromotionTriggerActive.Equals(input.PromotionTriggerActive))
                ) && 
                (
                    this.LineItemItemType == input.LineItemItemType ||
                    (this.LineItemItemType != null &&
                    this.LineItemItemType.Equals(input.LineItemItemType))
                ) && 
                (
                    this.RetailPriceModifierList == input.RetailPriceModifierList ||
                    this.RetailPriceModifierList != null &&
                    this.RetailPriceModifierList.SequenceEqual(input.RetailPriceModifierList)
                ) && 
                (
                    this.LineItemExtensionList == input.LineItemExtensionList ||
                    this.LineItemExtensionList != null &&
                    this.LineItemExtensionList.SequenceEqual(input.LineItemExtensionList)
                ) && 
                (
                    this.PrintAdditionalLineItemTextLineList == input.PrintAdditionalLineItemTextLineList ||
                    this.PrintAdditionalLineItemTextLineList != null &&
                    this.PrintAdditionalLineItemTextLineList.SequenceEqual(input.PrintAdditionalLineItemTextLineList)
                ) && 
                (
                    this.ScaleMode == input.ScaleMode ||
                    (this.ScaleMode != null &&
                    this.ScaleMode.Equals(input.ScaleMode))
                ) && 
                (
                    this.ScaleSellingMode == input.ScaleSellingMode ||
                    (this.ScaleSellingMode != null &&
                    this.ScaleSellingMode.Equals(input.ScaleSellingMode))
                ) && 
                (
                    this.CourseNumber == input.CourseNumber ||
                    (this.CourseNumber != null &&
                    this.CourseNumber.Equals(input.CourseNumber))
                ) && 
                (
                    this.ItemProvider == input.ItemProvider ||
                    (this.ItemProvider != null &&
                    this.ItemProvider.Equals(input.ItemProvider))
                ) && 
                (
                    this.ComboMealRegistrationRequest == input.ComboMealRegistrationRequest ||
                    (this.ComboMealRegistrationRequest != null &&
                    this.ComboMealRegistrationRequest.Equals(input.ComboMealRegistrationRequest))
                ) && 
                (
                    this.AppEnablement == input.AppEnablement ||
                    (this.AppEnablement != null &&
                    this.AppEnablement.Equals(input.AppEnablement))
                ) && 
                (
                    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.OperationConfiguration != null)
                    hashCode = hashCode * 59 + this.OperationConfiguration.GetHashCode();
                if (this.LineItemKey != null)
                    hashCode = hashCode * 59 + this.LineItemKey.GetHashCode();
                if (this.ReturnMode != null)
                    hashCode = hashCode * 59 + this.ReturnMode.GetHashCode();
                if (this.EmptiesReturnMode != null)
                    hashCode = hashCode * 59 + this.EmptiesReturnMode.GetHashCode();
                if (this.CreateReturnReceipt != null)
                    hashCode = hashCode * 59 + this.CreateReturnReceipt.GetHashCode();
                if (this.Barcode != null)
                    hashCode = hashCode * 59 + this.Barcode.GetHashCode();
                if (this.ItemIdentificator != null)
                    hashCode = hashCode * 59 + this.ItemIdentificator.GetHashCode();
                if (this.WicMode != null)
                    hashCode = hashCode * 59 + this.WicMode.GetHashCode();
                if (this.TakeOverSetItems != null)
                    hashCode = hashCode * 59 + this.TakeOverSetItems.GetHashCode();
                if (this.OrderMode != null)
                    hashCode = hashCode * 59 + this.OrderMode.GetHashCode();
                if (this.LayawayMode != null)
                    hashCode = hashCode * 59 + this.LayawayMode.GetHashCode();
                if (this.TakeAwaySaleMode != null)
                    hashCode = hashCode * 59 + this.TakeAwaySaleMode.GetHashCode();
                if (this.CheckForVariants != null)
                    hashCode = hashCode * 59 + this.CheckForVariants.GetHashCode();
                if (this.SalesRestrictionsCheckNeeded != null)
                    hashCode = hashCode * 59 + this.SalesRestrictionsCheckNeeded.GetHashCode();
                if (this.ReturnReasonRequired != null)
                    hashCode = hashCode * 59 + this.ReturnReasonRequired.GetHashCode();
                if (this.LinkedEmptiesItem != null)
                    hashCode = hashCode * 59 + this.LinkedEmptiesItem.GetHashCode();
                if (this.CloseLineItem != null)
                    hashCode = hashCode * 59 + this.CloseLineItem.GetHashCode();
                if (this.GetPromoIcons != null)
                    hashCode = hashCode * 59 + this.GetPromoIcons.GetHashCode();
                if (this.EmptiesReturnQuantity != null)
                    hashCode = hashCode * 59 + this.EmptiesReturnQuantity.GetHashCode();
                if (this.PriceVariant != null)
                    hashCode = hashCode * 59 + this.PriceVariant.GetHashCode();
                if (this.OverridingPrice != null)
                    hashCode = hashCode * 59 + this.OverridingPrice.GetHashCode();
                if (this.OverridingQuantity != null)
                    hashCode = hashCode * 59 + this.OverridingQuantity.GetHashCode();
                if (this.OverridingPositionAmount != null)
                    hashCode = hashCode * 59 + this.OverridingPositionAmount.GetHashCode();
                if (this.WeightResult != null)
                    hashCode = hashCode * 59 + this.WeightResult.GetHashCode();
                if (this.DoPriceDifferenceLimitCheck != null)
                    hashCode = hashCode * 59 + this.DoPriceDifferenceLimitCheck.GetHashCode();
                if (this.PriceTypeCode != null)
                    hashCode = hashCode * 59 + this.PriceTypeCode.GetHashCode();
                if (this.SetPriceMode != null)
                    hashCode = hashCode * 59 + this.SetPriceMode.GetHashCode();
                if (this.ReasonCode != null)
                    hashCode = hashCode * 59 + this.ReasonCode.GetHashCode();
                if (this.ReasonCodeGroupCode != null)
                    hashCode = hashCode * 59 + this.ReasonCodeGroupCode.GetHashCode();
                if (this.ReasonDescription != null)
                    hashCode = hashCode * 59 + this.ReasonDescription.GetHashCode();
                if (this.ReasonParameter != null)
                    hashCode = hashCode * 59 + this.ReasonParameter.GetHashCode();
                if (this.PriceChangeReasonCode != null)
                    hashCode = hashCode * 59 + this.PriceChangeReasonCode.GetHashCode();
                if (this.PriceChangeReasonCodeGroupCode != null)
                    hashCode = hashCode * 59 + this.PriceChangeReasonCodeGroupCode.GetHashCode();
                if (this.PriceChangeReasonDescription != null)
                    hashCode = hashCode * 59 + this.PriceChangeReasonDescription.GetHashCode();
                if (this.SerialNumber != null)
                    hashCode = hashCode * 59 + this.SerialNumber.GetHashCode();
                if (this.ItemTraceableUnitID != null)
                    hashCode = hashCode * 59 + this.ItemTraceableUnitID.GetHashCode();
                if (this.ReceiptText != null)
                    hashCode = hashCode * 59 + this.ReceiptText.GetHashCode();
                if (this.LinkedItemRegistrationRequest != null)
                    hashCode = hashCode * 59 + this.LinkedItemRegistrationRequest.GetHashCode();
                if (this.ExternalItemRegistrationRequest != null)
                    hashCode = hashCode * 59 + this.ExternalItemRegistrationRequest.GetHashCode();
                if (this.Factor != null)
                    hashCode = hashCode * 59 + this.Factor.GetHashCode();
                if (this.ActiveCustomerOrderId != null)
                    hashCode = hashCode * 59 + this.ActiveCustomerOrderId.GetHashCode();
                if (this.CustomerSequenceNumber != null)
                    hashCode = hashCode * 59 + this.CustomerSequenceNumber.GetHashCode();
                if (this.CustomerOrderSequenceNumber != null)
                    hashCode = hashCode * 59 + this.CustomerOrderSequenceNumber.GetHashCode();
                if (this.SalesOrderTypeCode != null)
                    hashCode = hashCode * 59 + this.SalesOrderTypeCode.GetHashCode();
                if (this.SalesOrderDeliveryTypeCode != null)
                    hashCode = hashCode * 59 + this.SalesOrderDeliveryTypeCode.GetHashCode();
                if (this.RequestedDeliveryDate != null)
                    hashCode = hashCode * 59 + this.RequestedDeliveryDate.GetHashCode();
                if (this.ItemEntryConfig != null)
                    hashCode = hashCode * 59 + this.ItemEntryConfig.GetHashCode();
                if (this.SalesPersonNumberRequest != null)
                    hashCode = hashCode * 59 + this.SalesPersonNumberRequest.GetHashCode();
                if (this.AlternativeTaxInfos != null)
                    hashCode = hashCode * 59 + this.AlternativeTaxInfos.GetHashCode();
                if (this.EntryMethodCode != null)
                    hashCode = hashCode * 59 + this.EntryMethodCode.GetHashCode();
                if (this.ScaleTransactionParams != null)
                    hashCode = hashCode * 59 + this.ScaleTransactionParams.GetHashCode();
                if (this.KeyedOnline != null)
                    hashCode = hashCode * 59 + this.KeyedOnline.GetHashCode();
                if (this.PostValidationSalesRestrictionIds != null)
                    hashCode = hashCode * 59 + this.PostValidationSalesRestrictionIds.GetHashCode();
                if (this.PromotionTriggerActive != null)
                    hashCode = hashCode * 59 + this.PromotionTriggerActive.GetHashCode();
                if (this.LineItemItemType != null)
                    hashCode = hashCode * 59 + this.LineItemItemType.GetHashCode();
                if (this.RetailPriceModifierList != null)
                    hashCode = hashCode * 59 + this.RetailPriceModifierList.GetHashCode();
                if (this.LineItemExtensionList != null)
                    hashCode = hashCode * 59 + this.LineItemExtensionList.GetHashCode();
                if (this.PrintAdditionalLineItemTextLineList != null)
                    hashCode = hashCode * 59 + this.PrintAdditionalLineItemTextLineList.GetHashCode();
                if (this.ScaleMode != null)
                    hashCode = hashCode * 59 + this.ScaleMode.GetHashCode();
                if (this.ScaleSellingMode != null)
                    hashCode = hashCode * 59 + this.ScaleSellingMode.GetHashCode();
                if (this.CourseNumber != null)
                    hashCode = hashCode * 59 + this.CourseNumber.GetHashCode();
                if (this.ItemProvider != null)
                    hashCode = hashCode * 59 + this.ItemProvider.GetHashCode();
                if (this.ComboMealRegistrationRequest != null)
                    hashCode = hashCode * 59 + this.ComboMealRegistrationRequest.GetHashCode();
                if (this.AppEnablement != null)
                    hashCode = hashCode * 59 + this.AppEnablement.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;
        }
    }

}
