forked from CGM_Public/pretix_original
Subevent list: Allow to filter by time of day or multiple week days
This commit is contained in:
@@ -52,7 +52,7 @@ from django_scopes.forms import SafeModelChoiceField
|
|||||||
|
|
||||||
from pretix.base.channels import get_all_sales_channels
|
from pretix.base.channels import get_all_sales_channels
|
||||||
from pretix.base.forms.widgets import (
|
from pretix.base.forms.widgets import (
|
||||||
DatePickerWidget, SplitDateTimePickerWidget,
|
DatePickerWidget, SplitDateTimePickerWidget, TimePickerWidget,
|
||||||
)
|
)
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue,
|
Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue,
|
||||||
@@ -832,17 +832,34 @@ class SubEventFilterForm(FilterForm):
|
|||||||
date_from = forms.DateField(
|
date_from = forms.DateField(
|
||||||
label=_('Date from'),
|
label=_('Date from'),
|
||||||
required=False,
|
required=False,
|
||||||
widget=DatePickerWidget,
|
widget=DatePickerWidget({
|
||||||
|
'placeholder': _('Date from'),
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
date_until = forms.DateField(
|
date_until = forms.DateField(
|
||||||
label=_('Date until'),
|
label=_('Date until'),
|
||||||
required=False,
|
required=False,
|
||||||
widget=DatePickerWidget,
|
widget=DatePickerWidget({
|
||||||
|
'placeholder': _('Date until'),
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
weekday = forms.ChoiceField(
|
time_from = forms.TimeField(
|
||||||
|
label=_('Time from'),
|
||||||
|
required=False,
|
||||||
|
widget=TimePickerWidget({
|
||||||
|
'placeholder': _('Date from'),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
time_until = forms.TimeField(
|
||||||
|
label=_('Time until'),
|
||||||
|
required=False,
|
||||||
|
widget=TimePickerWidget({
|
||||||
|
'placeholder': _('Time until'),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
weekday = forms.MultipleChoiceField(
|
||||||
label=_('Weekday'),
|
label=_('Weekday'),
|
||||||
choices=(
|
choices=(
|
||||||
('', _('All days')),
|
|
||||||
('2', _('Monday')),
|
('2', _('Monday')),
|
||||||
('3', _('Tuesday')),
|
('3', _('Tuesday')),
|
||||||
('4', _('Wednesday')),
|
('4', _('Wednesday')),
|
||||||
@@ -851,6 +868,7 @@ class SubEventFilterForm(FilterForm):
|
|||||||
('7', _('Saturday')),
|
('7', _('Saturday')),
|
||||||
('1', _('Sunday')),
|
('1', _('Sunday')),
|
||||||
),
|
),
|
||||||
|
widget=forms.CheckboxSelectMultiple,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
query = forms.CharField(
|
query = forms.CharField(
|
||||||
@@ -899,7 +917,7 @@ class SubEventFilterForm(FilterForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if fdata.get('weekday'):
|
if fdata.get('weekday'):
|
||||||
qs = qs.annotate(wday=ExtractWeekDay('date_from')).filter(wday=fdata.get('weekday'))
|
qs = qs.annotate(wday=ExtractWeekDay('date_from')).filter(wday__in=fdata.get('weekday'))
|
||||||
|
|
||||||
if fdata.get('query'):
|
if fdata.get('query'):
|
||||||
query = fdata.get('query')
|
query = fdata.get('query')
|
||||||
@@ -923,6 +941,14 @@ class SubEventFilterForm(FilterForm):
|
|||||||
), get_current_timezone())
|
), get_current_timezone())
|
||||||
qs = qs.filter(date_from__gte=date_start)
|
qs = qs.filter(date_from__gte=date_start)
|
||||||
|
|
||||||
|
if fdata.get('time_until'):
|
||||||
|
qs = qs.filter(
|
||||||
|
Q(date_to__isnull=True, date_from__time__lte=fdata.get('time_until')) |
|
||||||
|
Q(date_to__isnull=False, date_to__time__lte=fdata.get('time_until'))
|
||||||
|
)
|
||||||
|
if fdata.get('time_from'):
|
||||||
|
qs = qs.filter(date_from__time__gte=fdata.get('time_from'))
|
||||||
|
|
||||||
if fdata.get('ordering'):
|
if fdata.get('ordering'):
|
||||||
qs = qs.order_by(self.get_order_by())
|
qs = qs.order_by(self.get_order_by())
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -21,31 +21,47 @@
|
|||||||
{% trans "Create many new dates" context "subevent" %}</a>
|
{% trans "Create many new dates" context "subevent" %}</a>
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form class="row filter-form" action="" method="get">
|
<div class="panel panel-default">
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
<div class="panel-heading">
|
||||||
{% bootstrap_field filter_form.query layout='inline' %}
|
<h3 class="panel-title">
|
||||||
|
{% trans "Filter" %}
|
||||||
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
<form class="panel-body filter-form" action="" method="get">
|
||||||
{% bootstrap_field filter_form.status layout='inline' %}
|
<div class="row">
|
||||||
</div>
|
<div class="col-lg-2 col-md-6 col-sm-6 col-xs-12">
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
{% bootstrap_field filter_form.query %}
|
||||||
{% bootstrap_field filter_form.date_from layout='inline' %}
|
</div>
|
||||||
</div>
|
<div class="col-lg-2 col-md-6 col-md-2 col-sm-6 col-xs-12">
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
{% bootstrap_field filter_form.status %}
|
||||||
{% bootstrap_field filter_form.date_until layout='inline' %}
|
</div>
|
||||||
</div>
|
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
{% bootstrap_field filter_form.date_from %}
|
||||||
{% bootstrap_field filter_form.weekday layout='inline' %}
|
</div>
|
||||||
</div>
|
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
{% bootstrap_field filter_form.date_until %}
|
||||||
<button class="btn btn-primary btn-block" type="submit">
|
</div>
|
||||||
<span class="fa fa-filter"></span>
|
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
|
||||||
<span class="hidden-md">
|
{% bootstrap_field filter_form.time_from %}
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-2 col-md-3 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.time_until %}
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 one-line-checkboxes">
|
||||||
|
{% bootstrap_field filter_form.weekday %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-right flip">
|
||||||
|
<button class="btn btn-primary btn-lg" type="submit">
|
||||||
|
<span class="fa fa-filter"></span>
|
||||||
|
<span class="hidden-md">
|
||||||
{% trans "Filter" %}
|
{% trans "Filter" %}
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
{% if "can_change_event_settings" in request.eventpermset %}
|
{% if "can_change_event_settings" in request.eventpermset %}
|
||||||
<p>
|
<p>
|
||||||
<a href="{% url "control:event.subevents.add" organizer=request.event.organizer.slug event=request.event.slug %}"
|
<a href="{% url "control:event.subevents.add" organizer=request.event.organizer.slug event=request.event.slug %}"
|
||||||
@@ -113,7 +129,12 @@
|
|||||||
<strong><a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}?returnto={{ request.GET.urlencode|urlencode }}">
|
<strong><a href="{% url "control:event.subevent" organizer=request.event.organizer.slug event=request.event.slug subevent=s.id %}?returnto={{ request.GET.urlencode|urlencode }}">
|
||||||
{{ s.name }}</a></strong>
|
{{ s.name }}</a></strong>
|
||||||
</td>
|
</td>
|
||||||
<td>{{ s.get_date_from_display }}</td>
|
<td>
|
||||||
|
{{ s.get_date_from_display }}<br>
|
||||||
|
<span class="text-muted">
|
||||||
|
{{ s.date_from|date:"l" }}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% for q in s.first_quotas|slice:":3" %}
|
{% for q in s.first_quotas|slice:":3" %}
|
||||||
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
|
{% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %}
|
||||||
@@ -165,21 +186,21 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{% if "can_change_event_settings" in request.eventpermset %}
|
{% if "can_change_event_settings" in request.eventpermset %}
|
||||||
<div class="batch-select-actions">
|
<div class="batch-select-actions">
|
||||||
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
|
<button type="submit" class="btn btn-danger btn-save" name="action" value="delete">
|
||||||
<i class="fa fa-trash"></i>{% trans "Delete selected" %}
|
<i class="fa fa-trash"></i>{% trans "Delete selected" %}
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="btn btn-primary btn-save" name="action" value="disable"
|
<button type="submit" class="btn btn-primary btn-save" name="action" value="disable"
|
||||||
formaction="{% url "control:event.subevents.bulkedit" organizer=request.event.organizer.slug event=request.event.slug %}">
|
formaction="{% url "control:event.subevents.bulkedit" organizer=request.event.organizer.slug event=request.event.slug %}">
|
||||||
<i class="fa fa-edit"></i>{% trans "Edit selected" %}
|
<i class="fa fa-edit"></i>{% trans "Edit selected" %}
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="btn btn-default btn-save" name="action" value="enable">
|
<button type="submit" class="btn btn-default btn-save" name="action" value="enable">
|
||||||
<i class="fa fa-check"></i>{% trans "Activate selected" %}
|
<i class="fa fa-check"></i>{% trans "Activate selected" %}
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="btn btn-default btn-save" name="action" value="disable">
|
<button type="submit" class="btn btn-default btn-save" name="action" value="disable">
|
||||||
<i class="fa fa-ban"></i>{% trans "Deactivate selected" %}
|
<i class="fa fa-ban"></i>{% trans "Deactivate selected" %}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
{% include "pretixcontrol/pagination.html" %}
|
{% include "pretixcontrol/pagination.html" %}
|
||||||
|
|||||||
@@ -638,6 +638,20 @@ table td > .checkbox input[type="checkbox"] {
|
|||||||
.form-group {
|
.form-group {
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label.control-label {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.one-line-checkboxes {
|
||||||
|
div.checkbox {
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#rules-editor {
|
#rules-editor {
|
||||||
|
|||||||
Reference in New Issue
Block a user