DAMHelper / form /form.py
enricorampazzo's picture
first E2E working implementation
0fadcb9
raw
history blame
No virus
6.09 kB
from pathlib import Path
from typing import TypedDict
from PyPDFForm import PdfWrapper
from utils.date_utils import get_today_date_as_dd_mm_yyyy
from utils.parsing_utils import find_and_parse_date, find_and_parse_phone_number
def build_form_data_from_answers(answers: dict[int, str], categories: list[str], signature: str | None = None):
form_data = {}
for category in categories:
form_data[form_fields_map[category]] = True
form_data[form_fields_map["minor_work"]] = True
form_data[form_fields_map["signed_by"]] = answers[0]
form_data[form_fields_map["community"]] = answers[2]
form_data[form_fields_map["building_name"]] = answers[3]
form_data[form_fields_map["unit_no"]] = answers[4]
form_data[form_fields_map["owner" if "owner" in answers[5].lower() else "tenant"]] = True
form_data[form_fields_map["start_date"]] = find_and_parse_date(answers[6])
form_data[form_fields_map["end_date"]] = find_and_parse_date(answers[7])
form_data[form_fields_map["contact_number"]] = find_and_parse_phone_number(answers[8])
form_data[form_fields_map["contractor_name"]] = answers[9]
form_data[form_fields_map["contractor_contact_number"]] = answers[10]
form_data[form_fields_map["contractor_email"]] = answers[11]
form_data[form_fields_map["email"]] = answers[12]
form_data[form_fields_map["occupant_name"]] = answers[0]
form_data[form_fields_map["signature_date"]] = get_today_date_as_dd_mm_yyyy()
if signature:
form_data[form_fields_map["signature"]] = signature
return form_data
def write_pdf_form(form_data: dict[str, str | bool | int], output_path:Path):
base_form_path = Path(__file__, "..", "form.pdf")
with open(base_form_path, "rb") as blank_form:
filled_form = PdfWrapper(blank_form).fill(form_data)
with open(output_path, "wb+") as filled_form_file:
filled_form_file.write(filled_form.read())
class FormFields(TypedDict, total=True):
start_date: str
end_date: str
signed_by: str
signature_date: str
community: str
email: str
unit_no: str
contact_number: str
building_name: str
contractor_name: str
contractor_email: str
contractor_contact_number: str
occupant_name: str
civil: str
electrical_AC: str
furniture_delivery: str
handyman: str
pest_control: str
sail_shade: str
wardrobes: str
wooden_flooring: str
plumbing_sanitary: str
safety_systems: str
soft_landscaping: str
balcony_tiles: str
bathroom_toilet_refurbish: str
staircase_railing: str
storage_box: str
tiling_works: str
doors_door_frames: str
gypsum_ceiling: str
kitchen_refurbish: str
lights_and_sockets: str
painting_wallpapering: str
seating_area_barbecuing_fountain: str
other_work_checkbox: str
owner: str
tenant: str
signature: str
minor_work: str
form_fields_map: FormFields = {"start_date": "From", "end_date": "to", "signed_by": "name-10",
"signature_date": "From--1", "community": "Name-2", "email": "Name-3",
"unit_no": "Name-4", "contact_number": "Name-5", "building_name": "Name-6",
"contractor_name": "Name-7", "contractor_email": "name-8",
"contractor_contact_number": "name-9", "occupant_name": "name-1",
"other_work": "name-19", "civil": "3", "electrical_AC": "10", "furniture_delivery": "14",
"handyman": "18", "pest_control": "21", "sail_shade": "12", "wardrobes": "16",
"wooden_flooring": "24",
"plumbing_sanitary": "4", "safety_systems": "4", "soft_landscaping": "9",
"balcony_tiles": "13", "bathroom_toilet_refurbish": "20",
"staircase_railing": "17", "storage_box": "11", "tiling_works": "15",
"doors_door_frames": "6", "gypsum_ceiling": "22", "kitchen_refurbish": "7",
"lights_and_sockets": "23", "painting_wallpapering": "19",
"seating_area_barbecuing_fountain": "8",
"other_work_checkbox": "69", "owner": "Check Box4", "tenant": "Check Box3",
"signature": "Signature2", "minor_work": "2"}
work_categories = {"other_work": "other work", "civil": "Civil work, masonry",
"electrical_AC": "electrical / AC / air conditioning", "furniture_delivery": "furniture delivery",
"handyman": "handyman work, repairs, furniture assembly, furniture installation", "pest_control": "pest control",
"sail_shade": "sail shade, curtains", "wardrobes": "wardrobes",
"wooden_flooring": "wooden flooring",
"plumbing_sanitary": "plumbing / sanitary / bathroom works such as repairing a sink, tap, toilet, shower or bathtub",
"safety_systems": "safety systems, surveillance systems installation",
"soft_landscaping": "soft landscaping", "balcony_tiles": "installation and fixing of balcony tiles",
"bathroom_toilet_refurbish": "bathroom or toilet refurbishment or renovation",
"staircase_railing": "staircase rails, handrails", "storage_box": "storage box",
"tiling_works": "tiles installation or repair",
"doors_door_frames": "work related to doors and door frames",
"gypsum_ceiling": "gypsum ceiling installation or maintenance",
"kitchen_refurbish": "kitchen renovation or refurbishment",
"lights_and_sockets": "installation of lights, ceiling lights, power sockets",
"painting_wallpapering": "painting, wallpaper installation",
"seating_area_barbecuing_fountain": "installation or renovation of outdoor structures such as seating area, barbecuing area or fountains"}