Init Git Prod Mars 2026
This commit is contained in:
commit
d81efe93b1
362 files changed
+86627
No files matched your search
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../../includes/init_praticien.php';
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
|
||||
header('Pragma: no-cache');
|
||||
|
||||
$praticien_id = (int)($_SESSION['reference_id'] ?? 0);
|
||||
if ($praticien_id <= 0) {
|
||||
http_response_code(401);
|
||||
echo json_encode(['ok'=>false,'message'=>'Unauthorized']); exit;
|
||||
}
|
||||
|
||||
$qRaw = trim((string)($_GET['q'] ?? ''));
|
||||
$hasQ = ($qRaw !== '');
|
||||
$qLike = '%'.$qRaw.'%';
|
||||
|
||||
$page = max(1, (int)($_GET['page'] ?? 1));
|
||||
$limit = 10;
|
||||
$offset= ($page-1)*$limit;
|
||||
|
||||
try {
|
||||
// ----- TOTAL
|
||||
$sqlTotal = "SELECT COUNT(*) FROM client_dossiers d
|
||||
JOIN client c ON c.id=d.client_id
|
||||
WHERE d.praticien_id=:p AND d.archived_at IS NULL";
|
||||
$paramsT = [':p'=>$praticien_id];
|
||||
if ($hasQ) {
|
||||
$sqlTotal .= " AND (
|
||||
c.nom LIKE :q_nom
|
||||
OR c.prenom LIKE :q_prenom
|
||||
OR c.email LIKE :q_email
|
||||
OR c.telephone LIKE :q_tel
|
||||
OR d.tags LIKE :q_tags
|
||||
)";
|
||||
$paramsT[':q_nom'] = $qLike;
|
||||
$paramsT[':q_prenom'] = $qLike;
|
||||
$paramsT[':q_email'] = $qLike;
|
||||
$paramsT[':q_tel'] = $qLike;
|
||||
$paramsT[':q_tags'] = $qLike;
|
||||
}
|
||||
|
||||
$stT = $pdo->prepare($sqlTotal);
|
||||
foreach ($paramsT as $k=>$v) {
|
||||
$stT->bindValue($k, $v, $k===':p' ? PDO::PARAM_INT : PDO::PARAM_STR);
|
||||
}
|
||||
$stT->execute();
|
||||
$total = (int)$stT->fetchColumn();
|
||||
|
||||
// ----- PAGE
|
||||
$sql = "SELECT d.id AS dossier_id, d.tags,
|
||||
c.nom, c.prenom, c.email, c.telephone,
|
||||
(SELECT MAX(rv.date_rdv) FROM rendez_vous rv
|
||||
WHERE rv.client_id=d.client_id AND rv.praticien_id=d.praticien_id
|
||||
AND rv.statut IN ('confirmé','terminé')) AS last_rdv,
|
||||
(SELECT LEFT(s.prochaine_action, 120) FROM client_suivi s
|
||||
WHERE s.dossier_id=d.id ORDER BY s.date_rdv DESC, s.id DESC LIMIT 1) AS last_note
|
||||
FROM client_dossiers d
|
||||
JOIN client c ON c.id=d.client_id
|
||||
WHERE d.praticien_id=:p AND d.archived_at IS NULL";
|
||||
$params = [':p'=>$praticien_id];
|
||||
if ($hasQ) {
|
||||
$sql .= " AND (
|
||||
c.nom LIKE :q_nom
|
||||
OR c.prenom LIKE :q_prenom
|
||||
OR c.email LIKE :q_email
|
||||
OR c.telephone LIKE :q_tel
|
||||
OR d.tags LIKE :q_tags
|
||||
)";
|
||||
$params[':q_nom'] = $qLike;
|
||||
$params[':q_prenom'] = $qLike;
|
||||
$params[':q_email'] = $qLike;
|
||||
$params[':q_tel'] = $qLike;
|
||||
$params[':q_tags'] = $qLike;
|
||||
}
|
||||
|
||||
// tri: d'abord ceux qui ont un last_rdv, puis par date desc, puis maj dossier
|
||||
$sql .= " ORDER BY (last_rdv IS NULL) ASC, last_rdv DESC, d.updated_at DESC
|
||||
LIMIT :lim OFFSET :off";
|
||||
|
||||
$st = $pdo->prepare($sql);
|
||||
foreach ($params as $k=>$v) {
|
||||
if ($k === ':p') $st->bindValue($k, $v, PDO::PARAM_INT);
|
||||
else $st->bindValue($k, $v, PDO::PARAM_STR);
|
||||
}
|
||||
$st->bindValue(':lim', $limit, PDO::PARAM_INT);
|
||||
$st->bindValue(':off', $offset, PDO::PARAM_INT);
|
||||
$st->execute();
|
||||
|
||||
$items=[];
|
||||
while($r=$st->fetch(PDO::FETCH_ASSOC)){
|
||||
$items[]=[
|
||||
'dossier_id' => (int)$r['dossier_id'],
|
||||
'tags' => $r['tags'],
|
||||
'client_name' => trim(($r['prenom'] ?? '').' '.($r['nom'] ?? '')),
|
||||
'email' => $r['email'] ?? '',
|
||||
'telephone' => $r['telephone'] ?? '',
|
||||
'last_rdv_fmt' => !empty($r['last_rdv']) ? (new DateTime($r['last_rdv']))->format('d/m/Y H:i') : '',
|
||||
'last_note' => $r['last_note'] ?? ''
|
||||
];
|
||||
}
|
||||
|
||||
echo json_encode(['ok'=>true,'items'=>$items,'total'=>$total,'limit'=>$limit]);
|
||||
} catch (Throwable $e) {
|
||||
error_log('clients/ajax_list error: '.$e->getMessage());
|
||||
http_response_code(500);
|
||||
echo json_encode(['ok'=>false,'message'=>'Erreur serveur']);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user