76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
|
|
// server/api/members/dues-status.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: {
|
||
|
|
overdue: [],
|
||
|
|
upcoming: []
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
const today = new Date();
|
||
|
|
const thirtyDaysFromNow = new Date();
|
||
|
|
thirtyDaysFromNow.setDate(today.getDate() + 30);
|
||
|
|
|
||
|
|
const overdueMembers: any[] = [];
|
||
|
|
const upcomingMembers: any[] = [];
|
||
|
|
|
||
|
|
for (const member of allMembers.list) {
|
||
|
|
// Skip if dues are already paid
|
||
|
|
if (member.current_year_dues_paid === 'true') {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check if member has a payment due date
|
||
|
|
if (member.payment_due_date) {
|
||
|
|
const dueDate = new Date(member.payment_due_date);
|
||
|
|
|
||
|
|
if (dueDate < today) {
|
||
|
|
// Overdue
|
||
|
|
overdueMembers.push(member);
|
||
|
|
} else if (dueDate <= thirtyDaysFromNow) {
|
||
|
|
// Due within 30 days
|
||
|
|
upcomingMembers.push(member);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Sort by due date (most overdue/earliest due first)
|
||
|
|
overdueMembers.sort((a, b) => {
|
||
|
|
const dateA = new Date(a.payment_due_date);
|
||
|
|
const dateB = new Date(b.payment_due_date);
|
||
|
|
return dateA.getTime() - dateB.getTime();
|
||
|
|
});
|
||
|
|
|
||
|
|
upcomingMembers.sort((a, b) => {
|
||
|
|
const dateA = new Date(a.payment_due_date);
|
||
|
|
const dateB = new Date(b.payment_due_date);
|
||
|
|
return dateA.getTime() - dateB.getTime();
|
||
|
|
});
|
||
|
|
|
||
|
|
return {
|
||
|
|
success: true,
|
||
|
|
data: {
|
||
|
|
overdue: overdueMembers,
|
||
|
|
upcoming: upcomingMembers
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error('[API] Error fetching dues status:', error);
|
||
|
|
|
||
|
|
throw createError({
|
||
|
|
statusCode: error.statusCode || 500,
|
||
|
|
statusMessage: error.message || 'Failed to fetch dues status'
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|