/* Options: Date: 2025-05-05 17:37:41 SwiftVersion: 6.0 Version: 8.61 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://prod-api-agency-orch-mb-dhc.rapp-customers.co.uk //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: CreateBackOrderRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: False //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/v1/backorder", "POST") public class CreateBackOrderRequest : CreateBackOrderBase, IReturn, IPost { public typealias Return = CreateBackOrderResponse required public init(){ super.init() } required public init(from decoder: Decoder) throws { try super.init(from: decoder) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) } } public class CreateBackOrderResponse : Codable { public var guid:String? public var reference:String? required public init(){} } public enum Source : Int, Codable { case OnlineShowroom = 1 case OneAdmin = 2 } public class Customer : SalesforceCustomer { public var profileId:String? public var preferences:Preferences? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case profileId case preferences } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) profileId = try container.decodeIfPresent(String.self, forKey: .profileId) preferences = try container.decodeIfPresent(Preferences.self, forKey: .preferences) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if profileId != nil { try container.encode(profileId, forKey: .profileId) } if preferences != nil { try container.encode(preferences, forKey: .preferences) } } } public class Criteria : CriteriaBase { public var engine:[String] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case engine } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) engine = try container.decodeIfPresent([String].self, forKey: .engine) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if engine.count > 0 { try container.encode(engine, forKey: .engine) } } } public class V2Criteria : CriteriaBase { public var engine:[V2EngineCriteria] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case engine } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) engine = try container.decodeIfPresent([V2EngineCriteria].self, forKey: .engine) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if engine.count > 0 { try container.encode(engine, forKey: .engine) } } } public class OutrightPurchase : Codable { public var isOutrightPurchase:Bool? public var reference:String? public var discountRate:Double? public var bm7NST:String? public var isBackOrder:Bool? public var isCOPConverter:Bool? required public init(){} } public class CreateBackOrderBase : Codable { public var gssnId:String? public var additionalInformation:String? public var configCode:String? public var source:Source? public var tagUrl:String? public var customer:Customer? public var customerCriteria:Criteria? public var agentCriteria:V2Criteria? public var outrightPurchase:OutrightPurchase? public var gasId:String? public var motability:Bool? public var motabilityPricingId:Int? public var assistanceProviderId:Int? public var assistanceDetail:String? public var configuratorCode:String? required public init(){} } public class Address : Codable { public var property:String? public var street:String? public var town:String? public var county:String? public var locality:String? public var postcode:String? required public init(){} } public class Preferences : Codable { public var optinEmail:Bool? public var optinPost:Bool? public var optinSMS:Bool? public var optinTelephone:Bool? required public init(){} } public enum CustomerMode : Int, Codable { case Private = 1 case Business = 2 case Motability = 3 } public class SalesforceCustomer : ICustomer, Codable { public var customerId:String? public var isCiam:Bool? public var companyName:String? public var title:String? public var firstname:String? public var surname:String? public var emailAddress:String? public var telephone:String? public var address:Address? public var mode:CustomerMode? required public init(){} } public protocol ICustomer { var address:Address? { get set } var companyName:String? { get set } var customerId:String? { get set } var emailAddress:String? { get set } var firstname:String? { get set } var isCiam:Bool? { get set } var mode:CustomerMode? { get set } var surname:String? { get set } var telephone:String? { get set } var title:String? { get set } } public class CriteriaModel : Codable { public var Description:String? public var id:Int? required public init(){} } public class CriteriaDifference : Codable { public var model:Bool? public var transmission:Bool? public var fuel:Bool? public var upholstery:Bool? public var equipment:Bool? public var line:Bool? public var bodyStyle:Bool? public var colourGroup:Bool? public var packages:Bool? public var engine:Bool? public var additionalInformation:Bool? public var urlReferrer:Bool? public var preferredDeliveryDate:Bool? public var isSmart:Bool? public var isSpecialised:Bool? required public init(){} } public class CriteriaBase : JsonVersion { public var transmission:[String] = [] public var fuel:[String] = [] public var upholstery:[String] = [] public var equipment:[String] = [] public var line:[String] = [] public var bodyStyle:[String] = [] public var colourGroup:[String] = [] public var packages:[String] = [] public var model:[CriteriaModel] = [] public var urlReferrer:String? public var preferredDeliveryDate:String? // @ApiMember(ExcludeInSchema=true) public var isNewModel:Bool? // @ApiMember(ExcludeInSchema=true) public var isSmart:Bool? // @ApiMember(ExcludeInSchema=true) public var isSpecialised:Bool? // @ApiMember(ExcludeInSchema=true) public var criteriaDifference:CriteriaDifference? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case transmission case fuel case upholstery case equipment case line case bodyStyle case colourGroup case packages case model case urlReferrer case preferredDeliveryDate case isNewModel case isSmart case isSpecialised case criteriaDifference } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) transmission = try container.decodeIfPresent([String].self, forKey: .transmission) ?? [] fuel = try container.decodeIfPresent([String].self, forKey: .fuel) ?? [] upholstery = try container.decodeIfPresent([String].self, forKey: .upholstery) ?? [] equipment = try container.decodeIfPresent([String].self, forKey: .equipment) ?? [] line = try container.decodeIfPresent([String].self, forKey: .line) ?? [] bodyStyle = try container.decodeIfPresent([String].self, forKey: .bodyStyle) ?? [] colourGroup = try container.decodeIfPresent([String].self, forKey: .colourGroup) ?? [] packages = try container.decodeIfPresent([String].self, forKey: .packages) ?? [] model = try container.decodeIfPresent([CriteriaModel].self, forKey: .model) ?? [] urlReferrer = try container.decodeIfPresent(String.self, forKey: .urlReferrer) preferredDeliveryDate = try container.decodeIfPresent(String.self, forKey: .preferredDeliveryDate) isNewModel = try container.decodeIfPresent(Bool.self, forKey: .isNewModel) isSmart = try container.decodeIfPresent(Bool.self, forKey: .isSmart) isSpecialised = try container.decodeIfPresent(Bool.self, forKey: .isSpecialised) criteriaDifference = try container.decodeIfPresent(CriteriaDifference.self, forKey: .criteriaDifference) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if transmission.count > 0 { try container.encode(transmission, forKey: .transmission) } if fuel.count > 0 { try container.encode(fuel, forKey: .fuel) } if upholstery.count > 0 { try container.encode(upholstery, forKey: .upholstery) } if equipment.count > 0 { try container.encode(equipment, forKey: .equipment) } if line.count > 0 { try container.encode(line, forKey: .line) } if bodyStyle.count > 0 { try container.encode(bodyStyle, forKey: .bodyStyle) } if colourGroup.count > 0 { try container.encode(colourGroup, forKey: .colourGroup) } if packages.count > 0 { try container.encode(packages, forKey: .packages) } if model.count > 0 { try container.encode(model, forKey: .model) } if urlReferrer != nil { try container.encode(urlReferrer, forKey: .urlReferrer) } if preferredDeliveryDate != nil { try container.encode(preferredDeliveryDate, forKey: .preferredDeliveryDate) } if isNewModel != nil { try container.encode(isNewModel, forKey: .isNewModel) } if isSmart != nil { try container.encode(isSmart, forKey: .isSmart) } if isSpecialised != nil { try container.encode(isSpecialised, forKey: .isSpecialised) } if criteriaDifference != nil { try container.encode(criteriaDifference, forKey: .criteriaDifference) } } } public protocol IJsonVersion { var version:Int? { get set } } public class V2EngineCriteria : Codable { public var badge:String? public var brand:String? required public init(){} } public class JsonVersion : IJsonVersion, Codable { public var version:Int? required public init(){} }