BokaMera.API.Host

<back to all web services

CreateResourceTimeException

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/timeexceptionsInserts a time exception for a given resource belonging to the current userInserts a time exception for a given resource belonging to the current user if no colliding bookings are found. If a colliding booking is found. A time exception must be either recurring (DaysOfWeek is set and From and To is the valid range for the recurrency) or non recurring (From and To are set)
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 TimeExceptionReosurceDetails:
    # @ApiMember(Description="Ids of the resources that owns this exception")
    id: int = 0
    """
    Ids of the resources that owns this exception
    """


    # @ApiMember(Description="Name of the resource")
    name: Optional[str] = None
    """
    Name of the resource
    """


    # @ApiMember(Description="Description of the resource")
    description: Optional[str] = None
    """
    Description of the resource
    """


    # @ApiMember(Description="Color of the resource")
    color: Optional[str] = None
    """
    Color of the resource
    """


    # @ApiMember(Description="Image of the resource")
    image_url: Optional[str] = None
    """
    Image of the resource
    """


    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExceptionCalendarExportStatus:
    calendar_id: Optional[str] = None
    exception_id: int = 0
    synced: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DayOfWeekDto:
    day_of_week_id: int = 0
    dot_net_day_of_week_id: int = 0
    day_of_week: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceTimeExceptionQueryResponse:
    # @ApiMember(Description="Time exception id")
    id: int = 0
    """
    Time exception id
    """


    # @ApiMember(Description="Time company id")
    company_id: Optional[str] = None
    """
    Time company id
    """


    # @ApiMember(Description="If it's locked for editing for the logged in administrator")
    locked: bool = False
    """
    If it's locked for editing for the logged in administrator
    """


    # @ApiMember(Description="Resources that owns this exception")
    resource_ids: Optional[List[int]] = None
    """
    Resources that owns this exception
    """


    # @ApiMember(Description="Resources that owns this exception")
    resources: Optional[List[TimeExceptionReosurceDetails]] = None
    """
    Resources that owns this exception
    """


    # @ApiMember(Description="Indicates wheter or not the time exception is recurring")
    is_recurring: bool = False
    """
    Indicates wheter or not the time exception is recurring
    """


    # @ApiMember(Description="Time exception starting timestamp")
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))
    """
    Time exception starting timestamp
    """


    # @ApiMember(Description="Time exception ending timestamp")
    to: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    Time exception ending timestamp
    """


    # @ApiMember(Description="If recurring then this value indicates the time of day when the time exception begins")
    from_time: datetime.timedelta = datetime.timedelta()
    """
    If recurring then this value indicates the time of day when the time exception begins
    """


    # @ApiMember(Description="If recurring then this value indicates the time of day when the time exception ends")
    to_time: datetime.timedelta = datetime.timedelta()
    """
    If recurring then this value indicates the time of day when the time exception ends
    """


    # @ApiMember(Description="The reason of the time exception, example: Vacation, doctors appointment, ...")
    reason_text: Optional[str] = None
    """
    The reason of the time exception, example: Vacation, doctors appointment, ...
    """


    # @ApiMember(Description="The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...")
    reason_text_public: Optional[str] = None
    """
    The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...
    """


    # @ApiMember(Description="What hexadecimal color code the exception should have in the scheduler")
    color: Optional[str] = None
    """
    What hexadecimal color code the exception should have in the scheduler
    """


    # @ApiMember(Description="If the time exception should block the time in the scheduler so it's not avaialable to book")
    block_time: bool = False
    """
    If the time exception should block the time in the scheduler so it's not avaialable to book
    """


    # @ApiMember(Description="If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it")
    private: bool = False
    """
    If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it
    """


    # @ApiMember(Description="The status for export to calendars like Gcal")
    calendar_export_status: Optional[ExceptionCalendarExportStatus] = None
    """
    The status for export to calendars like Gcal
    """


    # @ApiMember(Description="If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs")
    days_of_week: Optional[List[DayOfWeekDto]] = None
    """
    If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs
    """


    # @ApiMember(Description="The datetime the exception was created")
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    The datetime the exception was created
    """


    response_status: Optional[ResponseStatus] = None


class CollidingBookingOptions(IntEnum):
    ADD_WITHOUT_CANCELING_COLLIDING_BOOKINGS = 1
    ADD_AND_CANCEL_COLLIDING_BOOKINGS = 2


