def post(self, request: Request, name=None): tpl_name = "survey-{}.html".format(name) # return HttpResponseBadRequest('Unknown survey name') responses = json.loads(request.POST["data"]) # responses = {'question1': 'test value'} template = get_template(tpl_name) html_content = template.render(responses) if name == "primary": instruct_template = get_template("instructions-primary.html") instruct_html = instruct_template.render(responses) docs = (instruct_html, ) + (html_content, ) * 4 pdf_content = render_pdf(*docs) else: pdf_content = render_pdf(html_content) response = HttpResponse(content_type="application/pdf") response["Content-Disposition"] = 'attachment; filename="report.pdf"' response.write(pdf_content) return response
def generate_pdf(data): # Add date to the payload # today = date.today().strftime('%d-%b-%Y') # data['date'] = today # ####################### # # Notice To Disputant - Response # # # # Make the Violation Ticket Number all upper case # try: # x = data['ticketNumber']['prefix'] # data['ticketNumber']['prefix'] = x.upper() # except KeyError: # pass # # Format the data more user friendly # try: # x = datetime.strptime(data['ticketDate'],'%Y-%m-%d') # data['ticketDate'] = x.strftime('%d-%b-%Y') # except KeyError: # pass template = "notice-to-disputant-response.html" template = get_template(template) html_content = template.render(data) pdf_content = render_pdf(html_content) return pdf_content
def get(self, request, *args, **kwargs): pdf_content = render_pdf("<html>hello world</html>") response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' response.write(pdf_content) return response
def post(self, request, name=None): tpl_name = 'survey-{}.html'.format(name) #return HttpResponseBadRequest('Unknown survey name') # tracking code is used by forestry job placement workers to track submissions # this code is also sent back to the user so that they can refer to it later tracking_code = generateCompressedTrackingCode() # where the pdf is sent too email_inbox = os.getenv('EMAIL_INBOX') email_from_address = os.getenv('EMAIL_SENDER') subject = getConfirmationMessageSubject(tracking_code) messageBody = getConfirmationMessageBody() email = EmailMessage(subject, messageBody, email_from_address, [email_inbox]) responses = json.loads(request.body)['data'] # responses = {'question1': 'test value'} template = get_template(tpl_name) html_content = template.render(responses) if name == 'primary': docs = (html_content, ) pdf_content = render_pdf(*docs) else: pdf_content = render_pdf(html_content) file_name = getPDFFilename(tracking_code) print("Created PDF") print(file_name) email.attach(file_name, pdf_content, 'application/pdf') print("Creating Raw Data File") json_filename = 'survey-raw-data.txt' # merge survey data with tracking code survey_with_tracking_code = mergeDicts( responses, {'tracking_code': tracking_code}) # attach raw data email.attach(json_filename, json.dumps(survey_with_tracking_code), 'text/plain') # send email email.send() return JsonResponse({'ok': True, 'tracking_code': tracking_code})
def form(request): """ request.method -> Look for POST request.GET['name'] -> Care about params???? request.POST['data'] -> Here is the data """ data = json.loads(request.body) name = request.GET["name"] template = "{}.html".format(name) # Add date to the payload today = date.today().strftime("%d-%b-%Y") data["date"] = today ####################### # Notice To Disputant - Response # # Make the Violation Ticket Number all upper case try: x = data["ticketNumber"]["prefix"] data["ticketNumber"]["prefix"] = x.upper() except KeyError: pass # Format the date to be more user friendly try: x = datetime.strptime(data["ticketDate"], "%Y-%m-%d") data["ticketDate"] = x.strftime("%d-%b-%Y") except KeyError: pass # Format the date of birth to be more user friendly try: x2 = datetime.strptime(data["disputantDOB"], "%Y-%m-%d") data["disputantDOB"] = x2.strftime("%d-%b-%Y") except KeyError: pass ####################### template = get_template(template) html_content = template.render(data) pdf_content = render_pdf(html_content) response = HttpResponse(content_type="application/pdf") response["Content-Disposition"] = 'attachment; filename="report.pdf"' response.write(pdf_content) return response
def form(request): """ request.method -> Look for POST request.GET['name'] -> Care about params???? request.POST['data'] -> Here is the data """ font_config = FontConfiguration() # Use the BCSans font as the default. css = CSS(string=''' @font-face { font-family: 'BCSans'; font-style: normal; src: url('https://cdn.jsdelivr.net/npm/@bcgov/[email protected]/fonts/BCSans-Regular.woff') format('woff'); } @font-face { font-family: 'BCSans'; font-style: italic; src: url('https://cdn.jsdelivr.net/npm/@bcgov/[email protected]/fonts/BCSans-Italic.woff') format('woff'); } @font-face { font-family: 'BCSans'; font-weight: 700; src: url('https://cdn.jsdelivr.net/npm/@bcgov/[email protected]/fonts/BCSans-Bold.woff') format('woff'); } @font-face { font-family: 'BCSans'; font-style: italic; font-weight: 700; src: url('https://cdn.jsdelivr.net/npm/@bcgov/[email protected]/fonts/BCSans-BoldItalic.woff') format('woff'); }''', font_config=font_config) data = json.loads(request.body) name = request.GET['name'] template = '{}.html'.format(name) template = get_template(template) html_content = template.render(data) pdf_content = render_pdf(html_content) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' response.write(pdf_content, stylesheet[css], font_config=font_config) return response
def post(self, request, name=None): tpl_name = 'survey-{}.html'.format(name) #return HttpResponseBadRequest('Unknown survey name') responses = json.loads(request.POST['data']) # responses = {'question1': 'test value'} template = get_template(tpl_name) html_content = template.render(responses) pdf_content = render_pdf(html_content) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' response.write(pdf_content) return response
def form(request): """ request.method -> Look for POST request.GET['name'] -> Care about params???? request.POST['data'] -> Here is the data """ data = json.loads(request.body) name = request.GET['name'] template = '{}.html'.format(name) template = get_template(template) html_content = template.render(data) pdf_content = render_pdf(html_content) response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="report.pdf"' response.write(pdf_content) return response
def generate_pdf(data): template = "notice-to-disputant-response.html" template = get_template(template) html_content = template.render(data) pdf_content = render_pdf(html_content) return pdf_content
def post(self, request: Request, name=None): check_captcha = grecaptcha_verify(request) if not check_captcha["status"]: return HttpResponseForbidden(content_type="text/plain", content=check_captcha["message"]) request.session["file_guid"] = None ############################################################# # Adding different pdf form logic: Jul 3, 2020 data = request.data name = request.query_params.get("name") # Set pdf filename if name == "violation-ticket-statement-and-written-reasons": filename = "Reasons-to-Reduce-Traffic-Ticket.pdf" elif name == "notice-to-disputant-response": filename = "Traffic-Hearing-Choice.pdf" else: filename = "Ticket-Response.pdf" template = "{}.html".format(name) # These are the current allowed forms (whitelist) possibleTemplates = [ "notice-to-disputant-response", "violation-ticket-statement-and-written-reasons", ] # If not one of our two forms... reject. if name not in possibleTemplates: return HttpResponseBadRequest("No valid form specified") transformed_data = transform(data) template = get_template(template) html_content = template.render(transformed_data) ############################################################# disputant = data.get("disputantName", {}) email = data.get("disputantEmail") result_bin = json.dumps(data).encode("ascii") (key_id, result_enc) = settings.ENCRYPTOR.encrypt(result_bin) response = TicketResponse( first_name=disputant.get("first"), middle_name=disputant.get("middle"), last_name=disputant.get("last"), result=result_enc, key_id=key_id, ticket_number=data.get("ticketNumber"), ticket_date=data.get("ticketDate"), hearing_location_id=data.get("hearingLocation"), hearing_attendance=data.get("hearingAttendance"), dispute_type=data.get("disputeType"), pdf_filename=filename) check_required = [ "first_name", "last_name", "ticket_number", "ticket_date", "hearing_location_id", ] for fname in check_required: if not getattr(response, fname): return HttpResponseBadRequest("Missing: " + fname) # Generate/Save the pdf to DB and generate email with pdf attached email_sent = False pdf_response = None try: pdf_content = render_pdf(html_content) if pdf_content: (pdf_key_id, pdf_content_enc) = settings.ENCRYPTOR.encrypt(pdf_content) pdf_response = PreparedPdf(data=pdf_content_enc, key_id=pdf_key_id) pdf_response.save() response.prepared_pdf_id = pdf_response.pk response.printed_date = timezone.now() response.save() request.session["file_guid"] = str(response.file_guid) if email and pdf_content: email_res = self.prepared_email(email, pdf_content, filename) if email_res: email_msg_id = email_res['messages'][0]['msgId'] response.emailed_date = timezone.now() response.email_message_id = email_msg_id email_sent = True response.save() except Exception as exception: LOGGER.exception("Pdf / Email generation error %s", exception) response.save() raise return Response({"id": response.pk, "email-sent": email_sent})
def post(self, request: Request, name=None): check_captcha = grecaptcha_verify(request) if not check_captcha["status"]: return HttpResponseForbidden(text=check_captcha["message"]) ############################################################# # Adding different pdf form logic: Jul 3, 2020 data = copy.deepcopy(request.data) name = request.GET['name'] template = '{}.html'.format(name) # Add date to the payload today = date.today().strftime('%d-%b-%Y') data['date'] = today ####################### # Notice To Disputant - Response # # Make the Violation Ticket Number all upper case try: x = data['ticketNumber']['prefix'] data['ticketNumber']['prefix'] = x.upper() except KeyError: pass # Format the date to be more user friendly try: x = datetime.strptime(data['ticketDate'], '%Y-%m-%d') data['ticketDate'] = x.strftime('%d-%b-%Y') except KeyError: pass # Format the date of birth to be more user friendly try: x2 = datetime.strptime(data['disputantDOB'], '%Y-%m-%d') data['disputantDOB'] = x2.strftime('%d-%b-%Y') except KeyError: pass ####################### template = get_template(template) html_content = template.render(data) pdf_content2 = render_pdf(html_content) # XXX: Just for testing # response = HttpResponse(content_type='application/pdf') # response['Content-Disposition'] = 'attachment; filename="report.pdf"' # response.write(pdf_content) # return response ############################################################# result = request.data disputant = result.get("disputantName", {}) # address = result.get("disputantAddress", {}) ticketNumber = result.get("ticketNumber", {}) ticketNumber = str(ticketNumber.get("prefix")) + str(ticketNumber.get("suffix")) result_bin = json.dumps(result).encode("ascii") (key_id, result_enc) = settings.ENCRYPTOR.encrypt(result_bin) response = TicketResponse( first_name=disputant.get("first"), middle_name=disputant.get("middle"), last_name=disputant.get("last"), result=result_enc, key_id=key_id, ticket_number=ticketNumber.upper(), ticket_date=result.get("ticketDate"), hearing_location_id=result.get("hearingLocation"), hearing_attendance=result.get("hearingAttendance"), dispute_type=result.get("disputeType"), ) check_required = [ "first_name", "last_name", "ticket_number", "ticket_date", "hearing_location_id" ] for fname in check_required: if not getattr(response, fname): return HttpResponseBadRequest("Missing: " + fname) # check terms acceptance? # if not result.get("disputantAcknowledgement"): # return HttpResponseBadRequest() # Generate/Save the pdf to DB and generate email with pdf attached email_sent = False pdf_response = None try: if result: pdf_content = generate_pdf(result) if pdf_content: (pdf_key_id, pdf_content_enc) = settings.ENCRYPTOR.encrypt( pdf_content ) pdf_response = PreparedPdf(data=pdf_content_enc, key_id=pdf_key_id) pdf_response.save() response.prepared_pdf_id = pdf_response.pk response.save() request.session['file_guid'] = str(response.file_guid) email = result.get("disputantEmail") if email and pdf_content: send_email(email, pdf_content) response.emailed_date = timezone.now() email_sent = True response.save() except Exception as exception: LOGGER.exception("Pdf / Email generation error", exception) return Response( { "id": response.pk, "email-sent": email_sent, } )