diff --git a/api/rpk-api/firm/contract/print/__init__.py b/api/rpk-api/firm/contract/print/__init__.py index 93b195d..3c63af7 100644 --- a/api/rpk-api/firm/contract/print/__init__.py +++ b/api/rpk-api/firm/contract/print/__init__.py @@ -3,6 +3,7 @@ import os import base64 from uuid import UUID +from beanie import PydanticObjectId from fastapi import APIRouter, HTTPException, Request, Depends from fastapi.responses import HTMLResponse, FileResponse from fastapi.templating import Jinja2Templates @@ -18,24 +19,22 @@ from firm.template.models import ProvisionTemplate from firm.contract.models import ContractDraft, Contract, ContractStatus, replace_variables_in_value -async def build_model(model): +async def build_model(db, model): parties = [] for p in model.parties: party = { - "entity": await Entity.get(p.entity_id), + "entity": await Entity.get(db, p.entity_id), "part": p.part } if p.representative_id: - party['representative'] = await Entity.get(p.representative_id) + party['representative'] = await Entity.get(db, p.representative_id) parties.append(party) - model.parties = parties - provisions = [] for p in model.provisions: if p.provision.type == "template": - provision = await ProvisionTemplate.get(p.provision.provision_template_id) + provision = await ProvisionTemplate.get(db, p.provision.provision_template_id) else: provision = p.provision @@ -43,16 +42,16 @@ async def build_model(model): provision.body = replace_variables_in_value(model.variables, provision.body) provisions.append(provision) - model.provisions = provisions - - model = model.dict() - model['location'] = "Los Santos, SA" - model['date'] = datetime.date(1970, 1, 1) - model['lawyer'] = {'entity_data': { + model_dict = model.dict() + model_dict['parties'] = parties + model_dict['provisions'] = provisions + model_dict['location'] = "Los Santos, SA" + model_dict['date'] = datetime.date(1970, 1, 1) + model_dict['lawyer'] = {'entity_data': { "firstname": "prénom avocat", "lastname": "nom avocat", }} - return model + return model_dict BASE_PATH = Path(__file__).resolve().parent @@ -87,8 +86,14 @@ def retrieve_signature_png(filepath): preview_router = APIRouter() @preview_router.get("/draft/{draft_id}", response_class=HTMLResponse, tags=["Contract Draft"]) -async def preview_draft(draft_id: str, reg=Depends(get_tenant_registry)) -> str: - draft = await build_model(await ContractDraft.get(reg.db, draft_id)) +async def preview_draft(draft_id: PydanticObjectId, reg=Depends(get_tenant_registry)) -> str: + record = await ContractDraft.get(reg.db, draft_id) + if not record: + raise HTTPException( + status_code=404, + detail=f"Contract Draft record not found!" + ) + draft = await build_model(reg.db, record) return await render_print('', draft) @@ -104,7 +109,7 @@ async def preview_contract_by_signature(signature_id: UUID, reg=Depends(get_tena @preview_router.get("/{contract_id}", response_class=HTMLResponse, tags=["Contract"]) -async def preview_contract(contract_id: str, reg=Depends(get_tenant_registry)) -> str: +async def preview_contract(contract_id: PydanticObjectId, reg=Depends(get_tenant_registry)) -> str: contract = await Contract.get(reg.db, contract_id) for p in contract.parties: if p.signature_affixed: @@ -115,7 +120,7 @@ async def preview_contract(contract_id: str, reg=Depends(get_tenant_registry)) - print_router = APIRouter() @print_router.get("/pdf/{contract_id}", response_class=FileResponse, tags=["Contract"]) -async def create_pdf(contract_id: str, reg=Depends(get_tenant_registry)) -> str: +async def create_pdf(contract_id: PydanticObjectId, reg=Depends(get_tenant_registry)) -> str: contract = await Contract.get(reg.db, contract_id) contract_path = "media/contracts/{}.pdf".format(contract_id) if not os.path.isfile(contract_path): @@ -142,7 +147,7 @@ async def create_pdf(contract_id: str, reg=Depends(get_tenant_registry)) -> str: @print_router.get("/opengraph/{signature_id}", response_class=HTMLResponse, tags=["Signature"]) -async def get_signature_opengraph(signature_id: str, request: Request, reg=Depends(get_tenant_registry)) -> str: +async def get_signature_opengraph(signature_id: UUID, request: Request, reg=Depends(get_tenant_registry)) -> str: contract = await Contract.find_by_signature_id(reg.db, signature_id) signature = contract.get_signature(signature_id) template = templates.get_template("opengraph.html") diff --git a/api/rpk-api/firm/contract/print/templates/print.html b/api/rpk-api/firm/contract/print/templates/print.html index a0340bf..8d8864a 100644 --- a/api/rpk-api/firm/contract/print/templates/print.html +++ b/api/rpk-api/firm/contract/print/templates/print.html @@ -57,7 +57,7 @@