mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-16 08:27:07 +00:00
feat: assessments overview mark as complete
This commit is contained in:
@@ -3,91 +3,99 @@ export function formatDate(dateStr: string, submitted?: boolean): string {
|
||||
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';
|
||||
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 === 0) return "Today";
|
||||
|
||||
if (diffDays === 1) return "Tomorrow";
|
||||
|
||||
if (diffDays <= 7) {
|
||||
const weekdayName = d.toLocaleDateString(undefined, { weekday: 'long' });
|
||||
// If it's in the past, add "Last" prefix
|
||||
const weekdayName = d.toLocaleDateString(undefined, { weekday: "long" });
|
||||
|
||||
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
|
||||
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';
|
||||
if (
|
||||
item.status === "MARKS_RELEASED" ||
|
||||
item.grade ||
|
||||
(item.percentage !== undefined && item.percentage !== null) ||
|
||||
(item.achieved !== undefined && item.achieved !== null)
|
||||
) {
|
||||
return "MARKS_RELEASED";
|
||||
}
|
||||
|
||||
// Check if submitted (awaiting marking)
|
||||
|
||||
const completedKey = "betterseqta-completed-assessments";
|
||||
const completed = JSON.parse(localStorage.getItem(completedKey) || "[]");
|
||||
if (completed.includes(item.id)) {
|
||||
return "MARKS_RELEASED";
|
||||
}
|
||||
|
||||
if (item.submitted) {
|
||||
return 'SUBMITTED';
|
||||
return "SUBMITTED";
|
||||
}
|
||||
|
||||
|
||||
const now = new Date();
|
||||
const due = new Date(item.due);
|
||||
|
||||
// Calculate the difference in days (consistent with formatDate)
|
||||
|
||||
const diffTime = due.getTime() - now.getTime();
|
||||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||
|
||||
// Check if overdue (past due date, but not including today)
|
||||
|
||||
if (diffDays < 0) {
|
||||
return 'OVERDUE';
|
||||
return "OVERDUE";
|
||||
}
|
||||
|
||||
// Check if due soon (today through 7 days from now)
|
||||
|
||||
if (diffDays <= 7) {
|
||||
return 'DUE_SOON';
|
||||
return "DUE_SOON";
|
||||
}
|
||||
|
||||
return 'UPCOMING';
|
||||
|
||||
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) {
|
||||
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) {
|
||||
|
||||
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) {
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user