/* Options: Date: 2026-02-14 10:15:31 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: GetItemDataNotification.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * Item Data Notification */ // @Route("/itemDataNotification", "GET") // @Api(Description="Item Data Notification") // @ApiResponse(Description="ItemDataNotification message", IsDefaultResponse=true, StatusCode=200) // @ApiResponse(Description="No Content", ResponseType=typeof(IReturnVoid), StatusCode=204) public class GetItemDataNotification : IReturn, Codable { public typealias Return = ResultItem required public init(){} } public class ResultItem : IDocument, Codable { public var token:String? public var item:ItemDataNotificationMessage? required public init(){} } public protocol IDocument : IHaveToken { } public protocol IHaveToken { var token:String? { get set } } 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 class ItemDataNotificationLineItem : Ecom_TradeItemIdentification { public var brandName:String? public var gpcCategoryCode:String? public var isTheProductVariantPreferred:Bool? public var lineItemNumber:Int? public var parentLineItemNumber:Int? public var productVariantIdentifier:IdentifierType? public var quantityOfItemTypes:Double? public var quantityOfItemUnits:Double? public var tradeItemDescription:[String] = [] public var tradeItemUnitDescriptorCode:String? public var itemDataTradingPartnerNeutral:ItemDataTradingPartnerNeutral? public var itemDataTradingPartnerDependent:[ItemDataTradingPartnerDependent] = [] public var lowerLevelTradeItem:[LowerLevelTradeItem] = [] public var avpList:[AvpList] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case brandName case gpcCategoryCode case isTheProductVariantPreferred case lineItemNumber case parentLineItemNumber case productVariantIdentifier case quantityOfItemTypes case quantityOfItemUnits case tradeItemDescription case tradeItemUnitDescriptorCode case itemDataTradingPartnerNeutral case itemDataTradingPartnerDependent case lowerLevelTradeItem case avpList } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) brandName = try container.decodeIfPresent(String.self, forKey: .brandName) gpcCategoryCode = try container.decodeIfPresent(String.self, forKey: .gpcCategoryCode) isTheProductVariantPreferred = try container.decodeIfPresent(Bool.self, forKey: .isTheProductVariantPreferred) lineItemNumber = try container.decodeIfPresent(Int.self, forKey: .lineItemNumber) parentLineItemNumber = try container.decodeIfPresent(Int.self, forKey: .parentLineItemNumber) productVariantIdentifier = try container.decodeIfPresent(IdentifierType.self, forKey: .productVariantIdentifier) quantityOfItemTypes = try container.decodeIfPresent(Double.self, forKey: .quantityOfItemTypes) quantityOfItemUnits = try container.decodeIfPresent(Double.self, forKey: .quantityOfItemUnits) tradeItemDescription = try container.decodeIfPresent([String].self, forKey: .tradeItemDescription) ?? [] tradeItemUnitDescriptorCode = try container.decodeIfPresent(String.self, forKey: .tradeItemUnitDescriptorCode) itemDataTradingPartnerNeutral = try container.decodeIfPresent(ItemDataTradingPartnerNeutral.self, forKey: .itemDataTradingPartnerNeutral) itemDataTradingPartnerDependent = try container.decodeIfPresent([ItemDataTradingPartnerDependent].self, forKey: .itemDataTradingPartnerDependent) ?? [] lowerLevelTradeItem = try container.decodeIfPresent([LowerLevelTradeItem].self, forKey: .lowerLevelTradeItem) ?? [] avpList = try container.decodeIfPresent([AvpList].self, forKey: .avpList) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if brandName != nil { try container.encode(brandName, forKey: .brandName) } if gpcCategoryCode != nil { try container.encode(gpcCategoryCode, forKey: .gpcCategoryCode) } if isTheProductVariantPreferred != nil { try container.encode(isTheProductVariantPreferred, forKey: .isTheProductVariantPreferred) } if lineItemNumber != nil { try container.encode(lineItemNumber, forKey: .lineItemNumber) } if parentLineItemNumber != nil { try container.encode(parentLineItemNumber, forKey: .parentLineItemNumber) } if productVariantIdentifier != nil { try container.encode(productVariantIdentifier, forKey: .productVariantIdentifier) } if quantityOfItemTypes != nil { try container.encode(quantityOfItemTypes, forKey: .quantityOfItemTypes) } if quantityOfItemUnits != nil { try container.encode(quantityOfItemUnits, forKey: .quantityOfItemUnits) } if tradeItemDescription.count > 0 { try container.encode(tradeItemDescription, forKey: .tradeItemDescription) } if tradeItemUnitDescriptorCode != nil { try container.encode(tradeItemUnitDescriptorCode, forKey: .tradeItemUnitDescriptorCode) } if itemDataTradingPartnerNeutral != nil { try container.encode(itemDataTradingPartnerNeutral, forKey: .itemDataTradingPartnerNeutral) } if itemDataTradingPartnerDependent.count > 0 { try container.encode(itemDataTradingPartnerDependent, forKey: .itemDataTradingPartnerDependent) } if lowerLevelTradeItem.count > 0 { try container.encode(lowerLevelTradeItem, forKey: .lowerLevelTradeItem) } if avpList.count > 0 { try container.encode(avpList, forKey: .avpList) } } } 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 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 IdentifierType : Codable { public var value:String? public var identificationSchemeAgencyCodeCodeListVersion:String? public var identificationSchemeAgencyName:String? public var identificationSchemeName:String? required public init(){} } public class ItemDataTradingPartnerNeutral : Codable { public var cancelledDateTime:Date? public var discontinuedDateTime:Date? public var effectiveDateTime:Date? public var endAvailabilityDateTime:Date? public var maximumStackingFactor:Int? public var startAvailabilityDateTime:Date? public var tradeItemBaseUnitOfMeasure:String? public var tradeItemClassificationCode:[AdditionalTradeItemClassificationCode] = [] public var warehouseABCClassificationCode:String? public var itemDataWeightAndDimension:ItemDataWeightAndDimension? public var handlingInstruction:[HandlingInstruction] = [] public var dangerousGoodsInformation:[DangerousGoodsInformation] = [] public var administrativeUnitOfLogisticServiceBuyer:AdministrativeUnit? public var avpList:[AvpList] = [] required public init(){} } public class ItemDataTradingPartnerDependent : Codable { public var countryOfOrigin:String? public var minimumRemainingShelfLifeInbound:TimeMeasurement? public var minimumRemainingShelfLifeOutbound:TimeMeasurement? public var orderQuantityMaximum:Quantity? public var orderQuantityMinimum:Quantity? public var orderQuantityMultiple:Quantity? public var qualityControlCode:String? public var quarantinePeriod:TimeMeasurement? public var tradeItemProductionLeadTime:TimeMeasurement? public var tradeItemShipmentLeadTime:TimeMeasurement? public var tradeItemSpecificUnitOfMeasure:String? public var tradeItemSubstitutionDateTime:Date? public var itemDataLogisticUnitInformation:[ItemDataLogisticUnitInformation] = [] public var itemDataStockRequirements:[ItemDataStockRequirements] = [] public var administrativeUnitOfReceiver:[AdministrativeUnit] = [] public var avpList:AvpList? public var originatingParty:[TransactionalPartyInRole] = [] public var receiver:TransactionalParty? public var shipper:TransactionalParty? public var substituteItem:Ecom_TradeItemIdentification? required public init(){} } public class LowerLevelTradeItem : Ecom_TradeItemIdentification { public var quantityOfLowerLevelTradeItem:Double? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case quantityOfLowerLevelTradeItem } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) quantityOfLowerLevelTradeItem = try container.decodeIfPresent(Double.self, forKey: .quantityOfLowerLevelTradeItem) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if quantityOfLowerLevelTradeItem != nil { try container.encode(quantityOfLowerLevelTradeItem, forKey: .quantityOfLowerLevelTradeItem) } } } public class AdditionalTradeItemIdentification : Codable { public var value:String? public var code:String? required public init(){} } public class Ecom_TradeItemIdentification : Codable { public var additionalTradeItemIdentification:[AdditionalTradeItemIdentification] = [] public var gtin:String? required public init(){} } public class AdministrativeUnit : Codable { public var typeCode:String? public var gln:String? public var internalIdentification: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(){} } public class Quantity : Codable { public var value:Double? public var measurementUnitCode:String? public var codeListVersion:String? 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 AdditionalTradeItemClassificationCode : Codable { public var value:String? public var additionalTradeItemClassificationCodeListCode:String? public var additionalTradeItemClassificationCodeListVersion:String? public var codeDescription:String? required public init(){} } public class ItemDataWeightAndDimension : Codable { public var depth:Measurement? public var diameter:Measurement? public var grossWeight:Measurement? public var height:Measurement? public var netWeight:Measurement? public var width:Measurement? required public init(){} } public class HandlingInstruction : Codable { public var handlingInstructionCode:String? public var handlingInstructionText:String? public var printingInstructionCode:[String] = [] public var storageTemperature:TemperatureRange? public var transportTemperature:TemperatureRange? required public init(){} } public class DangerousGoodsInformation : Codable { public var dangerousGoodsDescription:String? public var dangerousGoodsShippingName:String? public var dangerousGoodsTechnicalName:String? public var dangerousGoodsUNIdentifier:Identifier? public var contact:[Contact] = [] required public init(){} } public class TimeMeasurement : Codable { public var timeMeasurementUnitCode:String? public var value:Double? required public init(){} } public class ItemDataLogisticUnitInformation : Codable { public var grossWeight:Measurement? public var maximumStackingFactor:Int? public var netWeight:Measurement? public var numberOfLayers:Int? public var packageLevelCode:String? public var packageTypeCode:String? public var tradeItemQuantity:Quantity? public var tradeItemQuantityPerLayer:Quantity? public var avpList:AvpList? public var dimensionsOfLogisticUnit:[Dimension] = [] required public init(){} } public class ItemDataStockRequirements : Codable { public var requiredStockLevel:Quantity? public var requiredStockLevelValidityDateTime:Date? public var stockRequirementTypeCode:String? required public init(){} } public class TransactionalPartyInRole : Codable { public var partyRoleCode:String? public var transactionalParty:TransactionalParty? required public init(){} } public class Measurement : Codable { public var value:Double? public var codeListVersion:String? public var measurementUnitCode:String? required public init(){} } public class TemperatureRange : Codable { public var maximumTemperature:TemperatureMeasurement? public var minimumTemperature:TemperatureMeasurement? required public init(){} } public class Dimension : Codable { public var depth:Measurement? public var height:Measurement? public var width:Measurement? required public init(){} } public class TemperatureMeasurement : Codable { public var value:Double? public var temperatureMeasurementUnitCode:String? required public init(){} } public class ItemDataNotificationMessage : BaseDocument { public var dataRecipient:TransactionalParty? public var dataSource:TransactionalParty? public var itemDataNotificationIdentification:String? public var itemDataNotificationLineItem:[ItemDataNotificationLineItem] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case dataRecipient case dataSource case itemDataNotificationIdentification case itemDataNotificationLineItem } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) dataRecipient = try container.decodeIfPresent(TransactionalParty.self, forKey: .dataRecipient) dataSource = try container.decodeIfPresent(TransactionalParty.self, forKey: .dataSource) itemDataNotificationIdentification = try container.decodeIfPresent(String.self, forKey: .itemDataNotificationIdentification) itemDataNotificationLineItem = try container.decodeIfPresent([ItemDataNotificationLineItem].self, forKey: .itemDataNotificationLineItem) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if dataRecipient != nil { try container.encode(dataRecipient, forKey: .dataRecipient) } if dataSource != nil { try container.encode(dataSource, forKey: .dataSource) } if itemDataNotificationIdentification != nil { try container.encode(itemDataNotificationIdentification, forKey: .itemDataNotificationIdentification) } if itemDataNotificationLineItem.count > 0 { try container.encode(itemDataNotificationLineItem, forKey: .itemDataNotificationLineItem) } } }