From a63d31ec7092c35066964f50482c319a492c32fe Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 4 Mar 2026 07:07:46 +0000 Subject: [PATCH] update lab --- includes/actions.php | 47 ++++++- includes/layout/footer.php | 171 +++++++++++++++++++++++- includes/layout/header.php | 5 +- includes/pages/laboratory_inquiries.php | 139 +++++++++++++++++++ includes/pages/laboratory_tests.php | 10 +- init_db.php | 122 ++++++++++------- laboratory_inquiries.php | 16 +++ laboratory_tests.php | 17 ++- lang.php | 30 ++++- nurses.php | 18 ++- test_groups.php | 17 ++- 11 files changed, 509 insertions(+), 83 deletions(-) create mode 100644 includes/pages/laboratory_inquiries.php create mode 100644 laboratory_inquiries.php diff --git a/includes/actions.php b/includes/actions.php index 5e53836..249fac8 100644 --- a/includes/actions.php +++ b/includes/actions.php @@ -378,9 +378,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name_ar = $_POST['name_ar'] ?? ''; $group_id = $_POST['group_id'] ?: null; $price = $_POST['price'] ?? 0; + $range = $_POST['normal_range'] ?? ''; if ($name_en && $name_ar) { - $stmt = $db->prepare("INSERT INTO laboratory_tests (name_en, name_ar, group_id, price) VALUES (?, ?, ?, ?)"); - $stmt->execute([$name_en, $name_ar, $group_id, $price]); + $stmt = $db->prepare("INSERT INTO laboratory_tests (name_en, name_ar, group_id, price, normal_range) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$name_en, $name_ar, $group_id, $price, $range]); $_SESSION['flash_message'] = __('add_test') . ' ' . __('successfully'); $redirect = true; } @@ -390,9 +391,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name_ar = $_POST['name_ar'] ?? ''; $group_id = $_POST['group_id'] ?: null; $price = $_POST['price'] ?? 0; + $range = $_POST['normal_range'] ?? ''; if ($id && $name_en && $name_ar) { - $stmt = $db->prepare("UPDATE laboratory_tests SET name_en = ?, name_ar = ?, group_id = ?, price = ? WHERE id = ?"); - $stmt->execute([$name_en, $name_ar, $group_id, $price, $id]); + $stmt = $db->prepare("UPDATE laboratory_tests SET name_en = ?, name_ar = ?, group_id = ?, price = ?, normal_range = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $group_id, $price, $range, $id]); $_SESSION['flash_message'] = __('update_test') . ' ' . __('successfully'); $redirect = true; } @@ -404,6 +406,43 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $_SESSION['flash_message'] = __('delete_test') . ' ' . __('successfully'); $redirect = true; } + } elseif ($_POST['action'] === 'add_inquiry') { + $patient_name = $_POST['patient_name'] ?? ''; + $test_id = $_POST['test_id'] ?: null; + $source = $_POST['source'] ?? 'Internal'; + $date = $_POST['inquiry_date'] ?: date('Y-m-d H:i'); + $status = $_POST['status'] ?? 'Pending'; + $notes = $_POST['notes'] ?? ''; + + if ($patient_name) { + $stmt = $db->prepare("INSERT INTO laboratory_inquiries (patient_name, test_id, source, inquiry_date, status, notes) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt->execute([$patient_name, $test_id, $source, $date, $status, $notes]); + $_SESSION['flash_message'] = __('add_inquiry') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_inquiry') { + $id = $_POST['id'] ?? ''; + $patient_name = $_POST['patient_name'] ?? ''; + $test_id = $_POST['test_id'] ?: null; + $source = $_POST['source'] ?? 'Internal'; + $date = $_POST['inquiry_date'] ?: date('Y-m-d H:i'); + $status = $_POST['status'] ?? 'Pending'; + $notes = $_POST['notes'] ?? ''; + + if ($id && $patient_name) { + $stmt = $db->prepare("UPDATE laboratory_inquiries SET patient_name = ?, test_id = ?, source = ?, inquiry_date = ?, status = ?, notes = ? WHERE id = ?"); + $stmt->execute([$patient_name, $test_id, $source, $date, $status, $notes, $id]); + $_SESSION['flash_message'] = __('edit_inquiry') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_inquiry') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM laboratory_inquiries WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete') . ' ' . __('successfully'); + $redirect = true; + } } } diff --git a/includes/layout/footer.php b/includes/layout/footer.php index 39b91f5..5ec797f 100644 --- a/includes/layout/footer.php +++ b/includes/layout/footer.php @@ -905,6 +905,10 @@ +
+ + +
@@ -941,13 +945,17 @@
-
+
+ + +
@@ -985,6 +993,148 @@
+ + + + + + + + + \ No newline at end of file diff --git a/init_db.php b/init_db.php index 7ead07d..e97c6ac 100644 --- a/init_db.php +++ b/init_db.php @@ -157,9 +157,22 @@ try { name_en VARCHAR(255) NOT NULL, name_ar VARCHAR(255) NOT NULL, price DECIMAL(10, 2) NOT NULL DEFAULT 0.00, + normal_range VARCHAR(255), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (group_id) REFERENCES test_groups(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS laboratory_inquiries ( + id INT AUTO_INCREMENT PRIMARY KEY, + patient_name VARCHAR(255) NOT NULL, + test_id INT, + inquiry_date DATETIME DEFAULT CURRENT_TIMESTAMP, + source ENUM('Internal', 'External') DEFAULT 'Internal', + status ENUM('Pending', 'Completed', 'Cancelled') DEFAULT 'Pending', + notes TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (test_id) REFERENCES laboratory_tests(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; "; $db->exec($sql); @@ -185,6 +198,10 @@ try { $db->exec("ALTER TABLE doctors ADD COLUMN IF NOT EXISTS tel VARCHAR(20)"); $db->exec("ALTER TABLE doctors ADD COLUMN IF NOT EXISTS email VARCHAR(100)"); } catch (Exception $e) {} + + try { + $db->exec("ALTER TABLE laboratory_tests ADD COLUMN IF NOT EXISTS normal_range VARCHAR(255)"); + } catch (Exception $e) {} // Seed departments $stmt = $db->query("SELECT COUNT(*) FROM departments"); @@ -214,14 +231,15 @@ try { ('MedGulf', 'ميدغلف', '8004414444')"); } - // Seed test groups (Clear and re-seed if requested or just append if empty) - $stmt = $db->query("SELECT COUNT(*) FROM test_groups"); - if ($stmt->fetchColumn() <= 4) { // If only initial seed exists, clear and re-seed with full list - $db->exec("SET FOREIGN_KEY_CHECKS = 0"); - $db->exec("TRUNCATE TABLE laboratory_tests"); - $db->exec("TRUNCATE TABLE test_groups"); - $db->exec("SET FOREIGN_KEY_CHECKS = 1"); + // Seed test groups (Clear and re-seed with comprehensive list and normal ranges) + // $db->exec("SET FOREIGN_KEY_CHECKS = 0"); + // $db->exec("TRUNCATE TABLE laboratory_tests"); + // $db->exec("TRUNCATE TABLE test_groups"); + // $db->exec("SET FOREIGN_KEY_CHECKS = 1"); + // Check if test groups exist before seeding + $stmt = $db->query("SELECT COUNT(*) FROM test_groups"); + if ($stmt->fetchColumn() == 0) { $db->exec("INSERT INTO test_groups (id, name_en, name_ar) VALUES (1, 'Hematology', 'علم الدم'), (2, 'Biochemistry', 'الكيمياء الحيوية'), @@ -234,62 +252,62 @@ try { (9, 'Urine & Stool', 'البول والبراز'), (10, 'Cardiac Markers', 'واصمات القلب')"); - $db->exec("INSERT INTO laboratory_tests (group_id, name_en, name_ar, price) VALUES - (1, 'Complete Blood Count (CBC)', 'عد دم كامل', 150.00), - (1, 'ESR', 'سرعة الترسيب', 40.00), - (1, 'Reticulocyte count', 'عد الخلايا الشبكية', 60.00), - (1, 'Blood film', 'فيلم الدم', 80.00), + $db->exec("INSERT INTO laboratory_tests (group_id, name_en, name_ar, price, normal_range) VALUES + (1, 'Complete Blood Count (CBC)', 'عد دم كامل', 150.00, 'WBC: 4.5-11.0, RBC: 4.2-6.1, HGB: 12.0-17.5'), + (1, 'ESR', 'سرعة الترسيب', 40.00, 'Men: <15 mm/hr, Women: <20 mm/hr'), + (1, 'Reticulocyte count', 'عد الخلايا الشبكية', 60.00, '0.5% - 1.5%'), + (1, 'Blood film', 'فيلم الدم', 80.00, 'Normal morphology'), - (2, 'Fast Blood Sugar (FBS)', 'سكر الدم الصائم', 50.00), - (2, 'HbA1c', 'السكر التراكمي', 120.00), - (2, 'Lipid Profile', 'فحص الدهون', 200.00), - (2, 'Liver Function Test (LFT)', 'وظائف الكبد', 180.00), - (2, 'Kidney Function Test (KFT)', 'وظائف الكلى', 150.00), - (2, 'Uric Acid', 'حمض اليوريك', 60.00), + (2, 'Fast Blood Sugar (FBS)', 'سكر الدم الصائم', 50.00, '70 - 99 mg/dL'), + (2, 'HbA1c', 'السكر التراكمي', 120.00, '4.0% - 5.6%'), + (2, 'Lipid Profile', 'فحص الدهون', 200.00, 'Chol: <200, Trig: <150, HDL: >40'), + (2, 'Liver Function Test (LFT)', 'وظائف الكبد', 180.00, 'ALT: 7-55 U/L, AST: 8-48 U/L'), + (2, 'Kidney Function Test (KFT)', 'وظائف الكلى', 150.00, 'Creatinine: 0.6-1.3 mg/dL'), + (2, 'Uric Acid', 'حمض اليوريك', 60.00, 'Men: 3.4-7.0, Women: 2.4-6.0 mg/dL'), - (3, 'Urine Culture', 'مزرعة البول', 250.00), - (3, 'Stool Culture', 'مزرعة البراز', 250.00), - (3, 'Blood Culture', 'مزرعة الدم', 450.00), - (3, 'Throat Swab', 'مسحة الحلق', 200.00), + (3, 'Urine Culture', 'مزرعة البول', 250.00, 'No growth'), + (3, 'Stool Culture', 'مزرعة البراز', 250.00, 'No growth'), + (3, 'Blood Culture', 'مزرعة الدم', 450.00, 'No growth'), + (3, 'Throat Swab', 'مسحة الحلق', 200.00, 'Negative for Strep A'), - (4, 'CRP (C-Reactive Protein)', 'البروتين التفاعلي C', 90.00), - (4, 'RF (Rheumatoid Factor)', 'عامل الروماتويد', 100.00), - (4, 'ASO Titre', 'فحص أجسام مضادة للستربتوليسين', 110.00), - (4, 'HBsAg', 'التهاب الكبد ب', 120.00), - (4, 'HIV I & II', 'فيروس نقص المناعة البشرية', 180.00), - (4, 'HCV Antibodies', 'فيروس التهاب الكبد ج', 150.00), + (4, 'CRP (C-Reactive Protein)', 'البروتين التفاعلي C', 90.00, '< 10 mg/L'), + (4, 'RF (Rheumatoid Factor)', 'عامل الروماتويد', 100.00, '< 14 IU/mL'), + (4, 'ASO Titre', 'فحص أجسام مضادة للستربتوليسين', 110.00, '< 200 IU/mL'), + (4, 'HBsAg', 'التهاب الكبد ب', 120.00, 'Non-reactive'), + (4, 'HIV I & II', 'فيروس نقص المناعة البشرية', 180.00, 'Non-reactive'), + (4, 'HCV Antibodies', 'فيروس التهاب الكبد ج', 150.00, 'Non-reactive'), - (5, 'ANA', 'الأجسام المضادة للنواة', 220.00), - (5, 'Anti-dsDNA', 'الأجسام المضادة للحمض النووي', 280.00), - (5, 'Total IgE', 'الغلوبولين المناعي الكلي E', 190.00), + (5, 'ANA', 'الأجسام المضادة للنواة', 220.00, 'Negative'), + (5, 'Anti-dsDNA', 'الأجسام المضادة للحمض النووي', 280.00, '< 30 IU/mL'), + (5, 'Total IgE', 'الغلوبولين المناعي الكلي E', 190.00, '< 100 kU/L'), - (6, 'TSH', 'الهرمون المنبه للدرقية', 130.00), - (6, 'Free T3', 'T3 الحر', 130.00), - (6, 'Free T4', 'T4 الحر', 130.00), - (6, 'Prolactin', 'هرمون الحليب', 150.00), - (6, 'Testosterone', 'هرمون التستوستيرون', 180.00), - (6, 'Vitamin D', 'فيتامين د', 350.00), + (6, 'TSH', 'الهرمون المنبه للدرقية', 130.00, '0.4 - 4.0 mIU/L'), + (6, 'Free T3', 'T3 الحر', 130.00, '2.3 - 4.2 pg/mL'), + (6, 'Free T4', 'T4 الحر', 130.00, '0.8 - 1.8 ng/dL'), + (6, 'Prolactin', 'هرمون الحليب', 150.00, 'Men: 2-18, Women: 2-29 ng/mL'), + (6, 'Testosterone', 'هرمون التستوستيرون', 180.00, 'Men: 300-1000, Women: 15-70 ng/dL'), + (6, 'Vitamin D', 'فيتامين د', 350.00, '30 - 100 ng/mL'), - (7, 'PT (Prothrombin Time)', 'وقت البروثرومبين', 100.00), - (7, 'PTT (Partial Thromboplastin Time)', 'وقت الثرومبوبلاستين الجزئي', 120.00), - (7, 'INR', 'النسبة المعيارية الدولية', 100.00), - (7, 'D-Dimer', 'دي دايمر', 300.00), + (7, 'PT (Prothrombin Time)', 'وقت البروثرومبين', 100.00, '11 - 13.5 seconds'), + (7, 'PTT (Partial Thromboplastin Time)', 'وقت الثرومبوبلاستين الجزئي', 120.00, '25 - 35 seconds'), + (7, 'INR', 'النسبة المعيارية الدولية', 100.00, '0.8 - 1.1'), + (7, 'D-Dimer', 'دي دايمر', 300.00, '< 500 ng/mL'), - (8, 'Sodium (Na)', 'الصوديوم', 70.00), - (8, 'Potassium (K)', 'البوتاسيوم', 70.00), - (8, 'Chloride (Cl)', 'الكلوريد', 70.00), - (8, 'Calcium (Ca)', 'الكالسيوم', 80.00), - (8, 'Magnesium (Mg)', 'المغنيسيوم', 90.00), + (8, 'Sodium (Na)', 'الصوديوم', 70.00, '135 - 145 mEq/L'), + (8, 'Potassium (K)', 'البوتاسيوم', 70.00, '3.6 - 5.2 mEq/L'), + (8, 'Chloride (Cl)', 'الكلوريد', 70.00, '96 - 106 mEq/L'), + (8, 'Calcium (Ca)', 'الكالسيوم', 80.00, '8.5 - 10.2 mg/dL'), + (8, 'Magnesium (Mg)', 'المغنيسيوم', 90.00, '1.7 - 2.2 mg/dL'), - (9, 'Urine Analysis', 'تحليل البول', 50.00), - (9, 'Stool Analysis', 'تحليل البراز', 60.00), - (9, 'Occult Blood in Stool', 'الدم الخفي في البراز', 80.00), + (9, 'Urine Analysis', 'تحليل البول', 50.00, 'Normal'), + (9, 'Stool Analysis', 'تحليل البراز', 60.00, 'Normal'), + (9, 'Occult Blood in Stool', 'الدم الخفي في البراز', 80.00, 'Negative'), - (10, 'Troponin I', 'تروبونين I', 250.00), - (10, 'CK-MB', 'انزيم القلب CK-MB', 180.00)"); + (10, 'Troponin I', 'تروبونين I', 250.00, '< 0.04 ng/mL'), + (10, 'CK-MB', 'انزيم القلب CK-MB', 180.00, '< 5.0 ng/mL')"); } echo "Database setup completed successfully."; } catch (PDOException $e) { die("Database setup failed: " . $e->getMessage()); -} +} \ No newline at end of file diff --git a/laboratory_inquiries.php b/laboratory_inquiries.php new file mode 100644 index 0000000..d66ed5f --- /dev/null +++ b/laboratory_inquiries.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/lang.php b/lang.php index fffd01b..052725a 100644 --- a/lang.php +++ b/lang.php @@ -151,7 +151,19 @@ $translations = [ 'edit_test_group' => 'Edit Test Group', 'update_test_group' => 'Update Test Group', 'delete_test_group' => 'Delete Test Group', - 'no_test_groups_found' => 'No test groups found' + 'no_test_groups_found' => 'No test groups found', + 'normal_range' => 'Normal Range', + 'inquiries' => 'Inquiries', + 'outside_hospital' => 'Outside Hospital', + 'add_inquiry' => 'Add Inquiry', + 'edit_inquiry' => 'Edit Inquiry', + 'no_inquiries_found' => 'No inquiries found', + 'source' => 'Source', + 'internal' => 'Internal', + 'external' => 'External', + 'test' => 'Test', + 'inquiry_date' => 'Inquiry Date', + 'notes' => 'Notes' ], 'ar' => [ 'dashboard' => 'لوحة القيادة', @@ -304,6 +316,18 @@ $translations = [ 'edit_test_group' => 'تعديل مجموعة فحوصات', 'update_test_group' => 'تحديث بيانات المجموعة', 'delete_test_group' => 'حذف مجموعة فحوصات', - 'no_test_groups_found' => 'لم يتم العثور على مجموعات فحوصات' + 'no_test_groups_found' => 'لم يتم العثور على مجموعات فحوصات', + 'normal_range' => 'المعدل الطبيعي (رجال-نساء)', + 'inquiries' => 'الاستفسارات', + 'outside_hospital' => 'خارج المستشفى', + 'add_inquiry' => 'إضافة استفسار', + 'edit_inquiry' => 'تعديل استفسار', + 'no_inquiries_found' => 'لم يتم العثور على استفسارات', + 'source' => 'المصدر', + 'internal' => 'داخلي', + 'external' => 'خارجي', + 'test' => 'الفحص', + 'inquiry_date' => 'تاريخ الاستفسار', + 'notes' => 'ملاحظات' ] -]; +]; \ No newline at end of file diff --git a/nurses.php b/nurses.php index 824ed63..38f3abe 100644 --- a/nurses.php +++ b/nurses.php @@ -1,8 +1,14 @@ \ No newline at end of file diff --git a/test_groups.php b/test_groups.php index 0f39b1b..3da4966 100644 --- a/test_groups.php +++ b/test_groups.php @@ -1,9 +1,14 @@ \ No newline at end of file