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, Reader from ..core.models import DictionaryEntry class ContractDraftRead(Reader, 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, db): for p in self.parties: if p.entity_id: p.entity = await Entity.get(db, p.entity_id) 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(Reader, Contract): parties: List[PartyRead] lawyer: ForeignEntityRead class Config: title = "Contrat" class ContractCreate(Writer): date: datetime.date location: str draft_id: str class ContractInit(BaseModel): date: datetime.date location: str lawyer: dict name: str title: str parties: List[dict] provisions: List[dict] class ContractUpdate(BaseModel): pass