1 from datetime import datetime |
1 from datetime import datetime |
2 |
2 |
|
3 from django import shortcuts |
3 from django.http import Http404 |
4 from django.http import Http404 |
4 from django.contrib.auth.decorators import login_required |
5 from django.contrib.auth.decorators import login_required |
5 from django.contrib.auth.models import User |
6 from django.contrib.auth.models import User |
6 from django.core.context_processors import csrf |
7 from django.core.context_processors import csrf |
7 from django.core.urlresolvers import reverse |
8 from django.core.urlresolvers import reverse |
8 from django.shortcuts import redirect |
|
9 from django.shortcuts import render_to_response |
|
10 |
|
11 from pytask.taskapp.forms import ChoiceForm |
|
12 from pytask.taskapp.forms import ClaimTaskForm |
|
13 from pytask.taskapp.forms import CreateTaskForm |
|
14 from pytask.taskapp.forms import CreateTextbookForm |
|
15 from pytask.taskapp.forms import EditTaskForm |
|
16 from pytask.taskapp.forms import EditTextbookForm |
|
17 from pytask.taskapp.forms import TaskCommentForm |
|
18 from pytask.taskapp.forms import WorkReportForm |
|
19 from pytask.taskapp.models import Task |
|
20 from pytask.taskapp.models import TaskComment |
|
21 from pytask.taskapp.models import TaskClaim |
|
22 from pytask.taskapp.models import TextBook |
|
23 from pytask.taskapp.models import WorkReport |
|
24 from pytask.taskapp.utils import getTask |
|
25 from pytask.taskapp.utils import getTextBook |
|
26 |
9 |
27 from pytask.views import show_msg |
10 from pytask.views import show_msg |
|
11 |
|
12 from pytask.taskapp import forms as taskapp_forms |
|
13 from pytask.taskapp import models as taskapp_models |
28 |
14 |
29 |
15 |
30 @login_required |
16 @login_required |
31 def create_task(request): |
17 def create_task(request): |
32 |
18 |
40 context.update(csrf(request)) |
26 context.update(csrf(request)) |
41 |
27 |
42 can_create_task = False if profile.rights == "CT" else True |
28 can_create_task = False if profile.rights == "CT" else True |
43 if can_create_task: |
29 if can_create_task: |
44 if request.method == "POST": |
30 if request.method == "POST": |
45 form = CreateTaskForm(request.POST) |
31 form = taskapp_forms.CreateTaskForm(request.POST) |
46 if form.is_valid(): |
32 if form.is_valid(): |
47 data = form.cleaned_data.copy() |
33 data = form.cleaned_data.copy() |
48 data.update({"created_by": user, |
34 data.update({"created_by": user, |
49 "creation_datetime": datetime.now(), |
35 "creation_datetime": datetime.now(), |
50 "uniq_key": make_key(Task), |
|
51 }) |
36 }) |
52 |
37 |
53 task = Task(**data) |
38 task = taskapp_models.Task(**data) |
54 task.save() |
39 task.save() |
55 |
40 |
56 task_url = reverse('view_task', kwargs={'task_id': task.id}) |
41 task_url = reverse('view_task', kwargs={'task_id': task.id}) |
57 return redirect(task_url) |
42 return shortcuts.redirect(task_url) |
58 else: |
43 else: |
59 context.update({'form':form}) |
44 context.update({'form':form}) |
60 return render_to_response('task/create.html', context) |
45 return shortcuts.render_to_response( |
61 else: |
46 'task/create.html', context) |
62 form = CreateTaskForm() |
47 else: |
|
48 form = taskapp_forms.CreateTaskForm() |
63 context.update({'form':form}) |
49 context.update({'form':form}) |
64 return render_to_response('task/create.html', context) |
50 return shortcuts.render_to_response('task/create.html', context) |
65 else: |
51 else: |
66 return show_msg(user, 'You are not authorised to create a task.') |
52 return show_msg(user, 'You are not authorised to create a task.') |
67 |
53 |
68 def browse_tasks(request): |
54 def browse_tasks(request): |
69 |
55 |
70 open_tasks = Task.objects.filter(status="OP") |
56 open_tasks = taskapp_models.Task.objects.filter(status="OP") |
71 working_tasks = Task.objects.filter(status="WR") |
57 working_tasks = taskapp_models.Task.objects.filter(status="WR") |
72 comp_tasks = Task.objects.filter(status="CM") |
58 comp_tasks = taskapp_models.Task.objects.filter(status="CM") |
73 |
59 |
74 context = {"open_tasks": open_tasks, |
60 context = {"open_tasks": open_tasks, |
75 "working_tasks": working_tasks, |
61 "working_tasks": working_tasks, |
76 "comp_tasks": comp_tasks, |
62 "comp_tasks": comp_tasks, |
77 } |
63 } |
78 |
64 |
79 user = request.user |
65 user = request.user |
80 if not user.is_authenticated(): |
66 if not user.is_authenticated(): |
81 return render_to_response("task/browse.html") |
67 return shortcuts.render_to_response("task/browse.html") |
82 |
68 |
83 profile = user.get_profile() |
69 profile = user.get_profile() |
84 |
70 |
85 can_approve = True if profile.rights in ["MG", "DC"] else False |
71 can_approve = True if profile.rights in ["MG", "DC"] else False |
86 unpub_tasks = Task.objects.filter(status="UP").exclude(status="DL") |
72 unpub_tasks = taskapp_models.Task.objects.filter(status="UP").exclude(status="DL") |
87 if can_approve: |
73 if can_approve: |
88 context.update({"unpub_tasks": unpub_tasks}) |
74 context.update({"unpub_tasks": unpub_tasks}) |
89 |
75 |
90 context.update({"user": user, |
76 context.update({"user": user, |
91 "profile": profile, |
77 "profile": profile, |
92 }) |
78 }) |
93 |
79 |
94 return render_to_response("task/browse.html", context) |
80 return shortcuts.render_to_response("task/browse.html", context) |
95 |
81 |
96 |
82 |
97 def view_task(request, task_id): |
83 def view_task(request, task_id): |
98 """ get the task depending on its task_id and display accordingly if it is a get. |
84 """ get the task depending on its task_id and display accordingly if it is a get. |
99 check for authentication and add a comment if it is a post request. |
85 check for authentication and add a comment if it is a post request. |
100 """ |
86 """ |
101 |
87 |
102 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
88 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
103 task = getTask(task_id) |
89 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
104 |
90 |
105 user = request.user |
91 user = request.user |
106 |
92 |
107 if not user.is_authenticated(): |
93 if not user.is_authenticated(): |
108 return render_to_response("task/view.html", {"task": task}) |
94 return shortcuts.render_to_response("task/view.html", {"task": task}) |
109 |
95 |
110 profile = user.get_profile() |
96 profile = user.get_profile() |
111 |
97 |
112 context = {"user": user, |
98 context = {"user": user, |
113 "profile": profile, |
99 "profile": profile, |
134 context.update({'is_reviewer':is_reviewer, |
120 context.update({'is_reviewer':is_reviewer, |
135 'comments':comments, |
121 'comments':comments, |
136 'reviewers':reviewers, |
122 'reviewers':reviewers, |
137 }) |
123 }) |
138 |
124 |
139 claimed_users = task.claimed_users.all() |
|
140 selected_users = task.selected_users.all() |
125 selected_users = task.selected_users.all() |
141 |
126 |
142 is_creator = True if user == task.created_by else False |
127 is_creator = True if user == task.created_by else False |
143 has_claimed = True if user in claimed_users else False |
|
144 |
128 |
145 context['selected_users'] = selected_users |
129 context['selected_users'] = selected_users |
146 context['is_selected'] = True if user in selected_users else False |
130 context['is_selected'] = True if user in selected_users else False |
147 context['can_approve'] = True if task.status == "UP" and\ |
131 context['can_approve'] = True if task.status == "UP" and\ |
148 profile.rights in ["MG", "DC"]\ |
132 profile.rights in ["MG", "DC"]\ |
159 |
143 |
160 context['can_mod_reviewers'] = True if profile.rights in ["MG", "DC"] else\ |
144 context['can_mod_reviewers'] = True if profile.rights in ["MG", "DC"] else\ |
161 False |
145 False |
162 |
146 |
163 if request.method == 'POST': |
147 if request.method == 'POST': |
164 form = TaskCommentForm(request.POST) |
148 form = taskapp_forms.TaskCommentForm(request.POST) |
165 if form.is_valid(): |
149 if form.is_valid(): |
166 data = form.cleaned_data['data'] |
150 data = form.cleaned_data['data'] |
167 new_comment = TaskComment(task=task, data=data, |
151 new_comment = taskapp_forms.TaskComment( |
168 uniq_key=make_key(TaskComment), |
152 task=task, data=data, commented_by=user, |
169 commented_by=user, comment_datetime=datetime.now()) |
153 comment_datetime=datetime.now()) |
170 new_comment.save() |
154 new_comment.save() |
171 return redirect(task_url) |
155 return shortcuts.redirect(task_url) |
172 else: |
156 else: |
173 context['form'] = form |
157 context['form'] = form |
174 return render_to_response('task/view.html', context) |
158 return shortcuts.render_to_response('task/view.html', context) |
175 else: |
159 else: |
176 form = TaskCommentForm() |
160 form = taskapp_forms.TaskCommentForm() |
177 context['form'] = form |
161 context['form'] = form |
178 return render_to_response('task/view.html', context) |
162 return shortcuts.render_to_response('task/view.html', context) |
179 |
163 |
180 @login_required |
164 @login_required |
181 def edit_task(request, task_id): |
165 def edit_task(request, task_id): |
182 """ only creator gets to edit the task and that too only before it gets |
166 """ only creator gets to edit the task and that too only before it gets |
183 approved. |
167 approved. |
200 } |
184 } |
201 |
185 |
202 context.update(csrf(request)) |
186 context.update(csrf(request)) |
203 |
187 |
204 if request.method == "POST": |
188 if request.method == "POST": |
205 form = EditTaskForm(request.POST, instance=task) |
189 form = taskapp_forms.EditTaskForm(request.POST, instance=task) |
206 if form.is_valid(): |
190 if form.is_valid(): |
207 form.save() |
191 form.save() |
208 return redirect(task_url) |
192 return shortcuts.redirect(task_url) |
209 else: |
193 else: |
210 context.update({"form": form}) |
194 context.update({"form": form}) |
211 return render_to_response("task/edit.html", context) |
195 return shortcuts.render_to_response("task/edit.html", context) |
212 else: |
196 else: |
213 form = EditTaskForm(instance=task) |
197 form = taskapp_forms.EditTaskForm(instance=task) |
214 context.update({"form": form}) |
198 context.update({"form": form}) |
215 return render_to_response("task/edit.html", context) |
199 return shortcuts.render_to_response("task/edit.html", context) |
216 |
200 |
217 @login_required |
201 @login_required |
218 def approve_task(request, task_id): |
202 def approve_task(request, task_id): |
219 |
203 |
220 user = request.user |
204 user = request.user |
221 profile = user.get_profile() |
205 profile = user.get_profile() |
222 |
206 |
223 task = getTask(task_id) |
207 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
224 |
208 |
225 if profile.rights not in ["MG", "DC"] or task.status != "UP": |
209 if profile.rights not in ["MG", "DC"] or task.status != "UP": |
226 raise Http404 |
210 raise Http404 |
227 |
211 |
228 context = {"user": user, |
212 context = {"user": user, |
229 "profile": profile, |
213 "profile": profile, |
230 "task": task, |
214 "task": task, |
231 } |
215 } |
232 |
216 |
233 return render_to_response("task/confirm_approval.html", context) |
217 return shortcuts.render_to_response("task/confirm_approval.html", context) |
234 |
218 |
235 @login_required |
219 @login_required |
236 def approved_task(request, task_id): |
220 def approved_task(request, task_id): |
237 |
221 |
238 user = request.user |
222 user = request.user |
239 profile = user.get_profile() |
223 profile = user.get_profile() |
240 |
224 |
241 task = getTask(task_id) |
225 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
242 |
226 |
243 if profile.rights not in ["MG", "DC"] or task.status != "UP": |
227 if profile.rights not in ["MG", "DC"] or task.status != "UP": |
244 raise Http404 |
228 raise Http404 |
245 |
229 |
246 task.approved_by = user |
230 task.approved_by = user |
251 context = {"user": user, |
235 context = {"user": user, |
252 "profile": profile, |
236 "profile": profile, |
253 "task": task, |
237 "task": task, |
254 } |
238 } |
255 |
239 |
256 return render_to_response("task/approved_task.html", context) |
240 return shortcuts.render_to_response("task/approved_task.html", context) |
257 |
241 |
258 @login_required |
242 @login_required |
259 def addreviewer(request, task_id): |
243 def addreviewer(request, task_id): |
260 |
244 |
261 user = request.user |
245 user = request.user |
262 profile = user.get_profile() |
246 profile = user.get_profile() |
263 |
247 |
264 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
248 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
265 task = getTask(task_id) |
249 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
266 |
250 |
267 can_mod_reviewers = True if profile.rights in ["MG", "DC"] else False |
251 can_mod_reviewers = True if profile.rights in ["MG", "DC"] else False |
268 if not can_mod_reviewers: |
252 if not can_mod_reviewers: |
269 raise Http404 |
253 raise Http404 |
270 |
254 |
276 context.update(csrf(request)) |
260 context.update(csrf(request)) |
277 |
261 |
278 |
262 |
279 # This part has to be made better |
263 # This part has to be made better |
280 reviewer_choices = User.objects.filter(is_active=True).\ |
264 reviewer_choices = User.objects.filter(is_active=True).\ |
281 exclude(reviewing_tasks__uniq_key=task_id).\ |
265 exclude(reviewing_tasks__id=task_id).\ |
282 exclude(claimed_tasks__uniq_key=task_id).\ |
266 exclude(claimed_tasks__id=task_id).\ |
283 exclude(selected_tasks__uniq_key=task_id).\ |
267 exclude(selected_tasks__id=task_id).\ |
284 exclude(created_tasks__uniq_key=task_id) |
268 exclude(created_tasks__id=task_id) |
285 |
269 |
286 choices = ((a_user.id,a_user.username) for a_user in reviewer_choices) |
270 choices = ((a_user.id,a_user.username) for a_user in reviewer_choices) |
287 label = "Reviewer" |
271 label = "Reviewer" |
288 |
272 |
289 if request.method == "POST": |
273 if request.method == "POST": |
290 form = ChoiceForm(choices, data=request.POST, label=label) |
274 form = taskapp_forms.ChoiceForm(choices, data=request.POST, label=label) |
291 if form.is_valid(): |
275 if form.is_valid(): |
292 data = form.cleaned_data.copy() |
276 data = form.cleaned_data.copy() |
293 uid = data['choice'] |
277 uid = data['choice'] |
294 reviewer = User.objects.get(id=uid) |
278 reviewer = User.objects.get(id=uid) |
295 |
279 |
296 task.reviewers.add(reviewer) |
280 task.reviewers.add(reviewer) |
297 return redirect(task_url) |
281 return shortcuts.redirect(task_url) |
298 else: |
282 else: |
299 context.update({"form": form}) |
283 context.update({"form": form}) |
300 return render_to_response("task/addreviewer.html", context) |
284 return shortcuts.render_to_response("task/addreviewer.html", context) |
301 else: |
285 else: |
302 form = ChoiceForm(choices, label=label) |
286 form = taskapp_forms.ChoiceForm(choices, label=label) |
303 context.update({"form": form}) |
287 context.update({"form": form}) |
304 return render_to_response("task/addreviewer.html", context) |
288 return shortcuts.render_to_response("task/addreviewer.html", context) |
305 |
289 |
306 def view_work(request, task_id): |
290 def view_work(request, task_id): |
307 |
291 |
308 task = getTask(task_id) |
292 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
309 |
293 |
310 user = request.user |
294 user = request.user |
311 old_reports = task.reports.all() |
295 old_reports = task.reports.all() |
312 |
296 |
313 context = {"task": task, |
297 context = {"task": task, |
314 "old_reports": old_reports, |
298 "old_reports": old_reports, |
315 } |
299 } |
316 |
300 |
317 if not user.is_authenticated(): |
301 if not user.is_authenticated(): |
318 return render_to_response("task/view_work.html", context) |
302 return shortcuts.render_to_response("task/view_work.html", context) |
319 |
303 |
320 profile = user.get_profile() |
304 profile = user.get_profile() |
321 |
305 |
322 context.update({"user": user, |
306 context.update({"user": user, |
323 "profile": profile, |
307 "profile": profile, |
328 working_users = task.selected_users.all() |
312 working_users = task.selected_users.all() |
329 is_working = True if user in working_users else False |
313 is_working = True if user in working_users else False |
330 |
314 |
331 context.update({"is_working": is_working}) |
315 context.update({"is_working": is_working}) |
332 |
316 |
333 return render_to_response("task/view_work.html", context) |
317 return shortcuts.render_to_response("task/view_work.html", context) |
334 |
318 |
335 @login_required |
319 @login_required |
336 def view_report(request, report_id): |
320 def view_report(request, report_id): |
337 |
321 |
338 try: |
322 try: |
339 report = WorkReport.objects.get(uniq_key=report_id) |
323 report = taskapp_models.WorkReport.objects.get(pk=report_id) |
340 except WorkReport.DoesNotExist: |
324 except taskapp_models.WorkReport.DoesNotExist: |
341 raise Http404 |
325 raise Http404 |
342 |
326 |
343 user = request.user |
327 user = request.user |
344 context = {"report": report, |
328 context = {"report": report, |
345 "user": user, |
329 "user": user, |
346 } |
330 } |
347 |
331 |
348 if not user.is_authenticated(): |
332 if not user.is_authenticated(): |
349 return render_to_response("task/view_report.html", context) |
333 return shortcuts.render_to_response("task/view_report.html", context) |
350 |
334 |
351 profile = user.get_profile() |
335 profile = user.get_profile() |
352 |
336 |
353 context.update({"profile": profile}) |
337 context.update({"profile": profile}) |
354 return render_to_response("task/view_report.html", context) |
338 return shortcuts.render_to_response("task/view_report.html", context) |
355 |
339 |
356 @login_required |
340 @login_required |
357 def submit_report(request, task_id): |
341 def submit_report(request, task_id): |
358 """ Check if the work is in WR state and the user is in assigned_users. |
342 """ Check if the work is in WR state and the user is in assigned_users. |
359 """ |
343 """ |
360 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
344 task_url = reverse('view_task', kwargs={'task_id': task_id}) |
361 task = getTask(task_id) |
345 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
362 |
346 |
363 user = request.user |
347 user = request.user |
364 old_reports = task.reports.all() |
348 old_reports = task.reports.all() |
365 |
349 |
366 if not task.status == "WR": |
350 if not task.status == "WR": |
378 |
362 |
379 if request.method == "POST": |
363 if request.method == "POST": |
380 if not can_upload: |
364 if not can_upload: |
381 return show_msg(user, "You are not authorised to upload data to this task", task_url, "view the task") |
365 return show_msg(user, "You are not authorised to upload data to this task", task_url, "view the task") |
382 |
366 |
383 form = WorkReportForm(request.POST, request.FILES) |
367 form = taskapp_forms.WorkReportForm(request.POST, request.FILES) |
384 |
368 |
385 if form.is_valid(): |
369 if form.is_valid(): |
386 data = form.cleaned_data.copy() |
370 data = form.cleaned_data.copy() |
387 data.update({"task":task, |
371 data.update({"task":task, |
388 "revision": old_reports.count(), |
372 "revision": old_reports.count(), |
389 "uniq_key": make_key(WorkReport), |
|
390 "submitted_by": user, |
373 "submitted_by": user, |
391 "submitted_at": datetime.now(), |
374 "submitted_at": datetime.now(), |
392 }) |
375 }) |
393 r = WorkReport(**data) |
376 r = taskapp_models.WorkReport(**data) |
394 r.save() |
377 r.save() |
395 |
378 |
396 report_url = reverse('view_report', kwargs={'report_id': r.id}) |
379 report_url = reverse('view_report', kwargs={'report_id': r.id}) |
397 return redirect(report_url) |
380 return shortcuts.redirect(report_url) |
398 |
381 |
399 else: |
382 else: |
400 context.update({"form":form}) |
383 context.update({"form":form}) |
401 return render_to_response('task/submit_report.html', context) |
384 return shortcuts.render_to_response('task/submit_report.html', context) |
402 |
385 |
403 else: |
386 else: |
404 form = WorkReportForm() |
387 form = taskapp_forms.WorkReportForm() |
405 context.update({"form":form}) |
388 context.update({"form":form}) |
406 return render_to_response('task/submit_report.html', context) |
389 return shortcuts.render_to_response('task/submit_report.html', context) |
407 |
390 |
408 @login_required |
391 @login_required |
409 def create_textbook(request): |
392 def create_textbook(request): |
410 |
393 |
411 user = request.user |
394 user = request.user |
420 } |
403 } |
421 |
404 |
422 context.update(csrf(request)) |
405 context.update(csrf(request)) |
423 |
406 |
424 if request.method == "POST": |
407 if request.method == "POST": |
425 form = CreateTextbookForm(request.POST) |
408 form = taskapp_forms.CreateTextbookForm(request.POST) |
426 if form.is_valid(): |
409 if form.is_valid(): |
427 data = form.cleaned_data.copy() |
410 data = form.cleaned_data.copy() |
428 data.update({"uniq_key": make_key(TextBook), |
411 data.update({"created_by": user, |
429 "created_by": user, |
|
430 "creation_datetime": datetime.now()}) |
412 "creation_datetime": datetime.now()}) |
431 del data['chapters'] |
413 del data['chapters'] |
432 new_textbook = TextBook(**data) |
414 new_textbook = taskapp_models.TextBook(**data) |
433 new_textbook.save() |
415 new_textbook.save() |
434 |
416 |
435 new_textbook.chapters = form.cleaned_data['chapters'] |
417 new_textbook.chapters = form.cleaned_data['chapters'] |
436 |
418 |
437 textbook_url = reverse( |
419 textbook_url = reverse( |
438 'view_textbook', kwargs={'task_id': new_textbook.id}) |
420 'view_textbook', kwargs={'task_id': new_textbook.id}) |
439 return redirect(textbook_url) |
421 return shortcuts.redirect(textbook_url) |
440 else: |
422 else: |
441 context.update({"form": form}) |
423 context.update({"form": form}) |
442 return render_to_response("task/create_textbook.html", context) |
424 return shortcuts.render_to_response("task/create_textbook.html", context) |
443 else: |
425 else: |
444 form = CreateTextbookForm() |
426 form = taskapp_forms.CreateTextbookForm() |
445 context.update({"form": form}) |
427 context.update({"form": form}) |
446 return render_to_response("task/create_textbook.html", context) |
428 return shortcuts.render_to_response("task/create_textbook.html", context) |
447 |
429 |
448 def view_textbook(request, task_id): |
430 def view_textbook(request, task_id): |
449 |
431 |
450 textbook = getTextBook(task_id) |
432 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
451 chapters = textbook.chapters.all() |
433 chapters = textbook.chapters.all() |
452 |
434 |
453 user = request.user |
435 user = request.user |
454 |
436 |
455 context = {"user": user, |
437 context = {"user": user, |
456 "textbook": textbook, |
438 "textbook": textbook, |
457 "chapters": chapters, |
439 "chapters": chapters, |
458 } |
440 } |
459 |
441 |
460 if not user.is_authenticated(): |
442 if not user.is_authenticated(): |
461 return render_to_response("task/view_textbook.html", context) |
443 return shortcuts.render_to_response("task/view_textbook.html", context) |
462 |
444 |
463 profile = user.get_profile() |
445 profile = user.get_profile() |
464 |
446 |
465 context.update({"profile": profile, |
447 context.update({"profile": profile, |
466 "textbook": textbook, |
448 "textbook": textbook, |
474 can_approve = True if profile.rights in ["MG", "DC"] and \ |
456 can_approve = True if profile.rights in ["MG", "DC"] and \ |
475 textbook.status == "UP" else False |
457 textbook.status == "UP" else False |
476 |
458 |
477 context.update({"can_edit": can_edit, |
459 context.update({"can_edit": can_edit, |
478 "can_approve": can_approve}) |
460 "can_approve": can_approve}) |
479 return render_to_response("task/view_textbook.html", context) |
461 return shortcuts.render_to_response("task/view_textbook.html", context) |
480 |
462 |
481 def browse_textbooks(request): |
463 def browse_textbooks(request): |
482 |
464 |
483 user = request.user |
465 user = request.user |
484 |
466 |
485 open_textbooks = TextBook.objects.filter(status="OP").\ |
467 open_textbooks = taskapp_models.TextBook.objects.filter(status="OP").\ |
486 order_by("creation_datetime") |
468 order_by("creation_datetime") |
487 comp_textbooks = TextBook.objects.filter(status="CM").\ |
469 comp_textbooks = taskapp_models.TextBook.objects.filter(status="CM").\ |
488 order_by("creation_datetime") |
470 order_by("creation_datetime") |
489 context = {"user": user, |
471 context = {"user": user, |
490 "open_textbooks": open_textbooks, |
472 "open_textbooks": open_textbooks, |
491 "comp_textbooks": comp_textbooks, |
473 "comp_textbooks": comp_textbooks, |
492 } |
474 } |
493 |
475 |
494 if user.is_authenticated() and user.get_profile().rights in ["DC", "MG"]: |
476 if user.is_authenticated() and user.get_profile().rights in ["DC", "MG"]: |
495 unpub_textbooks = TextBook.objects.filter(status="UP") |
477 unpub_textbooks = taskapp_models.TextBook.objects.filter(status="UP") |
496 |
478 |
497 context.update({"unpub_textbooks": unpub_textbooks}) |
479 context.update({"unpub_textbooks": unpub_textbooks}) |
498 |
480 |
499 return render_to_response("task/browse_textbooks.html", context) |
481 return shortcuts.render_to_response("task/browse_textbooks.html", context) |
500 |
482 |
501 @login_required |
483 @login_required |
502 def edit_textbook(request, task_id): |
484 def edit_textbook(request, task_id): |
503 |
485 |
504 user = request.user |
486 user = request.user |
505 profile = user.get_profile() |
487 profile = user.get_profile() |
506 |
488 |
507 textbook = getTextBook(task_id) |
489 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
508 textbook_url = reverse( |
490 textbook_url = reverse( |
509 'view_textbook', kwargs={'task_id': textbook.id}) |
491 'view_textbook', kwargs={'task_id': textbook.id}) |
510 |
492 |
511 can_edit = True if user == textbook.created_by and textbook.status == "UP"\ |
493 can_edit = True if user == textbook.created_by and textbook.status == "UP"\ |
512 else False |
494 else False |
520 } |
502 } |
521 |
503 |
522 context.update(csrf(request)) |
504 context.update(csrf(request)) |
523 |
505 |
524 if request.method == "POST": |
506 if request.method == "POST": |
525 form = EditTextbookForm(request.POST, instance=textbook) |
507 form = taskapp_forms.EditTextbookForm(request.POST, instance=textbook) |
526 if form.is_valid(): |
508 if form.is_valid(): |
527 form.save() |
509 form.save() |
528 return redirect(textbook_url) |
510 return shortcuts.redirect(textbook_url) |
529 else: |
511 else: |
530 context.update({"form": form}) |
512 context.update({"form": form}) |
531 return render_to_response("task/edit_textbook.html", context) |
513 return shortcuts.render_to_response("task/edit_textbook.html", context) |
532 else: |
514 else: |
533 form = EditTextbookForm(instance=textbook) |
515 form = taskapp_forms.EditTextbookForm(instance=textbook) |
534 context.update({"form": form}) |
516 context.update({"form": form}) |
535 return render_to_response("task/edit_textbook.html", context) |
517 return shortcuts.render_to_response("task/edit_textbook.html", context) |
536 |
518 |
537 @login_required |
519 @login_required |
538 def claim_task(request, task_id): |
520 def claim_task(request, task_id): |
539 |
521 |
540 claim_url = "/task/claim/task_id=%s"%task_id |
522 claim_url = "/task/claim/task_id=%s"%task_id |
541 task = getTask(task_id) |
523 task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id) |
542 |
524 |
543 if task.status == "UP": |
525 if task.status == "UP": |
544 raise Http404 |
526 raise Http404 |
545 |
527 |
546 user = request.user |
528 user = request.user |
571 "task_claimable": task_claimable, |
553 "task_claimable": task_claimable, |
572 "can_claim": can_claim, |
554 "can_claim": can_claim, |
573 "old_claims": old_claims}) |
555 "old_claims": old_claims}) |
574 |
556 |
575 if request.method == "POST" and can_claim: |
557 if request.method == "POST" and can_claim: |
576 form = ClaimTaskForm(request.POST) |
558 form = taskapp_forms.ClaimTaskForm(request.POST) |
577 if form.is_valid(): |
559 if form.is_valid(): |
578 data = form.cleaned_data.copy() |
560 data = form.cleaned_data.copy() |
579 data.update({"uniq_key": make_key(TaskClaim), |
561 data.update({"task": task, |
580 "task": task, |
|
581 "claim_datetime": datetime.now(), |
562 "claim_datetime": datetime.now(), |
582 "claimed_by": user,}) |
563 "claimed_by": user,}) |
583 new_claim = TaskClaim(**data) |
564 new_claim = taskapp_models.TaskClaim(**data) |
584 new_claim.save() |
565 new_claim.save() |
585 |
566 |
586 task.claimed_users.add(user) |
567 task.claimed_users.add(user) |
587 task.save() |
568 task.save() |
588 |
569 |
589 return redirect(claim_url) |
570 return shortcuts.redirect(claim_url) |
590 |
571 |
591 else: |
572 else: |
592 context.update({"form": form}) |
573 context.update({"form": form}) |
593 return render_to_response("task/claim.html", context) |
574 return shortcuts.render_to_response("task/claim.html", context) |
594 else: |
575 else: |
595 form = ClaimTaskForm() |
576 form = taskapp_forms.ClaimTaskForm() |
596 context.update({"form": form}) |
577 context.update({"form": form}) |
597 return render_to_response("task/claim.html", context) |
578 return shortcuts.render_to_response("task/claim.html", context) |
598 |
579 |
599 @login_required |
580 @login_required |
600 def select_user(request, task_id): |
581 def select_user(request, task_id): |
601 """ first get the status of the task and then select one of claimed users |
582 """ first get the status of the task and then select one of claimed users |
602 generate list of claimed users by passing it as an argument to a function. |
583 generate list of claimed users by passing it as an argument to a function. |
626 if task_claimed: |
607 if task_claimed: |
627 |
608 |
628 user_list = ((user.id,user.username) for user in claimed_users) |
609 user_list = ((user.id,user.username) for user in claimed_users) |
629 |
610 |
630 if request.method == "POST": |
611 if request.method == "POST": |
631 form = ChoiceForm(user_list, request.POST) |
612 form = taskapp_forms.ChoiceForm(user_list, request.POST) |
632 if form.is_valid(): |
613 if form.is_valid(): |
633 uid = form.cleaned_data['choice'] |
614 uid = form.cleaned_data['choice'] |
634 selected_user = User.objects.get(id=uid) |
615 selected_user = User.objects.get(id=uid) |
635 |
616 |
636 task.selected_users.add(selected_user) |
617 task.selected_users.add(selected_user) |
637 task.claimed_users.remove(selected_user) |
618 task.claimed_users.remove(selected_user) |
638 task.status = "WR" |
619 task.status = "WR" |
639 task.save() |
620 task.save() |
640 |
621 |
641 return redirect(task_url) |
622 return shortcuts.redirect(task_url) |
642 else: |
623 else: |
643 context.update({"form": form}) |
624 context.update({"form": form}) |
644 return render_to_response('task/select_user.html', context) |
625 return shortcuts.render_to_response('task/select_user.html', context) |
645 else: |
626 else: |
646 form = ChoiceForm(user_list) |
627 form = taskapp_forms.ChoiceForm(user_list) |
647 context.update({"form": form}) |
628 context.update({"form": form}) |
648 return render_to_response('task/select_user.html', context) |
629 return shortcuts.render_to_response('task/select_user.html', context) |
649 else: |
630 else: |
650 return show_msg(user, 'There are no pending claims for this task', |
631 return show_msg(user, 'There are no pending claims for this task', |
651 task_url, 'view the task') |
632 task_url, 'view the task') |
652 else: |
633 else: |
653 raise Http404 |
634 raise Http404 |
656 def approve_textbook(request, task_id): |
637 def approve_textbook(request, task_id): |
657 |
638 |
658 user = request.user |
639 user = request.user |
659 profile = user.get_profile() |
640 profile = user.get_profile() |
660 |
641 |
661 textbook = getTextBook(task_id) |
642 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
662 |
643 |
663 if profile.rights not in ["MG", "DC"] or textbook.status != "UP": |
644 if profile.rights not in ["MG", "DC"] or textbook.status != "UP": |
664 raise Http404 |
645 raise Http404 |
665 |
646 |
666 context = {"user": user, |
647 context = {"user": user, |
667 "profile": profile, |
648 "profile": profile, |
668 "textbook": textbook, |
649 "textbook": textbook, |
669 } |
650 } |
670 |
651 |
671 return render_to_response("task/confirm_textbook_approval.html", context) |
652 return shortcuts.render_to_response("task/confirm_textbook_approval.html", context) |
672 |
653 |
673 @login_required |
654 @login_required |
674 def approved_textbook(request, task_id): |
655 def approved_textbook(request, task_id): |
675 |
656 |
676 user = request.user |
657 user = request.user |
677 profile = user.get_profile() |
658 profile = user.get_profile() |
678 |
659 |
679 textbook = getTextBook(task_id) |
660 textbook = shortcuts.get_object_or_404(taskapp_models.TextBook, pk=task_id) |
680 |
661 |
681 if profile.rights not in ["MG", "DC"] or textbook.status != "UP": |
662 if profile.rights not in ["MG", "DC"] or textbook.status != "UP": |
682 raise Http404 |
663 raise Http404 |
683 |
664 |
684 textbook.approved_by = user |
665 textbook.approved_by = user |