Dynamic lawyer

This commit is contained in:
2023-03-06 21:25:11 +01:00
parent 4b00ef12aa
commit 52ea9dfb63
4 changed files with 15 additions and 24 deletions

View File

@@ -114,6 +114,7 @@ class Contract(CrudDocument):
props={"items-per-row": "1", "numbered": True} props={"items-per-row": "1", "numbered": True}
) )
status: ContractStatus = ContractStatus.published status: ContractStatus = ContractStatus.published
lawyer: Entity
location: str location: str
date: datetime.date date: datetime.date

View File

@@ -46,6 +46,10 @@ async def build_model(model):
model = model.dict() model = model.dict()
model['location'] = "Los Santos, SA" model['location'] = "Los Santos, SA"
model['date'] = datetime.date(1970, 1, 1) model['date'] = datetime.date(1970, 1, 1)
model['lawyer'] = {'entity_data': {
"firstname": "prénom avocat",
"lastname": "nom avocat",
}}
return model return model
@@ -57,58 +61,43 @@ print_router = APIRouter()
templates = Jinja2Templates(directory=str(BASE_PATH / "templates")) templates = Jinja2Templates(directory=str(BASE_PATH / "templates"))
async def render_print(host, contract, lawyer): async def render_print(host, contract):
template = templates.get_template("print.html") template = templates.get_template("print.html")
return template.render({ return template.render({
"contract": contract, "contract": contract,
"lawyer": lawyer,
"static_host": host "static_host": host
}) })
async def render_css(host, draft): async def render_css(host, contract):
template = templates.get_template("styles.css") template = templates.get_template("styles.css")
return template.render({ return template.render({
"draft": draft, "contract": contract,
"static_host": host "static_host": host
}) })
@print_router.get("/preview/draft/{draftId}", response_class=HTMLResponse) @print_router.get("/preview/draft/{draftId}", response_class=HTMLResponse)
async def create(draftId: str) -> str: async def preview_draft(draftId: str) -> str:
draft = await build_model(await ContractDraft.get(draftId)) draft = await build_model(await ContractDraft.get(draftId))
lawyer = { return await render_print('localhost', draft)
"firstname": "Nathaniel",
"lastname": "Toshi",
}
return await render_print('localhost', draft, lawyer)
@print_router.get("/preview/{signature_id}", response_class=HTMLResponse) @print_router.get("/preview/{signature_id}", response_class=HTMLResponse)
async def create(signature_id: str) -> str: async def preview_contract(signature_id: str) -> str:
crit = ElemMatch(Contract.parties, {"signature_uuid": signature_id}) crit = ElemMatch(Contract.parties, {"signature_uuid": signature_id})
contract = await Contract.find_one(crit) contract = await Contract.find_one(crit)
lawyer = { return await render_print('localhost', contract)
"firstname": "Nathaniel",
"lastname": "Toshi",
}
return await render_print('localhost', contract, lawyer)
@print_router.get("/pdf", response_class=FileResponse) @print_router.get("/pdf", response_class=FileResponse)
async def create_pdf() -> str: async def create_pdf() -> str:
draft = await build_model(await ContractDraft.get("63e92534aafed8b509f229c4")) draft = await build_model(await ContractDraft.get("63e92534aafed8b509f229c4"))
lawyer = {
"firstname": "Nathaniel",
"lastname": "Toshi",
}
font_config = FontConfiguration() font_config = FontConfiguration()
html = HTML(string=await render_print('nginx', draft, lawyer)) html = HTML(string=await render_print('nginx', draft))
css = CSS(string=await render_css('nginx', draft), font_config=font_config) css = CSS(string=await render_css('nginx', draft), font_config=font_config)
html.write_pdf('out.pdf', stylesheets=[css], font_config=font_config) html.write_pdf('out.pdf', stylesheets=[css], font_config=font_config)

View File

@@ -40,7 +40,7 @@
</div> </div>
{% endfor %} {% endfor %}
<p class="part">d&apos;autre part</p> <p class="part">d&apos;autre part</p>
<p>Sous la supervision l&eacute;gale de Ma&icirc;tre <strong>{{ lawyer.firstname }} {{ lawyer.lastname }}</strong></p> <p>Sous la supervision l&eacute;gale de Ma&icirc;tre <strong>{{ contract.lawyer.entity_data.firstname }} {{ contract.lawyer.entity_data.lastname }}</strong></p>
<p>Il a &eacute;t&eacute; convenu l&apos;ex&eacute;cution des prestations ci-dessous, conform&eacute;ment aux conditions g&eacute;n&eacute;rales et particuli&egrave;res ci-apr&egrave;s:</p> <p>Il a &eacute;t&eacute; convenu l&apos;ex&eacute;cution des prestations ci-dessous, conform&eacute;ment aux conditions g&eacute;n&eacute;rales et particuli&egrave;res ci-apr&egrave;s:</p>
</div> </div>
</div> </div>

View File

@@ -51,6 +51,7 @@ class PartyRead(BaseModel):
class ContractRead(Contract): class ContractRead(Contract):
parties: List[PartyRead] parties: List[PartyRead]
lawyer: EntityRead
class ContractCreate(Writer): class ContractCreate(Writer):