GET | /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 CompanyQuery(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="Search nearby this latitude coordinate.", ParameterType="query")
latitude: Optional[float] = None
"""
Search nearby this latitude coordinate.
"""
# @ApiMember(Description="Search nearby this longitude coordinate.", ParameterType="query")
longitude: Optional[float] = None
"""
Search nearby this longitude coordinate.
"""
# @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="The organisation number for the company", ParameterType="query")
organisation_number: Optional[str] = None
"""
The organisation number for the company
"""
# @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 code lock system used by the company", ParameterType="query")
include_code_lock_system: bool = False
"""
If you want to get the code lock system used by the company
"""
# @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
"""
response_status: Optional[ResponseStatus] = None
@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
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /companies HTTP/1.1 Host: api.bokamera.se Accept: text/jsv
HTTP/1.1 200 OK Content-Type: text/jsv Content-Length: length { Offset: 0, Total: 0, Results: [ { Name: String, OrganisationNumber: String, TypeId: 0, Details: String, CategoryId: 0, Category: String, Street1: String, Street2: String, ZipCode: String, City: String, CountryId: String, Longitude: String, Latitude: String, Distance: 0, Phone: String, Email: String, Homepage: String, SitePath: String, Active: False, CodeLockSystem: Sample, IsFreeAccount: False, Updated: "0001-01-01T00:00:00", Created: "0001-01-01T00:00:00", StatusId: 0, IsFavorite: False, BookingAgreements: String, BookingSettings: { EnableMobileApp: False, BookingReceiptMessage: String, ShowFreeTimesLeft: False, EnableShowBookedTimes: False, BookingAgreement: String, WeekNumberSetting: 0, ShowBookedTimes: False, PaymentProviderId: 0, BookOnlyOnExistingCustomers: False, PaymentEnabled: False }, SystemSettings: { Active: False, InactiveMessage: String, Searchable: False, GATrackingId: String, GoogleAdsConversionId: String, LinkedinTagId: String, GoogleAdsConversionLabel: String, GTMTrackingId: String, FacebookPixelId: String, MultiLanguage: False, ShowOnMarketplace: False, EnableAPITranslation: False, DefaultLanguage: String, SendCustomerInformationToExternalProviders: False }, WidgetSettings: { ServiceLayoutId: 0, TimeLayoutId: 0, BookingLayoutId: 0, PrimaryColor: String, ShowServiceImage: False, ShowRebateCodeField: False, ShowNextAvailableTime: False, ShowEndTime: False, BookedTimeSlotText: String, DarkTheme: False, ShowSubscribeToNewsletter: False }, HomepageSettings: { HomepageHeading: String, WelcomePageHeading: String, WelcomePageBody: String, AboutUsPageHeading: String, AboutUsPageBody: String, ShowRating: False, HomePageTemplateId: 0, HeroSectionStyleId: 0, EnableHomepage: False }, RatingSummary: { AverageScore: 0, RatingScore1Count: 0, RatingScore2Count: 0, RatingScore3Count: 0, RaingScore4Count: 0, RatingScore5Count: 0, Count: 0 }, Reviews: [ { Title: String, Description: String, RatingScore: 0, Author: String, ReviewAnswer: String } ], CustomerCustomFields: [ { "Id": 0, "Name": "String", "Description": "String", "Width": 0, "DataType": "String", "DefaultValue": "String", "IsMandatory": false, "MandatoryErrorMessage": "String", "MaxLength": 0, "MultipleLineText": false, "RegEx": "String", "RegExErrorMessage": "String", "Values": [ { "Value": "String" } ] } ], ResponseStatus: { ErrorCode: String, Message: String, StackTrace: String, Errors: [ { ErrorCode: String, FieldName: String, Message: String, Meta: { String: String } } ], Meta: { String: String } } } ], Meta: { String: String }, ResponseStatus: { ErrorCode: String, Message: String, StackTrace: String, Errors: [ { ErrorCode: String, FieldName: String, Message: String, Meta: { String: String } } ], Meta: { String: String } } }