Skip to content

Extension and action examples

Use the action functions with records and Data objects supplied by your application. They pass each argument to the package operation and return its result.

These adapters show container registration. Use the owning package registry when a contract requires contributor discovery.

Contract adapters wrap an existing implementation. Call their registration function from your service provider with that implementation; tagged contracts keep their declared tag. Resolve the backend by its concrete class before registration so the replacement contract does not resolve itself. Static contract metadata uses one backend class per adapter.

Contract Capell\Bookings\Contracts\BookingMessageChannel

Section titled “Contract Capell\Bookings\Contracts\BookingMessageChannel”
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
final class BookingMessageChannelAdapter implements \Capell\Bookings\Contracts\BookingMessageChannel
{
public function __construct(private readonly \Capell\Bookings\Contracts\BookingMessageChannel $backend) {}
#[\Override]
public function send(\Capell\Bookings\Data\BookingMessageData $messageData): \Capell\Bookings\Data\BookingMessageResultData
{
return $this->backend->send($messageData);
}
}
function registerBookingMessageChannelAdapter(\Capell\Bookings\Contracts\BookingMessageChannel $backend): void
{
app()->bind(BookingMessageChannelAdapter::class, static fn (): BookingMessageChannelAdapter => new BookingMessageChannelAdapter($backend));
app()->bind(\Capell\Bookings\Contracts\BookingMessageChannel::class, BookingMessageChannelAdapter::class);
}

Contract Capell\Bookings\Contracts\BookingsAiAdvisor

Section titled “Contract Capell\Bookings\Contracts\BookingsAiAdvisor”
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
final class BookingsAiAdvisorAdapter implements \Capell\Bookings\Contracts\BookingsAiAdvisor
{
public function __construct(private readonly \Capell\Bookings\Contracts\BookingsAiAdvisor $backend) {}
#[\Override]
public function advise(string $task, array $context): array
{
return $this->backend->advise($task, $context);
}
}
function registerBookingsAiAdvisorAdapter(\Capell\Bookings\Contracts\BookingsAiAdvisor $backend): void
{
app()->bind(BookingsAiAdvisorAdapter::class, static fn (): BookingsAiAdvisorAdapter => new BookingsAiAdvisorAdapter($backend));
app()->bind(\Capell\Bookings\Contracts\BookingsAiAdvisor::class, BookingsAiAdvisorAdapter::class);
}

Contract Capell\Bookings\Contracts\PublicBookingRequestRenderer

Section titled “Contract Capell\Bookings\Contracts\PublicBookingRequestRenderer”
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
final class PublicBookingRequestRendererAdapter implements \Capell\Bookings\Contracts\PublicBookingRequestRenderer
{
public function __construct(private readonly \Capell\Bookings\Contracts\PublicBookingRequestRenderer $backend) {}
#[\Override]
public function render(\Illuminate\Http\Request $request): \Symfony\Component\HttpFoundation\Response
{
return $this->backend->render($request);
}
}
function registerPublicBookingRequestRendererAdapter(\Capell\Bookings\Contracts\PublicBookingRequestRenderer $backend): void
{
app()->bind(PublicBookingRequestRendererAdapter::class, static fn (): PublicBookingRequestRendererAdapter => new PublicBookingRequestRendererAdapter($backend));
app()->bind(\Capell\Bookings\Contracts\PublicBookingRequestRenderer::class, PublicBookingRequestRendererAdapter::class);
}

Contract Capell\Bookings\Contracts\SocialEventProvider

Section titled “Contract Capell\Bookings\Contracts\SocialEventProvider”
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
final class SocialEventProviderAdapter implements \Capell\Bookings\Contracts\SocialEventProvider
{
public function __construct(private readonly \Capell\Bookings\Contracts\SocialEventProvider $backend) {}
#[\Override]
public function publishGroupSession(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $copy): array
{
return $this->backend->publishGroupSession($groupSession, $copy);
}
#[\Override]
public function syncAttendance(\Capell\Bookings\Models\BookingGroupSession $groupSession): array
{
return $this->backend->syncAttendance($groupSession);
}
}
function registerSocialEventProviderAdapter(\Capell\Bookings\Contracts\SocialEventProvider $backend): void
{
app()->bind(SocialEventProviderAdapter::class, static fn (): SocialEventProviderAdapter => new SocialEventProviderAdapter($backend));
app()->bind(\Capell\Bookings\Contracts\SocialEventProvider::class, SocialEventProviderAdapter::class);
}

