GET | /api/SearchCustomers |
---|
import Foundation
import ServiceStack
/**
* SearchCustomersRequires active-e Customer Service.
*/
// @DataContract
public class SearchCustomersRequest : BaseSecureRequest
{
// @DataMember
public var searchString:String
// @DataMember
public var includeStoreAccounts:Bool?
// @DataMember
public var startOffset:Int?
// @DataMember
public var recordCount:Int?
// @DataMember
public var includeDependants:Bool?
// @DataMember
public var includeAdditionalDetails:Bool?
// @DataMember
public var changedDate:Date?
// @DataMember
public var locId:Int?
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case searchString
case includeStoreAccounts
case startOffset
case recordCount
case includeDependants
case includeAdditionalDetails
case changedDate
case locId
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
searchString = try container.decodeIfPresent(String.self, forKey: .searchString)
includeStoreAccounts = try container.decodeIfPresent(Bool.self, forKey: .includeStoreAccounts)
startOffset = try container.decodeIfPresent(Int.self, forKey: .startOffset)
recordCount = try container.decodeIfPresent(Int.self, forKey: .recordCount)
includeDependants = try container.decodeIfPresent(Bool.self, forKey: .includeDependants)
includeAdditionalDetails = try container.decodeIfPresent(Bool.self, forKey: .includeAdditionalDetails)
changedDate = try container.decodeIfPresent(Date.self, forKey: .changedDate)
locId = try container.decodeIfPresent(Int.self, forKey: .locId)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if searchString != nil { try container.encode(searchString, forKey: .searchString) }
if includeStoreAccounts != nil { try container.encode(includeStoreAccounts, forKey: .includeStoreAccounts) }
if startOffset != nil { try container.encode(startOffset, forKey: .startOffset) }
if recordCount != nil { try container.encode(recordCount, forKey: .recordCount) }
if includeDependants != nil { try container.encode(includeDependants, forKey: .includeDependants) }
if includeAdditionalDetails != nil { try container.encode(includeAdditionalDetails, forKey: .includeAdditionalDetails) }
if changedDate != nil { try container.encode(changedDate, forKey: .changedDate) }
if locId != nil { try container.encode(locId, forKey: .locId) }
}
}
// @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 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 SearchCustomersResponse : BaseResponse
{
// @DataMember
public var startOffset:Int
// @DataMember
public var recordCount:Int
// @DataMember
public var remainingRecords:Int
// @DataMember
public var totalRecords:Int
// @DataMember
public var customers:[CustomerSearchRecord] = []
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case startOffset
case recordCount
case remainingRecords
case totalRecords
case customers
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
startOffset = try container.decodeIfPresent(Int.self, forKey: .startOffset)
recordCount = try container.decodeIfPresent(Int.self, forKey: .recordCount)
remainingRecords = try container.decodeIfPresent(Int.self, forKey: .remainingRecords)
totalRecords = try container.decodeIfPresent(Int.self, forKey: .totalRecords)
customers = try container.decodeIfPresent([CustomerSearchRecord].self, forKey: .customers) ?? []
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if startOffset != nil { try container.encode(startOffset, forKey: .startOffset) }
if recordCount != nil { try container.encode(recordCount, forKey: .recordCount) }
if remainingRecords != nil { try container.encode(remainingRecords, forKey: .remainingRecords) }
if totalRecords != nil { try container.encode(totalRecords, forKey: .totalRecords) }
if customers.count > 0 { try container.encode(customers, forKey: .customers) }
}
}
// @DataContract
public class BaseResponse : Codable
{
/**
*
*/
// @DataMember
// @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
public var status:BaseResponseResult
required public init(){}
}
// @DataContract
public class BaseResponseResult : Codable
{
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="StatusCode", ParameterType="body")
public var statusCode:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="Login", ParameterType="body")
public var login:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorCode", ParameterType="body")
public var errorCode:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorDisplayText", ParameterType="body")
public var errorDisplayText:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorMessage", ParameterType="body")
public var errorMessage:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="DomainName", ParameterType="body")
public var domainName:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="IPAddress", ParameterType="body")
public var ipAddress:String
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 BindableObject : Codable
{
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 CustomerDefaultInfo : Codable
{
// @DataMember
public var id:Int
// @DataMember
public var desc:String
// @DataMember
public var shortDesc:String
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 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(){}
}
Swift SearchCustomersRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /api/SearchCustomers HTTP/1.1 Host: active-ewebservice.biz Accept: application/xml
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <SearchCustomersResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AIM.WebService"> <Status> <DomainName>String</DomainName> <ErrorCode>String</ErrorCode> <ErrorDisplayText>String</ErrorDisplayText> <ErrorMessage>String</ErrorMessage> <IpAddress>String</IpAddress> <Login>String</Login> <StatusCode>String</StatusCode> </Status> <Customers xmlns:d2p1="http://schemas.datacontract.org/2004/07/AIM"> <d2p1:CustomerSearchRecord> <d2p1:Acct>0</d2p1:Acct> <d2p1:AdditionalDetails> <d2p1:CanCharge>false</d2p1:CanCharge> <d2p1:CreationDate>0001-01-01T00:00:00</d2p1:CreationDate> <d2p1:CustomerDefault> <d2p1:Desc>String</d2p1:Desc> <d2p1:Id>0</d2p1:Id> <d2p1:ShortDesc>String</d2p1:ShortDesc> </d2p1:CustomerDefault> <d2p1:DlNumber>String</d2p1:DlNumber> <d2p1:LastModifiedDate>0001-01-01T00:00:00</d2p1:LastModifiedDate> <d2p1:Location> <d2p1:Active>false</d2p1:Active> <d2p1:CashSaleAcct>0</d2p1:CashSaleAcct> <d2p1:Desc>String</d2p1:Desc> <d2p1:Id>0</d2p1:Id> <d2p1:InStorePickup>String</d2p1:InStorePickup> <d2p1:Latitude>0</d2p1:Latitude> <d2p1:Longitude>0</d2p1:Longitude> <d2p1:Region>String</d2p1:Region> <d2p1:ShortDesc>String</d2p1:ShortDesc> </d2p1:Location> <d2p1:Notes>String</d2p1:Notes> <d2p1:Phone2>String</d2p1:Phone2> <d2p1:Phone3>String</d2p1:Phone3> <d2p1:Phone4>String</d2p1:Phone4> <d2p1:PopupNotes>String</d2p1:PopupNotes> <d2p1:TaxAuthority> <d2p1:Desc>String</d2p1:Desc> <d2p1:Id>0</d2p1:Id> <d2p1:ShortDesc>String</d2p1:ShortDesc> </d2p1:TaxAuthority> </d2p1:AdditionalDetails> <d2p1:Addr1>String</d2p1:Addr1> <d2p1:Addr2>String</d2p1:Addr2> <d2p1:Barcode>String</d2p1:Barcode> <d2p1:City>String</d2p1:City> <d2p1:Color>0</d2p1:Color> <d2p1:DependantInfo> <d2p1:CustomerSearchRecord.DependantRecord> <d2p1:Id>0</d2p1:Id> <d2p1:Name>String</d2p1:Name> <d2p1:OnlineId>String</d2p1:OnlineId> <d2p1:School>String</d2p1:School> <d2p1:SchoolDistrict>String</d2p1:SchoolDistrict> </d2p1:CustomerSearchRecord.DependantRecord> </d2p1:DependantInfo> <d2p1:Email>String</d2p1:Email> <d2p1:Hold>false</d2p1:Hold> <d2p1:Last>String</d2p1:Last> <d2p1:MatchedOn>String</d2p1:MatchedOn> <d2p1:Name>String</d2p1:Name> <d2p1:OpenInvoices>false</d2p1:OpenInvoices> <d2p1:Phone>String</d2p1:Phone> <d2p1:Pk>0</d2p1:Pk> <d2p1:RentalActivity>false</d2p1:RentalActivity> <d2p1:St>String</d2p1:St> <d2p1:StLoc>String</d2p1:StLoc> <d2p1:Zip>String</d2p1:Zip> </d2p1:CustomerSearchRecord> </Customers> <RecordCount>0</RecordCount> <RemainingRecords>0</RemainingRecords> <StartOffset>0</StartOffset> <TotalRecords>0</TotalRecords> </SearchCustomersResponse>