clqms-be/app/Models/Test/TestDefSiteModel.php

136 lines
5.0 KiB
PHP
Raw Normal View History

2025-10-24 16:41:31 +07:00
<?php
namespace App\Models\Test;
use App\Models\BaseModel;
class TestDefSiteModel extends BaseModel {
protected $table = 'testdefsite';
protected $primaryKey = 'TestSiteID';
protected $allowedFields = [
'SiteID',
'TestSiteCode',
'TestSiteName',
'TestType',
'Description',
'SeqScr',
'SeqRpt',
'IndentLeft',
'FontStyle',
'VisibleScr',
'VisibleRpt',
'CountStat',
'CreateDate',
'StartDate',
'EndDate'
];
2025-10-24 16:41:31 +07:00
protected $useTimestamps = true;
protected $createdField = 'CreateDate';
protected $updatedField = 'StartDate';
2025-10-24 16:41:31 +07:00
protected $useSoftDeletes = true;
protected $deletedField = "EndDate";
/**
* Get all tests with type information
*/
public function getTests($siteId = null, $testType = null, $visibleScr = null, $visibleRpt = null, $keyword = null) {
$builder = $this->select("testdefsite.TestSiteID, testdefsite.TestSiteCode, testdefsite.TestSiteName, testdefsite.TestType,
testdefsite.SeqScr, testdefsite.SeqRpt, testdefsite.VisibleScr, testdefsite.VisibleRpt,
testdefsite.CountStat, testdefsite.StartDate, testdefsite.EndDate,
valueset.VValue as TypeCode, valueset.VDesc as TypeName")
2025-12-16 13:48:33 +07:00
->join("valueset", "valueset.VID=testdefsite.TestType", "left")
->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 ($keyword) {
$builder->like('testdefsite.TestSiteName', $keyword);
}
return $builder->orderBy('testdefsite.SeqScr', 'ASC')->findAll();
2025-11-27 14:15:10 +07:00
}
/**
* Get single test with all related details based on TestType
*/
2025-11-27 14:15:10 +07:00
public function getTest($TestSiteID) {
$db = \Config\Database::connect();
2025-12-17 07:03:16 +07:00
$row = $this->select("testdefsite.*, valueset.VValue as TypeCode, valueset.VDesc as TypeName")
->join("valueset", "valueset.VID=testdefsite.TestType", "left")
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;
$typeCode = $row['TypeCode'] ?? '';
// Load related details based on TestType
if ($typeCode === 'CALC') {
// Load calculation details with joined discipline and department
$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();
// Load test mappings
$testMapModel = new \App\Models\Test\TestMapModel();
$row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll();
} elseif ($typeCode === 'GROUP') {
// Load group members with test details
$row['testdefgrp'] = $db->table('testdefgrp')
->select('testdefgrp.*, t.TestSiteCode, t.TestSiteName, t.TestType, vs.VValue as MemberTypeCode')
->join('testdefsite t', 't.TestSiteID=testdefgrp.Member', 'left')
->join('valueset vs', 'vs.VID=t.TestType', 'left')
->where('testdefgrp.TestSiteID', $TestSiteID)
->where('testdefgrp.EndDate IS NULL')
->orderBy('testdefgrp.TestGrpID', 'ASC')
->get()->getResultArray();
// Load test mappings
$testMapModel = new \App\Models\Test\TestMapModel();
$row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll();
} elseif ($typeCode === 'TITLE') {
// Load test mappings only for TITLE type
$testMapModel = new \App\Models\Test\TestMapModel();
$row['testmap'] = $testMapModel->where('TestSiteID', $TestSiteID)->where('EndDate IS NULL')->findAll();
} elseif (in_array($typeCode, ['TEST', 'PARAM'])) {
// TEST or PARAM - load technical details with joined tables
$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();
// Load test mappings
$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-11-27 14:15:10 +07:00
return $row;
}
}