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("Запис не знайдено");
?>
Виписка
Діагноз:Лікування: 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'])) { ?>Вхід 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
🏥 МЕДИЧНИЙ ЦЕНТР "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
$msg
"; ?>
₴
Загальна касаВсього візитів
🏆 Ефективність
| пац. | ₴ |