Compare commits

...

15 Commits

Author SHA1 Message Date
Raphael Michel
55d246f82e REmove totod 2018-07-16 10:34:55 +02:00
Raphael Michel
e9f0af1898 More views 2018-07-16 10:34:23 +02:00
Raphael Michel
053de88173 Navigational context selector 2018-07-14 16:39:19 +02:00
Raphael Michel
886b938f08 Allow plugins to add sub navigation points 2018-07-14 15:07:35 +02:00
Raphael Michel
59245c4ec3 New navi mechanism 2018-07-14 14:23:12 +02:00
Raphael Michel
71664e5203 Navigation behaviour 2018-07-09 15:40:06 +02:00
Raphael Michel
ce3ae5c218 CSS changes 2018-07-09 13:41:45 +02:00
Raphael Michel
9be5ec2417 Check-in and voucher templates 2018-07-09 08:56:01 +02:00
Raphael Michel
93b07a476d Minor css changes 2018-07-09 00:23:34 +02:00
Raphael Michel
d583775132 Order-related templates 2018-07-09 00:14:22 +02:00
Raphael Michel
0daded8af5 Item-related templates 2018-07-08 23:55:26 +02:00
Raphael Michel
7b230726b0 More pages 2018-07-08 22:31:28 +02:00
Raphael Michel
365d78f63c control stylesheet 2018-07-08 18:51:34 +02:00
Raphael Michel
50aa186197 Error pages 2018-07-08 18:15:14 +02:00
Raphael Michel
32f401e423 Login page 2018-07-08 17:44:13 +02:00
158 changed files with 6473 additions and 4906 deletions

View File

@@ -1151,3 +1151,15 @@ class Quota(LoggedModel):
else:
if subevent:
raise ValidationError(_('The subevent does not belong to this event.'))
def get_items_display(self):
parts = []
vars = self.variations.all()
for i in self.items.all():
if i.has_variations:
for v in vars:
if v.item_id == i.pk:
parts.append('{} {}'.format(i, v))
else:
parts.append(str(i))
return parts

View File

@@ -2,7 +2,8 @@
{% load i18n %}
{% block title %}{% trans "Bad Request" %}{% endblock %}
{% block content %}
<i class="fa fa-frown-o big-icon"></i>
<i class="fa fa-frown-o fa-fw big-icon"></i>
<div class="error-details">
<h1>{% trans "Bad Request" %}</h1>
<p>{% trans "We were unable to parse your request." %}</p>
<p>{{ exception }}</p>
@@ -10,4 +11,5 @@
<a id='goback' href='#'>{% trans "Take a step back" %}</a>
&middot; <a id='reload' href='#'>{% trans "Try again" %}</a>
</p>
</div>
{% endblock %}

View File

@@ -2,7 +2,8 @@
{% load i18n %}
{% block title %}{% trans "Permission denied" %}{% endblock %}
{% block content %}
<i class="fa fa-lock big-icon"></i>
<i class="fa fa-fw fa-lock big-icon"></i>
<div class="error-details">
<h1>{% trans "Permission denied" %}</h1>
<p>{% trans "You do not have access to this page." %}</p>
<p>{{ exception }}</p>
@@ -10,4 +11,5 @@
<a id='goback' href='#'>{% trans "Take a step back" %}</a>
&middot; <a id='reload' href='#'>{% trans "Try again" %}</a>
</p>
</div>
{% endblock %}

View File

@@ -2,11 +2,13 @@
{% load i18n %}
{% block title %}{% trans "Not found" %}{% endblock %}
{% block content %}
<i class="fa fa-meh-o big-icon"></i>
<i class="fa fa-meh-o fa-fw big-icon"></i>
<div class="error-details">
<h1>{% trans "Not found" %}</h1>
<p>{% trans "I'm afraid we could not find the the resource you requested." %}</p>
<p>{{ exception }}</p>
<p class="links">
<a id='goback' href='#'>{% trans "Take a step back" %}</a>
</p>
</div>
{% endblock %}

View File

@@ -2,7 +2,8 @@
{% load i18n %}
{% block title %}{% trans "Internal Server Error" %}{% endblock %}
{% block content %}
<i class="fa fa-bolt big-icon"></i>
<i class="fa fa-bolt big-icon fa-fw"></i>
<div class="error-details">
<h1>{% trans "Internal Server Error" %}</h1>
<p>{% trans "We had trouble processing your request." %}</p>
<p>{% trans "If this problem persists, please contact us." %}</p>
@@ -20,4 +21,5 @@
<a id='goback' href='#'>{% trans "Take a step back" %}</a>
&middot; <a id='reload' href='#'>{% trans "Try again" %}</a>
</p>
</div>
{% endblock %}

View File

@@ -2,10 +2,12 @@
{% load i18n %}
{% block title %}{% trans "Verification failed" %}{% endblock %}
{% block content %}
<i class="fa fa-frown-o big-icon"></i>
<i class="fa fa-frown-o big-icon fa-fw"></i>
<div class="error-details">
<h1>{% trans "Verification failed" %}</h1>
<p>{% blocktrans trimmed %}
We could not verify that this request really was sent from you. For security reasons, we therefore cannot process it.
We could not verify that this request really was sent from you. For security reasons, we therefore cannot
process it.
{% endblocktrans %}</p>
{% if no_referer %}
<p>{{ no_referer1 }}</p>
@@ -15,10 +17,12 @@
<p>{{ no_cookie2 }}</p>
{% else %}
<p>{% blocktrans trimmed %}
Please go back to the last page, refresh this page and then try again. If the problem persists, please get in touch with us.
Please go back to the last page, refresh this page and then try again. If the problem persists, please
get in touch with us.
{% endblocktrans %}</p>
{% endif %}
<p class="links">
<a id='goback' href='#'>{% trans "Take a step back" %}</a>
</p>
</div>
{% endblock %}

View File

@@ -8,11 +8,14 @@ from django.utils.translation import get_language
from pretix.base.models.auth import StaffSession
from pretix.base.settings import GlobalSettingsObject
from pretix.control.navigation import (
get_event_navigation, get_global_navigation, get_organizer_navigation,
)
from ..helpers.i18n import (
get_javascript_format, get_javascript_output_format, get_moment_locale,
)
from .signals import html_head, nav_event, nav_global, nav_topbar
from .signals import html_head, nav_topbar
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
@@ -40,10 +43,9 @@ def contextprocessor(request):
ctx['html_head'] = "".join(_html_head)
_js_payment_weekdays_disabled = '[]'
_nav_event = []
if getattr(request, 'event', None) and hasattr(request, 'organizer') and request.user.is_authenticated:
for receiver, response in nav_event.send(request.event, request=request):
_nav_event += response
ctx['nav_items'] = get_event_navigation(request)
if request.event.settings.get('payment_term_weekdays'):
_js_payment_weekdays_disabled = '[0,6]'
@@ -65,17 +67,13 @@ def contextprocessor(request):
if request.GET.get('subevent', ''):
# Do not use .get() for lazy evaluation
ctx['selected_subevents'] = request.event.subevents.filter(pk=request.GET.get('subevent'))
elif getattr(request, 'organizer', None) and request.user.is_authenticated:
ctx['nav_items'] = get_organizer_navigation(request)
elif request.user.is_authenticated:
ctx['nav_items'] = get_global_navigation(request)
ctx['nav_event'] = _nav_event
ctx['js_payment_weekdays_disabled'] = _js_payment_weekdays_disabled
_nav_global = []
if not hasattr(request, 'event') and request.user.is_authenticated:
for receiver, response in nav_global.send(request, request=request):
_nav_global += response
ctx['nav_global'] = sorted(_nav_global, key=lambda n: n['label'])
_nav_topbar = []
if request.user.is_authenticated:
for receiver, response in nav_topbar.send(request, request=request):

View File

