Files
cht-lawfirm/back/app/contract/models.py
2023-02-11 18:07:50 +01:00

67 lines
1.6 KiB
Python

from typing import List, Literal
from enum import Enum
from pydantic import BaseModel, Field
from ..core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry
class ContractStatus(str, Enum):
new = 'new'
signed = 'signed'
in_effect = 'in_effect'
executed = 'executed'
class ContractDraftStatus(str, Enum):
draft = 'draft'
created = 'created'
class Party(BaseModel):
entity_id: str = Field(
foreignKey={
"reference": {
"resource": "entity",
"schema": "Entity",
}
}
)
part: str
class ProvisionGenuine(BaseModel):
type: Literal['genuine'] = 'genuine'
title: str = RichtextSingleline(props={"parametrized": True})
body: str = RichtextMultiline(props={"parametrized": True})
class ContractProvisionTemplateReference(BaseModel):
type: Literal['template'] = 'template'
provision_template_id: str = Field(
foreignKey={
"reference": {
"resource": "template/provision",
"schema": "ProvisionTemplate",
"displayedFields": ['title', 'body']
},
},
props={"parametrized": True}
)
class DraftProvision(BaseModel):
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
class ContractDraft(CrudDocument):
name: str
title: str
parties: List[Party]
provisions: List[DraftProvision]
variables: List[DictionaryEntry] = Field(
default=[],
format="dictionary",
)
status: ContractDraftStatus = Field(default=ContractDraftStatus.draft)