/* Options:
Date: 2025-04-11 06:52:49
Version: 8.23
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.bokamera.se

//Package: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: CompanyQuery.*
//ExcludeTypes: 
//InitializeCollections: True
//TreatTypesAsStrings: 
//DefaultImports: java.math.*,java.util.*,net.servicestack.client.*,com.google.gson.annotations.*,com.google.gson.reflect.*
*/

import java.math.*
import java.util.*
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


@Route(Path="/companies", Verbs="GET")
open class CompanyQuery : QueryDb<Company, CompanyQueryResponse>(), IReturn<QueryResponse<CompanyQueryResponse>>
{
    /**
    * Id for a specific company you want to retrieve.
    */
    @ApiMember(Description="Id for a specific company you want to retrieve.", ParameterType="query")
    var Id:UUID? = null

    /**
    * Include companies in these categories.
    */
    @ApiMember(Description="Include companies in these categories.", ParameterType="query")
    var Categories:ArrayList<Int>? = null

    /**
    * Search nearby this latitude coordinate.
    */
    @ApiMember(Description="Search nearby this latitude coordinate.", ParameterType="query")
    var Latitude:Double? = null

    /**
    * Search nearby this longitude coordinate.
    */
    @ApiMember(Description="Search nearby this longitude coordinate.", ParameterType="query")
    var Longitude:Double? = null

    /**
    * The site path url for the company homepage
    */
    @ApiMember(Description="The site path url for the company homepage", ParameterType="query")
    var SitePath:String? = null

    /**
    * Search active companies. You're only allowed to search active companies.
    */
    @ApiMember(Description="Search active companies. You're only allowed to search active companies.", ParameterType="query")
    var Active:Boolean? = null

    /**
    * The organisation number for the company
    */
    @ApiMember(Description="The organisation number for the company", ParameterType="query")
    var OrganisationNumber:String? = null

    /**
    * Maxium distance from the coordinates to be included in the result.
    */
    @ApiMember(Description="Maxium distance from the coordinates to be included in the result.", ParameterType="query")
    var Distance:Double? = null

    /**
    * Will search by any company name or city that contains the search string provided.
    */
    @ApiMember(Description="Will search by any company name or city that contains the search string provided.", ParameterType="query")
    var Search:String? = null

    /**
    * Will search by any company owner id. Default is 1 = BokaMera.
    */
    @ApiMember(Description="Will search by any company owner id. Default is 1 = BokaMera.", ParameterType="query")
    var CompanyOwnerId:Int? = null

    /**
    * If you want to get the booking agreements loaded into the field BookingAgreements
    */
    @ApiMember(DataType="boolean", Description="If you want to get the booking agreements loaded into the field BookingAgreements", ParameterType="query")
    var IncludeBookingAgreements:Boolean? = null

    /**
    * If you want to get the code lock system used by the company
    */
    @ApiMember(DataType="boolean", Description="If you want to get the code lock system used by the company", ParameterType="query")
    var IncludeCodeLockSystem:Boolean? = null

    /**
    * If you want to get the booking settings loaded into the field BookingSettings
    */
    @ApiMember(DataType="boolean", Description="If you want to get the booking settings loaded into the field BookingSettings", ParameterType="query")
    var IncludeBookingSettings:Boolean? = null

    /**
    * If you want to get the system settings loaded into the field SystemSettings
    */
    @ApiMember(DataType="boolean", Description="If you want to get the system settings loaded into the field SystemSettings", ParameterType="query")
    var IncludeSystemSettings:Boolean? = null

    /**
    * If you want to get the widget settings loaded into the field WidgetSettings
    */
    @ApiMember(DataType="boolean", Description="If you want to get the widget settings loaded into the field WidgetSettings", ParameterType="query")
    var IncludeWidgetSettings:Boolean? = null

    /**
    * If you want to get the homepage settings loaded into the field HomepageSettings
    */
    @ApiMember(DataType="boolean", Description="If you want to get the homepage settings loaded into the field HomepageSettings", ParameterType="query")
    var IncludeHomepageSettings:Boolean? = null

