44 lines
1.6 KiB
JavaScript
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}`);
|
|
}
|
|
}); |