Spaces:
Sleeping
Sleeping
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__).parent | |
base_form_path = base_form_path.joinpath("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"} | |