Files
panel/check-project-dates.mjs

44 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import db from "./src/lib/db.js";
import { parseISO, isAfter, startOfDay, addDays } from "date-fns";
const today = startOfDay(new Date());
const threeDaysFromNow = addDays(today, 3);
const oneDayFromNow = addDays(today, 1);
console.log(`Today: ${today.toISOString().split('T')[0]}`);
console.log(`3 days from now: ${threeDaysFromNow.toISOString().split('T')[0]}`);
console.log(`1 day from now: ${oneDayFromNow.toISOString().split('T')[0]}`);
const projects = db.prepare(`
SELECT project_name, finish_date, project_status
FROM projects
WHERE finish_date IS NOT NULL
AND project_status != 'fulfilled'
AND project_status != 'cancelled'
ORDER BY finish_date ASC
`).all();
console.log(`\nFound ${projects.length} active projects with due dates:`);
projects.forEach(project => {
try {
const finishDate = parseISO(project.finish_date);
const finishDateStart = startOfDay(finishDate);
const isDueIn3Days = finishDateStart.getTime() === threeDaysFromNow.getTime();
const isDueIn1Day = finishDateStart.getTime() === oneDayFromNow.getTime();
const isOverdue = isAfter(today, finishDateStart);
let status = '';
if (isDueIn3Days) status = '⚠️ DUE IN 3 DAYS';
else if (isDueIn1Day) status = '🚨 DUE IN 1 DAY';
else if (isOverdue) status = '❌ OVERDUE';
else status = '📅 Future';
console.log(`${status} - ${project.project_name}: ${project.finish_date.split('T')[0]} (${project.project_status})`);
} catch (error) {
console.log(`❌ Error parsing date for ${project.project_name}: ${project.finish_date}`);
}
});