/* Options: Date: 2026-02-14 10:19:13 SwiftVersion: 6.0 Version: 10.04 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://stf-api-uat.data-xchange.co.za //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: GetPurchaseConditionById.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * Purchase Conditions */ // @Route("/purchaseCondition/{Id}", "GET") // @Api(Description="Purchase Conditions") // @ApiResponse(Description="PurchaseCondition data", IsDefaultResponse=true, StatusCode=200) // @ApiResponse(Description="No Content", ResponseType=typeof(IReturnVoid), StatusCode=204) // @ApiResponse(Description="Specified argument was out of the range of valid values.", ResponseType=typeof(ArgumentOutOfRangeException), StatusCode=400) public class GetPurchaseConditionById : IReturn, IGetDocumentById, Codable { public typealias Return = PurchaseConditionsMessage /** * Purchase Condition ID or Token */ // @ApiMember(Description="Purchase Condition ID or Token", ExcludeInSchema=true, ParameterType="path") public var id:String? required public init(){} } public class PurchaseConditionsMessage : Codable { public var header:Header? public var purchaseConditions:PurchaseConditions? required public init(){} } public protocol IGetDocumentById : ISingleEntityQuery { } public protocol ISingleEntityQuery { var id:String? { get set } } // @DataContract public class Header : Codable { // @DataMember(Name="documentIdentification") public var documentIdentification:DocumentIdentification? // @DataMember(Name="sender") public var sender:Partner? // @DataMember(Name="receiver") public var receiver:Partner? required public init(){} } public class TransactionalParty : Ecom_PartyIdentificationType { public var contact:[Contact] = [] public var address:Address? public var communicationChannel:[AvpList] = [] public var financialInstitutionInformation:FinancialInstitutionInformation? public var dutyFeeTaxRegistration:String? public var entityIdentification:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case contact case address case communicationChannel case financialInstitutionInformation case dutyFeeTaxRegistration case entityIdentification } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) contact = try container.decodeIfPresent([Contact].self, forKey: .contact) ?? [] address = try container.decodeIfPresent(Address.self, forKey: .address) communicationChannel = try container.decodeIfPresent([AvpList].self, forKey: .communicationChannel) ?? [] financialInstitutionInformation = try container.decodeIfPresent(FinancialInstitutionInformation.self, forKey: .financialInstitutionInformation) dutyFeeTaxRegistration = try container.decodeIfPresent(String.self, forKey: .dutyFeeTaxRegistration) entityIdentification = try container.decodeIfPresent(String.self, forKey: .entityIdentification) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if contact.count > 0 { try container.encode(contact, forKey: .contact) } if address != nil { try container.encode(address, forKey: .address) } if communicationChannel.count > 0 { try container.encode(communicationChannel, forKey: .communicationChannel) } if financialInstitutionInformation != nil { try container.encode(financialInstitutionInformation, forKey: .financialInstitutionInformation) } if dutyFeeTaxRegistration != nil { try container.encode(dutyFeeTaxRegistration, forKey: .dutyFeeTaxRegistration) } if entityIdentification != nil { try container.encode(entityIdentification, forKey: .entityIdentification) } } } public enum DocumentAction : String, Codable { case ADD case CHANGE_BY_REFRESH case DELETE case REJECTED } public enum DocumentStatus : String, Codable { case ADDITIONAL_TRANSMISSION case COPY case ORIGINAL } public class AvpList : Codable { public var code:String? public var value:String? required public init(){} } public class BaseDocument : Codable { public var currencyCode:String? public var creationDateTime:Date? public var documentActionCode:DocumentAction? public var documentStatusCode:DocumentStatus? public var documentStructureVersion:String? public var lastUpdateDateTime:Date? public var revisionNumber:Int? public var avpList:[AvpList] = [] required public init(){} } public class PurchaseConditions : BaseDocument { public var purchaseConditionsCurrencyCode:String? public var purchaseConditionsLocationInformation:[PurchaseConditionsLocationInformation] = [] public var currencyExchangeRateInformation:CurrencyExchangeRateInformation? public var buyer:TransactionalParty? public var payee:TransactionalParty? public var payer:TransactionalParty? public var purchaseConditionsIdentification:String? public var remitTo:TransactionalParty? public var seller:TransactionalParty? public var taxRepresentative:TransactionalParty? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case purchaseConditionsCurrencyCode case purchaseConditionsLocationInformation case currencyExchangeRateInformation case buyer case payee case payer case purchaseConditionsIdentification case remitTo case seller case taxRepresentative } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) purchaseConditionsCurrencyCode = try container.decodeIfPresent(String.self, forKey: .purchaseConditionsCurrencyCode) purchaseConditionsLocationInformation = try container.decodeIfPresent([PurchaseConditionsLocationInformation].self, forKey: .purchaseConditionsLocationInformation) ?? [] currencyExchangeRateInformation = try container.decodeIfPresent(CurrencyExchangeRateInformation.self, forKey: .currencyExchangeRateInformation) buyer = try container.decodeIfPresent(TransactionalParty.self, forKey: .buyer) payee = try container.decodeIfPresent(TransactionalParty.self, forKey: .payee) payer = try container.decodeIfPresent(TransactionalParty.self, forKey: .payer) purchaseConditionsIdentification = try container.decodeIfPresent(String.self, forKey: .purchaseConditionsIdentification) remitTo = try container.decodeIfPresent(TransactionalParty.self, forKey: .remitTo) seller = try container.decodeIfPresent(TransactionalParty.self, forKey: .seller) taxRepresentative = try container.decodeIfPresent(TransactionalParty.self, forKey: .taxRepresentative) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if purchaseConditionsCurrencyCode != nil { try container.encode(purchaseConditionsCurrencyCode, forKey: .purchaseConditionsCurrencyCode) } if purchaseConditionsLocationInformation.count > 0 { try container.encode(purchaseConditionsLocationInformation, forKey: .purchaseConditionsLocationInformation) } if currencyExchangeRateInformation != nil { try container.encode(currencyExchangeRateInformation, forKey: .currencyExchangeRateInformation) } if buyer != nil { try container.encode(buyer, forKey: .buyer) } if payee != nil { try container.encode(payee, forKey: .payee) } if payer != nil { try container.encode(payer, forKey: .payer) } if purchaseConditionsIdentification != nil { try container.encode(purchaseConditionsIdentification, forKey: .purchaseConditionsIdentification) } if remitTo != nil { try container.encode(remitTo, forKey: .remitTo) } if seller != nil { try container.encode(seller, forKey: .seller) } if taxRepresentative != nil { try container.encode(taxRepresentative, forKey: .taxRepresentative) } } } // @DataContract public class DocumentIdentification : Codable { // @DataMember(Name="identifier") public var identifier:String? // @DataMember(Name="type") public var type:String? // @DataMember(Name="creationDateAndTime") public var creationDateAndTime:Date? required public init(){} } // @DataContract public class Partner : Codable { // @DataMember(Name="identifier") public var identifier:Identifier? // @DataMember(Name="contactInformation") public var contactInformation:[ContactInformation] = [] required public init(){} } public class DocumentReference : Codable { public var creationDateTime:Date? public var revisionNumber:Int? public var lineItemNumber:Int? public var entityIdentification:String? required public init(){} } public class Contact : Codable { public var contactTypeCode:String? public var personName:String? public var departmentName:String? public var jobTitle:String? public var responsibility:String? public var communicationChannel:[CommunicationChannel] = [] required public init(){} } public class Address : Codable { public var streetAddressOne:String? public var streetAddressTwo:String? public var streetAddressThree:String? public var city:String? public var postalCode:String? public var provinceCode:String? public var countryCode:String? required public init(){} } public class FinancialInstitutionInformation : Codable { public var financialInstitutionBranchName:String? public var financialInstitutionName:String? public var financialRoutingNumber:FinancialRoutingNumber? public var financialAccount:FinancialAccount? public var swiftCode:String? public var exportersCode:String? required public init(){} } public class Ecom_PartyIdentificationType : Codable { public var gln:String? public var name:String? public var additionalPartyIdentification:[AvpList] = [] required public init(){} } public class PurchaseConditionsLocationInformation : Codable { public var purchaseConditionsLineItem:[PurchaseConditionsLineItem] = [] public var shipFrom:TransactionalParty? public var shipTo:TransactionalParty? required public init(){} } public class CurrencyExchangeRateInformation : Codable { public var currencyConversionFromCode:String? public var currencyConversionToCode:String? public var exchangeRate:Int? public var exchangeRateDateTime:Date? required public init(){} } public class AllowanceCharge : Codable { public var allowanceChargeAmount:Double? public var allowanceChargePercentage:Double? public var allowanceChargeType:String? public var allowanceOrChargeType:String? public var amountPerUnit:Double? public var baseAmount:Double? public var baseNumberOfUnits:String? public var bracketIdentifier:String? public var effectiveDateType:Date? public var sequenceNumber:String? public var settlementType:String? public var specialServiceType:String? public var allowanceChargeDescription:String? required public init(){} } // @DataContract public class Identifier : Codable { // @DataMember(Name="authority") public var authority:String? // @DataMember(Name="text") public var text:String? required public init(){} } // @DataContract public class ContactInformation : Codable { required public init(){} } public class Quantity : Codable { public var value:Double? public var measurementUnitCode:String? public var codeListVersion:String? required public init(){} } public class TransactionalTradeItem : Codable { public var gtin:String? public var additionalTradeItemIdentification:[AvpList] = [] public var tradeItemQuantity:Double? public var tradeItemDescription:String? public var productVariantIdentifier:String? public var itemTypeCode:String? public var tradeItemDataOwner:String? public var butterFatReference:String? public var transactionalItemData:[TransactionalItemData] = [] public var colour:[Colour] = [] public var size:Size? public var tradeItemClassification:TradeItemClassification? public var avpList:[AvpList] = [] required public init(){} } public class CommunicationChannel : Codable { public var communicationChannelCode:String? public var communicationChannelName:String? public var communicationValue:String? required public init(){} } public class FinancialRoutingNumber : Codable { public var number:String? public var numberTypeCode:String? required public init(){} } public class FinancialAccount : Codable { public var number:String? public var numberTypeCode:String? public var name:String? required public init(){} } public class TimeMeasurement : Codable { public var timeMeasurementUnitCode:String? public var value:Double? required public init(){} } public class PurchaseConditionsLineItem : Codable { public var discrepancyTolerancePercentage:Double? public var lineItemNumber:Int? public var packagingTypeCode:String? public var parentLineItemNumber:Int? public var purchaseConditionsQuantity:Quantity? public var purchaseConditionsCommitmentPeriod:[PurchaseConditionsCommitmentPeriod] = [] public var purchaseConditionsPriceInformation:[PurchaseConditionsPriceInformation] = [] public var allowanceCharge:[AllowanceCharge] = [] public var transactionalTradeItem:TransactionalTradeItem? public var leviedDutyFeeTax:LeviedDutyFeeTax? public var avpList:[AvpList] = [] public var effectivePeriod:DateTimeRange? public var materialSpecification:DocumentReference? public var purchaseConditionsQuantityRange:QuantityRange? required public init(){} } public class LeviedDutyFeeTax : Codable { public var dutyFeeTaxAmount:Double? public var dutyFeeTaxBasisAmount:Double? public var dutyFeeTaxDescription:String? public var dutyFeeTaxPercentage:Double? required public init(){} } public class TransactionalItemData : Codable { public var availableForSaleDate:Date? public var batchNumber:String? public var bestBeforeDate:Date? public var countryOfOrigin:String? public var itemExpirationDate:Date? public var lotNumber:String? public var packagingDate:Date? public var productionDate:Date? public var productQualityIndication:String? public var sellByDate:Date? public var serialNumber:[String] = [] public var shelfLife:String? public var tradeItemQuantity:Int? public var itemInContactWithFoodProduct:Bool? public var transactionalItemWeight:[TransactionalItem] = [] public var transactionalItemVolume:[TransactionalItem] = [] public var serialNumberRange:[SerialNumberRange] = [] public var transactionalItemDimensions:[TransactionalItemDimension] = [] public var transactionalItemLogisticUnitInformation:TransactionalItemLogisticUnitInformation? public var transactionalItemDataCarrierAndIdentification:TransactionalItemDataCarrierAndIdentification? public var tradeItemWaste:[TradeItemWaste] = [] public var transactionalItemOrganicInformation:TransactionalItemOrganicInformation? public var avpList:[AvpList] = [] required public init(){} } public class Colour : Codable { public var colourCode:String? public var colourDescription:String? required public init(){} } public class Size : Codable { public var descriptiveSize:String? public var sizeCode:String? required public init(){} } public class TradeItemClassification : Codable { public var gpcCategoryCode:String? public var additionalTradeItemClassificationCode:[AvpList] = [] public var gpcCategoryName:String? public var gpcAttribute:[AvpList] = [] required public init(){} } public class PurchaseConditionsCommitmentPeriod : Codable { public var commitmentPeriodDuration:TimeMeasurement? public var purchaseConditionsCommitmentTypeCode:String? required public init(){} } public class PurchaseConditionsPriceInformation : Codable { public var itemPriceBaseQuantity:Quantity? public var itemPriceExclusiveAllowancesCharges:Double? public var quantityRange:QuantityRange? public var effectivePeriod:DateTimeRange? required public init(){} } public class DateTimeRange : Codable { public var beginDate:Date? @TimeSpan public var beginTime:TimeInterval? public var endDate:Date? @TimeSpan public var endTime:TimeInterval? required public init(){} } public class QuantityRange : Codable { public var maximumQuantity:Quantity? public var minimumQuantity:Quantity? required public init(){} } public class TransactionalItem : Codable { public var measurementUnitCode:String? public var measurementType:String? public var measurementValue:String? required public init(){} } public class SerialNumberRange : Codable { public var maximumValue:String? public var minimumValue:String? required public init(){} } public class TransactionalItemDimension : Codable { public var measurementUnitCode:String? public var depth:String? public var height:String? public var width:String? required public init(){} } public class TransactionalItemLogisticUnitInformation : Codable { public var numberOfLayers:Int? public var numberOfUnitsPerLayer:Int? public var numberOfUnitsPerPallet:Int? public var packagingTerms:String? public var packageTypeCode:String? public var maximumStackingFactor:Int? public var returnablePackageTransportCostPayment:String? public var dimensionsOfLogisticUnit:[TransactionalItemDimension] = [] required public init(){} } public class TransactionalItemDataCarrierAndIdentification : Codable { public var gs1TransactionalItemIdentificationKey:String? public var dataCarrier:String? required public init(){} } public class TradeItemWaste : Codable { public var wasteIdentification:String? public var typeOfWaste:[AvpList] = [] required public init(){} } public class TransactionalItemOrganicInformation : Codable { public var isTradeItemOrganic:Bool? public var organicCertification:String? required public init(){} }