diff --git a/back/app/contract/__init__.py b/back/app/contract/__init__.py index 9499cb94..1e541025 100644 --- a/back/app/contract/__init__.py +++ b/back/app/contract/__init__.py @@ -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 diff --git a/back/app/contract/models.py b/back/app/contract/models.py index ff870d87..c5051173 100644 --- a/back/app/contract/models.py +++ b/back/app/contract/models.py @@ -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 diff --git a/back/app/contract/print/__init__.py b/back/app/contract/print/__init__.py index 43f90058..f60d7eb1 100644 --- a/back/app/contract/print/__init__.py +++ b/back/app/contract/print/__init__.py @@ -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 = { diff --git a/front/app/src/app/views/contracts/drafts.component.ts b/front/app/src/app/views/contracts/drafts.component.ts index 1a85d54a..5b605878 100644 --- a/front/app/src/app/views/contracts/drafts.component.ts +++ b/front/app/src/app/views/contracts/drafts.component.ts @@ -94,7 +94,7 @@ export class DraftsNewComponent extends BaseDraftsComponent implements OnInit { [resource]="this.resource" [schema]="this.schema"> - Preview + Preview `