/* Options: Date: 2024-06-26 09:37:19 SwiftVersion: 5.0 Version: 8.23 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://testapi.bokamera.se //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: CreateInvoice.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/eaccounting/invoice", "POST") public class CreateInvoice : InvoiceAddress, IReturn, ICompany { public typealias Return = CreateInvoiceQueryResponse /** * The booking id, to be used to create the customer. */ // @ApiMember(Description="The booking id, to be used to create the customer.", IsRequired=true) public var bookingId:Int /** * The Term of payment Id, to be used to create the invoice. */ // @ApiMember(Description="The Term of payment Id, to be used to create the invoice.", IsRequired=true) public var termsOfPaymentId:String /** * Note id's to add to this invoice */ // @ApiMember(Description="Note id's to add to this invoice") public var notes:[String] = [] /** * Invoice Customer name */ // @ApiMember(Description="Invoice Customer name") public var invoiceCustomerName:String /** * Used for sending the invoice via Auto-invoice Default:None, 0 = None, 1 = AutoInvoiceElectronic, 2 = AutoInvoicePrint, 3 = AutoInvoiceB2C = ['0', '1', '2', '3']. */ // @ApiMember(Description="Used for sending the invoice via Auto-invoice Default:None, 0 = None, 1 = AutoInvoiceElectronic, 2 = AutoInvoicePrint, 3 = AutoInvoiceB2C = ['0', '1', '2', '3'].", IsRequired=true) public var sendType:EAccountingInvoiceSendTypes? /** * 1 = Apartment, 2 = Property Leave blank or set to null if you do not intend to use ROT or Green Technology functionality. */ // @ApiMember(Description="1 = Apartment, 2 = Property Leave blank or set to null if you do not intend to use ROT or Green Technology functionality.", IsRequired=true) public var rotPropertyType:RotPropertyTypes? /** * 0 = Normal, 1 = Rot, 2 = Rut = ['0', '1', '2'] */ // @ApiMember(Description="0 = Normal, 1 = Rot, 2 = Rut = ['0', '1', '2']", IsRequired=true) public var rotReducedInvoicingType:RotReducedInvoicingTypes? /** * The company id, if empty will use the company id for the user you are logged in with. */ // @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.") public var companyId:String? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case bookingId case termsOfPaymentId case notes case invoiceCustomerName case sendType case rotPropertyType case rotReducedInvoicingType case companyId } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) bookingId = try container.decodeIfPresent(Int.self, forKey: .bookingId) termsOfPaymentId = try container.decodeIfPresent(String.self, forKey: .termsOfPaymentId) notes = try container.decodeIfPresent([String].self, forKey: .notes) ?? [] invoiceCustomerName = try container.decodeIfPresent(String.self, forKey: .invoiceCustomerName) sendType = try container.decodeIfPresent(EAccountingInvoiceSendTypes.self, forKey: .sendType) rotPropertyType = try container.decodeIfPresent(RotPropertyTypes.self, forKey: .rotPropertyType) rotReducedInvoicingType = try container.decodeIfPresent(RotReducedInvoicingTypes.self, forKey: .rotReducedInvoicingType) companyId = try container.decodeIfPresent(String.self, forKey: .companyId) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if bookingId != nil { try container.encode(bookingId, forKey: .bookingId) } if termsOfPaymentId != nil { try container.encode(termsOfPaymentId, forKey: .termsOfPaymentId) } if notes.count > 0 { try container.encode(notes, forKey: .notes) } if invoiceCustomerName != nil { try container.encode(invoiceCustomerName, forKey: .invoiceCustomerName) } if sendType != nil { try container.encode(sendType, forKey: .sendType) } if rotPropertyType != nil { try container.encode(rotPropertyType, forKey: .rotPropertyType) } if rotReducedInvoicingType != nil { try container.encode(rotReducedInvoicingType, forKey: .rotReducedInvoicingType) } if companyId != nil { try container.encode(companyId, forKey: .companyId) } } } public class CreateInvoiceQueryResponse : Codable { public var invoice:InvoiceQueryResponse public var invoiceUri:String public var responseStatus:ResponseStatus required public init(){} } public protocol ICompany { var companyId:String? { get set } } public class InvoiceAddress : Codable { public var corporateIdentityNumber:String public var invoiceAddress1:String public var invoiceAddress2:String public var invoiceCity:String public var invoicePostalCode:String public var invoiceCountryCode:String required public init(){} } public enum RotPropertyTypes : Int, Codable { case Apartment = 1 case Property = 2 } public enum RotReducedInvoicingTypes : String, Codable { case Normal case Rot case Rut } public enum EAccountingInvoiceSendTypes : String, Codable { case None case AutoInvoiceElectronic case AutoInvoicePrint case AutoInvoiceB2C } public class InvoiceQueryResponse : Codable { public var invoiceId:String public var createdDate:Date public var totalAmount:Double public var totalVatAmount:Double public var customerId:String public var rows:[InvoiceLineQueryResponse] = [] public var vatSpecification:[VatSpecificationQueryResponse] = [] public var invoiceDate:String public var dueDate:String public var deliveryDate:Date? public var persons:[Person] = [] public var invoiceCustomerName:String public var invoiceAddress:InvoiceAddress public var customerIsPrivatePerson:Bool public var termsOfPaymentId:String public var termsOfPaymentData:EAccountingTermsOfPaymentQueryResponse public var customerEmail:String public var invoiceNumber:Int public var customerNumber:String public var notes:[NoteQueryResponse] = [] public var noteIds:[String] = [] public var createdUtc:Date public var modifiedUtc:Date public var includesVat:Bool public var sendType:EAccountingInvoiceSendTypes? public var isSold:Bool public var paymentDate:Date? public var paymentStatus:PaymentStatus public var paymentStatusTitle:String public var creditedBy:[CreditedBy] = [] public var priceSign:String public var bookingId:String required public init(){} }