BokaMera.API.Host

<back to all web services

BookingQuery

The following routes are available for this service:
GET/bookingsFind booked events for currently logged in userThis service is used to get bookings for the current user, the result will be paged if the query returns a to large set of values.
import java.math.*
import java.util.*
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


@ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
open class BookingQuery : QueryDb<Booking, BookingQueryResponse>()
{
    /**
    * Query for specific Booked Resources, default is all resources
    */
    @DataMember(Name="BookedResourceIds")
    @SerializedName("BookedResourceIds")
    @ApiMember(Description="Query for specific Booked Resources, default is all resources", ParameterType="query")
    var BookingResourceRelationResourceIds:ArrayList<Int>? = null

    /**
    * Query for specific Booked Resource types, default is all resource types
    */
    @DataMember(Name="BookedResourceTypeIds")
    @SerializedName("BookedResourceTypeIds")
    @ApiMember(Description="Query for specific Booked Resource types, default is all resource types", ParameterType="query")
    var BookingResourceRelationResourceTypeIds:ArrayList<Int>? = null

    /**
    * 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.")
    var CompanyId:UUID? = null

    /**
    * Id of the booking
    */
    @ApiMember(Description="Id of the booking", ParameterType="path")
    var Id:Int? = null

    /**
    * The cancellation code of the booking, can be used if you want to get a booking without being authenticated
    */
    @ApiMember(DataType="string", Description="The cancellation code of the booking, can be used if you want to get a booking without being authenticated", ParameterType="query")
    var CancellationCode:String? = null

    /**
    * Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339
    */
    @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    var BookingStart:Date? = null

    /**
    * End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339
    */
    @ApiMember(DataType="dateTime", Description="End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    var BookingEnd:Date? = null

    /**
    * Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339
    */
    @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    var CreatedFrom:Date? = null

    /**
    * End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339
    */
    @ApiMember(DataType="dateTime", Description="End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    var CreatedTo:Date? = null

    /**
    * Set to true if you want to include the bookings for the company you are logged in as administrator on, if false only bookings for the logged in user will be retrieved. Only administrators are allowed to do this.
    */
    @ApiMember(DataType="boolean", Description="Set to true if you want to include the bookings for the company you are logged in as administrator on, if false only bookings for the logged in user will be retrieved. Only administrators are allowed to do this.", ParameterType="query")
    var CompanyBookings:Boolean? = null

    /**
    * Query for specific services.
    */
    @ApiMember(Description="Query for specific services.", ParameterType="query")
    var ServiceIds:ArrayList<Int>? = null

    /**
    * Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all.
    */
    @ApiMember(Description="Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all.", ParameterType="query")
    var StatusIds:ArrayList<Int>? = null

    /**
    * Query for specific customer
    */
    @ApiMember(Description="Query for specific customer", ParameterType="query")
    var CustomerId:UUID? = null

    /**
    * If you want to include the external references for the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the external references for the booking", ParameterType="query")
    var IncludeExternalReferences:Boolean? = null

    /**
    * If you want to include the connected resource types and resources
    */
    @ApiMember(DataType="boolean", Description="If you want to include the connected resource types and resources", ParameterType="query")
    var IncludeCustomFields:Boolean? = null

    /**
    * If you want to include the connected custom fields
    */
    @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
    var IncludeCustomFieldValues:Boolean? = null

    /**
    * If you want to include the booked resources
    */
    @ApiMember(DataType="boolean", Description="If you want to include the booked resources", ParameterType="query")
    var IncludeBookedResourceTypes:Boolean? = null

    /**
    * If you want to include the company information for the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the company information for the booking", ParameterType="query")
    var IncludeCompanyInformation:Boolean? = null

    /**
    * If you want to include the service information for the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the service information for the booking", ParameterType="query")
    var IncludeServiceInformation:Boolean? = null

    /**
    * If you want to include the customer information for the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the customer information for the booking", ParameterType="query")
    var IncludeCustomerInformation:Boolean? = null

    /**
    * If you want to include the log of all events on the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the log of all events on the booking", ParameterType="query")
    var IncludeLog:Boolean? = null

    /**
    * If you want to include the payment log on the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the payment log on the booking", ParameterType="query")
    var IncludePaymentLog:Boolean? = null

    /**
    * If you want to include the checkouts for payson
    */
    @ApiMember(DataType="boolean", Description="If you want to include the checkouts for payson", ParameterType="query")
    var IncludeCheckoutLog:Boolean? = null

    /**
    * If you want to include the quantity and price information on the booking
    */
    @ApiMember(DataType="boolean", Description="If you want to include the quantity and price information on the booking", ParameterType="query")
    var IncludeQuantityInformation:Boolean? = null

    /**
    * If you want to include google calendar sync status
    */
    @ApiMember(DataType="boolean", Description="If you want to include google calendar sync status", ParameterType="query")
    var IncludeCalendarExportStatus:Boolean? = null

    /**
    * If you want to include booking status information
    */
    @ApiMember(DataType="boolean", Description="If you want to include booking status information", ParameterType="query")
    var IncludeStatusInformation:Boolean? = null

    /**
    * The max limit of records you want to retrieve, default is 100
    */
    @ApiMember(DataType="int", Description="The max limit of records you want to retrieve, default is 100", ParameterType="query")
    var MaxLimit:Int? = null

    var ResponseStatus:ResponseStatus? = null
}

open class QueryDb<From, Into> : QueryBase()
{
}

@DataContract
open class QueryBase
{
    /**
    * Skip over a given number of elements in a sequence and then return the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?skip=10&orderBy=Id</code>
    */
    @DataMember(Order=1)
    var Skip:Int? = null

    /**
    * Return a given number of elements in a sequence and then skip over the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?take=20</code>
    */
    @DataMember(Order=2)
    var Take:Int? = null

    /**
    * Comma separated list of fields to order by. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderBy=Id,-Age,FirstName</code>
    */
    @DataMember(Order=3)
    var OrderBy:String? = null

    /**
    * Comma separated list of fields to order by in descending order. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderByDesc=Id,-Age,FirstName</code>
    */
    @DataMember(Order=4)
    var OrderByDesc:String? = null

    /**
    * Include any of the aggregates <code>AVG, COUNT, FIRST, LAST, MAX, MIN, SUM</code> in your result set. The results will be returned in the meta field.<br/><br/><strong>Example:</strong><br/><code>?include=COUNT(*) as Total</code><br/><br/>or multiple fields with<br/><code>?include=Count(*) Total, Min(Age), AVG(Age) AverageAge</code><br/></br>or unique with<br/><code>?include=COUNT(DISTINCT LivingStatus) as UniqueStatus</code>
    */
    @DataMember(Order=5)
    var Include:String? = null

    @DataMember(Order=6)
    var Fields:String? = null

    @DataMember(Order=7)
    var Meta:HashMap<String,String> = HashMap<String,String>()
}

open class Booking : BaseModel(), IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated
{
    @Ignore()
    var Customer:Customer? = null

    @Ignore()
    var Service:Service? = null

    @Ignore()
    var CalendarExport:CalendarExport? = null

    @Ignore()
    var Log:ArrayList<BookingLog> = ArrayList<BookingLog>()

    @Ignore()
    var PaymentLog:ArrayList<PaymentLog> = ArrayList<PaymentLog>()

    @Ignore()
    var CheckoutLogs:ArrayList<PaymentDetails> = ArrayList<PaymentDetails>()

    @Ignore()
    var Prices:ArrayList<BookingPrice> = ArrayList<BookingPrice>()

    @Ignore()
    var Status:BookingStatusEnum? = null

    @Ignore()
    var isReserved:Boolean? = null

    @Ignore()
    var StatusName:String? = null

    @Ignore()
    var Company:Company? = null

    @References(Currency.class)
    var CurrencyId:String? = null

    var CurrencyInfo:Currency? = null
    var BookingStatus:BookingStatus? = null
    @Ignore()
    var TotalPrice:Double? = null

    @Ignore()
    var TotalSpots:Int? = null

    @Ignore()
    var Resources:IList<Resource>? = null

    @Ignore()
    var ExternalReferences:IList<ExternalReference>? = null

    @Ignore()
    var BookedResources:IList<BookedResourceType>? = null

    @Ignore()
    var CustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomFieldsData:IList<CustomFieldDataResponse>? = null

    @Ignore()
    var Active:Boolean? = null

    @Ignore()
    var LastTimeToUnBook:Date? = null

    @Ignore()
    var PriceMappings:ArrayList<PriceMapping> = ArrayList<PriceMapping>()

    @Required()
    var UpdatedDate:Date? = null

    @Required()
    var CreatedDate:Date? = null

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var CustomerId:UUID? = null

    @Required()
    var ServiceId:Int? = null

    @Required()
    var StatusId:Int? = null

    var UnbookedOn:Date? = null
    var UnbookedComments:String? = null
    var BookedComments:String? = null
    @Required()
    var BookedBy:String? = null

    var UnBookedBy:String? = null
    @Required()
    var SendSmsReminder:Boolean? = null

    @Required()
    var SendEmailReminder:Boolean? = null

    @Required()
    var SendSmsConfirmation:Boolean? = null

    var RebateCode:String? = null
    var Comments:String? = null
    var IpAddress:String? = null
    @Required()
    var NumberOfBookedSpots:Int? = null

    var CommentsToCustomer:String? = null
    var PaymentExpiration:Date? = null
    var PriceVat:BigDecimal? = null
    @Required()
    var SendEmailConfirmation:Boolean? = null

    var CancellationCode:String? = null
    var ModifiedDate:Date? = null
    var RatingCode:String? = null
    var TextField1:String? = null
    var TextField2:String? = null
    var TextField3:String? = null
    var TextField4:String? = null
    var TextField5:String? = null
    var TextField6:String? = null
    var TextField7:String? = null
    var TextField8:String? = null
    var TextField9:String? = null
    var TextField10:String? = null
    var TextField11:String? = null
    var TextField12:String? = null
    var TextField13:String? = null
    var TextField14:String? = null
    var TextField15:String? = null
    var TextField16:String? = null
    var TextField17:String? = null
    var TextField18:String? = null
    var TextField19:String? = null
    var TextField20:String? = null
    @Required()
    var From:Date? = null

    @Required()
    var To:Date? = null
}

open class BaseModel
{
}

open class Customer : BaseModel(), IUser, ICustomFieldTable
{
    var IdentityId:Int? = null
    var Id:UUID? = null
    @Ignore()
    var CustomerId:UUID? = null

    @Ignore()
    var AccessKeys:IList<UserAccessKeys>? = null

    var Email:String? = null
    @Ignore()
    var ExternalReferences:IList<ExternalReference>? = null

    @Ignore()
    var CustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomFieldsData:IList<CustomFieldDataResponse>? = null

    @Ignore()
    var Comments:IList<CustomerComment>? = null

    var Firstname:String? = null
    @Ignore()
    var ImageUrl:String? = null

    @Required()
    var Active:Boolean? = null

    var FacebookUsername:String? = null
    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var IpAddress:String? = null
    var ModifiedDate:Date? = null
    var TextField1:String? = null
    var TextField2:String? = null
    var TextField3:String? = null
    var TextField4:String? = null
    var TextField5:String? = null
    var TextField6:String? = null
    var TextField7:String? = null
    var TextField8:String? = null
    var TextField9:String? = null
    var TextField10:String? = null
    var TextField11:String? = null
    var TextField12:String? = null
    var TextField13:String? = null
    var TextField14:String? = null
    var TextField15:String? = null
    var TextField16:String? = null
    var TextField17:String? = null
    var TextField18:String? = null
    var TextField19:String? = null
    var TextField20:String? = null
    var UserId:UUID? = null
    var Lastname:String? = null
    var Phone:String? = null
    var CorporateIdentityNumber:String? = null
    var InvoiceAddress1:String? = null
    var InvoiceAddress2:String? = null
    var InvoiceCity:String? = null
    var InvoicePostalCode:String? = null
    var InvoiceCountryCode:String? = null
    @Required()
    var CompanyId:UUID? = null

    var SubscribedToNewsletter:Boolean? = null
}

open class UserAccessKeys : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var AccessKeyTypeId:Int? = null

    @Required()
    var Value:String? = null

    @Required()
    var CustomerId:UUID? = null

    var Description:String? = null
    @Required()
    var Id:UUID? = null
}

open class ExternalReference : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var Id:UUID? = null

