57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
|
|
"""Schémas Phase 5 — Jetons, Anniversaires, Commande jetons."""
|
||
|
|
from pydantic import BaseModel
|
||
|
|
from datetime import date, datetime
|
||
|
|
from uuid import UUID
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
|
||
|
|
# ── S2 Remise de jeton ──
|
||
|
|
class JetonCreate(BaseModel):
|
||
|
|
membre_id: Optional[UUID] = None # None pour jeton de désir anonyme
|
||
|
|
type_jeton: str # desir, 24h, 1mois, 2mois, 3mois, 6mois, 9mois, 1an, multiple
|
||
|
|
date_remise: date
|
||
|
|
annees: Optional[int] = None # requis si type_jeton='multiple'
|
||
|
|
|
||
|
|
|
||
|
|
class JetonOut(BaseModel):
|
||
|
|
id: UUID
|
||
|
|
membre_prenom: Optional[str] = None
|
||
|
|
type_jeton: str
|
||
|
|
date_remise: date
|
||
|
|
annees: Optional[int] = None
|
||
|
|
remis_par_prenom: Optional[str] = None
|
||
|
|
cree_le: datetime
|
||
|
|
|
||
|
|
model_config = {"from_attributes": True}
|
||
|
|
|
||
|
|
|
||
|
|
# ── C3 Anniversaires district ──
|
||
|
|
class AnniversaireOut(BaseModel):
|
||
|
|
membre_prenom: str
|
||
|
|
groupe_nom: str
|
||
|
|
date_abstinence: date
|
||
|
|
annees_sobriete: int
|
||
|
|
prochain_anniversaire: date
|
||
|
|
jours_restants: int
|
||
|
|
|
||
|
|
|
||
|
|
# ── M6 Commande de jetons ──
|
||
|
|
class StockJetonsOut(BaseModel):
|
||
|
|
type_jeton: str
|
||
|
|
label: str
|
||
|
|
remis_dernier_mois: int
|
||
|
|
stock_suggestion: str # "OK" ou "Bas — commander"
|
||
|
|
|
||
|
|
|
||
|
|
TYPES_JETONS = [
|
||
|
|
{"value": "desir", "label": "Désir", "emoji": "💫", "ordre": 1},
|
||
|
|
{"value": "24h", "label": "24 heures", "emoji": "🌅", "ordre": 2},
|
||
|
|
{"value": "1mois", "label": "1 mois", "emoji": "🥉", "ordre": 3},
|
||
|
|
{"value": "2mois", "label": "2 mois", "emoji": "🥉", "ordre": 4},
|
||
|
|
{"value": "3mois", "label": "3 mois", "emoji": "🥈", "ordre": 5},
|
||
|
|
{"value": "6mois", "label": "6 mois", "emoji": "🥈", "ordre": 6},
|
||
|
|
{"value": "9mois", "label": "9 mois", "emoji": "🥇", "ordre": 7},
|
||
|
|
{"value": "1an", "label": "1 an", "emoji": "⭐", "ordre": 8},
|
||
|
|
{"value": "multiple", "label": "Multiple", "emoji": "🏆", "ordre": 9},
|
||
|
|
]
|