select("testdefsite.TestSiteID, testdefsite.TestSiteCode, testdefsite.TestSiteName, testdefsite.TestType, testdefsite.SeqScr, testdefsite.SeqRpt, testdefsite.VisibleScr, testdefsite.VisibleRpt, testdefsite.CountStat, testdefsite.StartDate, testdefsite.EndDate") ->where('testdefsite.EndDate IS NULL'); if ($siteId) { $builder->where('testdefsite.SiteID', $siteId); } if ($testType) { $builder->where('testdefsite.TestType', $testType); } if ($visibleScr !== null) { $builder->where('testdefsite.VisibleScr', $visibleScr); } if ($visibleRpt !== null) { $builder->where('testdefsite.VisibleRpt', $visibleRpt); } if ($search) { $builder->groupStart() ->like('testdefsite.TestSiteCode', $search) ->orLike('testdefsite.TestSiteName', $search) ->groupEnd(); } // Get total count before pagination $totalBuilder = clone $builder; $total = $totalBuilder->countAllResults(); // Apply pagination $offset = ($page - 1) * $perPage; $rows = $builder->orderBy('testdefsite.SeqScr', 'ASC') ->limit($perPage, $offset) ->findAll(); $rows = ValueSet::transformLabels($rows, [ 'TestType' => 'test_type', ]); return [ 'data' => $rows, 'pagination' => [ 'total' => $total ] ]; } public function getTest($TestSiteID) { $db = \Config\Database::connect(); $row = $this->select("testdefsite.*") ->where("testdefsite.TestSiteID", $TestSiteID) ->find($TestSiteID); if (!$row) return null; $row = ValueSet::transformLabels([$row], [ 'TestType' => 'test_type', ])[0]; $typeCode = $row['TestType'] ?? ''; if ($typeCode === 'CALC') { $row['testdefcal'] = $db->table('testdefcal') ->select('testdefcal.*, d.DisciplineName, dept.DepartmentName') ->join('discipline d', 'd.DisciplineID=testdefcal.DisciplineID', 'left') ->join('department dept', 'dept.DepartmentID=testdefcal.DepartmentID', 'left') ->where('testdefcal.TestSiteID', $TestSiteID) ->where('testdefcal.EndDate IS NULL') ->get()->getResultArray(); $testMapModel = new \App\Models\Test\TestMapModel(); $row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll(); } elseif ($typeCode === 'GROUP') { $row['testdefgrp'] = $db->table('testdefgrp') ->select('testdefgrp.*, t.TestSiteCode, t.TestSiteName, t.TestType') ->join('testdefsite t', 't.TestSiteID=testdefgrp.Member', 'left') ->where('testdefgrp.TestSiteID', $TestSiteID) ->where('testdefgrp.EndDate IS NULL') ->orderBy('testdefgrp.TestGrpID', 'ASC') ->get()->getResultArray(); $row['testdefgrp'] = ValueSet::transformLabels($row['testdefgrp'], [ 'TestType' => 'test_type', ]); $testMapModel = new \App\Models\Test\TestMapModel(); $row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll(); } elseif ($typeCode === 'TITLE') { $testMapModel = new \App\Models\Test\TestMapModel(); $row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll(); } elseif (in_array($typeCode, ['TEST', 'PARAM'])) { $row['testdeftech'] = $db->table('testdeftech') ->select('testdeftech.*, d.DisciplineName, dept.DepartmentName') ->join('discipline d', 'd.DisciplineID=testdeftech.DisciplineID', 'left') ->join('department dept', 'dept.DepartmentID=testdeftech.DepartmentID', 'left') ->where('testdeftech.TestSiteID', $TestSiteID) ->where('testdeftech.EndDate IS NULL') ->get()->getResultArray(); $testMapModel = new \App\Models\Test\TestMapModel(); $row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll(); } return $row; } }