feat: student profile FAB, recycle bin requirements count fix, and persistent sticky table header
This commit is contained in:
1 parent
3e0af305e2
commit
4d585f3a6d
8 files changed
+220
-181
No files matched your search
@@ -61,6 +61,7 @@ exports.getStats = (req, res) => {
|
||||
WHERE d.student_id = s.id
|
||||
AND d.requirement_id = dr.id
|
||||
AND d.status IN ('Completed', 'Archived')
|
||||
AND d.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
`).get(userId).count;
|
||||
@@ -93,6 +94,7 @@ exports.getStats = (req, res) => {
|
||||
WHERE d.student_id = s.id
|
||||
AND d.requirement_id = dr.id
|
||||
AND d.status IN ('Completed', 'Archived')
|
||||
AND d.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
`).get(userId).count;
|
||||
@@ -118,6 +120,7 @@ exports.getStats = (req, res) => {
|
||||
WHERE d.student_id = s.id
|
||||
AND d.requirement_id = dr.id
|
||||
AND d.status IN ('Completed', 'Archived')
|
||||
AND d.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
`).get().count;
|
||||
@@ -140,6 +143,7 @@ exports.getStats = (req, res) => {
|
||||
WHERE d.student_id = s.id
|
||||
AND d.requirement_id = dr.id
|
||||
AND d.status IN ('Completed', 'Archived')
|
||||
AND d.deleted_at IS NULL
|
||||
)
|
||||
)
|
||||
`).get().count;
|
||||
|
||||
@@ -204,7 +204,7 @@ exports.getEnrollmentByGrade = (req, res) => {
|
||||
exports.getDocumentStatus = (req, res) => {
|
||||
try {
|
||||
const rows = db.prepare(`
|
||||
SELECT status, COUNT(*) as count FROM documents GROUP BY status
|
||||
SELECT status, COUNT(*) as count FROM documents WHERE deleted_at IS NULL GROUP BY status
|
||||
`).all();
|
||||
const result = { Completed: 0, Archived: 0 };
|
||||
rows.forEach(r => { if (r.status in result) result[r.status] = r.count; });
|
||||
@@ -242,7 +242,7 @@ exports.getExportData = (req, res) => {
|
||||
|
||||
// Document status breakdown
|
||||
const docStatusRows = db.prepare(`
|
||||
SELECT status, COUNT(*) as count FROM documents GROUP BY status
|
||||
SELECT status, COUNT(*) as count FROM documents WHERE deleted_at IS NULL GROUP BY status
|
||||
`).all();
|
||||
const documentStatus = { Completed: 0, Archived: 0 };
|
||||
docStatusRows.forEach(r => { if (r.status in documentStatus) documentStatus[r.status] = r.count; });
|
||||
|
||||
@@ -324,7 +324,7 @@ exports.getMissingRequirements = (req, res) => {
|
||||
)
|
||||
AND dr.id NOT IN (
|
||||
SELECT requirement_id FROM documents
|
||||
WHERE student_id = ? AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL
|
||||
WHERE student_id = ? AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL AND deleted_at IS NULL
|
||||
)
|
||||
ORDER BY dr.category ASC, dr.name ASC
|
||||
`).all(studentId, studentId);
|
||||
@@ -338,6 +338,7 @@ exports.getMissingRequirements = (req, res) => {
|
||||
JOIN documents d ON d.requirement_id = dr.id
|
||||
WHERE d.student_id = ?
|
||||
AND d.status IN ('Completed', 'Archived')
|
||||
AND d.deleted_at IS NULL
|
||||
AND dr.category IN (
|
||||
SELECT DISTINCT CASE WHEN grade_level <= 10 THEN 'JHS' ELSE 'SHS' END
|
||||
FROM enrollments WHERE student_id = ?
|
||||
|
||||
@@ -288,7 +288,7 @@ exports.getAllStudents = (req, res) => {
|
||||
)
|
||||
AND dr.id NOT IN (
|
||||
SELECT requirement_id FROM documents
|
||||
WHERE student_id = s.id AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL
|
||||
WHERE student_id = s.id AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL AND deleted_at IS NULL
|
||||
)
|
||||
) as missing_count
|
||||
FROM students s
|
||||
@@ -327,7 +327,7 @@ exports.getAllStudents = (req, res) => {
|
||||
)
|
||||
AND dr.id NOT IN (
|
||||
SELECT requirement_id FROM documents
|
||||
WHERE student_id = ? AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL
|
||||
WHERE student_id = ? AND status IN ('Completed', 'Archived') AND requirement_id IS NOT NULL AND deleted_at IS NULL
|
||||
)
|
||||
`).all(student.id, student.id);
|
||||
|
||||
|
||||
Reference in new issue
Block a user