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”<?phpdeclare(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”<?phpdeclare(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”<?phpdeclare(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”<?phpdeclare(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”<?phpdeclare(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);}Action addReviewParticipant
Section titled “Action addReviewParticipant”<?phpdeclare(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);}Action applyLessonBundleCredit
Section titled “Action applyLessonBundleCredit”<?phpdeclare(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);}Action assignGroupSlotTimes
Section titled “Action assignGroupSlotTimes”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runAssignGroupSlotTimes(\Capell\Bookings\Models\BookingGroupSession $groupSession): int{ return \Capell\Bookings\Actions\AssignGroupSlotTimesAction::run($groupSession);}Action attachLessonPhoto
Section titled “Action attachLessonPhoto”<?phpdeclare(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);}Action buildAvailableBookingSlots
Section titled “Action buildAvailableBookingSlots”<?phpdeclare(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);}Action buildDayPlan
Section titled “Action buildDayPlan”<?phpdeclare(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);}Action buildInstructorFuelReport
Section titled “Action buildInstructorFuelReport”<?phpdeclare(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);}Action buildOwnerDigest
Section titled “Action buildOwnerDigest”<?phpdeclare(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);}Action buildPortalLessonRows
Section titled “Action buildPortalLessonRows”<?phpdeclare(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);}Action buildPublicBookingRequestOptions
Section titled “Action buildPublicBookingRequestOptions”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildPublicBookingRequestOptions(): array{ return \Capell\Bookings\Actions\BuildPublicBookingRequestOptionsAction::run();}Action buildPublicBookingRequestProps
Section titled “Action buildPublicBookingRequestProps”<?phpdeclare(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);}Action buildServiceAreaHeatmap
Section titled “Action buildServiceAreaHeatmap”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildServiceAreaHeatmap(?int $siteId = null): array{ return \Capell\Bookings\Actions\BuildServiceAreaHeatmapAction::run($siteId);}Action buildStaffCalendarFeed
Section titled “Action buildStaffCalendarFeed”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runBuildStaffCalendarFeed(\Capell\Bookings\Models\BookingStaffMember $staffMember): string{ return \Capell\Bookings\Actions\BuildStaffCalendarFeedAction::run($staffMember);}Action calculateCancellationFee
Section titled “Action calculateCancellationFee”<?phpdeclare(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);}Action calculateFuelAllowance
Section titled “Action calculateFuelAllowance”<?phpdeclare(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);}Action cancelAppointmentRequest
Section titled “Action cancelAppointmentRequest”<?phpdeclare(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);}Action captureMessagingConsent
Section titled “Action captureMessagingConsent”<?phpdeclare(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);}Action captureReviewParticipantResponse
Section titled “Action captureReviewParticipantResponse”<?phpdeclare(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);}Action completeReviewLoopIfReady
Section titled “Action completeReviewLoopIfReady”<?phpdeclare(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);}Action confirmAppointmentRequest
Section titled “Action confirmAppointmentRequest”<?phpdeclare(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);}Action confirmBookingChange
Section titled “Action confirmBookingChange”<?phpdeclare(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);}Action createAppointmentRequest
Section titled “Action createAppointmentRequest”<?phpdeclare(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);}Action createAvailabilityException
Section titled “Action createAvailabilityException”<?phpdeclare(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);}Action createGroupSession
Section titled “Action createGroupSession”<?phpdeclare(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);}Action createMessagingConsentUrl
Section titled “Action createMessagingConsentUrl”<?phpdeclare(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);}Action createPortalAccessToken
Section titled “Action createPortalAccessToken”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreatePortalAccessToken(\Illuminate\Database\Eloquent\Model $portalAccount): string{ return \Capell\Bookings\Actions\CreatePortalAccessTokenAction::run($portalAccount);}Action createPortalLessonsUrl
Section titled “Action createPortalLessonsUrl”<?phpdeclare(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);}Action createReviewLoop
Section titled “Action createReviewLoop”<?phpdeclare(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);}Action createReviewRequestUrl
Section titled “Action createReviewRequestUrl”<?phpdeclare(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);}Action createStaffCalendarFeedUrl
Section titled “Action createStaffCalendarFeedUrl”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runCreateStaffCalendarFeedUrl(\Capell\Bookings\Models\BookingStaffMember $staffMember): string{ return \Capell\Bookings\Actions\CreateStaffCalendarFeedUrlAction::run($staffMember);}Action dispatchBookingMessage
Section titled “Action dispatchBookingMessage”<?phpdeclare(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);}Action dispatchDueBookingMessages
Section titled “Action dispatchDueBookingMessages”<?phpdeclare(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);}Action dispatchReviewRequest
Section titled “Action dispatchReviewRequest”<?phpdeclare(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);}Action enforceWorkZone
Section titled “Action enforceWorkZone”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runEnforceWorkZone(\Capell\Bookings\Models\BookingLocation $location): bool{ return \Capell\Bookings\Actions\EnforceWorkZoneAction::run($location);}Action erasePortalBookingData
Section titled “Action erasePortalBookingData”<?phpdeclare(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);}Action estimateTravelTime
Section titled “Action estimateTravelTime”<?phpdeclare(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);}Action expireStaleHolds
Section titled “Action expireStaleHolds”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runExpireStaleHolds(?\Carbon\CarbonImmutable $now = null): int{ return \Capell\Bookings\Actions\ExpireStaleHoldsAction::run($now);}Action expireWaitlistOffers
Section titled “Action expireWaitlistOffers”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runExpireWaitlistOffers(?\Carbon\CarbonImmutable $now = null): int{ return \Capell\Bookings\Actions\ExpireWaitlistOffersAction::run($now);}Action exportPortalBookingData
Section titled “Action exportPortalBookingData”<?phpdeclare(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);}Action importClinicAttendanceCsv
Section titled “Action importClinicAttendanceCsv”<?phpdeclare(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);}Action issueBookingChangeProposalToken
Section titled “Action issueBookingChangeProposalToken”<?phpdeclare(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);}Action issueReviewParticipantUrl
Section titled “Action issueReviewParticipantUrl”<?phpdeclare(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);}Action joinBookingWaitlist
Section titled “Action joinBookingWaitlist”<?phpdeclare(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);}Action linkBookingToPortalAccount
Section titled “Action linkBookingToPortalAccount”<?phpdeclare(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);}Action markBookingPaymentFulfilled
Section titled “Action markBookingPaymentFulfilled”<?phpdeclare(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);}Action markBookingWebhookEventProcessed
Section titled “Action markBookingWebhookEventProcessed”<?phpdeclare(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);}Action materialiseLessonSeries
Section titled “Action materialiseLessonSeries”<?phpdeclare(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);}Action offerWaitlistSlot
Section titled “Action offerWaitlistSlot”<?phpdeclare(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);}Action optimizeDayPlan
Section titled “Action optimizeDayPlan”<?phpdeclare(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);}Action placeProvisionalHold
Section titled “Action placeProvisionalHold”<?phpdeclare(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);}Action proposeBookingChange
Section titled “Action proposeBookingChange”<?phpdeclare(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);}Action proposeScheduleOptimisation
Section titled “Action proposeScheduleOptimisation”<?phpdeclare(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);}Action proposeTravelAdjustment
Section titled “Action proposeTravelAdjustment”<?phpdeclare(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);}Action proposeWeatherCancellation
Section titled “Action proposeWeatherCancellation”<?phpdeclare(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);}Action pruneBookingRetentionData
Section titled “Action pruneBookingRetentionData”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runPruneBookingRetentionData(?\Carbon\CarbonImmutable $now = null): array{ return \Capell\Bookings\Actions\PruneBookingRetentionDataAction::run($now);}Action publishClinicToFacebook
Section titled “Action publishClinicToFacebook”<?phpdeclare(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);}Action queueAppointmentReminder
Section titled “Action queueAppointmentReminder”<?phpdeclare(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);}Action recordBookingWebhookEvent
Section titled “Action recordBookingWebhookEvent”<?phpdeclare(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);}Action recordLessonNote
Section titled “Action recordLessonNote”<?phpdeclare(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);}Action recordLessonSkillAssessment
Section titled “Action recordLessonSkillAssessment”<?phpdeclare(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);}Action recordTravelObservation
Section titled “Action recordTravelObservation”<?phpdeclare(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);}Action registerGroupAttendee
Section titled “Action registerGroupAttendee”<?phpdeclare(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);}Action remindPendingReviewParticipants
Section titled “Action remindPendingReviewParticipants”<?phpdeclare(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);}Action resolveBookingChangeProposalToken
Section titled “Action resolveBookingChangeProposalToken”<?phpdeclare(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);}Action resolvePortalAccessToken
Section titled “Action resolvePortalAccessToken”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolvePortalAccessToken(string $portalToken): array{ return \Capell\Bookings\Actions\ResolvePortalAccessTokenAction::run($portalToken);}Action resolveReviewParticipantToken
Section titled “Action resolveReviewParticipantToken”<?phpdeclare(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);}Action resolveReviewRequestToken
Section titled “Action resolveReviewRequestToken”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runResolveReviewRequestToken(string $token): \Capell\Bookings\Models\BookingReviewRequest{ return \Capell\Bookings\Actions\ResolveReviewRequestTokenAction::run($token);}Action scheduleReviewRequests
Section titled “Action scheduleReviewRequests”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runScheduleReviewRequests(?\Carbon\CarbonImmutable $now = null): int{ return \Capell\Bookings\Actions\ScheduleReviewRequestsAction::run($now);}Action scoreBookingRisk
Section titled “Action scoreBookingRisk”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runScoreBookingRisk(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): array{ return \Capell\Bookings\Actions\ScoreBookingRiskAction::run($appointmentRequest);}Action shouldSuppressReviewRequest
Section titled “Action shouldSuppressReviewRequest”<?phpdeclare(strict_types=1);
namespace App\CapellExamples\Bookings;
function runShouldSuppressReviewRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): bool{ return \Capell\Bookings\Actions\ShouldSuppressReviewRequestAction::run($appointmentRequest);}Action syncFacebookAttendance
Section titled “Action syncFacebookAttendance”<?phpdeclare(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);}