mirror of
https://github.com/pretix/pretix.git
synced 2026-05-22 18:04:16 +00:00
improve subnav
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3 class="panel-title">
|
<h3 class="panel-title">
|
||||||
<span class="fa fa-shopping-cart" aria-hidden="true"></span> <b>{% trans "Orders" %}</b> ({{ page_obj.paginator.count }})
|
<span class="fa fa-address-card-o" aria-hidden="true"></span> <b>{% trans "Addresses" %}</b> ({{ page_obj.paginator.count }})
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|||||||
@@ -30,28 +30,15 @@
|
|||||||
<dd>#{{ customer.identifier }}</dd>
|
<dd>#{{ customer.identifier }}</dd>
|
||||||
</div>
|
</div>
|
||||||
</dl>
|
</dl>
|
||||||
<nav class="row" aria-label="{% trans "customer account information" %}">
|
<nav class="subnav row" aria-label="{% trans "customer account information" %}">
|
||||||
<ul class="list-inline blank-after col-xs-12">
|
<ul class="list-inline blank-after col-xs-12">
|
||||||
|
{% for nav in sub_nav %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{% eventurl request.organizer "presale:organizer.customer.index" %}">
|
<a href="{{ nav.url }}"{% if nav.active %} class="active"{% endif %}>
|
||||||
<span class="fa fa-shopping-cart" aria-hidden="true"></span>{% trans "Orders" %}
|
<span class="fa fa-{{ nav.icon }}" aria-hidden="true"></span>{{ nav.label }}
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{% eventurl request.organizer "presale:organizer.customer.memberships" %}">
|
|
||||||
<span class="fa fa-unlock-alt" aria-hidden="true"></span>{% trans "Memberships" %}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{% eventurl request.organizer "presale:organizer.customer.addresses" %}">
|
|
||||||
<span class="fa fa-address-card-o" aria-hidden="true"></span>{% trans "Addresses" %}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="{% eventurl request.organizer "presale:organizer.customer.profiles" %}">
|
|
||||||
<span class="fa fa-users" aria-hidden="true"></span>{% trans "Attendee profiles" %}
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3 class="panel-title">
|
<h3 class="panel-title">
|
||||||
<span class="fa fa-shopping-cart" aria-hidden="true"></span> <b>{% trans "Memberships" %}</b> ({{ page_obj.paginator.count }})
|
<span class="fa fa-id-badge" aria-hidden="true"></span> <b>{% trans "Memberships" %}</b> ({{ page_obj.paginator.count }})
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3 class="panel-title">
|
<h3 class="panel-title">
|
||||||
<span class="fa fa-shopping-cart" aria-hidden="true"></span> <b>{% trans "Orders" %}</b> ({{ page_obj.paginator.count }})
|
<span class="fa fa-users" aria-hidden="true"></span> <b>{% trans "Attendee profiles" %}</b> ({{ page_obj.paginator.count }})
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|||||||
@@ -339,11 +339,6 @@ class ResetPasswordView(FormView):
|
|||||||
|
|
||||||
|
|
||||||
class CustomerRequiredMixin:
|
class CustomerRequiredMixin:
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
ctx = super().get_context_data(**kwargs)
|
|
||||||
ctx['customer'] = self.request.customer
|
|
||||||
return ctx
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
if not request.organizer.settings.customer_accounts:
|
if not request.organizer.settings.customer_accounts:
|
||||||
raise Http404('Feature not enabled')
|
raise Http404('Feature not enabled')
|
||||||
@@ -355,7 +350,41 @@ class CustomerRequiredMixin:
|
|||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class OrderView(CustomerRequiredMixin, ListView):
|
class CustomerAccountBaseMixin(CustomerRequiredMixin):
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
ctx = super().get_context_data(**kwargs)
|
||||||
|
ctx['customer'] = self.request.customer
|
||||||
|
url_name = self.request.resolver_match.url_name
|
||||||
|
ctx['sub_nav'] = [
|
||||||
|
{
|
||||||
|
'label': _('Orders'),
|
||||||
|
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.index', kwargs={}),
|
||||||
|
'active': url_name == 'organizer.customer.index',
|
||||||
|
'icon': 'shopping-cart',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'label': _('Memberships'),
|
||||||
|
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.memberships', kwargs={}),
|
||||||
|
'active': url_name.startswith('organizer.customer.membership'),
|
||||||
|
'icon': 'id-badge',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'label': _('Addresses'),
|
||||||
|
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.addresses', kwargs={}),
|
||||||
|
'active': url_name.startswith('organizer.customer.address'),
|
||||||
|
'icon': 'address-card-o',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'label': _('Attendee profiles'),
|
||||||
|
'url': eventreverse(self.request.organizer, 'presale:organizer.customer.profiles', kwargs={}),
|
||||||
|
'active': url_name.startswith('organizer.customer.profile'),
|
||||||
|
'icon': 'users',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
|
class OrderView(CustomerAccountBaseMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_orders.html'
|
template_name = 'pretixpresale/organizers/customer_orders.html'
|
||||||
context_object_name = 'orders'
|
context_object_name = 'orders'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -397,7 +426,7 @@ class OrderView(CustomerRequiredMixin, ListView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
class MembershipView(CustomerRequiredMixin, ListView):
|
class MembershipView(CustomerAccountBaseMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_memberships.html'
|
template_name = 'pretixpresale/organizers/customer_memberships.html'
|
||||||
context_object_name = 'memberships'
|
context_object_name = 'memberships'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -407,8 +436,16 @@ class MembershipView(CustomerRequiredMixin, ListView):
|
|||||||
'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event'
|
'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#def get_context_data(self, **kwargs):
|
||||||
|
# ctx = super().get_context_data(**kwargs)
|
||||||
|
# for m in ctx['memberships']:
|
||||||
|
# if m.membership_type.max_usages:
|
||||||
|
# m.percent = int(m.usages / m.membership_type.max_usages * 100)
|
||||||
|
# else:
|
||||||
|
# m.percent = 0
|
||||||
|
|
||||||
class MembershipUsageView(CustomerRequiredMixin, ListView):
|
|
||||||
|
class MembershipUsageView(CustomerAccountBaseMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_membership.html'
|
template_name = 'pretixpresale/organizers/customer_membership.html'
|
||||||
context_object_name = 'usages'
|
context_object_name = 'usages'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -432,7 +469,7 @@ class MembershipUsageView(CustomerRequiredMixin, ListView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
class AddressView(CustomerRequiredMixin, ListView):
|
class AddressView(CustomerAccountBaseMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_addresses.html'
|
template_name = 'pretixpresale/organizers/customer_addresses.html'
|
||||||
context_object_name = 'invoice_addresses'
|
context_object_name = 'invoice_addresses'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -441,7 +478,7 @@ class AddressView(CustomerRequiredMixin, ListView):
|
|||||||
return InvoiceAddress.profiles.filter(customer=self.request.customer)
|
return InvoiceAddress.profiles.filter(customer=self.request.customer)
|
||||||
|
|
||||||
|
|
||||||
class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
class AddressDeleteView(CustomerAccountBaseMixin, CompatDeleteView):
|
||||||
template_name = 'pretixpresale/organizers/customer_address_delete.html'
|
template_name = 'pretixpresale/organizers/customer_address_delete.html'
|
||||||
context_object_name = 'address'
|
context_object_name = 'address'
|
||||||
|
|
||||||
@@ -452,7 +489,7 @@ class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
|||||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.addresses', kwargs={})
|
return eventreverse(self.request.organizer, 'presale:organizer.customer.addresses', kwargs={})
|
||||||
|
|
||||||
|
|
||||||
class ProfileView(CustomerRequiredMixin, ListView):
|
class ProfileView(CustomerAccountBaseMixin, ListView):
|
||||||
template_name = 'pretixpresale/organizers/customer_profiles.html'
|
template_name = 'pretixpresale/organizers/customer_profiles.html'
|
||||||
context_object_name = 'attendee_profiles'
|
context_object_name = 'attendee_profiles'
|
||||||
paginate_by = 20
|
paginate_by = 20
|
||||||
@@ -461,7 +498,7 @@ class ProfileView(CustomerRequiredMixin, ListView):
|
|||||||
return self.request.customer.attendee_profiles.all()
|
return self.request.customer.attendee_profiles.all()
|
||||||
|
|
||||||
|
|
||||||
class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
class ProfileDeleteView(CustomerAccountBaseMixin, CompatDeleteView):
|
||||||
template_name = 'pretixpresale/organizers/customer_profile_delete.html'
|
template_name = 'pretixpresale/organizers/customer_profile_delete.html'
|
||||||
context_object_name = 'profile'
|
context_object_name = 'profile'
|
||||||
|
|
||||||
@@ -472,7 +509,7 @@ class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView):
|
|||||||
return eventreverse(self.request.organizer, 'presale:organizer.customer.profiles', kwargs={})
|
return eventreverse(self.request.organizer, 'presale:organizer.customer.profiles', kwargs={})
|
||||||
|
|
||||||
|
|
||||||
class ChangePasswordView(CustomerRequiredMixin, FormView):
|
class ChangePasswordView(CustomerAccountBaseMixin, FormView):
|
||||||
template_name = 'pretixpresale/organizers/customer_password.html'
|
template_name = 'pretixpresale/organizers/customer_password.html'
|
||||||
form_class = ChangePasswordForm
|
form_class = ChangePasswordForm
|
||||||
|
|
||||||
@@ -505,7 +542,7 @@ class ChangePasswordView(CustomerRequiredMixin, FormView):
|
|||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
|
|
||||||
class ChangeInformationView(CustomerRequiredMixin, FormView):
|
class ChangeInformationView(CustomerAccountBaseMixin, FormView):
|
||||||
template_name = 'pretixpresale/organizers/customer_info.html'
|
template_name = 'pretixpresale/organizers/customer_info.html'
|
||||||
form_class = ChangeInfoForm
|
form_class = ChangeInfoForm
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ footer nav .btn-link {
|
|||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.subnav a.active {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
.locales ul {
|
.locales ul {
|
||||||
display: inline;
|
display: inline;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
|||||||
Reference in New Issue
Block a user