BokaMera.API.Host

<back to all web services

SuperAdminCompanyQuery

Requires Authentication
Requires the role:superadmin
The following routes are available for this service:
GET/superadmin/companiesGet super admin companies
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryBase:
    skip: Optional[int] = None
    """
    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>
    """

    take: Optional[int] = None
    """
    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>
    """

    order_by: Optional[str] = None
    """
    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>
    """

    order_by_desc: Optional[str] = None
    """
    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>
    """

    include: Optional[str] = None
    """
    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>
    """

    fields: Optional[str] = None
    meta: Optional[Dict[str, str]] = None


From = TypeVar('From')
Into = TypeVar('Into')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryDb2(Generic[From, Into], QueryBase, IReturn[QueryResponse[Into]]):
    @staticmethod
    def response_type(): return QueryResponse[Into]


class CodeLockSystemType(str, Enum):
    SAMPLE = 'Sample'
    RCO_M5 = 'RcoM5'
    AXEMA_VAKA = 'AxemaVaka'
    VANDERBILT_OMNIS = 'VanderbiltOmnis'
    PARAKEY_PARAKEY = 'ParakeyParakey'
    AMIDO_DAX = 'AmidoDax'
    TELKEY_TELKEY = 'TelkeyTelkey'
    TECH_SOLUTIONS_SIEDLE = 'TechSolutionsSiedle'
    ACCESSY = 'Accessy'
    ZESEC = 'Zesec'
    ENABLA = 'Enabla'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyBookingSettings:
    enable_mobile_app: bool = False
    booking_receipt_message: Optional[str] = None
    show_free_times_left: bool = False
    enable_show_booked_times: bool = False
    booking_agreement: Optional[str] = None
    # @ApiMember(DataType="int", Description="The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  ")
    week_number_setting: int = 0
    """
    The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  
    """


    show_booked_times: bool = False
    # @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")
    payment_provider_id: int = 0
    """
    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(DataType="boolean", Description="If it's only allowed for existing customers to book")
    book_only_on_existing_customers: bool = False
    """
    If it's only allowed for existing customers to book
    """


    # @ApiMember(DataType="boolean", Description="If payment is enabled")
    payment_enabled: bool = False
    """
    If payment is enabled
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanySystemSettings:
    # @ApiMember(DataType="bool", Description="If the booking is active or not")
    active: bool = False
    """
    If the booking is active or not
    """


    # @ApiMember(DataType="string", Description="If the booking is not active, what message to show to the customers")
    inactive_message: Optional[str] = None
    """
    If the booking is not active, what message to show to the customers
    """


    # @ApiMember(DataType="bool", Description="If the company should be visible in search results on hompage")
    searchable: bool = False
    """
    If the company should be visible in search results on hompage
    """


    # @ApiMember(DataType="string", Description="If you have a google analytics account and want to track your customers behaviors.")
    ga_tracking_id: Optional[str] = None
    """
    If you have a google analytics 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.")
    google_ads_conversion_id: Optional[str] = None
    """
    If you have a google Ads Conversion Id 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.")
    linkedin_tag_id: Optional[str] = None
    """
    If you have a LinkedIn account 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.")
    google_ads_conversion_label: Optional[str] = None
    """
    If you have a Google Ads Conversion Label 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.")
    gtm_tracking_id: Optional[str] = None
    """
    If you have a google tag manager 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.")
    facebook_pixel_id: Optional[str] = None
    """
    If you have a facebook account and want to track your customers behaviors.
    """


    # @ApiMember(DataType="bool", Description="If you want your customers to be albe to change language on your homepage")
    multi_language: bool = False
    """
    If you want your customers to be albe to change language on your homepage
    """


    # @ApiMember(DataType="bool", Description="If the company should be visible on the marketplace")
    show_on_marketplace: bool = False
    """
    If the company should be visible on the marketplace
    """


    # @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")
    enable_a_p_i_translation: bool = False
    """
    If you want your own written text on your homepage to be translated using google analytics when a user changes language
    """


    # @ApiMember(DataType="string", Description="What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN")
    default_language: Optional[str] = None
    """
    What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN
    """


    # @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. ")
    send_customer_information_to_external_providers: bool = False
    """
    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. 
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyWidgetSettings:
    # @ApiMember(Description="The service layouts id.")
    service_layout_id: int = 0
    """
    The service layouts id.
    """


    # @ApiMember(Description="The time layouts id.")
    time_layout_id: int = 0
    """
    The time layouts id.
    """


    # @ApiMember(Description="The booking layouts id.")
    booking_layout_id: int = 0
    """
    The booking layouts id.
    """


    # @ApiMember(Description="The primary color of the booking widget.")
    primary_color: Optional[str] = None
    """
    The primary color of the booking widget.
    """


    # @ApiMember(Description="If you should show the service image in the booking widget.")
    show_service_image: bool = False
    """
    If you should show the service image in the booking widget.
    """


    # @ApiMember(Description="If you should show the rebate code field in the booking widget.")
    show_rebate_code_field: bool = False
    """
    If you should show the rebate code field in the booking widget.
    """


    # @ApiMember(Description="If you should show the next available time in the booking widget.")
    show_next_available_time: bool = False
    """
    If you should show the next available time in the booking widget.
    """


    # @ApiMember(Description="If you should show the end time in the booking widget.")
    show_end_time: bool = False
    """
    If you should show the end time in the booking widget.
    """


    # @ApiMember(Description="What text to show on booked time slots. Default text is Booked")
    booked_time_slot_text: Optional[str] = None
    """
    What text to show on booked time slots. Default text is Booked
    """


    # @ApiMember(Description="If the widget should be displayed in dark theme")
    dark_theme: bool = False
    """
    If the widget should be displayed in dark theme
    """


    # @ApiMember(Description="If you should show the subscribe to newsletter checkbox in the booking widget.")
    show_subscribe_to_newsletter: bool = False
    """
    If you should show the subscribe to newsletter checkbox in the booking widget.
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageSettingsResponse:
    # @ApiMember(Description="The text for homepage heading")
    homepage_heading: Optional[str] = None
    """
    The text for homepage heading
    """


    # @ApiMember(Description="The text for homepage startpage heading")
    welcome_page_heading: Optional[str] = None
    """
    The text for homepage startpage heading
    """


    # @ApiMember(Description="The text for homepage startpage body")
    welcome_page_body: Optional[str] = None
    """
    The text for homepage startpage body
    """


    # @ApiMember(Description="The text for homepage about us page heading")
    about_us_page_heading: Optional[str] = None
    """
    The text for homepage about us page heading
    """


    # @ApiMember(Description="The text for homepage about us page body")
    about_us_page_body: Optional[str] = None
    """
    The text for homepage about us page body
    """


    # @ApiMember(Description="The startpage image url")
    image_url: Optional[str] = None
    """
    The startpage image url
    """


    # @ApiMember(Description="The cover image url")
    cover_image: Optional[str] = None
    """
    The cover image url
    """


    # @ApiMember(Description="Show rating on the page")
    show_rating: bool = False
    """
    Show rating on the page
    """


    # @ApiMember(Description="The template for the homepage")
    home_page_template_id: int = 0
    """
    The template for the homepage
    """


    # @ApiMember(Description="The hero section style for the homepage")
    hero_section_style_id: int = 0
    """
    The hero section style for the homepage
    """


    # @ApiMember(Description="Enable the BokaMera Homepage")
    enable_homepage: bool = False
    """
    Enable the BokaMera Homepage
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyRatingSummary:
    # @ApiMember(Description="The average rating score")
    average_score: float = 0.0
    """
    The average rating score
    """


    # @ApiMember(Description="The number of ratings of score 1")
    rating_score1_count: int = 0
    """
    The number of ratings of score 1
    """


    # @ApiMember(Description="The number of ratings of score 2")
    rating_score2_count: int = 0
    """
    The number of ratings of score 2
    """


    # @ApiMember(Description="The number of ratings of score 3")
    rating_score3_count: int = 0
    """
    The number of ratings of score 3
    """


    # @ApiMember(Description="The number of ratings of score 4")
    raing_score4_count: int = 0
    """
    The number of ratings of score 4
    """


    # @ApiMember(Description="The number of ratings of score 5")
    rating_score5_count: int = 0
    """
    The number of ratings of score 5
    """


    # @ApiMember(Description="The number of ratings")
    count: int = 0
    """
    The number of ratings
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RatingReviewResponse:
    # @ApiMember(Description="The title for the review")
    title: Optional[str] = None
    """
    The title for the review
    """


    # @ApiMember(Description="The description for the review")
    description: Optional[str] = None
    """
    The description for the review
    """


    # @ApiMember(Description="The rating score")
    rating_score: int = 0
    """
    The rating score
    """


    # @ApiMember(Description="The review author")
    author: Optional[str] = None
    """
    The review author
    """


    # @ApiMember(Description="The created date")
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    The created date
    """


    # @ApiMember(Description="The review answer from the company")
    review_answer: Optional[str] = None
    """
    The review answer from the company
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldValueResponse:
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldConfigData:
    # @ApiMember(Description="Custom field id")
    id: int = 0
    """
    Custom field id
    """


    # @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
    name: Optional[str] = None
    """
    Configuration name. Example: 'Number of persons'.
    """


    # @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
    description: Optional[str] = None
    """
    Custom field description. Example: 'For how many persons is this booking?'
    """


    # @ApiMember(Description="Field width. Example: 20 for 20px")
    width: Optional[int] = None
    """
    Field width. Example: 20 for 20px
    """


    # @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    data_type: Optional[str] = None
    """
    Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    """


    # @ApiMember(Description="Default value of the field. Example: '3'")
    default_value: Optional[str] = None
    """
    Default value of the field. Example: '3'
    """


    # @ApiMember(Description="Determines if the field is required to have a value or not")
    is_mandatory: bool = False
    """
    Determines if the field is required to have a value or not
    """


    # @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
    mandatory_error_message: Optional[str] = None
    """
    Error message shown to the user if the field data is required but not entered
    """


    # @ApiMember(Description="Max lenght of the field")
    max_length: int = 0
    """
    Max lenght of the field
    """


    # @ApiMember(Description="If the field should have multiple lines")
    multiple_line_text: bool = False
    """
    If the field should have multiple lines
    """


    # @ApiMember(Description="Regular expression used for validation of the field")
    reg_ex: Optional[str] = None
    """
    Regular expression used for validation of the field
    """


    # @ApiMember(Description="Error message shown if the regular expression validation failed")
    reg_ex_error_message: Optional[str] = None
    """
    Error message shown if the regular expression validation failed
    """


    # @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    values: Optional[List[CustomFieldValueResponse]] = None
    """
    The values to select from if Datatype is DropDown for this custom field
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyQueryResponse:
    id: Optional[str] = None
    name: Optional[str] = None
    # @ApiMember(DataType="string", Description="The organisation number will only be visible if your owner to the company")
    organisation_number: Optional[str] = None
    """
    The organisation number will only be visible if your owner to the company
    """


    # @ApiMember(DataType="int", Description="What type of company. If it's used for personal use or as a company.")
    type_id: Optional[int] = None
    """
    What type of company. If it's used for personal use or as a company.
    """


    details: Optional[str] = None
    category_id: int = 0
    category: Optional[str] = None
    logo_type: Optional[str] = None
    cover_image: Optional[str] = None
    street1: Optional[str] = None
    street2: Optional[str] = None
    zip_code: Optional[str] = None
    city: Optional[str] = None
    country_id: Optional[str] = None
    longitude: Optional[str] = None
    latitude: Optional[str] = None
    distance: Optional[float] = None
    phone: Optional[str] = None
    email: Optional[str] = None
    homepage: Optional[str] = None
    site_path: Optional[str] = None
    active: bool = False
    code_lock_system: Optional[CodeLockSystemType] = None
    is_free_account: bool = False
    # @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.")
    updated: Optional[datetime.datetime] = None
    """
    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 created, note it will only be shown if your logged in as admin for the company.")
    created: Optional[datetime.datetime] = None
    """
    Will show when the company was created, note it will only be shown if your logged in as admin for the company.
    """


    status_id: int = 0
    # @ApiMember(DataType="boolean", Description="If the company is marked as favourite for the logged in user")
    is_favorite: bool = False
    """
    If the company is marked as favourite for the logged in user
    """


    booking_agreements: Optional[str] = None
    booking_settings: Optional[CompanyBookingSettings] = None
    system_settings: Optional[CompanySystemSettings] = None
    widget_settings: Optional[CompanyWidgetSettings] = None
    homepage_settings: Optional[HomepageSettingsResponse] = None
    rating_summary: Optional[CompanyRatingSummary] = None
    reviews: Optional[List[RatingReviewResponse]] = None
    customer_custom_fields: Optional[List[CustomFieldConfigData]] = None
    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BaseModel:
    pass


class CompanyStatus(IntEnum):
    REGISTERED = 1
    AWAITING_APPROVAL = 2
    APPROVED = 3
    INACTIVE = 4
    CLOSED_DOWN = 5
    NOT_APPROVED = 6


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldValue(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    value: Optional[str] = None

    # @Required()
    active: bool = False

    sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomField(BaseModel):
    # @Required()
    table: Optional[str] = None

    # @Required()
    column: Optional[str] = None

    # @Required()
    data_type: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RegEx(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    reg_ex_code: Optional[str] = None

    error_message: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


class ScheduleType(str, Enum):
    NOT_DEFINED = 'NotDefined'
    RECURRING_SCHEDULE = 'RecurringSchedule'
    DATE_SCHEDULE = 'DateSchedule'


class ISchedule:
    resources: Optional[IList[Resource]] = None
    type: Optional[ScheduleType] = None
    active: bool = False
    is_resource_specific: bool = False


class ITimeException(IInterval):
    id: int = 0
    reason_text: Optional[str] = None
    is_block: bool = False
    reason_text_public: Optional[str] = None
    is_recurring: bool = False
    resource_ids: Optional[List[int]] = None


class BookingStatusEnum(IntEnum):
    BOOKED = 1
    UNBOOKED = 2
    RESERVED = 3
    CANCELED = 4
    AWAITING_PAYMENT = 5
    AWAITING_PAYMENT_NO_TIME_LIMIT = 6
    PAYED = 7
    AWAITING_PAYMENT_REQUEST_FROM_ADMIN = 8
    AWAITING_PAYMENT_FROM_PROVIDER = 9
    INVOICED = 10


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedCustomer:
    id: Optional[str] = None
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    facebook_user_name: Optional[str] = None
    image_url: Optional[str] = None
    corporate_identity_number: Optional[str] = None
    invoice_address1: Optional[str] = None
    invoice_address2: Optional[str] = None
    invoice_city: Optional[str] = None
    invoice_postal_code: Optional[str] = None
    invoice_country_code: Optional[str] = None


class IBookedTime(IInterval):
    id: int = 0
    service_id: int = 0
    booked_spots: int = 0
    total_spots: int = 0
    pause_after_in_minutes: int = 0
    status: Optional[BookingStatusEnum] = None
    status_id: int = 0
    customer: Optional[BookedCustomer] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldDataResponse:
    id: int = 0
    column: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    value: Optional[str] = None
    # @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    data_type: Optional[str] = None
    """
    Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Resource(BaseModel, ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    priority: int = 0

    # @Ignore()
    schedules: Optional[IList[ISchedule]] = None

    # @Ignore()
    exceptions: Optional[IList[ITimeException]] = None

    # @Ignore()
    bookings: Optional[IList[IBookedTime]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    active: bool = False

    description: Optional[str] = None
    image_url: Optional[str] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    color: Optional[str] = None

    email: Optional[str] = None
    mobile_phone: Optional[str] = None
    email_notification: Optional[bool] = None
    sms_notification: Optional[bool] = None
    # @Required()
    send_s_m_s_reminder: bool = False

    # @Required()
    send_email_reminder: bool = False

    modified_date: Optional[datetime.datetime] = None
    access_group: Optional[str] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceType(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    selectable_by_user: bool = False

    # @Ignore()
    resources: Optional[List[Resource]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeType(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AppliedRebateCodes:
    rebate_code_id: int = 0
    rebate_code_sign: Optional[str] = None
    rebate_code_value: int = 0
    rebate_amount: float = 0.0
    rebate_code_type: Optional[RebateCodeType] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TotalPriceInformation:
    total_price: float = 0.0
    total_v_a_t_amount: float = 0.0
    total_rebate: float = 0.0
    total_price_before_rebate: float = 0.0
    applied_codes: Optional[List[AppliedRebateCodes]] = None
    price_sign: Optional[str] = None
    currency_id: Optional[str] = None
    vat: Decimal = decimal.Decimal(0)


class Currency(IntEnum):
    SEK = 1
    EUR = 2


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceMapping(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    id: Optional[str] = None

    # @Required()
    price_id: int = 0

    reference_type: Optional[str] = None
    external_reference: Optional[str] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


class BokaMeraDayOfWeek(IntEnum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServicePriceDayOfWeekRelation(BaseModel):
    # @Ignore()
    day_of_week: Optional[BokaMeraDayOfWeek] = None

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    service_price_id: int = 0

    # @Required()
    day_of_week_id: int = 0

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


class IDbConnectionFactory:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServerData:
    htt_p__h_o_s_t: Optional[str] = None
    htt_p__c_o_n_n_e_c_t_i_o_n: Optional[str] = None
    htt_p__c_a_c_h_e__c_o_n_t_r_o_l: Optional[str] = None
    htt_p__a_c_c_e_p_t: Optional[str] = None
    htt_p__u_s_e_r__a_g_e_n_t: Optional[str] = None
    htt_p__a_c_c_e_p_t__e_n_c_o_d_i_n_g: Optional[str] = None
    htt_p__a_c_c_e_p_t__l_a_n_g_u_a_g_e: Optional[str] = None
    path: Optional[str] = None
    serve_r__s_o_f_t_w_a_r_e: Optional[str] = None
    serve_r__n_a_m_e: Optional[str] = None
    serve_r__a_d_d_r: Optional[str] = None
    serve_r__p_o_r_t: Optional[str] = None
    remot_e__a_d_d_r: Optional[str] = None
    remot_e__p_o_r_t: Optional[str] = None
    gatewa_y__i_n_t_e_r_f_a_c_e: Optional[str] = None
    serve_r__p_r_o_t_o_c_o_l: Optional[str] = None
    reques_t__m_e_t_h_o_d: Optional[str] = None
    quer_y__s_t_r_i_n_g: Optional[str] = None
    reques_t__t_i_m_e: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Credentials:
    hash: Optional[str] = None
    id: Optional[str] = None
    version: Optional[str] = None
    client: Optional[str] = None
    serverdata: Optional[ServerData] = None
    time: Optional[str] = None
    test: Optional[str] = None
    language: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CheckoutData:
    terms: Optional[str] = None
    privacy_policy: Optional[str] = None
    redirect_on_success: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CheckoutPaymentData:
    currency: Optional[str] = None
    language: Optional[str] = None
    country: Optional[str] = None
    autoactivate: Optional[str] = None
    orderid: Optional[str] = None
    returnmethod: Optional[str] = None
    accepturl: Optional[str] = None
    cancelurl: Optional[str] = None
    callbackurl: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentInfo:
    paymentdate: Optional[str] = None
    paymentterms: Optional[str] = None
    yourreference: Optional[str] = None
    ourreference: Optional[str] = None
    projectname: Optional[str] = None
    deliverymethod: Optional[str] = None
    deliveryterms: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CartHandling:
    withouttax: Optional[str] = None
    taxrate: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CartTotal:
    rounding: Optional[str] = None
    withouttax: Optional[str] = None
    tax: Optional[str] = None
    withtax: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Shipping:
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    company: Optional[str] = None
    street: Optional[str] = None
    street2: Optional[str] = None
    zip: Optional[str] = None
    city: Optional[str] = None
    country: Optional[str] = None
    phone: Optional[str] = None
    withouttax: Optional[str] = None
    taxrate: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Cart:
    handling: Optional[CartHandling] = None
    total: Optional[CartTotal] = None
    shipping: Optional[Shipping] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerBilling:
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    company: Optional[str] = None
    street: Optional[str] = None
    street2: Optional[str] = None
    zip: Optional[str] = None
    city: Optional[str] = None
    country: Optional[str] = None
    phone: Optional[str] = None
    email: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyCustomer:
    nr: Optional[str] = None
    pno: Optional[str] = None
    billing: Optional[CustomerBilling] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InitCheckoutData:
    checkout_data: Optional[CheckoutData] = None
    payment_data: Optional[CheckoutPaymentData] = None
    payment_info: Optional[PaymentInfo] = None
    articles: Optional[List[QvicklyArticle]] = None
    cart: Optional[Cart] = None
    qvickly_customer: Optional[QvicklyCustomer] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InitCheckoutRequestBody:
    credentials: Optional[Credentials] = None
    data: Optional[InitCheckoutData] = None
    function: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyCheckoutResponse:
    number: int = 0
    status: Optional[str] = None
    order_id: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvikclyPaymentData:
    method: Optional[str] = None
    paymentplanid: Optional[str] = None
    currency: Optional[str] = None
    country: Optional[str] = None
    language: Optional[str] = None
    autoactivate: Optional[str] = None
    orderid: Optional[str] = None
    status: Optional[str] = None
    paymentid_related: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Card:
    promptname: Optional[str] = None
    recurring: Optional[str] = None
    recurringnr: Optional[str] = None
    accepturl: Optional[str] = None
    cancelurl: Optional[str] = None
    callbackurl: Optional[str] = None
    returnmethod: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Settlement:
    number: Optional[str] = None
    date: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyPaymentResponse:
    payment_data: Optional[QvikclyPaymentData] = None
    payment_info: Optional[PaymentInfo] = None
    card: Optional[Card] = None
    settlement: Optional[Settlement] = None
    qvickly_customer: Optional[QvicklyCustomer] = None
    articles: Optional[List[QvicklyArticle]] = None
    cart: Optional[Cart] = None


class Payson2CheckoutStatus(str, Enum):
    NONE = 'None'
    CREATED = 'Created'
    FORMS_FILLED = 'FormsFilled'
    READY_TO_PAY = 'ReadyToPay'
    PROCESSING_PAYMENT = 'ProcessingPayment'
    READY_TO_SHIP = 'ReadyToShip'
    SHIPPED = 'Shipped'
    PAID_TO_ACCOUNT = 'PaidToAccount'
    CANCELED = 'Canceled'
    CREDITED = 'Credited'
    EXPIRED = 'Expired'
    DENIED = 'Denied'


class CustomerType(str, Enum):
    PERSON = 'Person'
    BUSINESS = 'Business'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UserAccessKeys(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    access_key_type_id: int = 0

    # @Required()
    value: Optional[str] = None

    # @Required()
    customer_id: Optional[str] = None

    description: Optional[str] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExternalReference(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    id: Optional[str] = None

    # @Required()
    owner_id: Optional[str] = None

    # @Required()
    reference_type: Optional[str] = None

    external_data: Optional[str] = None
    created_by: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerComment(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    comments: Optional[str] = None

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    image_url: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Customer(BaseModel, IUser, ICustomFieldTable):
    identity_id: int = 0
    id: Optional[str] = None
    # @Ignore()
    customer_id: Optional[str] = None

    # @Ignore()
    access_keys: Optional[IList[UserAccessKeys]] = None

    email: Optional[str] = None
    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Ignore()
    company: Optional[Company] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    comments: Optional[IList[CustomerComment]] = None

    # @Ignore()
    rebate_codes: Optional[IList[RebateCode]] = None

    firstname: Optional[str] = None
    # @Ignore()
    image_url: Optional[str] = None

    # @Required()
    active: bool = False

    facebook_username: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    ip_address: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None
    user_id: Optional[str] = None
    lastname: Optional[str] = None
    phone: Optional[str] = None
    corporate_identity_number: Optional[str] = None
    invoice_address1: Optional[str] = None
    invoice_address2: Optional[str] = None
    invoice_city: Optional[str] = None
    invoice_postal_code: Optional[str] = None
    invoice_country_code: Optional[str] = None
    # @Required()
    company_id: Optional[str] = None

    subscribed_to_newsletter: bool = False


class ItemType(str, Enum):
    PHYSICAL = 'Physical'
    SERVICE = 'Service'
    FEE = 'Fee'
    DISCOUNT = 'Discount'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Item:
    item_id: Optional[str] = None
    discount_rate: Decimal = decimal.Decimal(0)
    ean: Optional[str] = None
    image_uri: Optional[str] = None
    name: Optional[str] = None
    quantity: Decimal = decimal.Decimal(0)
    reference: Optional[str] = None
    tax_rate: Decimal = decimal.Decimal(0)
    total_price_excluding_tax: Decimal = decimal.Decimal(0)
    total_price_including_tax: Decimal = decimal.Decimal(0)
    total_tax_amount: Decimal = decimal.Decimal(0)
    credited_amount: Decimal = decimal.Decimal(0)
    type: Optional[ItemType] = None
    unit_price: Decimal = decimal.Decimal(0)
    uri: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Order:
    currency: Optional[Currency] = None
    total_fee_excluding_tax: Decimal = decimal.Decimal(0)
    total_fee_including_tax: Decimal = decimal.Decimal(0)
    total_price_excluding_tax: Decimal = decimal.Decimal(0)
    total_price_including_tax: Decimal = decimal.Decimal(0)
    total_tax_amount: Decimal = decimal.Decimal(0)
    total_credited_amount: Decimal = decimal.Decimal(0)
    items: Optional[IList[Item]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Merchant:
    checkout_uri: Optional[str] = None
    confirmation_uri: Optional[str] = None
    notification_uri: Optional[str] = None
    validation_uri: Optional[str] = None
    terms_uri: Optional[str] = None
    reference: Optional[str] = None
    partner_id: Optional[str] = None


class ColorScheme(str, Enum):
    WHITE = 'White'
    BLUE = 'Blue'
    GRAY = 'Gray'
    GRAY_TEXT_LOGOS = 'GrayTextLogos'
    BLUE_TEXT_LOGOS = 'BlueTextLogos'
    WHITE_TEXT_LOGOS = 'WhiteTextLogos'
    WHITE_NO_FOOTER = 'WhiteNoFooter'
    GRAY_NO_FOOTER = 'GrayNoFooter'
    BLUE_NO_FOOTER = 'BlueNoFooter'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Gui:
    color_scheme: Optional[ColorScheme] = None
    locale: Optional[str] = None
    request_phone: bool = False
    phone_optional: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class History:
    created: Optional[datetime.datetime] = None
    ready_to_pay: Optional[datetime.datetime] = None
    ready_to_ship: Optional[datetime.datetime] = None
    shipped: Optional[datetime.datetime] = None
    paid_to_account: Optional[datetime.datetime] = None
    canceled: Optional[datetime.datetime] = None
    expired: Optional[datetime.datetime] = None
    denied: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Payson2CheckoutResponse:
    id: Optional[str] = None
    expiration_time: Optional[datetime.datetime] = None
    snippet: Optional[str] = None
    status: Optional[Payson2CheckoutStatus] = None
    customer: Optional[Customer] = None
    order: Optional[Order] = None
    merchant: Optional[Merchant] = None
    gui: Optional[Gui] = None
    history: Optional[History] = None
    purchase_id: Optional[int] = None


class IPaysonPaymentCheckout1:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentLog(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    internal_reference_id: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    payment_reference_id: Optional[str] = None
    payment_provider_id: Optional[int] = None
    order_item_reference_id: Optional[str] = None
    amount: Optional[float] = None
    vat: Optional[Decimal] = None
    amount_credited: Optional[float] = None
    comments: Optional[str] = None
    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PayableEntity(BaseModel, IPayableEntity):
    # @Ignore()
    db_factory: Optional[IDbConnectionFactory] = None

    # @Ignore()
    qvickly_payment_manager: Optional[IBokameraPaymentManager[InitCheckoutRequestBody, QvicklyCheckoutResponse, QvicklyPaymentResponse]] = None

    # @Ignore()
    payson2_payment_manager: Optional[IBokameraPaymentManager[Payson2CheckoutResponse, Payson2CheckoutResponse, Payson2CheckoutResponse]] = None

    # @Ignore()
    payson_payment_checkout1: Optional[IPaysonPaymentCheckout1] = None

    # @Ignore()
    logger: Optional[ILogger[PayableEntity]] = None

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Ignore()
    payment_log: Optional[List[PaymentLog]] = None

    company_id: Optional[str] = None
    price_vat: Optional[Decimal] = None
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    # @Ignore()
    customer: Optional[Customer] = None

    # @Ignore()
    customers: Optional[List[Customer]] = None

    # @Ignore()
    company: Optional[Company] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeStatus(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ArticleServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    service_id: int = 0

    # @Required()
    article_id: int = 0


class ArticleTypeEnum(IntEnum):
    SERVICE_ARTICLE = 1
    STAND_ALONE_ARTICLE = 2
    REBATE_CODE_PUNCH_TICKET_ARTICLE = 3
    REBATE_CODE_GIFT_CARD_ARTICLE = 4
    REBATE_CODE_VALUE_CARD_ARTICLE = 5


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Article(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    company: Optional[Company] = None
    currency_info: Optional[Currency] = None
    article_service_relations: Optional[List[ArticleServiceRelation]] = None
    # @Ignore()
    service_ids: Optional[List[int]] = None

    # @Ignore()
    article_type: Optional[ArticleTypeEnum] = None

    # @Ignore()
    article_type_name: Optional[str] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    description: Optional[str] = None
    image_url: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    amount: int = 0

    # @Required()
    price: float = 0.0

    # @Required()
    # @StringLength(50)
    currency_id: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeDayOfWeekRelation(BaseModel):
    # @Ignore()
    day_of_week: Optional[BokaMeraDayOfWeek] = None

    # @Required()
    day_of_week_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    service_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeBookingPriceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    price_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeCustomerRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None
    rebate_code_email_sent_to_customer: bool = False
    message_to_receiver: Optional[str] = None
    buyer: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DaysOfWeek(BaseModel):
    # @Required()
    day_of_week: Optional[str] = None

    # @Required()
    day_of_week_translation: Optional[str] = None

    day_of_week_active: Optional[bool] = None
    day_of_week_sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CalendarExport(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    exception_id: int = 0

    calendar_sync: Optional[bool] = None
    calendar_id: Optional[str] = None
    is_exception_deleted: Optional[bool] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLogEventType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLog(BaseModel):
    # @References(typeof(BookingLogEventType))
    event_type_id: int = 0

    event_type: Optional[BookingLogEventType] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    id: int = 0
    comments: Optional[str] = None
    user_id: Optional[str] = None
    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentDetails(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    qvickly_checkout_serialized: Optional[QvicklyCheckoutResponse] = None

    # @Ignore()
    payson2_checkout_serialized: Optional[Payson2CheckoutResponse] = None

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    internal_reference_id: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    # @Required()
    external_response_data: Optional[str] = None

    # @Required()
    external_response_reference: Optional[str] = None

    # @Required()
    payment_provider_id: int = 0

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingPrice(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    price_id: Optional[int] = None
    currency_info: Optional[Currency] = None
    # @Ignore()
    price_text: Optional[str] = None

    # @Ignore()
    applied_codes: Optional[List[AppliedRebateCodes]] = None

    # @Ignore()
    is_rebate: bool = False

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    quantity: int = 0

    price: Optional[float] = None
    vat: Optional[Decimal] = None
    category: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    invoiced: bool = False

    # @Required()
    occupies_spot: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingStatus(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    color: Optional[str] = None

    # @Required()
    icon: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedResource:
    id: int = 0
    name: Optional[str] = None
    color: Optional[str] = None
    image_url: Optional[str] = None
    email: Optional[str] = None
    mobile_phone: Optional[str] = None
    access_group: Optional[str] = None
    email_notification: bool = False
    sms_notification: bool = False
    email_reminder: bool = False
    sms_reminder: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedResourceType:
    # @ApiMember(Description="The resource type id")
    id: int = 0
    """
    The resource type id
    """


    # @ApiMember(Description="The resource type name")
    name: Optional[str] = None
    """
    The resource type name
    """


    # @ApiMember(Description="The resources inside resource type")
    resources: Optional[List[BookedResource]] = None
    """
    The resources inside resource type
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Booking(PayableEntity, IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated):
    # @Ignore()
    service: Optional[Service] = None

    # @Ignore()
    calendar_export: Optional[CalendarExport] = None

    # @Ignore()
    log: Optional[List[BookingLog]] = None

    # @Ignore()
    checkout_logs: Optional[List[PaymentDetails]] = None

    # @Ignore()
    prices: Optional[List[BookingPrice]] = None

    # @Ignore()
    status: Optional[BookingStatusEnum] = None

    # @Ignore()
    is_reserved: bool = False

    # @Ignore()
    status_name: Optional[str] = None

    currency_info: Optional[Currency] = None
    booking_status: Optional[BookingStatus] = None
    # @Ignore()
    total_price: Optional[float] = None

    # @Ignore()
    total_spots: Optional[int] = None

    # @Ignore()
    resources: Optional[IList[Resource]] = None

    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Ignore()
    booked_resources: Optional[IList[BookedResourceType]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    deterministic_id: Optional[str] = None

    # @Ignore()
    active: bool = False

    # @Ignore()
    last_time_to_un_book: Optional[datetime.datetime] = None

    # @Ignore()
    price_mappings: Optional[List[PriceMapping]] = None

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    id: int = 0
    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    service_id: int = 0

    # @Required()
    status_id: int = 0

    unbooked_on: Optional[datetime.datetime] = None
    unbooked_comments: Optional[str] = None
    booked_comments: Optional[str] = None
    # @Required()
    booked_by: Optional[str] = None

    un_booked_by: Optional[str] = None
    # @Required()
    send_sms_reminder: bool = False

    # @Required()
    send_email_reminder: bool = False

    # @Required()
    send_sms_confirmation: bool = False

    rebate_code: Optional[str] = None
    comments: Optional[str] = None
    ip_address: Optional[str] = None
    # @Required()
    number_of_booked_spots: int = 0

    comments_to_customer: Optional[str] = None
    payment_expiration: Optional[datetime.datetime] = None
    # @Required()
    send_email_confirmation: bool = False

    cancellation_code: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    rating_code: Optional[str] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None
    # @Required()
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))

    # @Required()
    to: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeTransaction(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    booking: Optional[Booking] = None

    # @Ignore()
    rebate_code: Optional[RebateCode] = None

    # @Ignore()
    customer: Optional[Customer] = None

    id: int = 0
    company_id: Optional[str] = None
    note: Optional[str] = None
    # @Required()
    rebate_code_id: int = 0

    # @Required()
    amount: float = 0.0

    # @Required()
    usage: int = 0

    booking_id: Optional[int] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCode(PayableEntity):
    # @References(typeof(RebateCodeType))
    rebate_code_type_id: int = 0

    rebate_code_type_info: Optional[RebateCodeType] = None
    # @References(typeof(RebateCodeStatus))
    rebate_code_status_id: int = 0

    rebate_code_status_info: Optional[RebateCodeStatus] = None
    # @Ignore()
    article: Optional[Article] = None

    # @Ignore()
    services: Optional[List[Service]] = None

    rebate_code_day_of_week_relation: Optional[List[RebateCodeDayOfWeekRelation]] = None
    rebate_code_service_relation: Optional[List[RebateCodeServiceRelation]] = None
    rebate_code_booking_price_relation: Optional[List[RebateCodeBookingPriceRelation]] = None
    rebate_code_customer_relation: Optional[List[RebateCodeCustomerRelation]] = None
    # @Ignore()
    services_names: Optional[str] = None

    # @Ignore()
    days_of_week: Optional[List[DaysOfWeek]] = None

    # @Ignore()
    rebate_code_status: Optional[RebateCodeStatus] = None

    # @Ignore()
    rebate_code_type: Optional[RebateCodeType] = None

    # @Ignore()
    transactions: Optional[List[RebateCodeTransaction]] = None

    # @Ignore()
    remaining_amount: Optional[float] = None

    # @Ignore()
    remaining_usage: Optional[int] = None

    # @Ignore()
    current_number_of_uses_per_customer: int = 0

    # @Ignore()
    is_specific_by_day_of_week: bool = False

    # @Ignore()
    active: bool = False

    # @Ignore()
    active_by_status: bool = False

    # @Ignore()
    rebate_code_currency_sign: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Ignore()
    payment_received: bool = False

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Required()
    valid_from: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    valid_to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    rebate_code_sign: Optional[str] = None

    # @Required()
    rebate_code_value: int = 0

    # @Required()
    max_number_of_uses: int = 0

    # @Required()
    max_number_of_uses_per_customer: int = 0

    # @Required()
    number_of_uses_used: int = 0

    personal_note: Optional[str] = None
    # @Required()
    created_by: Optional[str] = None

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated_by: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    from_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    to_time: datetime.timedelta = datetime.timedelta()

    modified_date: Optional[datetime.datetime] = None
    id: int = 0
    article_id: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServicePrice(BaseModel, IInterval):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Ignore()
    service: Optional[Service] = None

    # @Ignore()
    price_mappings: Optional[List[PriceMapping]] = None

    # @Ignore()
    is_time_specific: bool = False

    # @Ignore()
    is_days_of_week_specific: bool = False

    day_of_weeks: Optional[List[ServicePriceDayOfWeekRelation]] = None
    # @Ignore()
    price_before_rebate: Optional[float] = None

    # @Ignore()
    rebate_codes_applied: Optional[List[RebateCode]] = None

    # @Ignore()
    price_text: Optional[str] = None

    # @Ignore()
    overlapping_prices: Optional[List[ServicePrice]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    service_id: int = 0

    price: Optional[float] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    from_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    to_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    vat: Decimal = decimal.Decimal(0)

    category: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))

    # @Required()
    to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    calculation_type_id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingStatusOptions:
    id: int = 0
    name: Optional[str] = None
    description: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ScheduleView(BaseModel):
    # @Required()
    name: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WeekNumberSetting(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingTemplate(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    used_by_application: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CalendarType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class FreeSpotTexts(BaseModel):
    # @Required()
    text_singular: Optional[str] = None

    # @Required()
    text_plural: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingSettings(BaseModel):
    # @References(typeof(FreeSpotTexts))
    free_spot_texts_id: int = 0

    # @Ignore()
    send_email_confirmation: bool = False

    # @Ignore()
    schedule_view_options: Optional[List[ScheduleView]] = None

    # @Ignore()
    week_number_setting_options: Optional[List[WeekNumberSetting]] = None

    # @Ignore()
    booking_template_options: Optional[List[BookingTemplate]] = None

    # @Ignore()
    calendar_type_options: Optional[List[CalendarType]] = None

    # @Ignore()
    free_spot_text_options: Optional[List[FreeSpotTexts]] = None

    # @Ignore()
    booking_status_options: Optional[List[BookingStatusOptions]] = None

    free_spot_texts_info: Optional[FreeSpotTexts] = None
    # @Ignore()
    free_spots_text_singular: Optional[str] = None

    # @Ignore()
    free_spots_text_plural: Optional[str] = None

    # @Required()
    booking_status_id: int = 0

    # @Required()
    schedule_view_id: int = 0

    # @Required()
    booking_template_id: int = 0

    # @Required()
    calendar_type_id: int = 0

    # @Required()
    allow_booking_on_unbooked_times: bool = False

    # @Required()
    send_email_reminder: bool = False

    # @Required()
    send_sms_reminder: bool = False

    # @Required()
    send_sms_confirmation: bool = False

    # @Required()
    email_reminder_time: int = 0

    # @Required()
    sms_reminder_time: int = 0

    # @Required()
    max_active_bookings: int = 0

    # @Required()
    send_notifications: bool = False

    send_notifications_email: Optional[str] = None
    # @Required()
    enable_mobile_app: bool = False

    schedule_start_time: Optional[datetime.timedelta] = None
    schedule_end_time: Optional[datetime.timedelta] = None
    receipt_template: Optional[str] = None
    # @Required()
    schedule_time_slot_minutes: int = 0

    # @Required()
    show_free_times_left: bool = False

    # @Required()
    enable_i_cal_group_bookings: bool = False

    agreement_template: Optional[str] = None
    # @Required()
    schedule_show_time_exeptions: bool = False

    # @Required()
    enable_bookings_on_same_time: bool = False

    # @Required()
    show_week_number_setting_id: int = 0

    # @Required()
    enable_show_booked_times: bool = False

    # @Required()
    enable_send_follow_up_message: bool = False

    # @Required()
    follow_up_message_time: int = 0

    message_text: Optional[str] = None
    # @Required()
    schedule_group_resources: bool = False

    # @Required()
    book_spot_user_response_minutes: int = 0

    # @Required()
    is_book_spot_directly: bool = False

    # @Required()
    book_spot_directly_time_left_minutes: int = 0

    # @Required()
    send_email_notification_queue: bool = False

    # @Required()
    send_s_m_s_notification_queue: bool = False

    # @Required()
    scheduler_disable_horizontal_scrolling: bool = False

    # @Required()
    book_only_on_existing_customers: bool = False

    # @Required()
    auto_generate_unique_pin_code: bool = False

    # @Required()
    weighted_prices: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    auto_create_user_profile: bool = False

    show_multiple_resources_as_one: bool = False
    show_multi_day_as_time: bool = False
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdminPaymentOptions(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProviders(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    category: Optional[str] = None

    url: Optional[str] = None
    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentSetting(BaseModel):
    admin_payment_option: Optional[AdminPaymentOptions] = None
    # @Ignore()
    admin_payment_options: Optional[List[AdminPaymentOptions]] = None

    # @Ignore()
    payment_provider_options: Optional[List[PaymentProviders]] = None

    # @Required()
    enabled: bool = False

    # @Required()
    invoice_fee: int = 0

    # @Required()
    allow_credit_card_payment: bool = False

    # @Required()
    allow_invoice_payment: bool = False

    # @Required()
    allow_bank_payment: bool = False

    # @Required()
    guarantee_offered: bool = False

    # @Required()
    refund_on_cancel_booking: bool = False

    default_payment_option_id: Optional[int] = None
    # @Required()
    payment_provider_id: int = 0

    # @Required()
    send_payment_request_directly: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AverageRatingScore:
    average_score: float = 0.0
    score1_count: int = 0
    score2_count: int = 0
    score3_count: int = 0
    score4_count: int = 0
    score5_count: int = 0
    count: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Review(BaseModel):
    review_id: Optional[str] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    title: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    author: Optional[str] = None

    # @Required()
    status: int = 0

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    review_answer: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Rating(BaseModel):
    review_id: Optional[str] = None
    review: Optional[Review] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    rating_score: int = 0

    # @Required()
    status: int = 0

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Service(BaseModel, ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    resource_types: Optional[List[ResourceType]] = None

    # @Ignore()
    resources: Optional[List[Resource]] = None

    # @Ignore()
    total_price: Optional[TotalPriceInformation] = None

    # @Ignore()
    prices: Optional[List[ServicePrice]] = None

    # @Ignore()
    booking_status_options: Optional[List[BookingStatusOptions]] = None

    # @Ignore()
    is_group_booking: bool = False

    # @Ignore()
    is_multiple_resource: bool = False

    # @Ignore()
    settings: Optional[BookingSettings] = None

    # @Ignore()
    payment_setting: Optional[PaymentSetting] = None

    # @Ignore()
    booking_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    customer_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    schedules: Optional[IList[ISchedule]] = None

    # @Ignore()
    customer_active_bookings: Optional[IList[Booking]] = None

    # @Ignore()
    schedule_type: Optional[ScheduleType] = None

    # @Ignore()
    last_time_to_unbook_threshold: datetime.timedelta = datetime.timedelta()

    # @Ignore()
    last_time_to_book_threshold: datetime.timedelta = datetime.timedelta()

    # @Ignore()
    rating_score: Optional[AverageRatingScore] = None

    # @Ignore()
    ratings: Optional[List[Rating]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    group: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    sort_order: int = 0

    # @Required()
    pause_after_booking: int = 0

    # @Required()
    unbook_before_days: int = 0

    # @Required()
    unbook_before_hours: int = 0

    # @Required()
    unbook_before_minutes: int = 0

    # @Required()
    book_before_days: int = 0

    # @Required()
    book_before_hours: int = 0

    # @Required()
    book_before_minutes: int = 0

    duration: Optional[int] = None
    duration_type_id: int = 0
    min_duration: Optional[int] = None
    max_duration: Optional[int] = None
    duration_interval: Optional[int] = None
    total_spots: Optional[int] = None
    image_url: Optional[str] = None
    # @Required()
    schedule_type_id: int = 0

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    only_visible_by_admin: bool = False

    # @Required()
    min_number_of_spots_per_booking: int = 0

    # @Required()
    max_number_of_spots_per_booking: int = 0

    # @Required()
    min_number_of_resources_to_book: int = 0

    # @Required()
    max_number_of_resources_to_book: int = 0

    # @Required()
    is_payment_enabled: bool = False

    # @Required()
    max_payment_time: int = 0

    # @Required()
    lock_spots_to_booking: bool = False

    # @Required()
    enable_booking_queue: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    booking_status_id: int = 0

    # @Required()
    enable_code_lock_sync: bool = False

    # @Required()
    enable_customer_manual_payment: bool = False

    price_view_type_id: Optional[int] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    custom_field_config_id: int = 0

    # @Required()
    service_id: int = 0

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldConfig(BaseModel):
    # @Ignore()
    values: Optional[List[CustomFieldValue]] = None

    custom_field: Optional[CustomField] = None
    # @Ignore()
    reg_ex: Optional[RegEx] = None

    # @Ignore()
    services: Optional[List[Service]] = None

    custom_field_service_relation: Optional[List[CustomFieldServiceRelation]] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    group_id: Optional[int] = None
    # @Required()
    field_id: int = 0

    # @Required()
    icon_id: int = 0

    reg_ex_id: Optional[int] = None
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    datatype: Optional[str] = None

    # @Required()
    max_length: int = 0

    # @Required()
    is_public: bool = False

    # @Required()
    is_hidden: bool = False

    # @Required()
    is_mandatory: bool = False

    default_value: Optional[str] = None
    reg_ex_error_message: Optional[str] = None
    mandatory_error_message: Optional[str] = None
    width: Optional[int] = None
    # @Required()
    multiple_line_text: bool = False

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CodeLockSystem(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    supplier: Optional[str] = None

    logo_type: Optional[str] = None
    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CodeLockSetting(BaseModel):
    # @Ignore()
    code_lock_system_options: Optional[List[CodeLockSystem]] = None

    # @Required()
    active: bool = False

    # @Required()
    code_lock_systems_id: int = 0

    # @Required()
    valid_before_minutes: int = 0

    # @Required()
    valid_after_minutes: int = 0

    # @Required()
    delete_old_by_schedule: bool = False

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    send_email_notification: bool = False

    # @Required()
    send_s_m_s_notification: bool = False

    # @Required()
    email_notification_time: int = 0

    # @Required()
    sms_notification_time: int = 0

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LanguageResponse:
    id: Optional[str] = None
    name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanySetting(BaseModel):
    # @Ignore()
    languages: Optional[List[LanguageResponse]] = None

    # @Required()
    active: bool = False

    inactive_message: Optional[str] = None
    # @Required()
    searchable: bool = False

    ga_tracking_id: Optional[str] = None
    facebook_pixel_id: Optional[str] = None
    # @Required()
    multi_language: bool = False

    # @Required()
    enable_a_p_i_translation: bool = False

    # @Required()
    default_language: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    gtm_tracking_id: Optional[str] = None
    # @Required()
    show_on_market_place: bool = False

    google_ads_conversion_id: Optional[str] = None
    linkedin_tag_id: Optional[str] = None
    google_ads_conversion_label: Optional[str] = None
    send_customer_information_to_external_providers: bool = False
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetServiceLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetTimeLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetBookingLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetBookingMethods(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageWidgetSetting(BaseModel):
    # @Ignore()
    widget_service_layout_options: Optional[List[WidgetServiceLayouts]] = None

    # @Ignore()
    widget_time_layout_options: Optional[List[WidgetTimeLayouts]] = None

    # @Ignore()
    widget_booking_layout_options: Optional[List[WidgetBookingLayouts]] = None

    # @Ignore()
    widget_booking_method_options: Optional[List[WidgetBookingMethods]] = None

    # @Required()
    service_layout_id: int = 0

    # @Required()
    time_layout_id: int = 0

    # @Required()
    booking_layout_id: int = 0

    # @Required()
    primary_color: Optional[str] = None

    # @Required()
    show_service_image: bool = False

    # @Required()
    show_next_available_time: bool = False

    # @Required()
    show_end_time: bool = False

    booked_time_slot_text: Optional[str] = None
    # @Required()
    dark_theme: bool = False

    # @Required()
    show_rebate_code_field: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    enable_create_account: bool = False

    # @Required()
    enable_login: bool = False

    # @Required()
    enable_direct_booking: bool = False

    # @Required()
    enable_facebook_login: bool = False

    # @Required()
    show_subscribe_to_newsletter: bool = False

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageTemplate(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    image_url: Optional[str] = None
    # @Required()
    premium: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HeroSectionStyle(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageSetting(BaseModel, ICompany):
    # @Ignore()
    homepage_template_options: Optional[List[HomepageTemplate]] = None

    # @Ignore()
    homepage_hero_section_style_options: Optional[List[HeroSectionStyle]] = None

    # @Ignore()
    company_id: Optional[str] = None

    welcome_page_heading: Optional[str] = None
    welcome_page_body: Optional[str] = None
    about_us_page_heading: Optional[str] = None
    about_us_page_body: Optional[str] = None
    # @Required()
    home_page_template_id: int = 0

    image_url: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    homepage_heading: Optional[str] = None
    # @Required()
    hero_section_style_id: int = 0

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    show_rating: bool = False

    # @Required()
    enable_homepage: bool = False

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicenseTypeItem(BaseModel):
    # @Ignore()
    name: Optional[str] = None

    # @Ignore()
    license_type: Optional[LicenseType] = None

    # @Required()
    license_types_id: int = 0

    # @Required()
    license_items_id: int = 0

    # @Required()
    number_of_items: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Country(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Required()
    name: Optional[str] = None

    culture: Optional[str] = None
    time_zone: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicensePrice(BaseModel):
    # @Ignore()
    country: Optional[Country] = None

    # @Ignore()
    monthly_payment: bool = False

    # @Required()
    license_type_id: int = 0

    # @Required()
    country_id: Optional[str] = None

    # @Required()
    price: int = 0

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicenseType(BaseModel):
    # @Ignore()
    license_items: Optional[IList[LicenseTypeItem]] = None

    # @Ignore()
    prices: Optional[IList[LicensePrice]] = None

    # @Ignore()
    period_of_notice_days: int = 0

    # @Ignore()
    next_license_option: Optional[LicenseType] = None

    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    extra_license_option: bool = False

    modified_date: Optional[datetime.datetime] = None
    active: bool = False
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class License(BaseModel):
    type: Optional[LicenseType] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    type_id: int = 0

    # @Required()
    valid_from: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    valid_to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    active: bool = False

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    meta_data: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyCategory(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    header: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    image_url: Optional[str] = None
    # @Required()
    active: bool = False

    sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Company(BaseModel):
    # @Ignore()
    status: Optional[CompanyStatus] = None

    # @Ignore()
    active: bool = False

    # @Ignore()
    customer_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    booking_agreements: Optional[str] = None

    # @Ignore()
    booking_settings: Optional[BookingSettings] = None

    # @Ignore()
    company_type: Optional[CompanyType] = None

    # @Ignore()
    code_lock_settings: Optional[CodeLockSetting] = None

    # @Ignore()
    payment_settings: Optional[PaymentSetting] = None

    # @Ignore()
    settings: Optional[CompanySetting] = None

    # @Ignore()
    widget_settings: Optional[HomepageWidgetSetting] = None

    # @Ignore()
    homepage_settings: Optional[HomepageSetting] = None

    # @Ignore()
    rating_score: Optional[AverageRatingScore] = None

    # @Ignore()
    ratings: Optional[List[Rating]] = None

    # @Ignore()
    distance: Optional[float] = None

    # @Ignore()
    licenses: Optional[List[License]] = None

    # @Ignore()
    active_licenses: Optional[List[License]] = None

    # @Ignore()
    current_license: Optional[License] = None

    # @Ignore()
    is_free_account: bool = False

    # @Ignore()
    default_language: Optional[CultureInfo] = None

    category: Optional[CompanyCategory] = None
    # @Ignore()
    lat: float = 0.0

    # @Ignore()
    lon: float = 0.0

    # @Ignore()
    is_favorite: bool = False

    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Required()
    organisation_number: Optional[str] = None

    # @Required()
    status_id: int = 0

    # @Required()
    category_id: int = 0

    # @Required()
    site_path: Optional[str] = None

    # @Required()
    name: Optional[str] = None

    street1: Optional[str] = None
    street2: Optional[str] = None
    zip_code: Optional[str] = None
    city: Optional[str] = None
    opening_hours: Optional[str] = None
    fax_number: Optional[str] = None
    # @Required()
    email: Optional[str] = None

    phone: Optional[str] = None
    details: Optional[str] = None
    logo_type: Optional[str] = None
    # @Required()
    approved_by_admin: bool = False

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    ip_address: Optional[str] = None
    homepage: Optional[str] = None
    domain_name: Optional[str] = None
    # @Required()
    country_id: Optional[str] = None

    # @Required()
    company_owner_id: int = 0

    type_id: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SuperAdminCompanyQuery(QueryDb2[Company, CompanyQueryResponse]):
    # @ApiMember(Description="Id for a specific company you want to retrieve.", ParameterType="query")
    id: Optional[str] = None
    """
    Id for a specific company you want to retrieve.
    """


    # @ApiMember(Description="Include companies in these categories.", ParameterType="query")
    categories: Optional[List[int]] = None
    """
    Include companies in these categories.
    """


    # @ApiMember(Description="The site path url for the company homepage", ParameterType="query")
    site_path: Optional[str] = None
    """
    The site path url for the company homepage
    """


    # @ApiMember(Description="Search active companies. You're only allowed to search active companies.", ParameterType="query")
    active: bool = False
    """
    Search active companies. You're only allowed to search active companies.
    """


    # @ApiMember(Description="Maxium distance from the coordinates to be included in the result.", ParameterType="query")
    distance: Optional[float] = None
    """
    Maxium distance from the coordinates to be included in the result.
    """


    # @ApiMember(Description="Will search by any company name or city that contains the search string provided.", ParameterType="query")
    search: Optional[str] = None
    """
    Will search by any company name or city that contains the search string provided.
    """


    # @ApiMember(Description="Will search by any company owner id. Default is 1 = BokaMera.", ParameterType="query")
    company_owner_id: Optional[int] = None
    """
    Will search by any company owner id. Default is 1 = BokaMera.
    """


    # @ApiMember(DataType="boolean", Description="If you want to get the booking agreements loaded into the field BookingAgreements", ParameterType="query")
    include_booking_agreements: bool = False
    """
    If you want to get the booking agreements loaded into the field BookingAgreements
    """


    # @ApiMember(DataType="boolean", Description="If you want to get the booking settings loaded into the field BookingSettings", ParameterType="query")
    include_booking_settings: bool = False
    """
    If you want to get the booking settings loaded into the field BookingSettings
    """


    # @ApiMember(DataType="boolean", Description="If you want to get the system settings loaded into the field SystemSettings", ParameterType="query")
    include_system_settings: bool = False
    """
    If you want to get the system settings loaded into the field SystemSettings
    """


    # @ApiMember(DataType="boolean", Description="If you want to get the widget settings loaded into the field WidgetSettings", ParameterType="query")
    include_widget_settings: bool = False
    """
    If you want to get the widget settings loaded into the field WidgetSettings
    """


    # @ApiMember(DataType="boolean", Description="If you want to get the homepage settings loaded into the field HomepageSettings", ParameterType="query")
    include_homepage_settings: bool = False
    """
    If you want to get the homepage settings loaded into the field HomepageSettings
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields for the customers", ParameterType="query")
    include_customer_custom_fields: bool = False
    """
    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", ParameterType="query")
    include_custom_fields: bool = False
    """
    If you want to include the connected custom fields
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the rating reviews", ParameterType="query")
    include_rating_reviews: bool = False
    """
    If you want to include the rating reviews
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the rating summary", ParameterType="query")
    include_rating_summary: bool = False
    """
    If you want to include the rating summary
    """


    # @ApiMember(Description="Company user email", ParameterType="query")
    company_user_email: Optional[str] = None
    """
    Company user email
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Currency(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    currency_sign: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


TCreatedCheckoutResponse = TypeVar('TCreatedCheckoutResponse')
TCheckoutResponse = TypeVar('TCheckoutResponse')
TPaymentResponse = TypeVar('TPaymentResponse')


class IBokameraPaymentManager(Generic[TCreatedCheckoutResponse, TCheckoutResponse, TPaymentResponse]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyArticle:
    artnr: Optional[str] = None
    title: Optional[str] = None
    quantity: int = 0
    aprice: int = 0
    tax: int = 0
    discount: int = 0
    withouttax: int = 0
    taxrate: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Customer:
    city: Optional[str] = None
    country_code: Optional[str] = None
    identity_number: Optional[str] = None
    email: Optional[str] = None
    first_name: Optional[str] = None
    last_name: Optional[str] = None
    phone: Optional[str] = None
    postal_code: Optional[str] = None
    street: Optional[str] = None
    reference: Optional[str] = None
    type: Optional[CustomerType] = None


TCategoryName = TypeVar('TCategoryName')


class ILogger(Generic[TCategoryName], ILogger):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AccessKeyTypeResponse:
    id: int = 0
    key_type: Optional[str] = None
    description: Optional[str] = None


AccessKeyTypeResponse = TypeVar('AccessKeyTypeResponse')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryResponse(Generic[AccessKeyTypeResponse]):
    offset: int = 0
    total: int = 0
    results: Optional[List[AccessKeyTypeResponse]] = None
    meta: Optional[Dict[str, str]] = None
    response_status: Optional[ResponseStatus] = None

Python SuperAdminCompanyQuery DTOs

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

HTTP + XML

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

GET /superadmin/companies HTTP/1.1 
Host: api.bokamera.se 
Accept: application/xml
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<QueryResponseOfCompanyQueryResponseWg5EthtI xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Offset>0</Offset>
  <Total>0</Total>
  <Results xmlns:d2p1="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos">
    <d2p1:CompanyQueryResponse>
      <d2p1:Active>false</d2p1:Active>
      <d2p1:BookingAgreements>String</d2p1:BookingAgreements>
      <d2p1:BookingSettings>
        <d2p1:BookOnlyOnExistingCustomers>false</d2p1:BookOnlyOnExistingCustomers>
        <d2p1:BookingAgreement>String</d2p1:BookingAgreement>
        <d2p1:BookingReceiptMessage>String</d2p1:BookingReceiptMessage>
        <d2p1:EnableMobileApp>false</d2p1:EnableMobileApp>
        <d2p1:EnableShowBookedTimes>false</d2p1:EnableShowBookedTimes>
        <d2p1:PaymentEnabled>false</d2p1:PaymentEnabled>
        <d2p1:PaymentProviderId>0</d2p1:PaymentProviderId>
        <d2p1:ShowBookedTimes>false</d2p1:ShowBookedTimes>
        <d2p1:ShowFreeTimesLeft>false</d2p1:ShowFreeTimesLeft>
        <d2p1:WeekNumberSetting>0</d2p1:WeekNumberSetting>
      </d2p1:BookingSettings>
      <d2p1:Category>String</d2p1:Category>
      <d2p1:CategoryId>0</d2p1:CategoryId>
      <d2p1:City>String</d2p1:City>
      <d2p1:CodeLockSystem>Sample</d2p1:CodeLockSystem>
      <d2p1:CountryId>String</d2p1:CountryId>
      <d2p1:CoverImage i:nil="true" />
      <d2p1:Created>0001-01-01T00:00:00</d2p1:Created>
      <d2p1:CustomerCustomFields>
        <d2p1:CustomFieldConfigData>
          <d2p1:DataType>String</d2p1:DataType>
          <d2p1:DefaultValue>String</d2p1:DefaultValue>
          <d2p1:Description>String</d2p1:Description>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:IsMandatory>false</d2p1:IsMandatory>
          <d2p1:MandatoryErrorMessage>String</d2p1:MandatoryErrorMessage>
          <d2p1:MaxLength>0</d2p1:MaxLength>
          <d2p1:MultipleLineText>false</d2p1:MultipleLineText>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:RegEx>String</d2p1:RegEx>
          <d2p1:RegExErrorMessage>String</d2p1:RegExErrorMessage>
          <d2p1:Values>
            <d2p1:CustomFieldValueResponse>
              <d2p1:Value>String</d2p1:Value>
            </d2p1:CustomFieldValueResponse>
          </d2p1:Values>
          <d2p1:Width>0</d2p1:Width>
        </d2p1:CustomFieldConfigData>
      </d2p1:CustomerCustomFields>
      <d2p1:Details>String</d2p1:Details>
      <d2p1:Distance>0</d2p1:Distance>
      <d2p1:Email>String</d2p1:Email>
      <d2p1:Homepage>String</d2p1:Homepage>
      <d2p1:HomepageSettings>
        <d2p1:AboutUsPageBody>String</d2p1:AboutUsPageBody>
        <d2p1:AboutUsPageHeading>String</d2p1:AboutUsPageHeading>
        <d2p1:CoverImage i:nil="true" />
        <d2p1:EnableHomepage>false</d2p1:EnableHomepage>
        <d2p1:HeroSectionStyleId>0</d2p1:HeroSectionStyleId>
        <d2p1:HomePageTemplateId>0</d2p1:HomePageTemplateId>
        <d2p1:HomepageHeading>String</d2p1:HomepageHeading>
        <d2p1:ImageUrl i:nil="true" />
        <d2p1:ShowRating>false</d2p1:ShowRating>
        <d2p1:WelcomePageBody>String</d2p1:WelcomePageBody>
        <d2p1:WelcomePageHeading>String</d2p1:WelcomePageHeading>
      </d2p1:HomepageSettings>
      <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id>
      <d2p1:IsFavorite>false</d2p1:IsFavorite>
      <d2p1:IsFreeAccount>false</d2p1:IsFreeAccount>
      <d2p1:Latitude>String</d2p1:Latitude>
      <d2p1:LogoType i:nil="true" />
      <d2p1:Longitude>String</d2p1:Longitude>
      <d2p1:Name>String</d2p1:Name>
      <d2p1:OrganisationNumber>String</d2p1:OrganisationNumber>
      <d2p1:Phone>String</d2p1:Phone>
      <d2p1:RatingSummary>
        <d2p1:AverageScore>0</d2p1:AverageScore>
        <d2p1:Count>0</d2p1:Count>
        <d2p1:RaingScore4Count>0</d2p1:RaingScore4Count>
        <d2p1:RatingScore1Count>0</d2p1:RatingScore1Count>
        <d2p1:RatingScore2Count>0</d2p1:RatingScore2Count>
        <d2p1:RatingScore3Count>0</d2p1:RatingScore3Count>
        <d2p1:RatingScore5Count>0</d2p1:RatingScore5Count>
      </d2p1:RatingSummary>
      <d2p1:ResponseStatus>
        <ErrorCode>String</ErrorCode>
        <Message>String</Message>
        <StackTrace>String</StackTrace>
        <Errors>
          <ResponseError>
            <ErrorCode>String</ErrorCode>
            <FieldName>String</FieldName>
            <Message>String</Message>
            <Meta xmlns:d7p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
              <d7p1:KeyValueOfstringstring>
                <d7p1:Key>String</d7p1:Key>
                <d7p1:Value>String</d7p1:Value>
              </d7p1:KeyValueOfstringstring>
            </Meta>
          </ResponseError>
        </Errors>
        <Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:KeyValueOfstringstring>
            <d5p1:Key>String</d5p1:Key>
            <d5p1:Value>String</d5p1:Value>
          </d5p1:KeyValueOfstringstring>
        </Meta>
      </d2p1:ResponseStatus>
      <d2p1:Reviews>
        <d2p1:RatingReviewResponse>
          <d2p1:Author>String</d2p1:Author>
          <d2p1:Created>0001-01-01T00:00:00</d2p1:Created>
          <d2p1:Description>String</d2p1:Description>
          <d2p1:RatingScore>0</d2p1:RatingScore>
          <d2p1:ReviewAnswer>String</d2p1:ReviewAnswer>
          <d2p1:Title>String</d2p1:Title>
        </d2p1:RatingReviewResponse>
      </d2p1:Reviews>
      <d2p1:SitePath>String</d2p1:SitePath>
      <d2p1:StatusId>0</d2p1:StatusId>
      <d2p1:Street1>String</d2p1:Street1>
      <d2p1:Street2>String</d2p1:Street2>
      <d2p1:SystemSettings>
        <d2p1:Active>false</d2p1:Active>
        <d2p1:DefaultLanguage>String</d2p1:DefaultLanguage>
        <d2p1:EnableAPITranslation>false</d2p1:EnableAPITranslation>
        <d2p1:FacebookPixelId>String</d2p1:FacebookPixelId>
        <d2p1:GATrackingId>String</d2p1:GATrackingId>
        <d2p1:GTMTrackingId>String</d2p1:GTMTrackingId>
        <d2p1:GoogleAdsConversionId>String</d2p1:GoogleAdsConversionId>
        <d2p1:GoogleAdsConversionLabel>String</d2p1:GoogleAdsConversionLabel>
        <d2p1:InactiveMessage>String</d2p1:InactiveMessage>
        <d2p1:LinkedinTagId>String</d2p1:LinkedinTagId>
        <d2p1:MultiLanguage>false</d2p1:MultiLanguage>
        <d2p1:Searchable>false</d2p1:Searchable>
        <d2p1:SendCustomerInformationToExternalProviders>false</d2p1:SendCustomerInformationToExternalProviders>
        <d2p1:ShowOnMarketplace>false</d2p1:ShowOnMarketplace>
      </d2p1:SystemSettings>
      <d2p1:TypeId>0</d2p1:TypeId>
      <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated>
      <d2p1:WidgetSettings>
        <d2p1:BookedTimeSlotText>String</d2p1:BookedTimeSlotText>
        <d2p1:BookingLayoutId>0</d2p1:BookingLayoutId>
        <d2p1:DarkTheme>false</d2p1:DarkTheme>
        <d2p1:PrimaryColor>String</d2p1:PrimaryColor>
        <d2p1:ServiceLayoutId>0</d2p1:ServiceLayoutId>
        <d2p1:ShowEndTime>false</d2p1:ShowEndTime>
        <d2p1:ShowNextAvailableTime>false</d2p1:ShowNextAvailableTime>
        <d2p1:ShowRebateCodeField>false</d2p1:ShowRebateCodeField>
        <d2p1:ShowServiceImage>false</d2p1:ShowServiceImage>
        <d2p1:ShowSubscribeToNewsletter>false</d2p1:ShowSubscribeToNewsletter>
        <d2p1:TimeLayoutId>0</d2p1:TimeLayoutId>
      </d2p1:WidgetSettings>
      <d2p1:ZipCode>String</d2p1:ZipCode>
    </d2p1:CompanyQueryResponse>
  </Results>
  <Meta xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringstring>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value>String</d2p1:Value>
    </d2p1:KeyValueOfstringstring>
  </Meta>
  <ResponseStatus>
    <ErrorCode>String</ErrorCode>
    <Message>String</Message>
    <StackTrace>String</StackTrace>
    <Errors>
      <ResponseError>
        <ErrorCode>String</ErrorCode>
        <FieldName>String</FieldName>
        <Message>String</Message>
        <Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:KeyValueOfstringstring>
            <d5p1:Key>String</d5p1:Key>
            <d5p1:Value>String</d5p1:Value>
          </d5p1:KeyValueOfstringstring>
        </Meta>
      </ResponseError>
    </Errors>
    <Meta xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringstring>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>String</d3p1:Value>
      </d3p1:KeyValueOfstringstring>
    </Meta>
  </ResponseStatus>
</QueryResponseOfCompanyQueryResponseWg5EthtI>