From 6001008b55f430b51e45d08b083bf0abebaec1fc Mon Sep 17 00:00:00 2001 From: Christian Henriksen Date: Thu, 22 Jan 2026 01:51:49 +0100 Subject: [PATCH 1/2] 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/2] 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" + ) +