    /**
    * If you want to include the connected custom fields for the customers
    */
    @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields for the customers", ParameterType="query")
    var IncludeCustomerCustomFields: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 IncludeCustomFields:Boolean? = null

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

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

    var ResponseStatus:ResponseStatus? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<CompanyQueryResponse>>(){}.type }
    override fun getResponseType(): Any? = CompanyQuery.responseType
}

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

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

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

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

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

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

open interface ICompany
{
    var CompanyId:UUID?
}

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 interface IInterval
{
    var From:Date?
    var To:Date?
}

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 CompanyType : BaseModel()
{
    @Required()
    var Name:String? = null

    @Required()
    var Description:String? = null

    var ModifiedDate:Date? = null
    @Required()
    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 CompanyUsers:ArrayList<CompanyUser> = ArrayList<CompanyUser>()

    @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

    var DeletionNotificationDate:Date? = null
}

open class CompanyUser : BaseModel(), IUser, IBaseModelCreated, IBaseModelUpdated
{
    var Resource:Resource? = null
    @Ignore()
    var Roles:ArrayList<KeyCloakRole> = ArrayList<KeyCloakRole>()

    @Ignore()
    var Company:Company? = null

    var Email:String? = null
    @Ignore()
    var FullName:String? = null

    var ResourceId:Int? = null
    var WorkerId:String? = null
    @Required()
    var Active:Boolean? = null

    @Required()
    var IsSuperAdmin:Boolean? = null

    @Required()
    var CreatedDate:Date? = null

    @Required()
    var UpdatedDate:Date? = null

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

    @Required()
    var Id:UUID? = null

    var UserId:UUID? = null
    var Firstname:String? = null
    var Lastname:String? = null
    var Phone:String? = 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 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 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 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 IsFree:Boolean? = 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 Active:Boolean? = null
    var Id: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 RatingReviewResponse
{
    /**
    * The title for the review
    */
    @ApiMember(Description="The title for the review")
    var Title:String? = null

    /**
    * The description for the review
    */
    @ApiMember(Description="The description for the review")
    var Description:String? = null

    /**
    * The rating score
    */
    @ApiMember(Description="The rating score")
    var RatingScore:Int? = null

    /**
    * The review author
    */
    @ApiMember(Description="The review author")
    var Author:String? = null

    /**
    * The created date
    */
    @ApiMember(Description="The created date")
    var Created:Date? = null

    /**
    * The review answer from the company
    */
    @ApiMember(Description="The review answer from the company")
    var ReviewAnswer:String? = 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 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 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 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 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
}

enum class CodeLockSystemType
{
    Sample,
    RcoM5,
    AxemaVaka,
    VanderbiltOmnis,
    ParakeyParakey,
    AmidoDax,
    TelkeyTelkey,
    TechSolutionsSiedle,
    Accessy,
    Zesec,
    Enabla,
}

open class CompanyBookingSettings
{
    var EnableMobileApp:Boolean? = null
    var BookingReceiptMessage:String? = null
    var ShowFreeTimesLeft:Boolean? = null
    var EnableShowBookedTimes:Boolean? = null
    var BookingAgreement:String? = null
    /**
    * The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  
    */
    @ApiMember(DataType="int", Description="The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  ")
    var WeekNumberSetting:Int? = null

    var ShowBookedTimes:Boolean? = null
    /**
    * The payment provider id. 1 = Payson Checkout 1.0, 2= Payson Checkout 2.0 ... To get the full payment provider for the company call GET /payment/settings
    */
    @ApiMember(Description="The payment provider id. 1 = Payson Checkout 1.0, 2= Payson Checkout 2.0 ... To get the full payment provider for the company call GET /payment/settings")
    var PaymentProviderId:Int? = null

    /**
    * If it's only allowed for existing customers to book
    */
    @ApiMember(DataType="boolean", Description="If it's only allowed for existing customers to book")
    var BookOnlyOnExistingCustomers:Boolean? = null

