update($post_id); }); // Delete Records add_action('DayTidy/A__DayTidy/Posts/Booking__before_delete/before_delete', function($post_id) { (new BookingRecords())->delete($post_id); }); // Booking Added add_action('DayTidy/A__DayTidy/Booking/Booking__add/added', function($booking_id) { (new BookingRecords())->insert($booking_id); }); // Booking Pending add_action('DayTidy/A__DayTidy/Booking/Booking__pending/after', function($id) { (new BookingRecords())->pending($id); }); // Booking Confirm add_action('DayTidy/A__DayTidy/Booking/Booking__confirm/after', function($id) { (new BookingRecords())->confirm($id); }); // Booking Decline add_action('DayTidy/A__DayTidy/Booking/Booking__decline/after', function($id) { (new BookingRecords())->decline($id); }); // Booking Cancel add_action('DayTidy/A__DayTidy/Booking/Booking__cancel/after', function($id, $context = []) { if (is_array($context) && $this->isCancellationWorkflowSync((int) $id, $context)) return; (new BookingRecords())->cancel($id); }, 10, 2); // Booking Trash add_action('DayTidy/A__DayTidy/Booking/Booking__trash/after', function($id) { (new BookingRecords())->delete($id); }); add_action('DayTidy/A__DayTidy/Booking/StateService__transition/after', function($id, $dimension, $_current, $status, $context = []) { $this->syncStateTransition((int) $id, (string) $dimension, $status, is_array($context) ? $context : []); }, 10, 5); } /** * @param int|string $status * @param mixed[] $context */ private function syncStateTransition(int $id, string $dimension, $status, array $context = []): void { $records = new BookingRecords(); if ($dimension === StateService::DIMENSION_PAYMENT) { $payment_status = PaymentStatus::normalize((string) $status, ''); if ($payment_status !== '') $records->payment($id, $payment_status); return; } if ($dimension !== StateService::DIMENSION_BOOKING) return; if ((string) $status === BookingStatus::PENDING) $records->pending($id); else if ((string) $status === BookingStatus::CONFIRMED) $records->confirm($id); else if ((string) $status === BookingStatus::DECLINED) $records->decline($id); else if ((string) $status === BookingStatus::CANCELLED && !$this->isCancellationWorkflowSync($id, $context)) $records->cancel($id); else if ((string) $status === BookingStatus::COMPLETED) $records->complete($id); else if ((string) $status === BookingStatus::EXPIRED) $records->expire($id); else if ((string) $status === BookingStatus::FAILED) $records->fail($id); } /** * @param mixed[] $context */ private function isCancellationWorkflowSync(int $id, array $context): bool { return $id > 0 && (string) ($context[Cancellation::CONTEXT_RECORDS_SYNC_OWNER] ?? '') === Cancellation::RECORDS_SYNC_OWNER; } }