BokaMera.API.Host

<back to all web services

UpdateRecurringSchedule

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
PUT/schedules/recurring/{Id}Update recurring scheduleUpdate recurring schedule to the company for the currently logged in user, only administrators are allowed to update schedules.
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


class DayOfWeekDto implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $DayOfWeekId=0,
        /** @var int */
        public int $DotNetDayOfWeekId=0,
        /** @var string|null */
        public ?string $DayOfWeek=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['DayOfWeekId'])) $this->DayOfWeekId = $o['DayOfWeekId'];
        if (isset($o['DotNetDayOfWeekId'])) $this->DotNetDayOfWeekId = $o['DotNetDayOfWeekId'];
        if (isset($o['DayOfWeek'])) $this->DayOfWeek = $o['DayOfWeek'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->DayOfWeekId)) $o['DayOfWeekId'] = $this->DayOfWeekId;
        if (isset($this->DotNetDayOfWeekId)) $o['DotNetDayOfWeekId'] = $this->DotNetDayOfWeekId;
        if (isset($this->DayOfWeek)) $o['DayOfWeek'] = $this->DayOfWeek;
        return empty($o) ? new class(){} : $o;
    }
}

class ScheduleResources implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $Id=0,
        /** @description Name of the resource */
        // @ApiMember(Description="Name of the resource")
        /** @var string|null */
        public ?string $Name=null,

        /** @description The image url of the resource */
        // @ApiMember(Description="The image url of the resource")
        /** @var string|null */
        public ?string $ImageUrl=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['ImageUrl'])) $this->ImageUrl = JsonConverters::from('string', $o['ImageUrl']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->ImageUrl)) $o['ImageUrl'] = JsonConverters::to('string', $this->ImageUrl);
        return empty($o) ? new class(){} : $o;
    }
}

class ScheduleServices implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $Id=0,
        /** @description Name of the service */
        // @ApiMember(Description="Name of the service")
        /** @var string|null */
        public ?string $Name=null,

        /** @description The image url of the service */
        // @ApiMember(Description="The image url of the service")
        /** @var string|null */
        public ?string $ImageUrl=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['ImageUrl'])) $this->ImageUrl = JsonConverters::from('string', $o['ImageUrl']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->ImageUrl)) $o['ImageUrl'] = JsonConverters::to('string', $this->ImageUrl);
        return empty($o) ? new class(){} : $o;
    }
}

