switched first completed to last completed on needs followup table
Some checks failed
PHPUnit / test (push) Has been cancelled

This commit is contained in:
2026-06-12 20:20:56 +02:00
parent 5b5cc52133
commit d807f753b1
2 changed files with 17 additions and 17 deletions

View File

@ -180,24 +180,24 @@ function qdb_analytics_stale_clients(PDO $pdo, array $tokenRec): array {
SELECT cl.clientCode, SELECT cl.clientCode,
co.username AS coachUsername, co.username AS coachUsername,
co.coachID, co.coachID,
fc.firstCompletedAt, lc.lastCompletedAt,
fc.firstQuestionnaireID, lc.lastQuestionnaireID,
qn.name AS firstQuestionnaireName, qn.name AS lastQuestionnaireName,
la.lastActivityAt, la.lastActivityAt,
n.note AS followupNote n.note AS followupNote
FROM client cl FROM client cl
INNER JOIN ( INNER JOIN (
SELECT cq.clientCode, cq.questionnaireID AS firstQuestionnaireID, cq.completedAt AS firstCompletedAt SELECT cq.clientCode, cq.questionnaireID AS lastQuestionnaireID, cq.completedAt AS lastCompletedAt
FROM completed_questionnaire cq FROM completed_questionnaire cq
WHERE cq.completedAt IS NOT NULL WHERE cq.completedAt IS NOT NULL
AND cq.rowid = ( AND cq.rowid = (
SELECT c2.rowid FROM completed_questionnaire c2 SELECT c2.rowid FROM completed_questionnaire c2
WHERE c2.clientCode = cq.clientCode AND c2.completedAt IS NOT NULL WHERE c2.clientCode = cq.clientCode AND c2.completedAt IS NOT NULL
ORDER BY c2.completedAt ASC, c2.questionnaireID ASC ORDER BY c2.completedAt DESC, c2.questionnaireID DESC
LIMIT 1 LIMIT 1
) )
) fc ON fc.clientCode = cl.clientCode ) lc ON lc.clientCode = cl.clientCode
LEFT JOIN questionnaire qn ON qn.questionnaireID = fc.firstQuestionnaireID LEFT JOIN questionnaire qn ON qn.questionnaireID = lc.lastQuestionnaireID
LEFT JOIN coach co ON co.coachID = cl.coachID LEFT JOIN coach co ON co.coachID = cl.coachID
LEFT JOIN ( LEFT JOIN (
SELECT qs.clientCode, MAX(qs.submittedAt) AS lastActivityAt SELECT qs.clientCode, MAX(qs.submittedAt) AS lastActivityAt
@ -221,10 +221,10 @@ function qdb_analytics_stale_clients(PDO $pdo, array $tokenRec): array {
$out[] = [ $out[] = [
'clientCode' => $r['clientCode'], 'clientCode' => $r['clientCode'],
'coachUsername' => $r['coachUsername'] ?? $r['coachID'], 'coachUsername' => $r['coachUsername'] ?? $r['coachID'],
'firstQuestionnaireID' => $r['firstQuestionnaireID'], 'lastQuestionnaireID' => $r['lastQuestionnaireID'],
'firstQuestionnaireName'=> $r['firstQuestionnaireName'] ?? $r['firstQuestionnaireID'], 'lastQuestionnaireName' => $r['lastQuestionnaireName'] ?? $r['lastQuestionnaireID'],
'firstCompletedAt' => $r['firstCompletedAt'] 'lastCompletedAt' => $r['lastCompletedAt']
? date('Y-m-d H:i', (int)$r['firstCompletedAt']) : '', ? date('Y-m-d H:i', (int)$r['lastCompletedAt']) : '',
'lastActivityAt' => $lastAt ? date('Y-m-d H:i', $lastAt) : '', 'lastActivityAt' => $lastAt ? date('Y-m-d H:i', $lastAt) : '',
'daysSinceLastActivity' => $daysSince, 'daysSinceLastActivity' => $daysSince,
'note' => $r['followupNote'] ?? '', 'note' => $r['followupNote'] ?? '',

View File

@ -170,7 +170,7 @@ function renderInsights() {
<table class="data-table"> <table class="data-table">
<thead> <thead>
<tr> <tr>
<th>Client</th><th>Counselor</th><th>First completed</th><th>First at</th> <th>Client</th><th>Counselor</th><th>Last completed</th><th>Last at</th>
<th>Last activity</th><th>Days idle</th><th>Note</th> <th>Last activity</th><th>Days idle</th><th>Note</th>
</tr> </tr>
</thead> </thead>
@ -192,10 +192,10 @@ function followupSearchText(c) {
return [ return [
c.clientCode, c.clientCode,
c.coachUsername, c.coachUsername,
c.firstQuestionnaireName, c.lastQuestionnaireName,
c.firstQuestionnaireID, c.lastQuestionnaireID,
c.note, c.note,
c.firstCompletedAt, c.lastCompletedAt,
c.lastActivityAt, c.lastActivityAt,
c.daysSinceLastActivity != null ? String(c.daysSinceLastActivity) : '', c.daysSinceLastActivity != null ? String(c.daysSinceLastActivity) : '',
].filter(Boolean).join(' '); ].filter(Boolean).join(' ');
@ -212,8 +212,8 @@ function followupRowHTML(c) {
<tr data-client="${esc(c.clientCode)}"> <tr data-client="${esc(c.clientCode)}">
<td><code>${esc(c.clientCode)}</code></td> <td><code>${esc(c.clientCode)}</code></td>
<td>${esc(c.coachUsername)}</td> <td>${esc(c.coachUsername)}</td>
<td>${esc(c.firstQuestionnaireName || '—')}</td> <td>${esc(c.lastQuestionnaireName || '—')}</td>
<td>${esc(c.firstCompletedAt || '—')}</td> <td>${esc(c.lastCompletedAt || '—')}</td>
<td>${esc(c.lastActivityAt || '—')}</td> <td>${esc(c.lastActivityAt || '—')}</td>
<td>${c.daysSinceLastActivity != null ? c.daysSinceLastActivity : '—'}</td> <td>${c.daysSinceLastActivity != null ? c.daysSinceLastActivity : '—'}</td>
<td> <td>