Creating a normal preview for contract drafts
This commit is contained in:
@@ -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
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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>
|
||||||
`
|
`
|
||||||
|
|||||||
Reference in New Issue
Block a user