/* Options:
Date: 2025-04-13 07:54:55
Version: 6.10
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.paysecure.acculynk.net

//GlobalNamespace: 
//MakePartial: True
//MakeVirtual: True
//MakeInternal: False
//MakeDataContractsExtensible: False
//AddNullableAnnotations: False
//AddReturnMarker: True
//AddDescriptionAsComments: True
//AddDataContractAttributes: False
//AddIndexesToDataMembers: False
//AddGeneratedCodeAttributes: False
//AddResponseStatus: False
//AddImplicitVersion: 
//InitializeCollections: True
//ExportValueTypes: False
IncludeTypes: TransactionStatusRequest.*
//ExcludeTypes: 
//AddNamespaces: 
//AddDefaultXmlNamespace: http://schemas.servicestack.net/types
*/

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using Paysecure.ServiceModel.Types;
using Paysecure.ServiceModel;

namespace Paysecure.ServiceModel
{
    [DataContract]
    public partial class TransactionStatus
        : PaysecureResponseInternal
    {
        [DataMember]
        public virtual Transaction History { get; set; }

        [DataMember]
        public virtual string ErrorMessage { get; set; }

        [DataMember]
        public virtual string ErrorCode { get; set; }
    }

    [Route("/TransactionStatus", "POST")]
    [DataContract]
    public partial class TransactionStatusRequest
        : IReturn<TransactionStatus>
    {
        [DataMember]
        public virtual RequestorCredentials Credentials { get; set; }

        [DataMember]
        public virtual OriginalTransaction OriginalData { get; set; }
    }

}

namespace Paysecure.ServiceModel.Types
{
    [DataContract]
    public partial class InOutTimes
    {
    }

    public enum OriginalDataType
    {
        TransactionId = 1,
        ReferenceKey = 2,
        ExternalId = 3,
        InternalTransactionId = 4,
    }

    public partial class OriginalTransaction
    {
        public virtual OriginalDataType OriginalIdentifierType { get; set; }
        public virtual string OriginalDataIdentifier { get; set; }
    }

    [DataContract]
    public partial class PaysecureResponseInternal
    {
        [DataMember(EmitDefaultValue=false)]
        public virtual RequestTimestamps Timestamps { get; set; }
    }

    public partial class RequestorCredentials
    {
        [Required]
        public virtual string MerchantId { get; set; }

        [Required]
        public virtual string UserName { get; set; }

        [Required]
        public virtual string Password { get; set; }

        [Required]
        public virtual string Version { get; set; }
    }

    [DataContract]
    public partial class RequestTimestamps
    {
        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes AppLayer { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes ParentLookup { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes RetryLookup { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes GetCardData { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes CardTokenize { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes CardEncrypt { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes DBInsert { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes BackendProcess { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes DBUpdate { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes ParentUpdate { get; set; }

        [DataMember(EmitDefaultValue=false)]
        public virtual InOutTimes Network { get; set; }
    }

    public partial class Transaction
    {
        public Transaction()
        {
            ExternalIds = new string[]{};
        }

        public virtual string TranId { get; set; }
        public virtual string Status { get; set; }
        public virtual string ApprovalCode { get; set; }
        public virtual string ResponseCode { get; set; }
        public virtual string TransactionDT { get; set; }
        public virtual int TransactionAmount { get; set; }
        public virtual string Network { get; set; }
        public virtual int ApprovedAmount { get; set; }
        public virtual int OpenAmount { get; set; }
        public virtual string ParentTranId { get; set; }
        public virtual string[] ExternalIds { get; set; }
        public virtual string LocalDateTime { get; set; }
        public virtual string CurrencyCode { get; set; }
        public virtual string AVS { get; set; }
        public virtual string CVN { get; set; }
    }

}