GET | /bookings/grouped | Find booked events for currently logged in user grouped by booking from date | This service is used to get bookings for the current user, the result will grouped by the bookings fromm date and paged if the query returns a to large set of values. |
---|
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 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 BookingStatusQueryResponse:
id: int = 0
name: Optional[str] = None
description: Optional[str] = None
icon: Optional[str] = None
color: Optional[str] = None
@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 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 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 BookedCompany:
id: Optional[str] = None
name: Optional[str] = None
logo_type: Optional[str] = None
category: 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
phone: Optional[str] = None
email: Optional[str] = None
home_page: Optional[str] = None
site_path: Optional[str] = None
is_favorite: bool = False
payment_provider_id: Optional[int] = None
@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
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedQuantity:
# @ApiMember(Description="The quantity Id")
id: int = 0
"""
The quantity Id
"""
# @ApiMember(Description="The quantity for booked on this price category")
quantity: int = 0
"""
The quantity for booked on this price category
"""
# @ApiMember(Description="The price")
price: Optional[float] = None
"""
The price
"""
# @ApiMember(Description="The price bofore rebate codes")
price_before_rebate: Optional[float] = None
"""
The price bofore rebate codes
"""
# @ApiMember(Description="The price currency")
currency_id: Optional[str] = None
"""
The price currency
"""
# @ApiMember(Description="The price sign")
price_sign: Optional[str] = None
"""
The price sign
"""
# @ApiMember(Description="The price category")
category: Optional[str] = None
"""
The price category
"""
# @ApiMember(Description="The price VAT in percent")
vat: Optional[Decimal] = None
"""
The price VAT in percent
"""
# @ApiMember(Description="The price text to display")
price_text: Optional[str] = None
"""
The price text to display
"""
# @ApiMember(Description="If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information.")
occupies_spot: bool = False
"""
If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GroupBookingSettings:
active: bool = False
min: int = 0
max: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MultipleResourceSettings:
active: bool = False
min: int = 0
max: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServiceInfoResponse:
id: int = 0
name: Optional[str] = None
description: Optional[str] = None
image_url: Optional[str] = None
length_in_minutes: Optional[int] = None
max_number_of_spots_per_booking: int = 0
group_booking: Optional[GroupBookingSettings] = None
multiple_resource: Optional[MultipleResourceSettings] = None
is_group_booking: bool = False
is_payment_enabled: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLogEventTypeResponse:
# @ApiMember(Description="The event type id")
id: int = 0
"""
The event type id
"""
# @ApiMember(Description="The event type name")
name: Optional[str] = None
"""
The event type name
"""
# @ApiMember(Description="The event type description")
description: Optional[str] = None
"""
The event type description
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLogQueryResponse:
# @ApiMember(Description="The booking log id")
id: int = 0
"""
The booking log id
"""
# @ApiMember(Description="The booking id")
booking_id: int = 0
"""
The booking id
"""
# @ApiMember(Description="The type of event")
event_type_id: int = 0
"""
The type of event
"""
# @ApiMember(Description="The type of event")
event_type: Optional[BookingLogEventTypeResponse] = None
"""
The type of event
"""
# @ApiMember(Description="Comments that could be added to the event log item")
comments: Optional[str] = None
"""
Comments that could be added to the event log item
"""
# @ApiMember(Description="The user created the event")
user_name: Optional[str] = None
"""
The user created the event
"""
# @ApiMember(Description="Then date when the event occured")
created: datetime.datetime = datetime.datetime(1, 1, 1)
"""
Then date when the event occured
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CurrencyInfoResponse:
# @ApiMember(Description="The currency id")
id: Optional[str] = None
"""
The currency id
"""
# @ApiMember(Description="The currency id")
name: Optional[str] = None
"""
The currency id
"""
# @ApiMember(Description="The currency id")
currency_sign: Optional[str] = None
"""
The currency id
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingPaymentLogQueryResponse:
# @ApiMember(Description="The booking payment log id")
id: int = 0
"""
The booking payment log id
"""
# @ApiMember(Description="The booking id")
booking_id: int = 0
"""
The booking id
"""
# @ApiMember(Description="The payment reference id")
payment_reference_id: Optional[str] = None
"""
The payment reference id
"""
# @ApiMember(Description="The payment order item reference id")
order_item_reference_id: Optional[str] = None
"""
The payment order item reference id
"""
# @ApiMember(Description="The payment reference id")
payment_provider_id: Optional[int] = None
"""
The payment reference id
"""
# @ApiMember(Description="The payment amount")
amount: float = 0.0
"""
The payment amount
"""
# @ApiMember(Description="The payment VAT in percent")
vat: Decimal = decimal.Decimal(0)
"""
The payment VAT in percent
"""
# @ApiMember(Description="The payment amount that is credited")
amount_credited: float = 0.0
"""
The payment amount that is credited
"""
# @ApiMember(Description="The payment currency id")
currency_id: Optional[str] = None
"""
The payment currency id
"""
# @ApiMember(Description="The payment currency info")
currency_info: Optional[CurrencyInfoResponse] = None
"""
The payment currency info
"""
# @ApiMember(Description="Comments that could be added to the event log item")
comments: Optional[str] = None
"""
Comments that could be added to the event log item
"""
# @ApiMember(Description="The date when the payment items was created")
created: datetime.datetime = datetime.datetime(1, 1, 1)
"""
The date when the payment items was created
"""
# @ApiMember(Description="The date when the payment items was update")
updated: datetime.datetime = datetime.datetime(1, 1, 1)
"""
The date when the payment items was update
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingCheckoutQueryResponse:
# @ApiMember(Description="The checkout id")
id: Optional[str] = None
"""
The checkout id
"""
# @ApiMember(Description="The booking id")
booking_id: int = 0
"""
The booking id
"""
# @ApiMember(Description="The purchase id")
purchase_id: Optional[int] = None
"""
The purchase id
"""
# @ApiMember(Description="The payment checkout expiration datetime")
expiration_time: Optional[datetime.datetime] = None
"""
The payment checkout expiration datetime
"""
# @ApiMember(Description="The payment snippet code")
snippet: Optional[str] = None
"""
The payment snippet code
"""
# @ApiMember(Description="The payment status")
status: Optional[str] = None
"""
The payment status
"""
# @ApiMember(Description="Log message")
message: Optional[str] = None
"""
Log message
"""
# @ApiMember(Description="When the checkout log item was created")
created: datetime.datetime = datetime.datetime(1, 1, 1)
"""
When the checkout log item was created
"""
# @ApiMember(Description="When the checkout log item was updated")
updated: datetime.datetime = datetime.datetime(1, 1, 1)
"""
When the checkout log item was updated
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExternalReferenceResponse:
company_id: Optional[str] = None
id: Optional[str] = None
owner_id: Optional[str] = None
reference_type: Optional[str] = None
external_data: Optional[str] = None
created_by: Optional[str] = None
updated: datetime.datetime = datetime.datetime(1, 1, 1)
created: datetime.datetime = datetime.datetime(1, 1, 1)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingCalendarExportStatus:
calendar_id: Optional[str] = None
booking_id: int = 0
synced: Optional[bool] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingQueryResponse:
id: int = 0
company_id: Optional[str] = None
from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))
to: datetime.datetime = datetime.datetime(1, 1, 1)
status: Optional[BookingStatusEnum] = None
status_id: int = 0
status_name: Optional[str] = None
status_info: Optional[BookingStatusQueryResponse] = None
send_email_reminder: bool = False
send_sms_reminder: bool = False
send_sms_confirmation: bool = False
send_email_confirmation: bool = False
last_time_to_un_book: Optional[datetime.datetime] = None
custom_fields: Optional[List[CustomFieldConfigData]] = None
custom_field_values: Optional[List[CustomFieldDataResponse]] = None
booked_resource_types: Optional[List[BookedResourceType]] = None
company: Optional[BookedCompany] = None
customer: Optional[BookedCustomer] = None
quantities: Optional[List[BookedQuantity]] = None
service: Optional[ServiceInfoResponse] = None
payment_expiration: Optional[datetime.datetime] = None
log: Optional[List[BookingLogQueryResponse]] = None
payment_log: Optional[List[BookingPaymentLogQueryResponse]] = None
checkout_log: Optional[List[BookingCheckoutQueryResponse]] = None
external_reference: Optional[List[ExternalReferenceResponse]] = None
response_status: Optional[ResponseStatus] = None
calendar_export_status: Optional[BookingCalendarExportStatus] = None
length_in_minutes: Optional[int] = None
booked_by: Optional[str] = None
booked_comments: Optional[str] = None
unbooked_comments: Optional[str] = None
comments_to_customer: Optional[str] = None
created_date: datetime.datetime = datetime.datetime(1, 1, 1)
updated_date: datetime.datetime = datetime.datetime(1, 1, 1)
unbooked_on: Optional[datetime.datetime] = None
cancellation_code: Optional[str] = None
rating_code: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GroupedBookingQueryResponse:
company_id: Optional[str] = None
date: datetime.datetime = datetime.datetime(1, 1, 1)
bookings: Optional[List[BookingQueryResponse]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BaseModel:
pass
@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 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 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 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
@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
@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 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 RebateCode(BaseModel):
# @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[RebateCodeType] = 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()
days_of_week: Optional[List[DaysOfWeek]] = None
# @Ignore()
customers: Optional[List[Customer]] = None
# @Ignore()
rebate_code_status: Optional[RebateCodeStatus] = None
# @Ignore()
rebate_code_type: Optional[RebateCodeType] = None
# @Ignore()
current_number_of_uses_per_customer: int = 0
# @Ignore()
is_specific_by_day_of_week: bool = False
# @Ignore()
active: bool = False
company_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: 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
@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()
is_weighted: bool = False
# @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()
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 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
class CustomerType(str, Enum):
PERSON = 'Person'
BUSINESS = 'Business'
@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
@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 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()
booking_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 QvicklyCheckoutResponse:
number: int = 0
status: Optional[str] = None
order_id: Optional[str] = None
url: Optional[str] = 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 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
@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()
booking_id: int = 0
# @Required()
external_response_data: Optional[str] = None
# @Required()
external_response_reference: Optional[str] = None
# @Required()
payment_provider_id: int = 0
# @Required()
is_payment: bool = False
# @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
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 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
# @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()
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
# @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
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 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 Booking(BaseModel, IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated):
# @Ignore()
customer: Optional[Customer] = None
# @Ignore()
service: Optional[Service] = None
# @Ignore()
calendar_export: Optional[CalendarExport] = None
# @Ignore()
log: Optional[List[BookingLog]] = None
# @Ignore()
payment_log: Optional[List[PaymentLog]] = 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
# @Ignore()
company: Optional[Company] = None
# @References(typeof(Currency))
currency_id: 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()
active: bool = False
# @Ignore()
last_time_to_un_book: Optional[datetime.datetime] = None
# @Ignore()
price_mappings: Optional[List[PriceMapping]] = None
# @Required()
updated_date: datetime.datetime = datetime.datetime(1, 1, 1)
# @Required()
created_date: datetime.datetime = datetime.datetime(1, 1, 1)
# @Required()
company_id: Optional[str] = None
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
price_vat: Optional[Decimal] = 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)
# @ValidateRequest(Validator="IsAuthenticated")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GroupedBookingQuery(QueryDb2[Booking, GroupedBookingQueryResponse]):
# @ApiMember(Description="Query for specific Booked Resources, default is all resources", ParameterType="query")
booking_resource_relation_resource_ids: Optional[List[int]] = None
"""
Query for specific Booked Resources, default is all resources
"""
# @ApiMember(Description="Query for specific Booked Resource types, default is all resource types", ParameterType="query")
booking_resource_relation_resource_type_ids: Optional[List[int]] = None
"""
Query for specific Booked Resource types, default is all resource types
"""
# @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
company_id: Optional[str] = None
"""
The company id, if empty will use the company id for the user you are logged in with.
"""
# @ApiMember(Description="Id of the booking", ParameterType="path")
id: Optional[int] = None
"""
Id of the booking
"""
# @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
booking_start: Optional[datetime.datetime] = None
"""
Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339
"""
# @ApiMember(DataType="dateTime", Description="End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
booking_end: Optional[datetime.datetime] = None
"""
End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339
"""
# @ApiMember(DataType="boolean", Description="Set to true if you want to include all bookings for the company. Only administrators are allowed to do this.", ParameterType="query")
company_bookings: bool = False
"""
Set to true if you want to include all bookings for the company. Only administrators are allowed to do this.
"""
# @ApiMember(Description="Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4. Default is 1,3 for active statuses.", ParameterType="query")
include_statuses: Optional[List[int]] = None
"""
Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4. Default is 1,3 for active statuses.
"""
# @ApiMember(DataType="boolean", Description="If you want to include the connected resourcetypes and resources", ParameterType="query")
include_custom_fields: bool = False
"""
If you want to include the connected resourcetypes and resources
"""
# @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
include_custom_field_values: bool = False
"""
If you want to include the connected custom fields
"""
# @ApiMember(DataType="boolean", Description="If you want to include the price information on the booking", ParameterType="query")
include_price_information: bool = False
"""
If you want to include the price information on the booking
"""
# @ApiMember(DataType="boolean", Description="If you want to include booking status information", ParameterType="query")
include_status_information: bool = False
"""
If you want to include booking status information
"""
# @ApiMember(DataType="boolean", Description="If you want to include the payment log on the booking", ParameterType="query")
include_payment_log: bool = False
"""
If you want to include the payment log on the booking
"""
# @ApiMember(DataType="boolean", Description="If you want to include the checkouts for payson", ParameterType="query")
include_checkouts: bool = False
"""
If you want to include the checkouts for payson
"""
# @ApiMember(DataType="boolean", Description="If you want to include the booked resourcetypes and it's booked resources", ParameterType="query")
include_booked_resource_types: bool = False
"""
If you want to include the booked resourcetypes and it's booked resources
"""
# @ApiMember(DataType="boolean", Description="If you want to include the company information for the booking", ParameterType="query")
include_company_information: bool = False
"""
If you want to include the company information for the booking
"""
# @ApiMember(DataType="boolean", Description="If you want to include the customer information for the booking", ParameterType="query")
include_customer_information: bool = False
"""
If you want to include the customer information for the booking
"""
# @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
created_from: Optional[datetime.datetime] = None
"""
Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339
"""
# @ApiMember(DataType="dateTime", Description="End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
created_to: Optional[datetime.datetime] = None
"""
End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339
"""
# @ApiMember(Description="Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all.", ParameterType="query")
status_ids: Optional[List[int]] = None
"""
Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all.
"""
# @ApiMember(Description="Query for specific customer", ParameterType="query")
customer_id: Optional[str] = None
"""
Query for specific customer
"""
# @ApiMember(DataType="int", Description="The max limit of records you want to retrieve, default is 100", ParameterType="query")
max_limit: Optional[int] = None
"""
The max limit of records you want to retrieve, default is 100
"""
response_status: Optional[ResponseStatus] = 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()
custom_fields_config: Optional[IList[CustomFieldConfig]] = None
# @Ignore()
custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None
# @Ignore()
comments: Optional[IList[CustomerComment]] = 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
@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
@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 GroupedBookingQuery DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /bookings/grouped HTTP/1.1 Host: testapi.bokamera.se Accept: application/xml
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <QueryResponseOfGroupedBookingQueryResponseWg5EthtI 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:GroupedBookingQueryResponse> <d2p1:Bookings> <d2p1:BookingQueryResponse> <d2p1:BookedBy>String</d2p1:BookedBy> <d2p1:BookedComments>String</d2p1:BookedComments> <d2p1:BookedResourceTypes> <d2p1:BookedResourceType> <d2p1:Id>0</d2p1:Id> <d2p1:Name>String</d2p1:Name> <d2p1:Resources> <d2p1:BookedResource> <d2p1:AccessGroup>String</d2p1:AccessGroup> <d2p1:Color>String</d2p1:Color> <d2p1:Email>String</d2p1:Email> <d2p1:EmailNotification>false</d2p1:EmailNotification> <d2p1:EmailReminder>false</d2p1:EmailReminder> <d2p1:Id>0</d2p1:Id> <d2p1:ImageUrl i:nil="true" /> <d2p1:MobilePhone>String</d2p1:MobilePhone> <d2p1:Name>String</d2p1:Name> <d2p1:SMSNotification>false</d2p1:SMSNotification> <d2p1:SMSReminder>false</d2p1:SMSReminder> </d2p1:BookedResource> </d2p1:Resources> </d2p1:BookedResourceType> </d2p1:BookedResourceTypes> <d2p1:CalendarExportStatus> <d2p1:BookingId>0</d2p1:BookingId> <d2p1:CalendarId>String</d2p1:CalendarId> <d2p1:Synced>false</d2p1:Synced> </d2p1:CalendarExportStatus> <d2p1:CancellationCode>String</d2p1:CancellationCode> <d2p1:CheckoutLog> <d2p1:BookingCheckoutQueryResponse> <d2p1:BookingId>0</d2p1:BookingId> <d2p1:Created>0001-01-01T00:00:00</d2p1:Created> <d2p1:ExpirationTime>0001-01-01T00:00:00</d2p1:ExpirationTime> <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id> <d2p1:Message>String</d2p1:Message> <d2p1:PurchaseId>0</d2p1:PurchaseId> <d2p1:Snippet>String</d2p1:Snippet> <d2p1:Status>String</d2p1:Status> <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated> </d2p1:BookingCheckoutQueryResponse> </d2p1:CheckoutLog> <d2p1:CommentsToCustomer>String</d2p1:CommentsToCustomer> <d2p1:Company> <d2p1:Category>String</d2p1:Category> <d2p1:City>String</d2p1:City> <d2p1:CountryId>String</d2p1:CountryId> <d2p1:Email>String</d2p1:Email> <d2p1:HomePage>String</d2p1:HomePage> <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id> <d2p1:IsFavorite>false</d2p1:IsFavorite> <d2p1:Latitude>String</d2p1:Latitude> <d2p1:LogoType i:nil="true" /> <d2p1:Longitude>String</d2p1:Longitude> <d2p1:Name>String</d2p1:Name> <d2p1:PaymentProviderId>0</d2p1:PaymentProviderId> <d2p1:Phone>String</d2p1:Phone> <d2p1:SitePath>String</d2p1:SitePath> <d2p1:Street1>String</d2p1:Street1> <d2p1:Street2>String</d2p1:Street2> <d2p1:ZipCode>String</d2p1:ZipCode> </d2p1:Company> <d2p1:CompanyId>00000000-0000-0000-0000-000000000000</d2p1:CompanyId> <d2p1:CreatedDate>0001-01-01T00:00:00</d2p1:CreatedDate> <d2p1:CustomFieldValues> <d2p1:CustomFieldDataResponse> <d2p1:Column>String</d2p1:Column> <d2p1:DataType>String</d2p1:DataType> <d2p1:Description>String</d2p1:Description> <d2p1:Id>0</d2p1:Id> <d2p1:Name>String</d2p1:Name> <d2p1:Value>String</d2p1:Value> </d2p1:CustomFieldDataResponse> </d2p1:CustomFieldValues> <d2p1:CustomFields> <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:CustomFields> <d2p1:Customer> <d2p1:CorporateIdentityNumber>String</d2p1:CorporateIdentityNumber> <d2p1:Email>String</d2p1:Email> <d2p1:FacebookUserName>String</d2p1:FacebookUserName> <d2p1:Firstname>String</d2p1:Firstname> <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id> <d2p1:ImageUrl>String</d2p1:ImageUrl> <d2p1:InvoiceAddress1>String</d2p1:InvoiceAddress1> <d2p1:InvoiceAddress2>String</d2p1:InvoiceAddress2> <d2p1:InvoiceCity>String</d2p1:InvoiceCity> <d2p1:InvoiceCountryCode>String</d2p1:InvoiceCountryCode> <d2p1:InvoicePostalCode>String</d2p1:InvoicePostalCode> <d2p1:Lastname>String</d2p1:Lastname> <d2p1:Phone>String</d2p1:Phone> </d2p1:Customer> <d2p1:ExternalReference> <d2p1:ExternalReferenceResponse> <d2p1:CompanyId>00000000-0000-0000-0000-000000000000</d2p1:CompanyId> <d2p1:Created>0001-01-01T00:00:00</d2p1:Created> <d2p1:CreatedBy>String</d2p1:CreatedBy> <d2p1:ExternalData>String</d2p1:ExternalData> <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id> <d2p1:OwnerId>00000000-0000-0000-0000-000000000000</d2p1:OwnerId> <d2p1:ReferenceType>String</d2p1:ReferenceType> <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated> </d2p1:ExternalReferenceResponse> </d2p1:ExternalReference> <d2p1:From>0001-01-01T00:00:00</d2p1:From> <d2p1:Id>0</d2p1:Id> <d2p1:LastTimeToUnBook>0001-01-01T00:00:00</d2p1:LastTimeToUnBook> <d2p1:LengthInMinutes>0</d2p1:LengthInMinutes> <d2p1:Log> <d2p1:BookingLogQueryResponse> <d2p1:BookingId>0</d2p1:BookingId> <d2p1:Comments>String</d2p1:Comments> <d2p1:Created>0001-01-01T00:00:00</d2p1:Created> <d2p1:EventType> <d2p1:Description>String</d2p1:Description> <d2p1:Id>0</d2p1:Id> <d2p1:Name>String</d2p1:Name> </d2p1:EventType> <d2p1:EventTypeId>0</d2p1:EventTypeId> <d2p1:Id>0</d2p1:Id> <d2p1:UserName>String</d2p1:UserName> </d2p1:BookingLogQueryResponse> </d2p1:Log> <d2p1:PaymentExpiration>0001-01-01T00:00:00</d2p1:PaymentExpiration> <d2p1:PaymentLog> <d2p1:BookingPaymentLogQueryResponse> <d2p1:Amount>0</d2p1:Amount> <d2p1:AmountCredited>0</d2p1:AmountCredited> <d2p1:BookingId>0</d2p1:BookingId> <d2p1:Comments>String</d2p1:Comments> <d2p1:Created>0001-01-01T00:00:00</d2p1:Created> <d2p1:CurrencyId>String</d2p1:CurrencyId> <d2p1:CurrencyInfo> <d2p1:CurrencySign>String</d2p1:CurrencySign> <d2p1:Id>String</d2p1:Id> <d2p1:Name>String</d2p1:Name> </d2p1:CurrencyInfo> <d2p1:Id>0</d2p1:Id> <d2p1:OrderItemReferenceId>String</d2p1:OrderItemReferenceId> <d2p1:PaymentProviderId>0</d2p1:PaymentProviderId> <d2p1:PaymentReferenceId>String</d2p1:PaymentReferenceId> <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated> <d2p1:VAT>0</d2p1:VAT> </d2p1:BookingPaymentLogQueryResponse> </d2p1:PaymentLog> <d2p1:Quantities> <d2p1:BookedQuantity> <d2p1:Category>String</d2p1:Category> <d2p1:CurrencyId>String</d2p1:CurrencyId> <d2p1:Id>0</d2p1:Id> <d2p1:OccupiesSpot>false</d2p1:OccupiesSpot> <d2p1:Price>0</d2p1:Price> <d2p1:PriceBeforeRebate>0</d2p1:PriceBeforeRebate> <d2p1:PriceSign>String</d2p1:PriceSign> <d2p1:PriceText>String</d2p1:PriceText> <d2p1:Quantity>0</d2p1:Quantity> <d2p1:VAT>0</d2p1:VAT> </d2p1:BookedQuantity> </d2p1:Quantities> <d2p1:RatingCode>String</d2p1:RatingCode> <d2p1:ResponseStatus> <ErrorCode>String</ErrorCode> <Message>String</Message> <StackTrace>String</StackTrace> <Errors> <ResponseError> <ErrorCode>String</ErrorCode> <FieldName>String</FieldName> <Message>String</Message> <Meta xmlns:d9p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d9p1:KeyValueOfstringstring> <d9p1:Key>String</d9p1:Key> <d9p1:Value>String</d9p1:Value> </d9p1:KeyValueOfstringstring> </Meta> </ResponseError> </Errors> <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> </d2p1:ResponseStatus> <d2p1:SendEmailConfirmation>false</d2p1:SendEmailConfirmation> <d2p1:SendEmailReminder>false</d2p1:SendEmailReminder> <d2p1:SendSmsConfirmation>false</d2p1:SendSmsConfirmation> <d2p1:SendSmsReminder>false</d2p1:SendSmsReminder> <d2p1:Service> <d2p1:Description>String</d2p1:Description> <d2p1:GroupBooking> <d2p1:Active>false</d2p1:Active> <d2p1:Max>0</d2p1:Max> <d2p1:Min>0</d2p1:Min> </d2p1:GroupBooking> <d2p1:Id>0</d2p1:Id> <d2p1:ImageUrl i:nil="true" /> <d2p1:IsGroupBooking>false</d2p1:IsGroupBooking> <d2p1:IsPaymentEnabled>false</d2p1:IsPaymentEnabled> <d2p1:LengthInMinutes>0</d2p1:LengthInMinutes> <d2p1:MaxNumberOfSpotsPerBooking>0</d2p1:MaxNumberOfSpotsPerBooking> <d2p1:MultipleResource> <d2p1:Active>false</d2p1:Active> <d2p1:Max>0</d2p1:Max> <d2p1:Min>0</d2p1:Min> </d2p1:MultipleResource> <d2p1:Name>String</d2p1:Name> </d2p1:Service> <d2p1:Status>Booked</d2p1:Status> <d2p1:StatusId>0</d2p1:StatusId> <d2p1:StatusInfo> <d2p1:Color>String</d2p1:Color> <d2p1:Description>String</d2p1:Description> <d2p1:Icon>String</d2p1:Icon> <d2p1:Id>0</d2p1:Id> <d2p1:Name>String</d2p1:Name> </d2p1:StatusInfo> <d2p1:StatusName>String</d2p1:StatusName> <d2p1:To>0001-01-01T00:00:00</d2p1:To> <d2p1:UnbookedComments>String</d2p1:UnbookedComments> <d2p1:UnbookedOn>0001-01-01T00:00:00</d2p1:UnbookedOn> <d2p1:UpdatedDate>0001-01-01T00:00:00</d2p1:UpdatedDate> </d2p1:BookingQueryResponse> </d2p1:Bookings> <d2p1:CompanyId>00000000-0000-0000-0000-000000000000</d2p1:CompanyId> <d2p1:Date>0001-01-01T00:00:00</d2p1:Date> </d2p1:GroupedBookingQueryResponse> </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> </QueryResponseOfGroupedBookingQueryResponseWg5EthtI>