3ba79d4367
All use Joomla 6 BaseDatabaseModel with $this->getDatabase()
28 lines
1.1 KiB
PHP
28 lines
1.1 KiB
PHP
<?php
|
|
namespace Moko\Component\MokoSuiteField\Administrator\Model;
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
|
|
|
|
class TechniciansModel extends BaseDatabaseModel
|
|
{
|
|
public function getItems(string $status = '', string $trade = '', string $search = '', int $limit = 50): array
|
|
{
|
|
$db = $this->getDatabase();
|
|
$query = $db->getQuery(true)
|
|
->select('t.*, cd.name AS tech_name, cd.email_to, cd.telephone')
|
|
->select('(SELECT COUNT(*) FROM #__mokosuitefield_work_orders wo WHERE wo.technician_id = t.id AND wo.status IN (' . $db->quote('dispatched') . ',' . $db->quote('in_progress') . ')) AS active_jobs')
|
|
->from($db->quoteName('#__mokosuitefield_technicians', 't'))
|
|
->join('LEFT', $db->quoteName('#__contact_details', 'cd') . ' ON cd.id = t.contact_id')
|
|
->order('cd.name ASC');
|
|
|
|
if ($status) $query->where($db->quoteName('t.status') . ' = ' . $db->quote($status));
|
|
if ($trade) $query->where($db->quoteName('t.trade') . ' = ' . $db->quote($trade));
|
|
if ($search) $query->where($db->quoteName('cd.name') . ' LIKE ' . $db->quote('%' . $search . '%'));
|
|
|
|
$db->setQuery($query, 0, $limit);
|
|
return $db->loadObjectList() ?: [];
|
|
}
|
|
}
|