2025-10-24 16:41:31 +07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Models\Test;
|
|
|
|
|
|
|
|
|
|
use App\Models\BaseModel;
|
2026-01-12 16:53:41 +07:00
|
|
|
use App\Libraries\ValueSet;
|
2025-10-24 16:41:31 +07:00
|
|
|
|
|
|
|
|
class TestDefSiteModel extends BaseModel {
|
|
|
|
|
protected $table = 'testdefsite';
|
|
|
|
|
protected $primaryKey = 'TestSiteID';
|
2025-12-30 16:54:33 +07:00
|
|
|
protected $allowedFields = [
|
|
|
|
|
'SiteID',
|
2026-02-19 13:20:24 +07:00
|
|
|
'TestSiteCode', 'TestSiteName', 'TestType', 'Description',
|
|
|
|
|
'DisciplineID', 'DepartmentID',
|
|
|
|
|
'ResultType', 'RefType', 'Vset',
|
|
|
|
|
'Unit1', 'Factor', 'Unit2', 'Decimal',
|
|
|
|
|
'ReqQty', 'ReqQtyUnit', 'CollReq', 'Method', 'ExpectedTAT',
|
|
|
|
|
'SeqScr', 'SeqRpt', 'IndentLeft', 'FontStyle', 'VisibleScr', 'VisibleRpt',
|
|
|
|
|
'CountStat', 'Level',
|
|
|
|
|
'CreateDate', 'StartDate','EndDate'
|
2026-01-12 16:53:41 +07:00
|
|
|
];
|
|
|
|
|
|
2025-10-24 16:41:31 +07:00
|
|
|
protected $useTimestamps = true;
|
|
|
|
|
protected $createdField = 'CreateDate';
|
2025-12-30 16:54:33 +07:00
|
|
|
protected $updatedField = 'StartDate';
|
2025-10-24 16:41:31 +07:00
|
|
|
protected $useSoftDeletes = true;
|
|
|
|
|
protected $deletedField = "EndDate";
|
|
|
|
|
|
2026-02-16 14:20:52 +07:00
|
|
|
public function getTests($siteId = null, $testType = null, $visibleScr = null, $visibleRpt = null, $search = null, $page = 1, $perPage = 20) {
|
2025-12-30 16:54:33 +07:00
|
|
|
$builder = $this->select("testdefsite.TestSiteID, testdefsite.TestSiteCode, testdefsite.TestSiteName, testdefsite.TestType,
|
|
|
|
|
testdefsite.SeqScr, testdefsite.SeqRpt, testdefsite.VisibleScr, testdefsite.VisibleRpt,
|
2026-01-12 16:53:41 +07:00
|
|
|
testdefsite.CountStat, testdefsite.StartDate, testdefsite.EndDate")
|
2025-12-30 16:54:33 +07:00
|
|
|
->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);
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-16 14:20:52 +07:00
|
|
|
if ($search) {
|
|
|
|
|
$builder->groupStart()
|
|
|
|
|
->like('testdefsite.TestSiteCode', $search)
|
|
|
|
|
->orLike('testdefsite.TestSiteName', $search)
|
|
|
|
|
->groupEnd();
|
2025-12-30 16:54:33 +07:00
|
|
|
}
|
|
|
|
|
|
2026-02-16 14:20:52 +07:00
|
|
|
// 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();
|
|
|
|
|
|
2026-01-12 16:53:41 +07:00
|
|
|
$rows = ValueSet::transformLabels($rows, [
|
|
|
|
|
'TestType' => 'test_type',
|
|
|
|
|
]);
|
2026-02-16 14:20:52 +07:00
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
'data' => $rows,
|
|
|
|
|
'pagination' => [
|
|
|
|
|
'total' => $total
|
|
|
|
|
]
|
|
|
|
|
];
|
2025-11-27 14:15:10 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getTest($TestSiteID) {
|
2025-12-30 16:54:33 +07:00
|
|
|
$db = \Config\Database::connect();
|
|
|
|
|
|
2026-01-12 16:53:41 +07:00
|
|
|
$row = $this->select("testdefsite.*")
|
2025-11-27 14:15:10 +07:00
|
|
|
->where("testdefsite.TestSiteID", $TestSiteID)
|
|
|
|
|
->find($TestSiteID);
|
|
|
|
|
|
2025-12-17 07:03:16 +07:00
|
|
|
if (!$row) return null;
|
|
|
|
|
|
2026-01-12 16:53:41 +07:00
|
|
|
$row = ValueSet::transformLabels([$row], [
|
|
|
|
|
'TestType' => 'test_type',
|
|
|
|
|
])[0];
|
|
|
|
|
|
|
|
|
|
$typeCode = $row['TestType'] ?? '';
|
2025-12-30 16:54:33 +07:00
|
|
|
|
|
|
|
|
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')
|
2026-01-12 16:53:41 +07:00
|
|
|
->select('testdefgrp.*, t.TestSiteCode, t.TestSiteName, t.TestType')
|
2025-12-30 16:54:33 +07:00
|
|
|
->join('testdefsite t', 't.TestSiteID=testdefgrp.Member', 'left')
|
|
|
|
|
->where('testdefgrp.TestSiteID', $TestSiteID)
|
|
|
|
|
->where('testdefgrp.EndDate IS NULL')
|
|
|
|
|
->orderBy('testdefgrp.TestGrpID', 'ASC')
|
|
|
|
|
->get()->getResultArray();
|
|
|
|
|
|
2026-01-12 16:53:41 +07:00
|
|
|
$row['testdefgrp'] = ValueSet::transformLabels($row['testdefgrp'], [
|
|
|
|
|
'TestType' => 'test_type',
|
|
|
|
|
]);
|
|
|
|
|
|
2025-12-30 16:54:33 +07:00
|
|
|
$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'])) {
|
2026-02-19 13:20:24 +07:00
|
|
|
// Technical details are now flattened into the main row
|
|
|
|
|
if ($row['DisciplineID']) {
|
|
|
|
|
$discipline = $db->table('discipline')->where('DisciplineID', $row['DisciplineID'])->get()->getRowArray();
|
|
|
|
|
$row['DisciplineName'] = $discipline['DisciplineName'] ?? null;
|
|
|
|
|
}
|
|
|
|
|
if ($row['DepartmentID']) {
|
|
|
|
|
$department = $db->table('department')->where('DepartmentID', $row['DepartmentID'])->get()->getRowArray();
|
|
|
|
|
$row['DepartmentName'] = $department['DepartmentName'] ?? null;
|
|
|
|
|
}
|
2025-12-30 16:54:33 +07:00
|
|
|
|
|
|
|
|
$testMapModel = new \App\Models\Test\TestMapModel();
|
|
|
|
|
$row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll();
|
2025-12-17 07:03:16 +07:00
|
|
|
}
|
2025-12-30 16:54:33 +07:00
|
|
|
|
2025-11-27 14:15:10 +07:00
|
|
|
return $row;
|
|
|
|
|
}
|
2025-12-30 16:54:33 +07:00
|
|
|
}
|