Files
2026-03-05 10:25:39 +01:00

84 lines
2.6 KiB
PHP

<?php
// /public/cabinet/events.php
require_once __DIR__ . '/../includes/init_secretaire.php';
// --- Inputs ---
$compteId = (int)($_SESSION['compte_id'] ?? 0);
$praticien_id = (int)($_POST['praticien_id'] ?? $_GET['praticien_id'] ?? 0);
// FullCalendar envoie start/end en ISO (UTC). On les rend optionnels.
$startIso = isset($_POST['start']) ? (string)$_POST['start'] : (isset($_GET['start']) ? (string)$_GET['start'] : null);
$endIso = isset($_POST['end']) ? (string)$_POST['end'] : (isset($_GET['end']) ? (string)$_GET['end'] : null);
if ($compteId <= 0 || $praticien_id <= 0) { echo json_encode([]); exit; }
// --- Sécurité: vérifier appartenance secrétaire → praticien ---
$chk = $pdo->prepare("
SELECT 1
FROM secretaire_praticien
WHERE secretaire_user_id = :u
AND praticien_id = :p
AND is_active = 1
LIMIT 1
");
$chk->execute(['u'=>$compteId,'p'=>$praticien_id]);
if (!$chk->fetchColumn()) { echo json_encode([]); exit; }
// --- Requête RDV (avec plage si fournie) ---
$params = [':p' => $praticien_id];
$whereDates = '';
if ($startIso && $endIso) {
// On normalise en 'Y-m-d H:i:s'
$startSql = date('Y-m-d H:i:s', strtotime($startIso));
$endSql = date('Y-m-d H:i:s', strtotime($endIso));
$whereDates = " AND rv.date_rdv BETWEEN :d1 AND :d2 ";
$params[':d1'] = $startSql;
$params[':d2'] = $endSql;
}
$sql = "
SELECT rv.id, rv.date_rdv, rv.duree_minutes, rv.statut, rv.lieu,
c.nom, c.prenom
FROM rendez_vous rv
JOIN client c ON rv.client_id = c.id
WHERE rv.praticien_id = :p
$whereDates
ORDER BY rv.date_rdv ASC
";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$rdvs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// --- Mappage couleurs par statut ---
$couleurs = [
'prévu' => '#f39c12', // orange
'confirmé' => '#27ae60', // vert
'annulé' => '#c0392b', // rouge
'terminé' => '#7f8c8d', // gris
];
// --- Construction des events ---
$tz = new DateTimeZone('Europe/Paris');
$events = [];
foreach ($rdvs as $r) {
$start = new DateTime($r['date_rdv'], $tz);
$end = (clone $start)->modify('+' . (int)($r['duree_minutes'] ?? 60) . ' minutes');
$statut = (string)$r['statut'];
$events[] = [
'id' => (int)$r['id'],
'title' => trim(($r['prenom'] ?? '') . ' ' . ($r['nom'] ?? '')),
'start' => $start->format(DateTime::ATOM), // ISO 8601
'end' => $end->format(DateTime::ATOM),
'allDay' => false,
'color' => $couleurs[$statut] ?? '#999',
// Champ non standard → disponible via event.extendedProps.statut côté FC
'statut' => ucfirst($statut),
];
}
echo json_encode($events, JSON_UNESCAPED_UNICODE);