/* 
 * 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>
    /// TenderAuthorization &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="tenderLineItemSequenceNumber">The sequence number of line item within the context of this RetailTransaction. .</param>
        /// <param name="cardType">A code denoting which kind of card is being accepted. .</param>
        /// <param name="accountNumber">The account number appearing on a debit/credit card and identifying the card issuer&#39;s customer account to be charged or credited for the transaction. .</param>
        /// <param name="cardIssueSequenceNumber">The IssueSequence number of the credit card being used. .</param>
        /// <param name="cardExpirationDate">The expiration date of the Credit or Debit card, as taken from the card in MMYY format. .</param>
        /// <param name="referenceNumber">A unique identifier (which may be assigned by the external authorization agency) for this TenderAuthorization .</param>
        /// <param name="terminalTransactionStatus">The status of of the card transaction.</param>
        /// <param name="terminalTransactionErrorNumber">The last error message sent by the terminal .</param>
        /// <param name="terminalTransactionType">The type of the terminal transaction .</param>
        /// <param name="forceOnlineFlag">Denotes that the Tender was authorized within the retail enterprise (usually because the connection to the host was down) and this TenderAuthorization must be approved by the host when it comes online. .</param>
        /// <param name="requestedAmount">The monetary value of the purchases for which an authorization is being requested. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="authorizationDatetime">The Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="terminalTransactionEndTimestamp">The system time when the terminal transaction ended ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="relatedTenderAuthorizatonSequenceNumber">A unique sequence number for this TenderAuthorization. Required because a particular TenderLineItem may have more than one TenderAuthorization attempt. .</param>
        /// <param name="terminalSequenceNumber">The transaction sequence number of the terminal .</param>
        /// <param name="requestedISOCurrencyNumber">Numeric code assigned by ISO to identify national currencies .</param>
        /// <param name="cardHolderVerificationTypeCode">A code denoting how a CardHolder was verified during a TenderAuthorization..</param>
        /// <param name="tenderAuthorizationTerminalID">A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. .</param>
        /// <param name="traceNumber">Unique identifier of terminal transaction .</param>
        /// <param name="terminalType">Used terminal defined in POS configuration.(e.g. „REAECT“, „Thales“, „Secpos“, ...) If the payment is carried out without a terminal or the terminal is not connected to the cash register: &#39;OFFLINE&#39; This information is necessary for later cancellation of the terminal payment. .</param>
        /// <param name="merchantNumber">A financial institution assigned identifier for ther Retail Enterprise or RetailStore that is conducting theTenderAuthorization. .</param>
        /// <param name="approvalCode">The terminal authorization number .</param>
        /// <param name="adjudicationCode">The adjudication code returned by the external agency to this TenderAuthorizationRequest .</param>
        /// <param name="adjudicationText">An error message in text form .</param>
        /// <param name="hostAuthorizedFlag">A flag denoting that this TenderAuthorization was authorized by an external agency. .</param>
        /// <param name="activationSequenceNumber">The activation sequence number.</param>
        /// <param name="terminalTransactionReferenceNumber">The transaction reference number;is used in the context of purchase reservation and reservation adjustment.</param>
        /// <param name="terminalTransactionTypeCode">The transaction type sent back by the terminal;possible transaction types are debit and credit (required).</param>
        /// <param name="terminalTenderDescription">The tender description sent back by the terminal.</param>
        /// <param name="applicationID">The application identifier sent back by the terminal.</param>
        /// <param name="encryptedPAN">The (coded) application PAN sent back by the terminal.</param>
        /// <param name="terminalTransactionCurrencyCode">The transaction currency code sent back by the terminal.</param>
        /// <param name="authorizationDatetimeUTC0">The UTC0 Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="terminalTransactionEndTimestampUTC0">The system time corresponding to UTC0 when the terminal transaction ended ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="terminalTransactionToken">The token is a unique number assigned by the payment processor to a card when a EFT transaction is processed. You can think of it like a replacement for the PAN that can be safely stored. This token needs to be retrieved from the terminal and stored in the DB (TenderAuthorization looks like the place to put it). The token is needed in order to do refunds/voids of previous EFT transactions without the need for the customer to swipe/insert their card on the terminal. In order for the terminal (T+) to do a void of an EFT transaction we need the token, reference number, approval code and amount. Currently only the approval code and amount is passed to the terminal for voids. The token and reference number are needed to be sent to the terminal for voids. The reference number is already stored in TenderAuthorization, it just needs to be passed to the terminal. Example: 0:AmEx:AX:997309203571006:0120.</param>
        /// <param name="internationalBankAccountNumber">IBAN - International Bank Account Number for SEPA Direct Debit.</param>
        /// <param name="bankIdentifierCode">BIC - Bank Identifier Code. Also known as SWIFT Code for SEPA Direct Debit..</param>
        /// <param name="creditorID">Creditor ID for SEPA Direct Debit (ELV).</param>
        /// <param name="mandateID">Mandate ID for SEPA Direct Debit (ELV).</param>
        /// <param name="prenotificationText">Pre-notification text for SEPA Direct Debit (ELV).</param>
        /// <param name="tenderAuthorizationTerminalID2">A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. .</param>
        /// <param name="xxcustom05">Customizable information.</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 ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization(ComGkSoftwareGkrApiTxpoolDtoTenderAuthorizationKey key = default(ComGkSoftwareGkrApiTxpoolDtoTenderAuthorizationKey), int? tenderLineItemSequenceNumber = default(int?), string cardType = default(string), string accountNumber = default(string), string cardIssueSequenceNumber = default(string), string cardExpirationDate = default(string), string referenceNumber = default(string), int? terminalTransactionStatus = default(int?), int? terminalTransactionErrorNumber = default(int?), int? terminalTransactionType = default(int?), bool? forceOnlineFlag = default(bool?), double? requestedAmount = default(double?), string authorizationDatetime = default(string), string terminalTransactionEndTimestamp = default(string), int? relatedTenderAuthorizatonSequenceNumber = default(int?), string terminalSequenceNumber = default(string), string requestedISOCurrencyNumber = default(string), string cardHolderVerificationTypeCode = default(string), int? tenderAuthorizationTerminalID = default(int?), int? traceNumber = default(int?), string terminalType = default(string), string merchantNumber = default(string), string approvalCode = default(string), string adjudicationCode = default(string), string adjudicationText = default(string), bool? hostAuthorizedFlag = default(bool?), int? activationSequenceNumber = default(int?), string terminalTransactionReferenceNumber = default(string), string terminalTransactionTypeCode = default(string), string terminalTenderDescription = default(string), string applicationID = default(string), string encryptedPAN = default(string), string terminalTransactionCurrencyCode = default(string), DateTime? authorizationDatetimeUTC0 = default(DateTime?), DateTime? terminalTransactionEndTimestampUTC0 = default(DateTime?), string terminalTransactionToken = default(string), string internationalBankAccountNumber = default(string), string bankIdentifierCode = default(string), string creditorID = default(string), string mandateID = default(string), string prenotificationText = default(string), string tenderAuthorizationTerminalID2 = default(string), string xxcustom05 = 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 ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "terminalTransactionTypeCode" is required (not null)
            if (terminalTransactionTypeCode == null)
            {
                throw new InvalidDataException("terminalTransactionTypeCode is a required property for ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization and cannot be null");
            }
            else
            {
                this.TerminalTransactionTypeCode = terminalTransactionTypeCode;
            }
            this.TenderLineItemSequenceNumber = tenderLineItemSequenceNumber;
            this.CardType = cardType;
            this.AccountNumber = accountNumber;
            this.CardIssueSequenceNumber = cardIssueSequenceNumber;
            this.CardExpirationDate = cardExpirationDate;
            this.ReferenceNumber = referenceNumber;
            this.TerminalTransactionStatus = terminalTransactionStatus;
            this.TerminalTransactionErrorNumber = terminalTransactionErrorNumber;
            this.TerminalTransactionType = terminalTransactionType;
            this.ForceOnlineFlag = forceOnlineFlag;
            this.RequestedAmount = requestedAmount;
            this.AuthorizationDatetime = authorizationDatetime;
            this.TerminalTransactionEndTimestamp = terminalTransactionEndTimestamp;
            this.RelatedTenderAuthorizatonSequenceNumber = relatedTenderAuthorizatonSequenceNumber;
            this.TerminalSequenceNumber = terminalSequenceNumber;
            this.RequestedISOCurrencyNumber = requestedISOCurrencyNumber;
            this.CardHolderVerificationTypeCode = cardHolderVerificationTypeCode;
            this.TenderAuthorizationTerminalID = tenderAuthorizationTerminalID;
            this.TraceNumber = traceNumber;
            this.TerminalType = terminalType;
            this.MerchantNumber = merchantNumber;
            this.ApprovalCode = approvalCode;
            this.AdjudicationCode = adjudicationCode;
            this.AdjudicationText = adjudicationText;
            this.HostAuthorizedFlag = hostAuthorizedFlag;
            this.ActivationSequenceNumber = activationSequenceNumber;
            this.TerminalTransactionReferenceNumber = terminalTransactionReferenceNumber;
            this.TerminalTenderDescription = terminalTenderDescription;
            this.ApplicationID = applicationID;
            this.EncryptedPAN = encryptedPAN;
            this.TerminalTransactionCurrencyCode = terminalTransactionCurrencyCode;
            this.AuthorizationDatetimeUTC0 = authorizationDatetimeUTC0;
            this.TerminalTransactionEndTimestampUTC0 = terminalTransactionEndTimestampUTC0;
            this.TerminalTransactionToken = terminalTransactionToken;
            this.InternationalBankAccountNumber = internationalBankAccountNumber;
            this.BankIdentifierCode = bankIdentifierCode;
            this.CreditorID = creditorID;
            this.MandateID = mandateID;
            this.PrenotificationText = prenotificationText;
            this.TenderAuthorizationTerminalID2 = tenderAuthorizationTerminalID2;
            this.Xxcustom05 = xxcustom05;
            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 ComGkSoftwareGkrApiTxpoolDtoTenderAuthorizationKey Key { get; set; }

        /// <summary>
        /// The sequence number of line item within the context of this RetailTransaction. 
        /// </summary>
        /// <value>The sequence number of line item within the context of this RetailTransaction. </value>
        [DataMember(Name="tenderLineItemSequenceNumber", EmitDefaultValue=false)]
        public int? TenderLineItemSequenceNumber { get; set; }

        /// <summary>
        /// A code denoting which kind of card is being accepted. 
        /// </summary>
        /// <value>A code denoting which kind of card is being accepted. </value>
        [DataMember(Name="cardType", EmitDefaultValue=false)]
        public string CardType { get; set; }

        /// <summary>
        /// The account number appearing on a debit/credit card and identifying the card issuer&#39;s customer account to be charged or credited for the transaction. 
        /// </summary>
        /// <value>The account number appearing on a debit/credit card and identifying the card issuer&#39;s customer account to be charged or credited for the transaction. </value>
        [DataMember(Name="accountNumber", EmitDefaultValue=false)]
        public string AccountNumber { get; set; }

        /// <summary>
        /// The IssueSequence number of the credit card being used. 
        /// </summary>
        /// <value>The IssueSequence number of the credit card being used. </value>
        [DataMember(Name="cardIssueSequenceNumber", EmitDefaultValue=false)]
        public string CardIssueSequenceNumber { get; set; }

        /// <summary>
        /// The expiration date of the Credit or Debit card, as taken from the card in MMYY format. 
        /// </summary>
        /// <value>The expiration date of the Credit or Debit card, as taken from the card in MMYY format. </value>
        [DataMember(Name="cardExpirationDate", EmitDefaultValue=false)]
        public string CardExpirationDate { get; set; }

        /// <summary>
        /// A unique identifier (which may be assigned by the external authorization agency) for this TenderAuthorization 
        /// </summary>
        /// <value>A unique identifier (which may be assigned by the external authorization agency) for this TenderAuthorization </value>
        [DataMember(Name="referenceNumber", EmitDefaultValue=false)]
        public string ReferenceNumber { get; set; }

        /// <summary>
        /// The status of of the card transaction
        /// </summary>
        /// <value>The status of of the card transaction</value>
        [DataMember(Name="terminalTransactionStatus", EmitDefaultValue=false)]
        public int? TerminalTransactionStatus { get; set; }

        /// <summary>
        /// The last error message sent by the terminal 
        /// </summary>
        /// <value>The last error message sent by the terminal </value>
        [DataMember(Name="terminalTransactionErrorNumber", EmitDefaultValue=false)]
        public int? TerminalTransactionErrorNumber { get; set; }

        /// <summary>
        /// The type of the terminal transaction 
        /// </summary>
        /// <value>The type of the terminal transaction </value>
        [DataMember(Name="terminalTransactionType", EmitDefaultValue=false)]
        public int? TerminalTransactionType { get; set; }

        /// <summary>
        /// Denotes that the Tender was authorized within the retail enterprise (usually because the connection to the host was down) and this TenderAuthorization must be approved by the host when it comes online. 
        /// </summary>
        /// <value>Denotes that the Tender was authorized within the retail enterprise (usually because the connection to the host was down) and this TenderAuthorization must be approved by the host when it comes online. </value>
        [DataMember(Name="forceOnlineFlag", EmitDefaultValue=false)]
        public bool? ForceOnlineFlag { get; set; }

        /// <summary>
        /// The monetary value of the purchases for which an authorization is being requested. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>The monetary value of the purchases for which an authorization is being requested. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="requestedAmount", EmitDefaultValue=false)]
        public double? RequestedAmount { get; set; }

        /// <summary>
        /// The Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="authorizationDatetime", EmitDefaultValue=false)]
        public string AuthorizationDatetime { get; set; }

        /// <summary>
        /// The system time when the terminal transaction ended ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The system time when the terminal transaction ended ; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="terminalTransactionEndTimestamp", EmitDefaultValue=false)]
        public string TerminalTransactionEndTimestamp { get; set; }

        /// <summary>
        /// A unique sequence number for this TenderAuthorization. Required because a particular TenderLineItem may have more than one TenderAuthorization attempt. 
        /// </summary>
        /// <value>A unique sequence number for this TenderAuthorization. Required because a particular TenderLineItem may have more than one TenderAuthorization attempt. </value>
        [DataMember(Name="relatedTenderAuthorizatonSequenceNumber", EmitDefaultValue=false)]
        public int? RelatedTenderAuthorizatonSequenceNumber { get; set; }

        /// <summary>
        /// The transaction sequence number of the terminal 
        /// </summary>
        /// <value>The transaction sequence number of the terminal </value>
        [DataMember(Name="terminalSequenceNumber", EmitDefaultValue=false)]
        public string TerminalSequenceNumber { get; set; }

        /// <summary>
        /// Numeric code assigned by ISO to identify national currencies 
        /// </summary>
        /// <value>Numeric code assigned by ISO to identify national currencies </value>
        [DataMember(Name="requestedISOCurrencyNumber", EmitDefaultValue=false)]
        public string RequestedISOCurrencyNumber { get; set; }

        /// <summary>
        /// A code denoting how a CardHolder was verified during a TenderAuthorization.
        /// </summary>
        /// <value>A code denoting how a CardHolder was verified during a TenderAuthorization.</value>
        [DataMember(Name="cardHolderVerificationTypeCode", EmitDefaultValue=false)]
        public string CardHolderVerificationTypeCode { get; set; }

        /// <summary>
        /// A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. 
        /// </summary>
        /// <value>A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. </value>
        [DataMember(Name="tenderAuthorizationTerminalID", EmitDefaultValue=false)]
        public int? TenderAuthorizationTerminalID { get; set; }

        /// <summary>
        /// Unique identifier of terminal transaction 
        /// </summary>
        /// <value>Unique identifier of terminal transaction </value>
        [DataMember(Name="traceNumber", EmitDefaultValue=false)]
        public int? TraceNumber { get; set; }

        /// <summary>
        /// Used terminal defined in POS configuration.(e.g. „REAECT“, „Thales“, „Secpos“, ...) If the payment is carried out without a terminal or the terminal is not connected to the cash register: &#39;OFFLINE&#39; This information is necessary for later cancellation of the terminal payment. 
        /// </summary>
        /// <value>Used terminal defined in POS configuration.(e.g. „REAECT“, „Thales“, „Secpos“, ...) If the payment is carried out without a terminal or the terminal is not connected to the cash register: &#39;OFFLINE&#39; This information is necessary for later cancellation of the terminal payment. </value>
        [DataMember(Name="terminalType", EmitDefaultValue=false)]
        public string TerminalType { get; set; }

        /// <summary>
        /// A financial institution assigned identifier for ther Retail Enterprise or RetailStore that is conducting theTenderAuthorization. 
        /// </summary>
        /// <value>A financial institution assigned identifier for ther Retail Enterprise or RetailStore that is conducting theTenderAuthorization. </value>
        [DataMember(Name="merchantNumber", EmitDefaultValue=false)]
        public string MerchantNumber { get; set; }

        /// <summary>
        /// The terminal authorization number 
        /// </summary>
        /// <value>The terminal authorization number </value>
        [DataMember(Name="approvalCode", EmitDefaultValue=false)]
        public string ApprovalCode { get; set; }

        /// <summary>
        /// The adjudication code returned by the external agency to this TenderAuthorizationRequest 
        /// </summary>
        /// <value>The adjudication code returned by the external agency to this TenderAuthorizationRequest </value>
        [DataMember(Name="adjudicationCode", EmitDefaultValue=false)]
        public string AdjudicationCode { get; set; }

        /// <summary>
        /// An error message in text form 
        /// </summary>
        /// <value>An error message in text form </value>
        [DataMember(Name="adjudicationText", EmitDefaultValue=false)]
        public string AdjudicationText { get; set; }

        /// <summary>
        /// A flag denoting that this TenderAuthorization was authorized by an external agency. 
        /// </summary>
        /// <value>A flag denoting that this TenderAuthorization was authorized by an external agency. </value>
        [DataMember(Name="hostAuthorizedFlag", EmitDefaultValue=false)]
        public bool? HostAuthorizedFlag { get; set; }

        /// <summary>
        /// The activation sequence number
        /// </summary>
        /// <value>The activation sequence number</value>
        [DataMember(Name="activationSequenceNumber", EmitDefaultValue=false)]
        public int? ActivationSequenceNumber { get; set; }

        /// <summary>
        /// The transaction reference number;is used in the context of purchase reservation and reservation adjustment
        /// </summary>
        /// <value>The transaction reference number;is used in the context of purchase reservation and reservation adjustment</value>
        [DataMember(Name="terminalTransactionReferenceNumber", EmitDefaultValue=false)]
        public string TerminalTransactionReferenceNumber { get; set; }

        /// <summary>
        /// The transaction type sent back by the terminal;possible transaction types are debit and credit
        /// </summary>
        /// <value>The transaction type sent back by the terminal;possible transaction types are debit and credit</value>
        [DataMember(Name="terminalTransactionTypeCode", EmitDefaultValue=false)]
        public string TerminalTransactionTypeCode { get; set; }

        /// <summary>
        /// The tender description sent back by the terminal
        /// </summary>
        /// <value>The tender description sent back by the terminal</value>
        [DataMember(Name="terminalTenderDescription", EmitDefaultValue=false)]
        public string TerminalTenderDescription { get; set; }

        /// <summary>
        /// The application identifier sent back by the terminal
        /// </summary>
        /// <value>The application identifier sent back by the terminal</value>
        [DataMember(Name="applicationID", EmitDefaultValue=false)]
        public string ApplicationID { get; set; }

        /// <summary>
        /// The (coded) application PAN sent back by the terminal
        /// </summary>
        /// <value>The (coded) application PAN sent back by the terminal</value>
        [DataMember(Name="encryptedPAN", EmitDefaultValue=false)]
        public string EncryptedPAN { get; set; }

        /// <summary>
        /// The transaction currency code sent back by the terminal
        /// </summary>
        /// <value>The transaction currency code sent back by the terminal</value>
        [DataMember(Name="terminalTransactionCurrencyCode", EmitDefaultValue=false)]
        public string TerminalTransactionCurrencyCode { get; set; }

        /// <summary>
        /// The UTC0 Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The UTC0 Date and Time the TenderAuthorization was made. This may be assigned by the external agency that is providing the TenderAuthorization. ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="authorizationDatetimeUTC0", EmitDefaultValue=false)]
        public DateTime? AuthorizationDatetimeUTC0 { get; set; }

        /// <summary>
        /// The system time corresponding to UTC0 when the terminal transaction ended ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The system time corresponding to UTC0 when the terminal transaction ended ; UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="terminalTransactionEndTimestampUTC0", EmitDefaultValue=false)]
        public DateTime? TerminalTransactionEndTimestampUTC0 { get; set; }

        /// <summary>
        /// The token is a unique number assigned by the payment processor to a card when a EFT transaction is processed. You can think of it like a replacement for the PAN that can be safely stored. This token needs to be retrieved from the terminal and stored in the DB (TenderAuthorization looks like the place to put it). The token is needed in order to do refunds/voids of previous EFT transactions without the need for the customer to swipe/insert their card on the terminal. In order for the terminal (T+) to do a void of an EFT transaction we need the token, reference number, approval code and amount. Currently only the approval code and amount is passed to the terminal for voids. The token and reference number are needed to be sent to the terminal for voids. The reference number is already stored in TenderAuthorization, it just needs to be passed to the terminal. Example: 0:AmEx:AX:997309203571006:0120
        /// </summary>
        /// <value>The token is a unique number assigned by the payment processor to a card when a EFT transaction is processed. You can think of it like a replacement for the PAN that can be safely stored. This token needs to be retrieved from the terminal and stored in the DB (TenderAuthorization looks like the place to put it). The token is needed in order to do refunds/voids of previous EFT transactions without the need for the customer to swipe/insert their card on the terminal. In order for the terminal (T+) to do a void of an EFT transaction we need the token, reference number, approval code and amount. Currently only the approval code and amount is passed to the terminal for voids. The token and reference number are needed to be sent to the terminal for voids. The reference number is already stored in TenderAuthorization, it just needs to be passed to the terminal. Example: 0:AmEx:AX:997309203571006:0120</value>
        [DataMember(Name="terminalTransactionToken", EmitDefaultValue=false)]
        public string TerminalTransactionToken { get; set; }

        /// <summary>
        /// IBAN - International Bank Account Number for SEPA Direct Debit
        /// </summary>
        /// <value>IBAN - International Bank Account Number for SEPA Direct Debit</value>
        [DataMember(Name="internationalBankAccountNumber", EmitDefaultValue=false)]
        public string InternationalBankAccountNumber { get; set; }

        /// <summary>
        /// BIC - Bank Identifier Code. Also known as SWIFT Code for SEPA Direct Debit.
        /// </summary>
        /// <value>BIC - Bank Identifier Code. Also known as SWIFT Code for SEPA Direct Debit.</value>
        [DataMember(Name="bankIdentifierCode", EmitDefaultValue=false)]
        public string BankIdentifierCode { get; set; }

        /// <summary>
        /// Creditor ID for SEPA Direct Debit (ELV)
        /// </summary>
        /// <value>Creditor ID for SEPA Direct Debit (ELV)</value>
        [DataMember(Name="creditorID", EmitDefaultValue=false)]
        public string CreditorID { get; set; }

        /// <summary>
        /// Mandate ID for SEPA Direct Debit (ELV)
        /// </summary>
        /// <value>Mandate ID for SEPA Direct Debit (ELV)</value>
        [DataMember(Name="mandateID", EmitDefaultValue=false)]
        public string MandateID { get; set; }

        /// <summary>
        /// Pre-notification text for SEPA Direct Debit (ELV)
        /// </summary>
        /// <value>Pre-notification text for SEPA Direct Debit (ELV)</value>
        [DataMember(Name="prenotificationText", EmitDefaultValue=false)]
        public string PrenotificationText { get; set; }

        /// <summary>
        /// A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. 
        /// </summary>
        /// <value>A unique identifier (usually assigned by an external agency that provides TenderAuthorizations) that identifies the terminal performing the TenderAuthorization. </value>
        [DataMember(Name="tenderAuthorizationTerminalID2", EmitDefaultValue=false)]
        public string TenderAuthorizationTerminalID2 { 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="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 ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  TenderLineItemSequenceNumber: ").Append(TenderLineItemSequenceNumber).Append("\n");
            sb.Append("  CardType: ").Append(CardType).Append("\n");
            sb.Append("  AccountNumber: ").Append(AccountNumber).Append("\n");
            sb.Append("  CardIssueSequenceNumber: ").Append(CardIssueSequenceNumber).Append("\n");
            sb.Append("  CardExpirationDate: ").Append(CardExpirationDate).Append("\n");
            sb.Append("  ReferenceNumber: ").Append(ReferenceNumber).Append("\n");
            sb.Append("  TerminalTransactionStatus: ").Append(TerminalTransactionStatus).Append("\n");
            sb.Append("  TerminalTransactionErrorNumber: ").Append(TerminalTransactionErrorNumber).Append("\n");
            sb.Append("  TerminalTransactionType: ").Append(TerminalTransactionType).Append("\n");
            sb.Append("  ForceOnlineFlag: ").Append(ForceOnlineFlag).Append("\n");
            sb.Append("  RequestedAmount: ").Append(RequestedAmount).Append("\n");
            sb.Append("  AuthorizationDatetime: ").Append(AuthorizationDatetime).Append("\n");
            sb.Append("  TerminalTransactionEndTimestamp: ").Append(TerminalTransactionEndTimestamp).Append("\n");
            sb.Append("  RelatedTenderAuthorizatonSequenceNumber: ").Append(RelatedTenderAuthorizatonSequenceNumber).Append("\n");
            sb.Append("  TerminalSequenceNumber: ").Append(TerminalSequenceNumber).Append("\n");
            sb.Append("  RequestedISOCurrencyNumber: ").Append(RequestedISOCurrencyNumber).Append("\n");
            sb.Append("  CardHolderVerificationTypeCode: ").Append(CardHolderVerificationTypeCode).Append("\n");
            sb.Append("  TenderAuthorizationTerminalID: ").Append(TenderAuthorizationTerminalID).Append("\n");
            sb.Append("  TraceNumber: ").Append(TraceNumber).Append("\n");
            sb.Append("  TerminalType: ").Append(TerminalType).Append("\n");
            sb.Append("  MerchantNumber: ").Append(MerchantNumber).Append("\n");
            sb.Append("  ApprovalCode: ").Append(ApprovalCode).Append("\n");
            sb.Append("  AdjudicationCode: ").Append(AdjudicationCode).Append("\n");
            sb.Append("  AdjudicationText: ").Append(AdjudicationText).Append("\n");
            sb.Append("  HostAuthorizedFlag: ").Append(HostAuthorizedFlag).Append("\n");
            sb.Append("  ActivationSequenceNumber: ").Append(ActivationSequenceNumber).Append("\n");
            sb.Append("  TerminalTransactionReferenceNumber: ").Append(TerminalTransactionReferenceNumber).Append("\n");
            sb.Append("  TerminalTransactionTypeCode: ").Append(TerminalTransactionTypeCode).Append("\n");
            sb.Append("  TerminalTenderDescription: ").Append(TerminalTenderDescription).Append("\n");
            sb.Append("  ApplicationID: ").Append(ApplicationID).Append("\n");
            sb.Append("  EncryptedPAN: ").Append(EncryptedPAN).Append("\n");
            sb.Append("  TerminalTransactionCurrencyCode: ").Append(TerminalTransactionCurrencyCode).Append("\n");
            sb.Append("  AuthorizationDatetimeUTC0: ").Append(AuthorizationDatetimeUTC0).Append("\n");
            sb.Append("  TerminalTransactionEndTimestampUTC0: ").Append(TerminalTransactionEndTimestampUTC0).Append("\n");
            sb.Append("  TerminalTransactionToken: ").Append(TerminalTransactionToken).Append("\n");
            sb.Append("  InternationalBankAccountNumber: ").Append(InternationalBankAccountNumber).Append("\n");
            sb.Append("  BankIdentifierCode: ").Append(BankIdentifierCode).Append("\n");
            sb.Append("  CreditorID: ").Append(CreditorID).Append("\n");
            sb.Append("  MandateID: ").Append(MandateID).Append("\n");
            sb.Append("  PrenotificationText: ").Append(PrenotificationText).Append("\n");
            sb.Append("  TenderAuthorizationTerminalID2: ").Append(TenderAuthorizationTerminalID2).Append("\n");
            sb.Append("  Xxcustom05: ").Append(Xxcustom05).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 ComGkSoftwareGkrApiTxpoolDtoTenderAuthorization);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.TenderLineItemSequenceNumber == input.TenderLineItemSequenceNumber ||
                    (this.TenderLineItemSequenceNumber != null &&
                    this.TenderLineItemSequenceNumber.Equals(input.TenderLineItemSequenceNumber))
                ) && 
                (
                    this.CardType == input.CardType ||
                    (this.CardType != null &&
                    this.CardType.Equals(input.CardType))
                ) && 
                (
                    this.AccountNumber == input.AccountNumber ||
                    (this.AccountNumber != null &&
                    this.AccountNumber.Equals(input.AccountNumber))
                ) && 
                (
                    this.CardIssueSequenceNumber == input.CardIssueSequenceNumber ||
                    (this.CardIssueSequenceNumber != null &&
                    this.CardIssueSequenceNumber.Equals(input.CardIssueSequenceNumber))
                ) && 
                (
                    this.CardExpirationDate == input.CardExpirationDate ||
                    (this.CardExpirationDate != null &&
                    this.CardExpirationDate.Equals(input.CardExpirationDate))
                ) && 
                (
                    this.ReferenceNumber == input.ReferenceNumber ||
                    (this.ReferenceNumber != null &&
                    this.ReferenceNumber.Equals(input.ReferenceNumber))
                ) && 
                (
                    this.TerminalTransactionStatus == input.TerminalTransactionStatus ||
                    (this.TerminalTransactionStatus != null &&
                    this.TerminalTransactionStatus.Equals(input.TerminalTransactionStatus))
                ) && 
                (
                    this.TerminalTransactionErrorNumber == input.TerminalTransactionErrorNumber ||
                    (this.TerminalTransactionErrorNumber != null &&
                    this.TerminalTransactionErrorNumber.Equals(input.TerminalTransactionErrorNumber))
                ) && 
                (
                    this.TerminalTransactionType == input.TerminalTransactionType ||
                    (this.TerminalTransactionType != null &&
                    this.TerminalTransactionType.Equals(input.TerminalTransactionType))
                ) && 
                (
                    this.ForceOnlineFlag == input.ForceOnlineFlag ||
                    (this.ForceOnlineFlag != null &&
                    this.ForceOnlineFlag.Equals(input.ForceOnlineFlag))
                ) && 
                (
                    this.RequestedAmount == input.RequestedAmount ||
                    (this.RequestedAmount != null &&
                    this.RequestedAmount.Equals(input.RequestedAmount))
                ) && 
                (
                    this.AuthorizationDatetime == input.AuthorizationDatetime ||
                    (this.AuthorizationDatetime != null &&
                    this.AuthorizationDatetime.Equals(input.AuthorizationDatetime))
                ) && 
                (
                    this.TerminalTransactionEndTimestamp == input.TerminalTransactionEndTimestamp ||
                    (this.TerminalTransactionEndTimestamp != null &&
                    this.TerminalTransactionEndTimestamp.Equals(input.TerminalTransactionEndTimestamp))
                ) && 
                (
                    this.RelatedTenderAuthorizatonSequenceNumber == input.RelatedTenderAuthorizatonSequenceNumber ||
                    (this.RelatedTenderAuthorizatonSequenceNumber != null &&
                    this.RelatedTenderAuthorizatonSequenceNumber.Equals(input.RelatedTenderAuthorizatonSequenceNumber))
                ) && 
                (
                    this.TerminalSequenceNumber == input.TerminalSequenceNumber ||
                    (this.TerminalSequenceNumber != null &&
                    this.TerminalSequenceNumber.Equals(input.TerminalSequenceNumber))
                ) && 
                (
                    this.RequestedISOCurrencyNumber == input.RequestedISOCurrencyNumber ||
                    (this.RequestedISOCurrencyNumber != null &&
                    this.RequestedISOCurrencyNumber.Equals(input.RequestedISOCurrencyNumber))
                ) && 
                (
                    this.CardHolderVerificationTypeCode == input.CardHolderVerificationTypeCode ||
                    (this.CardHolderVerificationTypeCode != null &&
                    this.CardHolderVerificationTypeCode.Equals(input.CardHolderVerificationTypeCode))
                ) && 
                (
                    this.TenderAuthorizationTerminalID == input.TenderAuthorizationTerminalID ||
                    (this.TenderAuthorizationTerminalID != null &&
                    this.TenderAuthorizationTerminalID.Equals(input.TenderAuthorizationTerminalID))
                ) && 
                (
                    this.TraceNumber == input.TraceNumber ||
                    (this.TraceNumber != null &&
                    this.TraceNumber.Equals(input.TraceNumber))
                ) && 
                (
                    this.TerminalType == input.TerminalType ||
                    (this.TerminalType != null &&
                    this.TerminalType.Equals(input.TerminalType))
                ) && 
                (
                    this.MerchantNumber == input.MerchantNumber ||
                    (this.MerchantNumber != null &&
                    this.MerchantNumber.Equals(input.MerchantNumber))
                ) && 
                (
                    this.ApprovalCode == input.ApprovalCode ||
                    (this.ApprovalCode != null &&
                    this.ApprovalCode.Equals(input.ApprovalCode))
                ) && 
                (
                    this.AdjudicationCode == input.AdjudicationCode ||
                    (this.AdjudicationCode != null &&
                    this.AdjudicationCode.Equals(input.AdjudicationCode))
                ) && 
                (
                    this.AdjudicationText == input.AdjudicationText ||
                    (this.AdjudicationText != null &&
                    this.AdjudicationText.Equals(input.AdjudicationText))
                ) && 
                (
                    this.HostAuthorizedFlag == input.HostAuthorizedFlag ||
                    (this.HostAuthorizedFlag != null &&
                    this.HostAuthorizedFlag.Equals(input.HostAuthorizedFlag))
                ) && 
                (
                    this.ActivationSequenceNumber == input.ActivationSequenceNumber ||
                    (this.ActivationSequenceNumber != null &&
                    this.ActivationSequenceNumber.Equals(input.ActivationSequenceNumber))
                ) && 
                (
                    this.TerminalTransactionReferenceNumber == input.TerminalTransactionReferenceNumber ||
                    (this.TerminalTransactionReferenceNumber != null &&
                    this.TerminalTransactionReferenceNumber.Equals(input.TerminalTransactionReferenceNumber))
                ) && 
                (
                    this.TerminalTransactionTypeCode == input.TerminalTransactionTypeCode ||
                    (this.TerminalTransactionTypeCode != null &&
                    this.TerminalTransactionTypeCode.Equals(input.TerminalTransactionTypeCode))
                ) && 
                (
                    this.TerminalTenderDescription == input.TerminalTenderDescription ||
                    (this.TerminalTenderDescription != null &&
                    this.TerminalTenderDescription.Equals(input.TerminalTenderDescription))
                ) && 
                (
                    this.ApplicationID == input.ApplicationID ||
                    (this.ApplicationID != null &&
                    this.ApplicationID.Equals(input.ApplicationID))
                ) && 
                (
                    this.EncryptedPAN == input.EncryptedPAN ||
                    (this.EncryptedPAN != null &&
                    this.EncryptedPAN.Equals(input.EncryptedPAN))
                ) && 
                (
                    this.TerminalTransactionCurrencyCode == input.TerminalTransactionCurrencyCode ||
                    (this.TerminalTransactionCurrencyCode != null &&
                    this.TerminalTransactionCurrencyCode.Equals(input.TerminalTransactionCurrencyCode))
                ) && 
                (
                    this.AuthorizationDatetimeUTC0 == input.AuthorizationDatetimeUTC0 ||
                    (this.AuthorizationDatetimeUTC0 != null &&
                    this.AuthorizationDatetimeUTC0.Equals(input.AuthorizationDatetimeUTC0))
                ) && 
                (
                    this.TerminalTransactionEndTimestampUTC0 == input.TerminalTransactionEndTimestampUTC0 ||
                    (this.TerminalTransactionEndTimestampUTC0 != null &&
                    this.TerminalTransactionEndTimestampUTC0.Equals(input.TerminalTransactionEndTimestampUTC0))
                ) && 
                (
                    this.TerminalTransactionToken == input.TerminalTransactionToken ||
                    (this.TerminalTransactionToken != null &&
                    this.TerminalTransactionToken.Equals(input.TerminalTransactionToken))
                ) && 
                (
                    this.InternationalBankAccountNumber == input.InternationalBankAccountNumber ||
                    (this.InternationalBankAccountNumber != null &&
                    this.InternationalBankAccountNumber.Equals(input.InternationalBankAccountNumber))
                ) && 
                (
                    this.BankIdentifierCode == input.BankIdentifierCode ||
                    (this.BankIdentifierCode != null &&
                    this.BankIdentifierCode.Equals(input.BankIdentifierCode))
                ) && 
                (
                    this.CreditorID == input.CreditorID ||
                    (this.CreditorID != null &&
                    this.CreditorID.Equals(input.CreditorID))
                ) && 
                (
                    this.MandateID == input.MandateID ||
                    (this.MandateID != null &&
                    this.MandateID.Equals(input.MandateID))
                ) && 
                (
                    this.PrenotificationText == input.PrenotificationText ||
                    (this.PrenotificationText != null &&
                    this.PrenotificationText.Equals(input.PrenotificationText))
                ) && 
                (
                    this.TenderAuthorizationTerminalID2 == input.TenderAuthorizationTerminalID2 ||
                    (this.TenderAuthorizationTerminalID2 != null &&
                    this.TenderAuthorizationTerminalID2.Equals(input.TenderAuthorizationTerminalID2))
                ) && 
                (
                    this.Xxcustom05 == input.Xxcustom05 ||
                    (this.Xxcustom05 != null &&
                    this.Xxcustom05.Equals(input.Xxcustom05))
                ) && 
                (
                    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.TenderLineItemSequenceNumber != null)
                    hashCode = hashCode * 59 + this.TenderLineItemSequenceNumber.GetHashCode();
                if (this.CardType != null)
                    hashCode = hashCode * 59 + this.CardType.GetHashCode();
                if (this.AccountNumber != null)
                    hashCode = hashCode * 59 + this.AccountNumber.GetHashCode();
                if (this.CardIssueSequenceNumber != null)
                    hashCode = hashCode * 59 + this.CardIssueSequenceNumber.GetHashCode();
                if (this.CardExpirationDate != null)
                    hashCode = hashCode * 59 + this.CardExpirationDate.GetHashCode();
                if (this.ReferenceNumber != null)
                    hashCode = hashCode * 59 + this.ReferenceNumber.GetHashCode();
                if (this.TerminalTransactionStatus != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionStatus.GetHashCode();
                if (this.TerminalTransactionErrorNumber != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionErrorNumber.GetHashCode();
                if (this.TerminalTransactionType != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionType.GetHashCode();
                if (this.ForceOnlineFlag != null)
                    hashCode = hashCode * 59 + this.ForceOnlineFlag.GetHashCode();
                if (this.RequestedAmount != null)
                    hashCode = hashCode * 59 + this.RequestedAmount.GetHashCode();
                if (this.AuthorizationDatetime != null)
                    hashCode = hashCode * 59 + this.AuthorizationDatetime.GetHashCode();
                if (this.TerminalTransactionEndTimestamp != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionEndTimestamp.GetHashCode();
                if (this.RelatedTenderAuthorizatonSequenceNumber != null)
                    hashCode = hashCode * 59 + this.RelatedTenderAuthorizatonSequenceNumber.GetHashCode();
                if (this.TerminalSequenceNumber != null)
                    hashCode = hashCode * 59 + this.TerminalSequenceNumber.GetHashCode();
                if (this.RequestedISOCurrencyNumber != null)
                    hashCode = hashCode * 59 + this.RequestedISOCurrencyNumber.GetHashCode();
                if (this.CardHolderVerificationTypeCode != null)
                    hashCode = hashCode * 59 + this.CardHolderVerificationTypeCode.GetHashCode();
                if (this.TenderAuthorizationTerminalID != null)
                    hashCode = hashCode * 59 + this.TenderAuthorizationTerminalID.GetHashCode();
                if (this.TraceNumber != null)
                    hashCode = hashCode * 59 + this.TraceNumber.GetHashCode();
                if (this.TerminalType != null)
                    hashCode = hashCode * 59 + this.TerminalType.GetHashCode();
                if (this.MerchantNumber != null)
                    hashCode = hashCode * 59 + this.MerchantNumber.GetHashCode();
                if (this.ApprovalCode != null)
                    hashCode = hashCode * 59 + this.ApprovalCode.GetHashCode();
                if (this.AdjudicationCode != null)
                    hashCode = hashCode * 59 + this.AdjudicationCode.GetHashCode();
                if (this.AdjudicationText != null)
                    hashCode = hashCode * 59 + this.AdjudicationText.GetHashCode();
                if (this.HostAuthorizedFlag != null)
                    hashCode = hashCode * 59 + this.HostAuthorizedFlag.GetHashCode();
                if (this.ActivationSequenceNumber != null)
                    hashCode = hashCode * 59 + this.ActivationSequenceNumber.GetHashCode();
                if (this.TerminalTransactionReferenceNumber != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionReferenceNumber.GetHashCode();
                if (this.TerminalTransactionTypeCode != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionTypeCode.GetHashCode();
                if (this.TerminalTenderDescription != null)
                    hashCode = hashCode * 59 + this.TerminalTenderDescription.GetHashCode();
                if (this.ApplicationID != null)
                    hashCode = hashCode * 59 + this.ApplicationID.GetHashCode();
                if (this.EncryptedPAN != null)
                    hashCode = hashCode * 59 + this.EncryptedPAN.GetHashCode();
                if (this.TerminalTransactionCurrencyCode != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionCurrencyCode.GetHashCode();
                if (this.AuthorizationDatetimeUTC0 != null)
                    hashCode = hashCode * 59 + this.AuthorizationDatetimeUTC0.GetHashCode();
                if (this.TerminalTransactionEndTimestampUTC0 != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionEndTimestampUTC0.GetHashCode();
                if (this.TerminalTransactionToken != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionToken.GetHashCode();
                if (this.InternationalBankAccountNumber != null)
                    hashCode = hashCode * 59 + this.InternationalBankAccountNumber.GetHashCode();
                if (this.BankIdentifierCode != null)
                    hashCode = hashCode * 59 + this.BankIdentifierCode.GetHashCode();
                if (this.CreditorID != null)
                    hashCode = hashCode * 59 + this.CreditorID.GetHashCode();
                if (this.MandateID != null)
                    hashCode = hashCode * 59 + this.MandateID.GetHashCode();
                if (this.PrenotificationText != null)
                    hashCode = hashCode * 59 + this.PrenotificationText.GetHashCode();
                if (this.TenderAuthorizationTerminalID2 != null)
                    hashCode = hashCode * 59 + this.TenderAuthorizationTerminalID2.GetHashCode();
                if (this.Xxcustom05 != null)
                    hashCode = hashCode * 59 + this.Xxcustom05.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;
        }
    }

}