    @Required()
    var OwnerId:UUID? = null

    @Required()
    var ReferenceType:String? = null

    var ExternalData:String? = null
    var CreatedBy:String? = null
    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var ModifiedDate:Date? = null
}

open class CustomFieldConfig : BaseModel()
{
    @Ignore()
    var Values:ArrayList<CustomFieldValue> = ArrayList<CustomFieldValue>()

    var CustomField:CustomField? = null
    @Ignore()
    var RegEx:RegEx? = null

    @Ignore()
    var Services:ArrayList<Service> = ArrayList<Service>()

    var CustomFieldServiceRelation:ArrayList<CustomFieldServiceRelation> = ArrayList<CustomFieldServiceRelation>()
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    var GroupId:Int? = null
    @Required()
    var FieldId:Int? = null

    @Required()
    var IconId:Int? = null

    var RegExId:Int? = null
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Datatype:String? = null

    @Required()
    var MaxLength:Int? = null

    @Required()
    var IsPublic:Boolean? = null

    @Required()
    var IsHidden:Boolean? = null

    @Required()
    var IsMandatory:Boolean? = null

    var DefaultValue:String? = null
    var RegExErrorMessage:String? = null
    var MandatoryErrorMessage:String? = null
    var Width:Int? = null
    @Required()
    var MultipleLineText:Boolean? = null

    var ModifiedDate:Date? = null
}

open class CustomFieldValue : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var Value:String? = null

    @Required()
    var Active:Boolean? = null

    var SortOrder:Short? = null
    var ModifiedDate:Date? = null
}

open class CustomField : BaseModel()
{
    @Required()
    var Table:String? = null

    @Required()
    var Column:String? = null

    @Required()
    var DataType:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Active:Boolean? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class RegEx : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var RegExCode:String? = null

    var ErrorMessage:String? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class Service : BaseModel(), ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated
{
    @Ignore()
    var ResourceTypes:ArrayList<ResourceType> = ArrayList<ResourceType>()

    @Ignore()
    var Resources:ArrayList<Resource> = ArrayList<Resource>()

    @Ignore()
    var TotalPrice:TotalPriceInformation? = null

    @Ignore()
    var Prices:ArrayList<ServicePrice> = ArrayList<ServicePrice>()

    @Ignore()
    var BookingStatusOptions:ArrayList<BookingStatusOptions> = ArrayList<BookingStatusOptions>()

    @Ignore()
    var IsGroupBooking:Boolean? = null

    @Ignore()
    var IsMultipleResource:Boolean? = null

    @Ignore()
    var Settings:BookingSettings? = null

    @Ignore()
    var PaymentSetting:PaymentSetting? = null

    @Ignore()
    var BookingCustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomerCustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomFieldsData:IList<CustomFieldDataResponse>? = null

    @Ignore()
    var Schedules:IList<ISchedule>? = null

    @Ignore()
    var CustomerActiveBookings:IList<Booking>? = null

    @Ignore()
    var ScheduleType:ScheduleType? = null

    @Ignore()
    var LastTimeToUnbookThreshold:TimeSpan? = null

    @Ignore()
    var LastTimeToBookThreshold:TimeSpan? = null

    @Ignore()
    var RatingScore:AverageRatingScore? = null

    @Ignore()
    var Ratings:ArrayList<Rating> = ArrayList<Rating>()

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var Group:String? = null
    @Required()
    var Active:Boolean? = null

    @Required()
    var SortOrder:Int? = null

    @Required()
    var PauseAfterBooking:Int? = null

    @Required()
    var UnbookBeforeDays:Int? = null

    @Required()
    var UnbookBeforeHours:Int? = null

    @Required()
    var UnbookBeforeMinutes:Int? = null

    @Required()
    var BookBeforeDays:Int? = null

    @Required()
    var BookBeforeHours:Int? = null

    @Required()
    var BookBeforeMinutes:Int? = null

    var Duration:Int? = null
    var DurationTypeId:Int? = null
    var MinDuration:Int? = null
    var MaxDuration:Int? = null
    var DurationInterval:Int? = null
    var TotalSpots:Int? = null
    var ImageUrl:String? = null
    @Required()
    var ScheduleTypeId:Int? = null

    @Required()
    var UpdatedDate:Date? = null

    @Required()
    var CreatedDate:Date? = null

    @Required()
    var OnlyVisibleByAdmin:Boolean? = null

    @Required()
    var MaxNumberOfSpotsPerBooking:Int? = null

    @Required()
    var MinNumberOfResourcesToBook:Int? = null

    @Required()
    var MaxNumberOfResourcesToBook:Int? = null

    @Required()
    var IsPaymentEnabled:Boolean? = null

    @Required()
    var MaxPaymentTime:Int? = null

    @Required()
    var LockSpotsToBooking:Boolean? = null

    @Required()
    var EnableBookingQueue:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var BookingStatusId:Int? = null

    @Required()
    var EnableCodeLockSync:Boolean? = null

    @Required()
    var EnableCustomerManualPayment:Boolean? = null

    var PriceViewTypeId:Int? = null
    var TextField1:String? = null
    var TextField2:String? = null
    var TextField3:String? = null
    var TextField4:String? = null
    var TextField5:String? = null
    var TextField6:String? = null
    var TextField7:String? = null
    var TextField8:String? = null
    var TextField9:String? = null
    var TextField10:String? = null
    var TextField11:String? = null
    var TextField12:String? = null
    var TextField13:String? = null
    var TextField14:String? = null
    var TextField15:String? = null
    var TextField16:String? = null
    var TextField17:String? = null
    var TextField18:String? = null
    var TextField19:String? = null
    var TextField20:String? = null
}

open class ResourceType : BaseModel(), IBaseModelCreated, IBaseModelUpdated
{
    @Ignore()
    var SelectableByUser:Boolean? = null

