diff --git a/assets/services_cardiologia.jpg b/assets/services_cardiologia.jpg new file mode 100644 index 0000000..879feb7 Binary files /dev/null and b/assets/services_cardiologia.jpg differ diff --git a/backend/app/schemas/booking.py b/backend/app/schemas/booking.py index b4d6a14..c77ad0b 100644 --- a/backend/app/schemas/booking.py +++ b/backend/app/schemas/booking.py @@ -6,6 +6,7 @@ class BookingRequestCreate(BaseModel): phone: str = Field(min_length=5, max_length=40) pet_name: str = Field(default="", max_length=120) pet_type: str = Field(default="cane", max_length=40) + doctor: str = Field(min_length=2, max_length=120) service: str = Field(min_length=2, max_length=120) date: str = Field(min_length=8, max_length=20) time: str = Field(default="", max_length=20) diff --git a/backend/app/services/mailer.py b/backend/app/services/mailer.py index ad3c9fc..36c7708 100644 --- a/backend/app/services/mailer.py +++ b/backend/app/services/mailer.py @@ -28,6 +28,7 @@ def _build_booking_html(payload: BookingRequestCreate) -> str: Telefono{payload.phone} Nome animale{payload.pet_name or "-"} Tipo animale{payload.pet_type} + Medico richiesto{payload.doctor} Tipo di visita{payload.service} Data preferita{payload.date} Orario preferito{payload.time or "Qualsiasi orario"} @@ -51,6 +52,7 @@ def _build_booking_text(payload: BookingRequestCreate) -> str: f"Telefono: {payload.phone}\n" f"Nome animale: {payload.pet_name or '-'}\n" f"Tipo animale: {payload.pet_type}\n" + f"Medico richiesto: {payload.doctor}\n" f"Tipo di visita: {payload.service}\n" f"Data preferita: {payload.date}\n" f"Orario preferito: {payload.time or 'Qualsiasi orario'}\n" diff --git a/clinica-app/client/public/images/services_cardiologia.jpg b/clinica-app/client/public/images/services_cardiologia.jpg new file mode 100644 index 0000000..879feb7 Binary files /dev/null and b/clinica-app/client/public/images/services_cardiologia.jpg differ diff --git a/clinica-app/client/src/components/AboutSection.tsx b/clinica-app/client/src/components/AboutSection.tsx index 59c4dc7..e3dcb24 100644 --- a/clinica-app/client/src/components/AboutSection.tsx +++ b/clinica-app/client/src/components/AboutSection.tsx @@ -105,19 +105,6 @@ export default function AboutSection() {
- {/* Badge flottante */} -
-
- 15+ -
-
- Anni di esperienza nella cura degli animali -
-
- {/* Decorazione */}
diff --git a/clinica-app/client/src/components/BookingSection.tsx b/clinica-app/client/src/components/BookingSection.tsx index 968dc48..01ddb44 100644 --- a/clinica-app/client/src/components/BookingSection.tsx +++ b/clinica-app/client/src/components/BookingSection.tsx @@ -24,6 +24,18 @@ const services = [ "Laparoscopia", ]; +const doctors = [ + "Dott. Paolo Parmeggiani", + "Dott.ssa Irene Paganelli", + "Dott. Simone Tinti", + "Dott.ssa Michela Sghedoni", + "Dott. Luca Pietri", + "Dott.ssa Sara Casali", + "Dott. Riccardo Suffritti", + "Dott.ssa Elena Venturelli", + "Dott.ssa Cinzia Pellegrini", +]; + const timeSlots = [ "09:00", "09:30", @@ -44,6 +56,7 @@ type BookingFormState = { phone: string; petName: string; petType: string; + doctor: string; service: string; date: string; time: string; @@ -55,6 +68,7 @@ const initialForm: BookingFormState = { phone: "", petName: "", petType: "cane", + doctor: "", service: "", date: "", time: "", @@ -72,7 +86,7 @@ export default function BookingSection() { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); - if (!form.name || !form.phone || !form.service || !form.date) { + if (!form.name || !form.phone || !form.doctor || !form.service || !form.date) { toast.error("Compila tutti i campi obbligatori"); return; } @@ -90,6 +104,7 @@ export default function BookingSection() { phone: form.phone, pet_name: form.petName, pet_type: form.petType, + doctor: form.doctor, service: form.service, date: form.date, time: form.time, @@ -326,6 +341,25 @@ export default function BookingSection() {
+
+ + +
+
- {specialist && ( -
- Alta specializzazione -
- )}
@@ -236,16 +243,6 @@ function ServiceCard({ ))} -
); @@ -267,12 +264,6 @@ export default function ServicesSection() { transition={{ duration: 0.7 }} className="mb-14" > -
-
- - Specializzazioni - -

+
+ +
+ +
+
+ +
+
+ -
-
- - Alta specializzazione - -

Visite Specialistiche

-

- Un secondo livello di consulenza clinica per casi che richiedono competenze dedicate, - approfondimenti mirati e percorsi di valutazione ad alto valore aggiunto. -

-
+
{specialistVisits.map((service, index) => ( - - -
); diff --git a/clinica-app/client/src/components/TeamSection.tsx b/clinica-app/client/src/components/TeamSection.tsx index 059248c..34d8790 100644 --- a/clinica-app/client/src/components/TeamSection.tsx +++ b/clinica-app/client/src/components/TeamSection.tsx @@ -33,7 +33,7 @@ const medicalTeam: TeamMember[] = [ color: "#4ECDC4", bio: [ "Laureata a pieni voti con lode presso l'Universita di Bologna, ha svolto un tirocinio in medicina interna e chirurgia presso l'Ospedale Veterinario dell'Universita di Copenhagen.", - "Iscritta all'Ordine dei Medici Veterinari di Modena (n. 749), e socia SCIVAC e SIVAE. Ha seguito diversi corsi di perfezionamento in ecografia addominale ed ecocardiografia del cane e del gatto.", + "Iscritta all'Ordine dei Medici Veterinari di Modena (n. 749). Ha seguito diversi corsi di perfezionamento in ecografia addominale ed ecocardiografia del cane e del gatto.", ], }, { @@ -60,6 +60,24 @@ const medicalTeam: TeamMember[] = [ specialization: "Profilo in aggiornamento", color: "#C58C63", }, + { + name: "Dott. Riccardo Suffritti", + role: "Medico veterinario", + specialization: "Profilo in aggiornamento", + color: "#7A8FA8", + }, + { + name: "Dott.ssa Elena Venturelli", + role: "Medico veterinario", + specialization: "Profilo in aggiornamento", + color: "#4C7A9F", + }, + { + name: "Dott.ssa Cinzia Pellegrini", + role: "Medico veterinario", + specialization: "Profilo in aggiornamento", + color: "#8E6C88", + }, ]; const collaborators: TeamMember[] = [ @@ -80,16 +98,16 @@ const collaborators: TeamMember[] = [ color: "#7EA55A", }, { - name: "Dott.ssa Elena Venturelli", + name: "Dott. Boris Del Pozzo", role: "Collaborazione specialistica", specialization: "Profilo in aggiornamento", - color: "#4C7A9F", + color: "#6E8FA7", }, { - name: "Dott.ssa Cinzia Pellegrini", + name: "Dott.ssa Silvia Palladini", role: "Collaborazione specialistica", specialization: "Profilo in aggiornamento", - color: "#8E6C88", + color: "#B6876F", }, ]; diff --git a/clinica-app/vite.config.ts b/clinica-app/vite.config.ts index fed6b04..a13dfd9 100644 --- a/clinica-app/vite.config.ts +++ b/clinica-app/vite.config.ts @@ -176,7 +176,7 @@ export default defineConfig({ emptyOutDir: true, }, server: { - port: 3000, + port: 3001, strictPort: false, // Will find next available port if 3000 is busy host: true, allowedHosts: [