Hai 5 operatori, due lavateste, tre postazioni asciuga e un calendario che sembra un rompicapo. Ogni giorno qualcuno prenota sullo slot già occupato, il titolare sposta appuntamenti a mano, e intanto un cliente aspetta in sala. Se non hai un sistema che gestisca più operatori contemporaneamente, stai pagando in ore perse e fatturato regalato.
Noi, di Meteora Web, abbiamo costruito decine di gestioni per saloni e parrucchieri. Lo abbiamo visto con le nostre mani: senza un’agenda multi-operatore, il caos è matematico. In questa guida ti mostriamo come organizzarla — non con teoria astratta, ma con uno schema di database, codice PHP funzionante e regole operative che puoi applicare subito.
Perché un salone con più operatori non può usare un calendario singolo?
Un calendario monoutente funziona per un singolo professionista. Appena metti due o più operatori, iniziano i problemi:
- Due clienti prenotati sulla stessa postazione alla stessa ora.
- Un operatore lavora su un servizio che richiede 45 minuti, ma lo slot era di 30.
- Il lavateste è occupato e il cliente successivo accumula ritardo.
Se gestisci manualmente con un foglio Excel o un calendario condiviso generico, ogni giorno perdi tempo a risolvere conflitti. E ogni conflitto non risolto è un cliente che se ne va.
La soluzione è un’agenda multi-operatore che tenga conto di tre variabili: operatore, postazione e durata servizio. Solo così eviti sovrapposizioni e garantisci flusso continuo.
L’errore che vediamo più spesso
Chi compra un gestionale generico pensa “tanto un calendario è un calendario”. Poi scopre che non può associare un servizio a un operatore specifico (es. solo Mario fa la permanente). Allora inizia a scrivere note a mano o a duplicare slot. Risultato: lo stesso caos di prima, ma con un abbonamento in più.
Sponsored Protocol
La regola: ogni prenotazione deve essere legata a un operatore + una postazione + una durata. Se il sistema non lo fa, non è multi-operatore.
Come strutturare un’agenda multi-operatore a livello dati?
Se devi costruirtela o scegliere un gestionale che funzioni, la struttura dati è fondamentale. Ecco lo schema minimo che usiamo nei nostri progetti con Laravel e MySQL:
CREATE TABLE operators (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
active BOOLEAN DEFAULT true
);
CREATE TABLE workstations (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL, -- es. 'Postazione 1', 'Lavateste A'
type ENUM('wash', 'cut', 'color', 'dry') NOT NULL
);
CREATE TABLE services (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
duration_minutes INT NOT NULL,
price DECIMAL(10,2)
);
CREATE TABLE operator_service (
operator_id INT,
service_id INT,
PRIMARY KEY (operator_id, service_id)
);
CREATE TABLE availability (
id INT PRIMARY KEY AUTO_INCREMENT,
operator_id INT,
day_of_week TINYINT, -- 0=domenica, 1=lunedì...
start_time TIME,
end_time TIME
);
CREATE TABLE bookings (
id INT PRIMARY KEY AUTO_INCREMENT,
operator_id INT NOT NULL,
workstation_id INT NOT NULL,
service_id INT NOT NULL,
client_name VARCHAR(100) NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
status ENUM('confirmed','arrived','cancelled','no_show') DEFAULT 'confirmed',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Questa struttura permette di:
Sponsored Protocol
- Associare ogni servizio a operatori abilitati.
- Definire la disponibilità per operatore (giorno e fascia oraria).
- Bloccare la postazione per l’intera durata del servizio.
Controllo conflitti in PHP
Il cuore del sistema è la verifica di sovrapposizioni. Quando un cliente prenota, devi controllare che l’operatore e la postazione siano liberi nell’intervallo richiesto. Ecco una funzione semplice in PHP (con PDO):
function hasConflict(PDO $pdo, int $operatorId, int $workstationId, DateTime $start, DateTime $end): bool {
$sql = "SELECT COUNT(*) FROM bookings
WHERE operator_id = ?
OR workstation_id = ?
AND status NOT IN ('cancelled', 'no_show')
AND start_time < ?
AND end_time > ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$operatorId, $workstationId, $end->format('Y-m-d H:i:s'), $start->format('Y-m-d H:i:s')]);
return $stmt->fetchColumn() > 0;
}
// Esempio di utilizzo:
$start = new DateTime('2026-07-15 10:00:00');
$end = (clone $start)->modify('+45 minutes');
if (hasConflict($pdo, 3, 2, $start, $end)) {
echo "Slot occupato, scegli un altro orario o un altro operatore.";
}Attenzione: la query controlla sia l’operatore che la postazione. Puoi renderla più granulare (es. solo postazione se il servizio è lavateste). Ma per iniziare, questa copertura base funziona.
Sponsored Protocol
Quale logica adottare per evitare sovrapposizioni tra operatori?
Il problema non è solo tecnico, è anche procedurale. Devi decidere come gestire le priorità. Esempio: Mario può fare taglio e colore, Lucia solo taglio. Se arriva una richiesta di colore il lunedì alle 15:00, Mario è libero, ma la postazione colore è occupata da un’altra cliente fino alle 15:30. Cosa succede?
Regola pratica: prima disponibilità di operatore, poi postazione
Nella maggior parte dei saloni, l’operatore è il collo di bottiglia maggiore. Quindi controlli prima se l’operatore è libero. Se lo è, poi verifichi se esiste una postazione compatibile libera. Se non c’è, puoi proporre uno spostamento di fascia oraria o un operatore alternativo.
Noi consigliamo di implementare una visualizzazione a griglia per ogni operatore, con colonne per fasce orarie (es. ogni 30 minuti) e righe per le postazioni. Così il titolare o la receptionist vede subito i buchi.
Come gestire le pause degli operatori e i giorni di ferie?
Un’agenda multi-operatore deve sapere anche quando un operatore non lavora. Hai due strade:
- Tabella availability (come sopra) con orari settimanali.
- Slot di blocco (un tipo di prenotazione “non disponibile” legato all’operatore).
Noi preferiamo la seconda: crei una tabella `blocked_slots` con operator_id, start, end, reason. Durante il controllo conflitti, consideri anche questi blocchi. È più flessibile per ferie, permessi, formazione.
Sponsored Protocol
CREATE TABLE blocked_slots (
id INT PRIMARY KEY AUTO_INCREMENT,
operator_id INT NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
reason VARCHAR(255) DEFAULT NULL
);Nel PHP, aggiungi una UNION alla query di conflitto o un secondo controllo.
Quali funzionalità deve avere un’agenda multi-operatore per essere davvero utile?
Non basta evitare conflitti. Per far crescere il salone, l’agenda deve diventare uno strumento di produttività. Ecco i must-have che abbiamo implementato nei progetti dei nostri clienti:
- Notifiche automatiche via WhatsApp o SMS per conferma e promemoria (riduce i no-show del 30-40%).
- Vista settimanale per operatore con cambio rapido tra giorni.
- Drag & drop per spostare prenotazioni (se un operatore finisce in anticipo, puoi anticipare il prossimo cliente).
- Statistiche: quante prenotazioni per operatore/servizio, tasso di occupazione, tempo medio per servizio.
- Gestione delle liste d’attesa: se uno slot si libera, notifichi automaticamente il primo in lista.
Chi usa un gestionale senza queste feature, dopo sei mesi si ritrova a fare tutto manualmente. Lo vediamo ogni giorno nei saloni che ci contattano per una migrazione.
Un esempio dal nostro lavoro
Abbiamo seguito un salone a Palermo con 8 operatori. Usavano un calendario cartaceo. Dopo tre settimane dal nostro intervento (con un’agenda multi-operatore su Laravel + Vue), hanno eliminato completamente le doppie prenotazioni e recuperato in media 2 ore al giorno di tempo della receptionist. Tradotto: circa 400€/mese di costo risparmiato solo in efficienza.
Sponsored Protocol
Cosa fare adesso
Se stai valutando un gestionale o vuoi costruirti un’agenda multi-operatore, parti da questi tre passi:
- Mappa i tuoi operatori, postazioni e servizi con durate precise. Senza questi dati, qualsiasi sistema fallisce.
- Scegli una base tecnica che permetta la logica di conflitto come lo schema SQL qui sopra. Se usi un gestionale già pronto, verifica che gestisca operatori, postazioni e servizi separatamente.
- Implementa le notifiche automatiche. È il singolo intervento con il ROI più alto per ridurre i no-show.
Noi, di Meteora Web, abbiamo costruito la nostra piattaforma gestionale proprio partendo da questi problemi reali. Se vuoi approfondire, leggi il nostro articolo pillar sui gestionali per barbieri e parrucchieri, dove spieghiamo l’intero ecosistema. Per una consulenza specifica sull’agenda multi-operatore del tuo salone, contattaci.
Zenith Barber & Beauty è la piattaforma all-in-one per gestire la tua attività — clienti, agenda, scadenze, fatturazione e promemoria WhatsApp, tutto da browser. Senza installare nulla.
Scopri Zenith Barber & Beauty →