Changeset feed77c
- Timestamp:
- Jul 9, 2014, 12:18:31 AM (10 years ago)
- Branches:
- master
- Children:
- 1a8ef12
- Parents:
- 922e0e5
- git-author:
- Alex Dehnert <adehnert@…> (07/09/14 00:17:52)
- git-committer:
- Alex Dehnert <adehnert@…> (07/09/14 00:18:31)
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
INSTALL.rst
rcabf7ac rfeed77c 39 39 - ``ADMINS`` 40 40 - Database configuration 41 - ``SERVER_EMAIL`` 41 - ``SERVER_EMAIL`` and ``DEFAULT_FROM_EMAIL`` 42 42 - ``SITE_URL_BASE`` -- full URL (including protocol and hostname; used in emails) 43 43 - Any other settings you want -
client/downloader.py
rf8a5e4b rfeed77c 36 36 37 37 def getLaTeX(br, latex_file, ): 38 br.open(baseurl + 'vouchers/generate/ ')38 br.open(baseurl + 'vouchers/generate/vouchers.tex') 39 39 if br.viewing_html(): 40 40 print br.response().get_data() -
remit/settings/__init__.py
r922e0e5 rfeed77c 16 16 ) 17 17 SERVER_EMAIL = 'remit-default-addr@mit.edu' 18 DEFAULT_FROM_EMAIL = 'remit-default-addr@mit.edu' 18 19 19 20 GROUP_NAME = 'Remit' -
remit/vouchers/admin.py
r7ee21d8 rfeed77c 28 28 29 29 class RFPAdmin(admin.ModelAdmin): 30 list_display = ('name', 'rfp_number', 'rfp_submit_time', 'payee_type', 'payee_name', 'item_amount', 'item_co', 'item_gl') 30 list_display = ('pk', 'name', 'rfp_number', 'rfp_submit_time', 'payee_type', 'payee_name', 'item_amount', 'item_co', 'item_gl', 'documentation', ) 31 list_display_links = ('pk', 'name', ) 31 32 32 33 admin.site.register(vouchers.models.ReimbursementRequest, ReimbursementRequestAdmin) -
remit/vouchers/models.py
r922e0e5 rfeed77c 111 111 rfp.item_amount = self.amount 112 112 rfp.item_desc = self.description 113 rfp.documentation = self.documentation 113 114 rfp.save() 114 115 self.create_transfers() … … 170 171 processed = models.BooleanField(default=False) 171 172 process_time = models.DateTimeField(blank=True, null=True,) 172 documentation = models.ForeignKey('Documentation', blank=True,null=True, )173 documentation = models.ForeignKey('Documentation', null=True, ) 173 174 174 175 def mailing_addr_lines(self): … … 226 227 227 228 def fill_addr(self, address): 229 if address == '': 230 return 228 231 match = self.addr_regex.match(address) 229 232 assert match != None -
remit/vouchers/urls.py
r2b31097 rfeed77c 9 9 (r'submit/(?P<term>[\d\w-]+)/(?P<committee>[\d\w-]+)/(?P<recipient_type>mit|other)/', 'vouchers.views.submit_request', ), 10 10 url(r'review/(?P<object_id>\d+)/', 'vouchers.views.review_request', name='review_request', ), 11 url(r'generate/', 'vouchers.views.generate_vouchers', name='generate_vouchers', ), 11 url(r'^generate/vouchers.tex$', 'vouchers.views.generate_vouchers', name='generate_vouchers', ), 12 url(r'^generate/rfps.csv$', 'vouchers.views.generate_rfp_specs', name='generate_rfp_specs', ), 12 13 ) -
remit/vouchers/views.py
r638b547 rfeed77c 8 8 from django.shortcuts import render_to_response, get_object_or_404 9 9 from django.template import RequestContext 10 from django.http import Http 404, HttpResponseRedirect10 from django.http import HttpResponse, Http404, HttpResponseRedirect, HttpResponseNotAllowed 11 11 import django.forms 12 12 from django.forms import ChoiceField, Form, ModelForm, ModelChoiceField 13 13 from django.core.urlresolvers import reverse 14 from django.core.mail import send_mail, mail_admins 14 from django.core.mail import send_mail, mail_admins, EmailMessage 15 15 from django.db.models import Q 16 16 from django.template import Context, Template 17 17 from django.template.loader import get_template 18 18 from django.views.decorators.csrf import ensure_csrf_cookie 19 20 import csv 21 import datetime 19 22 import decimal 20 23 … … 347 350 return response 348 351 352 # not a view 353 def generate_rfp_specs_download(http_request): 354 # Download unprocessed RFPs 355 rfps = vouchers.models.RFP.objects.all() 356 rfps = rfps.filter(rfp_number=None) 357 response = HttpResponse(mimetype='text/csv') 358 writer = csv.writer(response) 359 cols = ['id', 'name', 360 'payee.mit', 'payee.name', 361 'addr.street', 'addr.city', 'addr.state', 'addr.postal', 362 'item.date', 'item.gl', 'item.co', 'item.amoumnt', 'item.desc', 363 'documentation', 364 ] 365 writer.writerow(cols) 366 for rfp in rfps: 367 item_date = rfp.item_date.strftime("%m/%d/%Y") 368 docs = http_request.build_absolute_uri(rfp.documentation.backing_file.url) 369 writer.writerow((rfp.pk, rfp.name, 370 rfp.payee_type == 'mit', rfp.payee_name, 371 rfp.addr_street, rfp.addr_city, rfp.addr_state, rfp.addr_zip, 372 item_date, rfp.item_gl, rfp.item_co, rfp.item_amount, rfp.item_desc, 373 docs, 374 )) 375 376 # Send mail 377 tmpl = get_template('vouchers/emails/rfps_download.txt') 378 ctx = Context({ 379 'user': http_request.user, 380 'rfps': rfps, 381 }) 382 body = tmpl.render(ctx) 383 mail_admins( 384 'RFPs downloaded: %d by %s' % ( 385 len(rfps), 386 http_request.user, 387 ), 388 body, 389 ) 390 return response 391 392 def send_rfpized_email(rfp): 393 # Should send mail to the submitter, including a coversheet to print and 394 # give to SAO. The attach() method of 395 # https://docs.djangoproject.com/en/dev/topics/email/#emailmessage-objects 396 # may be useful for the coversheet. 397 tmpl = get_template('vouchers/emails/rfp_submitted.txt') 398 ctx = Context({ 399 'rfp': rfp, 400 }) 401 body = tmpl.render(ctx) 402 to = [ rr.check_to_email for rr in rfp.reimbursementrequest_set.all() ] 403 cc = [addr for name, addr in settings.ADMINS] 404 mail = EmailMessage( 405 subject="%sRFP submitted" % (settings.EMAIL_SUBJECT_PREFIX, ), 406 body=body, to=to, cc=cc, 407 ) 408 mail.send() 409 410 # not a view 411 def generate_rfp_specs_results(http_request): 412 reader = csv.DictReader(http_request) 413 rfps = vouchers.models.RFP.objects 414 time = datetime.datetime.now() 415 results = [] 416 dups = 0 417 for line in reader: 418 print line 419 rfp = rfps.get(pk=int(line['id'])) 420 if not rfp.rfp_number: 421 rfp.rfp_number = line['rfp_number'] 422 rfp.rfp_submit_time = time 423 rfp.save() 424 msg = "updated" 425 send_rfpized_email(rfp) 426 else: 427 msg = "additional number: %s" % (line['rfp_number'], ) 428 dups += 1 429 results.append((rfp, msg)) 430 431 # Send mail 432 tmpl = get_template('vouchers/emails/rfps_updated.txt') 433 ctx = Context({ 434 'user': http_request.user, 435 'results': results, 436 'dups': dups, 437 }) 438 body = tmpl.render(ctx) 439 mail_admins( 440 'RFPs created: %d (%d duplicates) by %s' % ( 441 len(results), dups, 442 http_request.user, 443 ), 444 body, 445 ) 446 # For lack of something better to return, just print the email 447 response = HttpResponse(body) 448 return response 449 450 #@user_passes_test(lambda u: u.has_perm('vouchers.generate_vouchers')) 451 @ensure_csrf_cookie 452 def generate_rfp_specs(http_request): 453 if http_request.method == 'GET': 454 return generate_rfp_specs_download(http_request) 455 elif http_request.method == 'POST': 456 # Upload RFP processing results 457 return generate_rfp_specs_results(http_request) 458 else: 459 content = "Expected GET (download unprocessed RFPs) or POST (upload results)" 460 return HttpResponseNotAllowed(["GET", "POST"], content=content) 461 349 462 def get_related_requests_qobj(user, ): 350 463 return Q(submitter=user.username) | Q(check_to_email=user.email)
Note: See TracChangeset
for help on using the changeset viewer.