Implement dues reminder system with monthly payment cycle
Some checks failed
Build And Push Image / docker (push) Failing after 1m10s
Some checks failed
Build And Push Image / docker (push) Failing after 1m10s
- Add API endpoint and email templates for dues reminders - Change due date calculation from yearly to monthly billing - Add visual status indicators for overdue and due-soon members - Enhance member cards with status stripes and styling
This commit is contained in:
138
server/templates/dues-due-soon.hbs
Normal file
138
server/templates/dues-due-soon.hbs
Normal file
@@ -0,0 +1,138 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dues Payment Reminder - MonacoUSA</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #a31515 0%, #d32f2f 100%);
|
||||
color: white;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
border-radius: 10px 10px 0 0;
|
||||
}
|
||||
.content {
|
||||
background: #ffffff;
|
||||
padding: 30px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
.logo {
|
||||
max-width: 200px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.alert-warning {
|
||||
background-color: #fff3cd;
|
||||
border: 1px solid #ffeaa7;
|
||||
color: #856404;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.member-info {
|
||||
background: #f8f9fa;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.amount-due {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: #a31515;
|
||||
text-align: center;
|
||||
background: #f8f9fa;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
.btn {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #a31515 0%, #d32f2f 100%);
|
||||
color: white;
|
||||
padding: 12px 30px;
|
||||
text-decoration: none;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
margin: 10px;
|
||||
}
|
||||
.btn:hover {
|
||||
background: linear-gradient(135deg, #8a1212 0%, #b71c1c 100%);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>🏎️ MonacoUSA</h1>
|
||||
<h2>Annual Dues Payment Reminder</h2>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="alert-warning">
|
||||
<strong>⏰ Payment Due Soon!</strong> Your annual membership dues will be due in {{daysUntilDue}} days.
|
||||
</div>
|
||||
|
||||
<p>Dear {{memberName}},</p>
|
||||
|
||||
<p>This is a friendly reminder that your annual MonacoUSA membership dues will be due soon.</p>
|
||||
|
||||
<div class="member-info">
|
||||
<h3>Member Information</h3>
|
||||
<p><strong>Name:</strong> {{memberName}}</p>
|
||||
<p><strong>Member ID:</strong> {{memberId}}</p>
|
||||
<p><strong>Email:</strong> {{memberEmail}}</p>
|
||||
<p><strong>Member Since:</strong> {{memberSince}}</p>
|
||||
</div>
|
||||
|
||||
<div class="amount-due">
|
||||
Annual Dues: {{amount}}
|
||||
<br>
|
||||
<small style="font-size: 16px; color: #666;">Due Date: {{dueDate}}</small>
|
||||
</div>
|
||||
|
||||
<p>To ensure uninterrupted access to MonacoUSA benefits and avoid any service disruption, please submit your payment before the due date.</p>
|
||||
|
||||
<div class="member-info">
|
||||
<h3>Payment Information</h3>
|
||||
<p>Membership fee is {{amount}}/yr per person, paid using the IBAN below:</p>
|
||||
<p><strong>IBAN Euro:</strong> {{paymentIban}}</p>
|
||||
<p><strong>Account Holder:</strong> {{accountHolder}}</p>
|
||||
<p><strong>Payment Reference:</strong> {{memberId}} - Annual Dues</p>
|
||||
</div>
|
||||
|
||||
<p><strong>Important:</strong> Please include your member ID ({{memberId}}) in the payment reference to ensure proper credit to your account.</p>
|
||||
|
||||
<p>If you have already made your payment, please disregard this reminder. If you have any questions about your membership or payment, please contact us:</p>
|
||||
|
||||
<p><strong>Contact Information:</strong></p>
|
||||
<p>📧 Email: info@monacousa.org</p>
|
||||
|
||||
<p>Thank you for your continued membership with MonacoUSA!</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
The MonacoUSA Team</p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated message from MonacoUSA. Please do not reply to this email.</p>
|
||||
<p>© {{currentYear}} MonacoUSA. All rights reserved.</p>
|
||||
<p>If you no longer wish to receive these reminders, please contact us at info@monacousa.org</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
160
server/templates/dues-overdue.hbs
Normal file
160
server/templates/dues-overdue.hbs
Normal file
@@ -0,0 +1,160 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Overdue Dues Notice - MonacoUSA</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #d32f2f 0%, #f44336 100%);
|
||||
color: white;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
border-radius: 10px 10px 0 0;
|
||||
}
|
||||
.content {
|
||||
background: #ffffff;
|
||||
padding: 30px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
.logo {
|
||||
max-width: 200px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.alert-danger {
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #f5c6cb;
|
||||
color: #721c24;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.member-info {
|
||||
background: #f8f9fa;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
.amount-due {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: #d32f2f;
|
||||
text-align: center;
|
||||
background: #ffebee;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
border: 2px solid #f5c6cb;
|
||||
}
|
||||
.urgency-notice {
|
||||
background: #fff3cd;
|
||||
border: 1px solid #ffeaa7;
|
||||
color: #856404;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
margin: 20px 0;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
.footer {
|
||||
text-align: center;
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
margin-top: 30px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
.btn {
|
||||
display: inline-block;
|
||||
background: linear-gradient(135deg, #d32f2f 0%, #f44336 100%);
|
||||
color: white;
|
||||
padding: 15px 35px;
|
||||
text-decoration: none;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
margin: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.btn:hover {
|
||||
background: linear-gradient(135deg, #b71c1c 0%, #d32f2f 100%);
|
||||
}
|
||||
.consequences {
|
||||
background: #ffebee;
|
||||
border-left: 4px solid #f44336;
|
||||
padding: 15px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>🏎️ MonacoUSA</h1>
|
||||
<h2>⚠️ Overdue Dues Notice</h2>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="alert-danger">
|
||||
<strong>🚨 URGENT: Payment Overdue!</strong> Your annual membership dues are now {{daysOverdue}} days overdue.
|
||||
</div>
|
||||
|
||||
<p>Dear {{memberName}},</p>
|
||||
|
||||
<p>This is an urgent notice that your annual MonacoUSA membership dues are now overdue and require immediate payment to avoid service interruption.</p>
|
||||
|
||||
<div class="member-info">
|
||||
<h3>Member Information</h3>
|
||||
<p><strong>Name:</strong> {{memberName}}</p>
|
||||
<p><strong>Member ID:</strong> {{memberId}}</p>
|
||||
<p><strong>Email:</strong> {{memberEmail}}</p>
|
||||
<p><strong>Member Since:</strong> {{memberSince}}</p>
|
||||
</div>
|
||||
|
||||
<div class="amount-due">
|
||||
Overdue Amount: {{amount}}
|
||||
<br>
|
||||
<small style="font-size: 16px; color: #666;">Original Due Date: {{originalDueDate}}</small>
|
||||
<br>
|
||||
<small style="font-size: 14px; color: #d32f2f;">{{daysOverdue}} days overdue</small>
|
||||
</div>
|
||||
|
||||
<div class="member-info">
|
||||
<h3>Payment Information</h3>
|
||||
<p>Membership fee is {{amount}}/yr per person, paid using the IBAN below:</p>
|
||||
<p><strong>IBAN Euro:</strong> {{paymentIban}}</p>
|
||||
<p><strong>Account Holder:</strong> {{accountHolder}}</p>
|
||||
<p><strong>Payment Reference:</strong> {{memberId}} - Annual Dues</p>
|
||||
</div>
|
||||
|
||||
<p><strong>Important:</strong> Please include your member ID ({{memberId}}) in the payment reference to ensure proper credit to your account.</p>
|
||||
|
||||
<div class="consequences">
|
||||
<p><strong>Important:</strong> Failure of payment will lead to a revoking of MonacoUSA Member Privileges.</p>
|
||||
</div>
|
||||
|
||||
<p>If you have already submitted payment, please forward your payment confirmation to info@monacousa.org to update your account status.</p>
|
||||
|
||||
<p><strong>Questions or Concerns?</strong> Contact us:</p>
|
||||
<p>📧 Email: info@monacousa.org</p>
|
||||
|
||||
<p>We value your membership and hope to resolve this matter promptly.</p>
|
||||
|
||||
<p>Best regards,<br>
|
||||
The MonacoUSA Membership Team</p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>This is an automated notice from MonacoUSA. Please do not reply to this email.</p>
|
||||
<p>© {{currentYear}} MonacoUSA. All rights reserved.</p>
|
||||
<p>Please submit your payment to avoid membership suspension.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user