update and move moment.js to separate directory
[qcg-portal.git] / qcg / forms.py
1 # coding=utf-8
2 from django import forms
3 from django.core.validators import RegexValidator
4 from django.template.defaultfilters import capfirst
5 from pyqcg.utils import TaskStatus
6
7 from qcg.models import Task, Allocation
8
9
10 date_range_validator = RegexValidator(r'[0-9]{2}\.[0-9]{2}\.[0-9]{4} - [0-9]{2}\.[0-9]{2}\.[0-9]{4}')
11
12
13 class FiltersForm(forms.Form):
14     ACTIVE, FINISHED, FAILED = range(3)
15     STATUS_CHOICES = (
16         (ACTIVE, u"Aktywne"),
17         (FINISHED, u"Zakończone"),
18         (FAILED, u"Niepowodzenia"),
19     )
20
21     STATUS_MAP = {
22         ACTIVE: (
23             Task.STATUS_CHOICES_REVERSED[TaskStatus.UNSUBMITTED],
24             Task.STATUS_CHOICES_REVERSED[TaskStatus.UNCOMMITTED],
25             Task.STATUS_CHOICES_REVERSED[TaskStatus.QUEUED],
26             Task.STATUS_CHOICES_REVERSED[TaskStatus.PREPROCESSING],
27             Task.STATUS_CHOICES_REVERSED[TaskStatus.PENDING],
28             Task.STATUS_CHOICES_REVERSED[TaskStatus.RUNNING],
29             Task.STATUS_CHOICES_REVERSED[TaskStatus.STOPPED],
30             Task.STATUS_CHOICES_REVERSED[TaskStatus.POSTPROCESSING],
31         ),
32         FINISHED: (
33             Task.STATUS_CHOICES_REVERSED[TaskStatus.FINISHED],
34         ),
35         FAILED: (
36             Task.STATUS_CHOICES_REVERSED[TaskStatus.FAILED],
37             Task.STATUS_CHOICES_REVERSED[TaskStatus.CANCELED],
38         ),
39     }
40     STATUS_CHOICES_DICT = dict(STATUS_CHOICES)
41
42     status = forms.MultipleChoiceField(choices=STATUS_CHOICES, label=u"Status", required=False,
43                                        widget=forms.CheckboxSelectMultiple)
44     host = forms.MultipleChoiceField(label=u"Host", required=False, widget=forms.CheckboxSelectMultiple)
45
46     # advanced
47     keywords = forms.CharField(max_length=100, label=u"Wyszukaj frazę", required=False)
48     submission = forms.CharField(label=u"Data zlecenia", validators=[date_range_validator], required=False)
49     finish = forms.CharField(label=u"Data zakończenia", validators=[date_range_validator], required=False)
50
51     def __init__(self, *args, **kwargs):
52         super(FiltersForm, self).__init__(*args, **kwargs)
53
54         self.fields['host'].choices = tuple(
55             (host, capfirst(host.split('.', 1)[0]))
56             for host in Allocation.objects.values_list('host_name', flat=True).order_by('host_name').distinct())