Correction pour le form des categories
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / forms.py
CommitLineData
544b4522 1# -*- encoding: utf-8 -*-
73309469 2import re, datetime
544b4522 3from django import forms
6cdb7d49 4from django import db
7bbf600c 5from django.db.models import Q
73309469 6from django.db import models
7from django.contrib.admin import widgets
0a95ac89 8from django.utils.safestring import mark_safe
0a77a7d6 9from datamaster_modeles.models import Thematique, Pays, Region
4bef5dc2 10from savoirs.models import Evenement, Discipline, Record, Actualite, RessourceSearch, ActualiteSearch, \
656b9c0f 11 AppelSearch, EvenementSearch, Search, RecordCategorie
0b72ebef 12from savoirs.lib.recherche import build_search_regexp
73309469 13from savoirs.admin import EvenementAdminForm
60d2095f 14import settings
da44ce68 15
7bbf600c
EMS
16# Modifications custom aux champs Django
17
18class SEPDateField(forms.DateField):
19 """Un champ de date avec des valeurs par défaut un peu modifiées."""
20
21 def __init__(self, *args, **kwargs):
0a8666f8 22 super(SEPDateField, self).__init__(self, *args, **kwargs)
7bbf600c
EMS
23
24 # La classe "date" active le datepicker dans sep.js
7bbf600c 25 # Nous recevons les dates en format français
0a8666f8 26 format = '%d/%m/%Y'
27 self.widget = forms.DateInput(attrs={'class': 'date'}, format=format)
fdcf5874 28 self.input_formats = [format]
7bbf600c 29
0a95ac89
EMS
30class SEPSplitDateTimeWidget(forms.MultiWidget):
31
32 def __init__(self):
33 self.date_format = '%d/%m/%Y'
a9e7bae1 34 self.time_format = '%H:%M'
0a95ac89
EMS
35 widgets = (forms.DateInput(attrs={'class': 'date'}, format=self.date_format),
36 forms.TimeInput(attrs={'class': 'time'}, format=self.time_format))
37 super(SEPSplitDateTimeWidget, self).__init__(widgets)
38
39 def decompress(self, value):
40 if value:
41 return [value.date(), value.time().replace(microsecond=0)]
42 return [None, None]
43
44 def format_output(self, rendered_widgets):
45 return mark_safe(u'Date: %s Heure: %s' % (rendered_widgets[0], rendered_widgets[1]))
46
47class SEPDateTimeField(forms.DateTimeField):
48 widget = SEPSplitDateTimeWidget
49
a9e7bae1
EMS
50 def __init__(self, *args, **kwargs):
51 super(SEPDateTimeField, self).__init__(input_formats=['%d/%m/%Y %H:%M'])
52
da44ce68 53# Formulaires de recherche
544b4522 54
fdcf5874 55class RessourceSearchForm(forms.ModelForm):
da44ce68
EMS
56 """Formulaire de recherche pour les ressources."""
57
fdcf5874
EMS
58 class Meta:
59 model = RessourceSearch
60 fields = ['q', 'auteur', 'titre', 'sujet', 'publisher', 'discipline', 'region']
61
62class RessourceSearchEditForm(RessourceSearchForm):
63 """Formulaire d'édition de recherche sauvegardée."""
c9cbc784 64
fdcf5874 65 class Meta(RessourceSearchForm.Meta):
4b89a7df 66 fields = ['nom', 'alerte_courriel'] + RessourceSearchForm.Meta.fields
fdcf5874
EMS
67
68class ActualiteSearchForm(forms.ModelForm):
69 """Formulaire de recherche pour les actualités."""
70 date_min = SEPDateField(required=False, label="Depuis le")
7bbf600c 71 date_max = SEPDateField(required=False, label="Jusqu'au")
fdcf5874
EMS
72
73 class Meta:
74 model = ActualiteSearch
75 fields = ['q', 'date_min', 'date_max', 'discipline', 'region']
c9cbc784 76
fdcf5874
EMS
77class ActualiteSearchEditForm(ActualiteSearchForm):
78
79 class Meta(ActualiteSearchForm.Meta):
4b89a7df 80 fields = ['nom', 'alerte_courriel'] + ActualiteSearchForm.Meta.fields
4101cfc0 81
4bef5dc2
EMS
82class AppelSearchForm(forms.ModelForm):
83 """Formulaire de recherche pour les actualités."""
84 date_min = SEPDateField(required=False, label="Depuis le")
85 date_max = SEPDateField(required=False, label="Jusqu'au")
86
87 class Meta:
88 model = AppelSearch
89 fields = ['q', 'date_min', 'date_max', 'discipline', 'region']
90
91class AppelSearchEditForm(AppelSearchForm):
92
93 class Meta(AppelSearchForm.Meta):
4b89a7df 94 fields = ['nom', 'alerte_courriel'] + AppelSearchForm.Meta.fields
4bef5dc2 95
fdcf5874
EMS
96class EvenementSearchForm(forms.ModelForm):
97 """Formulaire de recherche pour les évènements."""
7bbf600c
EMS
98 date_min = SEPDateField(required=False, label="Depuis le")
99 date_max = SEPDateField(required=False, label="Jusqu'au")
fdcf5874
EMS
100
101 class Meta:
102 model = EvenementSearch
103 fields = ['q', 'type', 'date_min', 'date_max', 'discipline', 'region']
104
105class EvenementSearchEditForm(EvenementSearchForm):
106
107 class Meta(EvenementSearchForm.Meta):
4b89a7df 108 fields = ['nom', 'alerte_courriel'] + EvenementSearchForm.Meta.fields
fdcf5874
EMS
109
110class SearchEditForm(forms.ModelForm):
111
112 class Meta:
113 model = Search
4101cfc0 114
da44ce68 115###
544b4522 116
73309469 117class EvenementForm(EvenementAdminForm):
0a95ac89
EMS
118 debut = SEPDateTimeField()
119 fin = SEPDateTimeField()
69ad0029 120 description = forms.CharField(
fe254ccc 121 label='Description', required=True,
69ad0029
EMS
122 help_text="Présenter les thématiques de l'évènement et donner toutes les informations utiles aux futurs participants.",
123 widget=forms.Textarea
124 )
92ec10ad 125 pays = forms.ModelChoiceField(
731ef7ab 126 queryset=Pays.objects.all(), required=True, label='Pays',
92ec10ad
EMS
127 help_text="La sélection du pays entraine la saisie automatique du fuseau horaire."
128 )
73309469 129
92c7413b
CR
130 class Meta:
131 model = Evenement
731ef7ab 132 exclude = ('contact', 'approuve', 'uid', 'regions')
0a77a7d6 133
134# Admin views pour les associations par lots
135
656b9c0f 136class CategorieForm(forms.Form):
bd599940 137 categorie = forms.ModelChoiceField(queryset=RecordCategorie.objects.all())
656b9c0f 138
0a77a7d6 139class PaysForm(forms.Form):
140 values = [(p.id, p.nom) for p in Pays.objects.all()]
141 pays = forms.MultipleChoiceField(choices=values)
142
143class RegionsForm(forms.Form):
264a3210 144 regions = forms.ModelMultipleChoiceField(queryset=Region.objects.all())
0a77a7d6 145
146class ThematiquesForm(forms.Form):
147 values = [(t.id, t.nom) for t in Thematique.objects.all()]
148 thematiques = forms.MultipleChoiceField(choices=values)
149
150class DisciplinesForm(forms.Form):
264a3210 151 disciplines = forms.ModelMultipleChoiceField(queryset=Discipline.objects.all())
0a77a7d6 152
153class ConfirmationForm(forms.Form):
154 pass
155