feat: add payment management improvements and reminder emails

- Add option to approve/reject payments without sending notification emails
  (checkbox in review popup, default enabled)
- Add payment reminder email template and send functionality
- Track when reminder emails are sent (reminderSentAt field)
- Display reminder sent timestamp in payment review popup
- Make payment review popup scrollable for better UX
- Add payment-reminder template to email system (available in admin emails)
This commit is contained in:
Michilis
2026-02-05 04:13:42 +00:00
parent 0c142884c7
commit 23d0325d8d
8 changed files with 357 additions and 23 deletions

View File

@@ -218,16 +218,21 @@ export const paymentsApi = {
body: JSON.stringify(data),
}),
approve: (id: string, adminNote?: string) =>
approve: (id: string, adminNote?: string, sendEmail: boolean = true) =>
fetchApi<{ payment: Payment; message: string }>(`/api/payments/${id}/approve`, {
method: 'POST',
body: JSON.stringify({ adminNote }),
body: JSON.stringify({ adminNote, sendEmail }),
}),
reject: (id: string, adminNote?: string) =>
reject: (id: string, adminNote?: string, sendEmail: boolean = true) =>
fetchApi<{ payment: Payment; message: string }>(`/api/payments/${id}/reject`, {
method: 'POST',
body: JSON.stringify({ adminNote }),
body: JSON.stringify({ adminNote, sendEmail }),
}),
sendReminder: (id: string) =>
fetchApi<{ message: string; reminderSentAt?: string }>(`/api/payments/${id}/send-reminder`, {
method: 'POST',
}),
updateNote: (id: string, adminNote: string) =>
@@ -502,6 +507,7 @@ export interface Payment {
paidAt?: string;
paidByAdminId?: string;
adminNote?: string;
reminderSentAt?: string; // When payment reminder email was sent
createdAt: string;
updatedAt: string;
}