/home/edulekha/crm.edulekha.com/modules/appointly/views/tables/services.php
<?php defined('BASEPATH') or exit('No direct script access allowed');
$aColumns = [
'name',
'description',
'duration',
'price',
'color',
'active',
'id'
];
$sIndexColumn = 'id';
$sTable = db_prefix() . 'appointly_services';
$result = data_tables_init($aColumns, $sIndexColumn, $sTable);
$output = $result['output'];
$rResult = $result['rResult'];
$output['aaData'] = [];
foreach ($rResult as $aRow) {
$row = [];
// Name column with color and description
$nameColumn = '<div class="tw-flex tw-items-center tw-space-x-2">';
$nameColumn .= '<span class="tw-w-4 tw-h-4 tw-rounded" style="background-color: ' . $aRow['color'] . '"></span>';
$nameColumn .= '<div>';
$nameColumn .= '<a href="' . admin_url('appointly/services/service/' . $aRow['id']) . '" class="tw-font-medium">' . $aRow['name'] . '</a>';
if (!empty($aRow['description'])) {
$nameColumn .= '<div class="tw-text-neutral-500 tw-text-xs">' . substr($aRow['description'], 0, 100) . (strlen($aRow['description']) > 100 ? '...' : '') . '</div>';
}
$nameColumn .= '</div>';
$nameColumn .= '</div>';
$row[] = $nameColumn;
// Duration
$row[] = $aRow['duration'];
// Price
$row[] = app_format_money($aRow['price'], get_base_currency());
// Staff members - Query the service_staff table
$staff_names = [];
// Get providers from service_staff table
$this->ci->db->select('s.staffid, s.firstname, s.lastname');
$this->ci->db->from(db_prefix() . 'appointly_service_staff ss');
$this->ci->db->join(db_prefix() . 'staff s', 's.staffid = ss.staff_id', 'left');
$this->ci->db->where('ss.service_id', $aRow['id']);
$this->ci->db->where('ss.is_provider', 1);
$staff_query = $this->ci->db->get();
if ($staff_query && $staff_query->num_rows() > 0) {
foreach ($staff_query->result() as $staff) {
$staff_names[] = '<a href="' . admin_url('staff/profile/' . $staff->staffid) . '" target="_blank" class="tw-inline-block tw-bg-neutral-100 tw-rounded tw-px-2 tw-py-1 tw-text-sm tw-mr-1 tw-mb-1">'
. htmlspecialchars($staff->firstname . ' ' . $staff->lastname)
. '</a>';
}
}
$row[] = !empty($staff_names) ? implode(' ', $staff_names) : '<span class="tw-text-neutral-400">' . _l('service_no_providers') . '</span>';
// Check if the service is in use
$this->ci->db->select('a.id');
$this->ci->db->from(db_prefix() . 'appointly_appointments a');
$this->ci->db->join(db_prefix() . 'appointly_appointment_services aps', 'a.id = aps.appointment_id', 'inner');
$this->ci->db->where('aps.service_id', $aRow['id']);
$this->ci->db->where('a.status !=', 'cancelled');
$this->ci->db->where('a.status !=', 'completed');
$is_service_in_use = $this->ci->db->get()->num_rows() > 0;
// Active status with toggle switch
$toggleChecked = $aRow['active'] ? 'checked' : '';
$toggleDisabled = $is_service_in_use ? 'data-service-in-use="1"' : '';
$row[] = '<div class="onoffswitch">' .
'<input type="checkbox" data-switch-url="' . admin_url() . 'appointly/services/change_status" ' .
'name="onoffswitch" class="onoffswitch-checkbox" ' .
'id="s_' . $aRow['id'] . '" data-id="' . $aRow['id'] . '" ' . $toggleChecked . ' ' . $toggleDisabled . '>' .
'<label class="onoffswitch-label" for="s_' . $aRow['id'] . '"></label>' .
'</div>';
// Options
$options = '<div class="tw-flex tw-items-center tw-space-x-3">';
$options .= '<a href="' . admin_url('appointly/services/service/' . $aRow['id']) . '" ' .
'class="tw-text-neutral-500 hover:tw-text-neutral-700 focus:tw-text-neutral-700">' .
'<i class="fa-regular fa-pen-to-square fa-lg"></i>' .
'</a>';
// Only show delete button if service is not in use
if (!$is_service_in_use) {
$options .= '<a href="#" onclick="delete_service(' . $aRow['id'] . '); return false;" ' .
'class="tw-text-neutral-500 hover:tw-text-neutral-700 focus:tw-text-neutral-700">' .
'<i class="fa-regular fa-trash-can fa-lg"></i>' .
'</a>';
} else {
$options .= '<span class="tw-text-neutral-300 tw-cursor-not-allowed" title="' . _l('appointly_service_in_use_warning') . '">' .
'<i class="fa-regular fa-trash-can fa-lg"></i>' .
'</span>';
}
$options .= '</div>';
$row[] = $options;
$output['aaData'][] = $row;
}
echo json_encode($output);
die();