forked from CGM_Public/pretix_original
Added a dashboard widget to help starting
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
<div class="welcome-wizard">
|
||||
<h3>{{ title }}</h3>
|
||||
{% if subtitle %}
|
||||
<div class="attentionline">{{ subtitle }}</div>
|
||||
{% endif %}
|
||||
{% if text %}
|
||||
<p>{{ text }}</p>
|
||||
{% endif %}
|
||||
{% if button_text %}
|
||||
<p><a href="{{ button_url }}" class="btn btn-default btn-lg">{{ button_text }}</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse
|
||||
from django.db.models import Sum
|
||||
from django.dispatch import receiver
|
||||
from django.shortcuts import render
|
||||
from django.template.loader import get_template
|
||||
from django.utils import formats
|
||||
from django.utils.formats import date_format
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
@@ -110,6 +111,40 @@ def shop_state_widget(sender, **kwargs):
|
||||
}]
|
||||
|
||||
|
||||
@receiver(signal=event_dashboard_widgets)
|
||||
def welcome_wizard_widget(sender, **kwargs):
|
||||
template = get_template('pretixcontrol/event/dashboard_widget_welcome.html')
|
||||
ctx = {
|
||||
'title': _('Welcome to pretix!')
|
||||
}
|
||||
kwargs = {'event': sender.slug, 'organizer': sender.organizer.slug}
|
||||
|
||||
if not sender.items.exists():
|
||||
ctx.update({
|
||||
'subtitle': _('Get started by creating a product'),
|
||||
'text': _('The first thing you need for selling tickets to your conference is one or more "products" your '
|
||||
'participants can choose from. A product can be a ticket or anything else that you want to sell, '
|
||||
'e.g. additional merchandise in form of t-shirts.'),
|
||||
'button_text': _('Create a first product'),
|
||||
'button_url': reverse('control:event.items.add', kwargs=kwargs)
|
||||
})
|
||||
elif not sender.quotas.exists():
|
||||
ctx.update({
|
||||
'subtitle': _('Create quotas that apply to your products'),
|
||||
'text': _('Your tickets will only be available for sale if you create a matching quota, i.e. if you tell '
|
||||
'pretix how many tickets it should sell for your event.'),
|
||||
'button_text': _('Create a first quota'),
|
||||
'button_url': reverse('control:event.items.quotas.add', kwargs=kwargs)
|
||||
})
|
||||
else:
|
||||
return []
|
||||
return [{
|
||||
'width': 12,
|
||||
'priority': 2000,
|
||||
'content': template.render(ctx)
|
||||
}]
|
||||
|
||||
|
||||
def event_index(request, organizer, event):
|
||||
widgets = []
|
||||
for r, result in event_dashboard_widgets.send(sender=request.event):
|
||||
|
||||
79
src/static/pretixcontrol/scss/_dashboard.scss
Normal file
79
src/static/pretixcontrol/scss/_dashboard.scss
Normal file
@@ -0,0 +1,79 @@
|
||||
.dashboard-panels .panel-heading .fa {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.dashboard > div {
|
||||
padding: 5px;
|
||||
}
|
||||
.dashboard .widget {
|
||||
min-height: 160px;
|
||||
background: #F8F8F8;
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.dashboard .widget:hover,.dashboard .widget:focus {
|
||||
background: #EEEEEE;
|
||||
text-decoration: none;
|
||||
}
|
||||
.dashboard .numwidget {
|
||||
.num {
|
||||
display: block;
|
||||
padding: 28px 0 10px;
|
||||
text-align: center;
|
||||
font-size: 40px;
|
||||
}
|
||||
.text {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
.dashboard .shopstate {
|
||||
text-align: center;
|
||||
padding: 36px 0;
|
||||
|
||||
span.live, span.off {
|
||||
display: block;
|
||||
font-size: 20px;
|
||||
padding: 10px 0;
|
||||
}
|
||||
span.live {
|
||||
color: $brand-success;
|
||||
}
|
||||
span.off {
|
||||
color: $brand-danger;
|
||||
}
|
||||
}
|
||||
.dashboard .event {
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
font-size: 20px;
|
||||
|
||||
span.from, span.to {
|
||||
display: block;
|
||||
font-size: 25px;
|
||||
}
|
||||
}
|
||||
.dashboard .newevent {
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
font-size: 20px;
|
||||
|
||||
span.fa {
|
||||
display: block;
|
||||
font-size: 60px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
}
|
||||
.dashboard .welcome-wizard {
|
||||
padding: 30px;
|
||||
h3 {
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
.attentionline {
|
||||
font-size: 18px;
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ $fa-font-path: static("fontawesome/fonts");
|
||||
@import "_forms.scss";
|
||||
@import "_flags.scss";
|
||||
@import "_orders.scss";
|
||||
@import "_dashboard.scss";
|
||||
|
||||
footer {
|
||||
text-align: center;
|
||||
@@ -81,79 +82,12 @@ h1 .btn-sm {
|
||||
-ms-transform: rotateX(180deg); /* IE 9 */
|
||||
-webkit-transform: rotateX(180deg); /* Safari and Chrome */
|
||||
}
|
||||
.dashboard-panels .panel-heading .fa {
|
||||
opacity: 0.5;
|
||||
}
|
||||
@media (max-width: $screen-sm-max) {
|
||||
.navbar-nav {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard > div {
|
||||
padding: 5px;
|
||||
}
|
||||
.dashboard .widget {
|
||||
min-height: 160px;
|
||||
background: #F8F8F8;
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.dashboard .widget:hover,.dashboard .widget:focus {
|
||||
background: #EEEEEE;
|
||||
text-decoration: none;
|
||||
}
|
||||
.dashboard .numwidget {
|
||||
.num {
|
||||
display: block;
|
||||
padding: 28px 0 10px;
|
||||
text-align: center;
|
||||
font-size: 40px;
|
||||
}
|
||||
.text {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
.dashboard .shopstate {
|
||||
text-align: center;
|
||||
padding: 36px 0;
|
||||
|
||||
span.live, span.off {
|
||||
display: block;
|
||||
font-size: 20px;
|
||||
padding: 10px 0;
|
||||
}
|
||||
span.live {
|
||||
color: $brand-success;
|
||||
}
|
||||
span.off {
|
||||
color: $brand-danger;
|
||||
}
|
||||
}
|
||||
.dashboard .event {
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
font-size: 20px;
|
||||
|
||||
span.from, span.to {
|
||||
display: block;
|
||||
font-size: 25px;
|
||||
}
|
||||
}
|
||||
.dashboard .newevent {
|
||||
text-align: center;
|
||||
padding: 30px;
|
||||
font-size: 20px;
|
||||
|
||||
span.fa {
|
||||
display: block;
|
||||
font-size: 60px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.helper-display-inline {
|
||||
display: inline !important;
|
||||
|
||||
Reference in New Issue
Block a user