Skip to content

Commit

Permalink
Add certificate of mailing form
Browse files Browse the repository at this point in the history
  • Loading branch information
KentShikama committed Feb 3, 2022
1 parent 0d2fee2 commit eae0bbb
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 8 deletions.
Binary file added src/backend/expungeservice/files/certificate.pdf
Binary file not shown.
62 changes: 56 additions & 6 deletions src/backend/expungeservice/form_filling.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,21 @@ class FormData:
da_address: str


@dataclass
class CertificateFormData:
full_name: str
date_of_birth: str
phone_number: str
mailing_address: str
city: str
state: str
zip_code: str

case_name_1: str
case_name_2: str
case_name_3: str


class FormFilling:
@staticmethod
def build_zip(record_summary: RecordSummary, user_information: Dict[str, str]) -> Tuple[str, str]:
Expand All @@ -82,9 +97,49 @@ def build_zip(record_summary: RecordSummary, user_information: Dict[str, str]) -
trailer.Root.AcroForm = pdf.Root.AcroForm
writer.write(file_path, trailer=trailer)
zipfile.write(file_path, file_name)

# TODO: Extract to method
pdf = FormFilling._build_certificate_of_mailing_pdf(record_summary, user_information)
file_name = f"certificate_of_mailing.pdf"
file_path = path.join(temp_dir, file_name)
writer = PdfWriter()
writer.addpages(pdf.pages)
trailer = writer.trailer
trailer.Root.AcroForm = pdf.Root.AcroForm
writer.write(file_path, trailer=trailer)
zipfile.write(file_path, file_name)

zipfile.close()
return zip_path, zip_name

@staticmethod
def _build_certificate_of_mailing_pdf(record_summary: RecordSummary, user_information: Dict[str, str]) -> PdfReader:
case_names = list(set([case.summary.name for case in record_summary.record.cases]))
case_name_1 = case_names[0] if len(case_names) > 0 else ""
case_name_2 = case_names[1] if len(case_names) > 1 else ""
case_name_3 = case_names[2] if len(case_names) > 2 else ""

form_data_dict = {
**user_information,
"case_name_1": case_name_1,
"case_name_2": case_name_2,
"case_name_3": case_name_3,
}
form = from_dict(data_class=CertificateFormData, data=form_data_dict)
pdf_path = path.join(Path(__file__).parent, "files", f"certificate.pdf")
pdf = PdfReader(pdf_path)
for field in pdf.Root.AcroForm.Fields:
field_name = field.T.lower().replace(" ", "_").replace("(", "").replace(")", "")
field_value = getattr(form, field_name)
field.V = field_value
for page in pdf.pages:
annotations = page.get("/Annots")
if annotations:
for annotation in annotations:
annotation.update(PdfDict(AP=""))
pdf.Root.AcroForm.update(PdfDict(NeedAppearances=PdfObject("true")))
return pdf

@staticmethod
def _add_warnings(writer: PdfWriter, warnings: List[str]):
if warnings:
Expand Down Expand Up @@ -177,8 +232,7 @@ def _build_pdf_for_eligible_case(
"da_address": da_address,
}
form = from_dict(data_class=FormData, data=form_data_dict)
location = case.summary.location.lower()
pdf_path = FormFilling._build_pdf_path(location, convictions)
pdf_path = path.join(Path(__file__).parent, "files", f"oregon.pdf")
file_name = os.path.basename(pdf_path)
pdf = PdfReader(pdf_path)
for field in pdf.Root.AcroForm.Fields:
Expand Down Expand Up @@ -225,10 +279,6 @@ def _compute_field_max_length(field: PdfDict) -> int:
width = float(field.Rect[2]) - float(field.Rect[0])
return int(width * CHARACTER_WIDTH)

@staticmethod
def _build_pdf_path(location: str, convictions: List[Charge]) -> str:
return path.join(Path(__file__).parent, "files", f"oregon.pdf")

@staticmethod
def _build_da_address(location: str) -> str:
ADDRESSES = {
Expand Down
5 changes: 3 additions & 2 deletions src/backend/tests/test_form_filling.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,6 @@ def test_normal_conviction_uses_multnomah_conviction_form():
with ZipFile(zip_path, "r") as zip_ref:
zip_ref.extractall(temp_dir)
for _root, _dir, files in os.walk(temp_dir):
assert len(files) == 1
assert "oregon" in files[0]
assert len(files) == 2
assert "certificate_of_mailing" in files[0]
assert "oregon" in files[1]

0 comments on commit eae0bbb

Please sign in to comment.