Files
BetterSEQTA-Plus/src/plugins/built-in/assessmentsOverview/utils.ts
T
2025-06-06 11:52:24 +10:00

92 lines
3.0 KiB
TypeScript

export function formatDate(dateStr: string, submitted?: boolean): string {
const d = new Date(dateStr);
const now = new Date();
const diffTime = d.getTime() - now.getTime();
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
// If it's overdue but don't show overdue text for submitted assessments
if (diffDays < 0 && !submitted) {
const overdueDays = Math.abs(diffDays);
if (overdueDays === 1) return '1 day overdue';
return `${overdueDays} days overdue`;
}
// If it's today
if (diffDays === 0) return 'Today';
// If it's tomorrow
if (diffDays === 1) return 'Tomorrow';
// If it's within a week
if (diffDays <= 7) {
const weekdayName = d.toLocaleDateString(undefined, { weekday: 'long' });
// If it's in the past, add "Last" prefix
return diffDays < 0 ? `Last ${weekdayName}` : weekdayName;
}
// Otherwise show full date
return d.toLocaleDateString(undefined, {
weekday: 'short',
month: 'short',
day: 'numeric',
year: d.getFullYear() !== now.getFullYear() ? 'numeric' : undefined
});
}
export function determineStatus(item: any): string {
// Check if marks are released or if there's a grade
if (item.status === 'MARKS_RELEASED' || item.grade ||
(item.percentage !== undefined && item.percentage !== null) ||
(item.achieved !== undefined && item.achieved !== null)) {
return 'MARKS_RELEASED';
}
const now = new Date();
const due = new Date(item.due);
// Calculate the difference in days (more precise calculation)
const diffTime = due.getTime() - now.getTime();
const diffDays = diffTime / (1000 * 60 * 60 * 24);
// Check if overdue (more than 1 day past due)
if (diffDays < -1) {
// If it's submitted but still overdue, treat as DUE_SOON since it's awaiting marking
if (item.submitted) {
return 'DUE_SOON';
}
return 'OVERDUE';
}
// Check if due soon (today through 7 days from now)
if (diffDays <= 7) {
return 'DUE_SOON';
}
return 'UPCOMING';
}
export function getGradeValue(assessment: any): number | null {
// Check results.percentage first (most common for graded assessments)
if (assessment.results?.percentage !== undefined && assessment.results.percentage !== null) {
return assessment.results.percentage;
}
// Check direct percentage property
if (assessment.percentage !== undefined && assessment.percentage !== null) {
return assessment.percentage;
}
// Check achieved/outOf combination
if (assessment.achieved !== undefined && assessment.outOf !== undefined &&
assessment.achieved !== null && assessment.outOf !== null && assessment.outOf > 0) {
return (assessment.achieved / assessment.outOf) * 100;
}
// Check results achieved/outOf combination
if (assessment.results?.achieved !== undefined && assessment.results?.outOf !== undefined &&
assessment.results.achieved !== null && assessment.results.outOf !== null && assessment.results.outOf > 0) {
return (assessment.results.achieved / assessment.results.outOf) * 100;
}
return null;
}