Changeset 6b8d891 for treasury/vouchers/views.py
- Timestamp:
- Jan 7, 2010, 3:38:24 AM (16 years ago)
- Branches:
- master, client
- Children:
- 42d0bf6
- Parents:
- 169d7b5
- git-author:
- Alex Dehnert <adehnert@…> (01/07/10 03:38:24)
- git-committer:
- Alex Dehnert <adehnert@…> (01/07/10 03:38:24)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
treasury/vouchers/views.py
r269db50 r6b8d891 1 1 import vouchers.models 2 2 from finance_core.models import BudgetTerm, BudgetArea 3 from vouchers.models import ReimbursementRequest 3 4 4 from django.shortcuts import render_to_response 5 from django.http import Http404 5 from django.contrib.auth.decorators import user_passes_test 6 from django.shortcuts import render_to_response, get_object_or_404 7 from django.http import Http404, HttpResponseRedirect 8 from django.forms import ModelForm 9 from django.forms import ModelChoiceField 10 from django.core.urlresolvers import reverse 6 11 7 def submit_request(request, term, committee): 8 try: 9 term_obj = BudgetTerm.objects.get(slug=term) 10 except BudgetTerm.DoesNotExist: 11 raise Http404 12 try: 13 comm_obj = BudgetArea.objects.get(pk=committee) 14 except BudgetArea.DoesNotExist: 15 raise Http404 12 class RequestForm(ModelForm): 13 class Meta: 14 model = ReimbursementRequest 15 fields = ( 16 'name', 17 'description', 18 'amount', 19 'budget_area', 20 'check_to_name', 21 'check_to_email', 22 'check_to_addr', 23 ) 24 25 class BudgetAreaField(ModelChoiceField): 26 def __init__(self, base_area, *args, **kargs): 27 self.strip_levels = base_area.depth 28 areas = base_area.get_descendants() 29 ModelChoiceField.__init__(self, queryset=areas, 30 help_text='In general, this should be a fully indented budget area, not one with children', 31 *args, **kargs) 32 33 def label_from_instance(self, obj,): 34 return obj.indented_name(strip_levels=self.strip_levels) 35 36 @user_passes_test(lambda u: u.is_authenticated()) 37 def submit_request(http_request, term, committee): 38 term_obj = get_object_or_404(BudgetTerm, slug=term) 39 comm_obj = get_object_or_404(BudgetArea, pk=committee) 40 41 new_request = ReimbursementRequest() 42 new_request.submitter = http_request.user.username 43 new_request.budget_term = term_obj 44 45 if http_request.method == 'POST': # If the form has been submitted... 46 form = RequestForm(http_request.POST, instance=new_request) # A form bound to the POST data 47 form.fields['budget_area'] = BudgetAreaField(comm_obj) 48 if form.is_valid(): # All validation rules pass 49 form.save() 50 return HttpResponseRedirect(reverse(review_request, args=[new_request.pk],)) # Redirect after POST 51 else: 52 form = RequestForm(instance=new_request) # An unbound form 53 form.fields['budget_area'] = BudgetAreaField(comm_obj) 16 54 17 55 context = { 18 56 'term':term_obj, 19 57 'comm':comm_obj, 58 'form':form, 20 59 } 21 60 return render_to_response('vouchers/submit.html', context) 61 62 @user_passes_test(lambda u: u.is_authenticated()) 63 def review_request(http_request, object_id): 64 request_obj = get_object_or_404(ReimbursementRequest, pk=object_id) 65 if not (http_request.user.has_perm('vouchers.view_requests') 66 or http_request.user.username == request_obj.submitter): 67 # I'd probably use a 403, but that requires like writing 68 # a new template and stuff 69 # So I'm going to call this "don't leak information" 70 # and let it be 71 raise Http404 72 context = { 73 'rr':request_obj, 74 } 75 return render_to_response('vouchers/ReimbursementRequest_review.html', context) 76
Note: See TracChangeset
for help on using the changeset viewer.