Merge pull request 'show payment status in user view; Fixes #965' (#967) from single-user-edit-page into staging
All checks were successful
CI/CD Pipeline / test (push) Successful in 14m54s
CI/CD Pipeline / deploy-staging (push) Successful in 8m6s
CI/CD Pipeline / deploy-main (push) Has been skipped

Reviewed-on: #967
This commit is contained in:
philipp 2025-04-30 23:32:36 +02:00
commit 25bbaca0d3
3 changed files with 59 additions and 10 deletions

View File

@ -41,4 +41,14 @@ impl Member {
_ => false, _ => false,
} }
} }
pub(crate) fn supposed_to_pay(&self) -> bool {
match self {
Member::Schnupperant(_)
| Member::Scheckbuch(_)
| Member::Regular(_)
| Member::Foerdernd(_)
| Member::Unterstuetzend(_) => true,
_ => false,
}
}
} }

View File

@ -127,6 +127,7 @@ async fn view(
}; };
let member = Member::from(db, user.clone()).await; let member = Member::from(db, user.clone()).await;
let fee = user.fee(db).await;
let user = UserWithRolesAndMembershipPdf::from_user(db, user).await; let user = UserWithRolesAndMembershipPdf::from_user(db, user).await;
@ -143,6 +144,8 @@ async fn view(
context.insert("allowed_to_edit", &allowed_to_edit); context.insert("allowed_to_edit", &allowed_to_edit);
context.insert("user", &user); context.insert("user", &user);
context.insert("is_clubmember", &member.is_club_member()); context.insert("is_clubmember", &member.is_club_member());
context.insert("supposed_to_pay", &member.supposed_to_pay());
context.insert("fee", &fee);
context.insert("member", &member); context.insert("member", &member);
context.insert("roles", &roles); context.insert("roles", &roles);
context.insert("families", &families); context.insert("families", &families);

View File

@ -63,11 +63,11 @@
{% if not role.cluster and not role.hide_in_lists %} {% if not role.cluster and not role.hide_in_lists %}
<li> <li>
<strong> <strong>
{% if role.formatted_name %} {% if role.formatted_name %}
{{ role.formatted_name }} {{ role.formatted_name }}
{% else %} {% else %}
{{ role.name }} {{ role.name }}
{% endif %} {% endif %}
</strong> {{ role.desc }} </strong> {{ role.desc }}
{% if allowed_to_edit %} {% if allowed_to_edit %}
<a href="/admin/user/{{ user.id }}/remove-role/{{ role.id }}" <a href="/admin/user/{{ user.id }}/remove-role/{{ role.id }}"
@ -85,11 +85,14 @@
<select name="role_id"> <select name="role_id">
{% for role in roles %} {% for role in roles %}
{% if not role.cluster and role not in user.proper_roles and not role.hide_in_lists %} {% if not role.cluster and role not in user.proper_roles and not role.hide_in_lists %}
<option value="{{ role.id }}">{% if role.formatted_name %} <option value="{{ role.id }}">
{{ role.formatted_name }} {% if role.formatted_name %}
{% else %} {{ role.formatted_name }}
{{ role.name }} {% else %}
{% endif %} {% if role.desc %} ({{ role.desc }}) {% endif %}</option> {{ role.name }}
{% endif %}
{% if role.desc %}({{ role.desc }}){% endif %}
</option>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</select> </select>
@ -101,6 +104,39 @@
</div> </div>
</div> </div>
</div> </div>
{% if supposed_to_pay %}
<div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md block shadow mt-5"
role="alert">
<h2 class="h2">💸</h2>
<div class="mx-2 divide-y divide-gray-200 dark:divide-primary-600">
<div class="py-3">
{% if "Schnupperant" in member %}
{% if "paid" in user.roles %}
✅ Schnupperant hat schon bezahlt
{% else %}
❌ Schnupperant hat noch <b>nicht</b> bezahlt
{% endif %}
{% else %}
<div>
<strong>{{ fee.name }}</strong>
<span class="block">{{ fee.sum_in_cents / 100 }}€</span>
</div>
<div>
{% for p in fee.parts %}
{{ p.0 }} ({{ p.1 / 100 }}€)
{% if not loop.last %}+{% endif %}
{% endfor %}
</div>
{% if "paid" in user.roles %}
✅ bezahlt
{% else %}
❌ Zahlung ausständig
{% endif %}
{% endif %}
</div>
</div>
</div>
{% endif %}
{% if is_clubmember %} {% if is_clubmember %}
<div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md block shadow mt-5" <div class="bg-white dark:bg-primary-900 text-black dark:text-white rounded-md block shadow mt-5"
role="alert"> role="alert">