public function onCheckAppointmentCancellation(object $appointment) : bool

Fires while checking whether the cancellation is allowed for the specified appointment.


Description

This filter can be used to apply additional conditions to the cancellation restrictions.

When this hook is triggered, the system already validated the standard conditions and the cancellation has been approved for the usage.

In case of allowed cancellation, the page containing the order details will report a button to cancel the appointment.


Parameters

$reservation

(object)  An object containing the details of the appointment that is going to be cancelled.

Return Value

Boolean. Use false to deny the cancellation.


Example

The example below prevents the cancellation for those customers that never booked an appointment. In summary, the cancellation will be allowed starting from the second booking.

/**
 * This filter can be used to apply additional conditions to the 
 * cancellation restrictions. When this hook is triggered, the
 * system already validated the standard conditions and the
 * cancellation has been approved for the usage.
 *
 * @param   object   $appointment  The appointment to check.
 *
 * @return  boolean  Use false to deny the cancellation.
 */
public function onCheckAppointmentCancellation($appointment)
{
    if ($appointment->id_user <= 0)
    {
        // only registered user can request a cancellation
        return false;
    }

    $dbo = JFactory::getDbo();

    $q = $dbo->getQuery(true)
        ->select(1)
        ->from($dbo->qn('#__vikappointments_reservation'))
        // take only confirmed and paid appointments
        ->where($dbo->qn('status') . ' IN (\'C\', \'P\')')
        // make sure we have an appointment in the past
        ->where($dbo->qn('checkin_ts') . ' < ' . $dbo->q(JFactory::getDate()->toSql()))
        // take only the appointments assigned to this user
        ->andWhere(array(
            $dbo->qn('id_user') . ' = ' . $appointment->id_user,
            $dbo->qn('createdby') . ' = ' . $appointment->id_user,
        ), 'OR');

    $dbo->setQuery($q, 0, 1);
    $dbo->execute();

    // prevent cancellation in case of no existing appointments
    // assigned to this customer
    return $dbo->getNumRows() ? true : false;
}

Changelog

VersionDescription
1.7 Introduced.
Last Update: 2021-10-05 17:32
Helpful?