    /**
    * If payment is enabled
    */
    @ApiMember(DataType="boolean", Description="If payment is enabled")
    var PaymentEnabled:Boolean? = null
}

open class CompanySystemSettings
{
    /**
    * If the booking is active or not
    */
    @ApiMember(DataType="bool", Description="If the booking is active or not")
    var Active:Boolean? = null

    /**
    * If the booking is not active, what message to show to the customers
    */
    @ApiMember(DataType="string", Description="If the booking is not active, what message to show to the customers")
    var InactiveMessage:String? = null

    /**
    * If the company should be visible in search results on hompage
    */
    @ApiMember(DataType="bool", Description="If the company should be visible in search results on hompage")
    var Searchable:Boolean? = null

    /**
    * If you have a google analytics account and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a google analytics account and want to track your customers behaviors.")
    var GATrackingId:String? = null

    /**
    * If you have a google Ads Conversion Id account and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a google Ads Conversion Id account and want to track your customers behaviors.")
    var GoogleAdsConversionId:String? = null

    /**
    * If you have a LinkedIn account and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a LinkedIn account and want to track your customers behaviors.")
    var LinkedinTagId:String? = null

    /**
    * If you have a Google Ads Conversion Label and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a Google Ads Conversion Label and want to track your customers behaviors.")
    var GoogleAdsConversionLabel:String? = null

    /**
    * If you have a google tag manager account and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a google tag manager account and want to track your customers behaviors.")
    var GTMTrackingId:String? = null

    /**
    * If you have a facebook account and want to track your customers behaviors.
    */
    @ApiMember(DataType="string", Description="If you have a facebook account and want to track your customers behaviors.")
    var FacebookPixelId:String? = null

    /**
    * If you want your customers to be albe to change language on your homepage
    */
    @ApiMember(DataType="bool", Description="If you want your customers to be albe to change language on your homepage")
    var MultiLanguage:Boolean? = null

    /**
    * If the company should be visible on the marketplace
    */
    @ApiMember(DataType="bool", Description="If the company should be visible on the marketplace")
    var ShowOnMarketplace:Boolean? = null

    /**
    * If you want your own written text on your homepage to be translated using google analytics when a user changes language
    */
    @ApiMember(DataType="bool", Description="If you want your own written text on your homepage to be translated using google analytics when a user changes language")
    var EnableAPITranslation:Boolean? = null

    /**
    * What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN
    */
    @ApiMember(DataType="string", Description="What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN")
    var DefaultLanguage:String? = null

    /**
    * If you want to allow to send customer information in the tracking events to the external providers. Note you as a company are responsible for informing your customers and handling the data in terms of GDPR. 
    */
    @ApiMember(Description="If you want to allow to send customer information in the tracking events to the external providers. Note you as a company are responsible for informing your customers and handling the data in terms of GDPR. ")
    var SendCustomerInformationToExternalProviders:Boolean? = null

    /**
    * The maximum number of SMS messages that can be sent per day.
    */
    @ApiMember(Description="The maximum number of SMS messages that can be sent per day.")
    var SMSMessageDailySendLimit:Int? = null

    /**
    * The maximum number of email messages that can be sent per day.
    */
    @ApiMember(Description="The maximum number of email messages that can be sent per day.")
    var EmailMessageDailySendLimit:Int? = null
}

open class CompanyWidgetSettings
{
    /**
    * The service layouts id.
    */
    @ApiMember(Description="The service layouts id.")
    var ServiceLayoutId:Int? = null

    /**
    * The time layouts id.
    */
    @ApiMember(Description="The time layouts id.")
    var TimeLayoutId:Int? = null

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

    /**
    * The primary color of the booking widget.
    */
    @ApiMember(Description="The primary color of the booking widget.")
    var PrimaryColor:String? = null

    /**
    * If you should show the service image in the booking widget.
    */
    @ApiMember(Description="If you should show the service image in the booking widget.")
    var ShowServiceImage:Boolean? = null

    /**
    * If you should show the rebate code field in the booking widget.
    */
    @ApiMember(Description="If you should show the rebate code field in the booking widget.")
    var ShowRebateCodeField:Boolean? = null

