From 6001008b55f430b51e45d08b083bf0abebaec1fc Mon Sep 17 00:00:00 2001 From: Christian Henriksen Date: Thu, 22 Jan 2026 01:51:49 +0100 Subject: [PATCH 1/4] Update text for 'expense_approved' mail template --- .../templates/emails/expense_approved_email.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/economy/templates/emails/expense_approved_email.txt b/src/economy/templates/emails/expense_approved_email.txt index 31074e222..43e155117 100644 --- a/src/economy/templates/emails/expense_approved_email.txt +++ b/src/economy/templates/emails/expense_approved_email.txt @@ -1,10 +1,20 @@ Hi, -Your expense {{ expense.pk }} for {{ expense.camp.title }} has been approved. The amount is DKK {{ expense.amount }} and description of the expense is: +Your expense {{ expense.pk }} for {{ expense.camp.title }} has been approved. + +The amount is DKK {{ expense.amount }} and description of the expense is: {{ expense.description }} -{% if not expense.paid_by_bornhack %}The money will be transferred to your bank account with the next batch of reimbursements.{% else %}As this expense was paid for by BornHack no further action will be taken.{% endif %} +{% if expense.paid_by_bornhack %} +As this expense was paid for by BornHack no further action will be taken. +{% else %} +IMPORTANT: Before we can transfer the money to your bank account, you need to create a reimbursement. + +Please visit https://bornhack.dk/{{ expense.camp.slug }}/economy/reimbursements/create/ + +The money will be transferred to your bank account with the next batch, after creating the reimbursement. +{% endif %} Have a nice day! From 4f7af58cadae755d147a13d8d74db1c3a20606da Mon Sep 17 00:00:00 2001 From: Christian Henriksen Date: Thu, 22 Jan 2026 02:19:31 +0100 Subject: [PATCH 2/4] Add missing reimbursement notification on login --- src/profiles/apps.py | 6 ++++++ src/profiles/signal_handlers.py | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/profiles/apps.py b/src/profiles/apps.py index 26e090a64..f155ea304 100644 --- a/src/profiles/apps.py +++ b/src/profiles/apps.py @@ -10,6 +10,7 @@ from .signal_handlers import create_profile from .signal_handlers import profile_pre_save from .signal_handlers import set_session_on_login +from .signal_handlers import reimbursement_msg_on_login logger = logging.getLogger(f"bornhack.{__name__}") @@ -36,3 +37,8 @@ def ready(self) -> None: sender=User, dispatch_uid="profile_set_session_on_login_signal", ) + user_logged_in.connect( + reimbursement_msg_on_login, + sender=User, + dispatch_uid="reimbursement_msg_on_login_signal", + ) diff --git a/src/profiles/signal_handlers.py b/src/profiles/signal_handlers.py index 03aa805fd..ae84edb53 100644 --- a/src/profiles/signal_handlers.py +++ b/src/profiles/signal_handlers.py @@ -2,6 +2,8 @@ import logging +from django.contrib import messages + from events.handler import handle_team_event logger = logging.getLogger(f"bornhack.{__name__}") @@ -76,3 +78,16 @@ def nickserv_username_changed(instance, original) -> None: def set_session_on_login(sender, request, user, **kwargs) -> None: """Signal handler called on_login to set session["theme"] from the user profile.""" request.session["theme"] = request.user.profile.theme + +def reimbursement_msg_on_login(sender, request, user, **kwargs) -> None: + """ + Add message when user has approved expenses without matching reimbursement. + """ + approved_expenses = user.expenses.all().filter(approved=True, reimbursement=None) + + if approved_expenses.exists(): + messages.info( + request, + f"You have {approved_expenses.count()} expenses with missing reimbursement" + ) + From 86699a842af4c8d43654d6bf7c46bb96e59db241 Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Sun, 8 Feb 2026 07:36:55 +0000 Subject: [PATCH 3/4] Apply suggestion from @tykling --- src/economy/templates/emails/expense_approved_email.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/economy/templates/emails/expense_approved_email.txt b/src/economy/templates/emails/expense_approved_email.txt index 43e155117..9511f5bb8 100644 --- a/src/economy/templates/emails/expense_approved_email.txt +++ b/src/economy/templates/emails/expense_approved_email.txt @@ -11,7 +11,7 @@ As this expense was paid for by BornHack no further action will be taken. {% else %} IMPORTANT: Before we can transfer the money to your bank account, you need to create a reimbursement. -Please visit https://bornhack.dk/{{ expense.camp.slug }}/economy/reimbursements/create/ +Please visit https://bornhack.dk/{{ expense.camp.slug }}/economy/reimbursements/create/ to create a reimbursement once all your expenses and revenues for this camp have been approved. The money will be transferred to your bank account with the next batch, after creating the reimbursement. {% endif %} From e474abf5c13a8306622a1a6377d9c4960afd6169 Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Sun, 8 Feb 2026 07:37:03 +0000 Subject: [PATCH 4/4] Apply suggestion from @tykling --- src/profiles/signal_handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/profiles/signal_handlers.py b/src/profiles/signal_handlers.py index ae84edb53..cc6ccddbc 100644 --- a/src/profiles/signal_handlers.py +++ b/src/profiles/signal_handlers.py @@ -88,6 +88,6 @@ def reimbursement_msg_on_login(sender, request, user, **kwargs) -> None: if approved_expenses.exists(): messages.info( request, - f"You have {approved_expenses.count()} expenses with missing reimbursement" + f"NOTE: You have {approved_expenses.count()} expenses with a missing reimbursement. Please create a reimbursement once all your expenses have been approved." )