Changeset 6b8d891
- 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)
- Location:
- treasury
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
treasury/templates/vouchers/submit.html
r269db50 r6b8d891 3 3 {% block title %}Submit reimbursement request{% endblock %} 4 4 {% block content %} 5 <p>Term: {{term}}</p> 6 <p>Committee: {{comm}}</p> 5 6 <h2>UA Reimbursement Request Form</h2> 7 8 <form method="post"> 9 <table> 10 <tr> 11 <td></td> 12 <th>You are requesting a reimbursement from:</th> 13 </tr> 14 <tr> 15 <th>Term</th> 16 <td>{{term}}</td> 17 </tr> 18 <tr> 19 <th>Committee</th> 20 <td>{{comm}}</td> 21 </tr> 22 23 <tr> 24 <td></td> 25 <th>Request details:</th> 26 </tr> 27 {{ form.as_table }} 28 <tr><td></td><td><input type='submit' value='Request Reimbursement' /></td></tr> 29 </table> 30 </form> 31 7 32 {% endblock %} -
treasury/vouchers/models.py
r6a867b3 r6b8d891 11 11 check_to_email = models.EmailField(verbose_name="email address for check pickup") 12 12 check_to_addr = models.TextField(blank=True, verbose_name="address for check mailing", help_text="For most requests, this should be blank for pickup in SAO (W20-549)") 13 amount = models.DecimalField(max_digits=7, decimal_places=2 )13 amount = models.DecimalField(max_digits=7, decimal_places=2, help_text='Do not include "$"') 14 14 budget_area = models.ForeignKey(BudgetArea) 15 15 budget_term = models.ForeignKey(BudgetTerm) 16 16 request_time = models.DateTimeField(default=datetime.datetime.now) 17 approval_time = models.DateTimeField(blank=True )18 printing_time = models.DateTimeField(blank=True )19 name = models.CharField(max_length=50, )20 description = models.TextField(blank=True )17 approval_time = models.DateTimeField(blank=True, null=True,) 18 printing_time = models.DateTimeField(blank=True, null=True,) 19 name = models.CharField(max_length=50, verbose_name='short description', ) 20 description = models.TextField(blank=True, verbose_name='long description', ) 21 21 22 22 def __unicode__(self, ): -
treasury/vouchers/urls.py
r269db50 r6b8d891 3 3 4 4 urlpatterns = patterns('', 5 (r'submit/(?P<term>[\d\w-]+)/(?P<committee>[\d\w-]+)/', 'treasury.vouchers.views.submit_request', ) 5 (r'submit/(?P<term>[\d\w-]+)/(?P<committee>[\d\w-]+)/', 'vouchers.views.submit_request', ), 6 (r'review/(?P<object_id>\d+)/', 'vouchers.views.review_request', ), 6 7 ) -
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.