Adding contract creation
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user