v1.4.0 — 16 servizi reali Ianni, sala unica, ricevuta PDF
- Migration: services.price_cents, services.availability_text
- Migration: bookings.receipt_number (trigger annuale IANNI-YYYY-NNNN) + receipt_token
- Constraint EXCLUDE bookings_no_overlap (sala unica, status confirmed/completed)
- availability.py: calcolo slot globale (non più per-provider)
- 16 servizi reali da Servizi.xls inseriti, 9 demo archiviati con FK preservata
- provider_services: 3 profili orari (lun-sab 9-19, lun-mar 9-13, lun-gio 9-13)
- Endpoint GET /api/receipts/{token} → PDF WeasyPrint
- Template HTML ricevuta con palette Ianni
- Dockerfile: deps sistema weasyprint (pango/cairo/fonts)
- requirements: +weasyprint>=63.0
- Frontend index.html: prezzo + fascia oraria nelle card servizio, link Scarica ricevuta nella conferma
This commit is contained in:
@@ -11,6 +11,8 @@ class ServiceOut(BaseModel):
|
||||
duration_min: int
|
||||
description: Optional[str] = None
|
||||
category: str
|
||||
price_cents: Optional[int] = None
|
||||
availability_text: Optional[str] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
@@ -22,6 +24,8 @@ class ServiceCreate(BaseModel):
|
||||
duration_min: int = 15
|
||||
description: Optional[str] = None
|
||||
category: str = "generale"
|
||||
price_cents: Optional[int] = None
|
||||
availability_text: Optional[str] = None
|
||||
|
||||
|
||||
# === Providers ===
|
||||
@@ -77,6 +81,8 @@ class BookingOut(BaseModel):
|
||||
status: str
|
||||
notes: Optional[str] = None
|
||||
created_at: datetime
|
||||
receipt_number: Optional[str] = None
|
||||
receipt_token: Optional[str] = None
|
||||
|
||||
service: Optional[ServiceOut] = None
|
||||
provider: Optional[ProviderOut] = None
|
||||
|
||||
Reference in New Issue
Block a user