BokaMera.API.Host

<back to all web services

CreateRecurringSchedule

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/schedules/recurringAdd new recurring scheduleAdd new recurring schedule to the company for the currently logged in user, only administrators are allowed to add schedules.
namespace BokaMera.API.ServiceModel.Dtos

open System
open System.Collections
open System.Collections.Generic
open System.Runtime.Serialization
open ServiceStack
open ServiceStack.DataAnnotations

    [<AllowNullLiteral>]
    type DayOfWeekDto() = 
        member val DayOfWeekId:Int32 = new Int32() with get,set
        member val DotNetDayOfWeekId:Int32 = new Int32() with get,set
        member val DayOfWeek:String = null with get,set

    [<AllowNullLiteral>]
    type ScheduleResources() = 
        member val Id:Int32 = new Int32() with get,set
        ///<summary>
        ///Name of the resource
        ///</summary>
        [<ApiMember(Description="Name of the resource")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The image url of the resource
        ///</summary>
        [<ApiMember(Description="The image url of the resource")>]
        member val ImageUrl:Uri = null with get,set

    [<AllowNullLiteral>]
    type ScheduleServices() = 
        member val Id:Int32 = new Int32() with get,set
        ///<summary>
        ///Name of the service
        ///</summary>
        [<ApiMember(Description="Name of the service")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The image url of the service
        ///</summary>
        [<ApiMember(Description="The image url of the service")>]
        member val ImageUrl:Uri = null with get,set

    [<AllowNullLiteral>]
    type RecurringScheduleExceptionResponse() = 
        ///<summary>
        ///Start time of the schedule exception.
        ///</summary>
        [<ApiMember(Description="Start time of the schedule exception.")>]
        member val StartTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///End time of the schedule exception.
        ///</summary>
        [<ApiMember(Description="End time of the schedule exception.")>]
        member val EndTime:TimeSpan = new TimeSpan() with get,set

    [<AllowNullLiteral>]
    type RecurringScheduleDateResponse() = 
        member val Id:Int32 = new Int32() with get,set
        member val Date:DateTime = new DateTime() with get,set
        member val StartTime:TimeSpan = new TimeSpan() with get,set
        member val EndTime:TimeSpan = new TimeSpan() with get,set
        member val ResponseStatus:ResponseStatus = null with get,set

    [<AllowNullLiteral>]
    type RecurringScheduleQueryResponse() = 
        ///<summary>
        ///The schedule id
        ///</summary>
        [<ApiMember(Description="The schedule id")>]
        member val Id:Int32 = new Int32() with get,set

        ///<summary>
        ///Name of the schedule
        ///</summary>
        [<ApiMember(Description="Name of the schedule")>]
        member val Name:String = null with get,set

        ///<summary>
        ///Description of the schedule
        ///</summary>
        [<ApiMember(Description="Description of the schedule")>]
        member val Description:String = null with get,set

        ///<summary>
        ///If the schedule is active or not
        ///</summary>
        [<ApiMember(Description="If the schedule is active or not")>]
        member val Active:Boolean = new Boolean() with get,set

        ///<summary>
        ///Time interval for available times Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM
        ///</summary>
        [<ApiMember(Description="Time interval for available times Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM", IsRequired=true)>]
        member val TimeInterval:Int32 = new Int32() with get,set

        ///<summary>
        ///The timestamp to which the schedule is valid from
        ///</summary>
        [<ApiMember(Description="The timestamp to which the schedule is valid from", IsRequired=true)>]
        member val ValidFrom:DateTime = new DateTime() with get,set

        ///<summary>
        ///The timestamp to which the schedule is valid to
        ///</summary>
        [<ApiMember(Description="The timestamp to which the schedule is valid to", IsRequired=true)>]
        member val ValidTo:DateTime = new DateTime() with get,set

        ///<summary>
        ///The time for the schedule opening hours (starttime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)>]
        member val StartTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///The time for the schedule opening hours (endtime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)>]
        member val EndTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///The number of days the schedule is valid from todays date
        ///</summary>
        [<ApiMember(Description="The number of days the schedule is valid from todays date", IsRequired=true)>]
        member val NumberOfScheduleDays:Int32 = new Int32() with get,set

        ///<summary>
        ///If the schedule is only connected to some specific resources. Note: You must have IncludeResources property to see this.
        ///</summary>
        [<ApiMember(Description="If the schedule is only connected to some specific resources. Note: You must have IncludeResources property to see this.", IsRequired=true)>]
        member val IsResourceSpecific:Nullable<Boolean> = new Nullable<Boolean>() with get,set

        ///<summary>
        ///The timestamp when the schedule was updated
        ///</summary>
        [<ApiMember(Description="The timestamp when the schedule was updated", IsRequired=true)>]
        member val UpdatedDate:DateTime = new DateTime() with get,set

        ///<summary>
        ///The timestamp when the schedule was created
        ///</summary>
        [<ApiMember(Description="The timestamp when the schedule was created", IsRequired=true)>]
        member val CreatedDate:DateTime = new DateTime() with get,set

        ///<summary>
        ///Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).
        ///</summary>
        [<ApiMember(Description="Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).", IsRequired=true)>]
        member val EnableBookingUntilClosingTime:Boolean = new Boolean() with get,set

        ///<summary>
        ///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
        ///</summary>
        [<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")>]
        member val DaysOfWeek:ResizeArray<DayOfWeekDto> = new ResizeArray<DayOfWeekDto>() with get,set

        ///<summary>
        ///The resources that is connected to the schedule
        ///</summary>
        [<ApiMember(Description="The resources that is connected to the schedule")>]
        member val Resources:ResizeArray<ScheduleResources> = new ResizeArray<ScheduleResources>() with get,set

        ///<summary>
        ///The services that is connected to the schedule
        ///</summary>
        [<ApiMember(Description="The services that is connected to the schedule")>]
        member val Services:ResizeArray<ScheduleServices> = new ResizeArray<ScheduleServices>() with get,set

        ///<summary>
        ///The exceptions that is added to the schedule
        ///</summary>
        [<ApiMember(Description="The exceptions that is added to the schedule")>]
        member val Exceptions:ResizeArray<RecurringScheduleExceptionResponse> = new ResizeArray<RecurringScheduleExceptionResponse>() with get,set

        ///<summary>
        ///Schedule dates, used when the schedule is not a rolling schedule using days of week
        ///</summary>
        [<ApiMember(Description="Schedule dates, used when the schedule is not a rolling schedule using days of week")>]
        member val ScheduleDates:ResizeArray<RecurringScheduleDateResponse> = new ResizeArray<RecurringScheduleDateResponse>() with get,set

        member val ResponseStatus:ResponseStatus = null with get,set

    [<AllowNullLiteral>]
    type AddRecurringScheduleDate() = 
        ///<summary>
        ///The date for the schedule opening (only date part is used here
        ///</summary>
        [<ApiMember(Description="The date for the schedule opening (only date part is used here", IsRequired=true)>]
        member val Date:DateTime = new DateTime() with get,set

        ///<summary>
        ///The time for the schedule opening hours (starttime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)>]
        member val StartTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///The time for the schedule opening hours (endtime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)>]
        member val EndTime:TimeSpan = new TimeSpan() with get,set

    [<AllowNullLiteral>]
    type ScheduleException() = 
        member val StartTime:TimeSpan = new TimeSpan() with get,set
        member val EndTime:TimeSpan = new TimeSpan() with get,set

    [<AllowNullLiteral>]
    type AddScheduleResource() = 
        ///<summary>
        ///The resource id
        ///</summary>
        [<ApiMember(Description="The resource id", IsRequired=true)>]
        member val Id:Int32 = new Int32() with get,set

    [<AllowNullLiteral>]
    type AddScheduleService() = 
        ///<summary>
        ///The service id
        ///</summary>
        [<ApiMember(Description="The service id", IsRequired=true)>]
        member val Id:Int32 = new Int32() with get,set

    [<ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)>]
    [<ValidateRequest(Validator="IsAuthenticated")>]
    [<AllowNullLiteral>]
    type CreateRecurringSchedule() = 
        ///<summary>
        ///The company id, if empty will use the company id for the user you are logged in with.
        ///</summary>
        [<ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")>]
        member val CompanyId:Nullable<Guid> = new Nullable<Guid>() with get,set

        ///<summary>
        ///The schedule name
        ///</summary>
        [<ApiMember(Description="The schedule name")>]
        member val Name:String = null with get,set

        ///<summary>
        ///The schedule description
        ///</summary>
        [<ApiMember(Description="The schedule description")>]
        member val Description:String = null with get,set

        ///<summary>
        ///If schedule is active or not
        ///</summary>
        [<ApiMember(Description="If schedule is active or not")>]
        member val Active:Boolean = new Boolean() with get,set

        ///<summary>
        ///Time interval for available times. Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM
        ///</summary>
        [<ApiMember(Description="Time interval for available times. Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM", IsRequired=true)>]
        member val TimeInterval:Int32 = new Int32() with get,set

        ///<summary>
        ///Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).
        ///</summary>
        [<ApiMember(Description="Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).", IsRequired=true)>]
        member val EnableBookingUntilClosingTime:Boolean = new Boolean() with get,set

        ///<summary>
        ///The timestamp to which the schedule is valid from
        ///</summary>
        [<ApiMember(Description="The timestamp to which the schedule is valid from", IsRequired=true)>]
        member val ValidFrom:DateTime = new DateTime() with get,set

        ///<summary>
        ///The timestamp to which the schedule is valid to
        ///</summary>
        [<ApiMember(Description="The timestamp to which the schedule is valid to", IsRequired=true)>]
        member val ValidTo:DateTime = new DateTime() with get,set

        ///<summary>
        ///The time for the schedule opening hours (starttime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)>]
        member val StartTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///The time for the schedule opening hours (endtime)
        ///</summary>
        [<ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)>]
        member val EndTime:TimeSpan = new TimeSpan() with get,set

        ///<summary>
        ///The number of days the schedule is valid from todays date
        ///</summary>
        [<ApiMember(Description="The number of days the schedule is valid from todays date", IsRequired=true)>]
        member val NumberOfScheduleDays:Int32 = new Int32() with get,set

        ///<summary>
        ///If recurring, an array indicating which days of the week the schedule 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
        ///</summary>
        [<ApiMember(Description="If recurring, an array indicating which days of the week the schedule 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")>]
        member val DaysOfWeek:Int32[] = [||] with get,set

        ///<summary>
        ///If not recuring, an array indicating which dates that are open for the schedule.
        ///</summary>
        [<ApiMember(Description="If not recuring, an array indicating which dates that are open for the schedule.")>]
        member val ScheduleDates:ResizeArray<AddRecurringScheduleDate> = new ResizeArray<AddRecurringScheduleDate>() with get,set

        ///<summary>
        ///Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule.
        ///</summary>
        [<ApiMember(Description="Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule.")>]
        member val Exceptions:ResizeArray<ScheduleException> = new ResizeArray<ScheduleException>() with get,set

        ///<summary>
        ///If the schedule is only connected to some resources, add them here. If empty, it will be used by all resources.
        ///</summary>
        [<ApiMember(Description="If the schedule is only connected to some resources, add them here. If empty, it will be used by all resources.")>]
        member val Resources:ResizeArray<AddScheduleResource> = new ResizeArray<AddScheduleResource>() with get,set

        ///<summary>
        ///Set what services the schedule should be connected to.
        ///</summary>
        [<ApiMember(Description="Set what services the schedule should be connected to.")>]
        member val Services:ResizeArray<AddScheduleService> = new ResizeArray<AddScheduleService>() with get,set

F# CreateRecurringSchedule 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 /schedules/recurring HTTP/1.1 
Host: api.bokamera.se 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"CompanyId":"00000000-0000-0000-0000-000000000000","Name":"String","Description":"String","Active":false,"TimeInterval":0,"EnableBookingUntilClosingTime":false,"StartTime":"00:00:00","EndTime":"00:00:00","NumberOfScheduleDays":0,"DaysOfWeek":[0],"ScheduleDates":[{"StartTime":"00:00:00","EndTime":"00:00:00"}],"Exceptions":[{"StartTime":"00:00:00","EndTime":"00:00:00"}],"Resources":[{"Id":0}],"Services":[{"Id":0}]}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Id":0,"Name":"String","Description":"String","Active":false,"TimeInterval":0,"StartTime":"00:00:00","EndTime":"00:00:00","NumberOfScheduleDays":0,"IsResourceSpecific":false,"EnableBookingUntilClosingTime":false,"DaysOfWeek":[{"DayOfWeekId":0,"DotNetDayOfWeekId":0,"DayOfWeek":"String"}],"Resources":[{"Id":0,"Name":"String"}],"Services":[{"Id":0,"Name":"String"}],"Exceptions":[{"StartTime":"00:00:00","EndTime":"00:00:00"}],"ScheduleDates":[{"Id":0,"StartTime":"00:00:00","EndTime":"00:00:00","ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}