crm

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // СТРУКТУРА $db->exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT, full_name TEXT, role TEXT)"); $db->exec("CREATE TABLE IF NOT EXISTS patients (id INTEGER PRIMARY KEY AUTOINCREMENT, full_name TEXT, phone TEXT, dob TEXT, doctor_id INTEGER, visit_date TEXT, visit_time TEXT, diagnosis TEXT, treatment TEXT, status TEXT DEFAULT 'Планується', price INTEGER DEFAULT 0, services_text TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP)"); $db->exec("CREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY AUTOINCREMENT, patient_id INTEGER, filename TEXT, original_name TEXT, uploaded_at DATETIME DEFAULT CURRENT_TIMESTAMP)"); $db->exec("CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY AUTOINCREMENT, user_text TEXT, action TEXT, details TEXT, log_time DATETIME DEFAULT CURRENT_TIMESTAMP)"); // НОВА ТАБЛИЦЯ ПОСЛУГ $db->exec("CREATE TABLE IF NOT EXISTS services (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price INTEGER)"); // Додаємо колонку services_text, якщо це оновлення з старої версії try { $db->query("SELECT services_text FROM patients LIMIT 1"); } catch (Exception $e) { $db->exec("ALTER TABLE patients ADD COLUMN services_text TEXT"); } // Адміни за замовчуванням if ($db->query("SELECT COUNT(*) FROM users")->fetchColumn() == 0) { $db->exec("INSERT INTO users (username, password, full_name, role) VALUES ('admin', '12345', 'Головний Адмін', 'admin')"); $db->exec("INSERT INTO users (username, password, full_name, role) VALUES ('recep', '12345', 'Реєстратура', 'reception')"); $db->exec("INSERT INTO users (username, password, full_name, role) VALUES ('doc1', '12345', 'Боднар О.В.', 'doctor')"); } } catch(PDOException $e) { die("Помилка БД: " . $e->getMessage()); } // --- ДРУК --- if (isset($_GET['print_id'])) { $stmt = $db->prepare("SELECT p.*, u.full_name as doc_name FROM patients p LEFT JOIN users u ON p.doctor_id = u.id WHERE p.id = ?"); $stmt->execute([$_GET['print_id']]); $rec = $stmt->fetch(PDO::FETCH_ASSOC); if (!$rec) die("Запис не знайдено"); ?> Виписка

🏥 МЕДИЧНИЙ ЦЕНТР "MedCRM"

м. Вінниця, тел. (0432) 55-55-55

КОНСУЛЬТАЦІЙНИЙ ВИСНОВОК

Пацієнт:
Дата:
Лікар:

