From 63a866d89852eb61225779b7e3db7f576efb4b53 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 4 Mar 2026 06:26:39 +0000 Subject: [PATCH] Autosave: 20260304-062638 --- departments.php | 13 + doctors.php | 13 + employees.php | 23 + includes/actions.php | 313 +++++++- includes/common_data.php | 9 +- includes/layout/footer.php | 1091 ++++++++++++++++++++++++++- includes/layout/header.php | 35 +- includes/pages/billing.php | 106 ++- includes/pages/departments.php | 90 +++ includes/pages/doctors.php | 143 ++++ includes/pages/employees.php | 145 ++++ includes/pages/insurance.php | 99 ++- includes/pages/laboratory_tests.php | 125 +++ includes/pages/nurses.php | 137 ++++ includes/pages/patients.php | 125 ++- includes/pages/poisons.php | 105 +++ includes/pages/test_groups.php | 107 +++ includes/pages/visits.php | 128 +++- init_db.php | 135 +++- laboratory_tests.php | 9 + lang.php | 130 +++- nurses.php | 8 + poisons.php | 23 + test_groups.php | 9 + 24 files changed, 2997 insertions(+), 124 deletions(-) create mode 100644 departments.php create mode 100644 doctors.php create mode 100644 employees.php create mode 100644 includes/pages/departments.php create mode 100644 includes/pages/doctors.php create mode 100644 includes/pages/employees.php create mode 100644 includes/pages/laboratory_tests.php create mode 100644 includes/pages/nurses.php create mode 100644 includes/pages/poisons.php create mode 100644 includes/pages/test_groups.php create mode 100644 laboratory_tests.php create mode 100644 nurses.php create mode 100644 poisons.php create mode 100644 test_groups.php diff --git a/departments.php b/departments.php new file mode 100644 index 0000000..a9837f1 --- /dev/null +++ b/departments.php @@ -0,0 +1,13 @@ +prepare("INSERT INTO patients (name, phone, dob, gender, blood_group, address, insurance_company_id, policy_number) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->execute([$name, $phone, $dob, $gender, $blood_group, $address, $insurance_company_id, $policy_number]); - $message = __('add_patient') . ' ' . __('successfully'); + $_SESSION['flash_message'] = __('add_patient') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_patient') { + $id = $_POST['id'] ?? ''; + $name = $_POST['name'] ?? ''; + $phone = $_POST['phone'] ?? ''; + $dob = $_POST['dob'] ?? ''; + $gender = $_POST['gender'] ?? ''; + $blood_group = $_POST['blood_group'] ?? ''; + $address = $_POST['address'] ?? ''; + $insurance_company_id = $_POST['insurance_company_id'] ?: null; + $policy_number = $_POST['policy_number'] ?? ''; + + if ($id && $name && $phone) { + $stmt = $db->prepare("UPDATE patients SET name = ?, phone = ?, dob = ?, gender = ?, blood_group = ?, address = ?, insurance_company_id = ?, policy_number = ? WHERE id = ?"); + $stmt->execute([$name, $phone, $dob, $gender, $blood_group, $address, $insurance_company_id, $policy_number, $id]); + $_SESSION['flash_message'] = __('update_patient') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_patient') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM patients WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_patient') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_doctor') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $spec_en = $_POST['specialization_en'] ?? ''; + $spec_ar = $_POST['specialization_ar'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $tel = $_POST['tel'] ?? ''; + $email = $_POST['email'] ?? ''; + + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO doctors (name_en, name_ar, specialization_en, specialization_ar, department_id, tel, email) VALUES (?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$name_en, $name_ar, $spec_en, $spec_ar, $dept_id, $tel, $email]); + $_SESSION['flash_message'] = __('add_doctor') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_doctor') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $spec_en = $_POST['specialization_en'] ?? ''; + $spec_ar = $_POST['specialization_ar'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $tel = $_POST['tel'] ?? ''; + $email = $_POST['email'] ?? ''; + + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE doctors SET name_en = ?, name_ar = ?, specialization_en = ?, specialization_ar = ?, department_id = ?, tel = ?, email = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $spec_en, $spec_ar, $dept_id, $tel, $email, $id]); + $_SESSION['flash_message'] = __('update_doctor') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_doctor') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM doctors WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_doctor') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_nurse') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $tel = $_POST['tel'] ?? ''; + $email = $_POST['email'] ?? ''; + + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO nurses (name_en, name_ar, department_id, tel, email) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$name_en, $name_ar, $dept_id, $tel, $email]); + $_SESSION['flash_message'] = __('add_nurse') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_nurse') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $tel = $_POST['tel'] ?? ''; + $email = $_POST['email'] ?? ''; + + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE nurses SET name_en = ?, name_ar = ?, department_id = ?, tel = ?, email = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $dept_id, $tel, $email, $id]); + $_SESSION['flash_message'] = __('update_nurse') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_nurse') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM nurses WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_nurse') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_department') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO departments (name_en, name_ar) VALUES (?, ?)"); + $stmt->execute([$name_en, $name_ar]); + $_SESSION['flash_message'] = __('add_department') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_department') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE departments SET name_en = ?, name_ar = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $id]); + $_SESSION['flash_message'] = __('update_department') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_department') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM departments WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_department') . ' ' . __('successfully'); + $redirect = true; } } elseif ($_POST['action'] === 'add_insurance') { $name_en = $_POST['name_en'] ?? ''; @@ -28,7 +164,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($name_en && $name_ar) { $stmt = $db->prepare("INSERT INTO insurance_companies (name_en, name_ar, email, phone, contact_info) VALUES (?, ?, ?, ?, ?)"); $stmt->execute([$name_en, $name_ar, $email, $phone, $contact]); - $message = __('insurance_company') . ' ' . __('successfully'); + $_SESSION['flash_message'] = __('insurance_company') . ' ' . __('successfully'); + $redirect = true; } } elseif ($_POST['action'] === 'book_appointment') { $patient_id = $_POST['patient_id'] ?? ''; @@ -39,7 +176,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($patient_id && $doctor_id && $date) { $stmt = $db->prepare("INSERT INTO appointments (patient_id, doctor_id, appointment_date, reason) VALUES (?, ?, ?, ?)"); $stmt->execute([$patient_id, $doctor_id, $date, $reason]); - $message = __('book_appointment') . ' ' . __('successfully'); + $_SESSION['flash_message'] = __('book_appointment') . ' ' . __('successfully'); + $redirect = true; } } elseif ($_POST['action'] === 'record_visit') { $patient_id = $_POST['patient_id'] ?? ''; @@ -60,7 +198,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($appointment_id) { $db->prepare("UPDATE appointments SET status = 'Completed' WHERE id = ?")->execute([$appointment_id]); } - $message = __('visit_recorded'); + $_SESSION['flash_message'] = __('visit_recorded'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_visit') { + $id = $_POST['id'] ?? ''; + $patient_id = $_POST['patient_id'] ?? ''; + $doctor_id = $_POST['doctor_id'] ?? ''; + $weight = $_POST['weight'] ?? ''; + $bp = $_POST['blood_pressure'] ?? ''; + $hr = $_POST['heart_rate'] ?? ''; + $temp = $_POST['temperature'] ?? ''; + $symptoms = $_POST['symptoms'] ?? ''; + $diagnosis = $_POST['diagnosis'] ?? ''; + $treatment = $_POST['treatment_plan'] ?? ''; + + if ($id && $patient_id && $doctor_id) { + $stmt = $db->prepare("UPDATE visits SET patient_id = ?, doctor_id = ?, weight = ?, blood_pressure = ?, heart_rate = ?, temperature = ?, symptoms = ?, diagnosis = ?, treatment_plan = ? WHERE id = ?"); + $stmt->execute([$patient_id, $doctor_id, $weight, $bp, $hr, $temp, $symptoms, $diagnosis, $treatment, $id]); + $_SESSION['flash_message'] = __('update_visit') . ' ' . __('successfully'); + $redirect = true; } } elseif ($_POST['action'] === 'create_report') { $visit_id = $_POST['visit_id'] ?? ''; @@ -71,7 +228,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($visit_id && $type) { $stmt = $db->prepare("INSERT INTO provisional_reports (visit_id, report_type, findings, recommendations) VALUES (?, ?, ?, ?)"); $stmt->execute([$visit_id, $type, $findings, $recommendations]); - $message = __('report_created'); + $_SESSION['flash_message'] = __('report_created'); + $redirect = true; } } elseif ($_POST['action'] === 'create_bill') { $patient_id = $_POST['patient_id'] ?? ''; @@ -104,14 +262,153 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $item_stmt->execute([$bill_id, $desc, $amounts[$index]]); } } - $message = __('bill_created'); + $_SESSION['flash_message'] = __('bill_created'); + $redirect = true; } } elseif ($_POST['action'] === 'mark_paid') { $bill_id = $_POST['bill_id'] ?? ''; if ($bill_id) { $db->prepare("UPDATE bills SET status = 'Paid' WHERE id = ?")->execute([$bill_id]); - $message = __('bill_paid'); + $_SESSION['flash_message'] = __('bill_paid'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_employee') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $dob = $_POST['dob'] ?? ''; + $mobile = $_POST['mobile'] ?? ''; + $email = $_POST['email'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $passion_en = $_POST['passion_en'] ?? ''; + $passion_ar = $_POST['passion_ar'] ?? ''; + + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO employees (name_en, name_ar, dob, mobile, email, department_id, passion_en, passion_ar) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + $stmt->execute([$name_en, $name_ar, $dob, $mobile, $email, $dept_id, $passion_en, $passion_ar]); + $_SESSION['flash_message'] = __('add_employee') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_employee') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $dob = $_POST['dob'] ?? ''; + $mobile = $_POST['mobile'] ?? ''; + $email = $_POST['email'] ?? ''; + $dept_id = $_POST['department_id'] ?: null; + $passion_en = $_POST['passion_en'] ?? ''; + $passion_ar = $_POST['passion_ar'] ?? ''; + + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE employees SET name_en = ?, name_ar = ?, dob = ?, mobile = ?, email = ?, department_id = ?, passion_en = ?, passion_ar = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $dob, $mobile, $email, $dept_id, $passion_en, $passion_ar, $id]); + $_SESSION['flash_message'] = __('update_employee') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_employee') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM employees WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_employee') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_poison') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $desc_en = $_POST['description_en'] ?? ''; + $desc_ar = $_POST['description_ar'] ?? ''; + + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO poisons (name_en, name_ar, description_en, description_ar) VALUES (?, ?, ?, ?)"); + $stmt->execute([$name_en, $name_ar, $desc_en, $desc_ar]); + $_SESSION['flash_message'] = __('add_poison') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_poison') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $desc_en = $_POST['description_en'] ?? ''; + $desc_ar = $_POST['description_ar'] ?? ''; + + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE poisons SET name_en = ?, name_ar = ?, description_en = ?, description_ar = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $desc_en, $desc_ar, $id]); + $_SESSION['flash_message'] = __('update_poison') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_poison') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM poisons WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_poison') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_test_group') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + if ($name_en && $name_ar) { + $stmt = $db->prepare("INSERT INTO test_groups (name_en, name_ar) VALUES (?, ?)"); + $stmt->execute([$name_en, $name_ar]); + $_SESSION['flash_message'] = __('add_test_group') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_test_group') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + if ($id && $name_en && $name_ar) { + $stmt = $db->prepare("UPDATE test_groups SET name_en = ?, name_ar = ? WHERE id = ?"); + $stmt->execute([$name_en, $name_ar, $id]); + $_SESSION['flash_message'] = __('update_test_group') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_test_group') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM test_groups WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_test_group') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'add_test') { + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $group_id = $_POST['group_id'] ?: null; + $price = $_POST['price'] ?? 0; + 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]); + $_SESSION['flash_message'] = __('add_test') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'edit_test') { + $id = $_POST['id'] ?? ''; + $name_en = $_POST['name_en'] ?? ''; + $name_ar = $_POST['name_ar'] ?? ''; + $group_id = $_POST['group_id'] ?: null; + $price = $_POST['price'] ?? 0; + 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]); + $_SESSION['flash_message'] = __('update_test') . ' ' . __('successfully'); + $redirect = true; + } + } elseif ($_POST['action'] === 'delete_test') { + $id = $_POST['id'] ?? ''; + if ($id) { + $stmt = $db->prepare("DELETE FROM laboratory_tests WHERE id = ?"); + $stmt->execute([$id]); + $_SESSION['flash_message'] = __('delete_test') . ' ' . __('successfully'); + $redirect = true; } } } -} + + if ($redirect) { + header("Location: " . $_SERVER['REQUEST_URI']); + exit; + } +} \ No newline at end of file diff --git a/includes/common_data.php b/includes/common_data.php index 11f4845..28ab8f8 100644 --- a/includes/common_data.php +++ b/includes/common_data.php @@ -2,10 +2,17 @@ // Common data for selects $all_doctors = $db->query("SELECT id, name_$lang as name FROM doctors")->fetchAll(); $all_patients = $db->query("SELECT id, name FROM patients")->fetchAll(); +$all_nurses = $db->query("SELECT id, name_$lang as name FROM nurses")->fetchAll(); +$all_departments = $db->query("SELECT id, name_$lang as name FROM departments")->fetchAll(); +$all_employees = $db->query("SELECT id, name_$lang as name FROM employees")->fetchAll(); +$all_poisons = $db->query("SELECT id, name_$lang as name FROM poisons")->fetchAll(); $all_insurance = $db->query("SELECT id, name_$lang as name FROM insurance_companies")->fetchAll(); +$all_test_groups = $db->query("SELECT id, name_$lang as name FROM test_groups")->fetchAll(); +$all_tests = $db->query("SELECT id, name_$lang as name, price FROM laboratory_tests")->fetchAll(); + $scheduled_appointments = $db->query(" SELECT a.id, p.name as patient_name, a.appointment_date, a.patient_id, a.doctor_id FROM appointments a JOIN patients p ON a.patient_id = p.id WHERE a.status = 'Scheduled' - ORDER BY a.appointment_date ASC")->fetchAll(); + ORDER BY a.appointment_date ASC")->fetchAll(); \ No newline at end of file diff --git a/includes/layout/footer.php b/includes/layout/footer.php index 065a9df..39b91f5 100644 --- a/includes/layout/footer.php +++ b/includes/layout/footer.php @@ -74,6 +74,438 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/includes/pages/billing.php b/includes/pages/billing.php index 13f53f1..cad782e 100644 --- a/includes/pages/billing.php +++ b/includes/pages/billing.php @@ -1,61 +1,111 @@ query($bills_sql)->fetchAll(); + WHERE 1=1"; +$params = []; + +if ($search_patient) { + $query .= " AND p.name LIKE ?"; + $params[] = "%$search_patient%"; +} +if ($search_status) { + $query .= " AND b.status = ?"; + $params[] = $search_status; +} + +$query .= " ORDER BY b.created_at DESC"; +$stmt = $db->prepare($query); +$stmt->execute($params); +$bills = $stmt->fetchAll(); ?> -
-
-
+ +
+

