""" Options: Date: 2024-11-21 11:29:18 Version: 8.23 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://api.bokamera.se #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: CopyCompany.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ 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 CreateCompanyCompanyUser: # @ApiMember(IsRequired=true) firstname: Optional[str] = None # @ApiMember(IsRequired=true) lastname: Optional[str] = None # @ApiMember(IsRequired=true) phone: Optional[str] = None # @ApiMember(IsRequired=true) email: Optional[str] = None # @ApiMember() worker_id: Optional[int] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CreateCompanyBillingInformation: # @ApiMember(Description="The prefered billing method.", IsRequired=true) billing_method_id: int = 0 """ The prefered billing method. """ # @ApiMember(Description="The name that should be printed on the billing information, normally this would be your company name.") name: Optional[str] = None """ The name that should be printed on the billing information, normally this would be your company name. """ # @ApiMember(Description="If you want to add the attention to the billing address.") attention: Optional[str] = None """ If you want to add the attention to the billing address. """ # @ApiMember(Description="The street for the billing adress. This is required when having postal invoice as billing method.") street1: Optional[str] = None """ The street for the billing adress. This is required when having postal invoice as billing method. """ # @ApiMember(Description="The street for the billing adress.") street2: Optional[str] = None """ The street for the billing adress. """ # @ApiMember(Description="The zip code (postal code) for the billing adress. This is required when having postal invoice as billing method.") zip_code: Optional[str] = None """ The zip code (postal code) for the billing adress. This is required when having postal invoice as billing method. """ # @ApiMember(Description="The city for the billing adress. This is required when having postal invoice as billing method.") city: Optional[str] = None """ The city for the billing adress. This is required when having postal invoice as billing method. """ # @ApiMember(Description="The country for the billing adress. This is required when having postal invoice as billing method.") country_id: Optional[str] = None """ The country for the billing adress. This is required when having postal invoice as billing method. """ # @ApiMember(Description="The billing email. This is required when having email invoice as billing method.") email: Optional[str] = None """ The billing email. This is required when having email invoice as billing method. """ # @ApiMember(Description="The billing payment terms in days. This is default 15 days.") payment_terms_days: Optional[int] = None """ The billing payment terms in days. This is default 15 days. """ # @ApiMember(Description="The company vat registration number.") vat_registration_number: Optional[str] = None """ The company vat registration number. """ @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 """ 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 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 # @Route("/companies/{Id}/copy", "POST") # @ValidateRequest(Validator="IsAuthenticated") # @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CopyCompany(IReturn[CompanyQueryResponse]): # @ApiMember(Description="Id for a specific company you want to copy.", ParameterType="query") id: Optional[str] = None """ Id for a specific company you want to copy. """ # @ApiMember(DataType="string", Description="", IsRequired=true) name: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="", IsRequired=true) organisation_number: Optional[str] = None """ """ # @ApiMember(DataType="int", Description="What type of company. If it's used for personal use or as a company. 1 = Company use, 2 = Personal use", IsRequired=true) type_id: int = 0 """ What type of company. If it's used for personal use or as a company. 1 = Company use, 2 = Personal use """ # @ApiMember(DataType="int", Description="What company owner. 1 = BokaMera (default)", IsRequired=true) company_owner_id: int = 0 """ What company owner. 1 = BokaMera (default) """ # @ApiMember(Description="Include following services, if null all active services will be copied.", ParameterType="query") services: Optional[List[int]] = None """ Include following services, if null all active services will be copied. """ # @ApiMember(Description="Include following resource types, if null all active resource types will be copied.", ParameterType="query") resource_types: Optional[List[int]] = None """ Include following resource types, if null all active resource types will be copied. """ # @ApiMember(Description="Include following resources, if null all active resources will be copied.", ParameterType="query") resources: Optional[List[int]] = None """ Include following resources, if null all active resources will be copied. """ # @ApiMember(Description="Include following recurring schedules, if null all active recurring schedules will be copied.", ParameterType="query") recurring_schedules: Optional[List[int]] = None """ Include following recurring schedules, if null all active recurring schedules will be copied. """ # @ApiMember(Description="Include following date schedules, if null all active date schedules will be copied.", ParameterType="query") date_schedules: Optional[List[int]] = None """ Include following date schedules, if null all active date schedules will be copied. """ # @ApiMember(DataType="string", Description="", IsRequired=true) opening_hours: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") details: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="", IsRequired=true) category_id: int = 0 """ """ # @ApiMember(DataType="uri", Description="", IsRequired=true) logo_type: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") street1: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") street2: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") zip_code: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") city: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") country_id: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="", IsRequired=true) longitude: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") latitude: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") phone: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="", IsRequired=true) email: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") fax: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="") homepage: Optional[str] = None """ """ # @ApiMember(DataType="string", Description="", IsRequired=true) site_path: Optional[str] = None """ """ # @ApiMember(Description="", IsRequired=true) company_user: Optional[CreateCompanyCompanyUser] = None """ """ billing_information: Optional[CreateCompanyBillingInformation] = None # @ApiMember(Description="Id of the license type", IsRequired=true) license_type_id: int = 0 """ Id of the license type """ # @ApiMember(DataType="string", Description="") domain_name: Optional[str] = None """ """