    /**
    * If you should show the next available time in the booking widget.
    */
    @ApiMember(Description="If you should show the next available time in the booking widget.")
    var ShowNextAvailableTime:Boolean? = null

    /**
    * If you should show the end time in the booking widget.
    */
    @ApiMember(Description="If you should show the end time in the booking widget.")
    var ShowEndTime:Boolean? = null

    /**
    * What text to show on booked time slots. Default text is Booked
    */
    @ApiMember(Description="What text to show on booked time slots. Default text is Booked")
    var BookedTimeSlotText:String? = null

    /**
    * If the widget should be displayed in dark theme
    */
    @ApiMember(Description="If the widget should be displayed in dark theme")
    var DarkTheme:Boolean? = null

    /**
    * If you should show the subscribe to newsletter checkbox in the booking widget.
    */
    @ApiMember(Description="If you should show the subscribe to newsletter checkbox in the booking widget.")
    var ShowSubscribeToNewsletter:Boolean? = null
}

open class HomepageSettingsResponse
{
    /**
    * The text for homepage heading
    */
    @ApiMember(Description="The text for homepage heading")
    var HomepageHeading:String? = null

    /**
    * The text for homepage startpage heading
    */
    @ApiMember(Description="The text for homepage startpage heading")
    var WelcomePageHeading:String? = null

    /**
    * The text for homepage startpage body
    */
    @ApiMember(Description="The text for homepage startpage body")
    var WelcomePageBody:String? = null

    /**
    * The text for homepage about us page heading
    */
    @ApiMember(Description="The text for homepage about us page heading")
    var AboutUsPageHeading:String? = null

    /**
    * The text for homepage about us page body
    */
    @ApiMember(Description="The text for homepage about us page body")
    var AboutUsPageBody:String? = null

    /**
    * The startpage image url
    */
    @ApiMember(Description="The startpage image url")
    var ImageUrl:Uri? = null

    /**
    * The cover image url
    */
    @ApiMember(Description="The cover image url")
    var CoverImage:Uri? = null

    /**
    * Show rating on the page
    */
    @ApiMember(Description="Show rating on the page")
    var ShowRating:Boolean? = null

    /**
    * The template for the homepage
    */
    @ApiMember(Description="The template for the homepage")
    var HomePageTemplateId:Int? = null

    /**
    * The hero section style for the homepage
    */
    @ApiMember(Description="The hero section style for the homepage")
    var HeroSectionStyleId:Int? = null

    /**
    * Enable the BokaMera Homepage
    */
    @ApiMember(Description="Enable the BokaMera Homepage")
    var EnableHomepage:Boolean? = null
}

open class CompanyRatingSummary
{
    /**
    * The average rating score
    */
    @ApiMember(Description="The average rating score")
    var AverageScore:Double? = null

    /**
    * The number of ratings of score 1
    */
    @ApiMember(Description="The number of ratings of score 1")
    var RatingScore1Count:Int? = null

    /**
    * The number of ratings of score 2
    */
    @ApiMember(Description="The number of ratings of score 2")
    var RatingScore2Count:Int? = null

    /**
    * The number of ratings of score 3
    */
    @ApiMember(Description="The number of ratings of score 3")
    var RatingScore3Count:Int? = null

    /**
    * The number of ratings of score 4
    */
    @ApiMember(Description="The number of ratings of score 4")
    var RaingScore4Count:Int? = null

    /**
    * The number of ratings of score 5
    */
    @ApiMember(Description="The number of ratings of score 5")
    var RatingScore5Count:Int? = null

