from typing import List, Dict from pydantic import BaseModel, Field, validator from ..core.models import CrudDocument, text_area class PartyTemplate(BaseModel): entity_id: str = Field( foreignKey={ "reference": { "resource": "entity", "schema": "Entity", } }, default="" ) part: str class ProvisionTemplate(CrudDocument): name: str title: str label: str = None body: str = text_area(size=8) @validator("label", always=True) def generate_label(cls, v, values, **kwargs): return "{} - \"{}\"".format(values['name'], values['title']) class Settings(CrudDocument.Settings): fulltext_search = ['name', 'title', 'body'] class ProvisionTemplateReference(BaseModel): provision_template_id: str = Field( foreignKey={ "reference": { "resource": "template/provision", "schema": "ProvisionTemplate", "displayedFields": ['title', 'body'] }, }, props={"parametrized": True} ) class DictionaryEntry(BaseModel): key: str value: str = "" class ContractTemplate(CrudDocument): name: str parties: List[PartyTemplate] = [] provisions: List[ProvisionTemplateReference] = Field( default=[], props={"items-per-row": "1", "numbered": True} ) variables: List[DictionaryEntry] = Field( default=[], format="dictionary", )