From 1e4d91a02e314709d4ec1425f814996ff042a2d8 Mon Sep 17 00:00:00 2001 From: Maciej Tronowski Date: Mon, 23 Feb 2015 18:04:18 +0100 Subject: [PATCH] filtering in job list view --- plgng/settings.py | 1 + qcg/forms.py | 56 +++++++++++++++++++ qcg/templates/qcg/jobs.html | 126 ++++++++++++++++++++++++++++++++----------- qcg/views.py | 65 ++++++++++++++++++++-- requirements.txt | 2 + 5 files changed, 216 insertions(+), 34 deletions(-) create mode 100644 qcg/forms.py diff --git a/plgng/settings.py b/plgng/settings.py index 2e2fed1..0567769 100644 --- a/plgng/settings.py +++ b/plgng/settings.py @@ -44,6 +44,7 @@ INSTALLED_APPS = ( 'django.contrib.webdesign', 'qcg', 'django_openid_auth', + 'bootstrap3', ) MIDDLEWARE_CLASSES = ( diff --git a/qcg/forms.py b/qcg/forms.py new file mode 100644 index 0000000..3d90145 --- /dev/null +++ b/qcg/forms.py @@ -0,0 +1,56 @@ +# coding=utf-8 +from django import forms +from django.core.validators import RegexValidator +from django.template.defaultfilters import capfirst +from django.utils.functional import lazy +from pyqcg.utils import TaskStatus + +from qcg.models import Task, Allocation + + +def host_choices(): + return tuple((host, capfirst(host.split('.')[0])) for host in + Allocation.objects.values_list('host_name', flat=True).order_by('host_name').distinct()) + + +date_range_validator = RegexValidator(r'[0-9]{2}\.[0-9]{2}\.[0-9]{4} - [0-9]{2}\.[0-9]{2}\.[0-9]{4}') + + +class FiltersForm(forms.Form): + ACTIVE, FINISHED, FAILED = range(3) + STATUS_CHOICES = ( + (ACTIVE, u"Aktywne"), + (FINISHED, u"Zakończone"), + (FAILED, u"Niepowodzenia"), + ) + + STATUS_MAP = { + ACTIVE: ( + Task.STATUS_CHOICES_REVERSED[TaskStatus.QUEUED], + Task.STATUS_CHOICES_REVERSED[TaskStatus.PREPROCESSING], + Task.STATUS_CHOICES_REVERSED[TaskStatus.PENDING], + Task.STATUS_CHOICES_REVERSED[TaskStatus.RUNNING], + Task.STATUS_CHOICES_REVERSED[TaskStatus.STOPPED], + Task.STATUS_CHOICES_REVERSED[TaskStatus.POSTPROCESSING], + ), + FINISHED: ( + Task.STATUS_CHOICES_REVERSED[TaskStatus.FINISHED], + Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED], + Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED], + ), + FAILED: ( + Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED], + Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED], + ), + } + + status = forms.MultipleChoiceField(choices=STATUS_CHOICES, label=u"Status", required=False, + widget=forms.CheckboxSelectMultiple) + host = forms.MultipleChoiceField(choices=lazy(host_choices, tuple)(), label=u"Host", required=False, + widget=forms.CheckboxSelectMultiple) + + # advanced + keywords = forms.CharField(max_length=100, label=u"Wyszukaj frazę", required=False) + status_exact = forms.ChoiceField(choices=[(None, u"----------")] + Task.STATUS_CHOICES, label=u"Status", required=False) + submission = forms.CharField(label=u"Data zlecenia", validators=[date_range_validator], required=False) + finish = forms.CharField(label=u"Data zakończenia", validators=[date_range_validator], required=False) diff --git a/qcg/templates/qcg/jobs.html b/qcg/templates/qcg/jobs.html index c7ae855..58b4998 100644 --- a/qcg/templates/qcg/jobs.html +++ b/qcg/templates/qcg/jobs.html @@ -1,9 +1,9 @@ {% extends 'qcg/base.html' %} - -{% load staticfiles %} +{% load staticfiles bootstrap3 %} {% block extra_css %} +