/* Options: Date: 2025-08-04 00:18:46 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: CustomerInfoRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * CustomerInfoRequires active-e Customer Service. */ // @Route("/CustomerInfo", "GET") // @DataContract public class CustomerInfoRequest : BaseSecureRequest, IReturn { public typealias Return = CustomerInfoResponse // @DataMember public var acct:Int required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case acct } 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) } 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) } } } // @DataContract public class CustomerInfoResponse : BaseResponse { // @DataMember public var customer:CustomerSearchRecord // @DataMember public var discountInfo:CustomerDiscountInfo // @DataMember public var memberships:[CustomerMembershipInfo] = [] // @DataMember public var emails:[CustomerEmailInfo] = [] // @DataMember public var attributes:[AttributeValue] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case customer case discountInfo case memberships case emails case attributes } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) customer = try container.decodeIfPresent(CustomerSearchRecord.self, forKey: .customer) discountInfo = try container.decodeIfPresent(CustomerDiscountInfo.self, forKey: .discountInfo) memberships = try container.decodeIfPresent([CustomerMembershipInfo].self, forKey: .memberships) ?? [] emails = try container.decodeIfPresent([CustomerEmailInfo].self, forKey: .emails) ?? [] attributes = try container.decodeIfPresent([AttributeValue].self, forKey: .attributes) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if customer != nil { try container.encode(customer, forKey: .customer) } if discountInfo != nil { try container.encode(discountInfo, forKey: .discountInfo) } if memberships.count > 0 { try container.encode(memberships, forKey: .memberships) } if emails.count > 0 { try container.encode(emails, forKey: .emails) } if attributes.count > 0 { try container.encode(attributes, forKey: .attributes) } } } // @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 /** * The OAuthToken token return by AeServices30 */ // @DataMember // @ApiMember(DataType="string", Description="The OAuthToken token return by AeServices30", IsRequired=true, Name="OAuthToken", ParameterType="Header") public var oAuthToken:String /** * The Device ID of the Mobile Device. Not used for non-mobile devices. */ // @DataMember // @ApiMember(DataType="string", Description="The Device ID of the Mobile Device. Not used for non-mobile devices.", Name="DeviceId", ParameterType="Header") public var deviceId:String /** * An identifier for your integration */ // @DataMember // @ApiMember(DataType="string", Description="An identifier for your integration", IsRequired=true, Name="AppId", ParameterType="Header") public var appId:String required public init(){} } // @DataContract public class BaseSecureRequest : BaseRequest { /** * The Login Token return by the Security API. Required for secured calls. */ // @DataMember // @ApiMember(DataType="string", Description="The Login Token return by the Security API. Required for secured calls.", Name="Token", ParameterType="Header") public var token:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case token } 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) } 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) } } } // @DataContract public class LocationInfo : Codable { // @DataMember public var id:Int // @DataMember public var desc:String // @DataMember public var shortDesc:String // @DataMember public var region:String // @DataMember public var latitude:Double // @DataMember public var longitude:Double // @DataMember public var inStorePickup:String // @DataMember public var active:Bool // @DataMember public var cashSaleAcct:Int? required public init(){} } // @DataContract public class CustomerSearchRecord : BindableObject { // @DataMember public var pk:Int // @DataMember public var acct:Int // @DataMember public var last:String // @DataMember public var name:String // @DataMember public var addr1:String // @DataMember public var addr2:String // @DataMember public var city:String // @DataMember public var st:String // @DataMember public var zip:String // @DataMember public var phone:String // @DataMember public var email:String // @DataMember public var openInvoices:Bool // @DataMember public var rentalActivity:Bool // @DataMember public var stLoc:String // @DataMember public var hold:Bool // @DataMember public var barcode:String // @DataMember public var color:Int // @DataMember public var dependantInfo:[DependantRecord] = [] // @DataMember public var additionalDetails:AdditionalDetail // @DataMember public var matchedOn:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case pk case acct case last case name case addr1 case addr2 case city case st case zip case phone case email case openInvoices case rentalActivity case stLoc case hold case barcode case color case dependantInfo case additionalDetails case matchedOn } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) pk = try container.decodeIfPresent(Int.self, forKey: .pk) acct = try container.decodeIfPresent(Int.self, forKey: .acct) last = try container.decodeIfPresent(String.self, forKey: .last) name = try container.decodeIfPresent(String.self, forKey: .name) addr1 = try container.decodeIfPresent(String.self, forKey: .addr1) addr2 = try container.decodeIfPresent(String.self, forKey: .addr2) city = try container.decodeIfPresent(String.self, forKey: .city) st = try container.decodeIfPresent(String.self, forKey: .st) zip = try container.decodeIfPresent(String.self, forKey: .zip) phone = try container.decodeIfPresent(String.self, forKey: .phone) email = try container.decodeIfPresent(String.self, forKey: .email) openInvoices = try container.decodeIfPresent(Bool.self, forKey: .openInvoices) rentalActivity = try container.decodeIfPresent(Bool.self, forKey: .rentalActivity) stLoc = try container.decodeIfPresent(String.self, forKey: .stLoc) hold = try container.decodeIfPresent(Bool.self, forKey: .hold) barcode = try container.decodeIfPresent(String.self, forKey: .barcode) color = try container.decodeIfPresent(Int.self, forKey: .color) dependantInfo = try container.decodeIfPresent([DependantRecord].self, forKey: .dependantInfo) ?? [] additionalDetails = try container.decodeIfPresent(AdditionalDetail.self, forKey: .additionalDetails) matchedOn = try container.decodeIfPresent(String.self, forKey: .matchedOn) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if pk != nil { try container.encode(pk, forKey: .pk) } if acct != nil { try container.encode(acct, forKey: .acct) } if last != nil { try container.encode(last, forKey: .last) } if name != nil { try container.encode(name, forKey: .name) } if addr1 != nil { try container.encode(addr1, forKey: .addr1) } if addr2 != nil { try container.encode(addr2, forKey: .addr2) } if city != nil { try container.encode(city, forKey: .city) } if st != nil { try container.encode(st, forKey: .st) } if zip != nil { try container.encode(zip, forKey: .zip) } if phone != nil { try container.encode(phone, forKey: .phone) } if email != nil { try container.encode(email, forKey: .email) } if openInvoices != nil { try container.encode(openInvoices, forKey: .openInvoices) } if rentalActivity != nil { try container.encode(rentalActivity, forKey: .rentalActivity) } if stLoc != nil { try container.encode(stLoc, forKey: .stLoc) } if hold != nil { try container.encode(hold, forKey: .hold) } if barcode != nil { try container.encode(barcode, forKey: .barcode) } if color != nil { try container.encode(color, forKey: .color) } if dependantInfo.count > 0 { try container.encode(dependantInfo, forKey: .dependantInfo) } if additionalDetails != nil { try container.encode(additionalDetails, forKey: .additionalDetails) } if matchedOn != nil { try container.encode(matchedOn, forKey: .matchedOn) } } } // @DataContract public class CustomerDiscountInfo : Codable { // @DataMember public var accessoryInventory:Double // @DataMember public var serializedInventory:Double // @DataMember public var shortTermRental:Double // @DataMember public var nonInventory:Double // @DataMember public var labor:Double // @DataMember public var mediaInventory:Double // @DataMember public var categoryLevelDiscounts:[CategoryLevelDiscount] = [] // @DataMember public var priceLevel:String required public init(){} } // @DataContract public class CustomerMembershipInfo : Codable { // @DataMember public var Description:String // @DataMember public var teeLevel:Int // @DataMember public var webTeeLevel:Int // @DataMember public var stationLevel:Int required public init(){} } // @DataContract public class CustomerEmailInfo : Codable { // @DataMember public var Description:String // @DataMember public var email:String // @DataMember public var method:String // @DataMember public var type:String required public init(){} } // @DataContract public class AttributeValue : Codable { // @DataMember public var name:String // @DataMember public var tag:String // @DataMember public var value:String required public init(){} } // @DataContract public class CustomerDefaultInfo : Codable { // @DataMember public var id:Int // @DataMember public var desc:String // @DataMember public var shortDesc:String required public init(){} } // @DataContract public class DependantRecord : Codable { // @DataMember public var name:String // @DataMember public var onlineId:String // @DataMember public var schoolDistrict:String // @DataMember public var school:String // @DataMember public var id:Int required public init(){} } // @DataContract public class AdditionalDetail : Codable { // @DataMember public var creationDate:Date // @DataMember public var lastModifiedDate:Date // @DataMember public var notes:String // @DataMember public var customerDefault:CustomerDefaultInfo // @DataMember public var taxAuthority:TaxAuthorityInfo // @DataMember public var canCharge:Bool // @DataMember public var popupNotes:String // @DataMember public var dlNumber:String // @DataMember public var phone2:String // @DataMember public var phone3:String // @DataMember public var phone4:String // @DataMember public var location:LocationInfo required public init(){} } // @DataContract public class BindableObject : Codable { required public init(){} } // @DataContract public class CategoryLevelDiscount : Codable { // @DataMember public var category:Int // @DataMember public var subCategory:Int? // @DataMember public var discountType:String // @DataMember public var discountAmount:Double required public init(){} } // @DataContract public class TaxAuthorityInfo : Codable { // @DataMember public var id:Int // @DataMember public var desc:String // @DataMember public var shortDesc:String required public init(){} } // @DataContract public class BaseResponse : Codable { /** * */ // @DataMember // @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body") public var status:BaseResponseResult required public init(){} }