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 .routes_draft import draft_router
from .print import print_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 .schemas import ContractCreate, ContractRead, ContractUpdate
from ..entity.models import Entity 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="") @contract_router.put("/{id}", response_description="")
async def update(id: str, req: ContractUpdate) -> ContractRead: async def update(id: str, req: ContractUpdate) -> ContractRead:
raise HTTPException(status_code=400, detail="No modification on contract") 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, else datetime.datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0) 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 import APIRouter
from fastapi.responses import HTMLResponse, FileResponse from fastapi.responses import HTMLResponse, FileResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
@@ -11,7 +13,7 @@ from pathlib import Path
from app.entity.models import Entity from app.entity.models import Entity
from app.template.models import ProvisionTemplate 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): async def build_model(model):
@@ -31,13 +33,19 @@ async def build_model(model):
provisions = [] provisions = []
for p in model.provisions: for p in model.provisions:
if p.provision.type == "template": 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: 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.provisions = provisions
model.location = "Toulouse" model = model.dict()
model.date = "01/01/1970" model['location'] = "Los Santos, SA"
model['date'] = datetime.date(1970, 1, 1)
return model return model
@@ -66,11 +74,21 @@ async def render_css(host, draft):
}) })
@print_router.get("/preview/{signatureId}", response_class=HTMLResponse) @print_router.get("/preview/draft/{draftId}", response_class=HTMLResponse)
async def create(signatureId: str) -> str: async def create(draftId: str) -> str:
# await build_model(await ContractDraft.get("63e92534aafed8b509f229c4")) 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) contract = await Contract.find_one(crit)
lawyer = { lawyer = {

View File

@@ -94,7 +94,7 @@ export class DraftsNewComponent extends BaseDraftsComponent implements OnInit {
[resource]="this.resource" [resource]="this.resource"
[schema]="this.schema"> [schema]="this.schema">
</base-card> </base-card>
<a class="btn btn-link" href="http://localhost/api/v1/contract/print/preview/{{this.resource_id}}">Preview</a> <a class="btn btn-link" href="http://localhost/api/v1/contract/print/preview/draft/{{this.resource_id}}">Preview</a>
<formly-form [fields]="newContractFormfields" [form]="newContractForm" [model]="newContractModel"></formly-form> <formly-form [fields]="newContractFormfields" [form]="newContractForm" [model]="newContractModel"></formly-form>
<button class="btn btn-success" (click)="publish()">Publish</button> <button class="btn btn-success" (click)="publish()">Publish</button>
` `