@@ -0,0 +1,440 @@
from django.http import HttpRequest
from django.urls import reverse
from django.utils.translation import pgettext_lazy, ugettext_lazy as _
from pretix.control.signals import (
nav_event, nav_event_settings, nav_global, nav_organizer,
)
def get_event_navigation(request: HttpRequest):
url = request.resolver_match
nav = [
{
'label': _('Dashboard'),
'url': reverse('control:event.index', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': (url.url_name == 'event.index'),
'icon': 'dashboard',
}
]
if 'can_change_event_settings' in request.eventpermset:
event_settings = [
{
'label': _('General'),
'url': reverse('control:event.settings', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings',
},
{
'label': _('Payment'),
'url': reverse('control:event.settings.payment', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.payment',
},
{
'label': _('Plugins'),
'url': reverse('control:event.settings.plugins', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.plugins',
},
{
'label': _('Display'),
'url': reverse('control:event.settings.display', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.display',
},
{
'label': _('Tickets'),
'url': reverse('control:event.settings.tickets', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.tickets',
},
{
'label': _('E-mail'),
'url': reverse('control:event.settings.mail', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.mail',
},
{
'label': _('Tax rules'),
'url': reverse('control:event.settings.tax', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.tax',
},
{
'label': _('Invoicing'),
'url': reverse('control:event.settings.invoice', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.invoice',
},
{
'label': _('Widget'),
'url': reverse('control:event.settings.widget', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name == 'event.settings.widget',
},
]
event_settings += sorted(
sum((list(a[1]) for a in nav_event_settings.send(request.event, request=request)), []),
key=lambda r: r['label']
)
nav.append({
'label': _('Settings'),
'url': reverse('control:event.settings', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': False,
'icon': 'wrench',
'children': event_settings
})
if request.event.has_subevents:
nav.append({
'label': pgettext_lazy('subevent', 'Dates'),
'url': reverse('control:event.subevents', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': ('event.subevent' in url.url_name),
'icon': 'calendar',
})
if 'can_change_items' in request.eventpermset:
nav.append({
'label': _('Products'),
'url': reverse('control:event.items', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': False,
'icon': 'ticket',
'children': [
{
'label': _('Products'),
'url': reverse('control:event.items', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name in (
'event.item', 'event.items.add', 'event.items') or "event.item." in url.url_name,
},
{
'label': _('Quotas'),
'url': reverse('control:event.items.quotas', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.items.quota' in url.url_name,
},
{
'label': _('Categories'),
'url': reverse('control:event.items.categories', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.items.categories' in url.url_name,
},
{
'label': _('Questions'),
'url': reverse('control:event.items.questions', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.items.questions' in url.url_name,
},
]
})
if 'can_view_orders' in request.eventpermset:
nav.append({
'label': _('Orders'),
'url': reverse('control:event.orders', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': False,
'icon': 'shopping-cart',
'children': [
{
'label': _('All orders'),
'url': reverse('control:event.orders', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name in ('event.orders', 'event.order') or "event.order." in url.url_name,
},
{
'label': _('Overview'),
'url': reverse('control:event.orders.overview', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.orders.overview' in url.url_name,
},
{
'label': _('Export'),
'url': reverse('control:event.orders.export', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.orders.export' in url.url_name,
},
{
'label': _('Waiting list'),
'url': reverse('control:event.orders.waitinglist', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.orders.waitinglist' in url.url_name,
},
]
})
if 'can_view_vouchers' in request.eventpermset:
nav.append({
'label': _('Vouchers'),
'url': reverse('control:event.vouchers', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': False,
'icon': 'tags',
'children': [
{
'label': _('All vouchers'),
'url': reverse('control:event.vouchers', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': url.url_name != 'event.vouchers.tags' and "event.vouchers" in url.url_name,
},
{
'label': _('Tags'),
'url': reverse('control:event.vouchers.tags', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.vouchers.tags' in url.url_name,
},
]
})
if 'can_view_orders' in request.eventpermset:
nav.append({
'label': pgettext_lazy('navigation', 'Check-in'),
'url': reverse('control:event.orders.checkinlists', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': False,
'icon': 'check-square-o',
'children': [
{
'label': _('Check-in lists'),
'url': reverse('control:event.orders.checkinlists', kwargs={
'event': request.event.slug,
'organizer': request.event.organizer.slug,
}),
'active': 'event.orders.checkin' in url.url_name,
},
]
})
merge_in(nav, sorted(
sum((list(a[1]) for a in nav_event.send(request.event, request=request)), []),
key=lambda r: r['label']
))
return nav
def get_global_navigation(request):
url = request.resolver_match
has_staff_session = request.user.has_active_staff_session(request.session.session_key)
nav = [
{
'label': _('Dashboard'),
'url': reverse('control:index'),
'active': (url.url_name == 'index'),
'icon': 'dashboard',
},
{
'label': _('Events'),
'url': reverse('control:events'),
'active': 'events' in url.url_name,
'icon': 'calendar',
},
{
'label': _('Organizers'),
'url': reverse('control:organizers'),
'active': 'organizers' in url.url_name,
'icon': 'group',
},
{
'label': _('Order search'),
'url': reverse('control:search.orders'),
'active': 'search.orders' in url.url_name,
'icon': 'search',
},
{
'label': _('User settings'),
'url': reverse('control:user.settings'),
'active': False,
'icon': 'user',
'children': [
{
'label': _('General'),
'url': reverse('control:user.settings'),
'active': 'user.settings' == url.url_name,
},
{
'label': _('Notifications'),
'url': reverse('control:user.settings.notifications'),
'active': 'user.settings.notifications' == url.url_name,
},
{
'label': _('2FA'),
'url': reverse('control:user.settings.2fa'),
'active': 'user.settings.2fa' in url.url_name,
},
{
'label': _('Authorized apps'),
'url': reverse('control:user.settings.oauth.list'),
'active': 'user.settings.oauth' in url.url_name,
},
{
'label': _('Account history'),
'url': reverse('control:user.settings.history'),
'active': 'user.settings.history' in url.url_name,
},
]
},
]
if has_staff_session:
nav.append({
'label': _('Users'),
'url': reverse('control:users'),
'active': False,
'icon': 'user',
'children': [
{
'label': _('All users'),
'url': reverse('control:users'),
'active': ('users' in url.url_name),
},
{
'label': _('Admin sessions'),
'url': reverse('control:user.sudo.list'),
'active': ('sudo' in url.url_name),
},
]
})
nav.append({
'label': _('Global settings'),
'url': reverse('control:global.settings'),
'active': False,
'icon': 'wrench',
'children': [
{
'label': _('Settings'),
'url': reverse('control:global.settings'),
'active': (url.url_name == 'global.settings'),
},
{
'label': _('Update check'),
'url': reverse('control:global.update'),
'active': (url.url_name == 'global.update'),
},
]
})
merge_in(nav, sorted(
sum((list(a[1]) for a in nav_global.send(request, request=request)), []),
key=lambda r: r['label']
))
return nav
def get_organizer_navigation(request):
url = request.resolver_match
nav = [
{
'label': _('Events'),
'url': reverse('control:organizer', kwargs={
'organizer': request.organizer.slug
}),
'active': url.url_name == 'organizer',
'icon': 'calendar',
},
]
if 'can_change_organizer_settings' in request.orgapermset:
nav.append({
'label': _('Settings'),
'url': reverse('control:organizer.edit', kwargs={
'organizer': request.organizer.slug
}),
'icon': 'wrench',
'children': [
{
'label': _('General'),
'url': reverse('control:organizer.edit', kwargs={
'organizer': request.organizer.slug
}),
'active': url.url_name == 'organizer.edit',
},
{
'label': _('Display'),
'url': reverse('control:organizer.display', kwargs={
'organizer': request.organizer.slug
}),
'active': url.url_name == 'organizer.display',
},
]
})
if 'can_change_teams' in request.orgapermset:
nav.append({
'label': _('Teams'),
'url': reverse('control:organizer.teams', kwargs={
'organizer': request.organizer.slug
}),
'active': 'organizer.team' in url.url_name,
'icon': 'group',
})
merge_in(nav, sorted(
sum((list(a[1]) for a in nav_organizer.send(request.organizer, request=request, organizer=request.organizer)),
[]),
key=lambda r: r['label']
))
return nav
def merge_in(nav, newnav):
for item in newnav:
if 'parent' in item:
parents = [n for n in nav if n['url'] == item['parent']]
if parents:
parents[0]['children'].append(item)
else:
nav.append(item)

View File

@@ -8,6 +8,7 @@
{% csrf_token %}
{% bootstrap_field form.email %}
{% bootstrap_field form.password %}
{% if form.keep_logged_in %}
{% bootstrap_field form.keep_logged_in %}
{% endif %}

View File

@@ -59,7 +59,8 @@
data-payment-weekdays-disabled="{{ js_payment_weekdays_disabled }}"
data-select2-locale="{{ select2locale }}" data-longdateformat="{{ js_long_date_format }}" class="nojs">
<div id="wrapper">
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
<nav class="navbar-static-top" role="navigation">
<div class="navbar navbar-fixed navbar-inverse ">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-nav-collapse">
@@ -94,21 +95,6 @@
</a>
</div>
<ul class="nav navbar-nav navbar-top-links navbar-left hidden-xs">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-calendar"></i>
<span class="event-name">{{ request.event }}</span>
<span class="caret"></span></a>
<ul class="dropdown-menu event-dropdown" role="menu" data-event-typeahead
data-source="{% url "control:events.typeahead" %}">
<li class="query-holder">
<div class="form-box">
<input type="text" class="form-control"
placeholder="{% trans "Search for events" %}"
data-typeahead-query>
</div>
</li>
</ul>
</li>
{% if request.event %}
<li>
{% if has_domain and not request.event.live %}
@@ -191,6 +177,7 @@
</a>
</li>
</ul>
</div>
<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-events-collapse navbar-collapse hidden-sm hidden-md hidden-lg mobile-event-dropdown">
<ul class="nav" data-event-typeahead data-source="{% url "control:events.typeahead" %}">
@@ -204,59 +191,37 @@
</ul>
</div>
<div class="sidebar-nav navbar-nav-collapse navbar-collapse">
<div class="dropdown context-selector">
{% if request.event %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-calendar fa-fw"></i>
<span class="event-name">{{ request.event }}</span>
<span class="caret"></span></a>
{% elif request.organizer %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-group fa-fw"></i>
<span class="event-name">{{ request.organizer }}</span>
<span class="caret"></span></a>
{% else %}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-user fa-fw"></i>
<span class="event-name">{{ request.user }}</span>
<span class="caret"></span></a>
{% endif %}
<ul class="dropdown-menu event-dropdown" role="menu" data-event-typeahead
data-source="{% url "control:nav.typeahead" %}">
<li class="query-holder">
<div class="form-box">
<input type="text" class="form-control"
placeholder="{% trans "Search for events" %}"
data-typeahead-query>
</div>
</li>
</ul>
</div>
<ul class="nav" id="side-menu">
{% block nav %}
<li>
<a href="{% url 'control:index' %}" {% if url_name == "index" %}class="active"{% endif %}>
<i class="fa fa-dashboard fa-fw"></i>
{% trans "Dashboard" %}
</a>
</li>
{% if staff_session %}
<li>
<a href="{% url 'control:global.settings' %}"
{% if "global.settings" in url_name %}class="active"{% endif %}>
<i class="fa fa-wrench fa-fw"></i>
{% trans "Global settings" %}
</a>
</li>
{% endif %}
<li>
<a href="{% url 'control:events' %}" {% if "events" in url_name %}class="active"{% endif %}>
<i class="fa fa-calendar fa-fw"></i>
{% trans "Events" %}
</a>
</li>
<li>
<a href="{% url 'control:organizers' %}" {% if "organizer" in url_name %}class="active"{% endif %}>
<i class="fa fa-users fa-fw"></i>
{% trans "Organizers" %}
</a>
</li>
<li>
<a href="{% url 'control:search.orders' %}"
{% if url_name == "search.orders" %}class="active"{% endif %}>
<i class="fa fa-search fa-fw"></i>
{% trans "Order search" %}
</a>
</li>
{% if staff_session %}
<li>
<a href="{% url 'control:users' %}"
{% if "users" in url_name %}class="active"{% endif %}>
<i class="fa fa-user fa-fw"></i>
{% trans "Users" %}
</a>
</li>
<li>
<a href="{% url 'control:user.sudo.list' %}"
{% if "sudo" in url_name %}class="active"{% endif %}>
<i class="fa fa-id-card fa-fw"></i>
{% trans "Admin sessions" %}
</a>
</li>
{% endif %}
{% for nav in nav_global %}
{% for nav in nav_items %}
<li>
<a href="{{ nav.url }}" {% if nav.active %}class="active"{% endif %}
{% if nav.children %}class="has-children"{% endif %}>

View File

@@ -7,15 +7,9 @@
{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}
{% endblock %}
{% block content %}
<h1>
{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}
{% if 'can_change_event_settings' in request.eventpermset %}
<a href="{% url "control:event.orders.checkinlists.edit" event=request.event.slug organizer=request.event.organizer.slug list=checkinlist.pk %}"
class="btn btn-default">
<span class="fa fa-edit"></span>
{% trans "Edit list" %}
</a>
{% endif %}
<div class="panel panel-with-btn panel-default">
<div class="panel-heading">
<div class="pull-right">
<a href="{% url "control:event.orders.export" event=request.event.slug organizer=request.event.organizer.slug %}?identifier=checkinlistpdf&checkinlistpdf-list={{ checkinlist.pk }}"
class="btn btn-default" target="_blank">
<span class="fa fa-download"></span>
@@ -26,8 +20,39 @@
<span class="fa fa-download"></span>
{% trans "CSV" %}
</a>
{% if 'can_change_event_settings' in request.eventpermset %}
<a href="{% url "control:event.orders.checkinlists.edit" event=request.event.slug organizer=request.event.organizer.slug list=checkinlist.pk %}"
class="btn btn-default">
<span class="fa fa-edit"></span>
{% trans "Edit list" %}
</a>
{% endif %}
</div>
<h1 class="panel-title">
{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}
</h1>
<form class="row filter-form" action="" method="get">
</div>
<div class="panel-body">
<dl class="dl-horizontal dl-left">
<dt>{% trans "Products" %}</dt>
<dd>
{% if checkinlist.all_products %}
{% trans "All" %}
{% else %}
{{ checkinlist.limit_products.all|join:"<br>" }}
{% endif %}
</dd>
<dt>{% trans "Orders" %}</dt>
<dd>{% if checkinlist.include_pending %}{% trans "Pending and paid" %}{% else %}{% trans "Only paid orders" %}{% endif %}</dd>
{% if checkinlist.subevent %}
<dt>{% trans "Date" context "subevent" %}</dt>
<dd>{{ checkinlist.subevent }}</dd>
{% endif %}
</dl>
</div>
</div>
<div class="panel panel-default">
<form class="panel-body row filter-form" action="" method="get">
<div class="col-md-4 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.user layout='inline' %}
</div>
@@ -47,7 +72,7 @@
</div>
</form>
{% if entries|length == 0 %}
<div class="empty-collection">
<div class="panel-body empty-collection">
<p>
{% blocktrans trimmed %}
No attendee record was found.
@@ -55,25 +80,40 @@
</p>
</div>
{% else %}
<form method="post" action="">
<form method="post" action="" class="table-responsive">
{% csrf_token %}
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
<tr>
<th></th>
<th>{% trans "Order code" %} <a href="?{% url_replace request 'ordering' '-code'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'code'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Item" %} <a href="?{% url_replace request 'ordering' '-item'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'item'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Email" %} <a href="?{% url_replace request 'ordering' '-email'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'email'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Name" %} <a href="?{% url_replace request 'ordering' '-name'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Status" %} <a href="?{% url_replace request 'ordering' '-status'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'status'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Timestamp" %} <a href="?{% url_replace request 'ordering' '-timestamp'%}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'timestamp'%}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Order code" %} <a href="?{% url_replace request 'ordering' '-code' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'code' %}">
<i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Item" %} <a href="?{% url_replace request 'ordering' '-item' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'item' %}">
<i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Email" %} <a href="?{% url_replace request 'ordering' '-email' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'email' %}">
<i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Name" %} <a href="?{% url_replace request 'ordering' '-name' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name' %}">
<i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Status" %} <a href="?{% url_replace request 'ordering' '-status' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'status' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Timestamp" %} <a href="?{% url_replace request 'ordering' '-timestamp' %}">
<i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'timestamp' %}">
<i class="fa fa-caret-up"></i></a></th>
</tr>
</thead>
<tbody>
@@ -81,11 +121,13 @@
<tr>
<td>
{% if "can_change_orders" in request.eventpermset %}
<input type="checkbox" name="checkin" id="id_checkin" class="" value="{{ e.pk }}"/>
<input type="checkbox" name="checkin" id="id_checkin" class=""
value="{{ e.pk }}"/>
{% endif %}
</td>
<td>
<strong><a href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=e.order.code %}">{{ e.order.code }}</a></strong>
<strong><a
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=e.order.code %}">{{ e.order.code }}</a></strong>
{% if e.order.status == "n" %}
<span class="label label-warning">{% trans "unpaid" %}</span>
{% endif %}
@@ -115,13 +157,17 @@
{% endfor %}
</tbody>
</table>
</div>
{% if "can_change_orders" in request.eventpermset %}
<div class="panel-footer">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Check-In selected attendees" %}
</button>
</div>
{% endif %}
</form>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -3,7 +3,11 @@
{% load bootstrap3 %}
{% block title %}{% trans "Delete check-in list" %}{% endblock %}
{% block inside %}
<h1>{% trans "Delete check-in list" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Delete check-in list" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans with name=checkinlist.name %}Are you sure you want to delete the check-in list <strong>{{ name }}</strong>?{% endblocktrans %}</p>
@@ -22,4 +26,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -9,22 +9,30 @@
{% endif %}
{% endblock %}
{% block inside %}
{% if checkinlist %}
<h1>{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}</h1>
{% else %}
<h1>{% trans "Check-in list" %}</h1>
{% endif %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
<fieldset class="panel panel-default">
<div class="panel-heading">
{% if checkinlist %}
<h1 class="panel-title">{% blocktrans with name=checkinlist.name %}Check-in list: {{ name }}{% endblocktrans %}</h1>
{% else %}
<h1 class="panel-title">{% trans "Check-in list" %}</h1>
{% endif %}
</div>
<div class="panel-body">
{% bootstrap_field form.name layout="control" %}
{% if form.subevent %}
{% bootstrap_field form.subevent layout="control" %}
{% endif %}
{% bootstrap_field form.include_pending layout="control" %}
</div>
</fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Products" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
Please select the products that should be part of this check-in list.
@@ -32,6 +40,7 @@
</p>
{% bootstrap_field form.all_products layout="control" %}
{% bootstrap_field form.limit_products layout="control" %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -2,32 +2,39 @@
{% load i18n %}
{% block title %}{% trans "Check-in lists" %}{% endblock %}
{% block inside %}
<h1>{% trans "Check-in lists" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Check-in lists" %}</h1>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
You can create check-in lists that you can use e.g. at the entrance of your event to track who is coming
and if they actually bought a ticket. You can do this process by printing out the list on paper, using this
web interface or by using one of our mobile or desktop apps to automatically scan tickets.
You can create check-in lists that you can use e.g. at the entrance of your event to track who is
coming and if they actually bought a ticket. You can do this process by printing out the list on paper,
using this web interface or by using one of our mobile or desktop apps to automatically scan tickets.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
You can create multiple check-in lists to separate multiple parts of your event, for example if you have
separate entries for multiple ticket types. Different check-in lists are completely independent: If a ticket
shows up on two lists, it is valid once on every list. This might be useful if you run a festival with
festival passes that allow access to every or multiple performances as well as tickets only valid for single
performances.
You can create multiple check-in lists to separate multiple parts of your event, for example if you
have separate entries for multiple ticket types. Different check-in lists are completely independent: If
a ticket shows up on two lists, it is valid once on every list. This might be useful if you run a
festival with festival passes that allow access to every or multiple performances as well as tickets only valid
for single performances.
{% endblocktrans %}
</p>
</div>
</div>
<div class="panel panel-default">
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
<form class="panel-body form-inline helper-display-inline" action="" method="get">
<form class="form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
</form>
{% endif %}
{% if checkinlists|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% if request.GET.subevent %}
{% trans "Your search did not match any check-in lists." %}
@@ -46,10 +53,11 @@
</div>
{% else %}
{% if "can_change_event_settings" in request.eventpermset %}
<p>
<a href="{% url "control:event.orders.checkinlists.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new check-in list" %}
<div class="panel-body">
<a href="{% url "control:event.orders.checkinlists.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new check-in list" %}
</a>
</p>
</div>
{% endif %}
<div class="table-responsive">
<table class="table table-hover table-quotas">
@@ -68,7 +76,10 @@
{% for cl in checkinlists %}
<tr>
<td>
<strong><a href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}">{{ cl.name }}</a></strong>
<strong><a
href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}">
{{ cl.name }}
</a></strong>
</td>
<td>
<div class="quotabox availability">
@@ -77,7 +88,8 @@
</div>
</div>
<div class="numbers">
{{ cl.checkin_count|default_if_none:"0" }} / {{ cl.position_count|default_if_none:"0" }}
{{ cl.checkin_count|default_if_none:"0" }} /
{{ cl.position_count|default_if_none:"0" }}
</div>
</div>
</td>
@@ -98,10 +110,13 @@
{% endif %}
</td>
<td class="text-right">
<a href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}" class="btn btn-default btn-sm"><i class="fa fa-eye"></i></a>
<a href="{% url "control:event.orders.checkinlists.show" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-default btn-sm"><i class="fa fa-eye"></i></a>
{% if "can_change_event_settings" in request.eventpermset %}
<a href="{% url "control:event.orders.checkinlists.edit" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.orders.checkinlists.delete" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.orders.checkinlists.edit" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.orders.checkinlists.delete" organizer=request.event.organizer.slug event=request.event.slug list=cl.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% endif %}
</td>
</tr>
@@ -109,6 +124,9 @@
</tbody>
</table>
</div>
{% endif %}
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -2,7 +2,10 @@
{% load i18n %}
{% block title %}{% trans "Current issues" %}{% endblock %}
{% block inside %}
<h1>{% trans "Current issues" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Current issues" %}</h1>
</div>
<ul class="list-group">
{% for action in actions %}
<li class="list-group-item logentry">
@@ -11,7 +14,8 @@
class="btn btn-default btn-xs pull-right">
{% trans "Hide message" %}
</a>
<small><span class="fa fa-clock-o"></span> {{ action.datetime|date:"SHORT_DATETIME_FORMAT" }}</small>
<small><span class="fa fa-clock-o"></span> {{ action.datetime|date:"SHORT_DATETIME_FORMAT" }}
</small>
</p>
{{ action.display|safe }}
</li>
@@ -21,5 +25,8 @@
</div>
{% endfor %}
</ul>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
</div>
{% endblock %}

View File

@@ -2,152 +2,3 @@
{% load i18n %}
{% load staticfiles %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block nav %}
<li>
<a href="{% url 'control:event.index' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.index" %}class="active"{% endif %}>
<i class="fa fa-dashboard fa-fw"></i>
{% trans "Event dashboard" %}
</a>
</li>
{% if 'can_change_event_settings' in request.eventpermset %}
<li>
<a href="{% url 'control:event.settings' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if is_event_settings or "event.settings" == url_name or "event.settings." in url_name %}class="active"{% endif %}>
<i class="fa fa-wrench fa-fw"></i>
{% trans "Settings" %}
</a>
</li>
{% if request.event.has_subevents %}
<li>
<a href="{% url 'control:event.subevents' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.subevent" in url_name %}class="active"{% endif %}>
<i class="fa fa-calendar fa-fw"></i>
{% trans "Dates" context "subevent" %}
</a>
</li>
{% endif %}
{% endif %}
{% if 'can_change_items' in request.eventpermset %}
<li>
<a href="{% url 'control:event.items' organizer=request.event.organizer.slug event=request.event.slug %}"
class="has-children">
<i class="fa fa-ticket fa-fw"></i>
{% trans "Products" %}
</a>
<a href="#" class="arrow">
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<li>
<a href="{% url 'control:event.items' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.items" == url_name or "event.item." in url_name or "event.items.add" == url_name or url_name == "event.item" %}class="active"{% endif %}>
{% trans "Products" %}</a>
</li>
<li>
<a href="{% url 'control:event.items.quotas' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.items.quotas" in url_name %}class="active"{% endif %}>
{% trans "Quotas" %}
</a>
</li>
<li>
<a href="{% url 'control:event.items.categories' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.items.categories" in url_name %}class="active"{% endif %}>
{% trans "Categories" %}
</a>
</li>
<li>
<a href="{% url 'control:event.items.questions' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.items.questions" in url_name %}class="active"{% endif %}>
{% trans "Questions" %}
</a>
</li>
</ul>
</li>
{% endif %}
{% if 'can_view_orders' in request.eventpermset %}
<li>
<a href="{% url 'control:event.orders' organizer=request.event.organizer.slug event=request.event.slug %}"
class="has-children">
<i class="fa fa-shopping-cart fa-fw"></i>
{% trans "Orders" %}
</a>
<a href="#" class="arrow">
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
<li>
<a href="{% url 'control:event.orders' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.orders" or "event.order." in url_name or url_name == "event.order" %}class="active"{% endif %}>
{% trans "All orders" %}
</a>
</li>
<li>
<a href="{% url 'control:event.orders.overview' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.orders.overview" %}class="active"{% endif %}>
{% trans "Overview" %}
</a>
</li>
<li>
<a href="{% url 'control:event.orders.export' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.orders.export" %}class="active"{% endif %}>
{% trans "Export" %}
</a>
</li>
<li>
<a href="{% url 'control:event.orders.waitinglist' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.orders.waitinglist" %}class="active"{% endif %}>
{% trans "Waiting list" %}
</a>
</li>
</ul>
</li>
{% endif %}
{% if 'can_view_vouchers' in request.eventpermset %}
<li>
<a href="{% url 'control:event.vouchers' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if url_name == "event.voucher" %}class="active"{% endif %}>
<i class="fa fa-tags fa-fw"></i>
{% trans "Vouchers" %}
</a>
</li>
{% endif %}
{% if 'can_view_orders' in request.eventpermset %}
<li>
<a href="{% url 'control:event.orders.checkinlists' organizer=request.event.organizer.slug event=request.event.slug %}"
{% if "event.orders.checkin" in url_name %}class="active"{% endif %}>
<i class="fa fa-check-square-o fa-fw"></i>
{% trans "Check-in lists" %}
</a>
</li>
{% endif %}
{% for nav in nav_event %}
<li>
<a href="{{ nav.url }}" {% if nav.active %}class="active"{% endif %}
{% if nav.children %}class="has-children"{% endif %}>
{% if nav.icon and "." in nav.icon %}
<img src="{% static nav.icon %}" class="fa-img">
{% elif nav.icon %}
<i class="fa fa-{{ nav.icon }} fa-fw"></i>
{% endif %}
{{ nav.label }}
</a>
{% if nav.children %}
<a href="#" class="arrow">
<span class="fa arrow"></span>
</a>
<ul class="nav nav-second-level">
{% for item in nav.children %}
<li>
<a href="{{ item.url }}"
{% if item.active %}class="active"{% endif %}>
{{ item.label }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
{% endblock %}

View File

@@ -2,7 +2,11 @@
{% load i18n %}
{% load bootstrap3 %}
{% block content %}
<h1>{% trans "Delete event" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Delete event" %}</h2>
</div>
<div class="panel-body">
{% if request.event.allow_delete %}
{% bootstrap_form_errors form layout="inline" %}
<p>
@@ -57,7 +61,8 @@
<input type="hidden" name="live" value="false">
<div class="form-group submit-group">
<a href="{% url "control:event.shredder.start" event=request.event.slug organizer=request.organizer.slug %}" class="btn btn-danger btn-save">
<a href="{% url "control:event.shredder.start" event=request.event.slug organizer=request.organizer.slug %}"
class="btn btn-danger btn-save">
<span class="fa fa-eraser"></span>
{% trans "Delete personal data" %}
</a>
@@ -71,7 +76,8 @@
<p>
{% trans "However, since your shop is offline, it is only visible to the organizing team according to the permissions you configured." %}
<div class="form-group submit-group">
<a href="{% url "control:event.shredder.start" event=request.event.slug organizer=request.organizer.slug %}" class="btn btn-danger btn-save">
<a href="{% url "control:event.shredder.start" event=request.event.slug organizer=request.organizer.slug %}"
class="btn btn-danger btn-save">
<span class="fa fa-eraser"></span>
{% trans "Delete personal data" %}
</a>
@@ -79,4 +85,6 @@
</p>
{% endif %}
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -6,22 +6,30 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Event page" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.logo_image layout="control" %}
{% bootstrap_field form.frontpage_text layout="control" %}
{% bootstrap_field form.show_variations_expanded layout="control" %}
{% if form.frontpage_subevent_ordering %}
{% bootstrap_field form.frontpage_subevent_ordering layout="control" %}
{% endif %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Shop design" %}</legend>
</div>
<div class="panel-body">
{% url "control:organizer.display" organizer=request.organizer.slug as org_url %}
{% propagated request.event org_url "primary_color" "primary_font" %}
{% bootstrap_field form.primary_color layout="control" %}
{% bootstrap_field form.primary_font layout="control" %}
{% endpropagated %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -5,6 +5,8 @@
{% load staticfiles %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
<div class="panel panel-default">
<div class="panel-body">
<h1>
{{ request.event.name }}
<small>
@@ -15,6 +17,8 @@
{% endif %}
</small>
</h1>
</div>
</div>
{% if actions|length > 0 %}
<div class="panel panel-danger">
<div class="panel-heading">
@@ -71,7 +75,6 @@
{% endfor %}
</div>
<p>&nbsp;</p>
<div class="panel panel-default items">
<div class="panel-heading">
<h3 class="panel-title">

View File

@@ -5,8 +5,11 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Invoicing" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.invoice_address_asked layout="control" %}
{% bootstrap_field form.invoice_address_required layout="control" %}
{% bootstrap_field form.invoice_name_required layout="control" %}
@@ -24,14 +27,16 @@
{% bootstrap_field form.invoice_additional_text layout="control" %}
{% bootstrap_field form.invoice_footer_text layout="control" %}
{% bootstrap_field form.invoice_logo_image layout="control" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-default btn-lg" name="preview" value="preview" formtarget="_blank">
<button type="submit" class="btn btn-default btn-lg" name="preview" value="preview"
formtarget="_blank">
{% trans "Save and show preview" %}
</button>
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</div>
</fieldset>
</form>
{% endblock %}

View File

@@ -2,7 +2,11 @@
{% load i18n %}
{% load bootstrap3 %}
{% block content %}
<h1>{% trans "Shop status" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Shop status" %}</h1>
</div>
<div class="panel-body">
{% if request.event.live %}
<p>
{% trans "Your shop is currently live. If you take it down, it will only be visible to you and your team." %}
@@ -48,4 +52,6 @@
</form>
{% endif %}
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -3,9 +3,11 @@
{% load staticfiles %}
{% block title %}{% trans "Event logs" %}{% endblock %}
{% block inside %}
<h1>{% trans "Event logs" %}</h1>
<form class="form-inline helper-display-inline" action="" method="get">
<p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Event logs" %}</h1>
</div>
<form class="form-inline panel-body" action="" method="get">
<select name="user" class="form-control">
<option value="">{% trans "All actions" %}</option>
<option value="yes" {% if request.GET.user == "yes" %}selected="selected"{% endif %}>
@@ -24,7 +26,6 @@
{% endfor %}
</select>
<button class="btn btn-primary" type="submit">{% trans "Filter" %}</button>
</p>
</form>
<ul class="list-group">
{% for log in logs %}
@@ -75,5 +76,8 @@
</div>
{% endfor %}
</ul>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
</div>
{% endblock %}

View File

@@ -6,16 +6,18 @@
mail-preview-url="{% url "control:event.settings.mail.preview" event=request.event.slug organizer=request.event.organizer.slug %}">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "E-mail settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.mail_prefix layout="control" %}
{% bootstrap_field form.mail_from layout="control" %}
{% bootstrap_field form.mail_text_signature layout="control" %}
{% bootstrap_field form.mail_bcc layout="control" %}
</div>
</fieldset>
<fieldset>
<legend>{% trans "E-mail content" %}</legend>
<div class="panel-group" id="questions_group">
<div class="" id="questions_group">
{% blocktrans asvar title_placed_order %}Placed order{% endblocktrans %}
{% include "pretixcontrol/event/mail_settings_fragment.html" with pid="order_placed" title=title_placed_order items="mail_text_order_placed" %}
@@ -46,9 +48,11 @@
{% blocktrans asvar title_download_tickets_reminder %}Reminder to download tickets{% endblocktrans %}
{% include "pretixcontrol/event/mail_settings_fragment.html" with pid="ticket_reminder" title=title_download_tickets_reminder items="mail_days_download_reminder,mail_text_download_reminder" exclude="mail_days_download_reminder" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "SMTP settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.smtp_use_custom layout="control" %}
{% bootstrap_field form.smtp_host layout="control" %}
{% bootstrap_field form.smtp_port layout="control" %}
@@ -56,6 +60,7 @@
{% bootstrap_field form.smtp_password layout="control" %}
{% bootstrap_field form.smtp_use_tls layout="control" %}
{% bootstrap_field form.smtp_use_ssl layout="control" %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -4,7 +4,10 @@
<details class="panel panel-default">
<summary class="panel-heading">
<h4 class="panel-title">
<span>
{% trans "E-mail content:" %}
<strong>{% trans title %}</strong>
</span>
<i class="fa fa-angle-down collapse-indicator"></i>
</h4>
</summary>

View File

@@ -4,8 +4,10 @@
{% block inside %}
<form action="" method="post" class="form-horizontal form-plugins">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Payment providers" %}</legend>
</div>
<table class="table table-payment-providers">
<tbody>
{% for provider in providers %}
@@ -44,8 +46,11 @@
</tbody>
</table>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "General payment settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_form_errors form layout="control" %}
{% bootstrap_field form.payment_term_days layout="control" %}
{% bootstrap_field form.payment_term_last layout="control" %}
@@ -53,11 +58,12 @@
{% bootstrap_field form.payment_term_expire_automatically layout="control" %}
{% bootstrap_field form.payment_term_accept_late layout="control" %}
{% bootstrap_field form.tax_rate_default layout="control" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</div>
</fieldset>
</form>
{% endblock %}

View File

@@ -4,15 +4,20 @@
{% block inside %}
<form action="" method="post" class="form-horizontal form-plugins">
{% csrf_token %}
<fieldset>
<legend>
<p>
<a href="{% url 'control:event.settings.payment' event=request.event.slug organizer=request.organizer.slug %}"
class="btn btn-default btn-sm btn-link">
class="btn btn-default">
<span class="fa fa-caret-left"></span>
{% trans "Back" %}
</a>
</p>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>
{% trans "Payment provider:" %} {{ provider.verbose_name }}
</legend>
</div>
<div class="panel-body">
{% bootstrap_form form layout='control' %}
{% if settings_content %}{{ settings_content|safe }}{% endif %}
<p>&nbsp;</p>
@@ -20,7 +25,8 @@
<strong>{% trans "Warning:" %}</strong>
{% blocktrans trimmed %}
Please note that EU Directive 2015/2366 bans surcharging payment fees for most common payment
methods within the European Union. If in doubt, consult a lawyer or refrain from charging payment
methods within the European Union. If in doubt, consult a lawyer or refrain from charging
payment
fees.
{% endblocktrans %}
<br>
@@ -29,6 +35,7 @@
pass it on to your customers.
{% endblocktrans %}
</div>
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -4,8 +4,6 @@
{% block inside %}
<form action="" method="post" class="form-horizontal form-plugins">
{% csrf_token %}
<fieldset>
<legend>{% trans "Installed plugins" %}</legend>
{% if "success" in request.GET %}
<div class="alert alert-success">
{% trans "Your changes have been saved." %}
@@ -22,13 +20,17 @@
</div>
<div class="col-sm-4">
{% if plugin.app.compatibility_errors %}
<button class="btn disabled btn-block btn-default" disabled="disabled">{% trans "Incompatible" %}</button>
<button class="btn disabled btn-block btn-default"
disabled="disabled">{% trans "Incompatible" %}</button>
{% elif plugin.restricted and not staff_session %}
<button class="btn disabled btn-block btn-default" disabled="disabled">{% trans "Not available" %}</button>
<button class="btn disabled btn-block btn-default"
disabled="disabled">{% trans "Not available" %}</button>
{% elif plugin.module in plugins_active %}
<button class="btn btn-default btn-block" name="plugin:{{ plugin.module }}" value="disable">{% trans "Disable" %}</button>
<button class="btn btn-default btn-block" name="plugin:{{ plugin.module }}"
value="disable">{% trans "Disable" %}</button>
{% else %}
<button class="btn btn-default btn-block" name="plugin:{{ plugin.module }}" value="enable">{% trans "Enable" %}</button>
<button class="btn btn-default btn-block" name="plugin:{{ plugin.module }}"
value="enable">{% trans "Enable" %}</button>
{% endif %}
</div>
</div>
@@ -74,6 +76,5 @@
</div>
{% endfor %}
</div>
</fieldset>
</form>
{% endblock %}

View File

@@ -4,34 +4,37 @@
{% load formset_tags %}
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
<div class="panel panel-default">
<div class="panel-body">
<div class="quick-setup-step">
<div class="quick-icon">
<span class="fa fa-fw fa-check-circle text-success"></span>
</div>
<div class="quick-content">
<h2>{% trans "Congratulations!" %}</h2>
<p>
<strong>{% trans "You just created an event!" %}</strong>
</p>
<p>
{% blocktrans trimmed %}
You can scroll down and create your first ticket products quickly, or you can use the navigation
You can scroll down and create your first ticket products quickly, or you can use the
navigation
on the left to modify the settings of your event in much more detail.
{% endblocktrans %}
</p>
<div class="clearfix"></div>
</div>
</div>
</div>
</div>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<fieldset class="quick-setup-step">
<div class="quick-icon">
<span class="fa fa-fw fa-ticket text-muted"></span>
</div>
<div class="quick-content">
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Create ticket types" %}</legend>
</div>
<div class="panel-body">
<div class="formset" data-formset data-formset-prefix="{{ formset.prefix }}">
{{ formset.management_form }}
{% bootstrap_formset_errors formset %}
@@ -104,7 +107,9 @@
<strong>{% trans "Total capacity:" %}</strong>
<span id="total-capacity"></span>
{% bootstrap_field form.total_quota layout="inline" field_class="sr-only" %}
<a href="#" data-toggle="tooltip" title="{% trans 'You can set a limit on the total number of tickets sold for your event, regardless of the ticket type.' %}" id="total-capacity-edit">
<a href="#" data-toggle="tooltip"
title="{% trans 'You can set a limit on the total number of tickets sold for your event, regardless of the ticket type.' %}"
id="total-capacity-edit">
<span class="fa fa-edit"></span>
</a>
</div>
@@ -114,20 +119,19 @@
<p>&nbsp;</p>
<p class="bigger">
{% blocktrans trimmed %}
If you want to use more advanced features like non-admission products, product variations, custom
quotas, add-on products or want to modify your ticket types in more detail, you can later do so
in the "Products" section in the navigation. Don't worry, you can change everything you input here.
If you want to use more advanced features like non-admission products, product variations,
custom quotas, add-on products or want to modify your ticket types in more detail, you can later
do so in the "Products" section in the navigation. Don't worry, you can change everything you
input here.
{% endblocktrans %}
</p>
<p>&nbsp;</p>
</div>
</fieldset>
<fieldset class="quick-setup-step">
<div class="quick-icon">
<span class="fa fa-fw fa-wrench text-muted"></span>
</div>
<div class="quick-content">
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Features" %}</legend>
</div>
<div class="panel-body">
<p class="bigger">
{% blocktrans trimmed %}
We recommend that you take some time to go through the "Settings" part of your event, but if
@@ -138,15 +142,13 @@
{% bootstrap_field form.waiting_list_enabled layout="control" label_class="sr-only" field_class="col-md-12" %}
{% bootstrap_field form.show_quota_left layout="control" label_class="sr-only" field_class="col-md-12" %}
{% bootstrap_field form.attendee_names_required layout="control" label_class="sr-only" field_class="col-md-12" %}
<p>&nbsp;</p>
</div>
</fieldset>
<fieldset class="quick-setup-step" id="quick-setup-step-payment">
<div class="quick-icon">
<span class="fa fa-fw fa-money text-muted"></span>
</div>
<div class="quick-content">
<fieldset class="panel panel-default" id="quick-setup-step-payment">
<div class="panel-heading">
<legend>{% trans "Payment" %}</legend>
</div>
<div class="panel-body">
<p class="bigger">
{% blocktrans trimmed %}
pretix supports a
@@ -164,21 +166,20 @@
<div data-display-dependency="#id_payment_stripe__enabled">
<div class="alert alert-info">
{% blocktrans trimmed %}
After you saved this page, we will redirect you to Stripe to create or connect an account
After you saved this page, we will redirect you to Stripe to create or connect an
account
there. Once you completed this, you will be taken back to pretix.
{% endblocktrans %}
</div>
</div>
{% endif %}
<p>&nbsp;</p>
</div>
</fieldset>
<fieldset class="quick-setup-step">
<div class="quick-icon">
<span class="fa fa-fw fa-envelope text-muted"></span>
</div>
<div class="quick-content">
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Getting in touch with you" %}</legend>
</div>
<div class="quick-content panel-body">
<p class="bigger">
{% blocktrans trimmed %}
In case something goes wrong or is unclear, we strongly suggest that you provide ways for your

View File

@@ -5,8 +5,11 @@
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "General information" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.name layout="control" %}
{% bootstrap_field form.slug layout="control" %}
{% bootstrap_field form.date_from layout="control" %}
@@ -35,9 +38,13 @@
</div>
</div>
{% endif %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Display settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field sform.locales layout="control" %}
{% bootstrap_field sform.locale layout="control" %}
{% bootstrap_field sform.timezone layout="control" %}
@@ -48,17 +55,25 @@
{% bootstrap_field sform.confirm_text layout="control" %}
{% bootstrap_field sform.show_quota_left layout="control" %}
{% bootstrap_field sform.display_net_prices layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Timeline" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.presale_start layout="control" %}
{% bootstrap_field sform.presale_start_show_date layout="control" %}
{% bootstrap_field form.presale_end layout="control" %}
{% bootstrap_field sform.show_items_outside_presale_period layout="control" %}
{% bootstrap_field sform.last_order_modification_date layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Orders" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field sform.reservation_time layout="control" %}
{% bootstrap_field sform.max_items_per_order layout="control" %}
{% bootstrap_field sform.attendee_names_asked layout="control" %}
@@ -67,12 +82,17 @@
{% bootstrap_field sform.attendee_emails_asked layout="control" %}
{% bootstrap_field sform.attendee_emails_required layout="control" %}
{% bootstrap_field sform.cancel_allow_user layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Waiting list" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field sform.waiting_list_enabled layout="control" %}
{% bootstrap_field sform.waiting_list_auto layout="control" %}
{% bootstrap_field sform.waiting_list_hours layout="control" %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -4,6 +4,8 @@
{% block title %}{{ request.event.name }}{% endblock %}
{% block content %}
{% if "congratulations" in request.GET %}
<div class="panel panel-default">
<div class="panel-body">
<div class="thank-you">
<span class="fa fa-check-circle"></span>
@@ -13,7 +15,8 @@
</p>
<p>
{% blocktrans trimmed %}
You can now scroll down and modify the settings in more detail, if you want, or you can create your
You can now scroll down and modify the settings in more detail, if you want, or you can
create your
first product to start selling tickets right away!
{% endblocktrans %}
</p>
@@ -25,70 +28,10 @@
</p>
<div class="clearfix"></div>
</div>
</div>
</div>
{% endif %}
<h1>{% trans "Settings" %}</h1>
<ul class="nav nav-pills">
{% if 'can_change_event_settings' in request.eventpermset %}
<li {% if "event.settings" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "General" %}
</a>
</li>
<li {% if "event.settings.payment" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.payment' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Payment" %}
</a>
</li>
<li {% if "event.settings.plugins" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.plugins' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Plugins" %}
</a>
</li>
<li {% if "event.settings.display" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.display' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Display" %}
</a>
</li>
<li {% if "event.settings.tickets" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.tickets' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Tickets" %}
</a>
</li>
<li {% if "event.settings.mail" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.mail' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "E-mail" %}
</a>
</li>
<li {% if "event.settings.tax" in url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.tax' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Tax rules" %}
</a>
</li>
<li {% if "event.settings.invoice" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.invoice' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Invoicing" %}
</a>
</li>
<li {% if "event.settings.permissions" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.permissions' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Permissions" %}
</a>
</li>
<li {% if "event.settings.widget" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.settings.widget' organizer=request.event.organizer.slug event=request.event.slug %}">
{% trans "Widget" %}
</a>
</li>
{% endif %}
{% for nav in nav_event_settings %}
<li {% if nav.active %}class="active"{% endif %}>
<a href="{{ nav.url }}">
{{ nav.label }}
</a>
</li>
{% endfor %}
</ul>
{% block inside %}
{% endblock %}
{% endblock %}

View File

@@ -3,16 +3,23 @@
{% load bootstrap3 %}
{% block title %}{% trans "Delete tax rule" %}{% endblock %}
{% block inside %}
<legend>{% trans "Delete tax rule" %}</legend>
<form action="" method="post" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Delete tax rule" %}</legend>
</div>
<div class="panel-body">
{% csrf_token %}
{% if possible %}
<p>{% blocktrans %}Are you sure you want to delete the tax rule <strong>{{ taxrule }}</strong>?{% endblocktrans %}</p>
<p>{% blocktrans %}Are you sure you want to delete the tax rule <strong>{{ taxrule }}</strong>
?{% endblocktrans %}</p>
{% else %}
<p>{% blocktrans %}You cannot delete a tax rule that is in use for a product or has been in use for any existing orders.{% endblocktrans %}</p>
<p>{% blocktrans %}You cannot delete a tax rule that is in use for a product or has been in use for
any existing orders.{% endblocktrans %}</p>
{% endif %}
<div class="form-group submit-group">
<a href="{% url "control:event.settings.tax" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn
<a href="{% url "control:event.settings.tax" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn
btn-default btn-cancel">
{% trans "Cancel" %}
</a>
@@ -22,5 +29,7 @@ btn-default btn-cancel">
</button>
{% endif %}
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -10,17 +10,23 @@
{% endif %}
{% endblock %}
{% block inside %}
<form action="" method="post" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
{% if rule %}
<legend>{% blocktrans with name=rule.name %}Tax rule: {{ name }}{% endblocktrans %}</legend>
{% else %}
<legend>{% trans "Tax rule" %}</legend>
{% endif %}
<form action="" method="post" class="form-horizontal">
</div>
{% csrf_token %}
<div class="panel-body">
{% bootstrap_form_errors form %}
{% bootstrap_field form.name layout="control" %}
{% bootstrap_field form.rate addon_after="%" layout="control" %}
</div>
</div>
<details class="panel panel-default"
{% if rule.eu_reverse_charge or rule.has_custom_rules or form.errors %}open{% endif %}>
<summary class="panel-heading">
@@ -31,7 +37,6 @@
</summary>
<div id="advanced">
<div class="panel-body">
<legend>{% trans "Advanced settings" %}</legend>
<div class="alert alert-legal">
{% blocktrans trimmed with docs="https://docs.pretix.eu/en/latest/user/events/taxes.html" %}
These settings are intended for advanced users. See the
@@ -47,8 +52,10 @@
<div class="alert alert-warning">
{% blocktrans trimmed %}
These settings are intended for professional users with very specific taxation situations.
If you create any rule here, the reverse charge settings above will be ignored. The rules will be
checked in order and once the first rule matches the order, it will be used and all further rules will
If you create any rule here, the reverse charge settings above will be ignored. The rules
will be
checked in order and once the first rule matches the order, it will be used and all further
rules will
be ignored. If no rule matches, tax will be charged.
{% endblocktrans %}
{% trans "All of these rules will only apply if an invoice address is set." %}

View File

@@ -2,9 +2,17 @@
{% load i18n %}
{% block title %}{% trans "Tax rules" %}{% endblock %}
{% block inside %}
<div class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Tax rules" %}</legend>
</div>
<div class="panel-body">
{% trans "You can create one or multiple tax rules that you can apply to your products." %}
</div>
</div>
<div class="panel panel-default">
{% if taxrules|length == 0 %}
<div class="empty-collection">
<div class="panel-body empty-collection">
<p>
{% blocktrans trimmed %}
You haven't created any tax rules yet.
@@ -15,10 +23,11 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new tax rule" %}</a>
</div>
{% else %}
<p>
<a href="{% url "control:event.settings.tax.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new tax rule" %}
<div class="panel-body">
<a href="{% url "control:event.settings.tax.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new tax rule" %}
</a>
</p>
</div>
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
@@ -32,20 +41,26 @@
{% for tr in taxrules %}
<tr>
<td>
<strong><a href="{% url "control:event.settings.tax.edit" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}">
<strong><a
href="{% url "control:event.settings.tax.edit" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}">
{{ tr.name }}
</a></strong>
</td>
<td>{{ tr.rate }} %</td>
<td class="text-right">
<a href="{% url "control:event.settings.tax.edit" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.settings.tax.delete" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.settings.tax.edit" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.settings.tax.delete" organizer=request.event.organizer.slug event=request.event.slug rule=tr.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
<div class="panel-body">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -4,12 +4,16 @@
{% block inside %}
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Ticket download" %}</legend>
</div>
<div class="panel-body">
{% if request.event.settings.ticket_download and not any_enabled %}
<div class="alert alert-warning">
{% blocktrans trimmed %}
You activated ticket downloads but no output provider is enabled. Be sure to enable a plugin and
You activated ticket downloads but no output provider is enabled. Be sure to enable a plugin
and
activate an output provider.
{% endblocktrans %}
</div>
@@ -19,6 +23,8 @@
{% bootstrap_field form.ticket_download_date layout="control" %}
{% bootstrap_field form.ticket_download_addons layout="control" %}
{% bootstrap_field form.ticket_download_nonadm layout="control" %}
</div>
</fieldset>
{% for provider in providers %}
<div class="panel panel-default ticketoutput-panel">
<div class="panel-heading">
@@ -42,7 +48,6 @@
{% trans "There are no ticket outputs available. Please go to the plugin settings and activate one or more ticket output plugins." %}</em>
</div>
{% endfor %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}

View File

@@ -5,17 +5,23 @@
{% load eventurl %}
{% load eventsignal %}
{% block inside %}
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Widget" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
The pretix widget is a way to embed your ticket shop into your event website. This way, your visitors can
The pretix widget is a way to embed your ticket shop into your event website. This way, your
visitors can
buy their ticket right away without leaving your website.
{% endblocktrans %}
</p>
{% if valid %}
<p>
{% blocktrans trimmed %}
To embed the widget onto your website, simply copy the following code to the <code>&lt;head&gt;</code>
To embed the widget onto your website, simply copy the following code to the
<code>&lt;head&gt;</code>
section of your website:
{% endblocktrans %}
</p>
@@ -32,7 +38,9 @@
{% abseventurl request.event "presale:event.index" as indexurl %}
{% endif %}
{% if form.cleaned_data.compatibility_mode %}
<pre>&lt;div class="pretix-widget-compat" event="{% abseventurl request.event "presale:event.index" %}"{% if form.cleaned_data.subevent %} subevent="{{ form.cleaned_data.subevent.pk }}"{% endif %}{% if form.cleaned_data.voucher %} voucher="{{ form.cleaned_data.voucher }}"{% endif %}&gt;&lt;/div&gt;
<pre>&lt;div class="pretix-widget-compat" event="{% abseventurl request.event "presale:event.index" %}"
{% if form.cleaned_data.subevent %} subevent="{{ form.cleaned_data.subevent.pk }}"{% endif %}
{% if form.cleaned_data.voucher %} voucher="{{ form.cleaned_data.voucher }}"{% endif %}&gt;&lt;/div&gt;
&lt;noscript&gt;
&lt;div class="pretix-widget"&gt;
&lt;div class="pretix-widget-info-message"&gt;
@@ -45,7 +53,7 @@
&lt;/noscript&gt;
</pre>
{% else %}
<pre>&lt;pretix-widget event="{% abseventurl request.event "presale:event.index" %}"{% if form.cleaned_data.subevent %} subevent="{{ form.cleaned_data.subevent.pk }}"{% endif %}{% if form.cleaned_data.voucher %} voucher="{{ form.cleaned_data.voucher }}"{% endif %}&gt;&lt;/pretix-widget&gt;
<pre>&lt;pretix-widget event="{% abseventurl request.event "presale:event.index" %}" {% if form.cleaned_data.subevent %} subevent="{{ form.cleaned_data.subevent.pk }}"{% endif %} {% if form.cleaned_data.voucher %} voucher="{{ form.cleaned_data.voucher }}"{% endif %}&gt;&lt;/pretix-widget&gt;
&lt;noscript&gt;
&lt;div class="pretix-widget"&gt;
&lt;div class="pretix-widget-info-message"&gt;
@@ -82,5 +90,7 @@
</div>
</form>
{% endif %}
</div>
</fieldset>
{% eventsignal request.event "pretix.control.signals.event_settings_widget" request=request %}
{% endblock %}

View File

@@ -3,9 +3,6 @@
{% load bootstrap3 %}
{% block title %}{% trans "Create a new event" %}{% endblock %}
{% block content %}
<h1>{% trans "Create a new event" %} <small>{% blocktrans trimmed with step=wizard.steps.step1 %}
Step {{ step }}
{% endblocktrans %}</small></h1>
{% if has_organizer %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
@@ -13,17 +10,6 @@
{% bootstrap_form_errors form %}
{% block form %}
{% endblock %}
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save pull-right">
{% trans "Continue" %}
</button>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"
class="btn btn-default btn-lg pull-left">
{% trans "Back" %}
</button>
{% endif %}
</div>
</form>
{% else %}
<div class="alert alert-danger">

View File

@@ -2,8 +2,15 @@
{% load i18n %}
{% load bootstrap3 %}
{% block form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Create a new event" %}
<small>{% blocktrans trimmed with step=wizard.steps.step1 %}
Step {{ step }}
{% endblocktrans %}</small>
</h1>
</div>
<fieldset class="panel-body">
{% bootstrap_field form.name layout="control" %}
<div class="form-group">
<label class="col-md-3 control-label" for="{{ form.slug.id_for_label }}">{{ form.slug.label }}</label>
@@ -40,16 +47,36 @@
{% bootstrap_field form.currency layout="control" %}
{% bootstrap_field form.tax_rate addon_after="%" layout="control" %}
</fieldset>
<fieldset>
</div>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Display settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.locale layout="control" %}
{% bootstrap_field form.timezone layout="control" %}
</div>
</fieldset>
{% if form.presale_start %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Timeline" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.presale_start layout="control" %}
{% bootstrap_field form.presale_end layout="control" %}
</div>
</fieldset>
{% endif %}
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save pull-right">
{% trans "Continue" %}
</button>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"
class="btn btn-default btn-lg pull-left">
{% trans "Back" %}
</button>
{% endif %}
</div>
{% endblock %}

View File

@@ -2,6 +2,15 @@
{% load i18n %}
{% load bootstrap3 %}
{% block form %}
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Create a new event" %}
<small>{% blocktrans trimmed with step=wizard.steps.step1 %}
Step {{ step }}
{% endblocktrans %}</small>
</h1>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
Do you want to copy over your configuration from a different event? We will copy all
@@ -17,4 +26,17 @@
</strong>
</div>
{% bootstrap_field form.copy_from_event layout="control" %}
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save pull-right">
{% trans "Continue" %}
</button>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"
class="btn btn-default btn-lg pull-left">
{% trans "Back" %}
</button>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -2,11 +2,33 @@
{% load i18n %}
{% load bootstrap3 %}
{% block form %}
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Create a new event" %}
<small>{% blocktrans trimmed with step=wizard.steps.step1 %}
Step {{ step }}
{% endblocktrans %}</small>
</h1>
</div>
<div class="panel-body">
{% bootstrap_field form.organizer layout="horizontal" %}
{% bootstrap_field form.locales layout="horizontal" %}
{% bootstrap_field form.has_subevents layout="horizontal" %}
<p>
<p class="help-block">
<span class="fa fa-info-circle"></span>
{% trans "Please note that you will only be able to delete your event until the first order has been created." %}
</p>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save pull-right">
{% trans "Continue" %}
</button>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}"
class="btn btn-default btn-lg pull-left">
{% trans "Back" %}
</button>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -4,10 +4,15 @@
{% load bootstrap3 %}
{% block title %}{% trans "Events" %}{% endblock %}
{% block content %}
<h1>{% trans "Events" %}</h1>
<p>{% trans "The list below shows all events you have administrative access to. Click on the event name to access event details." %}</p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Events" %}</h1>
</div>
<div class="panel-body">{% trans "The list below shows all events you have administrative access to. Click on the event name to access event details." %}</div>
</div>
<div class="panel panel-default">
{% if events|length == 0 and not filter_form.filtered %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
You currently do not have access to any events.
@@ -20,7 +25,7 @@
</a>
</div>
{% else %}
<form class="row filter-form" action="" method="get">
<form class="panel-body row filter-form" action="" method="get">
<div class="col-md-4 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query layout='inline' %}
</div>
@@ -39,12 +44,12 @@
</button>
</div>
</form>
<p>
<div class="panel-body">
<a href="{% url "control:events.add" %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create a new event" %}
</a>
</p>
</div>
<table class="table table-condensed table-hover">
<thead>
<tr>
@@ -54,13 +59,16 @@
{% if not hide_orga %}
<th>
{% trans "Organizer" %}
<a href="?{% url_replace request 'ordering' '-organizer' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'organizer' %}"><i class="fa fa-caret-up"></i></a>
<a href="?{% url_replace request 'ordering' '-organizer' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'organizer' %}"><i
class="fa fa-caret-up"></i></a>
</th>
{% endif %}
<th>
{% trans "Start date" %}
<a href="?{% url_replace request 'ordering' '-date_from' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' '-date_from' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'date_from' %}"><i class="fa fa-caret-up"></i></a>
/
{% trans "End date" %}
@@ -69,8 +77,10 @@
</th>
<th>
{% trans "Paid tickets per quota" %}
<a href="?{% url_replace request 'ordering' '-sum_tickets_paid' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'sum_tickets_paid' %}"><i class="fa fa-caret-up"></i></a>
<a href="?{% url_replace request 'ordering' '-sum_tickets_paid' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'sum_tickets_paid' %}"><i
class="fa fa-caret-up"></i></a>
</th>
<th class="text-right">
{% trans "Status" %}
@@ -83,10 +93,13 @@
{% for e in events %}
<tr>
<td class="event-name-col">
<strong><a href="{% url "control:event.index" organizer=e.organizer.slug event=e.slug %}">{{ e.name }}</a></strong>
<br><small>{{ e.slug }}</small>
<strong><a
href="{% url "control:event.index" organizer=e.organizer.slug event=e.slug %}">{{ e.name }}</a></strong>
<br>
<small>{{ e.slug }}</small>
</td>
{% if not hide_orga %}<td>{{ e.organizer }}</td>{% endif %}
{% if not hide_orga %}
<td>{{ e.organizer }}</td>{% endif %}
<td class="event-date-col">
{% if e.has_subevents %}
{{ e.min_from|default_if_none:""|date:"SHORT_DATETIME_FORMAT" }}
@@ -132,6 +145,9 @@
{% endfor %}
</tbody>
</table>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -4,6 +4,12 @@
{% block title %}{% trans "System message" %}{% endblock %}
{% block content %}
<h1>{% trans "System message" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "System message" %}</h1>
</div>
<div class="panel-body">
{{ global_settings.banner_message_detail|rich_text }}
</div>
</div>
{% endblock %}

View File

@@ -3,6 +3,11 @@
{% load bootstrap3 %}
{% block inner %}
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Global settings" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form_errors form %}
@@ -13,4 +18,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -4,19 +4,6 @@
{% block title %}{% trans "Global settings" %}{% endblock %}
{% block content %}
<h1>{% trans "Global settings" %}</h1>
<ul class="nav nav-pills">
<li {% if "global.settings" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:global.settings' %}">
{% trans "General" %}
</a>
</li>
<li {% if "global.update" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:global.update' %}">
{% trans "Update check" %}
</a>
</li>
</ul>
{% block inner %}
{% endblock %}
{% endblock %}

View File

@@ -3,13 +3,18 @@
{% load bootstrap3 %}
{% block inner %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Update check results" %}</legend>
</div>
{% if not gs.settings.update_check_perform %}
<div class="panel-body">
<div class="alert alert-warning">
{% trans "Update checks are disabled." %}
</div>
</div>
{% elif not gs.settings.update_check_last %}
<div class="panel-body">
<div class="alert alert-info">
{% trans "No update check has been performed yet since the last update of this installation. Update checks are performed on a daily basis if your cronjob is set up properly." %}
</div>
@@ -21,7 +26,9 @@
</button>
</p>
</form>
</div>
{% elif "error" in gs.settings.update_check_result %}
<div class="panel-body">
<div class="alert alert-danger">
{% trans "The last update check was not successful." %}
{% if gs.settings.update_check_result.error == "http_error" %}
@@ -40,18 +47,19 @@
</button>
</p>
</form>
</div>
{% else %}
<div class="panel-body">
<form action="" method="post">
{% csrf_token %}
<p>
{% blocktrans trimmed with date=gs.settings.update_check_last|date:"SHORT_DATETIME_FORMAT" %}
Last updated: {{ date }}
{% endblocktrans %}
<button type="submit" name="trigger" value="1" class="btn btn-default btn-xs">
{% trans "Check for updates now" %}
</button>
</p>
</form>
</div>
<div class="table-responsive">
<table class="table table-condensed">
<thead>
@@ -76,15 +84,19 @@
</fieldset>
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Update check settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_form_errors form %}
{% bootstrap_form form layout='horizontal' %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</div>
</fieldset>
</form>
{% endblock %}

View File

@@ -3,17 +3,21 @@
{% load bootstrap3 %}
{% load formset_tags %}
{% block inside %}
<p>
<div class="panel panel-default">
<div class="panel-body">
{% blocktrans trimmed %}
With add-ons, you can specify products that can be bought as an addition to this product. For example, if
With add-ons, you can specify products that can be bought as an addition to this product. For example,
if
you host a conference with a base conference ticket and a number of workshops, you could define the
workshops as add-ons to the conference ticket. With this configuration, the workshops cannot be bought
on their own but only in combination with a conference ticket. You can here specify categories of products
on their own but only in combination with a conference ticket. You can here specify categories of
products
that can be used as add-ons to this product. You can also specify the minimum and maximum number of
add-ons of the given category that can or need to be chosen. The user can buy every add-on from the
category at most once. If an add-on product has multiple variations, only one of them can be bought.
{% endblocktrans %}
</p>
</div>
</div>
<form class="form-horizontal branches" method="post" action="">
{% csrf_token %}
<div class="formset" data-formset data-formset-prefix="{{ formset.prefix }}">

View File

@@ -3,7 +3,11 @@
{% block title %}{{ object.name }} :: {% trans "Product" %}{% endblock %}
{% block content %}
{% if object.id %}
<h1>{% trans "Modify product:" %} {{ object.name }}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Modify product:" %} {{ object.name }}</h1>
</div>
<div class="panel-body">
<ul class="nav nav-pills">
<li {% if "event.item" == url_name %}class="active"{% endif %}>
<a href="{% url 'control:event.item' organizer=request.event.organizer.slug event=request.event.slug item=object.id %}">
@@ -23,14 +27,11 @@
</a>
</li>
</ul>
{% else %}
<h1>{% trans "Create product" %}</h1>
<p>{% blocktrans trimmed %}
You will be able to adjust further settings in the next step.
{% endblocktrans %}</p>
</div>
</div>
{% endif %}
{% if object.id and not object.quotas.exists %}
<div class="alert alert-warning">
<div class="alert 1alert-warning">
{% blocktrans trimmed %}
Please note that your product will <strong>not</strong> be available for sale until you have added your
item to an existing or newly created quota.

View File

@@ -1,14 +1,20 @@
{% extends "pretixcontrol/item/base.html" %}
{% load i18n %}
{% load bootstrap3 %}
{% block inside %}
{% load static %}
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/hidequota.js" %}"></script>
{% block inside %}
<script type="text/javascript" src="{% static "pretixcontrol/js/ui/hidequota.js" %}"></script>
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "General information" %}</legend>
</div>
<div class="panel-body">
<p>{% blocktrans trimmed %}
You will be able to adjust further settings in the next step.
{% endblocktrans %}</p>
{% bootstrap_field form.name layout="control" %}
<div class="internal-name-wrapper">
{% bootstrap_field form.internal_name layout="control" %}
@@ -17,10 +23,14 @@
{% bootstrap_field form.has_variations layout="control" %}
{% bootstrap_field form.category layout="control" %}
{% bootstrap_field form.admission layout="control" %}
</div>
</fieldset>
{% if form.quota_option %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Quota settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.quota_option layout="control" %}
<div id="existing-quota-group">
{% bootstrap_field form.quota_add_existing layout="control" %}
@@ -29,12 +39,17 @@
{% bootstrap_field form.quota_add_new_name layout="control" %}
{% bootstrap_field form.quota_add_new_size layout="control" %}
</div>
</div>
</fieldset>
{% endif %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Price settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.default_price layout="control" %}
{% bootstrap_field form.tax_rule layout="control" %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -6,8 +6,11 @@
{% csrf_token %}
<div class="row">
<div class="col-xs-12 col-lg-10">
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "General information" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.name layout="control" %}
<div class="internal-name-wrapper">
{% bootstrap_field form.internal_name layout="control" %}
@@ -17,15 +20,23 @@
{% bootstrap_field form.admission layout="control" %}
{% bootstrap_field form.description layout="control" %}
{% bootstrap_field form.picture layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Price settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.default_price addon_after=request.event.currency layout="control" %}
{% bootstrap_field form.tax_rule layout="control" %}
{% bootstrap_field form.free_price layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Availability" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.available_from layout="control" %}
{% bootstrap_field form.available_until layout="control" %}
{% bootstrap_field form.max_per_order layout="control" %}
@@ -33,18 +44,32 @@
{% bootstrap_field form.require_voucher layout="control" %}
{% bootstrap_field form.hide_without_voucher layout="control" %}
{% bootstrap_field form.allow_cancel layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Check-in" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.checkin_attention layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Additional settings" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.original_price addon_after=request.event.currency layout="control" %}
{% for f in plugin_forms %}
{% bootstrap_form f layout="control" %}
{% endfor %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</div>
<div class="col-xs-12 col-lg-2">
<div class="panel panel-default">
@@ -57,10 +82,5 @@
</div>
</div>
</div>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
{% endblock %}

View File

@@ -2,14 +2,17 @@
{% load i18n %}
{% block title %}{% trans "Product categories" %}{% endblock %}
{% block inside %}
<h1>{% trans "Product categories" %}</h1>
<p>
{% blocktrans trimmed %}
You can use categories to group multiple products together in an organized way.
{% endblocktrans %}
</p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Product categories" %}</h1>
</div>
<div class="panel-body">
{% trans "You can use categories to group multiple products together in an organized way." %}
</div>
</div>
<div class="panel panel-default">
{% if categories|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
You haven't created any categories yet.
@@ -20,10 +23,11 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new category" %}</a>
</div>
{% else %}
<p>
<a href="{% url "control:event.items.categories.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new category" %}
<div class="panel-body">
<a href="{% url "control:event.items.categories.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new category" %}
</a>
</p>
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
@@ -37,21 +41,31 @@
{% for c in categories %}
<tr>
<td>
<strong><a href="{% url "control:event.items.categories.edit" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}">{{ c.name }}</a></strong>
<strong><a
href="{% url "control:event.items.categories.edit" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}">{{ c.name }}</a></strong>
</td>
<td>
<a href="{% url "control:event.items.categories.up" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}" class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.categories.down" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}" class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-down"></i></a>
<a href="{% url "control:event.items.categories.up" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}"
class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.categories.down" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}"
class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-down"></i></a>
</td>
<td class="text-right">
<a href="{% url "control:event.items.categories.edit" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.categories.delete" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.items.categories.edit" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.categories.delete" organizer=request.event.organizer.slug event=request.event.slug category=c.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -3,20 +3,28 @@
{% load bootstrap3 %}
{% block title %}{% trans "Product category" %}{% endblock %}
{% block inside %}
<h1>{% trans "Product category" %}</h1>
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
<div class="row">
<div class="col-xs-12{% if category %} col-lg-10{% endif %}">
<fieldset>
<legend>{% trans "General information" %}</legend>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Product category" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.name layout="control" %}
<div class="internal-name-wrapper">
{% bootstrap_field form.internal_name layout="control" %}
</div>
{% bootstrap_field form.description layout="control" %}
{% bootstrap_field form.is_addon layout="control" %}
</div>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</fieldset>
</div>
{% if category %}
@@ -32,10 +40,5 @@
</div>
{% endif %}
</div>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</form>
{% endblock %}

View File

@@ -3,14 +3,19 @@
{% load bootstrap3 %}
{% block title %}{% trans "Delete product category" %}{% endblock %}
{% block inside %}
<h1>{% trans "Delete product category" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Delete product category" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans trimmed with name=category.name %}
Are you sure you want to delete the category <strong>{{ name }}</strong>?
{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:event.items.categories" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
<a href="{% url "control:event.items.categories" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save">
@@ -18,4 +23,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -2,16 +2,17 @@
{% load i18n %}
{% block title %}{% trans "Products" %}{% endblock %}
{% block inside %}
<h1>{% trans "Products" %}</h1>
<p>
{% blocktrans trimmed %}
Below, you find a list of all available products. You can click on a product name to inspect and change
product details. You can also use the buttons on the right to change the order of products within a
give category.
{% endblocktrans %}
</p>
<div class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Products" %}</legend>
</div>
<div class="panel-body">
{% trans "Products are everything that you sell: Different ticket price categories, additional merchandise items, or parts of your event that you sell individually." %}
</div>
</div>
<div class="panel panel-default">
{% if items|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
You haven't created any products yet.
@@ -22,10 +23,10 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new product" %}</a>
</div>
{% else %}
<p>
<div class="panel-body">
<a href="{% url "control:event.items.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new product" %}</a>
</p>
</div>
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
@@ -54,35 +55,46 @@
</td>
<td>
{% if i.available_from or i.available_until %}
<span class="fa fa-clock-o fa-fw text-muted" data-toggle="tooltip" title="{% trans "Only available in a limited timeframe" %}">
<span class="fa fa-clock-o fa-fw text-muted" data-toggle="tooltip"
title="{% trans "Only available in a limited timeframe" %}">
</span>
{% endif %}
</td>
<td>
{% if i.admission %}
<span class="fa fa-user fa-fw text-muted" data-toggle="tooltip" title="{% trans "Admission ticket" %}"></span>
<span class="fa fa-user fa-fw text-muted" data-toggle="tooltip"
title="{% trans "Admission ticket" %}"></span>
{% endif %}
</td>
<td>
{% if i.var_count %}
<span class="fa fa-list-ul fa-fw text-muted" data-toggle="tooltip" title="{% trans "Product with variations" %}"></span>
<span class="fa fa-list-ul fa-fw text-muted" data-toggle="tooltip"
title="{% trans "Product with variations" %}"></span>
{% endif %}
</td>
<td>
{% if i.hide_without_voucher %}
<span class="fa fa-ticket fa-fw text-muted" data-toggle="tooltip" title="{% trans "Only visible with a voucher" %}"></span>
<span class="fa fa-ticket fa-fw text-muted" data-toggle="tooltip"
title="{% trans "Only visible with a voucher" %}"></span>
{% elif i.require_voucher %}
<span class="fa fa-ticket fa-fw text-muted" data-toggle="tooltip" title="{% trans "Can only bought using a voucher" %}"></span>
<span class="fa fa-ticket fa-fw text-muted" data-toggle="tooltip"
title="{% trans "Can only bought using a voucher" %}"></span>
{% endif %}
</td>
<td>{% if i.category %}{{ i.category.name }}{% endif %}</td>
<td>
<a href="{% url "control:event.items.up" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}" class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.down" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}" class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-down"></i></a>
<a href="{% url "control:event.items.up" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}"
class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.down" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}"
class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-down"></i></a>
</td>
<td class="text-right">
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.delete" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.delete" organizer=request.event.organizer.slug event=request.event.slug item=i.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
@@ -90,6 +102,6 @@
</tbody>
</table>
</div>
{% include "pretixcontrol/pagination.html" %}
{% endif %}
</div>
{% endblock %}

View File

@@ -5,27 +5,59 @@
{% load formset_tags %}
{% block title %}{% blocktrans with name=question.question %}Question: {{ name }}{% endblocktrans %}{% endblock %}
{% block inside %}
<h1>
{% blocktrans with name=question.question %}Question: {{ name }}{% endblocktrans %}
<div class="row" id="question-stats">
<div class="col-lg-10 col-xs-12">
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a href="{% url "control:event.items.questions.edit" event=request.event.slug organizer=request.event.organizer.slug question=question.pk %}"
class="btn btn-default">
class="btn btn-default btn-sm pull-right">
<span class="fa fa-edit"></span>
{% trans "Edit question" %}
</a>
<h1 class="panel-title">
{% blocktrans with name=question.question %}Question: {{ name }}{% endblocktrans %}
</h1>
<form class="form-inline helper-display-inline" action="" method="get">
<p>
</div>
<div class="panel-body">
<dl class="dl-horizontal dl-left">
<dt>{% trans "Products" %}</dt>
<dd>{{ question.items.all|join:"<br>" }}</dd>
<dt>{% trans "Type" %}</dt>
<dd>{{ question.get_type_display }}</dd>
<dt>{% trans "Internal reference" %}</dt>
<dd>{{ question.identifier }}</dd>
<dt>{% trans "Answer required" %}</dt>
<dd>{% if question.required %}{% trans "Yes" %}{% else %}{% trans "No" %}{% endif %}</dd>
<dt>{% trans "Time of question" %}</dt>
<dd>{% if not question.ask_during_checkin %}{% trans "Ticket purchase" %}{% else %}
{% trans "Check-in" %}{% endif %}</dd>
</dl>
</div>
<div class="panel-footer">
<form class="row" action="" method="get">
<div class="col-md-5 col-xs-12">
<select name="status" class="form-control">
<option value="" {% if request.GET.status == "" %}selected="selected"{% endif %}>{% trans "All orders" %}</option>
<option value="p" {% if request.GET.status == "p" %}selected="selected"{% endif %}>{% trans "Paid" %}</option>
<option value="n" {% if request.GET.status == "n" %}selected="selected"{% endif %}>{% trans "Pending" %}</option>
<option value="np" {% if request.GET.status == "np" or "status" not in request.GET %}selected="selected"{% endif %}>{% trans "Pending or paid" %}</option>
<option value="o" {% if request.GET.status == "o" %}selected="selected"{% endif %}>{% trans "Pending (overdue)" %}</option>
<option value="e" {% if request.GET.status == "e" %}selected="selected"{% endif %}>{% trans "Expired" %}</option>
<option value="ne" {% if request.GET.status == "ne" %}selected="selected"{% endif %}>{% trans "Pending or expired" %}</option>
<option value="c" {% if request.GET.status == "c" %}selected="selected"{% endif %}>{% trans "Canceled" %}</option>
<option value="r" {% if request.GET.status == "r" %}selected="selected"{% endif %}>{% trans "Refunded" %}</option>
<option value=""
{% if request.GET.status == "" %}selected="selected"{% endif %}>{% trans "All orders" %}</option>
<option value="p"
{% if request.GET.status == "p" %}selected="selected"{% endif %}>{% trans "Paid" %}</option>
<option value="n"
{% if request.GET.status == "n" %}selected="selected"{% endif %}>{% trans "Pending" %}</option>
<option value="np"
{% if request.GET.status == "np" or "status" not in request.GET %}selected="selected"{% endif %}>{% trans "Pending or paid" %}</option>
<option value="o"
{% if request.GET.status == "o" %}selected="selected"{% endif %}>{% trans "Pending (overdue)" %}</option>
<option value="e"
{% if request.GET.status == "e" %}selected="selected"{% endif %}>{% trans "Expired" %}</option>
<option value="ne"
{% if request.GET.status == "ne" %}selected="selected"{% endif %}>{% trans "Pending or expired" %}</option>
<option value="c"
{% if request.GET.status == "c" %}selected="selected"{% endif %}>{% trans "Canceled" %}</option>
<option value="r"
{% if request.GET.status == "r" %}selected="selected"{% endif %}>{% trans "Refunded" %}</option>
</select>
</div>
<div class="col-md-5 col-xs-12">
<select name="item" class="form-control">
<option value="">{% trans "All products" %}</option>
{% for item in items %}
@@ -35,12 +67,16 @@
</option>
{% endfor %}
</select>
<button class="btn btn-primary" type="submit">{% trans "Filter" %}</button>
</p>
</div>
<div class="col-md-2 col-xs-12">
<button class="btn btn-block btn-primary" type="submit">{% trans "Filter" %}</button>
</div>
</form>
<div class="row" id="question-stats">
</div>
</div>
{% if not stats %}
<div class="empty-collection col-md-10 col-xs-12">
<div class="panel panel-default">
<div class="panel-body empty-collection">
<p>
{% blocktrans trimmed %}
No matching answers found.
@@ -52,17 +88,26 @@
</p>
<a href="{% url "control:event.items.questions.edit" event=request.event.slug organizer=request.event.organizer.slug question=question.pk %}"
class="btn btn-primary btn-lg"><i class="fa fa-edit"></i> {% trans "Edit question" %}</a>
class="btn btn-primary btn-lg"><i class="fa fa-edit"></i> {% trans "Edit question" %}
</a>
{% endif %}
</div>
</div>
{% else %}
<div class="col-md-5 col-xs-12">
<div class="row">
<div class="col-md-6 col-xs-12">
<div class="panel panel-default">
<div class="panel-body">
<div class="chart" id="question_chart" data-type="{{ question.type }}">
</div>
<script type="application/json" id="question-chart-data">{{ stats_json|escapejson }}</script>
<script type="application/json"
id="question-chart-data">{{ stats_json|escapejson }}</script>
</div>
<div class="col-md-5 col-xs-12">
</div>
</div>
<div class="col-md-6 col-xs-12">
<div class="panel panel-default">
<table class="table table-bordered table-hover">
<thead>
<tr>
@@ -74,7 +119,18 @@
{% for stat in stats %}
<tr>
<td>
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status={{ request.GET.status|default:"np" }}&item={{ request.GET.item }}&question={{ question.pk }}&answer={{ stat.alink|default:stat.answer|urlencode }}">
<a href="{% url "control:event.orders" event=request.event.slug organizer=request.event.organizer.slug %}?status=
{{ request.GET.status|default:"np" }}&item={{ request.GET.item }}&question={{ question.pk }}&answer=
{{ stat.alink|default:stat.answer|urlencode }}">
{{ stat.answer }}
</a>
</td>
@@ -84,7 +140,10 @@
</tbody>
</table>
</div>
</div>
</div>
{% endif %}
</div>
<div class="col-xs-12 col-lg-2">
<div class="panel panel-default">
<div class="panel-heading">

View File

@@ -3,18 +3,29 @@
{% load bootstrap3 %}
{% block title %}{% trans "Delete question" %}{% endblock %}
{% block inside %}
<h1>{% trans "Delete question" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Delete question" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to delete the question <strong>{{ question }}</strong>?{% endblocktrans %}</p>
<p>{% blocktrans %}Are you sure you want to delete the question <strong>{{ question }}</strong>
?{% endblocktrans %}</p>
{% if dependent|length > 0 %}
<p>{% blocktrans %}All answers to the question given by the buyers of the following products will be <strong>lost</strong>.{% endblocktrans %}</p>
<p>{% blocktrans %}All answers to the question given by the buyers of the following products will be
<strong>lost</strong>.{% endblocktrans %}</p>
<ul>
{% for item in dependent %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.pk %}">{{ item.name }}</a></li>
<li>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.pk %}">{{ item.name }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
<div class="form-group submit-group">
<a href="{% url "control:event.items.questions" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
<a href="{% url "control:event.items.questions" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save">
@@ -22,4 +33,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -10,26 +10,34 @@
{% endif %}
{% endblock %}
{% block inside %}
{% if question %}
<h1>{% blocktrans with name=question.question %}Question: {{ name }}{% endblocktrans %}</h1>
{% else %}
<h1>{% trans "Question" %}</h1>
{% endif %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
<fieldset class="panel panel-default">
<div class="panel-heading">
{% if question %}
<h1 class="panel-title">{% blocktrans with name=question.question %}Question:
{{ name }}{% endblocktrans %}</h1>
{% else %}
<h1 class="panel-title">{% trans "Question" %}</h1>
{% endif %}
</div>
<div class="panel-body">
{% bootstrap_field form.question layout="control" %}
{% bootstrap_field form.help_text layout="control" %}
{% bootstrap_field form.type layout="control" %}
{% bootstrap_field form.identifier layout="control" %}
{% bootstrap_field form.ask_during_checkin layout="control" %}
{% bootstrap_field form.required layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Apply to products" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.items layout="control" %}
</div>
</fieldset>
<div class="alert alert-info alert-required-boolean">
{% blocktrans trimmed %}
@@ -37,8 +45,11 @@
accepted. If you want to allow both options, do not make this field required.
{% endblocktrans %}
</div>
<fieldset id="answer-options">
<fieldset class="panel panel-default" id="answer-options">
<div class="panel-heading">
<legend>{% trans "Answer options" %}</legend>
</div>
<div class="panel-body">
<noscript>
<p>{% trans "Only applicable if you choose 'Choose one/multiple from a list' above." %}</p>
</noscript>
@@ -109,6 +120,7 @@
<i class="fa fa-plus"></i> {% trans "Add a new option" %}</button>
</p>
</div>
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -2,15 +2,20 @@
{% load i18n %}
{% block title %}{% trans "Questions" %}{% endblock %}
{% block inside %}
<h1>{% trans "Questions" %}</h1>
<p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Questions" %}</h1>
</div>
<div class="panel-body">
{% blocktrans trimmed %}
Questions allow your attendees to fill in additional data about their ticket. If you provide food, one
example might be to ask your users about dietary requirements.
{% endblocktrans %}
</p>
</div>
</div>
<div class="panel panel-default">
{% if questions|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
You haven't created any questions yet.
@@ -21,10 +26,11 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new question" %}</a>
</div>
{% else %}
<p>
<a href="{% url "control:event.items.questions.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new question" %}
<div class="panel-body">
<a href="{% url "control:event.items.questions.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new question" %}
</a>
</p>
</div>
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
@@ -53,23 +59,34 @@
<td>
<ul>
{% for item in q.items.all %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a></li>
<li>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a>
</li>
{% endfor %}
</ul>
</td>
<td>
<a href="{% url "control:event.items.questions.up" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}" class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.questions.down" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}" class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i class="fa fa-arrow-down"></i></a>
<a href="{% url "control:event.items.questions.up" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}"
class="btn btn-default btn-sm {% if forloop.counter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-up"></i></a>
<a href="{% url "control:event.items.questions.down" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}"
class="btn btn-default btn-sm {% if forloop.revcounter0 == 0 %}disabled{% endif %}"><i
class="fa fa-arrow-down"></i></a>
</td>
<td class="text-right">
<a href="{% url "control:event.items.questions.edit" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.questions.delete" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.items.questions.edit" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.questions.delete" organizer=request.event.organizer.slug event=request.event.slug question=q.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -5,36 +5,68 @@
{% load eventsignal %}
{% block title %}{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}{% endblock %}
{% block inside %}
<h1>
{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}
<div class="row" id="quota-stats">
<div class="col-lg-10 col-xs-12">
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
{% if 'can_change_items' in request.eventpermset %}
<a href="{% url "control:event.items.quotas.edit" event=request.event.slug organizer=request.event.organizer.slug quota=quota.pk %}"
class="btn btn-default">
class="btn btn-default btn-sm pull-right">
<span class="fa fa-edit"></span>
{% trans "Edit quota" %}
</a>
{% endif %}
<h1 class="panel-title">
{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}
<div class="clearfix"></div>
</h1>
</div>
<div class="panel-body">
<dl class="dl-horizontal dl-left">
<dt>{% trans "Size" %}</dt>
<dd>{{ quota.size|default_if_none:"Unlimited" }}</dd>
<dt>{% trans "Products" %}</dt>
<dd>{{ quota.get_items_display|join:"<br>" }}</dd>
{% if quota.subevent %}
<dt>{% trans "Date" context "subevent" %}</dt>
<dd>{{ quota.subevent }}</dd>
{% endif %}
</dl>
</div>
</div>
{% if quota.subevent %}
<p>
<span class="fa fa-calendar"></span> {{ quota.subevent.name }} {{ quota.subevent.get_date_range_display }}
<span class="fa fa-calendar"></span> {{ quota.subevent.name }}
{{ quota.subevent.get_date_range_display }}
</p>
{% endif %}
<div class="row" id="quota-stats">
<div class="col-md-5 col-xs-12">
<div class="col-md-6 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Usage overview" %}</legend>
</div>
<div class="panel-body">
<div class="chart" id="quota_chart">
</div>
<script type="application/json" id="quota-chart-data">{{ quota_chart_data|escapejson }}</script>
<script type="application/json"
id="quota-chart-data">{{ quota_chart_data|escapejson }}</script>
</div>
<div class="col-md-5 col-xs-12">
</div>
</div>
<div class="col-md-6 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Availability calculation" %}</legend>
</div>
<div class="panel-body">
<div class="row">
<div class="col-xs-9">{% trans "Total quota" %}</div>
<div class="col-xs-3 text-right">
{% if quota.size == None %}{% trans "Infinite" %}{% else %}{{ quota.size }}{% endif %}
{% if quota.size == None %}{% trans "Infinite" %}{% else %}
{{ quota.size }}{% endif %}
</div>
</div>
{% for row in quota_table_rows %}
@@ -65,6 +97,10 @@
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<div class="col-md-2 col-xs-12">
<div class="panel panel-default">
<div class="panel-heading">

View File

@@ -3,18 +3,29 @@
{% load bootstrap3 %}
{% block title %}{% trans "Delete quota" %}{% endblock %}
{% block inside %}
<h1>{% trans "Delete quota" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Delete quota" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to delete the quota <strong>{{ quota }}</strong>?{% endblocktrans %}</p>
<p>{% blocktrans %}Are you sure you want to delete the quota <strong>{{ quota }}</strong>
?{% endblocktrans %}</p>
{% if dependent|length > 0 %}
<p>{% blocktrans %}The following products might be no longer available for sale:{% endblocktrans %}</p>
<p>{% blocktrans %}The following products might be no longer available for
sale:{% endblocktrans %}</p>
<ul>
{% for item in dependent %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.pk %}">{{ item.name }}</a></li>
<li>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.pk %}">{{ item.name }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
<div class="form-group submit-group">
<a href="{% url "control:event.items.quotas" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default btn-cancel">
<a href="{% url "control:event.items.quotas" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save">
@@ -22,4 +33,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -9,31 +9,31 @@
{% endif %}
{% endblock %}
{% block inside %}
{% if question %}
<h1>{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
{% if quota %}
<h1 class="panel-title">{% blocktrans with name=quota.name %}Quota: {{ name }}{% endblocktrans %}</h1>
{% else %}
<h1>{% trans "Quota" %}</h1>
<h1 class="panel-title">{% trans "Quota" %}</h1>
{% endif %}
<form action="" method="post" class="form-horizontal">
</div>
<form action="" method="post" class="form-horizontal panel-body">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.name layout="control" %}
{% bootstrap_field form.size layout="control" %}
{% if form.subevent %}
{% bootstrap_field form.subevent layout="control" %}
{% endif %}
<legend>{% trans "Items" %}</legend>
<p>
{% bootstrap_field form.itemvars layout="control" %}
<p class="help-block">
{% blocktrans trimmed %}
Please select the products or product variations this quota should be applied to. If you apply two
quotas to the same product, it will only be available if
<strong>both</strong> quotas have capacity
Please select the products or product variations this quota should be applied to. If you apply
two quotas to the same product, it will only be available if <strong>both</strong> quotas have capacity
left.
{% endblocktrans %}
</p>
{% bootstrap_field form.itemvars layout="control" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
@@ -41,4 +41,5 @@
</button>
</div>
</form>
</div>
{% endblock %}

View File

@@ -2,8 +2,11 @@
{% load i18n %}
{% block title %}{% trans "Quotas" %}{% endblock %}
{% block inside %}
<h1>{% trans "Quotas" %}</h1>
<p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Quotas" %}</h1>
</div>
<div class="panel-body">
{% blocktrans trimmed %}
To make your products actually available, you also need quotas. Quotas define, how many instances of
your product pretix will sell. This way, you can configure whether your event can take an unlimited
@@ -11,14 +14,16 @@
to fulfil more complex requirements, e.g. if you want to limit the total number of tickets sold and the
number of a specific ticket type at the same time.
{% endblocktrans %}
</p>
</div>
</div>
<div class="panel panel-default">
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
<form class="panel-body form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
{% endif %}
{% if quotas|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% if request.GET.subevent %}
{% trans "Your search did not match any quotas." %}
@@ -33,10 +38,11 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i> {% trans "Create a new quota" %}</a>
</div>
{% else %}
<p>
<a href="{% url "control:event.items.quotas.add" organizer=request.event.organizer.slug event=request.event.slug %}" class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new quota" %}
<div class="panel-body">
<a href="{% url "control:event.items.quotas.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i> {% trans "Create a new quota" %}
</a>
</p>
</div>
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
@@ -60,7 +66,9 @@
<td>
<ul>
{% for item in q.items.all %}
<li><a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a></li>
<li>
<a href="{% url "control:event.item" organizer=request.event.organizer.slug event=request.event.slug item=item.id %}">{{ item }}</a>
</li>
{% endfor %}
</ul>
</td>
@@ -70,14 +78,19 @@
<td>{% if q.size == None %}Unlimited{% else %}{{ q.size }}{% endif %}</td>
<td>{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.availability %}</td>
<td class="text-right">
<a href="{% url "control:event.items.quotas.edit" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.quotas.delete" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.items.quotas.edit" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.items.quotas.delete" organizer=request.event.organizer.slug event=request.event.slug quota=q.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -3,10 +3,15 @@
{% load bootstrap3 %}
{% block title %}{% trans "Disable application" %}{% endblock %}
{% block content %}
<h1>{% trans "Disable application" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Disable application" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to disable the application <strong>{{ application }}</strong> permanently?{% endblocktrans %}</p>
<p>{% blocktrans %}Are you sure you want to disable the application <strong>{{ application }}</strong>
permanently?{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:user.settings.oauth.apps" %}" class="btn btn-default btn-cancel">
{% trans "Cancel" %}
@@ -16,4 +21,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,7 +3,10 @@
{% load bootstrap3 %}
{% block title %}{% trans "Your applications" %}{% endblock %}
{% block content %}
<h1>{% trans "Your applications" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Your applications" %}</h1>
</div>
{% if applications %}
<div class="table-responsive">
<table class="table table-condensed table-hover">
@@ -16,25 +19,30 @@
<tbody>
{% for application in applications %}
<tr>
<td><strong><a href="{% url "control:user.settings.oauth.app" pk=application.pk %}">{{ application.name }}</a></strong></td>
<td><strong><a
href="{% url "control:user.settings.oauth.app" pk=application.pk %}">{{ application.name }}</a></strong>
</td>
<td class="text-right">
<a href="{% url "control:user.settings.oauth.app" pk=application.pk %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:user.settings.oauth.app.roll" pk=application.pk %}" class="btn btn-default btn-sm"><i class="fa fa-repeat"></i></a>
<a href="{% url "control:user.settings.oauth.app.disable" pk=application.pk %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:user.settings.oauth.app" pk=application.pk %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:user.settings.oauth.app.roll" pk=application.pk %}"
class="btn btn-default btn-sm"><i class="fa fa-repeat"></i></a>
<a href="{% url "control:user.settings.oauth.app.disable" pk=application.pk %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<p>
<div class="panel-body">
<a class="btn btn-primary" href="{% url "control:user.settings.oauth.apps.register" %}">
<span class="fa fa-plus"></span>
{% trans "Create new application" %}
</a>
</p>
</div>
{% else %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
No applications registered yet.
@@ -47,4 +55,5 @@
</a>
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -3,7 +3,11 @@
{% load bootstrap3 %}
{% block title %}{% trans "Register a new application" %}{% endblock %}
{% block content %}
<h1>{% trans "Register a new application" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Register a new application" %}</h1>
</div>
<div class="panel-body">
<form class="form-horizontal" method="post" action="">
{% csrf_token %}
{% bootstrap_form form layout='control' %}
@@ -13,4 +17,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,10 +3,15 @@
{% load bootstrap3 %}
{% block title %}{% trans "Generate new application secret" %}{% endblock %}
{% block content %}
<h1>{% trans "Generate new application secret" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Generate new application secret" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to generate a new client secret for the application <strong>{{ application }}</strong>?{% endblocktrans %}</p>
<p>{% blocktrans %}Are you sure you want to generate a new client secret for the application
<strong>{{ application }}</strong>?{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:user.settings.oauth.apps" %}" class="btn btn-default btn-cancel">
{% trans "Cancel" %}
@@ -16,4 +21,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,7 +3,11 @@
{% load bootstrap3 %}
{% block title %}{% trans "Update an application" %}{% endblock %}
{% block content %}
<h1>{% trans "Update an application" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Update an application" %}</h1>
</div>
<div class="panel-body">
<form class="form-horizontal" method="post" action="">
{% csrf_token %}
{% bootstrap_form form layout='control' %}
@@ -13,4 +17,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,7 +3,11 @@
{% load bootstrap3 %}
{% block title %}{% trans "Revoke access" %}{% endblock %}
{% block content %}
<h1>{% trans "Revoke access" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Revoke access" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
<p>{% blocktrans %}Are you sure you want to revoke access to your account for the application <strong>{{ application }}</strong>?{% endblocktrans %}</p>
@@ -16,4 +20,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,12 +3,15 @@
{% load bootstrap3 %}
{% block title %}{% trans "Authorized applications" %}{% endblock %}
{% block content %}
<h1>{% trans "Authorized applications" %}</h1>
<p>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Authorized applications" %}</h1>
</div>
<div class="panel-body">
<a href="{% url "control:user.settings.oauth.apps" %}" class="btn btn-default">
{% trans "Manage your own apps" %}
</a>
</p>
</div>
{% if tokens %}
<div class="table-responsive">
<table class="table table-condensed table-hover table-quotas">
@@ -54,7 +57,7 @@
</table>
</div>
{% else %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
No applications have access to your pretix account.
@@ -62,4 +65,5 @@
</p>
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -4,9 +4,13 @@
{% trans "Cancel order" %}
{% endblock %}
{% block content %}
<h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">
{% trans "Cancel order" %}
</h1>
</div>
<div class="panel-body">
<p>{% blocktrans trimmed %}
Do you really want to cancel this order? You cannot revert this action.
{% endblocktrans %}</p>
@@ -35,4 +39,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -7,27 +7,33 @@
{% endblocktrans %}
{% endblock %}
{% block content %}
<h1>
{% blocktrans trimmed with code=order.code %}
Change order: {{ code }}
{% endblocktrans %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% blocktrans trimmed with code=order.code %}
Change order: {{ code }}
{% endblocktrans %}
</h1>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
You can use this tool to change the ordered products or to partially cancel the order. Please keep
in mind that changing an order can have several implications, e.g. the payment method fee might change or
in mind that changing an order can have several implications, e.g. the payment method fee might
change or
additional questions can be added to the order that need to be answered by the user.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
The user will receive a notification about the change but in the case of new required questions, the user
The user will receive a notification about the change but in the case of new required questions, the
user
will not be forced to answer them.
{% endblocktrans %}
</p>
@@ -38,18 +44,23 @@
</p>
<p>
{% blocktrans trimmed %}
If you chose "split into new order" for multiple positions, they will be all split in one second order
If you chose "split into new order" for multiple positions, they will be all split in one second
order
together, not multiple orders.
{% endblocktrans %}
</p>
<div class="alert alert-warning"><strong>
{% blocktrans trimmed %}
Please use this tool carefully. Changes you make here are not reversible. Also, if you change an order
manually, not all constraints (e.g. on required add-ons) will be checked. Therefore, you might construct
Please use this tool carefully. Changes you make here are not reversible. Also, if you change an
order
manually, not all constraints (e.g. on required add-ons) will be checked. Therefore, you might
construct
an order that would not be able to exist otherwise.
In most cases it is easier to cancel the order completely and create a new one.
{% endblocktrans %}
</strong></div>
</div>
</div>
<form method="post" href="">
{% csrf_token %}
{% for position in positions %}

View File

@@ -5,19 +5,22 @@
{% trans "Change contact information" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Change contact information" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Change contact information" %}
</h1>
</div>
<div class="panel-body">
<form method="post" class="form-horizontal" href="">
{% csrf_token %}
<input type="hidden" name="status" value="c" />
<input type="hidden" name="status" value="c"/>
{% bootstrap_form form layout='horizontal' %}
<div class="form-group submit-group">
<a class="btn btn-default btn-lg"
@@ -30,4 +33,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -5,15 +5,19 @@
{% trans "Change locale information" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Change locale information" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Change locale information" %}
</h1>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
This language will be used whenever emails are sent to the users.
@@ -35,4 +39,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -5,24 +5,29 @@
{% trans "Change contact information" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Change order information" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Change order information" %}
</h1>
</div>
</div>
<form method="post" class="form-horizontal" href="" enctype="multipart/form-data">
{% csrf_token %}
<div class="panel-group" id="questions_accordion">
<div class="" id="questions_accordion">
{% if request.event.settings.invoice_address_asked or order.invoice_address or request.event.settings.invoice_name_required %}
<details class="panel panel-default" open>
<summary class="panel-heading">
<h4 class="panel-title">
<strong>{% trans "Invoice information" %} {% if not request.event.settings.invoice_address_required %}
<strong>{% trans "Invoice information" %}
{% if not request.event.settings.invoice_address_required %}
{% trans "(optional)" %}
{% endif %}</strong>
<i class="fa fa-angle-down collapse-indicator"></i>

View File

@@ -5,19 +5,22 @@
{% trans "Extend payment term" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Extend payment term" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Extend payment term" %}
</h1>
</div>
<div class="panel-body">
<form method="post" class="form-horizontal" href="">
{% csrf_token %}
<input type="hidden" name="status" value="c" />
<input type="hidden" name="status" value="c"/>
{% bootstrap_form form layout='horizontal' %}
<div class="form-group submit-group">
<a class="btn btn-default btn-lg"
@@ -30,4 +33,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -12,6 +12,22 @@
{% endblock %}
{% block content %}
{% blocktrans asvar s_taxes %}taxes{% endblocktrans %}
{% if order.is_expired_by_time %}
<form action="{% url "control:event.order.transition" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}"
method="post">
{% csrf_token %}
<div class="alert alert-info">
<button name="status" value="e" class="btn btn-default pull-right">{% trans "Expire order" %}</button>
{% trans "The payment for this order is overdue, but you have configured not to expire orders automatically. To free quota capacity, you can mark it as expired manually." %}
<div class="clearfix"></div>
</div>
</form>
{% endif %}
<div class="row">
<div class="col-xs-12 col-lg-10">
<div class="panel items">
<div class="panel-body">
<h1>
{% blocktrans trimmed with code=order.code %}
Order details: {{ code }}
@@ -54,27 +70,6 @@
</div>
</form>
{% endif %}
{% if order.is_expired_by_time %}
<form action="{% url "control:event.order.transition" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}"
method="post">
{% csrf_token %}
<div class="alert alert-info">
<button name="status" value="e" class="btn btn-default pull-right">{% trans "Expire order" %}</button>
{% trans "The payment for this order is overdue, but you have configured not to expire orders automatically. To free quota capacity, you can mark it as expired manually." %}
<div class="clearfix"></div>
</div>
</form>
{% endif %}
<div class="row">
<div class="col-xs-12 col-lg-10">
<div class="panel panel-primary items">
<div class="panel-heading">
<h3 class="panel-title">
{% trans "Order details" %}
</h3>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
<dt>{% trans "Order code" %}</dt>
<dd>{{ order.code }}</dd>

View File

@@ -3,16 +3,18 @@
{% load bootstrap3 %}
{% block title %}{% trans "Email history" %}{% endblock %}
{% block content %}
<h1>
{% trans "Email history" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Email history" %}
</h1>
<div>
</div>
<ul class="list-group">
{% for log in logs %}
<li class="list-group-item logentry">
@@ -55,6 +57,8 @@
</li>
{% endfor %}
</ul>
</div>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
</div>
{% endblock %}

View File

@@ -5,22 +5,26 @@
{% trans "Mark order as paid" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Mark order as paid" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Mark order as paid" %}
</h1>
</div>
<div class="panel-body">
<form method="post" class="form-horizontal" href="">
{% csrf_token %}
<p>{% blocktrans trimmed %}
Do you really want to mark this order as paid?
{% endblocktrans %}</p>
<input type="hidden" name="status" value="p" />
<input type="hidden" name="status" value="p"/>
{% bootstrap_form form layout='horizontal' horizontal_label_class='sr-only' horizontal_field_class='col-md-12' %}
<div class="form-group submit-group">
<a class="btn btn-default btn-lg"
@@ -33,4 +37,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -4,15 +4,19 @@
{% trans "Refund order" %}
{% endblock %}
{% block content %}
<h1>
{% trans "Refund order" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Refund order" %}
</h1>
</div>
<div class="panel-body">
<form method="post" href="">
<p>{% blocktrans trimmed %}
Do you really want to refund this order? You cannot revert this action.
@@ -21,7 +25,7 @@
{{ payment|safe }}
{% csrf_token %}
<input type="hidden" name="status" value="r" />
<input type="hidden" name="status" value="r"/>
<div class="row checkout-button-row">
<div class="col-md-4">
<a class="btn btn-block btn-default btn-lg"
@@ -37,4 +41,6 @@
<div class="clearfix"></div>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,35 +3,24 @@
{% load bootstrap3 %}
{% block title %}{% trans "Send email" %}{% endblock %}
{% block content %}
<h1>
{% trans "Send email" %}
<a class="btn btn-link btn-lg"
<div class="panel panel-default panel-with-btn">
<div class="panel-heading">
<a class="btn btn-default btn-sm pull-right"
href="{% url "control:event.order" event=request.event.slug organizer=request.event.organizer.slug code=order.code %}">
{% blocktrans trimmed with order=order.code %}
Back to order {{ order }}
{% endblocktrans %}
</a>
<h1 class="panel-title">
{% trans "Send email" %}
</h1>
{% block inner %}
</div>
<div class="panel-body">
<form class="form-horizontal" method="post" action="">
{% csrf_token %}
{% bootstrap_field form.sendto layout='horizontal' %}
{% bootstrap_field form.subject layout='horizontal' %}
{% bootstrap_field form.message layout='horizontal' %}
{% if request.method == "POST" %}
<fieldset>
<legend>{% trans "E-mail preview" %}</legend>
<div class="tab-pane mail-preview-group">
<pre lang="" class="mail-preview">
{% for segment in preview_output %}
{% spaceless %}
{{ segment|linebreaksbr }}
{% endspaceless %}
{% endfor %}
</pre>
</div>
</fieldset>
{% endif %}
<div class="form-group submit-group">
<button type="submit" class="btn btn-default btn-save pull-left" name="action" value="preview">
{% trans "Preview email" %}
@@ -41,5 +30,24 @@
</button>
</div>
</form>
{% endblock %}
</div>
</div>
{% if request.method == "POST" %}
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "E-mail preview" %}</legend>
</div>
<div class="panel-body">
<div class="tab-pane mail-preview-group">
<pre lang="" class="mail-preview">
{% for segment in preview_output %}
{% spaceless %}
{{ segment|linebreaksbr }}
{% endspaceless %}
{% endfor %}
</pre>
</div>
</div>
</fieldset>
{% endif %}
{% endblock %}

View File

@@ -4,12 +4,11 @@
{% load order_overview %}
{% block title %}{% trans "Data export" %}{% endblock %}
{% block content %}
<h1>
{% trans "Data export" %}
{% if "identifier" in request.GET %}
<p class="text-right">
<a href="?" class="btn btn-default">{% trans "Show all" %}</a>
</p>
{% endif %}
</h1>
{% for e in exporters %}
<details class="panel panel-default" {% if "identifier" in request.GET %}open{% endif %}>
<summary class="panel-heading">
@@ -24,7 +23,7 @@
method="post" class="form-horizontal" data-asynctask data-asynctask-download
data-asynctask-long>
{% csrf_token %}
<input type="hidden" name="exporter" value="{{ e.identifier }}" />
<input type="hidden" name="exporter" value="{{ e.identifier }}"/>
{% bootstrap_form e.form layout='horizontal' %}
<button class="btn btn-primary pull-right" type="submit">
<span class="icon icon-upload"></span> {% trans "Start export" %}

View File

@@ -6,9 +6,9 @@
{% load bootstrap3 %}
{% block title %}{% trans "Orders" %}{% endblock %}
{% block content %}
<h1>{% trans "Orders" %}</h1>
<div class="panel panel-default">
{% if not filter_form.filtered and orders|length == 0 %}
<div class="empty-collection">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
Nobody ordered a ticket yet.
@@ -27,11 +27,13 @@
{% endif %}
</div>
{% else %}
<div class="panel-body">
<div class="row filter-form">
<form class="col-md-2 col-xs-12"
action="{% url "control:event.orders.go" event=request.event.slug organizer=request.event.organizer.slug %}">
<div class="input-group">
<input type="text" name="code" class="form-control" placeholder="{% trans "Order code" %}" autofocus>
<input type="text" name="code" class="form-control" placeholder="{% trans "Order code" %}"
autofocus>
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">{% trans "Go!" %}</button>
</span>
@@ -78,35 +80,45 @@
{% blocktrans trimmed with question=filter_form.cleaned_data.question.question %}
List filtered by answers to question "{{ question }}".
{% endblocktrans %}
<a href="?{% url_replace request 'question' '' 'answer' ''%}" class="text-muted">
<a href="?{% url_replace request 'question' '' 'answer' '' %}" class="text-muted">
<span class="fa fa-times"></span>
{% trans "Remove filter" %}
</a>
</p>
{% endif %}
</div>
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
<tr>
<th>{% trans "Order code" %}
<a href="?{% url_replace request 'ordering' '-code' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'code' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' 'code' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "User" %}
<a href="?{% url_replace request 'ordering' '-email' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'email' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' '-email' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'email' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>{% trans "Order date" %}
<a href="?{% url_replace request 'ordering' '-datetime' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'datetime' %}"><i class="fa fa-caret-up"></i></a>
<a href="?{% url_replace request 'ordering' 'datetime' %}"><i
class="fa fa-caret-up"></i></a>
</th>
<th class="text-right">{% trans "Order total" %}
<a href="?{% url_replace request 'ordering' '-total' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'total' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' '-total' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'total' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th class="text-right">{% trans "Positions" %}
<a href="?{% url_replace request 'ordering' '-pcnt' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'pcnt' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' 'pcnt' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th class="text-right">{% trans "Status" %}
<a href="?{% url_replace request 'ordering' '-status' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'status' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' '-status' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'status' %}"><i class="fa fa-caret-up"></i></a>
</th>
</tr>
</thead>
<tbody>
@@ -135,6 +147,9 @@
</tbody>
</table>
</div>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
{% endif %}
</div>
{% endblock %}

View File

@@ -3,27 +3,38 @@
{% load order_overview %}
{% block title %}{% trans "Sales overview" %}{% endblock %}
{% block content %}
<div class="panel panel-default panel-with-button">
<div class="panel-heading">
{% url "control:event.orders" organizer=request.event.organizer.slug event=request.event.slug as listurl %}
<div class="pull-right">
<div class="btn-group" role="group" id="sumtoggle">
<button type="button" data-target=".count" class="btn btn-default active">{% trans "Sales" %}</button>
<button type="button" data-target=".sum-gross" class="btn btn-default">{% trans "Revenue (gross)" %}</button>
<button type="button" data-target=".sum-net" class="btn btn-default">{% trans "Revenue (net)" %}</button>
<button type="button" data-target=".count"
class="btn btn-sm btn-default active">{% trans "Sales" %}</button>
<button type="button" data-target=".sum-gross"
class="btn btn-sm btn-default">{% trans "Revenue (gross)" %}</button>
<button type="button" data-target=".sum-net"
class="btn btn-sm btn-default">{% trans "Revenue (net)" %}</button>
</div>
</div>
<h1>{% trans "Order overview" %}</h1>
<h1 class="panel-title">{% trans "Order overview" %}</h1>
<div class="clearfix"></div>
</div>
{% if request.event.has_subevents %}
<form class="form-inline helper-display-inline" action="" method="get">
<form class="panel-body form-inline helper-display-inline" action="" method="get">
{% include "pretixcontrol/event/fragment_subevent_choice_simple.html" %}
</form>
{% endif %}
{% if subevent_warning %}
<div class="panel-body">
<div class="alert alert-info">
{% blocktrans trimmed context "subevent" %}
If you select a single date, payment method fees will not be listed here as it might not be clear which
If you select a single date, payment method fees will not be listed here as it might not be
clear
which
date they belong to.
{% endblocktrans %}
</div>
</div>
{% endif %}
<div class="table-responsive">
<table class="table table-condensed table-hover table-product-overview">
@@ -119,4 +130,5 @@
</tfoot>
</table>
</div>
</div>
{% endblock %}

View File

@@ -3,44 +3,6 @@
{% load bootstrap3 %}
{% block title %}{% trans "Organizer" %}{% endblock %}
{% block content %}
<h1>
{% blocktrans with name=organizer.name %}Organizer: {{ name }}{% endblocktrans %}
{% if 'can_change_organizer_settings' in request.orgapermset %}
<a href="{% url "control:organizer.edit" organizer=organizer.slug %}"
class="btn btn-default hidden-print">
<span class="fa fa-edit"></span>
{% trans "Edit" %}
</a>
{% endif %}
</h1>
<ul class="nav nav-pills hidden-print">
<li {% if "organizer" == url_name %}class="active"{% endif %}>
<a href="{% url "control:organizer" organizer=organizer.slug %}">
{% trans "Events" %}
</a>
</li>
{% if 'can_change_teams' in request.orgapermset %}
<li {% if "organizer.team" in url_name %}class="active"{% endif %}>
<a href="{% url "control:organizer.teams" organizer=organizer.slug %}">
{% trans "Teams" %}
</a>
</li>
{% endif %}
{% if 'can_change_organizer_settings' in request.orgapermset %}
<li {% if "organizer.display" in url_name %}class="active"{% endif %}>
<a href="{% url "control:organizer.display" organizer=organizer.slug %}">
{% trans "Display" %}
</a>
</li>
{% endif %}
{% for nav in nav_organizer %}
<li {% if nav.active %}class="active"{% endif %}>
<a href="{{ nav.url }}">
{{ nav.label }}
</a>
</li>
{% endfor %}
</ul>
{% block inner %}
{% endblock %}

View File

@@ -3,19 +3,22 @@
{% load bootstrap3 %}
{% block title %}{% trans "Create a new organizer" %}{% endblock %}
{% block content %}
<h1>{% trans "Create a new organizer" %}</h1>
<form action="" method="post" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Create a new organizer" %}</h1>
</div>
<div class="panel-body">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.name layout="horizontal" %}
{% bootstrap_field form.slug layout="horizontal" %}
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">
{% trans "Save" %}
</button>
</div>
</div>
</div>
</form>
{% endblock %}

View File

@@ -2,11 +2,18 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<div class="panel panel-default">
{% if events|length == 0 %}
<p>
<div class="panel-body empty-collection">
<em>{% trans "You currently do not have access to any events." %}</em>
</p>
</div>
{% else %}
<div class="panel-body">
<a href="{% url "control:events.add" %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create a new event" %}
</a>
</div>
<table class="table table-condensed table-hover">
<thead>
<tr>
@@ -27,8 +34,5 @@
</tbody>
</table>
{% endif %}
<a href="{% url "control:events.add" %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create a new event" %}
</a>
</div>
{% endblock %}

View File

@@ -4,17 +4,24 @@
{% block inner %}
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Organizer page" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_form_errors form %}
{% bootstrap_field form.locales layout="control" %}
{% bootstrap_field form.organizer_logo_image layout="control" %}
{% bootstrap_field form.organizer_homepage_text layout="control" %}
{% bootstrap_field form.event_list_type layout="control" %}
{% bootstrap_field form.organizer_link_back layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel-default panel">
<div class="panel-heading">
<legend>{% trans "Shop design" %}</legend>
</div>
<div class="panel-body">
<p class="help-block">
{% blocktrans trimmed %}
These settings will be used for the organizer page as well as for the default settings

View File

@@ -4,29 +4,41 @@
{% load formset_tags %}
{% block title %}{% trans "Organizer" %}{% endblock %}
{% block content %}
<h1>{% trans "Organizer" %}</h1>
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "General information" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_form_errors form %}
{% bootstrap_field form.name layout="control" %}
{% bootstrap_field form.slug layout="control" %}
{% if form.domain %}
{% bootstrap_field form.domain layout="control" %}
{% endif %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Other" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_form_errors sform %}
{% bootstrap_field sform.organizer_info_text layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Event metadata (advanced)" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
You can here define a set of metadata properties (i.e. variables) that you can later set for your
events and re-use in places like ticket layouts. This is an useful timesaver if you create lots and
You can here define a set of metadata properties (i.e. variables) that you can later set for
your
events and re-use in places like ticket layouts. This is an useful timesaver if you create lots
and
lots of events.
{% endblocktrans %}
</p>
@@ -79,6 +91,7 @@
<i class="fa fa-plus"></i> {% trans "Add property" %}</button>
</p>
</div>
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -5,9 +5,14 @@
{% load eventurl %}
{% block title %}{% trans "Organizers" %}{% endblock %}
{% block content %}
<h1>{% trans "Organizers" %}</h1>
<p>{% trans "The list below shows all organizer accounts you have administrative access to." %}</p>
<form class="row filter-form" action="" method="get">
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Organizers" %}</h1>
</div>
<div class="panel-body">{% trans "The list below shows all organizer accounts you have administrative access to." %}</div>
</div>
<div class="panel panel-default">
<form class="row filter-form panel-body" action="" method="get">
<div class="col-md-10 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query layout='inline' %}
</div>
@@ -21,12 +26,12 @@
</div>
</form>
{% if staff_session %}
<p>
<div class="panel-body">
<a href="{% url "control:organizers.add" %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create a new organizer" %}
</a>
</p>
</div>
{% endif %}
<table class="table table-condensed table-hover">
<thead>
@@ -54,5 +59,8 @@
{% endfor %}
</tbody>
</table>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
</div>
{% endblock %}

View File

@@ -2,11 +2,17 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<h2>{% trans "Delete team:" %} {{ team.name }}</h2>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-titlte">{% trans "Delete team:" %} {{ team.name }}</h2>
</div>
<div class="panel-body">
{% if not possible %}
<p>{% blocktrans %}You cannot delete the team because there would be no one left who could change team permissions afterwards.{% endblocktrans %}</p>
<p>{% blocktrans %}You cannot delete the team because there would be no one left who could change team
permissions afterwards.{% endblocktrans %}</p>
<div class="form-group submit-group">
<a href="{% url "control:organizer.teams" organizer=request.organizer.slug %}" class="btn btn-default btn-cancel">
<a href="{% url "control:organizer.teams" organizer=request.organizer.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<div class="clearfix"></div>
@@ -17,7 +23,8 @@
<p>{% blocktrans %}Are you sure you want to delete the team?{% endblocktrans %}
</p>
<div class="form-group submit-group">
<a href="{% url "control:organizer.teams" organizer=request.organizer.slug%}" class="btn btn-default btn-cancel">
<a href="{% url "control:organizer.teams" organizer=request.organizer.slug %}"
class="btn btn-default btn-cancel">
{% trans "Cancel" %}
</a>
<button type="submit" class="btn btn-danger btn-save">
@@ -26,4 +33,6 @@
</div>
</form>
{% endif %}
</div>
</div>
{% endblock %}

View File

@@ -2,31 +2,43 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset class="panel panel-default">
<div class="panel-heading">
{% if team %}
<h2>{% trans "Team:" %} {{ team.name }}</h2>
<h2 class="panel-title">{% trans "Team:" %} {{ team.name }}</h2>
{% else %}
<h2>{% trans "Create a new team" %}</h2>
<h2 class="panel-title">{% trans "Create a new team" %}</h2>
{% endif %}
</div>
<div class="panel-body">
{% if not team %}
<p>
{% blocktrans trimmed %}
You will be able to add team members in the next step.
{% endblocktrans %}
</p>
{% endif %}
<form class="form-horizontal" action="" method="post">
{% csrf_token %}
{% bootstrap_form_errors form %}
<fieldset>
<legend>{% trans "General information" %}</legend>
{% bootstrap_field form.name layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Organizer permissions" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.can_create_events layout="control" %}
{% bootstrap_field form.can_change_teams layout="control" %}
{% bootstrap_field form.can_change_organizer_settings layout="control" %}
</div>
</fieldset>
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Event permissions" %}</legend>
</div>
<div class="panel-body">
{% bootstrap_field form.all_events layout="control" %}
{% bootstrap_field form.limit_events layout="control" %}
@@ -36,6 +48,7 @@
{% bootstrap_field form.can_change_orders layout="control" %}
{% bootstrap_field form.can_view_vouchers layout="control" %}
{% bootstrap_field form.can_change_vouchers layout="control" %}
</div>
</fieldset>
<div class="form-group submit-group">
<button type="submit" class="btn btn-primary btn-save">

View File

@@ -2,18 +2,24 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<h2>
{% trans "Team:" %} {{ team.name }}
<div class="panel panel-default">
<div class="panel-heading">
<a href="{% url "control:organizer.team.edit" organizer=organizer.slug team=team.pk %}"
class="btn btn-default">
class="btn btn-default pull-right">
<span class="fa fa-edit"></span>
{% trans "Edit" %}
</a>
<h2 class="panel-title">
{% trans "Team:" %} {{ team.name }}
</h2>
<h3>{% trans "Team members" %}</h3>
</div>
</div>
<form action="" method="post">
{% csrf_token %}
<!-- Trick browsers into taking this as a default -->
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% trans "Team members" %}</h3>
</div>
<button type="submit" class="btn btn-primary btn-sm btn-block nearly-gone"></button>
<table class="table table-condensed table-hover">
<thead>
@@ -64,12 +70,7 @@
<tfoot>
<tr>
<td>
{% bootstrap_field add_form.user layout='inline' %}<br>
{% blocktrans trimmed %}
To add a new user, you can enter their email address here. If they already have a
pretix account, they will immediately be added to the event. Otherwise, they will
be sent an email with an invitation.
{% endblocktrans %}
{% bootstrap_field add_form.user layout='inline' %}
</td>
<td class="text-right">
<button type="submit" class="btn btn-primary btn-sm btn-block">
@@ -79,12 +80,23 @@
</tr>
</tfoot>
</table>
<div class="panel-footer">
{% blocktrans trimmed %}
To add a new user, you can enter their email address here. If they already have a
pretix account, they will immediately be added to the event. Otherwise, they will
be sent an email with an invitation.
{% endblocktrans %}
</div>
</div>
</form>
<h3>{% trans "API tokens" %}</h3>
<form action="" method="post">
{% csrf_token %}
<!-- Trick browsers into taking this as a default -->
<button type="submit" class="btn btn-primary btn-sm btn-block nearly-gone"></button>
<div class="panel-default panel">
<div class="panel-heading">
<h3 class="panel-title">{% trans "API tokens" %}</h3>
</div>
<table class="table table-condensed table-hover">
<thead>
<tr>
@@ -120,6 +132,7 @@
</tr>
</tfoot>
</table>
</div>
</form>
<div class="panel panel-default">
<div class="panel-heading">

View File

@@ -2,13 +2,13 @@
{% load i18n %}
{% load bootstrap3 %}
{% block inner %}
<p>
{% trans "The list below shows all teams that exist within this organizer." %}
</p>
<div class="panel panel-default">
<div class="panel-body">
<a href="{% url "control:organizer.team.add" organizer=request.organizer.slug %}" class="btn btn-default">
<span class="fa fa-plus"></span>
{% trans "Create a new team" %}
</a>
</div>
<table class="table table-condensed table-hover">
<thead>
<tr>
@@ -53,4 +53,5 @@
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}

View File

@@ -1,8 +1,8 @@
{% load i18n %}
{% load urlreplace %}
<nav class="text-center pagination-container">
<ul class="pagination">
{% if is_paginated %}
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a href="?{% url_replace request 'page' page_obj.previous_page_number %}">
@@ -12,7 +12,7 @@
{% endif %}
<li class="page-current"><a>
{% blocktrans trimmed with page=page_obj.number of=page_obj.paginator.num_pages count=page_obj.paginator.count %}
Page {{ page }} of {{ of }} ({{ count }} elements)
Page {{ page }} of {{ of }}
{% endblocktrans %}
</a></li>
{% if page_obj.has_next %}
@@ -22,27 +22,34 @@
</a>
</li>
{% endif %}
{% else %}
{% if page_obj.paginator.count > 1 %}
</ul>
{% endif %}
{% if page_obj.paginator.count > 0 %}
<ul class="pagination pagination-count">
<li class="page-current"><a>
{% blocktrans trimmed with count=page_obj.paginator.count %}
{{ count }} elements
{% endblocktrans %}
</a></li>
{% endif %}
{% endif %}
</ul>
{% if page_size %}
<div class="clearfix">
<small>
<ul class="pagination pagination-select">
<li class="page-current"><a>
{% trans "Show per page:" %}
</small>
</a></li>
<li>
<a href="?{% url_replace request "page_size" "25" "page" "1" %}">
{% if page_size == 25 %}<strong>{% endif %}25{% if page_size == 25 %}</strong>{% endif %}</a> |
{% if page_size == 25 %}<strong>{% endif %}25{% if page_size == 25 %}</strong>{% endif %}</a>
</li>
<li>
<a href="?{% url_replace request "page_size" "50" "page" "1" %}">
{% if page_size == 50 %}<strong>{% endif %}50{% if page_size == 50 %}</strong>{% endif %}</a> |
{% if page_size == 50 %}<strong>{% endif %}50{% if page_size == 50 %}</strong>{% endif %}</a>
</li>
<li>
<a href="?{% url_replace request "page_size" "100" "page" "1" %}">
{% if page_size == 100 %}<strong>{% endif %}100{% if page_size == 100 %}</strong>{% endif %}</a>
</div>
</li>
</ul>
{% endif %}
<div class="clearfix">
</div>
</nav>

View File

@@ -11,12 +11,6 @@
<link type="text/css" rel="stylesheet" href="{% url "control:pdf.css" organizer=request.organizer.slug event=request.event.slug %}">
{% endblock %}
{% block content %}
<h1>
{% trans "PDF Editor" %}
{% if title %}
<small>{{ title }}</small>
{% endif %}
</h1>
<script type="application/json" id="editor-data">
{{ layout|safe }}
@@ -27,25 +21,30 @@
<div class="panel-heading">
<div class="pull-right">
<div class="btn-group">
<button type="button" class="btn btn-default btn-xs" id="toolbox-source"
<button type="button" class="btn btn-default btn-sm" id="toolbox-source"
title="{% trans "Code" %}">
<span class="fa fa-code"></span>
</button>
<button type="button" class="btn btn-default btn-xs" id="toolbox-paste"
<button type="button" class="btn btn-default btn-sm" id="toolbox-paste"
title="{% trans "Paste" %}">
<span class="fa fa-paste"></span>
</button>
<button type="button" class="btn btn-default btn-xs" id="toolbox-undo"
<button type="button" class="btn btn-default btn-sm" id="toolbox-undo"
title="{% trans "Undo" %}">
<span class="fa fa-undo"></span>
</button>
<button type="button" class="btn btn-default btn-xs" id="toolbox-redo"
<button type="button" class="btn btn-default btn-sm" id="toolbox-redo"
title="{% trans "Redo" %}">
<span class="fa fa-repeat"></span>
</button>
</div>
</div>
{% trans "Editor" %}
<h1 class="panel-title">
{% trans "PDF Editor" %}
{% if title %}
<small>{{ title }}</small>
{% endif %}
</h1>
</div>
<div class="panel-body">
<div id="editor-canvas-area">

View File

@@ -6,7 +6,8 @@
{% load bootstrap3 %}
{% block title %}{% trans "Order search" %}{% endblock %}
{% block content %}
<h1>{% trans "Order search" %}</h1>
<div class="panel panel-default">
<div class="panel-body">
<form class="row filter-form" action="" method="get">
<div class="col-md-3 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query layout='inline' %}
@@ -29,6 +30,7 @@
</button>
</div>
</form>
</div>
<div class="table-responsive">
<table class="table table-condensed table-hover">
<thead>
@@ -44,7 +46,8 @@
<a href="?{% url_replace request 'ordering' 'email' %}"><i class="fa fa-caret-up"></i></a></th>
<th>{% trans "Order date" %}
<a href="?{% url_replace request 'ordering' '-datetime' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'datetime' %}"><i class="fa fa-caret-up"></i></a></th>
<a href="?{% url_replace request 'ordering' 'datetime' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th class="text-right">{% trans "Order total" %}
<a href="?{% url_replace request 'ordering' '-total' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'total' %}"><i class="fa fa-caret-up"></i></a></th>
@@ -84,5 +87,8 @@
</tbody>
</table>
</div>
<div class="panel-footer">
{% include "pretixcontrol/pagination_huge.html" %}
</div>
</div>
{% endblock %}

View File

@@ -4,20 +4,19 @@
{% load order_overview %}
{% block title %}{% trans "Data shredder" %}{% endblock %}
{% block content %}
<h1>
{% trans "Data shredder" %}
</h1>
<form action="{% url "control:event.shredder.shred" event=request.event.slug organizer=request.organizer.slug %}"
method="post" class="form-horizontal" data-asynctask>
{% csrf_token %}
<fieldset>
<fieldset class="panel-default panel">
<div class="panel-heading">
<legend>{% trans "Step 1: Download data" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
You are about to permamanently delete data from the server, even though you might be required to
keep
some of this data on file. You should therefore download the following file and store it in a safe
place:
keep some of this data on file. You should therefore download the following file and store it in a
safe place:
{% endblocktrans %}
</p>
<p>
@@ -25,27 +24,37 @@
{% trans "Download data" %}
</a>
</p>
</div>
</fieldset>
<fieldset>
<fieldset class="panel-default panel">
<div class="panel-heading">
<legend>{% trans "Step 2: Confirm download" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
In the downloaded file, there is a text file named "CONFIRM_CODE.txt" with a six-character code.
Please enter this code here to confirm that you successfully downloaded the file.
{% endblocktrans %}
</p>
<input type="text" class="form-control" name="confirm_code" required placeholder="{% trans "Confirmation code" %}">
<input type="text" class="form-control" name="confirm_code" required
placeholder="{% trans "Confirmation code" %}">
<br>
</fieldset>
<fieldset>
<fieldset class="panel-default panel">
<div class="panel-heading">
<legend>{% trans "Step 3: Confirm deletion" %}</legend>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed with event=request.event.name %}
Please re-check that you are fully certain that you want to delete the selected categories of data from the event <strong>{{ event }}</strong>.
Please re-check that you are fully certain that you want to delete the selected categories of
data from the event <strong>{{ event }}</strong>.
In this case, please enter your user password here:
{% endblocktrans %}
</p>
<input type="password" class="form-control" name="password" required placeholder="{% trans "Your password" %}">
<input type="password" class="form-control" name="password" required
placeholder="{% trans "Your password" %}">
</fieldset>
<input type="hidden" name="file" value="{{ file.pk }}">
<div class="form-group submit-group">

View File

@@ -4,38 +4,44 @@
{% load order_overview %}
{% block title %}{% trans "Data shredder" %}{% endblock %}
{% block content %}
<h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">
{% trans "Data shredder" %}
</h1>
</div>
<div class="panel-body">
<p>
{% blocktrans trimmed %}
This feature allows you to remove personal data from this event. You will first select what kind of data
you want to shred, then you are able to download the affected data and after you confirmed the download,
the data will be removed from the server's database. The data might still exist in backups for a limited
period of time.
This feature allows you to remove personal data from this event. You will first select what kind of
data you want to shred, then you are able to download the affected data and after you confirmed the
download, the data will be removed from the server's database. The data might still exist in backups for a
limited period of time.
{% endblocktrans %}
<strong>
{% blocktrans trimmed %}
Using this will not remove the orders for your event, it just scrubs them of data that can be linked
to individual persons.
Using this will not remove the orders for your event, it just scrubs them of data that can be
linked to individual persons.
{% endblocktrans %}
</strong>
</p>
<div class="alert alert-legal">
<strong>
{% blocktrans trimmed %}
It is within your own responsibility to check if you are allowed to delete the affected data in your
legislation, e.g. for reasons of taxation. In many countries, you need to keep some data in the live
system in case of an audit.
It is within your own responsibility to check if you are allowed to delete the affected data in
your legislation, e.g. for reasons of taxation. In many countries, you need to keep some data in the
live system in case of an audit.
{% endblocktrans %}
</strong>
{% blocktrans trimmed %}
For most categories of data, you will be able to partially download the data to store it offline. Some
kinds of data (such as some payment information) as well as historical log data cannot be downloaded at
the moment.
For most categories of data, you will be able to partially download the data to store it offline.
Some kinds of data (such as some payment information) as well as historical log data cannot be downloaded
at the moment.
{% endblocktrans %}
<div class="clear"></div>
</div>
</div>
</div>
{% if constraints %}
<div class="alert alert-danger">
{{ constraints }}
@@ -43,9 +49,8 @@
{% else %}
<form action="{% url "control:event.shredder.export" event=request.event.slug organizer=request.organizer.slug %}"
method="post" class="form-horizontal" data-asynctask>
<legend>{% trans "Data selection" %}</legend>
{% csrf_token %}
<div class="panel-group" id="payment_accordion">
<div class="" id="payment_accordion">
{% for ident, shredder in shredders.items %}
<div class="panel panel-default">
<label class="accordion-radio">

View File

@@ -6,7 +6,6 @@
{% load eventsignal %}
{% block title %}{% trans "Date" context "subevent" %}{% endblock %}
{% block content %}
<h1>{% trans "Create multiple dates" context "subevent" %}</h1>
<form action="" method="post" class="form-horizontal" id="subevent-bulk-create-form">
{% csrf_token %}
{% bootstrap_form_errors form %}
@@ -16,8 +15,6 @@
<div class="row">
<div class="col-md-8">
<fieldset>
<legend>{% trans "Dates" context "subevent" %}</legend>
<div class="formset" data-formset data-formset-prefix="{{ rrule_formset.prefix }}"
id="rrule-formset">
{{ rrule_formset.management_form }}
@@ -34,7 +31,7 @@
{% trans "Repetition rule" %}
</div>
<div class="col-md-2 text-right">
<button type="button" class="btn btn-danger btn-xs"
<button type="button" class="btn btn-danger btn-sm"
data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
@@ -145,7 +142,7 @@
{% trans "Repetition rule" %}
</div>
<div class="col-md-2 text-right">
<button type="button" class="btn btn-danger btn-xs"
<button type="button" class="btn btn-danger btn-sm"
data-formset-delete-button>
<i class="fa fa-trash"></i></button>
</div>
@@ -253,10 +250,14 @@
</fieldset>
</div>
<div class="col-md-4">
<fieldset>
<fieldset class="panel panel-default">
<div class="panel-heading">
<legend>{% trans "Preview" context "subevent" %}</legend>
</div>
<div class="panel-body">
<ul id="rrule-preview">
</ul>
</div>
</fieldset>
</div>
</div>

View File

@@ -4,9 +4,9 @@
{% load urlreplace %}
{% block title %}{% trans "Dates" context "subevent" %}{% endblock %}
{% block content %}
<h1>{% trans "Dates" context "subevent" %}</h1>
{% if subevents|length == 0 and not filter_form.filtered %}
<div class="empty-collection">
<div class="panel-default">
<div class="empty-collection panel-body">
<p>
{% blocktrans trimmed %}
You haven't created any dates for this event series yet.
@@ -20,8 +20,10 @@
class="btn btn-primary btn-lg"><i class="fa fa-plus"></i>
{% trans "Create many new dates" context "subevent" %}</a>
</div>
</div>
{% else %}
<form class="row filter-form" action="" method="get">
<div class="panel panel-default">
<form class="row filter-form panel-body" action="" method="get">
<div class="col-md-4 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query layout='inline' %}
</div>
@@ -40,17 +42,17 @@
</button>
</div>
</form>
<p>
<div class="panel-body">
<a href="{% url "control:event.subevents.add" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i>
{% trans "Create a new date" context "subevent" %}</a>
<a href="{% url "control:event.subevents.bulk" organizer=request.event.organizer.slug event=request.event.slug %}"
class="btn btn-default"><i class="fa fa-plus"></i>
{% trans "Create many new dates" context "subevent" %}</a>
</p>
<form action="{% url "control:event.subevents.bulkaction" organizer=request.event.organizer.slug event=request.event.slug %}" method="post">
</div>
<form action="{% url "control:event.subevents.bulkaction" organizer=request.event.organizer.slug event=request.event.slug %}"
method="post" class="table-responsive">
{% csrf_token %}
<div class="table-responsive">
<table class="table table-hover table-quotas">
<thead>
<tr>
@@ -64,17 +66,22 @@
</th>
<th>
{% trans "Begin" %}
<a href="?{% url_replace request 'ordering' '-date_from' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'date_from' %}"><i class="fa fa-caret-up"></i></a>
<a href="?{% url_replace request 'ordering' '-date_from' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'date_from' %}"><i
class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Paid tickets per quota" %}
<a href="?{% url_replace request 'ordering' '-sum_tickets_paid' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'sum_tickets_paid' %}"><i class="fa fa-caret-up"></i></a>
<a href="?{% url_replace request 'ordering' '-sum_tickets_paid' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'sum_tickets_paid' %}"><i
class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Status" %}
<a href="?{% url_replace request 'ordering' '-active' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' '-active' %}"><i
class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'active' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th></th>
@@ -89,7 +96,8 @@
{% endif %}
</td>
<td>
<strong><a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}">
<strong><a
href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}">
{{ s.name }}</a></strong>
</td>
<td>{{ s.get_date_from_display }}</td>
@@ -117,7 +125,8 @@
{% endif %}
</td>
<td class="text-right">
<a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}"
class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<div class="btn-group {% if forloop.revcounter0 < 2 %}dropup{% endif %}">
<button type="button" class="btn btn-default btn-sm dropdown-toggle"
data-toggle="dropdown">
@@ -136,14 +145,16 @@
</li>
</ul>
</div>
<a href="{% url "control:event.subevent.delete" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
<a href="{% url "control:event.subevent.delete" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}"
class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% if "can_change_event_settings" in request.eventpermset %}
<tfoot>
<tr>
<td colspan="6">
<button type="submit" class="btn btn-default btn-save" name="action" value="delete">
{% trans "Delete selected" %}
</button>
@@ -153,8 +164,15 @@
<button type="submit" class="btn btn-default btn-save" name="action" value="disable">
{% trans "Disable selected" %}
</button>
</td>
</tr>
</tfoot>
{% endif %}
</table>
</form>
<div class="panel-footer">
{% include "pretixcontrol/pagination.html" %}
</div>
</div>
{% endif %}
{% endblock %}

View File

@@ -3,7 +3,11 @@
{% load bootstrap3 %}
{% block title %}{% trans "Add a two-factor authentication device" %}{% endblock %}
{% block content %}
<h1>{% trans "Add a two-factor authentication device" %}</h1>
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">{% trans "Add a two-factor authentication device" %}</h1>
</div>
<div class="panel-body">
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{% bootstrap_form_errors form %}
@@ -15,4 +19,6 @@
</button>
</div>
</form>
</div>
</div>
{% endblock %}

View File

@@ -3,13 +3,14 @@
{% load bootstrap3 %}
{% block title %}{% trans "Add a two-factor authentication device" %}{% endblock %}
{% block content %}
<h1>{% trans "Add a two-factor authentication device" %}</h1>
<p>
{% trans "To set up this device, please follow the following steps:" %}
</p>
<ol class="multi-step-tutorial">
<li>
<div class="panel panel-default">
<div class="panel-heading">
<legend>
{% trans "Step 1:" %}
{% trans "Download the Google Authenticator application to your phone:" %}
</legend>
</div>
<div class="panel-body">
<ul>
<li>
<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&"
@@ -34,9 +35,14 @@
</a>
</li>
</ul>
</li>
<li>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
{% trans "Step 2:" %}
{% trans "Add a new account to the app by scanning the following barcode:" %}
</div>
<div class="panel-body">
<div class="qrcode-canvas" data-qrdata="#qrdata"></div>
<p>
<a data-toggle="collapse" href="#no_scan">
@@ -55,13 +61,14 @@
{% trans 'In "Secret"/"Account Key", enter the following code:' %}
<div>
<code id="otp_secret" style="white-space: pre">{{ secretGrouped }}</code>
<button type="button" class="btn btn-default btn-xs btn-clipboard" data-clipboard-target="#otp_secret">
<button type="button" class="btn btn-default btn-xs btn-clipboard"
data-clipboard-target="#otp_secret">
<span class="fa fa-clipboard" aria-hidden="true"></span>
{% trans "copy" %}
</button>
</div>
<div>
<small>Spaces don't matter.</small>
<small>{% trans "Spaces don't matter." %}</small>
</div>
</li>
<li>
@@ -69,26 +76,33 @@
</li>
</ol>
</div>
</li>
<li>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
{% trans "Step 3:" %}
{% trans "Enter the displayed code here:" %}
</div>
<div class="panel-body">
<form class="form form-inline" method="post" action="">
{% csrf_token %}
<input type="number" name="token" class="form-control" required="required">
<button class="btn btn-primary" type="submit">
{% trans "Continue" %}
</button><br>
</button>
<br>
<label>
<input type="checkbox" name="activate" checked="checked" value="on">
{% trans "Require second factor for future logins" %}
</label>
</form>
</li>
</ol>
</div>
</div>
<script type="text/json" id="qrdata">
{{ qrdata|safe }}
</script>
{% endblock %}

Some files were not shown because too many files have changed in this diff Show More