Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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})
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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})
Exemplo n.º 11
0
    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,
            }
        )