76 lines
1.6 KiB
Python
76 lines
1.6 KiB
Python
import datetime
|
|
from typing import List
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from .models import ContractDraft, DraftProvision, DraftParty, Contract
|
|
|
|
from ..entity.models import Entity
|
|
from ..core.schemas import Writer
|
|
from ..core.models import DictionaryEntry
|
|
|
|
|
|
class ContractDraftRead(ContractDraft):
|
|
pass
|
|
|
|
|
|
class ContractDraftCreate(Writer):
|
|
name: str = Field(title='Nom')
|
|
title: str = Field(title='Titre')
|
|
parties: List[DraftParty] = Field(title='Parties')
|
|
provisions: List[DraftProvision] = Field(
|
|
props={"items-per-row": "1", "numbered": True},
|
|
title='Clauses'
|
|
)
|
|
variables: List[DictionaryEntry] = Field(
|
|
default=[],
|
|
format="dictionary",
|
|
title='Variables'
|
|
)
|
|
|
|
async def validate_foreign_key(self):
|
|
return
|
|
for p in self.parties:
|
|
p.entity = await Entity.get(p.entity)
|
|
if p.entity is None:
|
|
raise ValueError
|
|
|
|
|
|
class ContractDraftUpdate(ContractDraftCreate):
|
|
pass
|
|
|
|
|
|
class ForeignEntityRead(BaseModel):
|
|
label: str
|
|
|
|
class Config:
|
|
title = "Avocat"
|
|
|
|
|
|
class PartyRead(BaseModel):
|
|
signature_affixed: bool = Field(title='Signature apposée?')
|
|
signature_uuid: str = Field(format="signature-link", title="Lien vers signature")
|
|
part: str = Field(title='Rôle')
|
|
entity: ForeignEntityRead = Field(title='Client')
|
|
|
|
class Config:
|
|
title = "Partie"
|
|
|
|
|
|
class ContractRead(Contract):
|
|
parties: List[PartyRead]
|
|
lawyer: ForeignEntityRead
|
|
|
|
class Config:
|
|
title = "Contrat"
|
|
|
|
|
|
class ContractCreate(Writer):
|
|
date: datetime.date
|
|
location: str
|
|
draft_id: str
|
|
|
|
|
|
class ContractUpdate(BaseModel):
|
|
pass
|