+
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+ +
- - +
+ - - - - - - - - + + + + + + + + + + + + + - - - - + + + + - + - - - +
IDID
+ + No bills found. +
#$#$ $$$ - + +
-
No bills found.
-
+
\ No newline at end of file diff --git a/includes/pages/departments.php b/includes/pages/departments.php new file mode 100644 index 0000000..31a8c66 --- /dev/null +++ b/includes/pages/departments.php @@ -0,0 +1,90 @@ +prepare($query); +$stmt->execute($params); +$departments = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+ + +
+
+
+
+
\ No newline at end of file diff --git a/includes/pages/doctors.php b/includes/pages/doctors.php new file mode 100644 index 0000000..844916e --- /dev/null +++ b/includes/pages/doctors.php @@ -0,0 +1,143 @@ +prepare($query); +$stmt->execute($params); +$doctors = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+
+ + +
+
+ + + + +
+ + +
+
+
+
+
diff --git a/includes/pages/employees.php b/includes/pages/employees.php new file mode 100644 index 0000000..69ef418 --- /dev/null +++ b/includes/pages/employees.php @@ -0,0 +1,145 @@ +prepare($query); +$stmt->execute($params); +$employees = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+
+ + +
+
+ + + + +
+ + +
+
+
+
+
diff --git a/includes/pages/insurance.php b/includes/pages/insurance.php index baf3519..716f44c 100644 --- a/includes/pages/insurance.php +++ b/includes/pages/insurance.php @@ -1,41 +1,92 @@ query("SELECT * FROM insurance_companies ORDER BY id DESC")->fetchAll(); +$search_name = $_GET['name'] ?? ''; +$search_phone = $_GET['phone'] ?? ''; + +$query = "SELECT * FROM insurance_companies WHERE 1=1"; +$params = []; + +if ($search_name) { + $query .= " AND (name_en LIKE ? OR name_ar LIKE ?)"; + $params[] = "%$search_name%"; + $params[] = "%$search_name%"; +} +if ($search_phone) { + $query .= " AND phone LIKE ?"; + $params[] = "%$search_phone%"; +} + +$query .= " ORDER BY id DESC"; +$stmt = $db->prepare($query); +$stmt->execute($params); +$insurance_companies = $stmt->fetchAll(); ?> -
-
-
- + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
- - +
+ - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - +
ID (EN) (AR)ID
+ + No insurance companies found. +
##
No insurance companies found.
-
+
\ No newline at end of file diff --git a/includes/pages/laboratory_tests.php b/includes/pages/laboratory_tests.php new file mode 100644 index 0000000..1060403 --- /dev/null +++ b/includes/pages/laboratory_tests.php @@ -0,0 +1,125 @@ +prepare($query); +$stmt->execute($params); +$tests = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+ + + + +
+ + +
+
+
+
+
diff --git a/includes/pages/nurses.php b/includes/pages/nurses.php new file mode 100644 index 0000000..8219fbb --- /dev/null +++ b/includes/pages/nurses.php @@ -0,0 +1,137 @@ +prepare($query); +$stmt->execute($params); +$nurses = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+
+
diff --git a/includes/pages/patients.php b/includes/pages/patients.php index 4e1748a..9599926 100644 --- a/includes/pages/patients.php +++ b/includes/pages/patients.php @@ -1,43 +1,122 @@ query($patients_sql)->fetchAll(); + WHERE 1=1"; +$params = []; + +if ($search_name) { + $query .= " AND p.name LIKE ?"; + $params[] = "%$search_name%"; +} +if ($search_phone) { + $query .= " AND p.phone LIKE ?"; + $params[] = "%$search_phone%"; +} + +$query .= " ORDER BY p.id DESC"; +$stmt = $db->prepare($query); +$stmt->execute($params); +$patients = $stmt->fetchAll(); ?> -
-
-
- + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
- - +
+ - - - - - - + + + + + + + + + + + - + - - - + + + - - +
+ + No patients found. +
+
+ +
+ + + + +
+ + + + +
+
No patients found.
diff --git a/includes/pages/poisons.php b/includes/pages/poisons.php new file mode 100644 index 0000000..2156340 --- /dev/null +++ b/includes/pages/poisons.php @@ -0,0 +1,105 @@ +prepare($query); +$stmt->execute($params); +$poisons = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+ + +
+
+
+
+
diff --git a/includes/pages/test_groups.php b/includes/pages/test_groups.php new file mode 100644 index 0000000..ab3efa0 --- /dev/null +++ b/includes/pages/test_groups.php @@ -0,0 +1,107 @@ +prepare($query); +$stmt->execute($params); +$groups = $stmt->fetchAll(); +?> + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
#
+ + +
+
+
+ +
+
+
+ +
+
+
+ + + + +
+ + +
+
+
+
+
diff --git a/includes/pages/visits.php b/includes/pages/visits.php index b8fef11..e396c82 100644 --- a/includes/pages/visits.php +++ b/includes/pages/visits.php @@ -1,54 +1,124 @@ query($visits_sql)->fetchAll(); + WHERE 1=1"; +$params = []; + +if ($search_patient) { + $query .= " AND p.name LIKE ?"; + $params[] = "%$search_patient%"; +} +if ($search_doctor) { + $query .= " AND (d.name_en LIKE ? OR d.name_ar LIKE ?)"; + $params[] = "%$search_doctor%"; + $params[] = "%$search_doctor%"; +} +if ($search_date) { + $query .= " AND DATE(v.visit_date) = ?"; + $params[] = $search_date; +} + +$query .= " ORDER BY v.visit_date DESC"; +$stmt = $db->prepare($query); +$stmt->execute($params); +$visits = $stmt->fetchAll(); ?> -
-
-
- + +
+

