switched first completed to last completed on needs followup table
Some checks failed
PHPUnit / test (push) Has been cancelled
Some checks failed
PHPUnit / test (push) Has been cancelled
This commit is contained in:
@ -180,24 +180,24 @@ function qdb_analytics_stale_clients(PDO $pdo, array $tokenRec): array {
|
||||
SELECT cl.clientCode,
|
||||
co.username AS coachUsername,
|
||||
co.coachID,
|
||||
fc.firstCompletedAt,
|
||||
fc.firstQuestionnaireID,
|
||||
qn.name AS firstQuestionnaireName,
|
||||
lc.lastCompletedAt,
|
||||
lc.lastQuestionnaireID,
|
||||
qn.name AS lastQuestionnaireName,
|
||||
la.lastActivityAt,
|
||||
n.note AS followupNote
|
||||
FROM client cl
|
||||
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
|
||||
WHERE cq.completedAt IS NOT NULL
|
||||
AND cq.rowid = (
|
||||
SELECT c2.rowid FROM completed_questionnaire c2
|
||||
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
|
||||
)
|
||||
) fc ON fc.clientCode = cl.clientCode
|
||||
LEFT JOIN questionnaire qn ON qn.questionnaireID = fc.firstQuestionnaireID
|
||||
) lc ON lc.clientCode = cl.clientCode
|
||||
LEFT JOIN questionnaire qn ON qn.questionnaireID = lc.lastQuestionnaireID
|
||||
LEFT JOIN coach co ON co.coachID = cl.coachID
|
||||
LEFT JOIN (
|
||||
SELECT qs.clientCode, MAX(qs.submittedAt) AS lastActivityAt
|
||||
@ -221,10 +221,10 @@ function qdb_analytics_stale_clients(PDO $pdo, array $tokenRec): array {
|
||||
$out[] = [
|
||||
'clientCode' => $r['clientCode'],
|
||||
'coachUsername' => $r['coachUsername'] ?? $r['coachID'],
|
||||
'firstQuestionnaireID' => $r['firstQuestionnaireID'],
|
||||
'firstQuestionnaireName'=> $r['firstQuestionnaireName'] ?? $r['firstQuestionnaireID'],
|
||||
'firstCompletedAt' => $r['firstCompletedAt']
|
||||
? date('Y-m-d H:i', (int)$r['firstCompletedAt']) : '',
|
||||
'lastQuestionnaireID' => $r['lastQuestionnaireID'],
|
||||
'lastQuestionnaireName' => $r['lastQuestionnaireName'] ?? $r['lastQuestionnaireID'],
|
||||
'lastCompletedAt' => $r['lastCompletedAt']
|
||||
? date('Y-m-d H:i', (int)$r['lastCompletedAt']) : '',
|
||||
'lastActivityAt' => $lastAt ? date('Y-m-d H:i', $lastAt) : '',
|
||||
'daysSinceLastActivity' => $daysSince,
|
||||
'note' => $r['followupNote'] ?? '',
|
||||
|
||||
@ -170,7 +170,7 @@ function renderInsights() {
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<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>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -192,10 +192,10 @@ function followupSearchText(c) {
|
||||
return [
|
||||
c.clientCode,
|
||||
c.coachUsername,
|
||||
c.firstQuestionnaireName,
|
||||
c.firstQuestionnaireID,
|
||||
c.lastQuestionnaireName,
|
||||
c.lastQuestionnaireID,
|
||||
c.note,
|
||||
c.firstCompletedAt,
|
||||
c.lastCompletedAt,
|
||||
c.lastActivityAt,
|
||||
c.daysSinceLastActivity != null ? String(c.daysSinceLastActivity) : '',
|
||||
].filter(Boolean).join(' ');
|
||||
@ -212,8 +212,8 @@ function followupRowHTML(c) {
|
||||
<tr data-client="${esc(c.clientCode)}">
|
||||
<td><code>${esc(c.clientCode)}</code></td>
|
||||
<td>${esc(c.coachUsername)}</td>
|
||||
<td>${esc(c.firstQuestionnaireName || '—')}</td>
|
||||
<td>${esc(c.firstCompletedAt || '—')}</td>
|
||||
<td>${esc(c.lastQuestionnaireName || '—')}</td>
|
||||
<td>${esc(c.lastCompletedAt || '—')}</td>
|
||||
<td>${esc(c.lastActivityAt || '—')}</td>
|
||||
<td>${c.daysSinceLastActivity != null ? c.daysSinceLastActivity : '—'}</td>
|
||||
<td>
|
||||
|
||||
Reference in New Issue
Block a user