Contract Drafts modules

This commit is contained in:
2023-02-11 18:07:50 +01:00
parent cb3af5bcf2
commit a288d32ec9
10 changed files with 187 additions and 44 deletions

View File

@@ -1,16 +1,9 @@
from datetime import datetime
from typing import List
from typing import List, Literal
from enum import Enum
from pydantic import BaseModel, Field
from beanie import Document
from ..entity.models import Entity
class ContractType(str, Enum):
employment = 'employment'
location = 'location'
from ..core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry
class ContractStatus(str, Enum):
@@ -20,21 +13,54 @@ class ContractStatus(str, Enum):
executed = 'executed'
class ContractDraftStatus(str, Enum):
draft = 'draft'
created = 'created'
class Party(BaseModel):
entity: Entity
entity_id: str = Field(
foreignKey={
"reference": {
"resource": "entity",
"schema": "Entity",
}
}
)
part: str
class Clause(BaseModel):
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
body: str
class Contract(Document):
_id: str
type: ContractType
title: str
parties: List[Party]
clauses: List[Clause]
status: ContractStatus = Field(default=ContractStatus.new)
created_at: datetime = Field(default=datetime.utcnow(), nullable=False)
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)
provisions: List[DraftProvision]
variables: List[DictionaryEntry] = Field(
default=[],
format="dictionary",
)
status: ContractDraftStatus = Field(default=ContractDraftStatus.draft)