Adding contract creation

This commit is contained in:
2023-03-06 17:05:49 +01:00
parent d8c8ebdc48
commit 576b5970a5
5 changed files with 210 additions and 16 deletions

View File

@@ -1,3 +1,5 @@
import uuid
import datetime
from typing import List, Literal
from enum import Enum
@@ -5,21 +7,22 @@ from enum import Enum
from pydantic import BaseModel, Field
from ..core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry
from ..entity.models import Entity
class ContractStatus(str, Enum):
new = 'new'
published = 'published'
signed = 'signed'
in_effect = 'in_effect'
executed = 'executed'
class ContractDraftStatus(str, Enum):
draft = 'draft'
in_progress = 'in_progress'
ready = 'ready'
created = 'created'
class Party(BaseModel):
class DraftParty(BaseModel):
entity_id: str = Field(
foreignKey={
"reference": {
@@ -40,6 +43,19 @@ class Party(BaseModel):
)
class Signature(BaseModel):
uuid: str
affixed: bool
class Party(BaseModel):
entity: Entity
part: str
representative: Entity = None
signature_uuid: str = str(uuid.uuid4())
signature_affixed: bool = False
class ProvisionGenuine(BaseModel):
type: Literal['genuine'] = 'genuine'
title: str = RichtextSingleline(props={"parametrized": True})
@@ -64,10 +80,15 @@ class DraftProvision(BaseModel):
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
class Provision(BaseModel):
title: str
body: str
class ContractDraft(CrudDocument):
name: str
title: str
parties: List[Party]
parties: List[DraftParty]
provisions: List[DraftProvision] = Field(
props={"items-per-row": "1", "numbered": True}
)
@@ -75,6 +96,32 @@ class ContractDraft(CrudDocument):
default=[],
format="dictionary",
)
status: ContractDraftStatus = Field(default=ContractDraftStatus.draft)
location: str = ""
date: datetime.date = datetime.date(1970, 1, 1)
status: ContractDraftStatus = ContractDraftStatus.in_progress
class Settings(CrudDocument.Settings):
bson_encoders = {
datetime.date: lambda dt: dt if hasattr(dt, 'hour')
else datetime.datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0)
}
class Contract(CrudDocument):
name: str
title: str
parties: List[Party]
provisions: List[Provision] = Field(
props={"items-per-row": "1", "numbered": True}
)
status: ContractStatus = ContractStatus.published
location: str
date: datetime.date
class Settings(CrudDocument.Settings):
# fulltext_search = ['label']
bson_encoders = {
datetime.date: lambda dt: dt if hasattr(dt, 'hour')
else datetime.datetime(year=dt.year, month=dt.month, day=dt.day,
hour=0, minute=0, second=0)
}