/* Options: Date: 2025-05-10 02:52:36 SwiftVersion: 5.0 Version: 8.40 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://active-ewebservice.biz/aeservices30/api //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: SubmitPOSTransactionRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * In development, not yet for public use. */ // @Route("/SubmitPOSTransaction", "POST") // @DataContract public class SubmitPOSTransactionRequest : BaseSecureRequest, IReturn { public typealias Return = SubmitPOSTransactionResponse // @DataMember public var acct:Int? // @DataMember public var locId:Int? // @DataMember public var taxId:Int? // @DataMember public var items:[PosLineItem] = [] /** * Can be CARD, CARD_DEVICE, CASH, CHARGE, SUSPEND, ONFILE, or OTHER */ // @DataMember // @ApiMember(DataType="string", Description="Can be CARD, CARD_DEVICE, CASH, CHARGE, SUSPEND, ONFILE, or OTHER", Name="TenderType", ParameterType="query") public var tenderType:String /** * Only applicable for Tender Type of OTHER. Send the Payment Category # */ // @DataMember // @ApiMember(DataType="string", Description="Only applicable for Tender Type of OTHER. Send the Payment Category #", Name="OtherTenderCategory", ParameterType="query") public var otherTenderCategory:Int? // @DataMember public var cardToken:String // @DataMember public var cardExpiration:String // @DataMember public var tokenPk:Int? // @DataMember public var saveCard:Bool // @DataMember public var poNumber:String /** * Can be INVOICE, PROPOSAL, APPROVAL, ORDER, or LOANER. Defaults to INVOICE is not sent. */ // @DataMember // @ApiMember(DataType="string", Description="Can be INVOICE, PROPOSAL, APPROVAL, ORDER, or LOANER. Defaults to INVOICE is not sent.", Name="TransactionMode", ParameterType="query") public var transactionMode:String /** * Only valid for Approvals and Orders. */ // @DataMember // @ApiMember(DataType="decimal", Description="Only valid for Approvals and Orders.", Name="Deposit", ParameterType="query") public var deposit:Double // @DataMember public var notes:String /** * Do Not Send This Parameter */ // @DataMember // @ApiMember(Description="Do Not Send This Parameter", Name="OnlineContractRef", ParameterType="query") public var onlineContractRef:String // @DataMember public var shipId:Int? // @DataMember public var cardTerminalId:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case acct case locId case taxId case items case tenderType case otherTenderCategory case cardToken case cardExpiration case tokenPk case saveCard case poNumber case transactionMode case deposit case notes case onlineContractRef case shipId case cardTerminalId } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) acct = try container.decodeIfPresent(Int.self, forKey: .acct) locId = try container.decodeIfPresent(Int.self, forKey: .locId) taxId = try container.decodeIfPresent(Int.self, forKey: .taxId) items = try container.decodeIfPresent([PosLineItem].self, forKey: .items) ?? [] tenderType = try container.decodeIfPresent(String.self, forKey: .tenderType) otherTenderCategory = try container.decodeIfPresent(Int.self, forKey: .otherTenderCategory) cardToken = try container.decodeIfPresent(String.self, forKey: .cardToken) cardExpiration = try container.decodeIfPresent(String.self, forKey: .cardExpiration) tokenPk = try container.decodeIfPresent(Int.self, forKey: .tokenPk) saveCard = try container.decodeIfPresent(Bool.self, forKey: .saveCard) poNumber = try container.decodeIfPresent(String.self, forKey: .poNumber) transactionMode = try container.decodeIfPresent(String.self, forKey: .transactionMode) deposit = try container.decodeIfPresent(Double.self, forKey: .deposit) notes = try container.decodeIfPresent(String.self, forKey: .notes) onlineContractRef = try container.decodeIfPresent(String.self, forKey: .onlineContractRef) shipId = try container.decodeIfPresent(Int.self, forKey: .shipId) cardTerminalId = try container.decodeIfPresent(String.self, forKey: .cardTerminalId) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if acct != nil { try container.encode(acct, forKey: .acct) } if locId != nil { try container.encode(locId, forKey: .locId) } if taxId != nil { try container.encode(taxId, forKey: .taxId) } if items.count > 0 { try container.encode(items, forKey: .items) } if tenderType != nil { try container.encode(tenderType, forKey: .tenderType) } if otherTenderCategory != nil { try container.encode(otherTenderCategory, forKey: .otherTenderCategory) } if cardToken != nil { try container.encode(cardToken, forKey: .cardToken) } if cardExpiration != nil { try container.encode(cardExpiration, forKey: .cardExpiration) } if tokenPk != nil { try container.encode(tokenPk, forKey: .tokenPk) } if saveCard != nil { try container.encode(saveCard, forKey: .saveCard) } if poNumber != nil { try container.encode(poNumber, forKey: .poNumber) } if transactionMode != nil { try container.encode(transactionMode, forKey: .transactionMode) } if deposit != nil { try container.encode(deposit, forKey: .deposit) } if notes != nil { try container.encode(notes, forKey: .notes) } if onlineContractRef != nil { try container.encode(onlineContractRef, forKey: .onlineContractRef) } if shipId != nil { try container.encode(shipId, forKey: .shipId) } if cardTerminalId != nil { try container.encode(cardTerminalId, forKey: .cardTerminalId) } } } // @DataContract public class SubmitPOSTransactionResponse : BaseResponse { // @DataMember public var refNumber:String // @DataMember public var errorItems:[PosResponseItem] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case refNumber case errorItems } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) refNumber = try container.decodeIfPresent(String.self, forKey: .refNumber) errorItems = try container.decodeIfPresent([PosResponseItem].self, forKey: .errorItems) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if refNumber != nil { try container.encode(refNumber, forKey: .refNumber) } if errorItems.count > 0 { try container.encode(errorItems, forKey: .errorItems) } } } // @DataContract public class BaseRequest : Codable { /** * This is your AIM API Key provided by Tri-Tech */ // @DataMember // @ApiMember(DataType="string", Description="This is your AIM API Key provided by Tri-Tech", IsRequired=true, Name="ApiKey", ParameterType="header") public var apiKey:String // @DataMember // @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header") public var oAuthToken:String required public init(){} } // @DataContract public class BaseSecureRequest : BaseRequest { /** * */ // @DataMember // @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header") public var token:String /** * */ // @DataMember // @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header") public var deviceId:String /** * */ // @DataMember // @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header") public var appId:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case token case deviceId case appId } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) token = try container.decodeIfPresent(String.self, forKey: .token) deviceId = try container.decodeIfPresent(String.self, forKey: .deviceId) appId = try container.decodeIfPresent(String.self, forKey: .appId) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if token != nil { try container.encode(token, forKey: .token) } if deviceId != nil { try container.encode(deviceId, forKey: .deviceId) } if appId != nil { try container.encode(appId, forKey: .appId) } } } // @DataContract public class PosLineItem : IScanItem, Codable { // @DataMember public var skuPk:Int? // @DataMember public var sasPk:Int? // @DataMember public var sku:String // @DataMember public var serial:String // @DataMember public var quantity:Double // @DataMember public var exceptionInfo:ExceptionInfo // @DataMember public var discount:Double? // @DataMember public var nicsCat:Int? // @DataMember public var nicsSub:Int? // @DataMember public var priceOverride:Double? // @DataMember public var allowPriceOverrideToIgnoreMinPrice:Bool // @DataMember public var notes:String required public init(){} } // @DataContract public class PosResponseItem : PosLineItem { // @DataMember public var priceEach:Double // @DataMember public var price:Double // @DataMember public var discountable:Bool // @DataMember public var errorMessage:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case priceEach case price case discountable case errorMessage } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) priceEach = try container.decodeIfPresent(Double.self, forKey: .priceEach) price = try container.decodeIfPresent(Double.self, forKey: .price) discountable = try container.decodeIfPresent(Bool.self, forKey: .discountable) errorMessage = try container.decodeIfPresent(String.self, forKey: .errorMessage) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if priceEach != nil { try container.encode(priceEach, forKey: .priceEach) } if price != nil { try container.encode(price, forKey: .price) } if discountable != nil { try container.encode(discountable, forKey: .discountable) } if errorMessage != nil { try container.encode(errorMessage, forKey: .errorMessage) } } } // @DataContract public class ExceptionInfo : Codable { // @DataMember public var barcode:String // @DataMember public var Description:String // @DataMember public var base64Image:String // @DataMember public var category:Int // @DataMember public var subCategory:Int? required public init(){} } public protocol IScanItem { var skuPk:Int? { get set } var sasPk:Int? { get set } var sku:String { get set } var serial:String { get set } var quantity:Double { get set } var exceptionInfo:ExceptionInfo { get set } } // @DataContract public class BaseResponse : Codable { /** * */ // @DataMember // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body") public var status:BaseResponseResult required public init(){} }