diff --git a/app/Database/Migrations/2025-10-23-110105_Organization.php b/app/Database/Migrations/2025-10-23-110105_Organization.php index 609a63f..320e879 100644 --- a/app/Database/Migrations/2025-10-23-110105_Organization.php +++ b/app/Database/Migrations/2025-10-23-110105_Organization.php @@ -8,8 +8,10 @@ class Organization extends Migration { public function up() { $this->forge->addField([ 'DisciplineID' => ['type' => 'int', 'unsigned' => true, 'auto_increment'=> true], + 'SiteID' => ['type' => 'int', 'null'=> false], 'DisciplineCode' => ['type' => 'varchar', 'constraint'=> 10, 'null'=> false], 'DisciplineName' => ['type' => 'varchar', 'constraint'=> 150, 'null'=> true], + 'Parent' => ['type' => 'int', 'null'=> true], 'CreateDate' => ['type'=>'DATETIME', 'null' => true], 'EndDate' => ['type'=>'DATETIME', 'null' => true] ]); diff --git a/app/Database/Seeds/OrganizationSeeder.php b/app/Database/Seeds/OrganizationSeeder.php index 2f64551..94958c9 100644 --- a/app/Database/Seeds/OrganizationSeeder.php +++ b/app/Database/Seeds/OrganizationSeeder.php @@ -33,16 +33,19 @@ class OrganizationSeeder extends Seeder { $this->db->table('site')->insertBatch($data); $data = [ - ['DisciplineID' => '1','DisciplineCode' => 'HEMA', 'DisciplineName' =>'Hematology', 'CreateDate' => "$now"], - ['DisciplineID' => '2','DisciplineCode' => 'CHEM', 'DisciplineName' =>'Clinical Chemistry', 'CreateDate' => "$now"], - ['DisciplineID' => '3','DisciplineCode' => 'IMSR', 'DisciplineName' =>'Immunology/Serology', 'CreateDate' => "$now"], - ['DisciplineID' => '4','DisciplineCode' => 'URIN', 'DisciplineName' =>'Urinalysis', 'CreateDate' => "$now"], - ['DisciplineID' => '5','DisciplineCode' => 'FECAL', 'DisciplineName' =>'Fecal Analysis', 'CreateDate' => "$now"], - ['DisciplineID' => '6','DisciplineCode' => 'HC', 'DisciplineName' =>'Pathology/Cytology', 'CreateDate' => "$now"], - ['DisciplineID' => '7','DisciplineCode' => 'MICRO', 'DisciplineName' =>'Microbiology', 'CreateDate' => "$now"], - ['DisciplineID' => '8','DisciplineCode' => 'TXC', 'DisciplineName' =>'Toxicology', 'CreateDate' => "$now"], - ['DisciplineID' => '9','DisciplineCode' => 'LF', 'DisciplineName' =>'Life Sciences', 'CreateDate' => "$now"], - ['DisciplineID' => '10','DisciplineCode' => 'ND', 'DisciplineName' =>'Non-discipline', 'CreateDate' => "$now"] + ['DisciplineID' => '1','DisciplineCode' => 'HEMA', 'DisciplineName' =>'Hematology', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '2','DisciplineCode' => 'CHEM', 'DisciplineName' =>'Clinical Chemistry', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '3','DisciplineCode' => 'IMSR', 'DisciplineName' =>'Immunology/Serology', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '4','DisciplineCode' => 'URIN', 'DisciplineName' =>'Urinalysis', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '5','DisciplineCode' => 'FECAL', 'DisciplineName' =>'Fecal Analysis', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '6','DisciplineCode' => 'HC', 'DisciplineName' =>'Pathology/Cytology', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '7','DisciplineCode' => 'MICRO', 'DisciplineName' =>'Microbiology', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '8','DisciplineCode' => 'TXC', 'DisciplineName' =>'Toxicology', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '9','DisciplineCode' => 'LF', 'DisciplineName' =>'Life Sciences', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '10','DisciplineCode' => 'ND', 'DisciplineName' =>'Non-discipline', 'Parent' => null, 'CreateDate' => "$now"], + ['DisciplineID' => '11','DisciplineCode' => 'HEMO', 'DisciplineName' =>'Hemostasis', 'Parent' => '1', 'CreateDate' => "$now"], + ['DisciplineID' => '12','DisciplineCode' => 'BLGLU', 'DisciplineName' =>'Blood Glucose', 'Parent' => '2', 'CreateDate' => "$now"], + ['DisciplineID' => '13','DisciplineCode' => 'KIDF', 'DisciplineName' =>'Kidney Function', 'Parent' => '2', 'CreateDate' => "$now"], ]; $this->db->table('discipline')->insertBatch($data); diff --git a/app/Models/Organization/DisciplineModel.php b/app/Models/Organization/DisciplineModel.php index a4d2d7a..8be8fb6 100644 --- a/app/Models/Organization/DisciplineModel.php +++ b/app/Models/Organization/DisciplineModel.php @@ -5,7 +5,7 @@ use App\Models\BaseModel; class DisciplineModel extends BaseModel { protected $table = 'discipline'; protected $primaryKey = 'DisciplineID'; - protected $allowedFields = ['DisciplineCode', 'DisciplineName', 'CreateDate', 'EndDate']; + protected $allowedFields = ['DisciplineCode', 'DisciplineName', 'SiteID', 'Parent', 'CreateDate', 'EndDate']; protected $useTimestamps = true; protected $createdField = 'CreateDate'; @@ -14,7 +14,9 @@ class DisciplineModel extends BaseModel { protected $deletedField = 'EndDate'; public function getDisciplines($filter) { - $builder = $this->select('*'); + $builder = $this->select('discipline.DisciplineID, discipline.DisciplineCode, discipline.DisciplineName, discipline.SiteID, + discipline.Parent, d.DisciplineCode as ParentCode,d.DisciplineName as ParentName') + ->join('discipline as d', 'd.DisciplineID = discipline.Parent', 'left'); if (!empty($filter['DisciplineCode'])) { $builder->like('DisciplineCode', $filter['DisciplineCode'], 'both'); @@ -23,7 +25,25 @@ class DisciplineModel extends BaseModel { $builder->like('DisciplineName', $filter['DisciplineName'], 'both'); } - $rows = $builder->findAll(); - return $rows; + $rows = $builder->findAll(); + // Build nested structure: parent with children + $parents = []; + $children = []; + foreach ($rows as $row) { + if (empty($row['Parent'])) { + $parents[$row['DisciplineID']] = $row; + $parents[$row['DisciplineID']]['children'] = []; + } else { + $children[$row['Parent']][] = $row; + } + } + // Attach children to parents + foreach ($children as $parentId => $childList) { + if (isset($parents[$parentId])) { + $parents[$parentId]['children'] = $childList; + } + } + // Return as indexed array + return array_values($parents); } }