class RecurringScheduleExceptionResponse implements JsonSerializable
{
    public function __construct(
        /** @description Start time of the schedule exception. */
        // @ApiMember(Description="Start time of the schedule exception.")
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,

        /** @description End time of the schedule exception. */
        // @ApiMember(Description="End time of the schedule exception.")
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('DateInterval', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('DateInterval', $o['EndTime']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('DateInterval', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('DateInterval', $this->EndTime);
        return empty($o) ? new class(){} : $o;
    }
}

class RecurringScheduleDateResponse implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $Id=0,
        /** @var DateTime */
        public DateTime $Date=new DateTime(),
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null,
        /** @var ResponseStatus|null */
        public ?ResponseStatus $ResponseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['Date'])) $this->Date = JsonConverters::from('DateTime', $o['Date']);
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('DateInterval', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('DateInterval', $o['EndTime']);
        if (isset($o['ResponseStatus'])) $this->ResponseStatus = JsonConverters::from('ResponseStatus', $o['ResponseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->Date)) $o['Date'] = JsonConverters::to('DateTime', $this->Date);
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('DateInterval', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('DateInterval', $this->EndTime);
        if (isset($this->ResponseStatus)) $o['ResponseStatus'] = JsonConverters::to('ResponseStatus', $this->ResponseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

class RecurringScheduleQueryResponse implements JsonSerializable
{
    public function __construct(
        /** @description The schedule id */
        // @ApiMember(Description="The schedule id")
        /** @var int */
        public int $Id=0,

        /** @description Name of the schedule */
        // @ApiMember(Description="Name of the schedule")
        /** @var string|null */
        public ?string $Name=null,

        /** @description Description of the schedule */
        // @ApiMember(Description="Description of the schedule")
        /** @var string|null */
        public ?string $Description=null,

        /** @description If the schedule is active or not */
        // @ApiMember(Description="If the schedule is active or not")
        /** @var bool|null */
        public ?bool $Active=null,

        /** @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 */
        // @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)
        /** @var int */
        public int $TimeInterval=0,

        /** @description The timestamp to which the schedule is valid from */
        // @ApiMember(Description="The timestamp to which the schedule is valid from", IsRequired=true)
        /** @var DateTime */
        public DateTime $ValidFrom=new DateTime(),

        /** @description The timestamp to which the schedule is valid to */
        // @ApiMember(Description="The timestamp to which the schedule is valid to", IsRequired=true)
        /** @var DateTime */
        public DateTime $ValidTo=new DateTime(),

        /** @description The time for the schedule opening hours (starttime) */
        // @ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,

        /** @description The time for the schedule opening hours (endtime) */
        // @ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null,

        /** @description The number of days the schedule is valid from todays date */
        // @ApiMember(Description="The number of days the schedule is valid from todays date", IsRequired=true)
        /** @var int */
        public int $NumberOfScheduleDays=0,

        /** @description If the schedule is only connected to some specific resources. Note: You must have IncludeResources property to see this. */
        // @ApiMember(Description="If the schedule is only connected to some specific resources. Note: You must have IncludeResources property to see this.", IsRequired=true)
        /** @var bool|null */
        public ?bool $IsResourceSpecific=null,

        /** @description The timestamp when the schedule was updated */
        // @ApiMember(Description="The timestamp when the schedule was updated", IsRequired=true)
        /** @var DateTime */
        public DateTime $UpdatedDate=new DateTime(),

        /** @description The timestamp when the schedule was created */
        // @ApiMember(Description="The timestamp when the schedule was created", IsRequired=true)
        /** @var DateTime */
        public DateTime $CreatedDate=new DateTime(),

        /** @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). */
        // @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)
        /** @var bool|null */
        public ?bool $EnableBookingUntilClosingTime=null,

        /** @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 */
        // @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")
        /** @var array<DayOfWeekDto>|null */
        public ?array $DaysOfWeek=null,

        /** @description The resources that is connected to the schedule */
        // @ApiMember(Description="The resources that is connected to the schedule")
        /** @var array<ScheduleResources>|null */
        public ?array $Resources=null,

        /** @description The services that is connected to the schedule */
        // @ApiMember(Description="The services that is connected to the schedule")
        /** @var array<ScheduleServices>|null */
        public ?array $Services=null,

        /** @description The exceptions that is added to the schedule */
        // @ApiMember(Description="The exceptions that is added to the schedule")
        /** @var array<RecurringScheduleExceptionResponse>|null */
        public ?array $Exceptions=null,

        /** @description Schedule dates, used when the schedule is not a rolling schedule using days of week */
        // @ApiMember(Description="Schedule dates, used when the schedule is not a rolling schedule using days of week")
        /** @var array<RecurringScheduleDateResponse>|null */
        public ?array $ScheduleDates=null,

        /** @var ResponseStatus|null */
        public ?ResponseStatus $ResponseStatus=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Active'])) $this->Active = $o['Active'];
        if (isset($o['TimeInterval'])) $this->TimeInterval = $o['TimeInterval'];
        if (isset($o['ValidFrom'])) $this->ValidFrom = JsonConverters::from('DateTime', $o['ValidFrom']);
        if (isset($o['ValidTo'])) $this->ValidTo = JsonConverters::from('DateTime', $o['ValidTo']);
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('DateInterval', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('DateInterval', $o['EndTime']);
        if (isset($o['NumberOfScheduleDays'])) $this->NumberOfScheduleDays = $o['NumberOfScheduleDays'];
        if (isset($o['IsResourceSpecific'])) $this->IsResourceSpecific = $o['IsResourceSpecific'];
        if (isset($o['UpdatedDate'])) $this->UpdatedDate = JsonConverters::from('DateTime', $o['UpdatedDate']);
        if (isset($o['CreatedDate'])) $this->CreatedDate = JsonConverters::from('DateTime', $o['CreatedDate']);
        if (isset($o['EnableBookingUntilClosingTime'])) $this->EnableBookingUntilClosingTime = $o['EnableBookingUntilClosingTime'];
        if (isset($o['DaysOfWeek'])) $this->DaysOfWeek = JsonConverters::fromArray('DayOfWeekDto', $o['DaysOfWeek']);
        if (isset($o['Resources'])) $this->Resources = JsonConverters::fromArray('ScheduleResources', $o['Resources']);
        if (isset($o['Services'])) $this->Services = JsonConverters::fromArray('ScheduleServices', $o['Services']);
        if (isset($o['Exceptions'])) $this->Exceptions = JsonConverters::fromArray('RecurringScheduleExceptionResponse', $o['Exceptions']);
        if (isset($o['ScheduleDates'])) $this->ScheduleDates = JsonConverters::fromArray('RecurringScheduleDateResponse', $o['ScheduleDates']);
        if (isset($o['ResponseStatus'])) $this->ResponseStatus = JsonConverters::from('ResponseStatus', $o['ResponseStatus']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Active)) $o['Active'] = $this->Active;
        if (isset($this->TimeInterval)) $o['TimeInterval'] = $this->TimeInterval;
        if (isset($this->ValidFrom)) $o['ValidFrom'] = JsonConverters::to('DateTime', $this->ValidFrom);
        if (isset($this->ValidTo)) $o['ValidTo'] = JsonConverters::to('DateTime', $this->ValidTo);
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('DateInterval', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('DateInterval', $this->EndTime);
        if (isset($this->NumberOfScheduleDays)) $o['NumberOfScheduleDays'] = $this->NumberOfScheduleDays;
        if (isset($this->IsResourceSpecific)) $o['IsResourceSpecific'] = $this->IsResourceSpecific;
        if (isset($this->UpdatedDate)) $o['UpdatedDate'] = JsonConverters::to('DateTime', $this->UpdatedDate);
        if (isset($this->CreatedDate)) $o['CreatedDate'] = JsonConverters::to('DateTime', $this->CreatedDate);
        if (isset($this->EnableBookingUntilClosingTime)) $o['EnableBookingUntilClosingTime'] = $this->EnableBookingUntilClosingTime;
        if (isset($this->DaysOfWeek)) $o['DaysOfWeek'] = JsonConverters::toArray('DayOfWeekDto', $this->DaysOfWeek);
        if (isset($this->Resources)) $o['Resources'] = JsonConverters::toArray('ScheduleResources', $this->Resources);
        if (isset($this->Services)) $o['Services'] = JsonConverters::toArray('ScheduleServices', $this->Services);
        if (isset($this->Exceptions)) $o['Exceptions'] = JsonConverters::toArray('RecurringScheduleExceptionResponse', $this->Exceptions);
        if (isset($this->ScheduleDates)) $o['ScheduleDates'] = JsonConverters::toArray('RecurringScheduleDateResponse', $this->ScheduleDates);
        if (isset($this->ResponseStatus)) $o['ResponseStatus'] = JsonConverters::to('ResponseStatus', $this->ResponseStatus);
        return empty($o) ? new class(){} : $o;
    }
}

class AddRecurringScheduleDate implements JsonSerializable
{
    public function __construct(
        /** @description The date for the schedule opening (only date part is used here */
        // @ApiMember(Description="The date for the schedule opening (only date part is used here", IsRequired=true)
        /** @var DateTime */
        public DateTime $Date=new DateTime(),

        /** @description The time for the schedule opening hours (starttime) */
        // @ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,

        /** @description The time for the schedule opening hours (endtime) */
        // @ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Date'])) $this->Date = JsonConverters::from('DateTime', $o['Date']);
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('DateInterval', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('DateInterval', $o['EndTime']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Date)) $o['Date'] = JsonConverters::to('DateTime', $this->Date);
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('DateInterval', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('DateInterval', $this->EndTime);
        return empty($o) ? new class(){} : $o;
    }
}

class ScheduleException implements JsonSerializable
{
    public function __construct(
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('DateInterval', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('DateInterval', $o['EndTime']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('DateInterval', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('DateInterval', $this->EndTime);
        return empty($o) ? new class(){} : $o;
    }
}

class AddScheduleResource implements JsonSerializable
{
    public function __construct(
        /** @description The resource id */
        // @ApiMember(Description="The resource id", IsRequired=true)
        /** @var int */
        public int $Id=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        return empty($o) ? new class(){} : $o;
    }
}

class AddScheduleService implements JsonSerializable
{
    public function __construct(
        /** @description The service id */
        // @ApiMember(Description="The service id", IsRequired=true)
        /** @var int */
        public int $Id=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        return empty($o) ? new class(){} : $o;
    }
}

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class UpdateRecurringSchedule implements ICompany, JsonSerializable
{
    public function __construct(
        /** @description Id of the schedule to update */
        // @ApiMember(Description="Id of the schedule to update", IsRequired=true, ParameterType="path")
        /** @var int */
        public int $Id=0,

        /** @description The company id, if empty will use the company id for the user you are logged in with. */
        // @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
        /** @var string|null */
        public ?string $CompanyId=null,

        /** @description The schedule name */
        // @ApiMember(Description="The schedule name")
        /** @var string|null */
        public ?string $Name=null,

        /** @description The schedule description */
        // @ApiMember(Description="The schedule description")
        /** @var string|null */
        public ?string $Description=null,

        /** @description If schedule is active or not */
        // @ApiMember(Description="If schedule is active or not")
        /** @var bool|null */
        public ?bool $Active=null,

        /** @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 */
        // @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)
        /** @var int */
        public int $TimeInterval=0,

        /** @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). */
        // @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)
        /** @var bool|null */
        public ?bool $EnableBookingUntilClosingTime=null,

        /** @description The timestamp to which the schedule is valid from */
        // @ApiMember(Description="The timestamp to which the schedule is valid from", IsRequired=true)
        /** @var DateTime */
        public DateTime $ValidFrom=new DateTime(),

        /** @description The timestamp to which the schedule is valid to */
        // @ApiMember(Description="The timestamp to which the schedule is valid to", IsRequired=true)
        /** @var DateTime */
        public DateTime $ValidTo=new DateTime(),

        /** @description The time for the schedule opening hours (starttime) */
        // @ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $StartTime=null,

        /** @description The time for the schedule opening hours (endtime) */
        // @ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)
        /** @var DateInterval|null */
        public ?DateInterval $EndTime=null,

        /** @description The number of days the schedule is valid from todays date */
        // @ApiMember(Description="The number of days the schedule is valid from todays date", IsRequired=true)
        /** @var int */
        public int $NumberOfScheduleDays=0,

        /** @description A comma separated list of which days this day exception belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update. */
        // @ApiMember(Description="A comma separated list of which days this day exception belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update.")
        /** @var int[]|null */
        public ?array $DaysOfWeek=null,

        /** @description If not recuring, an array indicating which dates that are open for the schedule. */
        // @ApiMember(Description="If not recuring, an array indicating which dates that are open for the schedule.")
        /** @var array<AddRecurringScheduleDate>|null */
        public ?array $ScheduleDates=null,

        /** @description Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule. */
        // @ApiMember(Description="Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule.")
        /** @var array<ScheduleException>|null */
        public ?array $Exceptions=null,

        /** @description If the schedule is only connected to some resources, add them here. If empty, it will be used by all resources. */
        // @ApiMember(Description="If the schedule is only connected to some resources, add them here. If empty, it will be used by all resources.")
        /** @var array<AddScheduleResource>|null */
        public ?array $Resources=null,

        /** @description Set what services the schedule should be connected to. */
        // @ApiMember(Description="Set what services the schedule should be connected to.")
        /** @var array<AddScheduleService>|null */
        public ?array $Services=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Id'])) $this->Id = $o['Id'];
        if (isset($o['CompanyId'])) $this->CompanyId = $o['CompanyId'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Active'])) $this->Active = $o['Active'];
        if (isset($o['TimeInterval'])) $this->TimeInterval = $o['TimeInterval'];
        if (isset($o['EnableBookingUntilClosingTime'])) $this->EnableBookingUntilClosingTime = $o['EnableBookingUntilClosingTime'];
        if (isset($o['ValidFrom'])) $this->ValidFrom = JsonConverters::from('DateTime', $o['ValidFrom']);
        if (isset($o['ValidTo'])) $this->ValidTo = JsonConverters::from('DateTime', $o['ValidTo']);
        if (isset($o['StartTime'])) $this->StartTime = JsonConverters::from('TimeSpan', $o['StartTime']);
        if (isset($o['EndTime'])) $this->EndTime = JsonConverters::from('TimeSpan', $o['EndTime']);
        if (isset($o['NumberOfScheduleDays'])) $this->NumberOfScheduleDays = $o['NumberOfScheduleDays'];
        if (isset($o['DaysOfWeek'])) $this->DaysOfWeek = JsonConverters::fromArray('int', $o['DaysOfWeek']);
        if (isset($o['ScheduleDates'])) $this->ScheduleDates = JsonConverters::fromArray('AddRecurringScheduleDate', $o['ScheduleDates']);
        if (isset($o['Exceptions'])) $this->Exceptions = JsonConverters::fromArray('ScheduleException', $o['Exceptions']);
        if (isset($o['Resources'])) $this->Resources = JsonConverters::fromArray('AddScheduleResource', $o['Resources']);
        if (isset($o['Services'])) $this->Services = JsonConverters::fromArray('AddScheduleService', $o['Services']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Id)) $o['Id'] = $this->Id;
        if (isset($this->CompanyId)) $o['CompanyId'] = $this->CompanyId;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Active)) $o['Active'] = $this->Active;
        if (isset($this->TimeInterval)) $o['TimeInterval'] = $this->TimeInterval;
        if (isset($this->EnableBookingUntilClosingTime)) $o['EnableBookingUntilClosingTime'] = $this->EnableBookingUntilClosingTime;
        if (isset($this->ValidFrom)) $o['ValidFrom'] = JsonConverters::to('DateTime', $this->ValidFrom);
        if (isset($this->ValidTo)) $o['ValidTo'] = JsonConverters::to('DateTime', $this->ValidTo);
        if (isset($this->StartTime)) $o['StartTime'] = JsonConverters::to('TimeSpan', $this->StartTime);
        if (isset($this->EndTime)) $o['EndTime'] = JsonConverters::to('TimeSpan', $this->EndTime);
        if (isset($this->NumberOfScheduleDays)) $o['NumberOfScheduleDays'] = $this->NumberOfScheduleDays;
        if (isset($this->DaysOfWeek)) $o['DaysOfWeek'] = JsonConverters::toArray('int', $this->DaysOfWeek);
        if (isset($this->ScheduleDates)) $o['ScheduleDates'] = JsonConverters::toArray('AddRecurringScheduleDate', $this->ScheduleDates);
        if (isset($this->Exceptions)) $o['Exceptions'] = JsonConverters::toArray('ScheduleException', $this->Exceptions);
        if (isset($this->Resources)) $o['Resources'] = JsonConverters::toArray('AddScheduleResource', $this->Resources);
        if (isset($this->Services)) $o['Services'] = JsonConverters::toArray('AddScheduleService', $this->Services);
        return empty($o) ? new class(){} : $o;
    }
}

PHP UpdateRecurringSchedule DTOs

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

HTTP + OTHER

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

PUT /schedules/recurring/{Id} HTTP/1.1 
Host: api.bokamera.se 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"Id":0,"CompanyId":"00000000-0000-0000-0000-000000000000","Name":"String","Description":"String","Active":false,"TimeInterval":0,"EnableBookingUntilClosingTime":false,"ValidFrom":"0001-01-01T00:00:00","ValidTo":"0001-01-01T00:00:00","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/jsonl
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"}}}