Діагноз:
Лікування:
prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->execute([$_POST['username'], $_POST['password']]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { $_SESSION['user_id']=$user['id']; $_SESSION['user_name']=$user['full_name']; $_SESSION['user_role']=$user['role']; header("Location: ?"); exit; } } if (!isset($_SESSION['user_id'])) { ?>Вхід

🏥 MedCRM v4.4

prepare("UPDATE patients SET status = ? WHERE id = ?")->execute([$st, $pid]); } else { // Якщо завершено - пишемо ціну і послуги $db->prepare("UPDATE patients SET status = ?, price = ?, services_text = ? WHERE id = ?")->execute([$st, $price, $srv_text, $pid]); } header("Location: " . $_SERVER['REQUEST_URI']); exit; } // ДОДАВАННЯ ПАЦІЄНТА if ($_POST['action'] === 'add_patient') { $db->beginTransaction(); try { $stmt = $db->prepare("INSERT INTO patients (full_name, phone, dob, visit_date, visit_time, doctor_id, diagnosis, treatment, status, price) VALUES (?,?,?,?,?,?,?,?,?,0)"); $stmt->execute([$_POST['full_name'], $_POST['phone'], $_POST['dob'], $_POST['visit_date'], $_POST['visit_time'], $_POST['doctor_id'], $_POST['diagnosis'], $_POST['treatment'], 'Планується']); $pid = $db->lastInsertId(); if (isset($_FILES['attachment']) && $_FILES['attachment']['error'] == 0) { $fname = time() . "_" . basename($_FILES['attachment']['name']); if (move_uploaded_file($_FILES['attachment']['tmp_name'], $upload_dir . $fname)) { $db->prepare("INSERT INTO files (patient_id, filename, original_name) VALUES (?,?,?)")->execute([$pid, $fname, $_FILES['attachment']['name']]); } } $db->commit(); $msg = "✅ Запис створено!"; } catch(Exception $e) { $db->rollBack(); $msg = "Помилка: " . $e->getMessage(); } } // УПРАВЛІННЯ ПЕРСОНАЛОМ if ($_POST['action'] === 'add_user') { $db->prepare("INSERT INTO users (username, password, full_name, role) VALUES (?,?,?,?)")->execute([$_POST['u'], $_POST['p'], $_POST['n'], $_POST['r']]); $msg = "Співробітника додано"; } // УПРАВЛІННЯ ПРАЙСОМ if ($_POST['action'] === 'add_service') { $db->prepare("INSERT INTO services (name, price) VALUES (?,?)")->execute([$_POST['srv_name'], $_POST['srv_price']]); $msg = "Послугу додано"; } if ($_POST['action'] === 'del_service') { $db->prepare("DELETE FROM services WHERE id=?")->execute([$_POST['sid']]); $msg = "Послугу видалено"; } } // ДАНІ $doctors = $db->query("SELECT * FROM users WHERE role='doctor'")->fetchAll(PDO::FETCH_ASSOC); $services = $db->query("SELECT * FROM services")->fetchAll(PDO::FETCH_ASSOC); // Прайс $search = $_GET['search'] ?? ''; $history_phone = $_GET['history_phone'] ?? ''; $sql = "SELECT p.*, u.full_name as dname FROM patients p LEFT JOIN users u ON p.doctor_id = u.id WHERE 1=1"; $params = []; if ($history_phone) { $sql .= " AND p.phone = ?"; $params[] = $history_phone; $title = "Історія: $history_phone"; } elseif ($search) { $sql .= " AND (p.full_name LIKE ? OR p.phone LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; $title = "Пошук: $search"; } else { $start = $_GET['start'] ?? date('Y-m-01'); $end = $_GET['end'] ?? date('Y-m-t'); $sql .= " AND p.visit_date BETWEEN ? AND ?"; $params[] = $start; $params[] = $end; if ($cur_role === 'doctor') { $sql .= " AND p.doctor_id = ?"; $params[] = $cur_id; } $title = "Розклад ($start - $end)"; } $sql .= " ORDER BY p.visit_date DESC, p.visit_time ASC"; $rows = $db->prepare($sql); $rows->execute($params); $data = $rows->fetchAll(PDO::FETCH_ASSOC); // СТАТИСТИКА $stats = []; if ($cur_role === 'admin' && isset($_GET['show_stats'])) { $stats['total'] = $db->query("SELECT COUNT(*) FROM patients")->fetchColumn(); $stats['money'] = $db->query("SELECT SUM(price) FROM patients")->fetchColumn() ?: 0; $stats['top_doc'] = $db->query("SELECT u.full_name, COUNT(p.id) as cnt, SUM(p.price) as cash FROM patients p JOIN users u ON p.doctor_id = u.id GROUP BY u.id ORDER BY cnt DESC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC); } function getStatusColor($s) { if ($s == 'Планується') return 'bg-light text-dark border'; if ($s == 'Підтверджено') return 'bg-info text-white'; if ($s == 'Завершено') return 'bg-success text-white'; if ($s == 'Не прийшов') return 'bg-danger text-white'; return 'bg-secondary text-white'; } ?> MedCRM v4.4
$msg
"; ?>

₴

Загальна каса

Всього візитів
🏆 Ефективність
пац. ₴
⬅️ Назад
-
query("SELECT * FROM files WHERE patient_id = " . $r['id'])->fetchAll(PDO::FETCH_ASSOC); $bgClass = getStatusColor($r['status']); ?>
ЧасПацієнтЛікарСкаргаСтатус / ОплатаДії


📎 Файл
👨‍⚕️
-' ?>
🏷️
0): ?>
₴