def make_dues17_reversal_invoice_pdf(request): """ This view checks supplied information (in URL) against info in database -- especially the invoice number -- and conditionally returns - an error message or - a PDF """ token = request.matchdict['code'] invoice_number = request.matchdict['no'] try: member = C3sMember.get_by_dues17_token(token) assert member is not None assert member.dues17_token == token except AssertionError: request.session.flash( u"This member and token did not match!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) try: invoice = Dues17Invoice.get_by_invoice_no(invoice_number) assert invoice is not None except AssertionError: request.session.flash( u"No invoice found!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # sanity check: invoice token must match with token try: assert (invoice.token == token) except AssertionError: request.session.flash( u"Token did not match!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # sanity check: reversal invoice token must be reversal try: assert (invoice.is_reversal) except AssertionError: request.session.flash( u"No reversal invoice found!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # return a pdf file pdf_file = make_reversal_pdf_pdflatex(member, invoice) response = Response(content_type='application/pdf') pdf_file.seek(0) # rewind to beginning response.app_iter = open(pdf_file.name, "r") return response
def make_dues17_invoice_no_pdf(request): """ Create invoice PDFs on-the-fly. This view checks supplied information (in URL) against info in database and returns - an error message OR - a PDF as receipt === =========================================================== URL http://app:port/dues_invoice_no/EMAIL/CAQJGCGUFW/C3S-dues17-0001.pdf === =========================================================== """ token = request.matchdict['code'] invoice_number = request.matchdict['i'] try: member = C3sMember.get_by_dues17_token(token) assert member is not None assert member.dues17_token == token except AssertionError: request.session.flash( u"This member and token did not match!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) try: invoice = Dues17Invoice.get_by_invoice_no(invoice_number.lstrip('0')) assert invoice is not None except AssertionError: request.session.flash( u"No invoice found!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # sanity check: invoice token must match with token try: assert (invoice.token == token) except AssertionError: request.session.flash( u"Token did not match!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # sanity check: invoice must not be reversal try: assert (not invoice.is_reversal) except AssertionError: request.session.flash( u"Token did not match!", 'message_to_user' # message queue for user ) return HTTPFound(request.route_url('error_page')) # return a pdf file pdf_file = make_invoice_pdf_pdflatex(member, invoice) response = Response(content_type='application/pdf') pdf_file.seek(0) # rewind to beginning response.app_iter = open(pdf_file.name, "r") return response