/* 
 * 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>
    /// RetailTransactionLineItem &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="externalCustomerOrderID">An external identifier for the related customer order..</param>
        /// <param name="customerOrderSequenceNumber">A unique system assigned identifier for the LineItem of the CustomerOrder. .</param>
        /// <param name="beginDateTimestamp">The start time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="voidFlag">A boolean indicator that tells if this line item is VOIDED or not..</param>
        /// <param name="endDateTimestamp">The end time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="entryMethodCode">A retailer assigned code to denote how the RetailTransactionLineItem was entered at the Workstation. It is filled just for retail transaction line item..</param>
        /// <param name="retailTransactionLineItemTypeCode">A code to denote the type of retail transaction line item, such as Sale/Return, Void, Tender ....</param>
        /// <param name="voidTypeCode">Describes whether the line item was voided immediately after registering it, voided by another line item or internally voided .</param>
        /// <param name="workstationID">id of the workstation where the line item was created.</param>
        /// <param name="workstationTypeCode">type of the workstation where the line item was created.</param>
        /// <param name="keyedOfflineCode">A code that indicates the online/offline state when transaction was completed..</param>
        /// <param name="beginDateTimestampUTC0">The UTC0 start time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="endDateTimestampUTC0">The UTC0 end time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="retailTransactionLineItemAssociationList">list of line item associations.</param>
        /// <param name="retailTransactionLineItemAdditionalParameterList">list of additional parameters.</param>
        /// <param name="retailTransactionLineItemBinaryDataList">list of binary data.</param>
        /// <param name="retailTransactionLineItemI18NTextList">list of translations for line item texts.</param>
        /// <param name="retailTransactionLineItemResourceOverrideList">list of data for line item related authorizations.</param>
        /// <param name="retailTransactionLineItemExtensionList">list of line item extensions.</param>
        /// <param name="retailTransactionLineItemAuditEventList">list of line item audit events.</param>
        /// <param name="xxcustom08">Customizable information.</param>
        /// <param name="xxcustom10">Customizable information.</param>
        /// <param name="xxcustom09">Customizable information.</param>
        /// <param name="xxcustom07">Customizable information.</param>
        /// <param name="xxcustom05">Customizable information.</param>
        /// <param name="xxcustom06">Customizable information.</param>
        /// <param name="xxcustom11">Customizable information.</param>
        /// <param name="xxcustom12">Customizable information.</param>
        /// <param name="xxcustom13">Customizable information.</param>
        /// <param name="xxcustom14">Customizable information.</param>
        /// <param name="xxcustom15">Customizable information.</param>
        /// <param name="xxcustom03">Customizable information.</param>
        /// <param name="xxcustom02">Customizable information.</param>
        /// <param name="xxcustom04">Customizable information.</param>
        /// <param name="saleReturnLineItemList">sale return line item.</param>
        /// <param name="tenderLineItemList">tender line item.</param>
        /// <param name="voidsLineItemList">void line item.</param>
        /// <param name="roundingLineItemList">rounding line item.</param>
        /// <param name="priceModificationLineItemList">transaction related discount.</param>
        /// <param name="loyaltyRewardLineItemList">transaction related bonuspoints.</param>
        /// <param name="workerDiscountLineItemList">worker discount line item.</param>
        /// <param name="taxLineItemList">transaction related tax.</param>
        /// <param name="giftCertificateLineItemList">additional gift certificate data for SaleReturnLineItem, TenderLineItem or VoidsLineItem.</param>
        /// <param name="prepaidLineItemList">additional prepaid data for SaleReturnLineItem or VoidsLineItem.</param>
        /// <param name="retailTransactionLineItemFrequentShopperPointsRedemptionList">additional bonuspoints redemption data.</param>
        /// <param name="additionalBonusDiscountLineItemList">data for additional bonus itemsA type of RETAIL TRANSACTION LINE ITEM that records PCE&#39;s response for the application of a promotion price derivation rule of type &#39;additional bonus&#39;..</param>
        /// <param name="xxcustom01">Customizable information.</param>
        public ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem(ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemKey key = default(ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemKey), string externalCustomerOrderID = default(string), int? customerOrderSequenceNumber = default(int?), string beginDateTimestamp = default(string), bool? voidFlag = default(bool?), string endDateTimestamp = default(string), string entryMethodCode = default(string), string retailTransactionLineItemTypeCode = default(string), string voidTypeCode = default(string), string workstationID = default(string), string workstationTypeCode = default(string), string keyedOfflineCode = default(string), DateTime? beginDateTimestampUTC0 = default(DateTime?), DateTime? endDateTimestampUTC0 = default(DateTime?), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAssociation> retailTransactionLineItemAssociationList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAssociation>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAdditionalParameter> retailTransactionLineItemAdditionalParameterList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAdditionalParameter>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemBinaryData> retailTransactionLineItemBinaryDataList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemBinaryData>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemI18NText> retailTransactionLineItemI18NTextList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemI18NText>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemResourceOverride> retailTransactionLineItemResourceOverrideList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemResourceOverride>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemExtension> retailTransactionLineItemExtensionList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemExtension>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAuditEvent> retailTransactionLineItemAuditEventList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAuditEvent>), 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), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem> saleReturnLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoTenderLineItem> tenderLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoTenderLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoVoidsLineItem> voidsLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoVoidsLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoRoundingLineItem> roundingLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoRoundingLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoPriceModificationLineItem> priceModificationLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoPriceModificationLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoLoyaltyRewardLineItem> loyaltyRewardLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoLoyaltyRewardLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoWorkerDiscountLineItem> workerDiscountLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoWorkerDiscountLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoTaxLineItem> taxLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoTaxLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoGiftCertificateLineItem> giftCertificateLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoGiftCertificateLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoPrepaidLineItem> prepaidLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoPrepaidLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemFrequentShopperPointsRedemption> retailTransactionLineItemFrequentShopperPointsRedemptionList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemFrequentShopperPointsRedemption>), List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusDiscountLineItem> additionalBonusDiscountLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusDiscountLineItem>), string xxcustom01 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            this.ExternalCustomerOrderID = externalCustomerOrderID;
            this.CustomerOrderSequenceNumber = customerOrderSequenceNumber;
            this.BeginDateTimestamp = beginDateTimestamp;
            this.VoidFlag = voidFlag;
            this.EndDateTimestamp = endDateTimestamp;
            this.EntryMethodCode = entryMethodCode;
            this.RetailTransactionLineItemTypeCode = retailTransactionLineItemTypeCode;
            this.VoidTypeCode = voidTypeCode;
            this.WorkstationID = workstationID;
            this.WorkstationTypeCode = workstationTypeCode;
            this.KeyedOfflineCode = keyedOfflineCode;
            this.BeginDateTimestampUTC0 = beginDateTimestampUTC0;
            this.EndDateTimestampUTC0 = endDateTimestampUTC0;
            this.RetailTransactionLineItemAssociationList = retailTransactionLineItemAssociationList;
            this.RetailTransactionLineItemAdditionalParameterList = retailTransactionLineItemAdditionalParameterList;
            this.RetailTransactionLineItemBinaryDataList = retailTransactionLineItemBinaryDataList;
            this.RetailTransactionLineItemI18NTextList = retailTransactionLineItemI18NTextList;
            this.RetailTransactionLineItemResourceOverrideList = retailTransactionLineItemResourceOverrideList;
            this.RetailTransactionLineItemExtensionList = retailTransactionLineItemExtensionList;
            this.RetailTransactionLineItemAuditEventList = retailTransactionLineItemAuditEventList;
            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.SaleReturnLineItemList = saleReturnLineItemList;
            this.TenderLineItemList = tenderLineItemList;
            this.VoidsLineItemList = voidsLineItemList;
            this.RoundingLineItemList = roundingLineItemList;
            this.PriceModificationLineItemList = priceModificationLineItemList;
            this.LoyaltyRewardLineItemList = loyaltyRewardLineItemList;
            this.WorkerDiscountLineItemList = workerDiscountLineItemList;
            this.TaxLineItemList = taxLineItemList;
            this.GiftCertificateLineItemList = giftCertificateLineItemList;
            this.PrepaidLineItemList = prepaidLineItemList;
            this.RetailTransactionLineItemFrequentShopperPointsRedemptionList = retailTransactionLineItemFrequentShopperPointsRedemptionList;
            this.AdditionalBonusDiscountLineItemList = additionalBonusDiscountLineItemList;
            this.Xxcustom01 = xxcustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;Getter for inner key class.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Getter for inner key class.&lt;/p&gt;</value>
        [DataMember(Name="key", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemKey Key { get; set; }

        /// <summary>
        /// An external identifier for the related customer order.
        /// </summary>
        /// <value>An external identifier for the related customer order.</value>
        [DataMember(Name="externalCustomerOrderID", EmitDefaultValue=false)]
        public string ExternalCustomerOrderID { get; set; }

        /// <summary>
        /// A unique system assigned identifier for the LineItem of the CustomerOrder. 
        /// </summary>
        /// <value>A unique system assigned identifier for the LineItem of the CustomerOrder. </value>
        [DataMember(Name="customerOrderSequenceNumber", EmitDefaultValue=false)]
        public int? CustomerOrderSequenceNumber { get; set; }

        /// <summary>
        /// The start time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The start time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="beginDateTimestamp", EmitDefaultValue=false)]
        public string BeginDateTimestamp { get; set; }

        /// <summary>
        /// A boolean indicator that tells if this line item is VOIDED or not.
        /// </summary>
        /// <value>A boolean indicator that tells if this line item is VOIDED or not.</value>
        [DataMember(Name="voidFlag", EmitDefaultValue=false)]
        public bool? VoidFlag { get; set; }

        /// <summary>
        /// The end time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The end time of the RETAIL TRANSACTION line item. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="endDateTimestamp", EmitDefaultValue=false)]
        public string EndDateTimestamp { get; set; }

        /// <summary>
        /// A retailer assigned code to denote how the RetailTransactionLineItem was entered at the Workstation. It is filled just for retail transaction line item.
        /// </summary>
        /// <value>A retailer assigned code to denote how the RetailTransactionLineItem was entered at the Workstation. It is filled just for retail transaction line item.</value>
        [DataMember(Name="entryMethodCode", EmitDefaultValue=false)]
        public string EntryMethodCode { get; set; }

        /// <summary>
        /// A code to denote the type of retail transaction line item, such as Sale/Return, Void, Tender ...
        /// </summary>
        /// <value>A code to denote the type of retail transaction line item, such as Sale/Return, Void, Tender ...</value>
        [DataMember(Name="retailTransactionLineItemTypeCode", EmitDefaultValue=false)]
        public string RetailTransactionLineItemTypeCode { get; set; }

        /// <summary>
        /// Describes whether the line item was voided immediately after registering it, voided by another line item or internally voided 
        /// </summary>
        /// <value>Describes whether the line item was voided immediately after registering it, voided by another line item or internally voided </value>
        [DataMember(Name="voidTypeCode", EmitDefaultValue=false)]
        public string VoidTypeCode { get; set; }

        /// <summary>
        /// id of the workstation where the line item was created
        /// </summary>
        /// <value>id of the workstation where the line item was created</value>
        [DataMember(Name="workstationID", EmitDefaultValue=false)]
        public string WorkstationID { get; set; }

        /// <summary>
        /// type of the workstation where the line item was created
        /// </summary>
        /// <value>type of the workstation where the line item was created</value>
        [DataMember(Name="workstationTypeCode", EmitDefaultValue=false)]
        public string WorkstationTypeCode { get; set; }

        /// <summary>
        /// A code that indicates the online/offline state when transaction was completed.
        /// </summary>
        /// <value>A code that indicates the online/offline state when transaction was completed.</value>
        [DataMember(Name="keyedOfflineCode", EmitDefaultValue=false)]
        public string KeyedOfflineCode { get; set; }

        /// <summary>
        /// The UTC0 start time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 start time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="beginDateTimestampUTC0", EmitDefaultValue=false)]
        public DateTime? BeginDateTimestampUTC0 { get; set; }

        /// <summary>
        /// The UTC0 end time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 end time of the RETAIL TRANSACTION line item. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="endDateTimestampUTC0", EmitDefaultValue=false)]
        public DateTime? EndDateTimestampUTC0 { get; set; }

        /// <summary>
        /// list of line item associations
        /// </summary>
        /// <value>list of line item associations</value>
        [DataMember(Name="retailTransactionLineItemAssociationList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAssociation> RetailTransactionLineItemAssociationList { get; set; }

        /// <summary>
        /// list of additional parameters
        /// </summary>
        /// <value>list of additional parameters</value>
        [DataMember(Name="retailTransactionLineItemAdditionalParameterList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAdditionalParameter> RetailTransactionLineItemAdditionalParameterList { get; set; }

        /// <summary>
        /// list of binary data
        /// </summary>
        /// <value>list of binary data</value>
        [DataMember(Name="retailTransactionLineItemBinaryDataList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemBinaryData> RetailTransactionLineItemBinaryDataList { get; set; }

        /// <summary>
        /// list of translations for line item texts
        /// </summary>
        /// <value>list of translations for line item texts</value>
        [DataMember(Name="retailTransactionLineItemI18NTextList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemI18NText> RetailTransactionLineItemI18NTextList { get; set; }

        /// <summary>
        /// list of data for line item related authorizations
        /// </summary>
        /// <value>list of data for line item related authorizations</value>
        [DataMember(Name="retailTransactionLineItemResourceOverrideList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemResourceOverride> RetailTransactionLineItemResourceOverrideList { get; set; }

        /// <summary>
        /// list of line item extensions
        /// </summary>
        /// <value>list of line item extensions</value>
        [DataMember(Name="retailTransactionLineItemExtensionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemExtension> RetailTransactionLineItemExtensionList { get; set; }

        /// <summary>
        /// list of line item audit events
        /// </summary>
        /// <value>list of line item audit events</value>
        [DataMember(Name="retailTransactionLineItemAuditEventList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemAuditEvent> RetailTransactionLineItemAuditEventList { get; set; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// sale return line item
        /// </summary>
        /// <value>sale return line item</value>
        [DataMember(Name="saleReturnLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem> SaleReturnLineItemList { get; set; }

        /// <summary>
        /// tender line item
        /// </summary>
        /// <value>tender line item</value>
        [DataMember(Name="tenderLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTenderLineItem> TenderLineItemList { get; set; }

        /// <summary>
        /// void line item
        /// </summary>
        /// <value>void line item</value>
        [DataMember(Name="voidsLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoVoidsLineItem> VoidsLineItemList { get; set; }

        /// <summary>
        /// rounding line item
        /// </summary>
        /// <value>rounding line item</value>
        [DataMember(Name="roundingLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRoundingLineItem> RoundingLineItemList { get; set; }

        /// <summary>
        /// transaction related discount
        /// </summary>
        /// <value>transaction related discount</value>
        [DataMember(Name="priceModificationLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoPriceModificationLineItem> PriceModificationLineItemList { get; set; }

        /// <summary>
        /// transaction related bonuspoints
        /// </summary>
        /// <value>transaction related bonuspoints</value>
        [DataMember(Name="loyaltyRewardLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoLoyaltyRewardLineItem> LoyaltyRewardLineItemList { get; set; }

        /// <summary>
        /// worker discount line item
        /// </summary>
        /// <value>worker discount line item</value>
        [DataMember(Name="workerDiscountLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoWorkerDiscountLineItem> WorkerDiscountLineItemList { get; set; }

        /// <summary>
        /// transaction related tax
        /// </summary>
        /// <value>transaction related tax</value>
        [DataMember(Name="taxLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTaxLineItem> TaxLineItemList { get; set; }

        /// <summary>
        /// additional gift certificate data for SaleReturnLineItem, TenderLineItem or VoidsLineItem
        /// </summary>
        /// <value>additional gift certificate data for SaleReturnLineItem, TenderLineItem or VoidsLineItem</value>
        [DataMember(Name="giftCertificateLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoGiftCertificateLineItem> GiftCertificateLineItemList { get; set; }

        /// <summary>
        /// additional prepaid data for SaleReturnLineItem or VoidsLineItem
        /// </summary>
        /// <value>additional prepaid data for SaleReturnLineItem or VoidsLineItem</value>
        [DataMember(Name="prepaidLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoPrepaidLineItem> PrepaidLineItemList { get; set; }

        /// <summary>
        /// additional bonuspoints redemption data
        /// </summary>
        /// <value>additional bonuspoints redemption data</value>
        [DataMember(Name="retailTransactionLineItemFrequentShopperPointsRedemptionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItemFrequentShopperPointsRedemption> RetailTransactionLineItemFrequentShopperPointsRedemptionList { get; set; }

        /// <summary>
        /// data for additional bonus itemsA type of RETAIL TRANSACTION LINE ITEM that records PCE&#39;s response for the application of a promotion price derivation rule of type &#39;additional bonus&#39;.
        /// </summary>
        /// <value>data for additional bonus itemsA type of RETAIL TRANSACTION LINE ITEM that records PCE&#39;s response for the application of a promotion price derivation rule of type &#39;additional bonus&#39;.</value>
        [DataMember(Name="additionalBonusDiscountLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusDiscountLineItem> AdditionalBonusDiscountLineItemList { get; set; }

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

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  ExternalCustomerOrderID: ").Append(ExternalCustomerOrderID).Append("\n");
            sb.Append("  CustomerOrderSequenceNumber: ").Append(CustomerOrderSequenceNumber).Append("\n");
            sb.Append("  BeginDateTimestamp: ").Append(BeginDateTimestamp).Append("\n");
            sb.Append("  VoidFlag: ").Append(VoidFlag).Append("\n");
            sb.Append("  EndDateTimestamp: ").Append(EndDateTimestamp).Append("\n");
            sb.Append("  EntryMethodCode: ").Append(EntryMethodCode).Append("\n");
            sb.Append("  RetailTransactionLineItemTypeCode: ").Append(RetailTransactionLineItemTypeCode).Append("\n");
            sb.Append("  VoidTypeCode: ").Append(VoidTypeCode).Append("\n");
            sb.Append("  WorkstationID: ").Append(WorkstationID).Append("\n");
            sb.Append("  WorkstationTypeCode: ").Append(WorkstationTypeCode).Append("\n");
            sb.Append("  KeyedOfflineCode: ").Append(KeyedOfflineCode).Append("\n");
            sb.Append("  BeginDateTimestampUTC0: ").Append(BeginDateTimestampUTC0).Append("\n");
            sb.Append("  EndDateTimestampUTC0: ").Append(EndDateTimestampUTC0).Append("\n");
            sb.Append("  RetailTransactionLineItemAssociationList: ").Append(RetailTransactionLineItemAssociationList).Append("\n");
            sb.Append("  RetailTransactionLineItemAdditionalParameterList: ").Append(RetailTransactionLineItemAdditionalParameterList).Append("\n");
            sb.Append("  RetailTransactionLineItemBinaryDataList: ").Append(RetailTransactionLineItemBinaryDataList).Append("\n");
            sb.Append("  RetailTransactionLineItemI18NTextList: ").Append(RetailTransactionLineItemI18NTextList).Append("\n");
            sb.Append("  RetailTransactionLineItemResourceOverrideList: ").Append(RetailTransactionLineItemResourceOverrideList).Append("\n");
            sb.Append("  RetailTransactionLineItemExtensionList: ").Append(RetailTransactionLineItemExtensionList).Append("\n");
            sb.Append("  RetailTransactionLineItemAuditEventList: ").Append(RetailTransactionLineItemAuditEventList).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("  SaleReturnLineItemList: ").Append(SaleReturnLineItemList).Append("\n");
            sb.Append("  TenderLineItemList: ").Append(TenderLineItemList).Append("\n");
            sb.Append("  VoidsLineItemList: ").Append(VoidsLineItemList).Append("\n");
            sb.Append("  RoundingLineItemList: ").Append(RoundingLineItemList).Append("\n");
            sb.Append("  PriceModificationLineItemList: ").Append(PriceModificationLineItemList).Append("\n");
            sb.Append("  LoyaltyRewardLineItemList: ").Append(LoyaltyRewardLineItemList).Append("\n");
            sb.Append("  WorkerDiscountLineItemList: ").Append(WorkerDiscountLineItemList).Append("\n");
            sb.Append("  TaxLineItemList: ").Append(TaxLineItemList).Append("\n");
            sb.Append("  GiftCertificateLineItemList: ").Append(GiftCertificateLineItemList).Append("\n");
            sb.Append("  PrepaidLineItemList: ").Append(PrepaidLineItemList).Append("\n");
            sb.Append("  RetailTransactionLineItemFrequentShopperPointsRedemptionList: ").Append(RetailTransactionLineItemFrequentShopperPointsRedemptionList).Append("\n");
            sb.Append("  AdditionalBonusDiscountLineItemList: ").Append(AdditionalBonusDiscountLineItemList).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 ComGkSoftwareGkrApiTxpoolDtoRetailTransactionLineItem);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.ExternalCustomerOrderID == input.ExternalCustomerOrderID ||
                    (this.ExternalCustomerOrderID != null &&
                    this.ExternalCustomerOrderID.Equals(input.ExternalCustomerOrderID))
                ) && 
                (
                    this.CustomerOrderSequenceNumber == input.CustomerOrderSequenceNumber ||
                    (this.CustomerOrderSequenceNumber != null &&
                    this.CustomerOrderSequenceNumber.Equals(input.CustomerOrderSequenceNumber))
                ) && 
                (
                    this.BeginDateTimestamp == input.BeginDateTimestamp ||
                    (this.BeginDateTimestamp != null &&
                    this.BeginDateTimestamp.Equals(input.BeginDateTimestamp))
                ) && 
                (
                    this.VoidFlag == input.VoidFlag ||
                    (this.VoidFlag != null &&
                    this.VoidFlag.Equals(input.VoidFlag))
                ) && 
                (
                    this.EndDateTimestamp == input.EndDateTimestamp ||
                    (this.EndDateTimestamp != null &&
                    this.EndDateTimestamp.Equals(input.EndDateTimestamp))
                ) && 
                (
                    this.EntryMethodCode == input.EntryMethodCode ||
                    (this.EntryMethodCode != null &&
                    this.EntryMethodCode.Equals(input.EntryMethodCode))
                ) && 
                (
                    this.RetailTransactionLineItemTypeCode == input.RetailTransactionLineItemTypeCode ||
                    (this.RetailTransactionLineItemTypeCode != null &&
                    this.RetailTransactionLineItemTypeCode.Equals(input.RetailTransactionLineItemTypeCode))
                ) && 
                (
                    this.VoidTypeCode == input.VoidTypeCode ||
                    (this.VoidTypeCode != null &&
                    this.VoidTypeCode.Equals(input.VoidTypeCode))
                ) && 
                (
                    this.WorkstationID == input.WorkstationID ||
                    (this.WorkstationID != null &&
                    this.WorkstationID.Equals(input.WorkstationID))
                ) && 
                (
                    this.WorkstationTypeCode == input.WorkstationTypeCode ||
                    (this.WorkstationTypeCode != null &&
                    this.WorkstationTypeCode.Equals(input.WorkstationTypeCode))
                ) && 
                (
                    this.KeyedOfflineCode == input.KeyedOfflineCode ||
                    (this.KeyedOfflineCode != null &&
                    this.KeyedOfflineCode.Equals(input.KeyedOfflineCode))
                ) && 
                (
                    this.BeginDateTimestampUTC0 == input.BeginDateTimestampUTC0 ||
                    (this.BeginDateTimestampUTC0 != null &&
                    this.BeginDateTimestampUTC0.Equals(input.BeginDateTimestampUTC0))
                ) && 
                (
                    this.EndDateTimestampUTC0 == input.EndDateTimestampUTC0 ||
                    (this.EndDateTimestampUTC0 != null &&
                    this.EndDateTimestampUTC0.Equals(input.EndDateTimestampUTC0))
                ) && 
                (
                    this.RetailTransactionLineItemAssociationList == input.RetailTransactionLineItemAssociationList ||
                    this.RetailTransactionLineItemAssociationList != null &&
                    this.RetailTransactionLineItemAssociationList.SequenceEqual(input.RetailTransactionLineItemAssociationList)
                ) && 
                (
                    this.RetailTransactionLineItemAdditionalParameterList == input.RetailTransactionLineItemAdditionalParameterList ||
                    this.RetailTransactionLineItemAdditionalParameterList != null &&
                    this.RetailTransactionLineItemAdditionalParameterList.SequenceEqual(input.RetailTransactionLineItemAdditionalParameterList)
                ) && 
                (
                    this.RetailTransactionLineItemBinaryDataList == input.RetailTransactionLineItemBinaryDataList ||
                    this.RetailTransactionLineItemBinaryDataList != null &&
                    this.RetailTransactionLineItemBinaryDataList.SequenceEqual(input.RetailTransactionLineItemBinaryDataList)
                ) && 
                (
                    this.RetailTransactionLineItemI18NTextList == input.RetailTransactionLineItemI18NTextList ||
                    this.RetailTransactionLineItemI18NTextList != null &&
                    this.RetailTransactionLineItemI18NTextList.SequenceEqual(input.RetailTransactionLineItemI18NTextList)
                ) && 
                (
                    this.RetailTransactionLineItemResourceOverrideList == input.RetailTransactionLineItemResourceOverrideList ||
                    this.RetailTransactionLineItemResourceOverrideList != null &&
                    this.RetailTransactionLineItemResourceOverrideList.SequenceEqual(input.RetailTransactionLineItemResourceOverrideList)
                ) && 
                (
                    this.RetailTransactionLineItemExtensionList == input.RetailTransactionLineItemExtensionList ||
                    this.RetailTransactionLineItemExtensionList != null &&
                    this.RetailTransactionLineItemExtensionList.SequenceEqual(input.RetailTransactionLineItemExtensionList)
                ) && 
                (
                    this.RetailTransactionLineItemAuditEventList == input.RetailTransactionLineItemAuditEventList ||
                    this.RetailTransactionLineItemAuditEventList != null &&
                    this.RetailTransactionLineItemAuditEventList.SequenceEqual(input.RetailTransactionLineItemAuditEventList)
                ) && 
                (
                    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.SaleReturnLineItemList == input.SaleReturnLineItemList ||
                    this.SaleReturnLineItemList != null &&
                    this.SaleReturnLineItemList.SequenceEqual(input.SaleReturnLineItemList)
                ) && 
                (
                    this.TenderLineItemList == input.TenderLineItemList ||
                    this.TenderLineItemList != null &&
                    this.TenderLineItemList.SequenceEqual(input.TenderLineItemList)
                ) && 
                (
                    this.VoidsLineItemList == input.VoidsLineItemList ||
                    this.VoidsLineItemList != null &&
                    this.VoidsLineItemList.SequenceEqual(input.VoidsLineItemList)
                ) && 
                (
                    this.RoundingLineItemList == input.RoundingLineItemList ||
                    this.RoundingLineItemList != null &&
                    this.RoundingLineItemList.SequenceEqual(input.RoundingLineItemList)
                ) && 
                (
                    this.PriceModificationLineItemList == input.PriceModificationLineItemList ||
                    this.PriceModificationLineItemList != null &&
                    this.PriceModificationLineItemList.SequenceEqual(input.PriceModificationLineItemList)
                ) && 
                (
                    this.LoyaltyRewardLineItemList == input.LoyaltyRewardLineItemList ||
                    this.LoyaltyRewardLineItemList != null &&
                    this.LoyaltyRewardLineItemList.SequenceEqual(input.LoyaltyRewardLineItemList)
                ) && 
                (
                    this.WorkerDiscountLineItemList == input.WorkerDiscountLineItemList ||
                    this.WorkerDiscountLineItemList != null &&
                    this.WorkerDiscountLineItemList.SequenceEqual(input.WorkerDiscountLineItemList)
                ) && 
                (
                    this.TaxLineItemList == input.TaxLineItemList ||
                    this.TaxLineItemList != null &&
                    this.TaxLineItemList.SequenceEqual(input.TaxLineItemList)
                ) && 
                (
                    this.GiftCertificateLineItemList == input.GiftCertificateLineItemList ||
                    this.GiftCertificateLineItemList != null &&
                    this.GiftCertificateLineItemList.SequenceEqual(input.GiftCertificateLineItemList)
                ) && 
                (
                    this.PrepaidLineItemList == input.PrepaidLineItemList ||
                    this.PrepaidLineItemList != null &&
                    this.PrepaidLineItemList.SequenceEqual(input.PrepaidLineItemList)
                ) && 
                (
                    this.RetailTransactionLineItemFrequentShopperPointsRedemptionList == input.RetailTransactionLineItemFrequentShopperPointsRedemptionList ||
                    this.RetailTransactionLineItemFrequentShopperPointsRedemptionList != null &&
                    this.RetailTransactionLineItemFrequentShopperPointsRedemptionList.SequenceEqual(input.RetailTransactionLineItemFrequentShopperPointsRedemptionList)
                ) && 
                (
                    this.AdditionalBonusDiscountLineItemList == input.AdditionalBonusDiscountLineItemList ||
                    this.AdditionalBonusDiscountLineItemList != null &&
                    this.AdditionalBonusDiscountLineItemList.SequenceEqual(input.AdditionalBonusDiscountLineItemList)
                ) && 
                (
                    this.Xxcustom01 == input.Xxcustom01 ||
                    (this.Xxcustom01 != null &&
                    this.Xxcustom01.Equals(input.Xxcustom01))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.ExternalCustomerOrderID != null)
                    hashCode = hashCode * 59 + this.ExternalCustomerOrderID.GetHashCode();
                if (this.CustomerOrderSequenceNumber != null)
                    hashCode = hashCode * 59 + this.CustomerOrderSequenceNumber.GetHashCode();
                if (this.BeginDateTimestamp != null)
                    hashCode = hashCode * 59 + this.BeginDateTimestamp.GetHashCode();
                if (this.VoidFlag != null)
                    hashCode = hashCode * 59 + this.VoidFlag.GetHashCode();
                if (this.EndDateTimestamp != null)
                    hashCode = hashCode * 59 + this.EndDateTimestamp.GetHashCode();
                if (this.EntryMethodCode != null)
                    hashCode = hashCode * 59 + this.EntryMethodCode.GetHashCode();
                if (this.RetailTransactionLineItemTypeCode != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemTypeCode.GetHashCode();
                if (this.VoidTypeCode != null)
                    hashCode = hashCode * 59 + this.VoidTypeCode.GetHashCode();
                if (this.WorkstationID != null)
                    hashCode = hashCode * 59 + this.WorkstationID.GetHashCode();
                if (this.WorkstationTypeCode != null)
                    hashCode = hashCode * 59 + this.WorkstationTypeCode.GetHashCode();
                if (this.KeyedOfflineCode != null)
                    hashCode = hashCode * 59 + this.KeyedOfflineCode.GetHashCode();
                if (this.BeginDateTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.BeginDateTimestampUTC0.GetHashCode();
                if (this.EndDateTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.EndDateTimestampUTC0.GetHashCode();
                if (this.RetailTransactionLineItemAssociationList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemAssociationList.GetHashCode();
                if (this.RetailTransactionLineItemAdditionalParameterList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemAdditionalParameterList.GetHashCode();
                if (this.RetailTransactionLineItemBinaryDataList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemBinaryDataList.GetHashCode();
                if (this.RetailTransactionLineItemI18NTextList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemI18NTextList.GetHashCode();
                if (this.RetailTransactionLineItemResourceOverrideList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemResourceOverrideList.GetHashCode();
                if (this.RetailTransactionLineItemExtensionList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemExtensionList.GetHashCode();
                if (this.RetailTransactionLineItemAuditEventList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemAuditEventList.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.SaleReturnLineItemList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemList.GetHashCode();
                if (this.TenderLineItemList != null)
                    hashCode = hashCode * 59 + this.TenderLineItemList.GetHashCode();
                if (this.VoidsLineItemList != null)
                    hashCode = hashCode * 59 + this.VoidsLineItemList.GetHashCode();
                if (this.RoundingLineItemList != null)
                    hashCode = hashCode * 59 + this.RoundingLineItemList.GetHashCode();
                if (this.PriceModificationLineItemList != null)
                    hashCode = hashCode * 59 + this.PriceModificationLineItemList.GetHashCode();
                if (this.LoyaltyRewardLineItemList != null)
                    hashCode = hashCode * 59 + this.LoyaltyRewardLineItemList.GetHashCode();
                if (this.WorkerDiscountLineItemList != null)
                    hashCode = hashCode * 59 + this.WorkerDiscountLineItemList.GetHashCode();
                if (this.TaxLineItemList != null)
                    hashCode = hashCode * 59 + this.TaxLineItemList.GetHashCode();
                if (this.GiftCertificateLineItemList != null)
                    hashCode = hashCode * 59 + this.GiftCertificateLineItemList.GetHashCode();
                if (this.PrepaidLineItemList != null)
                    hashCode = hashCode * 59 + this.PrepaidLineItemList.GetHashCode();
                if (this.RetailTransactionLineItemFrequentShopperPointsRedemptionList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionLineItemFrequentShopperPointsRedemptionList.GetHashCode();
                if (this.AdditionalBonusDiscountLineItemList != null)
                    hashCode = hashCode * 59 + this.AdditionalBonusDiscountLineItemList.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;
        }
    }

}