Contract Capell\Bookings\Contracts\TravelTimeProvider

Section titled “Contract Capell\Bookings\Contracts\TravelTimeProvider”
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
final class TravelTimeProviderAdapter implements \Capell\Bookings\Contracts\TravelTimeProvider
{
public function __construct(private readonly \Capell\Bookings\Contracts\TravelTimeProvider $backend) {}
#[\Override]
public function estimate(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, ?\Carbon\CarbonImmutable $departAt = null): \Capell\Bookings\Data\TravelEstimateData
{
return $this->backend->estimate($origin, $destination, $departAt);
}
}
function registerTravelTimeProviderAdapter(\Capell\Bookings\Contracts\TravelTimeProvider $backend): void
{
app()->bind(TravelTimeProviderAdapter::class, static fn (): TravelTimeProviderAdapter => new TravelTimeProviderAdapter($backend));
app()->bind(\Capell\Bookings\Contracts\TravelTimeProvider::class, TravelTimeProviderAdapter::class);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runAddReviewParticipant(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, string $role, ?string $name = null, ?string $email = null, bool $required = true, ?int $portalAccountId = null, array $meta = []): \Capell\Bookings\Models\BookingReviewParticipant
{
return \Capell\Bookings\Actions\AddReviewParticipantAction::run($reviewRequest, $role, $name, $email, $required, $portalAccountId, $meta);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runApplyLessonBundleCredit(\Capell\Bookings\Models\BookingLessonBundle $bundle, \Capell\Bookings\Models\AppointmentRequest $appointmentRequest): \Capell\Bookings\Models\BookingLessonBundle
{
return \Capell\Bookings\Actions\ApplyLessonBundleCreditAction::run($bundle, $appointmentRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runAssignGroupSlotTimes(\Capell\Bookings\Models\BookingGroupSession $groupSession): int
{
return \Capell\Bookings\Actions\AssignGroupSlotTimesAction::run($groupSession);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runAttachLessonPhoto(\Capell\Bookings\Models\LessonNote $lessonNote, int $mediaId, ?\Illuminate\Database\Eloquent\Model $portalAccount = null): \Capell\Bookings\Models\LessonNote
{
return \Capell\Bookings\Actions\AttachLessonPhotoAction::run($lessonNote, $mediaId, $portalAccount);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildAvailableBookingSlots(?int $serviceId = null, ?int $staffMemberId = null, ?int $locationId = null, ?string $timezone = null, ?\Carbon\CarbonImmutable $from = null, int $days = 14, ?int $siteId = null): array
{
return \Capell\Bookings\Actions\BuildAvailableBookingSlotsAction::run($serviceId, $staffMemberId, $locationId, $timezone, $from, $days, $siteId);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildDayPlan(int $staffMemberId, \Carbon\CarbonImmutable $date): \Capell\Bookings\Data\DayPlanData
{
return \Capell\Bookings\Actions\BuildDayPlanAction::run($staffMemberId, $date);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildInstructorFuelReport(?int $staffMemberId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $until = null): array
{
return \Capell\Bookings\Actions\BuildInstructorFuelReportAction::run($staffMemberId, $from, $until);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildOwnerDigest(?int $siteId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $to = null): array
{
return \Capell\Bookings\Actions\BuildOwnerDigestAction::run($siteId, $from, $to);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildPortalLessonRows(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): \Illuminate\Support\Collection
{
return \Capell\Bookings\Actions\BuildPortalLessonRowsAction::run($siteId, $portalAccount);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildPublicBookingRequestOptions(): array
{
return \Capell\Bookings\Actions\BuildPublicBookingRequestOptionsAction::run();
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildPublicBookingRequestProps(\Illuminate\Http\Request $request, bool $lazySlots = true): array
{
return \Capell\Bookings\Actions\BuildPublicBookingRequestPropsAction::run($request, $lazySlots);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildServiceAreaHeatmap(?int $siteId = null): array
{
return \Capell\Bookings\Actions\BuildServiceAreaHeatmapAction::run($siteId);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildStaffCalendarFeed(\Capell\Bookings\Models\BookingStaffMember $staffMember): string
{
return \Capell\Bookings\Actions\BuildStaffCalendarFeedAction::run($staffMember);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCalculateCancellationFee(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?\Carbon\CarbonImmutable $cancelledAt = null): int
{
return \Capell\Bookings\Actions\CalculateCancellationFeeAction::run($appointmentRequest, $cancelledAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCalculateFuelAllowance(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, float $distanceMiles): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\CalculateFuelAllowanceAction::run($appointmentRequest, $distanceMiles);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCancelAppointmentRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?string $reason = null): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\CancelAppointmentRequestAction::run($appointmentRequest, $reason);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCaptureMessagingConsent(\Illuminate\Database\Eloquent\Model $portalAccount, \Capell\Bookings\Enums\BookingMessageChannelEnum $channel, bool $granted, ?string $recipient = null, array $evidence = []): \Capell\Bookings\Models\MessagingConsent
{
return \Capell\Bookings\Actions\CaptureMessagingConsentAction::run($portalAccount, $channel, $granted, $recipient, $evidence);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCaptureReviewParticipantResponse(\Capell\Bookings\Models\BookingReviewParticipant $reviewParticipant, string $token, int $rating, ?string $response = null): \Capell\Bookings\Models\BookingReviewParticipant
{
return \Capell\Bookings\Actions\CaptureReviewParticipantResponseAction::run($reviewParticipant, $token, $rating, $response);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCompleteReviewLoopIfReady(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest): \Capell\Bookings\Models\BookingReviewRequest
{
return \Capell\Bookings\Actions\CompleteReviewLoopIfReadyAction::run($reviewRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runConfirmAppointmentRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\ConfirmAppointmentRequestAction::run($appointmentRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runConfirmBookingChange(\Capell\Bookings\Models\BookingChangeProposal $proposal, string $party, bool $accepted): \Capell\Bookings\Models\BookingChangeProposal
{
return \Capell\Bookings\Actions\ConfirmBookingChangeAction::run($proposal, $party, $accepted);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateAppointmentRequest(\Capell\Bookings\Data\AppointmentRequestData $appointmentRequestData): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\CreateAppointmentRequestAction::run($appointmentRequestData);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateAvailabilityException(\Capell\Bookings\Data\AvailabilityExceptionData $availabilityExceptionData): \Capell\Bookings\Models\BookingAvailabilityException
{
return \Capell\Bookings\Actions\CreateAvailabilityExceptionAction::run($availabilityExceptionData);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateGroupSession(int $serviceId, string $title, \Carbon\CarbonImmutable $startsAt, \Carbon\CarbonImmutable $endsAt, ?int $siteId = null, ?int $staffMemberId = null, ?int $locationId = null, ?int $capacity = null, ?int $feePence = null, ?string $description = null): \Capell\Bookings\Models\BookingGroupSession
{
return \Capell\Bookings\Actions\CreateGroupSessionAction::run($serviceId, $title, $startsAt, $endsAt, $siteId, $staffMemberId, $locationId, $capacity, $feePence, $description);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateMessagingConsentUrl(\Illuminate\Database\Eloquent\Model $portalAccount, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
return \Capell\Bookings\Actions\CreateMessagingConsentUrlAction::run($portalAccount, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreatePortalAccessToken(\Illuminate\Database\Eloquent\Model $portalAccount): string
{
return \Capell\Bookings\Actions\CreatePortalAccessTokenAction::run($portalAccount);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreatePortalLessonsUrl(\Illuminate\Database\Eloquent\Model $portalAccount, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
return \Capell\Bookings\Actions\CreatePortalLessonsUrlAction::run($portalAccount, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateReviewLoop(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, array $participants = []): \Capell\Bookings\Models\BookingReviewRequest
{
return \Capell\Bookings\Actions\CreateReviewLoopAction::run($reviewRequest, $participants);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateReviewRequestUrl(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
return \Capell\Bookings\Actions\CreateReviewRequestUrlAction::run($reviewRequest, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateStaffCalendarFeedUrl(\Capell\Bookings\Models\BookingStaffMember $staffMember): string
{
return \Capell\Bookings\Actions\CreateStaffCalendarFeedUrlAction::run($staffMember);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runDispatchBookingMessage(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Capell\Bookings\Enums\BookingMessageChannelEnum $channel, string $type, string $body, ?string $subject = null, ?\Carbon\CarbonImmutable $sendAt = null, ?string $recipient = null, array $context = []): \Capell\Bookings\Models\BookingMessageLog
{
return \Capell\Bookings\Actions\DispatchBookingMessageAction::run($appointmentRequest, $channel, $type, $body, $subject, $sendAt, $recipient, $context);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runDispatchDueBookingMessages(?\Carbon\CarbonImmutable $now = null, ?int $leadMinutes = null, int $limit = 100): int
{
return \Capell\Bookings\Actions\DispatchDueBookingMessagesAction::run($now, $leadMinutes, $limit);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runDispatchReviewRequest(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest): \Capell\Bookings\Models\BookingReviewRequest
{
return \Capell\Bookings\Actions\DispatchReviewRequestAction::run($reviewRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runEnforceWorkZone(\Capell\Bookings\Models\BookingLocation $location): bool
{
return \Capell\Bookings\Actions\EnforceWorkZoneAction::run($location);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runErasePortalBookingData(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): int
{
return \Capell\Bookings\Actions\ErasePortalBookingDataAction::run($siteId, $portalAccount);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runEstimateTravelTime(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, ?\Carbon\CarbonImmutable $departAt = null): \Capell\Bookings\Data\TravelEstimateData
{
return \Capell\Bookings\Actions\EstimateTravelTimeAction::run($origin, $destination, $departAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runExpireStaleHolds(?\Carbon\CarbonImmutable $now = null): int
{
return \Capell\Bookings\Actions\ExpireStaleHoldsAction::run($now);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runExpireWaitlistOffers(?\Carbon\CarbonImmutable $now = null): int
{
return \Capell\Bookings\Actions\ExpireWaitlistOffersAction::run($now);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runExportPortalBookingData(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): array
{
return \Capell\Bookings\Actions\ExportPortalBookingDataAction::run($siteId, $portalAccount);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runImportClinicAttendanceCsv(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $csv): \Capell\Bookings\Models\BookingGroupSession
{
return \Capell\Bookings\Actions\ImportClinicAttendanceCsvAction::run($groupSession, $csv);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runIssueBookingChangeProposalToken(\Capell\Bookings\Models\BookingChangeProposalParty $proposalParty, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
return \Capell\Bookings\Actions\IssueBookingChangeProposalTokenAction::run($proposalParty, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runIssueReviewParticipantUrl(\Capell\Bookings\Models\BookingReviewParticipant $reviewParticipant, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
return \Capell\Bookings\Actions\IssueReviewParticipantUrlAction::run($reviewParticipant, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runJoinBookingWaitlist(string $customerName, string $customerEmail, ?int $siteId = null, ?int $serviceId = null, ?int $staffMemberId = null, ?int $locationId = null, ?int $portalAccountId = null, ?string $customerPhone = null, ?\Carbon\CarbonImmutable $preferredStartsAt = null, ?\Carbon\CarbonImmutable $preferredEndsAt = null, array $preferences = []): \Capell\Bookings\Models\BookingWaitlistEntry
{
return \Capell\Bookings\Actions\JoinBookingWaitlistAction::run($customerName, $customerEmail, $siteId, $serviceId, $staffMemberId, $locationId, $portalAccountId, $customerPhone, $preferredStartsAt, $preferredEndsAt, $preferences);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runLinkBookingToPortalAccount(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Illuminate\Database\Eloquent\Model $portalAccount, \Illuminate\Contracts\Auth\Authenticatable $user): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\LinkBookingToPortalAccountAction::run($appointmentRequest, $portalAccount, $user);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runMarkBookingPaymentFulfilled(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $providerReference, int $amountPence, ?string $checkoutSessionId = null): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\MarkBookingPaymentFulfilledAction::run($appointmentRequest, $providerReference, $amountPence, $checkoutSessionId);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runMarkBookingWebhookEventProcessed(\Capell\Bookings\Models\BookingWebhookEvent $webhookEvent, string $status = 'processed'): \Capell\Bookings\Models\BookingWebhookEvent
{
return \Capell\Bookings\Actions\MarkBookingWebhookEventProcessedAction::run($webhookEvent, $status);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runMaterialiseLessonSeries(\Capell\Bookings\Models\LessonSeries $lessonSeries, \Carbon\CarbonImmutable $through): \Illuminate\Support\Collection
{
return \Capell\Bookings\Actions\MaterialiseLessonSeriesAction::run($lessonSeries, $through);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runOfferWaitlistSlot(\Capell\Bookings\Models\BookingWaitlistEntry $entry, \Carbon\CarbonImmutable $offerExpiresAt, ?\Carbon\CarbonImmutable $offeredAt = null): \Capell\Bookings\Models\BookingWaitlistEntry
{
return \Capell\Bookings\Actions\OfferWaitlistSlotAction::run($entry, $offerExpiresAt, $offeredAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runOptimizeDayPlan(int $staffMemberId, \Carbon\CarbonImmutable $date): \Capell\Bookings\Data\DayPlanData
{
return \Capell\Bookings\Actions\OptimizeDayPlanAction::run($staffMemberId, $date);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runPlaceProvisionalHold(\Capell\Bookings\Data\AppointmentRequestData $appointmentRequestData, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\PlaceProvisionalHoldAction::run($appointmentRequestData, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runProposeBookingChange(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Carbon\CarbonImmutable $startsAt, \Carbon\CarbonImmutable $endsAt, ?string $reason = null, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\BookingChangeProposal
{
return \Capell\Bookings\Actions\ProposeBookingChangeAction::run($appointmentRequest, $startsAt, $endsAt, $reason, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runProposeScheduleOptimisation(?int $siteId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $to = null): \Capell\Bookings\Models\BookingOwnerPrompt
{
return \Capell\Bookings\Actions\ProposeScheduleOptimisationAction::run($siteId, $from, $to);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runProposeTravelAdjustment(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, int $extraMinutes, ?string $reason = null, ?\Carbon\CarbonImmutable $effectiveFrom = null, ?\Carbon\CarbonImmutable $effectiveUntil = null): \Capell\Bookings\Models\BookingTravelAdjustment
{
return \Capell\Bookings\Actions\ProposeTravelAdjustmentAction::run($origin, $destination, $extraMinutes, $reason, $effectiveFrom, $effectiveUntil);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runProposeWeatherCancellation(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $reason, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\BookingOwnerPrompt
{
return \Capell\Bookings\Actions\ProposeWeatherCancellationAction::run($appointmentRequest, $reason, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runPruneBookingRetentionData(?\Carbon\CarbonImmutable $now = null): array
{
return \Capell\Bookings\Actions\PruneBookingRetentionDataAction::run($now);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runPublishClinicToFacebook(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $copy): \Capell\Bookings\Models\BookingGroupSession
{
return \Capell\Bookings\Actions\PublishClinicToFacebookAction::run($groupSession, $copy);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runQueueAppointmentReminder(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?\Carbon\CarbonImmutable $sendAt = null): void
{
\Capell\Bookings\Actions\QueueAppointmentReminderAction::run($appointmentRequest, $sendAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRecordBookingWebhookEvent(string $provider, string $providerEventId, string $type, array $payload = []): \Capell\Bookings\Models\BookingWebhookEvent
{
return \Capell\Bookings\Actions\RecordBookingWebhookEventAction::run($provider, $providerEventId, $type, $payload);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRecordLessonNote(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $summary, ?string $body = null, \Capell\Bookings\Enums\LessonNoteVisibilityEnum $visibility = \Capell\Bookings\Enums\LessonNoteVisibilityEnum::Private, ?\Illuminate\Database\Eloquent\Model $portalAccount = null, ?\Carbon\CarbonImmutable $occurredAt = null): \Capell\Bookings\Models\LessonNote
{
return \Capell\Bookings\Actions\RecordLessonNoteAction::run($appointmentRequest, $summary, $body, $visibility, $portalAccount, $occurredAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRecordLessonSkillAssessment(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $skill, \Capell\Bookings\Enums\BookingLessonSkillStatusEnum $status, ?int $confidence = null, ?string $notes = null, array $meta = []): \Capell\Bookings\Models\BookingLessonSkillAssessment
{
return \Capell\Bookings\Actions\RecordLessonSkillAssessmentAction::run($appointmentRequest, $skill, $status, $confidence, $notes, $meta);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRecordTravelObservation(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, int $durationMinutes, float $distanceMiles = 0.0, string $source = 'observed', ?\Carbon\CarbonImmutable $observedAt = null): \Capell\Bookings\Models\BookingTravelObservation
{
return \Capell\Bookings\Actions\RecordTravelObservationAction::run($origin, $destination, $durationMinutes, $distanceMiles, $source, $observedAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRegisterGroupAttendee(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $customerName, string $customerEmail, ?int $portalAccountId = null, ?string $customerPhone = null): \Capell\Bookings\Models\AppointmentRequest
{
return \Capell\Bookings\Actions\RegisterGroupAttendeeAction::run($groupSession, $customerName, $customerEmail, $portalAccountId, $customerPhone);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runRemindPendingReviewParticipants(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, ?\Carbon\CarbonImmutable $expiresAt = null): array
{
return \Capell\Bookings\Actions\RemindPendingReviewParticipantsAction::run($reviewRequest, $expiresAt);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolveBookingChangeProposalToken(\Capell\Bookings\Models\BookingChangeProposalParty|string $proposalParty, ?string $token = null): \Capell\Bookings\Models\BookingChangeProposalParty
{
return \Capell\Bookings\Actions\ResolveBookingChangeProposalTokenAction::run($proposalParty, $token);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolvePortalAccessToken(string $portalToken): array
{
return \Capell\Bookings\Actions\ResolvePortalAccessTokenAction::run($portalToken);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolveReviewParticipantToken(\Capell\Bookings\Models\BookingReviewParticipant|string $reviewParticipant, ?string $token = null): \Capell\Bookings\Models\BookingReviewParticipant
{
return \Capell\Bookings\Actions\ResolveReviewParticipantTokenAction::run($reviewParticipant, $token);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolveReviewRequestToken(string $token): \Capell\Bookings\Models\BookingReviewRequest
{
return \Capell\Bookings\Actions\ResolveReviewRequestTokenAction::run($token);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runScheduleReviewRequests(?\Carbon\CarbonImmutable $now = null): int
{
return \Capell\Bookings\Actions\ScheduleReviewRequestsAction::run($now);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runScoreBookingRisk(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): array
{
return \Capell\Bookings\Actions\ScoreBookingRiskAction::run($appointmentRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runShouldSuppressReviewRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): bool
{
return \Capell\Bookings\Actions\ShouldSuppressReviewRequestAction::run($appointmentRequest);
}
<?php
declare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runSyncFacebookAttendance(\Capell\Bookings\Models\BookingGroupSession $groupSession): \Capell\Bookings\Models\BookingGroupSession
{
return \Capell\Bookings\Actions\SyncFacebookAttendanceAction::run($groupSession);
}