Adding preview du contract drafts
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<div class="footer">
|
||||
<hr/>
|
||||
<p>À {{ contract.location }} le {{ contract.date.strftime('%d/%m/%Y') }}</p>
|
||||
<p class="mention">(Signatures précédée de la mention « Lu et approuvé »)</p>
|
||||
<p class="mention">(Signatures précédées de la mention « Lu et approuvé »)</p>
|
||||
<table class="signatures">
|
||||
<tr>
|
||||
{% for party in contract.parties %}
|
||||
|
||||
Reference in New Issue
Block a user