# @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
# @ApiResponse(Description="You have too low privilegies to call this service", StatusCode=403)
# @ApiResponse(Description="Bookings exists that needs to be unbooked before creating this time exceptions, use the /timeexceptions/collidingevents to find which bookings and use the booking service to unbook them", StatusCode=409)
# @ValidateRequest(Validator="IsAuthenticated")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateResourceTimeException(ICompany):
    # @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="Time exception starting datestamp, only the date of day part is used of this value", IsRequired=true)
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))
    """
    Time exception starting datestamp, only the date of day part is used of this value
    """


    # @ApiMember(Description="Time exception ending datestamp, only the date of day part is used of this value", IsRequired=true)
    to: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    Time exception ending datestamp, only the date of day part is used of this value
    """


    # @ApiMember(Description="Resource id of the resource that owns this exception", IsRequired=true)
    resource_ids: Optional[List[int]] = None
    """
    Resource id of the resource that owns this exception
    """


    # @ApiMember(Description="This value indicates the time of day when the time exception begins. Example: 10:00. If Recurring this will be the startime for each recurring day.")
    from_time: datetime.timedelta = datetime.timedelta()
    """
    This value indicates the time of day when the time exception begins. Example: 10:00. If Recurring this will be the startime for each recurring day.
    """


    # @ApiMember(Description="This value indicates the time of day when the time exception ends. Example: 12:00. If Recurring this will be the endtime for each recurring day.")
    to_time: datetime.timedelta = datetime.timedelta()
    """
    This value indicates the time of day when the time exception ends. Example: 12:00. If Recurring this will be the endtime for each recurring day.
    """


    # @ApiMember(Description="A comma separated list of which days this day exception belongs to, 1 = Monday .. 7 = Sunday")
    days_of_week: Optional[List[int]] = None
    """
    A comma separated list of which days this day exception belongs to, 1 = Monday .. 7 = Sunday
    """


    # @ApiMember(Description="The reason of the time exception, example: Vacation, doctors appointment, ...", IsRequired=true)
    reason_text: Optional[str] = None
    """
    The reason of the time exception, example: Vacation, doctors appointment, ...
    """


    # @ApiMember(Description="The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...")
    reason_text_public: Optional[str] = None
    """
    The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...
    """


    # @ApiMember(Description="What hexadecimal color code the exception should have in the scheduler")
    color: Optional[str] = None
    """
    What hexadecimal color code the exception should have in the scheduler
    """


    # @ApiMember(Description="If the time exception should block the time in the scheduler so it's not avaialable to book")
    block_time: bool = False
    """
    If the time exception should block the time in the scheduler so it's not avaialable to book
    """


    # @ApiMember(Description="If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it")
    private: bool = False
    """
    If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it
    """


    # @ApiMember(Description="By default sets to 1, which is to add time exception without canceling colliding bookings")
    colliding_booking_options: Optional[CollidingBookingOptions] = None
    """
    By default sets to 1, which is to add time exception without canceling colliding bookings
    """


    # @ApiMember(Description="If this equals true it will it add the time exception with the option you have selected in CollidingBookingOption. Default is to cancel all colliding bookings.")
    force: bool = False
    """
    If this equals true it will it add the time exception with the option you have selected in CollidingBookingOption. Default is to cancel all colliding bookings.
    """


    # @ApiMember(Description="When Force=true and colliding bookings exsists, this message is the message that are sent to the users when canceling their bookings.")
    cancel_message: Optional[str] = None
    """
    When Force=true and colliding bookings exsists, this message is the message that are sent to the users when canceling their bookings.
    """


    # @ApiMember(Description="When Force=true and colliding bookings exsists, send cancelmessage as SMS Confirmation")
    send_sms_confirmation: Optional[bool] = None
    """
    When Force=true and colliding bookings exsists, send cancelmessage as SMS Confirmation
    """


    # @ApiMember(Description="When Force=true and colliding bookings exsists, send cancelmessage as Email Confirmation")
    send_email_confirmation: Optional[bool] = None
    """
    When Force=true and colliding bookings exsists, send cancelmessage as Email Confirmation
    """

Python CreateResourceTimeException DTOs

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

HTTP + CSV

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

POST /timeexceptions HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"CompanyId":"00000000-0000-0000-0000-000000000000","ResourceIds":[0],"FromTime":"00:00:00","ToTime":"00:00:00","DaysOfWeek":[0],"ReasonText":"String","ReasonTextPublic":"String","Color":"String","BlockTime":false,"Private":false,"CollidingBookingOptions":"AddWithoutCancelingCollidingBookings","Force":false,"CancelMessage":"String","SendSmsConfirmation":false,"SendEmailConfirmation":false}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Id":0,"Locked":false,"ResourceIds":[0],"Resources":[{"Id":0,"Name":"String","Description":"String","Color":"String","ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}],"IsRecurring":false,"FromTime":"00:00:00","ToTime":"00:00:00","ReasonText":"String","ReasonTextPublic":"String","Color":"String","BlockTime":false,"Private":false,"CalendarExportStatus":{"CalendarId":"String","ExceptionId":0,"Synced":false},"DaysOfWeek":[{"DayOfWeekId":0,"DotNetDayOfWeekId":0,"DayOfWeek":"String"}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}