Files
cht-lawfirm/back/app/template/models.py
2023-02-12 20:27:58 +01:00

76 lines
2.0 KiB
Python

from typing import List
from html import unescape
from pydantic import BaseModel, Field, validator
from ..core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry
class PartyTemplate(BaseModel):
entity_id: str = Field(
foreignKey={
"reference": {
"resource": "entity",
"schema": "Entity",
}
},
default=""
)
part: str
def remove_html_tags(text):
"""Remove html tags from a string"""
import re
clean = re.compile('<.*?>')
return re.sub(clean, '', text)
class ProvisionTemplate(CrudDocument):
name: str
title: str = RichtextSingleline()
label: str = ""
body: str = RichtextMultiline()
@validator("label", always=True)
def generate_label(cls, v, values, **kwargs):
return "{} - \"{}\"".format(values['name'], unescape(remove_html_tags(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 ContractTemplate(CrudDocument):
name: str
title: str
label: str = ""
parties: List[PartyTemplate] = []
provisions: List[ProvisionTemplateReference] = Field(
default=[],
props={"items-per-row": "1", "numbered": True}
)
variables: List[DictionaryEntry] = Field(
default=[],
format="dictionary",
)
@validator("label", always=True)
def generate_label(cls, v, values, **kwargs):
return "{} - \"{}\"".format(values['name'], unescape(remove_html_tags(values['title'])))
class Settings(CrudDocument.Settings):
fulltext_search = ['name', 'title']