    /**
    * The number of ratings
    */
    @ApiMember(Description="The number of ratings")
    var Count:Int? = null
}

enum class ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

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

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

@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 BaseModel
{
}

open interface IBaseModelCreated
{
    var CreatedDate:Date?
}

open interface IBaseModelUpdated
{
    var UpdatedDate:Date?
}

open interface ICustomFieldTable
{
    var CustomFieldsConfig:IList<CustomFieldConfig>?
    var CustomFieldsData:IList<CustomFieldDataResponse>?
    var TextField1:String?
    var TextField2:String?
    var TextField3:String?
    var TextField4:String?
    var TextField5:String?
    var TextField6:String?
    var TextField7:String?
    var TextField8:String?
    var TextField9:String?
    var TextField10:String?
    var TextField11:String?
    var TextField12:String?
    var TextField13:String?
    var TextField14:String?
    var TextField15:String?
    var TextField16:String?
    var TextField17:String?
    var TextField18:String?
    var TextField19:String?
    var TextField20:String?
}

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

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 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 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 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
    var SendCustomerInformationToExternalProviders:Boolean? = null
    @Required()
    var Id:UUID? = null

    var IsWebhookFeatureEnabled:Boolean? = null
    var SmsMessageSendLimit:Int? = null
    var EmailMessageSendLimit:Int? = 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 ShowSubscribeToNewsletter:Boolean? = null

    @Required()
    var Id:UUID? = 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 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 KeyCloakRole
{
    var Id:UUID? = null
    var Name:String? = null
}

open interface IUser
{
    var Id:UUID?
    var UserId:UUID?
    var Email:String?
    var Firstname:String?
    var Lastname:String?
    var Phone:String?
}

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 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 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 LicenseTypeItem : BaseModel()
{
    @Ignore()
    var Name:String? = null

    @Ignore()
    var LicenseType:LicenseType? = 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 interface ISchedule
{
    var CompanyId:UUID?
    var Resources:IList<Resource>?
    var Type:ScheduleType?
    var Active:Boolean?
    var IsResourceSpecific:Boolean?
}

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?
}

open class CustomFieldValueResponse
{
    var Value:String? = 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 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 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 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 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
}

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

open class CompanyQueryResponse
{
    var Id:UUID? = null
    var Name:String? = null
    /**
    * The organisation number will only be visible if your owner to the company
    */
    @ApiMember(DataType="string", Description="The organisation number will only be visible if your owner to the company")
    var OrganisationNumber:String? = null

    /**
    * What type of company. If it's used for personal use or as a company.
    */
    @ApiMember(DataType="int", Description="What type of company. If it's used for personal use or as a company.")
    var TypeId:Int? = null

    var Details:String? = null
    var CategoryId:Int? = null
    var Category:String? = null
    var LogoType:Uri? = null
    var CoverImage:Uri? = 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 Distance:Double? = null
    var Phone:String? = null
    var Email:String? = null
    var Homepage:String? = null
    var SitePath:String? = null
    var Active:Boolean? = null
    var CodeLockSystem:CodeLockSystemType? = null
    var IsFreeAccount:Boolean? = null
    /**
    * Will show when the company was updated, note it will only be shown if your logged in as admin for the company.
    */
    @ApiMember(DataType="datetime", Description="Will show when the company was updated, note it will only be shown if your logged in as admin for the company.")
    var Updated:Date? = null

    /**
    * Will show when the company was created, note it will only be shown if your logged in as admin for the company.
    */
    @ApiMember(DataType="datetime", Description="Will show when the company was created, note it will only be shown if your logged in as admin for the company.")
    var Created:Date? = null

    var StatusId:Int? = null
    /**
    * If the company is marked as favourite for the logged in user
    */
    @ApiMember(DataType="boolean", Description="If the company is marked as favourite for the logged in user")
    var IsFavorite:Boolean? = null

    var BookingAgreements:String? = null
    var BookingSettings:CompanyBookingSettings? = null
    var SystemSettings:CompanySystemSettings? = null
    var WidgetSettings:CompanyWidgetSettings? = null
    var HomepageSettings:HomepageSettingsResponse? = null
    var RatingSummary:CompanyRatingSummary? = null
    var Reviews:ArrayList<RatingReviewResponse> = ArrayList<RatingReviewResponse>()
    var CustomerCustomFields:ArrayList<CustomFieldConfigData> = ArrayList<CustomFieldConfigData>()
    var ResponseStatus:ResponseStatus? = null
}