75 lines
2.3 KiB
TypeScript
75 lines
2.3 KiB
TypeScript
// server/api/members/overdue-count.get.ts
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const { getMembers } = await import('~/server/utils/nocodb');
|
|
|
|
// Get all members
|
|
const allMembers = await getMembers();
|
|
|
|
if (!allMembers?.list) {
|
|
return {
|
|
success: true,
|
|
data: { count: 0 }
|
|
};
|
|
}
|
|
|
|
const today = new Date();
|
|
let severelyOverdueCount = 0;
|
|
|
|
for (const member of allMembers.list) {
|
|
// Check for severely overdue members (more than 1 year past due date)
|
|
let isSeverelyOverdue = false;
|
|
|
|
if (member.current_year_dues_paid === 'true' && member.membership_date_paid) {
|
|
// If dues are marked as paid, check if it's been more than 1 year since payment
|
|
const lastPaidDate = new Date(member.membership_date_paid);
|
|
const oneYearFromPayment = new Date(lastPaidDate);
|
|
oneYearFromPayment.setFullYear(oneYearFromPayment.getFullYear() + 1);
|
|
|
|
if (today > oneYearFromPayment) {
|
|
isSeverelyOverdue = true;
|
|
}
|
|
} else if (member.current_year_dues_paid !== 'true') {
|
|
// If dues are not paid, check payment due date or member since date
|
|
let dueDate: Date;
|
|
|
|
if (member.payment_due_date) {
|
|
dueDate = new Date(member.payment_due_date);
|
|
} else if (member.member_since) {
|
|
// Fallback: 1 year from member since date
|
|
dueDate = new Date(member.member_since);
|
|
dueDate.setFullYear(dueDate.getFullYear() + 1);
|
|
} else {
|
|
// Skip if we can't determine due date
|
|
continue;
|
|
}
|
|
|
|
// Check if more than 1 year overdue
|
|
const oneYearOverdue = new Date(dueDate);
|
|
oneYearOverdue.setFullYear(oneYearOverdue.getFullYear() + 1);
|
|
|
|
if (today > oneYearOverdue) {
|
|
isSeverelyOverdue = true;
|
|
}
|
|
}
|
|
|
|
if (isSeverelyOverdue) {
|
|
severelyOverdueCount++;
|
|
}
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
data: { count: severelyOverdueCount }
|
|
};
|
|
|
|
} catch (error: any) {
|
|
console.error('[API] Error fetching overdue count:', error);
|
|
|
|
throw createError({
|
|
statusCode: error.statusCode || 500,
|
|
statusMessage: error.message || 'Failed to fetch overdue count'
|
|
});
|
|
}
|
|
});
|