reverse client reset functionality
Some checks failed
PHPUnit / test (push) Has been cancelled

This commit is contained in:
2026-07-09 16:39:00 +02:00
parent f04388e0ec
commit 351af170a0
4 changed files with 2 additions and 122 deletions

View File

@ -34,19 +34,15 @@ export async function confirmAndPatchClientArchive(clientCode, archived) {
* @param {string} opts.clientCode Escaped client code for data-code attributes
* @param {boolean} opts.archived
* @param {boolean} [opts.showDelete]
* @param {boolean} [opts.showReset]
* @param {string} [opts.rawCode] Unescaped code for button labels (optional)
*/
export function clientTableActionsHTML({ clientCode, archived, showDelete = false, showReset = false }) {
export function clientTableActionsHTML({ clientCode, archived, showDelete = false }) {
const archiveBtn = archived
? `<button type="button" class="btn btn-sm restore-client-btn" data-code="${clientCode}" title="Restore to active lists">Restore</button>`
: `<button type="button" class="btn btn-sm archive-client-btn" data-code="${clientCode}" title="Mark as finished and hide from lists">Archive</button>`;
const resetBtn = showReset
? `<button type="button" class="btn btn-sm reset-client-btn" data-code="${clientCode}" title="Clear answers, uploads, and scores; keep client code and counselor">Reset</button>`
: '';
const deleteBtn = showDelete
? `<button type="button" class="btn btn-sm btn-danger delete-client-btn" data-code="${clientCode}" title="Permanently delete client and all data">Delete</button>`
: '';
return `<div class="table-row-actions" role="group" aria-label="Client actions">${archiveBtn}${resetBtn}${deleteBtn}</div>`;
return `<div class="table-row-actions" role="group" aria-label="Client actions">${archiveBtn}${deleteBtn}</div>`;
}

View File

@ -197,9 +197,6 @@ function renderClientTableBody() {
body.querySelectorAll('.delete-client-btn').forEach(btn => {
btn.addEventListener('click', () => deleteClient(btn.dataset.code));
});
body.querySelectorAll('.reset-client-btn').forEach(btn => {
btn.addEventListener('click', () => resetClient(btn.dataset.code));
});
body.querySelectorAll('.archive-client-btn').forEach(btn => {
btn.addEventListener('click', () => setClientArchived(btn.dataset.code, true));
});
@ -741,7 +738,6 @@ function clientRowHTML(c) {
clientCode: esc(c.clientCode),
archived,
showDelete: true,
showReset: clientHasResponseData(c),
});
return `
@ -828,44 +824,6 @@ async function setClientArchived(clientCode, archived) {
else renderClientTableBody();
}
async function resetClient(clientCode) {
if (!(await confirmAction({
title: 'Reset client',
message: `Reset client "${clientCode}"? This clears all questionnaire answers, upload history, and scoring results. The client code and counselor assignment are kept.`,
confirmLabel: 'Reset',
variant: 'danger',
}))) return;
try {
await apiPost('clients.php', { action: 'reset', clientCode });
const row = clientsList.find(c => c.clientCode === clientCode);
if (row) {
row.hasResponseData = 0;
row.scoringProfiles = (row.scoringProfiles || []).map(p => ({
...p,
band: null,
calculatedBand: null,
coachBand: null,
effectiveBand: null,
pendingReview: false,
coachOverride: false,
coachReviewedAt: '',
coachReviewedByUsername: '',
weightedTotal: null,
}));
}
delete detailByClient[clientCode];
if (expandedClientCode === clientCode) {
expandedClientCode = null;
expandedQnKey = null;
expandedVersionKey = null;
}
showToast(`Client "${clientCode}" reset`, 'success');
renderClientTableBody();
} catch (e) {
showToast(e.message, 'error');
}
}
async function deleteClient(clientCode) {
if (!(await confirmAction({
title: 'Delete client',