    @Ignore()
    var Resources:ArrayList<Resource> = ArrayList<Resource>()

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var Name:String? = null

    var Description:String? = null
    @Required()
    var Active:Boolean? = null

    @Required()
    var UpdatedDate:Date? = null

    @Required()
    var CreatedDate:Date? = null

    var ModifiedDate:Date? = null
}

open class Resource : BaseModel(), ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated
{
    @Ignore()
    var Priority:Int? = null

    @Ignore()
    var Schedules:IList<ISchedule>? = null

    @Ignore()
    var Exceptions:IList<ITimeException>? = null

    @Ignore()
    var Bookings:IList<IBookedTime>? = null

    @Ignore()
    var CustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var CustomFieldsData:IList<CustomFieldDataResponse>? = null

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var Name:String? = null

    @Required()
    var Active:Boolean? = null

    var Description:String? = null
    var ImageUrl:String? = null
    @Required()
    var UpdatedDate:Date? = null

    @Required()
    var CreatedDate:Date? = null

    @Required()
    var Color:String? = null

    var Email:String? = null
    var MobilePhone:String? = null
    var EmailNotification:Boolean? = null
    var SMSNotification:Boolean? = null
    @Required()
    var SendSMSReminder:Boolean? = null

    @Required()
    var SendEmailReminder:Boolean? = null

    var ModifiedDate:Date? = null
    var AccessGroup:String? = null
    var TextField1:String? = null
    var TextField2:String? = null
    var TextField3:String? = null
    var TextField4:String? = null
    var TextField5:String? = null
    var TextField6:String? = null
    var TextField7:String? = null
    var TextField8:String? = null
    var TextField9:String? = null
    var TextField10:String? = null
    var TextField11:String? = null
    var TextField12:String? = null
    var TextField13:String? = null
    var TextField14:String? = null
    var TextField15:String? = null
    var TextField16:String? = null
    var TextField17:String? = null
    var TextField18:String? = null
    var TextField19:String? = null
    var TextField20:String? = null
}

open interface ISchedule
{
    var Resources:IList<Resource>?
    var Type:ScheduleType?
    var Active:Boolean?
    var IsResourceSpecific:Boolean?
}

enum class ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

open interface ITimeException : IInterval
{
    var Id:Int?
    var ReasonText:String?
    var IsBlock:Boolean?
    var ReasonTextPublic:String?
    var IsRecurring:Boolean?
    var ResourceIds:ArrayList<Int>?
}

open interface IBookedTime : IInterval
{
    var Id:Int?
    var ServiceId:Int?
    var BookedSpots:Int?
    var TotalSpots:Int?
    var PauseAfterInMinutes:Int?
    var Status:BookingStatusEnum?
    var StatusId:Int?
    var Customer:BookedCustomer?
}

enum class BookingStatusEnum(val value:Int)
{
    Booked(1),
    Unbooked(2),
    Reserved(3),
    Canceled(4),
    AwaitingPayment(5),
    AwaitingPaymentNoTimeLimit(6),
    Payed(7),
    AwaitingPaymentRequestFromAdmin(8),
    AwaitingPaymentFromProvider(9),
    Invoiced(10),
}

open class BookedCustomer
{
    var Id:UUID? = null
    var Firstname:String? = null
    var Lastname:String? = null
    var Email:String? = null
    var Phone:String? = null
    var FacebookUserName:String? = null
    var ImageUrl:String? = null
    var CorporateIdentityNumber:String? = null
    var InvoiceAddress1:String? = null
    var InvoiceAddress2:String? = null
    var InvoiceCity:String? = null
    var InvoicePostalCode:String? = null
    var InvoiceCountryCode:String? = null
}

open class CustomFieldDataResponse
{
    var Id:Int? = null
    var Column:String? = null
    var Name:String? = null
    var Description:String? = null
    var Value:String? = null
    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    var DataType:String? = null
}

open class TotalPriceInformation
{
    var TotalPrice:Double? = null
    var TotalVATAmount:Double? = null
    var TotalRebate:Double? = null
    var TotalPriceBeforeRebate:Double? = null
    var AppliedCodes:ArrayList<AppliedRebateCodes> = ArrayList<AppliedRebateCodes>()
    var PriceSign:String? = null
    var CurrencyId:String? = null
    var VAT:BigDecimal? = null
}

open class AppliedRebateCodes
{
    var RebateCodeId:Int? = null
    var RebateCodeSign:String? = null
    var RebateCodeValue:Int? = null
    var RebateAmount:Double? = null
    var RebateCodeType:RebateCodeType? = null
}

open class RebateCodeType : BaseModel()
{
    @Required()
    var Name:String? = null

    var Description:String? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class ServicePrice : BaseModel(), IInterval
{
    @References(Currency.class)
    var CurrencyId:String? = null

    var CurrencyInfo:Currency? = null
    @Ignore()
    var Service:Service? = null

    @Ignore()
    var PriceMappings:ArrayList<PriceMapping> = ArrayList<PriceMapping>()

    @Ignore()
    var isTimeSpecific:Boolean? = null

    @Ignore()
    var isDaysOfWeekSpecific:Boolean? = null

    var DayOfWeeks:ArrayList<ServicePriceDayOfWeekRelation> = ArrayList<ServicePriceDayOfWeekRelation>()
    @Ignore()
    var PriceBeforeRebate:Double? = null

    @Ignore()
    var RebateCodesApplied:ArrayList<RebateCode> = ArrayList<RebateCode>()

    @Ignore()
    var PriceText:String? = null

    @Ignore()
    var IsWeighted:Boolean? = null

    @Ignore()
    var OverlappingPrices:ArrayList<ServicePrice> = ArrayList<ServicePrice>()

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var ServiceId:Int? = null

    var Price:Double? = null
    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    @Required()
    var FromTime:TimeSpan? = null

    @Required()
    var ToTime:TimeSpan? = null

    @Required()
    var VAT:BigDecimal? = null

    var Category:String? = null
    var ModifiedDate:Date? = null
    @Required()
    var From:Date? = null

    @Required()
    var To:Date? = null

    @Required()
    var CalculationTypeId:Int? = null
}

open class Currency : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var CurrencySign:String? = null

    @Required()
    var Active:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:String? = null
}

open class PriceMapping : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var Id:UUID? = null

    @Required()
    var PriceId:Int? = null

    var ReferenceType:String? = null
    var ExternalReference:String? = null
    @Required()
    var UpdatedDate:Date? = null

    @Required()
    var CreatedDate:Date? = null

    var ModifiedDate:Date? = null
}

open class ServicePriceDayOfWeekRelation : BaseModel()
{
    @Ignore()
    var DayOfWeek:BokaMeraDayOfWeek? = null

    @Required()
    var CompanyId:UUID? = null

    @Required()
    var ServicePriceId:Int? = null

    @Required()
    var DayOfWeekId:Int? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

enum class BokaMeraDayOfWeek(val value:Int)
{
    Monday(1),
    Tuesday(2),
    Wednesday(3),
    Thursday(4),
    Friday(5),
    Saturday(6),
    Sunday(7),
}

open class RebateCode : BaseModel()
{
    @References(RebateCodeType.class)
    var RebateCodeTypeId:Int? = null

    var RebateCodeTypeInfo:RebateCodeType? = null
    @References(RebateCodeStatus.class)
    var RebateCodeStatusId:Int? = null

    var RebateCodeStatusInfo:RebateCodeType? = null
    @Ignore()
    var Services:ArrayList<Service> = ArrayList<Service>()

