171 lines
4 KiB
Python
171 lines
4 KiB
Python
"""Schémas Phase 1 — Saisies hebdomadaires."""
|
|
from pydantic import BaseModel
|
|
from datetime import date, datetime
|
|
from uuid import UUID
|
|
from typing import Optional
|
|
|
|
|
|
# ── S1 Collecte ──
|
|
class CollecteCreate(BaseModel):
|
|
date_collecte: date
|
|
montant: float
|
|
detenteur_id: UUID # qui a l'argent
|
|
reunion_id: Optional[UUID] = None
|
|
|
|
|
|
class CollecteOut(BaseModel):
|
|
id: UUID
|
|
date_collecte: date
|
|
montant: float
|
|
detenteur_prenom: Optional[str] = None
|
|
statut: str
|
|
saisi_par_prenom: Optional[str] = None
|
|
confirme_par_prenom: Optional[str] = None
|
|
date_confirmation: Optional[datetime] = None
|
|
recu_par_prenom: Optional[str] = None
|
|
date_reception: Optional[date] = None
|
|
cree_le: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class CollecteUpdate(BaseModel):
|
|
montant: Optional[float] = None
|
|
|
|
|
|
# ── Opérations bancaires ──
|
|
class OperationBancaireCreate(BaseModel):
|
|
type: str = "depot"
|
|
provenance_depot: Optional[str] = "encaisse"
|
|
montant: float
|
|
date_operation: date
|
|
note: Optional[str] = None
|
|
|
|
|
|
class OperationBancaireOut(BaseModel):
|
|
id: UUID
|
|
type: str
|
|
montant: float
|
|
date_operation: date
|
|
effectue_par_prenom: str
|
|
note: Optional[str] = None
|
|
cree_le: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class TransactionComptableOut(BaseModel):
|
|
id: UUID
|
|
date_transaction: date
|
|
type: str
|
|
compte: str
|
|
montant: float
|
|
sens: str
|
|
source_table: Optional[str] = None
|
|
source_id: Optional[UUID] = None
|
|
note: Optional[str] = None
|
|
cree_par_prenom: Optional[str] = None
|
|
cree_le: datetime
|
|
|
|
|
|
class ReserveCreate(BaseModel):
|
|
nom: str
|
|
montant: float
|
|
note: Optional[str] = None
|
|
|
|
|
|
class ReserveUpdate(BaseModel):
|
|
nom: Optional[str] = None
|
|
montant: Optional[float] = None
|
|
note: Optional[str] = None
|
|
|
|
|
|
class ReserveTransfer(BaseModel):
|
|
source_id: str
|
|
destination_id: str
|
|
montant: float
|
|
|
|
|
|
class ReserveOut(BaseModel):
|
|
id: UUID
|
|
nom: str
|
|
montant: float
|
|
note: Optional[str] = None
|
|
active: bool = True
|
|
cree_le: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class ReserveMouvementOut(BaseModel):
|
|
id: UUID
|
|
source_id: Optional[UUID] = None
|
|
source_nom: Optional[str] = None
|
|
destination_id: Optional[UUID] = None
|
|
destination_nom: Optional[str] = None
|
|
montant: float
|
|
type: str
|
|
note: Optional[str] = None
|
|
cree_par_prenom: Optional[str] = None
|
|
cree_le: datetime
|
|
|
|
|
|
class SoldesOut(BaseModel):
|
|
encaisse: float # cash reçu par trésorier, pas encore déposé
|
|
compte_bancaire: float # dépôts - dépenses payées - contributions
|
|
en_possession: float # collectes pas encore remises au trésorier
|
|
en_possession_details: list[dict] = []
|
|
|
|
|
|
# ── S4 Rapport de réunion ──
|
|
class ReunionCreate(BaseModel):
|
|
type: str = "reguliere"
|
|
date_reunion: datetime
|
|
theme: Optional[str] = None
|
|
annonces: Optional[list[str]] = None
|
|
note: Optional[str] = None
|
|
|
|
|
|
class ReunionOut(BaseModel):
|
|
id: UUID
|
|
type: str
|
|
date_reunion: datetime
|
|
animateur_prenom: Optional[str] = None
|
|
theme: Optional[str] = None
|
|
annonces: Optional[list[str]] = None
|
|
note: Optional[str] = None
|
|
cree_le: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# ── S5 Dépense (ouvert à tous) ──
|
|
class DepenseCreate(BaseModel):
|
|
montant: float
|
|
quoi: str
|
|
membre_id: Optional[UUID] = None
|
|
date_depense: Optional[date] = None
|
|
# qui = auto, sauf si un exécutif soumet pour un autre membre
|
|
# methode renseignée par le trésorier à la confirmation
|
|
|
|
|
|
class DepenseOut(BaseModel):
|
|
id: UUID
|
|
date_depense: date
|
|
montant: float
|
|
qui_prenom: Optional[str] = None
|
|
quoi: str
|
|
paye: bool
|
|
methode: Optional[str] = None
|
|
preuve_nom: Optional[str] = None
|
|
saisi_par_prenom: Optional[str] = None
|
|
confirme: bool = False
|
|
cree_le: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class DepenseUpdate(BaseModel):
|
|
paye: Optional[bool] = None
|
|
methode: Optional[str] = None
|
|
quoi: Optional[str] = None
|