From 7b093aefb3df0cefc2be98ef6360a3efcfca9b0a Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Mon, 29 Sep 2025 10:14:01 +0700 Subject: [PATCH] fix location param, add occupation dummy data --- app/Controllers/Location.php | 6 +- .../Migrations/2025-09-12-011643_Contact.php | 2 +- app/Database/Seeds/DummySeeder.php | 5 + app/Models/OccupationModel.php | 113 ++++++++++++++++++ 4 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 app/Models/OccupationModel.php diff --git a/app/Controllers/Location.php b/app/Controllers/Location.php index 4b2c6fa..966c610 100644 --- a/app/Controllers/Location.php +++ b/app/Controllers/Location.php @@ -28,10 +28,10 @@ class Location extends Controller { ->join("locationaddress la", "l.LocationID=la.LocationID", 'left') ->join("valueset v", "v.VSetID=12 and v.VValue=l.loctype", 'left'); - if($LocName != '') { $sql->like('LocFull', $LocName, 'both'); $rows[] = 'LocName'; } - if($LocCode != '') { $sql->like('LocCode', $LocCode, 'both'); $rows[] = 'LocCode'; } + if($LocName != '') { $sql->like('LocFull', $LocName, 'both'); } + if($LocCode != '') { $sql->like('LocCode', $LocCode, 'both'); } - $rows[] = $sql->get()->getResultArray(); + $rows = $sql->get()->getResultArray(); if (empty($rows)) { return $this->respond([ diff --git a/app/Database/Migrations/2025-09-12-011643_Contact.php b/app/Database/Migrations/2025-09-12-011643_Contact.php index 6ec57cf..f4a81ed 100644 --- a/app/Database/Migrations/2025-09-12-011643_Contact.php +++ b/app/Database/Migrations/2025-09-12-011643_Contact.php @@ -50,7 +50,7 @@ class CreateContactTable extends Migration { 'AbbTex' => [ 'type' => 'VARCHAR', 'constraint' => 5, 'null' => true ], 'FullText' => [ 'type' => 'VARCHAR', 'constraint' => 255, 'null' => true ], 'Description' => [ 'type' => 'TEXT', 'null' => true ], - 'CreateDate' => [ 'type' => 'DATETIME', 'null' => true ], + 'CreateDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP', ]); $this->forge->addKey('OccupationID', true); $this->forge->createTable('occupation'); diff --git a/app/Database/Seeds/DummySeeder.php b/app/Database/Seeds/DummySeeder.php index ea6fede..3c55d50 100644 --- a/app/Database/Seeds/DummySeeder.php +++ b/app/Database/Seeds/DummySeeder.php @@ -34,6 +34,11 @@ class DummySeeder extends Seeder { ['SiteID'=>3,'ContactID'=>2, 'ContactCode'=>'C342', 'ContactEmail'=>'qdoc@email.com', 'OccupationID'=>'', 'JobTitle'=>'', 'Department'=>'Hati Sehat' ] ]; $this->db->table('contactdetail')->insertBatch($data); + $data = [ + ['OccupationID'=>1, 'AbbTex'=>'OC0001', 'FullText'=>'Medical Doctor', 'Description'=>'Diagnoses and treats, injuries and illnesses' ], + ['OccupationID'=>2, 'AbbTex'=>'OC0002', 'FullText'=>'Trainee Medical Technician', 'Description'=>'Performing basic laboratory task' ], + ['OccupationID'=>3, 'AbbTex'=>'OC0003', 'FullText'=>'Medical Laboratory Technician', 'Description'=>'Perform routine laboratory tests' ] + ]; // patient $data = [ diff --git a/app/Models/OccupationModel.php b/app/Models/OccupationModel.php new file mode 100644 index 0000000..6863259 --- /dev/null +++ b/app/Models/OccupationModel.php @@ -0,0 +1,113 @@ +select("contact.ContactID, cd.SiteID, cd.ContactCode, NameFirst, NameLast, Specialty") + ->join("contactdetail cd", "contact.ContactID=cd.ContactID", "left") + ->join("occupation o","cd.OccupationID=o.OccupationID", "left") + ->get()->getResultArray(); + + return $rows; + } + + public function getContacts($ContactName, $Specialty) { + $sql = $this->select("ContactID, NameFirst, NameLast, Title, Initial, Specialty"); + if($ContactName !='') { $sql->like('NameFirst',$ContactName,'both')->orLike('NameLast',$ContactName,'both'); } + if($Specialty != '') { $sql->like('Specialty',$Specialty); } + $rows = $sql->get()->getResultArray(); + return $rows; + } + + public function getContactWithDetail($ContactID) { + $rows = $this->where('contact.ContactID', $ContactID)->join('contactdetail cd', 'contact.ContactID=cd.ContactID','left')->get()->getResultArray(); + $contact = []; + + foreach ($rows as $row) { + if(empty($contact['NameFirst'])) { + $contact = [ + 'ContactID' => $ContactID, + 'NameFirst' => $row['NameFirst'] ?? null, + 'NameLast' => $row['NameLast'] ?? null, + 'Title' => $row['Title'] ?? null, + 'Initial' => $row['Initial'] ?? null, + 'Birthdate' => $row['Birthdate'] ?? null, + 'EmailAddress1' => $row['EmailAddress1'] ?? null, + 'EmailAddress2' => $row['EmailAddress2'] ?? null, + 'Phone' => $row['Phone'] ?? null, + 'MobilePhone1' => $row['MobilePhone1'] ?? null, + 'MobilePhone2' => $row['MobilePhone2'] ?? null, + 'Specialty' => $row['Specialty'] ?? null, + 'SubSpecialty' => $row['SubSpecialty'] ?? null, + 'Details' => [] + ]; + } + if (!empty($row['ContactDetID'])) { + $contact['Details'][] = [ + 'SiteID' => $row['SiteID'] ?? null, + 'ContactDetID' => $row['ContactDetID'], + 'ContactCode' => $row['ContactCode'] ?? null, + 'ContactEmail' => $row['ContactEmail'] ?? null, + 'OccupationID' => $row['OccupationID'] ?? null, + 'JobTitle' => $row['JobTitle'] ?? null, + 'Department' => $row['Department'] ?? null, + 'ContactStartDate' => $row['ContactStartDate'] ?? null, + 'ContactEndDate' => $row['ContactEndDate'] ?? null + ]; + } + } + + return $contact; + } + + public function saveWithDetails(array $data): array { + $db = \Config\Database::connect(); + $db->transStart(); + + try { + if (!empty($data['ContactID'])) { + $contactId = $data['ContactID']; + $this->update($contactId, $data); + } else { + $contactId = $this->insert($data, true); + } + + if (!$contactId) { + throw new \RuntimeException('Failed to save contact'); + } + + if (!empty($data['Details'])) { + $detailModel = new \App\Models\ContactDetailModel(); + $result = $detailModel->syncDetails($contactId, $data['Details']); + + if ($result['status'] !== 'success') { + throw new \RuntimeException('SyncDetails failed: ' . $result['message']); + } + } + + $db->transComplete(); + + return [ + 'status' => 'success', + 'ContactID' => $contactId, + ]; + } catch (\Throwable $e) { + $db->transRollback(); + + log_message('error', 'saveWithDetails error: ' . $e->getMessage()); + + return [ + 'status' => 'error', + 'message' => $e->getMessage(), + ]; + } + } + +}