/* 
 * 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>
    /// Transaction &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoTransaction :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoTransaction>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoTransaction" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoTransaction() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoTransaction" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="operatorID">A unique, automatically assigned number used to identify a workstation OPERATOR.  (required).</param>
        /// <param name="workstationID">The unique identifier for the WORKSTATION.  (required).</param>
        /// <param name="businessUnitID">The store id (required).</param>
        /// <param name="businessDayDate">The calendar date of the BusinessDay. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone) (required).</param>
        /// <param name="sequenceNumber">The sequence number of the transaction (incremental number for each workstation). It is formatted according to minimum and maximum value and it could be reset every day to minimum value. So in comparison to InternalSequenceNumber it must not be unique for business unit and workstation.It is used for export, reporting, search and display. (required).</param>
        /// <param name="transactionTypeCode">A code to denote the type of Transaction. (required).</param>
        /// <param name="beginDateTimestamp">The time and date a transaction is initiated. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="endDateTimestamp">The time and date stamp a transaction is completed. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="cancelledFlag">A flag denoting that this entire transaction has been cancelled before it was completed at the POS. .</param>
        /// <param name="suspendedFlag">Defines if the transaction was suspended..</param>
        /// <param name="trainingFlag">A flag to signify whether the transaction was created in training mode..</param>
        /// <param name="keyedOfflineFlag">A code that indicates the online/offline state when transaction was completed..</param>
        /// <param name="reasonCode">A unique retailer defined reason code for an action that is taken (or not taken) at a Workstation..</param>
        /// <param name="reasonDescription">A narrative description describing the uses of the retailer assigned reason code. Corresponds to Reason.Description.</param>
        /// <param name="workerID">A unique system-assigned identifier for the Worker..</param>
        /// <param name="workerFirstName">The worker&#39;s first name.</param>
        /// <param name="workerLastName">The worker&#39;s last name.</param>
        /// <param name="softwareVersion">The software version which was used in order to create the transaction..</param>
        /// <param name="suspendNumber">Number for suspending, can be used for multiple transactions.</param>
        /// <param name="internalSequenceNumber">The sequence number of the transaction (incremental number for each workstation). It is unique for business unit and workstation. (required).</param>
        /// <param name="fiscalSequenceNumber">The sequence number being created either by the POS, the fiscal printer, or other device used for fiscalization.</param>
        /// <param name="fiscalFlag">Determines whether this is a fiscal transaction. (required).</param>
        /// <param name="fiscalDayNumber">The fiscal day counter.</param>
        /// <param name="fiscalPrinterID">The identifier of the fiscal printer.</param>
        /// <param name="fiscalSignature">Fiscal signature of the transaction..</param>
        /// <param name="transactionTimestamp">The timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestamp or the EndDateTimestamp. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="beginDateTimestampUTC0">The UTC0 time and date a transaction is initiated. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="endDateTimestampUTC0">The UTC0 time and date stamp a transaction is completed. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="transactionTimestampUTC0">The UTC0 timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestampUTC0 or the EndDateTimestampUTC0. UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="transactionAdditionalPrintoutList">List of additional printouts.</param>
        /// <param name="transactionAssociationList">List of associated transactions.</param>
        /// <param name="transactionBinaryDataList">List of binary data.</param>
        /// <param name="transactionCategoryList">List of transaction categories.</param>
        /// <param name="transactionExtensionList">List of transaction extensions.</param>
        /// <param name="transactionResourceOverrideList">List of data for authorization related to transaction level.</param>
        /// <param name="endWorkstationID">WorkstationID were the transaction was finalized..</param>
        /// <param name="transactionAuditEventList">List of audit events.</param>
        /// <param name="transactionTimerList">List of timer entries.</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="retailTransactionList">retail transaction data.</param>
        /// <param name="controlTransactionList">control transaction data.</param>
        /// <param name="tenderControlTransactionList">tender control transaction data.</param>
        /// <param name="isocurrencyCode">Main currency of the store (required).</param>
        /// <param name="xxcustom03">Customizable information.</param>
        /// <param name="xxcustom02">Customizable information.</param>
        /// <param name="xxcustom04">Customizable information.</param>
        /// <param name="xxcustom01">Customizable information.</param>
        public ComGkSoftwareGkrApiTxpoolDtoTransaction(ComGkSoftwareGkrApiTxpoolDtoTransactionKey key = default(ComGkSoftwareGkrApiTxpoolDtoTransactionKey), string operatorID = default(string), string workstationID = default(string), string businessUnitID = default(string), string businessDayDate = default(string), int? sequenceNumber = default(int?), string transactionTypeCode = default(string), string beginDateTimestamp = default(string), string endDateTimestamp = default(string), bool? cancelledFlag = default(bool?), bool? suspendedFlag = default(bool?), bool? trainingFlag = default(bool?), string keyedOfflineFlag = default(string), string reasonCode = default(string), string reasonDescription = default(string), string workerID = default(string), string workerFirstName = default(string), string workerLastName = default(string), string softwareVersion = default(string), string suspendNumber = default(string), int? internalSequenceNumber = default(int?), string fiscalSequenceNumber = default(string), bool? fiscalFlag = default(bool?), string fiscalDayNumber = default(string), string fiscalPrinterID = default(string), string fiscalSignature = default(string), string transactionTimestamp = default(string), DateTime? beginDateTimestampUTC0 = default(DateTime?), DateTime? endDateTimestampUTC0 = default(DateTime?), DateTime? transactionTimestampUTC0 = default(DateTime?), List<ComGkSoftwareGkrApiTxpoolDtoTransactionAdditionalPrintout> transactionAdditionalPrintoutList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionAdditionalPrintout>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionAssociation> transactionAssociationList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionAssociation>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionBinaryData> transactionBinaryDataList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionBinaryData>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionCategory> transactionCategoryList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionCategory>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionExtension> transactionExtensionList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionExtension>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionResourceOverride> transactionResourceOverrideList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionResourceOverride>), string endWorkstationID = default(string), List<ComGkSoftwareGkrApiTxpoolDtoTransactionAuditEvent> transactionAuditEventList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionAuditEvent>), List<ComGkSoftwareGkrApiTxpoolDtoTransactionTimer> transactionTimerList = default(List<ComGkSoftwareGkrApiTxpoolDtoTransactionTimer>), 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), List<ComGkSoftwareGkrApiTxpoolDtoRetailTransaction> retailTransactionList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailTransaction>), List<ComGkSoftwareGkrApiTxpoolDtoControlTransaction> controlTransactionList = default(List<ComGkSoftwareGkrApiTxpoolDtoControlTransaction>), List<ComGkSoftwareGkrApiTxpoolDtoTenderControlTransaction> tenderControlTransactionList = default(List<ComGkSoftwareGkrApiTxpoolDtoTenderControlTransaction>), string isocurrencyCode = default(string), string xxcustom03 = default(string), string xxcustom02 = default(string), string xxcustom04 = default(string), string xxcustom01 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "operatorID" is required (not null)
            if (operatorID == null)
            {
                throw new InvalidDataException("operatorID is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.OperatorID = operatorID;
            }
            // to ensure "workstationID" is required (not null)
            if (workstationID == null)
            {
                throw new InvalidDataException("workstationID is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.WorkstationID = workstationID;
            }
            // to ensure "businessUnitID" is required (not null)
            if (businessUnitID == null)
            {
                throw new InvalidDataException("businessUnitID is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.BusinessUnitID = businessUnitID;
            }
            // to ensure "businessDayDate" is required (not null)
            if (businessDayDate == null)
            {
                throw new InvalidDataException("businessDayDate is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.BusinessDayDate = businessDayDate;
            }
            // to ensure "sequenceNumber" is required (not null)
            if (sequenceNumber == null)
            {
                throw new InvalidDataException("sequenceNumber is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.SequenceNumber = sequenceNumber;
            }
            // to ensure "transactionTypeCode" is required (not null)
            if (transactionTypeCode == null)
            {
                throw new InvalidDataException("transactionTypeCode is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.TransactionTypeCode = transactionTypeCode;
            }
            // to ensure "internalSequenceNumber" is required (not null)
            if (internalSequenceNumber == null)
            {
                throw new InvalidDataException("internalSequenceNumber is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.InternalSequenceNumber = internalSequenceNumber;
            }
            // to ensure "fiscalFlag" is required (not null)
            if (fiscalFlag == null)
            {
                throw new InvalidDataException("fiscalFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.FiscalFlag = fiscalFlag;
            }
            // to ensure "isocurrencyCode" is required (not null)
            if (isocurrencyCode == null)
            {
                throw new InvalidDataException("isocurrencyCode is a required property for ComGkSoftwareGkrApiTxpoolDtoTransaction and cannot be null");
            }
            else
            {
                this.IsocurrencyCode = isocurrencyCode;
            }
            this.BeginDateTimestamp = beginDateTimestamp;
            this.EndDateTimestamp = endDateTimestamp;
            this.CancelledFlag = cancelledFlag;
            this.SuspendedFlag = suspendedFlag;
            this.TrainingFlag = trainingFlag;
            this.KeyedOfflineFlag = keyedOfflineFlag;
            this.ReasonCode = reasonCode;
            this.ReasonDescription = reasonDescription;
            this.WorkerID = workerID;
            this.WorkerFirstName = workerFirstName;
            this.WorkerLastName = workerLastName;
            this.SoftwareVersion = softwareVersion;
            this.SuspendNumber = suspendNumber;
            this.FiscalSequenceNumber = fiscalSequenceNumber;
            this.FiscalDayNumber = fiscalDayNumber;
            this.FiscalPrinterID = fiscalPrinterID;
            this.FiscalSignature = fiscalSignature;
            this.TransactionTimestamp = transactionTimestamp;
            this.BeginDateTimestampUTC0 = beginDateTimestampUTC0;
            this.EndDateTimestampUTC0 = endDateTimestampUTC0;
            this.TransactionTimestampUTC0 = transactionTimestampUTC0;
            this.TransactionAdditionalPrintoutList = transactionAdditionalPrintoutList;
            this.TransactionAssociationList = transactionAssociationList;
            this.TransactionBinaryDataList = transactionBinaryDataList;
            this.TransactionCategoryList = transactionCategoryList;
            this.TransactionExtensionList = transactionExtensionList;
            this.TransactionResourceOverrideList = transactionResourceOverrideList;
            this.EndWorkstationID = endWorkstationID;
            this.TransactionAuditEventList = transactionAuditEventList;
            this.TransactionTimerList = transactionTimerList;
            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.RetailTransactionList = retailTransactionList;
            this.ControlTransactionList = controlTransactionList;
            this.TenderControlTransactionList = tenderControlTransactionList;
            this.Xxcustom03 = xxcustom03;
            this.Xxcustom02 = xxcustom02;
            this.Xxcustom04 = xxcustom04;
            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 ComGkSoftwareGkrApiTxpoolDtoTransactionKey Key { get; set; }

        /// <summary>
        /// A unique, automatically assigned number used to identify a workstation OPERATOR. 
        /// </summary>
        /// <value>A unique, automatically assigned number used to identify a workstation OPERATOR. </value>
        [DataMember(Name="operatorID", EmitDefaultValue=false)]
        public string OperatorID { get; set; }

        /// <summary>
        /// The unique identifier for the WORKSTATION. 
        /// </summary>
        /// <value>The unique identifier for the WORKSTATION. </value>
        [DataMember(Name="workstationID", EmitDefaultValue=false)]
        public string WorkstationID { get; set; }

        /// <summary>
        /// The store id
        /// </summary>
        /// <value>The store id</value>
        [DataMember(Name="businessUnitID", EmitDefaultValue=false)]
        public string BusinessUnitID { get; set; }

        /// <summary>
        /// The calendar date of the BusinessDay. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The calendar date of the BusinessDay. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="businessDayDate", EmitDefaultValue=false)]
        public string BusinessDayDate { get; set; }

        /// <summary>
        /// The sequence number of the transaction (incremental number for each workstation). It is formatted according to minimum and maximum value and it could be reset every day to minimum value. So in comparison to InternalSequenceNumber it must not be unique for business unit and workstation.It is used for export, reporting, search and display.
        /// </summary>
        /// <value>The sequence number of the transaction (incremental number for each workstation). It is formatted according to minimum and maximum value and it could be reset every day to minimum value. So in comparison to InternalSequenceNumber it must not be unique for business unit and workstation.It is used for export, reporting, search and display.</value>
        [DataMember(Name="sequenceNumber", EmitDefaultValue=false)]
        public int? SequenceNumber { get; set; }

        /// <summary>
        /// A code to denote the type of Transaction.
        /// </summary>
        /// <value>A code to denote the type of Transaction.</value>
        [DataMember(Name="transactionTypeCode", EmitDefaultValue=false)]
        public string TransactionTypeCode { get; set; }

        /// <summary>
        /// The time and date a transaction is initiated. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The time and date a transaction is initiated. ; 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>
        /// The time and date stamp a transaction is completed. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The time and date stamp a transaction is completed. ; 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 flag denoting that this entire transaction has been cancelled before it was completed at the POS. 
        /// </summary>
        /// <value>A flag denoting that this entire transaction has been cancelled before it was completed at the POS. </value>
        [DataMember(Name="cancelledFlag", EmitDefaultValue=false)]
        public bool? CancelledFlag { get; set; }

        /// <summary>
        /// Defines if the transaction was suspended.
        /// </summary>
        /// <value>Defines if the transaction was suspended.</value>
        [DataMember(Name="suspendedFlag", EmitDefaultValue=false)]
        public bool? SuspendedFlag { get; set; }

        /// <summary>
        /// A flag to signify whether the transaction was created in training mode.
        /// </summary>
        /// <value>A flag to signify whether the transaction was created in training mode.</value>
        [DataMember(Name="trainingFlag", EmitDefaultValue=false)]
        public bool? TrainingFlag { 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="keyedOfflineFlag", EmitDefaultValue=false)]
        public string KeyedOfflineFlag { get; set; }

        /// <summary>
        /// A unique retailer defined reason code for an action that is taken (or not taken) at a Workstation.
        /// </summary>
        /// <value>A unique retailer defined reason code for an action that is taken (or not taken) at a Workstation.</value>
        [DataMember(Name="reasonCode", EmitDefaultValue=false)]
        public string ReasonCode { get; set; }

        /// <summary>
        /// A narrative description describing the uses of the retailer assigned reason code. Corresponds to Reason.Description
        /// </summary>
        /// <value>A narrative description describing the uses of the retailer assigned reason code. Corresponds to Reason.Description</value>
        [DataMember(Name="reasonDescription", EmitDefaultValue=false)]
        public string ReasonDescription { get; set; }

        /// <summary>
        /// A unique system-assigned identifier for the Worker.
        /// </summary>
        /// <value>A unique system-assigned identifier for the Worker.</value>
        [DataMember(Name="workerID", EmitDefaultValue=false)]
        public string WorkerID { get; set; }

        /// <summary>
        /// The worker&#39;s first name
        /// </summary>
        /// <value>The worker&#39;s first name</value>
        [DataMember(Name="workerFirstName", EmitDefaultValue=false)]
        public string WorkerFirstName { get; set; }

        /// <summary>
        /// The worker&#39;s last name
        /// </summary>
        /// <value>The worker&#39;s last name</value>
        [DataMember(Name="workerLastName", EmitDefaultValue=false)]
        public string WorkerLastName { get; set; }

        /// <summary>
        /// The software version which was used in order to create the transaction.
        /// </summary>
        /// <value>The software version which was used in order to create the transaction.</value>
        [DataMember(Name="softwareVersion", EmitDefaultValue=false)]
        public string SoftwareVersion { get; set; }

        /// <summary>
        /// Number for suspending, can be used for multiple transactions
        /// </summary>
        /// <value>Number for suspending, can be used for multiple transactions</value>
        [DataMember(Name="suspendNumber", EmitDefaultValue=false)]
        public string SuspendNumber { get; set; }

        /// <summary>
        /// The sequence number of the transaction (incremental number for each workstation). It is unique for business unit and workstation.
        /// </summary>
        /// <value>The sequence number of the transaction (incremental number for each workstation). It is unique for business unit and workstation.</value>
        [DataMember(Name="internalSequenceNumber", EmitDefaultValue=false)]
        public int? InternalSequenceNumber { get; set; }

        /// <summary>
        /// The sequence number being created either by the POS, the fiscal printer, or other device used for fiscalization
        /// </summary>
        /// <value>The sequence number being created either by the POS, the fiscal printer, or other device used for fiscalization</value>
        [DataMember(Name="fiscalSequenceNumber", EmitDefaultValue=false)]
        public string FiscalSequenceNumber { get; set; }

        /// <summary>
        /// Determines whether this is a fiscal transaction.
        /// </summary>
        /// <value>Determines whether this is a fiscal transaction.</value>
        [DataMember(Name="fiscalFlag", EmitDefaultValue=false)]
        public bool? FiscalFlag { get; set; }

        /// <summary>
        /// The fiscal day counter
        /// </summary>
        /// <value>The fiscal day counter</value>
        [DataMember(Name="fiscalDayNumber", EmitDefaultValue=false)]
        public string FiscalDayNumber { get; set; }

        /// <summary>
        /// The identifier of the fiscal printer
        /// </summary>
        /// <value>The identifier of the fiscal printer</value>
        [DataMember(Name="fiscalPrinterID", EmitDefaultValue=false)]
        public string FiscalPrinterID { get; set; }

        /// <summary>
        /// Fiscal signature of the transaction.
        /// </summary>
        /// <value>Fiscal signature of the transaction.</value>
        [DataMember(Name="fiscalSignature", EmitDefaultValue=false)]
        public string FiscalSignature { get; set; }

        /// <summary>
        /// The timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestamp or the EndDateTimestamp. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestamp or the EndDateTimestamp. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="transactionTimestamp", EmitDefaultValue=false)]
        public string TransactionTimestamp { get; set; }

        /// <summary>
        /// The UTC0 time and date a transaction is initiated. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 time and date a transaction is initiated. ; 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 time and date stamp a transaction is completed. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 time and date stamp a transaction is completed. ; 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>
        /// The UTC0 timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestampUTC0 or the EndDateTimestampUTC0. UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 timestamp which is relevant for the transaction processing. Depending on configuration, this can be the BeginDateTimestampUTC0 or the EndDateTimestampUTC0. UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="transactionTimestampUTC0", EmitDefaultValue=false)]
        public DateTime? TransactionTimestampUTC0 { get; set; }

        /// <summary>
        /// List of additional printouts
        /// </summary>
        /// <value>List of additional printouts</value>
        [DataMember(Name="transactionAdditionalPrintoutList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionAdditionalPrintout> TransactionAdditionalPrintoutList { get; set; }

        /// <summary>
        /// List of associated transactions
        /// </summary>
        /// <value>List of associated transactions</value>
        [DataMember(Name="transactionAssociationList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionAssociation> TransactionAssociationList { get; set; }

        /// <summary>
        /// List of binary data
        /// </summary>
        /// <value>List of binary data</value>
        [DataMember(Name="transactionBinaryDataList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionBinaryData> TransactionBinaryDataList { get; set; }

        /// <summary>
        /// List of transaction categories
        /// </summary>
        /// <value>List of transaction categories</value>
        [DataMember(Name="transactionCategoryList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionCategory> TransactionCategoryList { get; set; }

        /// <summary>
        /// List of transaction extensions
        /// </summary>
        /// <value>List of transaction extensions</value>
        [DataMember(Name="transactionExtensionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionExtension> TransactionExtensionList { get; set; }

        /// <summary>
        /// List of data for authorization related to transaction level
        /// </summary>
        /// <value>List of data for authorization related to transaction level</value>
        [DataMember(Name="transactionResourceOverrideList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionResourceOverride> TransactionResourceOverrideList { get; set; }

        /// <summary>
        /// WorkstationID were the transaction was finalized.
        /// </summary>
        /// <value>WorkstationID were the transaction was finalized.</value>
        [DataMember(Name="endWorkstationID", EmitDefaultValue=false)]
        public string EndWorkstationID { get; set; }

        /// <summary>
        /// List of audit events
        /// </summary>
        /// <value>List of audit events</value>
        [DataMember(Name="transactionAuditEventList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionAuditEvent> TransactionAuditEventList { get; set; }

        /// <summary>
        /// List of timer entries
        /// </summary>
        /// <value>List of timer entries</value>
        [DataMember(Name="transactionTimerList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTransactionTimer> TransactionTimerList { 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>
        /// retail transaction data
        /// </summary>
        /// <value>retail transaction data</value>
        [DataMember(Name="retailTransactionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailTransaction> RetailTransactionList { get; set; }

        /// <summary>
        /// control transaction data
        /// </summary>
        /// <value>control transaction data</value>
        [DataMember(Name="controlTransactionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoControlTransaction> ControlTransactionList { get; set; }

        /// <summary>
        /// tender control transaction data
        /// </summary>
        /// <value>tender control transaction data</value>
        [DataMember(Name="tenderControlTransactionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoTenderControlTransaction> TenderControlTransactionList { get; set; }

        /// <summary>
        /// Main currency of the store
        /// </summary>
        /// <value>Main currency of the store</value>
        [DataMember(Name="isocurrencyCode", EmitDefaultValue=false)]
        public string IsocurrencyCode { get; set; }

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

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

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

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="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 ComGkSoftwareGkrApiTxpoolDtoTransaction {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  OperatorID: ").Append(OperatorID).Append("\n");
            sb.Append("  WorkstationID: ").Append(WorkstationID).Append("\n");
            sb.Append("  BusinessUnitID: ").Append(BusinessUnitID).Append("\n");
            sb.Append("  BusinessDayDate: ").Append(BusinessDayDate).Append("\n");
            sb.Append("  SequenceNumber: ").Append(SequenceNumber).Append("\n");
            sb.Append("  TransactionTypeCode: ").Append(TransactionTypeCode).Append("\n");
            sb.Append("  BeginDateTimestamp: ").Append(BeginDateTimestamp).Append("\n");
            sb.Append("  EndDateTimestamp: ").Append(EndDateTimestamp).Append("\n");
            sb.Append("  CancelledFlag: ").Append(CancelledFlag).Append("\n");
            sb.Append("  SuspendedFlag: ").Append(SuspendedFlag).Append("\n");
            sb.Append("  TrainingFlag: ").Append(TrainingFlag).Append("\n");
            sb.Append("  KeyedOfflineFlag: ").Append(KeyedOfflineFlag).Append("\n");
            sb.Append("  ReasonCode: ").Append(ReasonCode).Append("\n");
            sb.Append("  ReasonDescription: ").Append(ReasonDescription).Append("\n");
            sb.Append("  WorkerID: ").Append(WorkerID).Append("\n");
            sb.Append("  WorkerFirstName: ").Append(WorkerFirstName).Append("\n");
            sb.Append("  WorkerLastName: ").Append(WorkerLastName).Append("\n");
            sb.Append("  SoftwareVersion: ").Append(SoftwareVersion).Append("\n");
            sb.Append("  SuspendNumber: ").Append(SuspendNumber).Append("\n");
            sb.Append("  InternalSequenceNumber: ").Append(InternalSequenceNumber).Append("\n");
            sb.Append("  FiscalSequenceNumber: ").Append(FiscalSequenceNumber).Append("\n");
            sb.Append("  FiscalFlag: ").Append(FiscalFlag).Append("\n");
            sb.Append("  FiscalDayNumber: ").Append(FiscalDayNumber).Append("\n");
            sb.Append("  FiscalPrinterID: ").Append(FiscalPrinterID).Append("\n");
            sb.Append("  FiscalSignature: ").Append(FiscalSignature).Append("\n");
            sb.Append("  TransactionTimestamp: ").Append(TransactionTimestamp).Append("\n");
            sb.Append("  BeginDateTimestampUTC0: ").Append(BeginDateTimestampUTC0).Append("\n");
            sb.Append("  EndDateTimestampUTC0: ").Append(EndDateTimestampUTC0).Append("\n");
            sb.Append("  TransactionTimestampUTC0: ").Append(TransactionTimestampUTC0).Append("\n");
            sb.Append("  TransactionAdditionalPrintoutList: ").Append(TransactionAdditionalPrintoutList).Append("\n");
            sb.Append("  TransactionAssociationList: ").Append(TransactionAssociationList).Append("\n");
            sb.Append("  TransactionBinaryDataList: ").Append(TransactionBinaryDataList).Append("\n");
            sb.Append("  TransactionCategoryList: ").Append(TransactionCategoryList).Append("\n");
            sb.Append("  TransactionExtensionList: ").Append(TransactionExtensionList).Append("\n");
            sb.Append("  TransactionResourceOverrideList: ").Append(TransactionResourceOverrideList).Append("\n");
            sb.Append("  EndWorkstationID: ").Append(EndWorkstationID).Append("\n");
            sb.Append("  TransactionAuditEventList: ").Append(TransactionAuditEventList).Append("\n");
            sb.Append("  TransactionTimerList: ").Append(TransactionTimerList).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("  RetailTransactionList: ").Append(RetailTransactionList).Append("\n");
            sb.Append("  ControlTransactionList: ").Append(ControlTransactionList).Append("\n");
            sb.Append("  TenderControlTransactionList: ").Append(TenderControlTransactionList).Append("\n");
            sb.Append("  IsocurrencyCode: ").Append(IsocurrencyCode).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 ComGkSoftwareGkrApiTxpoolDtoTransaction);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.OperatorID == input.OperatorID ||
                    (this.OperatorID != null &&
                    this.OperatorID.Equals(input.OperatorID))
                ) && 
                (
                    this.WorkstationID == input.WorkstationID ||
                    (this.WorkstationID != null &&
                    this.WorkstationID.Equals(input.WorkstationID))
                ) && 
                (
                    this.BusinessUnitID == input.BusinessUnitID ||
                    (this.BusinessUnitID != null &&
                    this.BusinessUnitID.Equals(input.BusinessUnitID))
                ) && 
                (
                    this.BusinessDayDate == input.BusinessDayDate ||
                    (this.BusinessDayDate != null &&
                    this.BusinessDayDate.Equals(input.BusinessDayDate))
                ) && 
                (
                    this.SequenceNumber == input.SequenceNumber ||
                    (this.SequenceNumber != null &&
                    this.SequenceNumber.Equals(input.SequenceNumber))
                ) && 
                (
                    this.TransactionTypeCode == input.TransactionTypeCode ||
                    (this.TransactionTypeCode != null &&
                    this.TransactionTypeCode.Equals(input.TransactionTypeCode))
                ) && 
                (
                    this.BeginDateTimestamp == input.BeginDateTimestamp ||
                    (this.BeginDateTimestamp != null &&
                    this.BeginDateTimestamp.Equals(input.BeginDateTimestamp))
                ) && 
                (
                    this.EndDateTimestamp == input.EndDateTimestamp ||
                    (this.EndDateTimestamp != null &&
                    this.EndDateTimestamp.Equals(input.EndDateTimestamp))
                ) && 
                (
                    this.CancelledFlag == input.CancelledFlag ||
                    (this.CancelledFlag != null &&
                    this.CancelledFlag.Equals(input.CancelledFlag))
                ) && 
                (
                    this.SuspendedFlag == input.SuspendedFlag ||
                    (this.SuspendedFlag != null &&
                    this.SuspendedFlag.Equals(input.SuspendedFlag))
                ) && 
                (
                    this.TrainingFlag == input.TrainingFlag ||
                    (this.TrainingFlag != null &&
                    this.TrainingFlag.Equals(input.TrainingFlag))
                ) && 
                (
                    this.KeyedOfflineFlag == input.KeyedOfflineFlag ||
                    (this.KeyedOfflineFlag != null &&
                    this.KeyedOfflineFlag.Equals(input.KeyedOfflineFlag))
                ) && 
                (
                    this.ReasonCode == input.ReasonCode ||
                    (this.ReasonCode != null &&
                    this.ReasonCode.Equals(input.ReasonCode))
                ) && 
                (
                    this.ReasonDescription == input.ReasonDescription ||
                    (this.ReasonDescription != null &&
                    this.ReasonDescription.Equals(input.ReasonDescription))
                ) && 
                (
                    this.WorkerID == input.WorkerID ||
                    (this.WorkerID != null &&
                    this.WorkerID.Equals(input.WorkerID))
                ) && 
                (
                    this.WorkerFirstName == input.WorkerFirstName ||
                    (this.WorkerFirstName != null &&
                    this.WorkerFirstName.Equals(input.WorkerFirstName))
                ) && 
                (
                    this.WorkerLastName == input.WorkerLastName ||
                    (this.WorkerLastName != null &&
                    this.WorkerLastName.Equals(input.WorkerLastName))
                ) && 
                (
                    this.SoftwareVersion == input.SoftwareVersion ||
                    (this.SoftwareVersion != null &&
                    this.SoftwareVersion.Equals(input.SoftwareVersion))
                ) && 
                (
                    this.SuspendNumber == input.SuspendNumber ||
                    (this.SuspendNumber != null &&
                    this.SuspendNumber.Equals(input.SuspendNumber))
                ) && 
                (
                    this.InternalSequenceNumber == input.InternalSequenceNumber ||
                    (this.InternalSequenceNumber != null &&
                    this.InternalSequenceNumber.Equals(input.InternalSequenceNumber))
                ) && 
                (
                    this.FiscalSequenceNumber == input.FiscalSequenceNumber ||
                    (this.FiscalSequenceNumber != null &&
                    this.FiscalSequenceNumber.Equals(input.FiscalSequenceNumber))
                ) && 
                (
                    this.FiscalFlag == input.FiscalFlag ||
                    (this.FiscalFlag != null &&
                    this.FiscalFlag.Equals(input.FiscalFlag))
                ) && 
                (
                    this.FiscalDayNumber == input.FiscalDayNumber ||
                    (this.FiscalDayNumber != null &&
                    this.FiscalDayNumber.Equals(input.FiscalDayNumber))
                ) && 
                (
                    this.FiscalPrinterID == input.FiscalPrinterID ||
                    (this.FiscalPrinterID != null &&
                    this.FiscalPrinterID.Equals(input.FiscalPrinterID))
                ) && 
                (
                    this.FiscalSignature == input.FiscalSignature ||
                    (this.FiscalSignature != null &&
                    this.FiscalSignature.Equals(input.FiscalSignature))
                ) && 
                (
                    this.TransactionTimestamp == input.TransactionTimestamp ||
                    (this.TransactionTimestamp != null &&
                    this.TransactionTimestamp.Equals(input.TransactionTimestamp))
                ) && 
                (
                    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.TransactionTimestampUTC0 == input.TransactionTimestampUTC0 ||
                    (this.TransactionTimestampUTC0 != null &&
                    this.TransactionTimestampUTC0.Equals(input.TransactionTimestampUTC0))
                ) && 
                (
                    this.TransactionAdditionalPrintoutList == input.TransactionAdditionalPrintoutList ||
                    this.TransactionAdditionalPrintoutList != null &&
                    this.TransactionAdditionalPrintoutList.SequenceEqual(input.TransactionAdditionalPrintoutList)
                ) && 
                (
                    this.TransactionAssociationList == input.TransactionAssociationList ||
                    this.TransactionAssociationList != null &&
                    this.TransactionAssociationList.SequenceEqual(input.TransactionAssociationList)
                ) && 
                (
                    this.TransactionBinaryDataList == input.TransactionBinaryDataList ||
                    this.TransactionBinaryDataList != null &&
                    this.TransactionBinaryDataList.SequenceEqual(input.TransactionBinaryDataList)
                ) && 
                (
                    this.TransactionCategoryList == input.TransactionCategoryList ||
                    this.TransactionCategoryList != null &&
                    this.TransactionCategoryList.SequenceEqual(input.TransactionCategoryList)
                ) && 
                (
                    this.TransactionExtensionList == input.TransactionExtensionList ||
                    this.TransactionExtensionList != null &&
                    this.TransactionExtensionList.SequenceEqual(input.TransactionExtensionList)
                ) && 
                (
                    this.TransactionResourceOverrideList == input.TransactionResourceOverrideList ||
                    this.TransactionResourceOverrideList != null &&
                    this.TransactionResourceOverrideList.SequenceEqual(input.TransactionResourceOverrideList)
                ) && 
                (
                    this.EndWorkstationID == input.EndWorkstationID ||
                    (this.EndWorkstationID != null &&
                    this.EndWorkstationID.Equals(input.EndWorkstationID))
                ) && 
                (
                    this.TransactionAuditEventList == input.TransactionAuditEventList ||
                    this.TransactionAuditEventList != null &&
                    this.TransactionAuditEventList.SequenceEqual(input.TransactionAuditEventList)
                ) && 
                (
                    this.TransactionTimerList == input.TransactionTimerList ||
                    this.TransactionTimerList != null &&
                    this.TransactionTimerList.SequenceEqual(input.TransactionTimerList)
                ) && 
                (
                    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.RetailTransactionList == input.RetailTransactionList ||
                    this.RetailTransactionList != null &&
                    this.RetailTransactionList.SequenceEqual(input.RetailTransactionList)
                ) && 
                (
                    this.ControlTransactionList == input.ControlTransactionList ||
                    this.ControlTransactionList != null &&
                    this.ControlTransactionList.SequenceEqual(input.ControlTransactionList)
                ) && 
                (
                    this.TenderControlTransactionList == input.TenderControlTransactionList ||
                    this.TenderControlTransactionList != null &&
                    this.TenderControlTransactionList.SequenceEqual(input.TenderControlTransactionList)
                ) && 
                (
                    this.IsocurrencyCode == input.IsocurrencyCode ||
                    (this.IsocurrencyCode != null &&
                    this.IsocurrencyCode.Equals(input.IsocurrencyCode))
                ) && 
                (
                    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.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.OperatorID != null)
                    hashCode = hashCode * 59 + this.OperatorID.GetHashCode();
                if (this.WorkstationID != null)
                    hashCode = hashCode * 59 + this.WorkstationID.GetHashCode();
                if (this.BusinessUnitID != null)
                    hashCode = hashCode * 59 + this.BusinessUnitID.GetHashCode();
                if (this.BusinessDayDate != null)
                    hashCode = hashCode * 59 + this.BusinessDayDate.GetHashCode();
                if (this.SequenceNumber != null)
                    hashCode = hashCode * 59 + this.SequenceNumber.GetHashCode();
                if (this.TransactionTypeCode != null)
                    hashCode = hashCode * 59 + this.TransactionTypeCode.GetHashCode();
                if (this.BeginDateTimestamp != null)
                    hashCode = hashCode * 59 + this.BeginDateTimestamp.GetHashCode();
                if (this.EndDateTimestamp != null)
                    hashCode = hashCode * 59 + this.EndDateTimestamp.GetHashCode();
                if (this.CancelledFlag != null)
                    hashCode = hashCode * 59 + this.CancelledFlag.GetHashCode();
                if (this.SuspendedFlag != null)
                    hashCode = hashCode * 59 + this.SuspendedFlag.GetHashCode();
                if (this.TrainingFlag != null)
                    hashCode = hashCode * 59 + this.TrainingFlag.GetHashCode();
                if (this.KeyedOfflineFlag != null)
                    hashCode = hashCode * 59 + this.KeyedOfflineFlag.GetHashCode();
                if (this.ReasonCode != null)
                    hashCode = hashCode * 59 + this.ReasonCode.GetHashCode();
                if (this.ReasonDescription != null)
                    hashCode = hashCode * 59 + this.ReasonDescription.GetHashCode();
                if (this.WorkerID != null)
                    hashCode = hashCode * 59 + this.WorkerID.GetHashCode();
                if (this.WorkerFirstName != null)
                    hashCode = hashCode * 59 + this.WorkerFirstName.GetHashCode();
                if (this.WorkerLastName != null)
                    hashCode = hashCode * 59 + this.WorkerLastName.GetHashCode();
                if (this.SoftwareVersion != null)
                    hashCode = hashCode * 59 + this.SoftwareVersion.GetHashCode();
                if (this.SuspendNumber != null)
                    hashCode = hashCode * 59 + this.SuspendNumber.GetHashCode();
                if (this.InternalSequenceNumber != null)
                    hashCode = hashCode * 59 + this.InternalSequenceNumber.GetHashCode();
                if (this.FiscalSequenceNumber != null)
                    hashCode = hashCode * 59 + this.FiscalSequenceNumber.GetHashCode();
                if (this.FiscalFlag != null)
                    hashCode = hashCode * 59 + this.FiscalFlag.GetHashCode();
                if (this.FiscalDayNumber != null)
                    hashCode = hashCode * 59 + this.FiscalDayNumber.GetHashCode();
                if (this.FiscalPrinterID != null)
                    hashCode = hashCode * 59 + this.FiscalPrinterID.GetHashCode();
                if (this.FiscalSignature != null)
                    hashCode = hashCode * 59 + this.FiscalSignature.GetHashCode();
                if (this.TransactionTimestamp != null)
                    hashCode = hashCode * 59 + this.TransactionTimestamp.GetHashCode();
                if (this.BeginDateTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.BeginDateTimestampUTC0.GetHashCode();
                if (this.EndDateTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.EndDateTimestampUTC0.GetHashCode();
                if (this.TransactionTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.TransactionTimestampUTC0.GetHashCode();
                if (this.TransactionAdditionalPrintoutList != null)
                    hashCode = hashCode * 59 + this.TransactionAdditionalPrintoutList.GetHashCode();
                if (this.TransactionAssociationList != null)
                    hashCode = hashCode * 59 + this.TransactionAssociationList.GetHashCode();
                if (this.TransactionBinaryDataList != null)
                    hashCode = hashCode * 59 + this.TransactionBinaryDataList.GetHashCode();
                if (this.TransactionCategoryList != null)
                    hashCode = hashCode * 59 + this.TransactionCategoryList.GetHashCode();
                if (this.TransactionExtensionList != null)
                    hashCode = hashCode * 59 + this.TransactionExtensionList.GetHashCode();
                if (this.TransactionResourceOverrideList != null)
                    hashCode = hashCode * 59 + this.TransactionResourceOverrideList.GetHashCode();
                if (this.EndWorkstationID != null)
                    hashCode = hashCode * 59 + this.EndWorkstationID.GetHashCode();
                if (this.TransactionAuditEventList != null)
                    hashCode = hashCode * 59 + this.TransactionAuditEventList.GetHashCode();
                if (this.TransactionTimerList != null)
                    hashCode = hashCode * 59 + this.TransactionTimerList.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.RetailTransactionList != null)
                    hashCode = hashCode * 59 + this.RetailTransactionList.GetHashCode();
                if (this.ControlTransactionList != null)
                    hashCode = hashCode * 59 + this.ControlTransactionList.GetHashCode();
                if (this.TenderControlTransactionList != null)
                    hashCode = hashCode * 59 + this.TenderControlTransactionList.GetHashCode();
                if (this.IsocurrencyCode != null)
                    hashCode = hashCode * 59 + this.IsocurrencyCode.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;
        }
    }

}