    var RebateCodeDayOfWeekRelation:ArrayList<RebateCodeDayOfWeekRelation> = ArrayList<RebateCodeDayOfWeekRelation>()
    var RebateCodeServiceRelation:ArrayList<RebateCodeServiceRelation> = ArrayList<RebateCodeServiceRelation>()
    var RebateCodeBookingPriceRelation:ArrayList<RebateCodeBookingPriceRelation> = ArrayList<RebateCodeBookingPriceRelation>()
    var RebateCodeCustomerRelation:ArrayList<RebateCodeCustomerRelation> = ArrayList<RebateCodeCustomerRelation>()
    @Ignore()
    var DaysOfWeek:ArrayList<DaysOfWeek> = ArrayList<DaysOfWeek>()

    @Ignore()
    var Customers:ArrayList<Customer> = ArrayList<Customer>()

    @Ignore()
    var RebateCodeStatus:RebateCodeStatus? = null

    @Ignore()
    var RebateCodeType:RebateCodeType? = null

    @Ignore()
    var CurrentNumberOfUsesPerCustomer:Int? = null

    @Ignore()
    var IsSpecificByDayOfWeek:Boolean? = null

    @Ignore()
    var Active:Boolean? = null

    var CompanyId:UUID? = null
    @Required()
    var ValidFrom:Date? = null

    @Required()
    var ValidTo:Date? = null

    @Required()
    var RebateCodeSign:String? = null

    @Required()
    var RebateCodeValue:Int? = null

    @Required()
    var MaxNumberOfUses:Int? = null

    @Required()
    var MaxNumberOfUsesPerCustomer:Int? = null

    @Required()
    var NumberOfUsesUsed:Int? = null

    var PersonalNote:String? = null
    @Required()
    var CreatedBy:String? = null

    @Required()
    var Created:Date? = null

    @Required()
    var UpdatedBy:String? = null

    @Required()
    var Updated:Date? = null

    @Required()
    var FromTime:TimeSpan? = null

    @Required()
    var ToTime:TimeSpan? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class RebateCodeDayOfWeekRelation : BaseModel()
{
    @Ignore()
    var DayOfWeek:BokaMeraDayOfWeek? = null

    @Required()
    var DayOfWeekId:Int? = null

    @Required()
    var RebateCodeId:Int? = null

    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    var ModifiedDate:Date? = null
}

open class RebateCodeServiceRelation : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var ServiceId:Int? = null

    @Required()
    var RebateCodeId:Int? = null

    var Id:Int? = null
    var ModifiedDate:Date? = null
}

open class RebateCodeBookingPriceRelation : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var PriceId:Int? = null

    @Required()
    var RebateCodeId:Int? = null

    var Id:Int? = null
    var ModifiedDate:Date? = null
}

open class RebateCodeCustomerRelation : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var CustomerId:UUID? = null

    @Required()
    var RebateCodeId:Int? = null

    var Id:Int? = null
    var ModifiedDate:Date? = null
}

open class DaysOfWeek : BaseModel()
{
    @Required()
    var DayOfWeek:String? = null

    @Required()
    var DayOfWeekTranslation:String? = null

