improve memberships list view

This commit is contained in:
Richard Schreiber
2024-11-21 11:21:26 +01:00
parent ccf32ed2c1
commit ce2e94b8d5
3 changed files with 45 additions and 69 deletions

View File

@@ -159,6 +159,12 @@ class Membership(models.Model):
de = date_format(self.date_end, 'SHORT_DATE_FORMAT') de = date_format(self.date_end, 'SHORT_DATE_FORMAT')
return f'{self.membership_type.name}: {self.attendee_name} ({ds} {de})' return f'{self.membership_type.name}: {self.attendee_name} ({ds} {de})'
@property
def percentage_used(self):
if self.membership_type.max_usages and self.usages:
return int(self.usages / self.membership_type.max_usages * 100)
return 0
@property @property
def attendee_name(self): def attendee_name(self):
return build_name(self.attendee_name_parts, fallback_scheme=lambda: self.customer.organizer.settings.name_scheme) return build_name(self.attendee_name_parts, fallback_scheme=lambda: self.customer.organizer.settings.name_scheme)

View File

@@ -18,79 +18,46 @@
{% for m in memberships %} {% for m in memberships %}
<li class="row"> <li class="row">
<dl> <dl>
<dt>{% trans "Membership type" %}</dt> <div class="col-xs-5">
<dd> <dt>
{% if m.canceled %}<del>{% endif %} {% if m.canceled %}<del>{% endif %}
{{ m.membership_type.name }} {{ m.membership_type.name }}
{% if m.canceled %}</del>{% endif %} {% if m.membership_type.transferable %}
{% if m.testmode %}<span class="label label-warning">{% trans "TEST MODE" %}</span>{% endif %} <span class="text-muted fa fa-users" aria-hidden="true" title="{% trans "Membership is transferable" %}"></span>
</dd> {% endif %}
<dt>{% trans "Valid from" %}</dt> {% if m.canceled %}</del>
<dd>{{ m.date_start|date:"SHORT_DATETIME_FORMAT" }}</dd> <small>
<dt>{% trans "Valid until" %}</dt> <span class="text-blob-danger">
<dd>{{ m.date_end|date:"SHORT_DATETIME_FORMAT" }}</dd> <i class="status-dot fa fa-times" aria-hidden="true"></i> {% trans "Canceled" %}
<dt>{% trans "Attendee name" %}</dt> </span>
<dd>{{ m.attendee_name }}</dd> </small>
<dt>{% trans "Usages" %}</dt> {% endif %}
<dd> {% if m.testmode %}<span class="label label-warning">{% trans "TEST MODE" %}</span>{% endif %}
<div class="quotabox"> </dt>
<div class="progress"> <dd class="text-muted">
<div class="progress-bar progress-bar-success progress-bar-{{ m.percent }}"> {% if not m.membership_type.transferable %}
<span class="fa fa-id-badge" aria-hidden="true"></span>
{% endif %}
{{ m.attendee_name|default_if_none:"" }}</dd>
<dd class="text-muted"><small>{% trans "Valid from" %} {{ m.date_start|date:"SHORT_DATETIME_FORMAT" }}</small></dd>
<dd class="text-muted"><small>{% trans "Valid until" %} {{ m.date_end|date:"SHORT_DATETIME_FORMAT" }}</small></dd>
</div>
<div class="col-xs-5">
<dd>
<div class="quotabox full-width">
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-{{ m.percentage_used }}">
</div>
</div>
<div class="numbers">
{{ m.usages }} /
{{ m.membership_type.max_usages|default_if_none:"∞" }}
</div> </div>
</div> </div>
<div class="numbers">
{{ m.usages }} /
{{ m.membership_type.max_usages|default_if_none:"∞" }}
</div>
</div>
</dd>
<dt class="sr-only">{% trans "Actions" %}</dt>
<dd class="text-right">
<a href="{% abseventurl o.event "presale:event.order" order=o.code secret=o.secret %}"
target="_blank">
<span class="fa fa-list-ul" aria-hidden="true"></span>
{% trans "Details" %}
</a></dd>
</dl>
<dl>
<div class="col-md-4 col-sm-5 col-xs-8">
<dt class="sr-only">{% trans "Order" %}</dt>
<dd><strong>
<a href="{% abseventurl o.event "presale:event.order" order=o.code secret=o.secret %}" target="_blank">
<i class="fa fa-shopping-cart" aria-hidden="true"></i>
{{ o.code }}</a>
</strong>
{% if o.customer_id != customer.pk %}
<span class="fa fa-compress text-muted"
data-toggle="tooltip"
title="{% trans "Matched to the account based on the email address." %}"
></span>
{% endif %}
<small>{% include "pretixpresale/event/fragment_order_status.html" with order=o event=o.event %}</small>
</dd>
<dd><time datetime="{{ o.datetime|date:"Y-m-d H:i" }}" class="text-muted small">{{ o.datetime|date:"SHORT_DATETIME_FORMAT" }}</time></dd>
{% if o.testmode and False %}
<dd><span class="label label-warning">{% trans "TEST MODE" %}</span></dd>
{% endif %}
</div>
<div class="col-md-2 col-sm-2 col-xs-4 text-right">
<dt class="sr-only">{% trans "Order total" %}</dt>
<dd>{{ o.total|money:o.event.currency }}</dd>
<dt class="sr-only">{% trans "Positions" %}</dt>
<dd class="text-muted"><small>{% blocktranslate count counter=o.count_positions|default_if_none:0 %}{{ counter }} item{% plural %}{{ counter }} items{% endblocktranslate %}</small>
</dd> </dd>
</div> </div>
<div class="col-md-4 col-sm-3 col-xs-8"> <div class="col-xs-2">
<dt class="sr-only">{% trans "Event" %}</dt>
<dd>
{{ o.event }}
{% if not o.event.has_subevents and o.event.settings.show_dates_on_frontpage %}
<br><small class="text-muted">{{ o.event.get_date_range_display }}</small>
{% endif %}
</dd>
</div>
<div class="col-sm-2 col-xs-4">
<dt class="sr-only">{% trans "Actions" %}</dt> <dt class="sr-only">{% trans "Actions" %}</dt>
<dd class="text-right"> <dd class="text-right">
<a href="{% abseventurl request.organizer "presale:organizer.customer.membership" id=m.id %}" <a href="{% abseventurl request.organizer "presale:organizer.customer.membership" id=m.id %}"

View File

@@ -499,6 +499,9 @@ h2 .label {
&.availability .progress-bar-success { &.availability .progress-bar-success {
background: var(--pretix-brand-success-lighten-20); background: var(--pretix-brand-success-lighten-20);
} }
&.full-width {
width: 100%;
}
} }
.nav-tabs { .nav-tabs {