+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
- - +
+ - - - - - + + + + + + + + + + - - - - - + + + + - - +
+ + No visits found. +
-
-
+
+ - +
No visits recorded yet.
-
+
\ No newline at end of file diff --git a/init_db.php b/init_db.php index d561bea..7ead07d 100644 --- a/init_db.php +++ b/init_db.php @@ -19,6 +19,19 @@ try { specialization_en VARCHAR(255), specialization_ar VARCHAR(255), department_id INT, + tel VARCHAR(20), + email VARCHAR(100), + FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS nurses ( + id INT AUTO_INCREMENT PRIMARY KEY, + name_en VARCHAR(255) NOT NULL, + name_ar VARCHAR(255) NOT NULL, + department_id INT, + tel VARCHAR(20), + email VARCHAR(100), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -107,6 +120,46 @@ try { amount DECIMAL(10, 2), FOREIGN KEY (bill_id) REFERENCES bills(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS employees ( + id INT AUTO_INCREMENT PRIMARY KEY, + name_en VARCHAR(255) NOT NULL, + name_ar VARCHAR(255) NOT NULL, + dob DATE, + mobile VARCHAR(50), + email VARCHAR(100), + department_id INT, + passion_en TEXT, + passion_ar TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS poisons ( + id INT AUTO_INCREMENT PRIMARY KEY, + name_en VARCHAR(255) NOT NULL, + name_ar VARCHAR(255) NOT NULL, + description_en TEXT, + description_ar TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS test_groups ( + id INT AUTO_INCREMENT PRIMARY KEY, + name_en VARCHAR(255) NOT NULL, + name_ar VARCHAR(255) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + + CREATE TABLE IF NOT EXISTS laboratory_tests ( + id INT AUTO_INCREMENT PRIMARY KEY, + group_id INT, + name_en VARCHAR(255) NOT NULL, + name_ar VARCHAR(255) NOT NULL, + price DECIMAL(10, 2) NOT NULL DEFAULT 0.00, + 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; "; $db->exec($sql); @@ -127,6 +180,11 @@ try { $db->exec("ALTER TABLE bills ADD COLUMN IF NOT EXISTS insurance_covered DECIMAL(10, 2) DEFAULT 0.00"); $db->exec("ALTER TABLE bills ADD COLUMN IF NOT EXISTS patient_payable DECIMAL(10, 2) DEFAULT 0.00"); } catch (Exception $e) {} + + 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) {} // Seed departments $stmt = $db->query("SELECT COUNT(*) FROM departments"); @@ -155,8 +213,83 @@ try { ('Tawuniya', 'التعاونية', '920019990'), ('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"); + + $db->exec("INSERT INTO test_groups (id, name_en, name_ar) VALUES + (1, 'Hematology', 'علم الدم'), + (2, 'Biochemistry', 'الكيمياء الحيوية'), + (3, 'Microbiology', 'علم الأحياء الدقيقة'), + (4, 'Serology', 'علم المصل'), + (5, 'Immunology', 'علم المناعة'), + (6, 'Hormones', 'الهرمونات'), + (7, 'Coagulation', 'التخثر'), + (8, 'Electrolytes', 'الأملاح والمعادن'), + (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), + + (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), + + (3, 'Urine Culture', 'مزرعة البول', 250.00), + (3, 'Stool Culture', 'مزرعة البراز', 250.00), + (3, 'Blood Culture', 'مزرعة الدم', 450.00), + (3, 'Throat Swab', 'مسحة الحلق', 200.00), + + (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), + + (5, 'ANA', 'الأجسام المضادة للنواة', 220.00), + (5, 'Anti-dsDNA', 'الأجسام المضادة للحمض النووي', 280.00), + (5, 'Total IgE', 'الغلوبولين المناعي الكلي E', 190.00), + + (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), + + (7, 'PT (Prothrombin Time)', 'وقت البروثرومبين', 100.00), + (7, 'PTT (Partial Thromboplastin Time)', 'وقت الثرومبوبلاستين الجزئي', 120.00), + (7, 'INR', 'النسبة المعيارية الدولية', 100.00), + (7, 'D-Dimer', 'دي دايمر', 300.00), + + (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), + + (9, 'Urine Analysis', 'تحليل البول', 50.00), + (9, 'Stool Analysis', 'تحليل البراز', 60.00), + (9, 'Occult Blood in Stool', 'الدم الخفي في البراز', 80.00), + + (10, 'Troponin I', 'تروبونين I', 250.00), + (10, 'CK-MB', 'انزيم القلب CK-MB', 180.00)"); + } echo "Database setup completed successfully."; } catch (PDOException $e) { die("Database setup failed: " . $e->getMessage()); -} \ No newline at end of file +} diff --git a/laboratory_tests.php b/laboratory_tests.php new file mode 100644 index 0000000..10e2812 --- /dev/null +++ b/laboratory_tests.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/lang.php b/lang.php index 6214b06..fffd01b 100644 --- a/lang.php +++ b/lang.php @@ -59,6 +59,8 @@ $translations = [ 'billing' => 'Billing', 'view_visit' => 'View Visit', 'add_visit' => 'Record Visit', + 'edit_visit' => 'Edit Visit', + 'update_visit' => 'Update Visit', 'appointment' => 'Appointment', 'visit_recorded' => 'Visit recorded successfully', 'report_created' => 'Provisional report created successfully', @@ -89,7 +91,67 @@ $translations = [ 'patient_payable' => 'Patient Payable', 'successfully' => 'successfully', 'optional' => 'Optional', - 'email' => 'Email' + 'email' => 'Email', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'add_bill' => 'Add Bill', + 'update_patient' => 'Update Patient', + 'delete_patient' => 'Delete Patient', + 'confirm_delete' => 'Are you sure you want to delete', + 'add_doctor' => 'Add Doctor', + 'add_department' => 'Add Department', + 'name_en' => 'Name (English)', + 'name_ar' => 'Name (Arabic)', + 'specialization_en' => 'Specialization (English)', + 'specialization_ar' => 'Specialization (Arabic)', + 'update_doctor' => 'Update Doctor', + 'delete_doctor' => 'Delete Doctor', + 'update_department' => 'Update Department', + 'delete_department' => 'Delete Department', + 'no_doctors_found' => 'No doctors found', + 'no_departments_found' => 'No departments found', + 'all' => 'All', + 'nurses' => 'Nurses', + 'add_nurse' => 'Add Nurse', + 'edit_nurse' => 'Edit Nurse', + 'update_nurse' => 'Update Nurse', + 'delete_nurse' => 'Delete Nurse', + 'no_nurses_found' => 'No nurses found', + 'settings' => 'Settings', + 'employees' => 'Employees', + 'poisons' => 'Poisons', + 'mobile' => 'Mobile', + 'passion' => 'Passion', + 'passion_en' => 'Passion (English)', + 'passion_ar' => 'Passion (Arabic)', + 'add_employee' => 'Add Employee', + 'edit_employee' => 'Edit Employee', + 'update_employee' => 'Update Employee', + 'delete_employee' => 'Delete Employee', + 'no_employees_found' => 'No employees found', + 'add_poison' => 'Add Poison', + 'edit_poison' => 'Edit Poison', + 'update_poison' => 'Update Poison', + 'delete_poison' => 'Delete Poison', + 'no_poisons_found' => 'No poisons found', + 'description_en' => 'Description (English)', + 'description_ar' => 'Description (Arabic)', + 'laboratory' => 'Laboratory', + 'tests' => 'Tests', + 'test_groups' => 'Test Groups', + 'test_name' => 'Test Name', + 'test_group' => 'Test Group', + 'price' => 'Price', + 'add_test' => 'Add Test', + 'edit_test' => 'Edit Test', + 'update_test' => 'Update Test', + 'delete_test' => 'Delete Test', + 'no_tests_found' => 'No tests found', + 'add_test_group' => 'Add Test Group', + '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' ], 'ar' => [ 'dashboard' => 'لوحة القيادة', @@ -150,6 +212,8 @@ $translations = [ 'billing' => 'الفواتير', 'view_visit' => 'عرض الزيارة', 'add_visit' => 'تسجيل زيارة', + 'edit_visit' => 'تعديل زيارة', + 'update_visit' => 'تحديث الزيارة', 'appointment' => 'الموعد', 'visit_recorded' => 'تم تسجيل الزيارة بنجاح', 'report_created' => 'تم إنشاء التقرير المؤقت بنجاح', @@ -180,6 +244,66 @@ $translations = [ 'patient_payable' => 'مبلغ المريض', 'successfully' => 'بنجاح', 'optional' => 'اختياري', - 'email' => 'البريد الإلكتروني' + 'email' => 'البريد الإلكتروني', + 'edit' => 'تعديل', + 'delete' => 'حذف', + 'add_bill' => 'إضافة فاتورة', + 'update_patient' => 'تحديث بيانات المريض', + 'delete_patient' => 'حذف مريض', + 'confirm_delete' => 'هل أنت متأكد أنك تريد حذف', + 'add_doctor' => 'إضافة طبيب', + 'add_department' => 'إضافة قسم', + 'name_en' => 'الاسم (إنجليزي)', + 'name_ar' => 'الاسم (عربي)', + 'specialization_en' => 'التخصص (إنجليزي)', + 'specialization_ar' => 'التخصص (عربي)', + 'update_doctor' => 'تحديث بيانات الطبيب', + 'delete_doctor' => 'حذف طبيب', + 'update_department' => 'تحديث القسم', + 'delete_department' => 'حذف قسم', + 'no_doctors_found' => 'لم يتم العثور على أطباء', + 'no_departments_found' => 'لم يتم العثور على أقسام', + 'all' => 'الكل', + 'nurses' => 'الممرضات', + 'add_nurse' => 'إضافة ممرضة', + 'edit_nurse' => 'تعديل ممرضة', + 'update_nurse' => 'تحديث بيانات الممرضة', + 'delete_nurse' => 'حذف ممرضة', + 'no_nurses_found' => 'لم يتم العثور على ممرضات', + 'settings' => 'الإعدادات', + 'employees' => 'الموظفون', + 'poisons' => 'السموم', + 'mobile' => 'الجوال', + 'passion' => 'الشغف', + 'passion_en' => 'الشغف (إنجليزي)', + 'passion_ar' => 'الشغف (عربي)', + 'add_employee' => 'إضافة موظف', + 'edit_employee' => 'تعديل موظف', + 'update_employee' => 'تحديث بيانات الموظف', + 'delete_employee' => 'حذف موظف', + 'no_employees_found' => 'لم يتم العثور على موظفين', + 'add_poison' => 'إضافة سم', + 'edit_poison' => 'تعديل سم', + 'update_poison' => 'تحديث بيانات السم', + 'delete_poison' => 'حذف سم', + 'no_poisons_found' => 'لم يتم العثور على سموم', + 'description_en' => 'الوصف (إنجليزي)', + 'description_ar' => 'الوصف (عربي)', + 'laboratory' => 'المختبر', + 'tests' => 'الفحوصات', + 'test_groups' => 'مجموعات الفحوصات', + 'test_name' => 'اسم الفحص', + 'test_group' => 'مجموعة الفحص', + 'price' => 'السعر', + 'add_test' => 'إضافة فحص', + 'edit_test' => 'تعديل فحص', + 'update_test' => 'تحديث بيانات الفحص', + 'delete_test' => 'حذف فحص', + 'no_tests_found' => 'لم يتم العثور على فحوصات', + 'add_test_group' => 'إضافة مجموعة فحوصات', + 'edit_test_group' => 'تعديل مجموعة فحوصات', + 'update_test_group' => 'تحديث بيانات المجموعة', + 'delete_test_group' => 'حذف مجموعة فحوصات', + 'no_test_groups_found' => 'لم يتم العثور على مجموعات فحوصات' ] -]; \ No newline at end of file +]; diff --git a/nurses.php b/nurses.php new file mode 100644 index 0000000..824ed63 --- /dev/null +++ b/nurses.php @@ -0,0 +1,8 @@ + \ No newline at end of file