f9f8a44b76daf52c3cb7245d59c76470c23b832b
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / admin_views.py
1 # -*- encoding: utf-8 -*-
2 from django import forms
3 from django.http import HttpResponseRedirect
4 from django.contrib.auth.decorators import login_required
5 from django.template import Context, RequestContext
6 from django.shortcuts import render_to_response
7
8 from datamaster_modeles.models import Thematique, Pays, Region
9 from savoirs.models import Record, Discipline
10
11 # Admin views pour les associations par lots
12
13 class PaysForm(forms.Form):
14 values = [(p.id, p.nom) for p in Pays.objects.all()]
15 pays = forms.MultipleChoiceField(choices=values)
16
17 class RegionsForm(forms.Form):
18 values = [(r.id, r.nom) for r in Region.objects.all()]
19 regions = forms.MultipleChoiceField(choices=values)
20
21 class ThematiquesForm(forms.Form):
22 values = [(t.id, t.nom) for t in Thematique.objects.all()]
23 thematiques = forms.MultipleChoiceField(choices=values)
24
25 class DisciplinesForm(forms.Form):
26 values = [(t.id, t.nom) for t in Discipline.objects.all()]
27 disciplines = forms.MultipleChoiceField(choices=values)
28
29
30 @login_required
31 def assigner_pays(request):
32 ids = request.GET.get("ids").split(",")
33 records = Record.objects.in_bulk(ids)
34 if request.method == 'POST':
35 pays_form = PaysForm(request.POST)
36
37 if pays_form.is_valid():
38
39 # charger tous les objets pays
40 pays = []
41 for pays_id in request.POST.getlist("pays"):
42 pays.append(Pays.objects.get(id=pays_id))
43
44 # assigner chaque pays à chaque référence
45 for r in records.values():
46 for p in pays:
47 r.pays.add(p)
48 r.save()
49
50 # retouner un status à l'utilisateur sur la liste des références
51 pays_noms = u", ".join([p.nom for p in pays])
52 succes = u"Les pays %s ont été assignés à %s références" % (pays_noms, len(ids))
53 request.user.message_set.create(message=succes)
54 return HttpResponseRedirect('/admin/savoirs/record')
55 else:
56 pays_form = PaysForm()
57
58 return render_to_response ("savoirs/assigner.html",
59 Context ({'records': records,
60 'form': pays_form,
61 'titre': u"Assignation de pays par lots",
62 'description': u"Sélectionner les pays qui seront associés aux références suivantes :" ,
63 }),
64 context_instance = RequestContext(request))
65
66 @login_required
67 def assigner_regions(request):
68 ids = request.GET.get("ids").split(",")
69 records = Record.objects.in_bulk(ids)
70 if request.method == 'POST':
71 regions_form = RegionsForm(request.POST)
72
73 if regions_form.is_valid():
74
75 # charger tous les objets regions
76 regions = []
77 for region_id in request.POST.getlist("regions"):
78 regions.append(Region.objects.get(id=region_id))
79
80 # assigner chaque regions à chaque référence
81 for r in records.values():
82 for p in regions:
83 r.regions.add(p)
84 r.save()
85
86 # retouner un status à l'utilisateur sur la liste des références
87 regions_noms = u", ".join([p.nom for p in regions])
88 succes = u"Les regions %s ont été assignées à %s références" % (regions_noms, len(ids))
89 request.user.message_set.create(message=succes)
90 return HttpResponseRedirect('/admin/savoirs/record')
91 else:
92 regions_form = RegionsForm()
93
94 return render_to_response ("savoirs/assigner.html",
95 Context ({'records': records,
96 'form': regions_form,
97 'titre': u"Assignation de régions par lots",
98 'description': u"Sélectionner les regions qui seront associées aux références suivantes :" ,
99 }),
100 context_instance = RequestContext(request))
101
102 @login_required
103 def assigner_disciplines(request):
104 ids = request.GET.get("ids").split(",")
105 records = Record.objects.in_bulk(ids)
106 if request.method == 'POST':
107 disciplines_form = DisciplinesForm(request.POST)
108
109 if disciplines_form.is_valid():
110
111 # charger tous les objets disciplines
112 disciplines = []
113 for discipline_id in request.POST.getlist("disciplines"):
114 disciplines.append(Discipline.objects.get(id=discipline_id))
115
116 # assigner chaque disciplines à chaque référence
117 for r in records.values():
118 for p in disciplines:
119 r.disciplines.add(p)
120 r.save()
121
122 # retouner un status à l'utilisateur sur la liste des références
123 disciplines_noms = u", ".join([p.nom for p in disciplines])
124 succes = u"Les disciplines %s ont été assignées à %s références" % (disciplines_noms, len(ids))
125 request.user.message_set.create(message=succes)
126 return HttpResponseRedirect('/admin/savoirs/record')
127 else:
128 disciplines_form = DisciplinesForm()
129
130 return render_to_response ("savoirs/assigner.html",
131 Context ({'records': records,
132 'form': disciplines_form,
133 'titre': u"Assignation de disciplines par lots",
134 'description': u"Sélectionner les disciplines qui seront associées aux références suivantes :" ,
135 }),
136 context_instance = RequestContext(request))
137
138 @login_required
139 def assigner_thematiques(request):
140 ids = request.GET.get("ids").split(",")
141 records = Record.objects.in_bulk(ids)
142 if request.method == 'POST':
143 thematiques_form = ThematiquesForm(request.POST)
144
145 if thematiques_form.is_valid():
146
147 # charger tous les objets thematiques
148 thematiques = []
149 for thematique_id in request.POST.getlist("thematiques"):
150 thematiques.append(Thematique.objects.get(id=thematique_id))
151
152 # assigner chaque thematiques à chaque référence
153 for r in records.values():
154 for p in thematiques:
155 r.thematiques.add(p)
156 r.save()
157
158 # retouner un status à l'utilisateur sur la liste des références
159 thematiques_noms = u", ".join([p.nom for p in thematiques])
160 succes = u"Les thématiques %s ont été assignées à %s références" % (thematiques_noms, len(ids))
161 request.user.message_set.create(message=succes)
162 return HttpResponseRedirect('/admin/savoirs/record')
163 else:
164 thematiques_form = ThematiquesForm()
165
166 return render_to_response ("savoirs/assigner.html",
167 Context ({'records': records,
168 'form': thematiques_form,
169 'titre': u"Assignation de thématiques par lots",
170 'description': u"Sélectionner les thématiques qui seront associées aux références suivantes :" ,
171 }),
172 context_instance = RequestContext(request))