    var DayOfWeekActive:Boolean? = null
    var DayOfWeekSortOrder:Short? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class RebateCodeStatus : BaseModel()
{
    @Required()
    var Name:String? = null

    var Description:String? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class BookingStatusOptions
{
    var Id:Int? = null
    var Name:String? = null
    var Description:String? = null
}

open class BookingSettings : BaseModel()
{
    @References(FreeSpotTexts.class)
    var FreeSpotTextsId:Int? = null

    @Ignore()
    var SendEmailConfirmation:Boolean? = null

    @Ignore()
    var ScheduleViewOptions:ArrayList<ScheduleView> = ArrayList<ScheduleView>()

    @Ignore()
    var WeekNumberSettingOptions:ArrayList<WeekNumberSetting> = ArrayList<WeekNumberSetting>()

    @Ignore()
    var BookingTemplateOptions:ArrayList<BookingTemplate> = ArrayList<BookingTemplate>()

    @Ignore()
    var CalendarTypeOptions:ArrayList<CalendarType> = ArrayList<CalendarType>()

    @Ignore()
    var FreeSpotTextOptions:ArrayList<FreeSpotTexts> = ArrayList<FreeSpotTexts>()

    @Ignore()
    var BookingStatusOptions:ArrayList<BookingStatusOptions> = ArrayList<BookingStatusOptions>()

    var FreeSpotTextsInfo:FreeSpotTexts? = null
    @Ignore()
    var FreeSpotsTextSingular:String? = null

    @Ignore()
    var FreeSpotsTextPlural:String? = null

    @Required()
    var BookingStatusId:Int? = null

    @Required()
    var ScheduleViewId:Int? = null

    @Required()
    var BookingTemplateId:Int? = null

    @Required()
    var CalendarTypeId:Int? = null

    @Required()
    var AllowBookingOnUnbookedTimes:Boolean? = null

    @Required()
    var SendEmailReminder:Boolean? = null

    @Required()
    var SendSmsReminder:Boolean? = null

    @Required()
    var SendSmsConfirmation:Boolean? = null

    @Required()
    var EmailReminderTime:Int? = null

    @Required()
    var SmsReminderTime:Int? = null

    @Required()
    var MaxActiveBookings:Int? = null

    @Required()
    var SendNotifications:Boolean? = null

    var SendNotificationsEmail:String? = null
    @Required()
    var EnableMobileApp:Boolean? = null

    var ScheduleStartTime:TimeSpan? = null
    var ScheduleEndTime:TimeSpan? = null
    var ReceiptTemplate:String? = null
    @Required()
    var ScheduleTimeSlotMinutes:Int? = null

    @Required()
    var ShowFreeTimesLeft:Boolean? = null

    @Required()
    var EnableICalGroupBookings:Boolean? = null

    var AgreementTemplate:String? = null
    @Required()
    var ScheduleShowTimeExeptions:Boolean? = null

    @Required()
    var EnableBookingsOnSameTime:Boolean? = null

    @Required()
    var ShowWeekNumberSettingId:Int? = null

    @Required()
    var EnableShowBookedTimes:Boolean? = null

    @Required()
    var EnableSendFollowUpMessage:Boolean? = null

    @Required()
    var FollowUpMessageTime:Int? = null

    var MessageText:String? = null
    @Required()
    var ScheduleGroupResources:Boolean? = null

    @Required()
    var BookSpotUserResponseMinutes:Int? = null

    @Required()
    var IsBookSpotDirectly:Boolean? = null

    @Required()
    var BookSpotDirectlyTimeLeftMinutes:Int? = null

    @Required()
    var SendEmailNotificationQueue:Boolean? = null

    @Required()
    var SendSMSNotificationQueue:Boolean? = null

    @Required()
    var SchedulerDisableHorizontalScrolling:Boolean? = null

    @Required()
    var BookOnlyOnExistingCustomers:Boolean? = null

    @Required()
    var AutoGenerateUniquePinCode:Boolean? = null

    @Required()
    var WeightedPrices:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var AutoCreateUserProfile:Boolean? = null

    var ShowMultipleResourcesAsOne:Boolean? = null
    var ShowMultiDayAsTime:Boolean? = null
    @Required()
    var Id:UUID? = null
}

open class ScheduleView : BaseModel()
{
    @Required()
    var Name:String? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class WeekNumberSetting : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class BookingTemplate : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var UsedByApplication:String? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class CalendarType : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Active:Boolean? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class FreeSpotTexts : BaseModel()
{
    @Required()
    var TextSingular:String? = null

    @Required()
    var TextPlural:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class PaymentSetting : BaseModel()
{
    var AdminPaymentOption:AdminPaymentOptions? = null
    @Ignore()
    var AdminPaymentOptions:ArrayList<AdminPaymentOptions> = ArrayList<AdminPaymentOptions>()

    @Ignore()
    var PaymentProviderOptions:ArrayList<PaymentProviders> = ArrayList<PaymentProviders>()

    @Required()
    var Enabled:Boolean? = null

    @Required()
    var InvoiceFee:Int? = null

    @Required()
    var AllowCreditCardPayment:Boolean? = null

    @Required()
    var AllowInvoicePayment:Boolean? = null

    @Required()
    var AllowBankPayment:Boolean? = null

    @Required()
    var GuaranteeOffered:Boolean? = null

    @Required()
    var RefundOnCancelBooking:Boolean? = null

    var DefaultPaymentOptionId:Int? = null
    @Required()
    var PaymentProviderId:Int? = null

    @Required()
    var SendPaymentRequestDirectly:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:UUID? = null
}

open class AdminPaymentOptions : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class PaymentProviders : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Category:String? = null

    var Url:String? = null
    @Required()
    var Active:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class AverageRatingScore
{
    var AverageScore:Double? = null
    var Score1Count:Int? = null
    var Score2Count:Int? = null
    var Score3Count:Int? = null
    var Score4Count:Int? = null
    var Score5Count:Int? = null
    var Count:Int? = null
}

open class Rating : BaseModel()
{
    var ReviewId:UUID? = null
    var Review:Review? = null
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var BookingId:Int? = null

    @Required()
    var RatingScore:Int? = null

    @Required()
    var Status:Int? = null

    @Required()
    var Created:Date? = null

    @Required()
    var Updated:Date? = null

    var ModifiedDate:Date? = null
}

open class Review : BaseModel()
{
    var ReviewId:UUID? = null
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var Title:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Author:String? = null

    @Required()
    var Status:Int? = null

    @Required()
    var Created:Date? = null

    @Required()
    var Updated:Date? = null

    var ModifiedDate:Date? = null
    var ReviewAnswer:String? = null
}

open class CustomFieldServiceRelation : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var CustomFieldConfigId:Int? = null

    @Required()
    var ServiceId:Int? = null

    var ModifiedDate:Date? = null
}

open class CustomerComment : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var CustomerId:UUID? = null

    @Required()
    var Comments:String? = null

    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var ImageUrl:String? = null
    var ModifiedDate:Date? = null
}

open class CalendarExport : BaseModel()
{
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var BookingId:Int? = null

    @Required()
    var ExceptionId:Int? = null

    var CalendarSync:Boolean? = null
    var CalendarId:String? = null
    var IsExceptionDeleted:Boolean? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class BookingLog : BaseModel()
{
    @References(BookingLogEventType.class)
    var EventTypeId:Int? = null

    var EventType:BookingLogEventType? = null
    @Required()
    var CompanyId:UUID? = null

    @Required()
    var BookingId:Int? = null

    var Id:Int? = null
    var Comments:String? = null
    var UserId:String? = null
    @Required()
    var Created:Date? = null

    var ModifiedDate:Date? = null
}

open class BookingLogEventType : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class PaymentLog : BaseModel()
{
    @References(Currency.class)
    var CurrencyId:String? = null

    var CurrencyInfo:Currency? = null
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var BookingId:Int? = null

    var PaymentReferenceId:String? = null
    var PaymentProviderId:Int? = null
    var OrderItemReferenceId:String? = null
    var Amount:Double? = null
    var VAT:BigDecimal? = null
    var AmountCredited:Double? = null
    var Comments:String? = null
    @Required()
    var Created:Date? = null

    @Required()
    var Updated:Date? = null

    var ModifiedDate:Date? = null
}

open class PaymentDetails : BaseModel(), IBaseModelCreated, IBaseModelUpdated
{
    @Ignore()
    var QvicklyCheckoutSerialized:QvicklyCheckoutResponse? = null

    @Ignore()
    var Payson2CheckoutSerialized:Payson2CheckoutResponse? = null

    @Required()
    var CompanyId:UUID? = null

    @Required()
    var BookingId:Int? = null

    @Required()
    var ExternalResponseData:String? = null

    @Required()
    var ExternalResponseReference:String? = null

    @Required()
    var PaymentProviderId:Int? = null

    @Required()
    var IsPayment:Boolean? = null

    @Required()
    var CreatedDate:Date? = null

    @Required()
    var UpdatedDate:Date? = null

    var ModifiedDate:Date? = null
}

open class QvicklyCheckoutResponse
{
    var Number:Int? = null
    var Status:String? = null
    var OrderId:String? = null
    var Url:String? = null
}

open class Payson2CheckoutResponse
{
    var Id:UUID? = null
    var ExpirationTime:Date? = null
    var Snippet:String? = null
    var Status:Payson2CheckoutStatus? = null
    var Customer:Customer? = null
    var Order:Order? = null
    var Merchant:Merchant? = null
    var Gui:Gui? = null
    var History:History? = null
    var PurchaseId:Int? = null
}

enum class Payson2CheckoutStatus
{
    None,
    Created,
    FormsFilled,
    ReadyToPay,
    ProcessingPayment,
    ReadyToShip,
    Shipped,
    PaidToAccount,
    Canceled,
    Credited,
    Expired,
    Denied,
}

open class Customer
{
    var City:String? = null
    var CountryCode:String? = null
    var IdentityNumber:String? = null
    var Email:String? = null
    var FirstName:String? = null
    var LastName:String? = null
    var Phone:String? = null
    var PostalCode:String? = null
    var Street:String? = null
    var Reference:String? = null
    var Type:CustomerType? = null
}

enum class CustomerType
{
    Person,
    Business,
}

open class Order
{
    var Currency:Currency? = null
    var TotalFeeExcludingTax:BigDecimal? = null
    var TotalFeeIncludingTax:BigDecimal? = null
    var TotalPriceExcludingTax:BigDecimal? = null
    var TotalPriceIncludingTax:BigDecimal? = null
    var TotalTaxAmount:BigDecimal? = null
    var TotalCreditedAmount:BigDecimal? = null
    var Items:IList<Item>? = null
}

enum class Currency(val value:Int)
{
    Sek(1),
    Eur(2),
}

open class Item
{
    var ItemId:UUID? = null
    var DiscountRate:BigDecimal? = null
    var Ean:String? = null
    var ImageUri:Uri? = null
    var Name:String? = null
    var Quantity:BigDecimal? = null
    var Reference:String? = null
    var TaxRate:BigDecimal? = null
    var TotalPriceExcludingTax:BigDecimal? = null
    var TotalPriceIncludingTax:BigDecimal? = null
    var TotalTaxAmount:BigDecimal? = null
    var CreditedAmount:BigDecimal? = null
    var Type:ItemType? = null
    var UnitPrice:BigDecimal? = null
    var Uri:Uri? = null
}

enum class ItemType
{
    Physical,
    Service,
    Fee,
    Discount,
}

open class Merchant
{
    var CheckoutUri:Uri? = null
    var ConfirmationUri:Uri? = null
    var NotificationUri:Uri? = null
    var ValidationUri:Uri? = null
    var TermsUri:Uri? = null
    var Reference:String? = null
    var PartnerId:String? = null
}

open class Gui
{
    var ColorScheme:ColorScheme? = null
    var Locale:String? = null
    var RequestPhone:Boolean? = null
    var PhoneOptional:Boolean? = null
}

enum class ColorScheme
{
    White,
    Blue,
    Gray,
    GrayTextLogos,
    BlueTextLogos,
    WhiteTextLogos,
    WhiteNoFooter,
    GrayNoFooter,
    BlueNoFooter,
}

open class History
{
    var Created:Date? = null
    var ReadyToPay:Date? = null
    var ReadyToShip:Date? = null
    var Shipped:Date? = null
    var PaidToAccount:Date? = null
    var Canceled:Date? = null
    var Expired:Date? = null
    var Denied:Date? = null
}

open class BookingPrice : BaseModel()
{
    @References(Currency.class)
    var CurrencyId:String? = null

    var PriceId:Int? = null
    var CurrencyInfo:Currency? = null
    @Ignore()
    var PriceText:String? = null

    @Ignore()
    var AppliedCodes:ArrayList<AppliedRebateCodes> = ArrayList<AppliedRebateCodes>()

    @Ignore()
    var IsRebate:Boolean? = null

    @Required()
    var CompanyId:UUID? = null

    @Required()
    var BookingId:Int? = null

    @Required()
    var Quantity:Int? = null

    var Price:Double? = null
    var VAT:BigDecimal? = null
    var Category:String? = null
    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    @Required()
    var Invoiced:Boolean? = null

    @Required()
    var OccupiesSpot:Boolean? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class Company : BaseModel()
{
    @Ignore()
    var Status:CompanyStatus? = null

    @Ignore()
    var Active:Boolean? = null

    @Ignore()
    var CustomerCustomFieldsConfig:IList<CustomFieldConfig>? = null

    @Ignore()
    var BookingAgreements:String? = null

    @Ignore()
    var BookingSettings:BookingSettings? = null

    @Ignore()
    var CompanyType:CompanyType? = null

    @Ignore()
    var CodeLockSettings:CodeLockSetting? = null

    @Ignore()
    var PaymentSettings:PaymentSetting? = null

    @Ignore()
    var Settings:CompanySetting? = null

    @Ignore()
    var WidgetSettings:HomepageWidgetSetting? = null

    @Ignore()
    var HomepageSettings:HomepageSetting? = null

    @Ignore()
    var RatingScore:AverageRatingScore? = null

    @Ignore()
    var Ratings:ArrayList<Rating> = ArrayList<Rating>()

    @Ignore()
    var Distance:Double? = null

    @Ignore()
    var Licenses:ArrayList<License> = ArrayList<License>()

    @Ignore()
    var ActiveLicenses:ArrayList<License> = ArrayList<License>()

    @Ignore()
    var CurrentLicense:License? = null

    @Ignore()
    var IsFreeAccount:Boolean? = null

    @Ignore()
    var DefaultLanguage:CultureInfo? = null

    var Category:CompanyCategory? = null
    @Ignore()
    var Lat:Double? = null

    @Ignore()
    var Lon:Double? = null

    @Ignore()
    var IsFavorite:Boolean? = null

    @Ignore()
    var ExternalReferences:IList<ExternalReference>? = null

    @Required()
    var OrganisationNumber:String? = null

    @Required()
    var StatusId:Int? = null

    @Required()
    var CategoryId:Int? = null

    @Required()
    var SitePath:String? = null

    @Required()
    var Name:String? = null

    var Street1:String? = null
    var Street2:String? = null
    var ZipCode:String? = null
    var City:String? = null
    var OpeningHours:String? = null
    var FaxNumber:String? = null
    @Required()
    var Email:String? = null

    var Phone:String? = null
    var Details:String? = null
    var LogoType:String? = null
    @Required()
    var ApprovedByAdmin:Boolean? = null

    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var IpAddress:String? = null
    var Homepage:String? = null
    var DomainName:String? = null
    @Required()
    var CountryId:String? = null

    @Required()
    var CompanyOwnerId:Int? = null

    var TypeId:Int? = null
    var ModifiedDate:Date? = null
    @Required()
    var Id:UUID? = null
}

enum class CompanyStatus(val value:Int)
{
    Registered(1),
    AwaitingApproval(2),
    Approved(3),
    Inactive(4),
    ClosedDown(5),
    NotApproved(6),
}

open class CompanyType : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class CodeLockSetting : BaseModel()
{
    @Ignore()
    var CodeLockSystemOptions:ArrayList<CodeLockSystem> = ArrayList<CodeLockSystem>()

    @Required()
    var Active:Boolean? = null

    @Required()
    var CodeLockSystemsId:Int? = null

    @Required()
    var ValidBeforeMinutes:Int? = null

    @Required()
    var ValidAfterMinutes:Int? = null

    @Required()
    var DeleteOldBySchedule:Boolean? = null

    @Required()
    var Created:Date? = null

    @Required()
    var Updated:Date? = null

    var ModifiedDate:Date? = null
    @Required()
    var SendEmailNotification:Boolean? = null

    @Required()
    var SendSMSNotification:Boolean? = null

    @Required()
    var EmailNotificationTime:Short? = null

    @Required()
    var SMSNotificationTime:Short? = null

    @Required()
    var Id:UUID? = null
}

open class CodeLockSystem : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Supplier:String? = null

    var LogoType:String? = null
    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class CompanySetting : BaseModel()
{
    @Ignore()
    var Languages:ArrayList<LanguageResponse> = ArrayList<LanguageResponse>()

    @Required()
    var Active:Boolean? = null

    var InactiveMessage:String? = null
    @Required()
    var Searchable:Boolean? = null

    var GATrackingId:String? = null
    var FacebookPixelId:String? = null
    @Required()
    var MultiLanguage:Boolean? = null

    @Required()
    var EnableAPITranslation:Boolean? = null

    @Required()
    var DefaultLanguage:String? = null

    var ModifiedDate:Date? = null
    var GTMTrackingId:String? = null
    @Required()
    var ShowOnMarketPlace:Boolean? = null

    var GoogleAdsConversionId:String? = null
    var LinkedinTagId:String? = null
    var GoogleAdsConversionLabel:String? = null
    @Required()
    var Id:UUID? = null
}

open class LanguageResponse
{
    var Id:String? = null
    var Name:String? = null
}

open class HomepageWidgetSetting : BaseModel()
{
    @Ignore()
    var WidgetServiceLayoutOptions:ArrayList<WidgetServiceLayouts> = ArrayList<WidgetServiceLayouts>()

    @Ignore()
    var WidgetTimeLayoutOptions:ArrayList<WidgetTimeLayouts> = ArrayList<WidgetTimeLayouts>()

    @Ignore()
    var WidgetBookingLayoutOptions:ArrayList<WidgetBookingLayouts> = ArrayList<WidgetBookingLayouts>()

    @Ignore()
    var WidgetBookingMethodOptions:ArrayList<WidgetBookingMethods> = ArrayList<WidgetBookingMethods>()

    @Required()
    var ServiceLayoutId:Int? = null

    @Required()
    var TimeLayoutId:Int? = null

    @Required()
    var BookingLayoutId:Int? = null

    @Required()
    var PrimaryColor:String? = null

    @Required()
    var ShowServiceImage:Boolean? = null

    @Required()
    var ShowNextAvailableTime:Boolean? = null

    @Required()
    var ShowEndTime:Boolean? = null

    var BookedTimeSlotText:String? = null
    @Required()
    var DarkTheme:Boolean? = null

    @Required()
    var ShowRebateCodeField:Boolean? = null

    var ModifiedDate:Date? = null
    @Required()
    var EnableCreateAccount:Boolean? = null

    @Required()
    var EnableLogin:Boolean? = null

    @Required()
    var EnableDirectBooking:Boolean? = null

    @Required()
    var EnableFacebookLogin:Boolean? = null

    @Required()
    var Id:UUID? = null
}

open class WidgetServiceLayouts : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Code:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class WidgetTimeLayouts : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Code:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class WidgetBookingLayouts : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Code:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class WidgetBookingMethods : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Code:String? = null

    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class HomepageSetting : BaseModel(), ICompany
{
    @Ignore()
    var HomepageTemplateOptions:ArrayList<HomepageTemplate> = ArrayList<HomepageTemplate>()

    @Ignore()
    var HomepageHeroSectionStyleOptions:ArrayList<HeroSectionStyle> = ArrayList<HeroSectionStyle>()

    @Ignore()
    var CompanyId:UUID? = null

    var WelcomePageHeading:String? = null
    var WelcomePageBody:String? = null
    var AboutUsPageHeading:String? = null
    var AboutUsPageBody:String? = null
    @Required()
    var HomePageTemplateId:Int? = null

    var ImageUrl:String? = null
    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var HomepageHeading:String? = null
    @Required()
    var HeroSectionStyleId:Int? = null

    var ModifiedDate:Date? = null
    @Required()
    var ShowRating:Boolean? = null

    @Required()
    var EnableHomepage:Boolean? = null

    @Required()
    var Id:UUID? = null
}

open class HomepageTemplate : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ImageUrl:Uri? = null
    @Required()
    var Premium:Boolean? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class HeroSectionStyle : BaseModel()
{
    @Required()
    var Name:String? = null

    var Description:String? = null
    var ModifiedDate:Date? = null
    @Required()
    var Id:Int? = null
}

open class License : BaseModel()
{
    var Type:LicenseType? = null
    @Required()
    var CompanyId:UUID? = null

    var Id:Int? = null
    @Required()
    var TypeId:Int? = null

    @Required()
    var ValidFrom:Date? = null

    @Required()
    var ValidTo:Date? = null

    @Required()
    var Active:Boolean? = null

    @Required()
    var Updated:Date? = null

    @Required()
    var Created:Date? = null

    var ModifiedDate:Date? = null
    var MetaData:String? = null
}

open class LicenseType : BaseModel()
{
    @Ignore()
    var LicenseItems:IList<LicenseTypeItem>? = null

    @Ignore()
    var Prices:IList<LicensePrice>? = null

    @Ignore()
    var PeriodOfNoticeDays:Int? = null

    @Ignore()
    var NextLicenseOption:LicenseType? = null

    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var ExtraLicenseOption:Boolean? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class LicenseTypeItem : BaseModel()
{
    @Ignore()
    var Name:String? = null

    @Required()
    var LicenseTypesId:Int? = null

    @Required()
    var LicenseItemsId:Int? = null

    @Required()
    var NumberOfItems:Int? = null

    var Id:Int? = null
    var ModifiedDate:Date? = null
}

open class LicensePrice : BaseModel()
{
    @Ignore()
    var Country:Country? = null

    @Ignore()
    var MonthlyPayment:Boolean? = null

    @Required()
    var LicenseTypeId:Int? = null

    @Required()
    var CountryId:String? = null

    @Required()
    var Price:Int? = null

    var ModifiedDate:Date? = null
}

open class Country : BaseModel()
{
    @References(Currency.class)
    var CurrencyId:String? = null

    var CurrencyInfo:Currency? = null
    @Required()
    var Name:String? = null

    var Culture:String? = null
    var TimeZone:String? = null
    var ModifiedDate:Date? = null
    @Required()
    var Id:String? = null
}

open class CompanyCategory : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Header:String? = null

    @Required()
    var Description:String? = null

    var ImageUrl:Uri? = null
    @Required()
    var Active:Boolean? = null

    var SortOrder:Int? = null
    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class BookingStatus : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    @Required()
    var Color:String? = null

    @Required()
    var Icon:String? = null

    var ModifiedDate:Date? = null
    var Id:Int? = null
}

open class BookedResourceType
{
    /**
    * The resource type id
    */
    @ApiMember(Description="The resource type id")
    var Id:Int? = null

    /**
    * The resource type name
    */
    @ApiMember(Description="The resource type name")
    var Name:String? = null

    /**
    * The resources inside resource type
    */
    @ApiMember(Description="The resources inside resource type")
    var Resources:ArrayList<BookedResource> = ArrayList<BookedResource>()
}

open class BookedResource
{
    var Id:Int? = null
    var Name:String? = null
    var Color:String? = null
    var ImageUrl:Uri? = null
    var Email:String? = null
    var MobilePhone:String? = null
    var AccessGroup:String? = null
    var EmailNotification:Boolean? = null
    var SMSNotification:Boolean? = null
    var EmailReminder:Boolean? = null
    var SMSReminder:Boolean? = null
}

open class BookingQueryResponse
{
    var Id:Int? = null
    var CompanyId:UUID? = null
    var From:Date? = null
    var To:Date? = null
    var Status:BookingStatusEnum? = null
    var StatusId:Int? = null
    var StatusName:String? = null
    var StatusInfo:BookingStatusQueryResponse? = null
    var SendEmailReminder:Boolean? = null
    var SendSmsReminder:Boolean? = null
    var SendSmsConfirmation:Boolean? = null
    var SendEmailConfirmation:Boolean? = null
    var LastTimeToUnBook:Date? = null
    var CustomFields:ArrayList<CustomFieldConfigData> = ArrayList<CustomFieldConfigData>()
    var CustomFieldValues:ArrayList<CustomFieldDataResponse> = ArrayList<CustomFieldDataResponse>()
    var BookedResourceTypes:ArrayList<BookedResourceType> = ArrayList<BookedResourceType>()
    var Company:BookedCompany? = null
    var Customer:BookedCustomer? = null
    var Quantities:ArrayList<BookedQuantity> = ArrayList<BookedQuantity>()
    var Service:ServiceInfoResponse? = null
    var PaymentExpiration:Date? = null
    var Log:ArrayList<BookingLogQueryResponse> = ArrayList<BookingLogQueryResponse>()
    var PaymentLog:ArrayList<BookingPaymentLogQueryResponse> = ArrayList<BookingPaymentLogQueryResponse>()
    var CheckoutLog:ArrayList<BookingCheckoutQueryResponse> = ArrayList<BookingCheckoutQueryResponse>()
    var ExternalReference:ArrayList<ExternalReferenceResponse> = ArrayList<ExternalReferenceResponse>()
    var ResponseStatus:ResponseStatus? = null
    var CalendarExportStatus:BookingCalendarExportStatus? = null
    var LengthInMinutes:Int? = null
    var BookedBy:String? = null
    var BookedComments:String? = null
    var UnbookedComments:String? = null
    var CommentsToCustomer:String? = null
    var CreatedDate:Date? = null
    var UpdatedDate:Date? = null
    var UnbookedOn:Date? = null
    var CancellationCode:String? = null
    var RatingCode:String? = null
}

open class BookingStatusQueryResponse
{
    var Id:Int? = null
    var Name:String? = null
    var Description:String? = null
    var Icon:String? = null
    var Color:String? = null
}

open class CustomFieldConfigData
{
    /**
    * Custom field id
    */
    @ApiMember(Description="Custom field id")
    var Id:Int? = null

    /**
    * Configuration name. Example: 'Number of persons'.
    */
    @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
    var Name:String? = null

    /**
    * Custom field description. Example: 'For how many persons is this booking?'
    */
    @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
    var Description:String? = null

    /**
    * Field width. Example: 20 for 20px
    */
    @ApiMember(Description="Field width. Example: 20 for 20px")
    var Width:Int? = null

    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    var DataType:String? = null

    /**
    * Default value of the field. Example: '3'
    */
    @ApiMember(Description="Default value of the field. Example: '3'")
    var DefaultValue:String? = null

    /**
    * Determines if the field is required to have a value or not
    */
    @ApiMember(Description="Determines if the field is required to have a value or not")
    var IsMandatory:Boolean? = null

    /**
    * Error message shown to the user if the field data is required but not entered
    */
    @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
    var MandatoryErrorMessage:String? = null

    /**
    * Max lenght of the field
    */
    @ApiMember(Description="Max lenght of the field")
    var MaxLength:Int? = null

    /**
    * If the field should have multiple lines
    */
    @ApiMember(Description="If the field should have multiple lines")
    var MultipleLineText:Boolean? = null

    /**
    * Regular expression used for validation of the field
    */
    @ApiMember(Description="Regular expression used for validation of the field")
    var RegEx:String? = null

    /**
    * Error message shown if the regular expression validation failed
    */
    @ApiMember(Description="Error message shown if the regular expression validation failed")
    var RegExErrorMessage:String? = null

    /**
    * The values to select from if Datatype is DropDown for this custom field
    */
    @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    var Values:ArrayList<CustomFieldValueResponse> = ArrayList<CustomFieldValueResponse>()
}

open class CustomFieldValueResponse
{
    var Value:String? = null
}

open class BookedCompany
{
    var Id:UUID? = null
    var Name:String? = null
    var LogoType:Uri? = null
    var Category:String? = null
    var Street1:String? = null
    var Street2:String? = null
    var ZipCode:String? = null
    var City:String? = null
    var CountryId:String? = null
    var Longitude:String? = null
    var Latitude:String? = null
    var Phone:String? = null
    var Email:String? = null
    var HomePage:String? = null
    var SitePath:String? = null
    var IsFavorite:Boolean? = null
    var PaymentProviderId:Int? = null
}

open class BookedQuantity
{
    /**
    * The quantity Id
    */
    @ApiMember(Description="The quantity Id")
    var Id:Int? = null

    /**
    * The quantity for booked on this price category
    */
    @ApiMember(Description="The quantity for booked on this price category")
    var Quantity:Int? = null

    /**
    * The price
    */
    @ApiMember(Description="The price")
    var Price:Double? = null

    /**
    * The price bofore rebate codes
    */
    @ApiMember(Description="The price bofore rebate codes")
    var PriceBeforeRebate:Double? = null

    /**
    * The price currency
    */
    @ApiMember(Description="The price currency")
    var CurrencyId:String? = null

    /**
    * The price sign
    */
    @ApiMember(Description="The price sign")
    var PriceSign:String? = null

    /**
    * The price category
    */
    @ApiMember(Description="The price category")
    var Category:String? = null

    /**
    * The price VAT in percent
    */
    @ApiMember(Description="The price VAT in percent")
    var VAT:BigDecimal? = null

    /**
    * The price text to display
    */
    @ApiMember(Description="The price text to display")
    var PriceText:String? = null

    /**
    * If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information.
    */
    @ApiMember(Description="If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information.")
    var OccupiesSpot:Boolean? = null
}

open class ServiceInfoResponse
{
    var Id:Int? = null
    var Name:String? = null
    var Description:String? = null
    var ImageUrl:Uri? = null
    var LengthInMinutes:Int? = null
    var MaxNumberOfSpotsPerBooking:Int? = null
    var GroupBooking:GroupBookingSettings? = null
    var MultipleResource:MultipleResourceSettings? = null
    var IsGroupBooking:Boolean? = null
    var IsPaymentEnabled:Boolean? = null
}

open class GroupBookingSettings
{
    var Active:Boolean? = null
    var Min:Int? = null
    var Max:Int? = null
}

open class MultipleResourceSettings
{
    var Active:Boolean? = null
    var Min:Int? = null
    var Max:Int? = null
}

open class BookingLogQueryResponse
{
    /**
    * The booking log id
    */
    @ApiMember(Description="The booking log id")
    var Id:Int? = null

    /**
    * The booking id
    */
    @ApiMember(Description="The booking id")
    var BookingId:Int? = null

    /**
    * The type of event
    */
    @ApiMember(Description="The type of event")
    var EventTypeId:Int? = null

    /**
    * The type of event
    */
    @ApiMember(Description="The type of event")
    var EventType:BookingLogEventTypeResponse? = null

    /**
    * Comments that could be added to the event log item
    */
    @ApiMember(Description="Comments that could be added to the event log item")
    var Comments:String? = null

    /**
    * The user created the event
    */
    @ApiMember(Description="The user created the event")
    var UserName:String? = null

    /**
    * Then date when the event occured
    */
    @ApiMember(Description="Then date when the event occured")
    var Created:Date? = null
}

open class BookingLogEventTypeResponse
{
    /**
    * The event type id
    */
    @ApiMember(Description="The event type id")
    var Id:Int? = null

    /**
    * The event type name
    */
    @ApiMember(Description="The event type name")
    var Name:String? = null

    /**
    * The event type description
    */
    @ApiMember(Description="The event type description")
    var Description:String? = null
}

open class BookingPaymentLogQueryResponse
{
    /**
    * The booking payment log id
    */
    @ApiMember(Description="The booking payment log id")
    var Id:Int? = null

    /**
    * The booking id
    */
    @ApiMember(Description="The booking id")
    var BookingId:Int? = null

    /**
    * The payment reference id
    */
    @ApiMember(Description="The payment reference id")
    var PaymentReferenceId:String? = null

    /**
    * The payment order item reference id
    */
    @ApiMember(Description="The payment order item reference id")
    var OrderItemReferenceId:String? = null

    /**
    * The payment reference id
    */
    @ApiMember(Description="The payment reference id")
    var PaymentProviderId:Int? = null

    /**
    * The payment amount
    */
    @ApiMember(Description="The payment amount")
    var Amount:Double? = null

    /**
    * The payment VAT in percent
    */
    @ApiMember(Description="The payment VAT in percent")
    var VAT:BigDecimal? = null

    /**
    * The payment amount that is credited
    */
    @ApiMember(Description="The payment amount that is credited")
    var AmountCredited:Double? = null

    /**
    * The payment currency id
    */
    @ApiMember(Description="The payment currency id")
    var CurrencyId:String? = null

    /**
    * The payment currency info
    */
    @ApiMember(Description="The payment currency info")
    var CurrencyInfo:CurrencyInfoResponse? = null

    /**
    * Comments that could be added to the event log item
    */
    @ApiMember(Description="Comments that could be added to the event log item")
    var Comments:String? = null

    /**
    * The date when the payment items was created
    */
    @ApiMember(Description="The date when the payment items was created")
    var Created:Date? = null

    /**
    * The date when the payment items was update
    */
    @ApiMember(Description="The date when the payment items was update")
    var Updated:Date? = null
}

open class CurrencyInfoResponse
{
    /**
    * The currency id
    */
    @ApiMember(Description="The currency id")
    var Id:String? = null

    /**
    * The currency id
    */
    @ApiMember(Description="The currency id")
    var Name:String? = null

    /**
    * The currency id
    */
    @ApiMember(Description="The currency id")
    var CurrencySign:String? = null
}

open class BookingCheckoutQueryResponse
{
    /**
    * The checkout id
    */
    @ApiMember(Description="The checkout id")
    var Id:UUID? = null

    /**
    * The booking id
    */
    @ApiMember(Description="The booking id")
    var BookingId:Int? = null

    /**
    * The purchase id
    */
    @ApiMember(Description="The purchase id")
    var PurchaseId:Int? = null

    /**
    * The payment checkout expiration datetime
    */
    @ApiMember(Description="The payment checkout expiration datetime")
    var ExpirationTime:Date? = null

    /**
    * The payment snippet code
    */
    @ApiMember(Description="The payment snippet code")
    var Snippet:String? = null

    /**
    * The payment status
    */
    @ApiMember(Description="The payment status")
    var Status:String? = null

    /**
    * Log message
    */
    @ApiMember(Description="Log message")
    var Message:String? = null

    /**
    * When the checkout log item was created
    */
    @ApiMember(Description="When the checkout log item was created")
    var Created:Date? = null

    /**
    * When the checkout log item was updated
    */
    @ApiMember(Description="When the checkout log item was updated")
    var Updated:Date? = null
}

open class ExternalReferenceResponse
{
    var CompanyId:UUID? = null
    var Id:UUID? = null
    var OwnerId:UUID? = null
    var ReferenceType:String? = null
    var ExternalData:String? = null
    var CreatedBy:String? = null
    var Updated:Date? = null
    var Created:Date? = null
}

open class BookingCalendarExportStatus
{
    var CalendarId:String? = null
    var BookingId:Int? = null
    var Synced:Boolean? = null
}

@DataContract
open class QueryResponse<AccessKeyTypeResponse>
{
    @DataMember(Order=1)
    var Offset:Int? = null

    @DataMember(Order=2)
    var Total:Int? = null

    @DataMember(Order=3)
    var Results:ArrayList<AccessKeyTypeResponse> = ArrayList<AccessKeyTypeResponse>()

    @DataMember(Order=4)
    var Meta:HashMap<String,String> = HashMap<String,String>()

    @DataMember(Order=5)
    var ResponseStatus:ResponseStatus? = null
}

open class AccessKeyTypeResponse
{
    var Id:Int? = null
    var KeyType:String? = null
    var Description:String? = null
}

Kotlin BookingQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /bookings HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Id":0,"Status":"Booked","StatusId":0,"StatusName":"String","StatusInfo":{"Id":0,"Name":"String","Description":"String","Icon":"String","Color":"String"},"SendEmailReminder":false,"SendSmsReminder":false,"SendSmsConfirmation":false,"SendEmailConfirmation":false,"LastTimeToUnBook":"0001-01-01T00:00:00","CustomFields":[{"Id":0,"Name":"String","Description":"String","Width":0,"DataType":"String","DefaultValue":"String","IsMandatory":false,"MandatoryErrorMessage":"String","MaxLength":0,"MultipleLineText":false,"RegEx":"String","RegExErrorMessage":"String","Values":[{"Value":"String"}]}],"CustomFieldValues":[{"Id":0,"Column":"String","Name":"String","Description":"String","Value":"String","DataType":"String"}],"BookedResourceTypes":[{"Id":0,"Name":"String","Resources":[{"Id":0,"Name":"String","Color":"String","Email":"String","MobilePhone":"String","AccessGroup":"String","EmailNotification":false,"SMSNotification":false,"EmailReminder":false,"SMSReminder":false}]}],"Company":{"Name":"String","Category":"String","Street1":"String","Street2":"String","ZipCode":"String","City":"String","CountryId":"String","Longitude":"String","Latitude":"String","Phone":"String","Email":"String","HomePage":"String","SitePath":"String","IsFavorite":false,"PaymentProviderId":0},"Customer":{"Firstname":"String","Lastname":"String","Email":"String","Phone":"String","FacebookUserName":"String","ImageUrl":"String","CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"},"Quantities":[{"Id":0,"Quantity":0,"Price":0,"PriceBeforeRebate":0,"CurrencyId":"String","PriceSign":"String","Category":"String","VAT":0,"PriceText":"String","OccupiesSpot":false}],"Service":{"Id":0,"Name":"String","Description":"String","LengthInMinutes":0,"MaxNumberOfSpotsPerBooking":0,"GroupBooking":{"Active":false,"Min":0,"Max":0},"MultipleResource":{"Active":false,"Min":0,"Max":0},"IsGroupBooking":false,"IsPaymentEnabled":false},"PaymentExpiration":"0001-01-01T00:00:00","Log":[{"Id":0,"BookingId":0,"EventTypeId":0,"EventType":{"Id":0,"Name":"String","Description":"String"},"Comments":"String","UserName":"String"}],"PaymentLog":[{"Id":0,"BookingId":0,"PaymentReferenceId":"String","OrderItemReferenceId":"String","PaymentProviderId":0,"Amount":0,"VAT":0,"AmountCredited":0,"CurrencyId":"String","CurrencyInfo":{"Id":"String","Name":"String","CurrencySign":"String"},"Comments":"String"}],"CheckoutLog":[{"BookingId":0,"PurchaseId":0,"ExpirationTime":"0001-01-01T00:00:00","Snippet":"String","Status":"String","Message":"String"}],"ExternalReference":[{"ReferenceType":"String","ExternalData":"String","CreatedBy":"String"}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}},"CalendarExportStatus":{"CalendarId":"String","BookingId":0,"Synced":false},"LengthInMinutes":0,"BookedBy":"String","BookedComments":"String","UnbookedComments":"String","CommentsToCustomer":"String","UnbookedOn":"0001-01-01T00:00:00","CancellationCode":"String","RatingCode":"String"}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}