Creating a normal preview for contract drafts

This commit is contained in:
2023-03-06 21:05:49 +01:00
parent 8bb3d0f44e
commit d43164c93d
4 changed files with 36 additions and 17 deletions

View File

@@ -5,7 +5,7 @@ from ..core.routes import get_crud_router
from .routes_draft import draft_router
from .print import print_router
from .models import Contract, ContractDraft
from .models import Contract, ContractDraft, replace_variables_in_value
from .schemas import ContractCreate, ContractRead, ContractUpdate
from ..entity.models import Entity
@@ -74,9 +74,3 @@ async def create(item: ContractCreate, user=Depends(can_create_contract)) -> dic
@contract_router.put("/{id}", response_description="")
async def update(id: str, req: ContractUpdate) -> ContractRead:
raise HTTPException(status_code=400, detail="No modification on contract")
def replace_variables_in_value(variables, value: str):
for v in variables:
value = value.replace('%{}%'.format(v.key), v.value)
return value

View File

@@ -125,3 +125,10 @@ class Contract(CrudDocument):
else datetime.datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0)
}
def replace_variables_in_value(variables, value: str):
for v in variables:
if v.value:
value = value.replace('%{}%'.format(v.key), v.value)
return value

View File

@@ -1,3 +1,5 @@
import datetime
from fastapi import APIRouter
from fastapi.responses import HTMLResponse, FileResponse
from fastapi.templating import Jinja2Templates
@@ -11,7 +13,7 @@ from pathlib import Path
from app.entity.models import Entity
from app.template.models import ProvisionTemplate
from ..schemas import ContractDraft, Contract
from ..models import ContractDraft, Contract, replace_variables_in_value
async def build_model(model):
@@ -31,13 +33,19 @@ async def build_model(model):
provisions = []
for p in model.provisions:
if p.provision.type == "template":
provisions.append(await ProvisionTemplate.get(p.provision.provision_template_id))
provision = await ProvisionTemplate.get(p.provision.provision_template_id)
else:
provisions.append(p.provision)
provision = p.provision
provision.title = replace_variables_in_value(model.variables, provision.title)
provision.body = replace_variables_in_value(model.variables, provision.body)
provisions.append(provision)
model.provisions = provisions
model.location = "Toulouse"
model.date = "01/01/1970"
model = model.dict()
model['location'] = "Los Santos, SA"
model['date'] = datetime.date(1970, 1, 1)
return model
@@ -66,11 +74,21 @@ async def render_css(host, draft):
})
@print_router.get("/preview/{signatureId}", response_class=HTMLResponse)
async def create(signatureId: str) -> str:
# await build_model(await ContractDraft.get("63e92534aafed8b509f229c4"))
@print_router.get("/preview/draft/{draftId}", response_class=HTMLResponse)
async def create(draftId: str) -> str:
draft = await build_model(await ContractDraft.get(draftId))
crit = ElemMatch(Contract.parties, {"signature_uuid": "85476dc8-8b98-4f25-8e7d-1542c152074f"})
lawyer = {
"firstname": "Nathaniel",
"lastname": "Toshi",
}
return await render_print('localhost', draft, lawyer)
@print_router.get("/preview/{signature_id}", response_class=HTMLResponse)
async def create(signature_id: str) -> str:
crit = ElemMatch(Contract.parties, {"signature_uuid": signature_id})
contract = await Contract.find_one(crit)
lawyer = {