Sistema MVP per la gestione di ticket aziendali con focus su interventi tecnici e manutenzione mezzi.
- Doppio tipo di ticket: Intervento Mezzi e Intervento Generico
- Interfaccia pubblica per la creazione di segnalazioni
- Back-office protetto per la gestione amministrativa
- Sistema di prioritΓ e assegnazione ticket
- Upload e visualizzazione immagini
- Filtri avanzati per ricerca ticket
- Tracciamento completo con timestamp automatici
- Python 3.8 o superiore
- pip (Python package manager)
cd "c:\Users\denitro\OneDrive - DFDS\Desktop\vsCode\FIXIT"python -m venv venv
.\venv\Scripts\Activate.ps1pip install -r requirements.txtpython app.pyAl primo avvio, l'applicazione:
- CreerΓ automaticamente il database SQLite (
tickets.db) - CreerΓ la cartella per gli upload (
static/uploads) - CreerΓ l'utente admin predefinito:
- Username:
admin - Password:
admin123
- Username:
python app.pyL'applicazione sarΓ disponibile all'indirizzo:
Accessibile a tutti senza autenticazione:
- Homepage: http://localhost:5000
- Form Intervento Mezzi: http://localhost:5000/new/mezzi
- Form Intervento Generico: http://localhost:5000/new/tecnico
Richiede autenticazione:
- Login: http://localhost:5000/admin/login
- Dashboard: http://localhost:5000/admin/dashboard
FIXIT/
β
βββ app.py # Applicazione Flask principale
βββ requirements.txt # Dipendenze Python
βββ README.md # Questo file
βββ tickets.db # Database SQLite (creato al primo avvio)
β
βββ templates/ # Template Jinja2
β βββ base.html # Template base
β βββ index.html # Homepage pubblica
β βββ form_mezzi.html # Form intervento mezzi
β βββ form_tecnico.html # Form intervento generico
β βββ login.html # Login admin
β βββ dashboard.html # Dashboard admin
β βββ ticket_detail.html # Dettaglio ticket
β
βββ static/ # File statici
βββ uploads/ # Immagini caricate (creata automaticamente)
- Scelta del tipo di segnalazione
- Design pulito e intuitivo
- Raccolta dati veicolo
- Selezione categoria anomalia predefinita
- Descrizione dettagliata problema
- Informazioni richiedente e reparto
- Selezione prioritΓ (Bassa/Media/Alta)
- Upload foto opzionale
- Visualizzazione tabellare di tutti i ticket
- Filtri:
- Ricerca per keyword (ID, nome, descrizione)
- Filtro per status
- Filtro per assegnatario
- Badge colorati per status e prioritΓ
- Indicatore presenza foto
- Visualizzazione completa informazioni
- Gestione Status:
- Cambio stato (Nuovo β In Lavorazione β Risolto)
- Timestamp automatici per ogni transizione
- Assegnazione:
- Assegna/riassegna ticket agli admin
- Eliminazione:
- Rimozione permanente ticket e foto associate
id: Primary Keyusername: String (unique)password_hash: String (hashed)
id: Primary Keyticket_type: MEZZO | TECNICOstatus: NUOVO | IN_LAVORAZIONE | RISOLTOcreated_at,started_at,closed_at: Timestampsrequester_name,description: Info baseimage_filename: Nome file immagineassigned_to_id: FK verso users
Campi specifici MEZZO:
vehicle_type,vehicle_number,anomaly_category
Campi specifici TECNICO:
department,title,priority
- Password hashate con Werkzeug
- Sessioni protette con SECRET_KEY
- Validazione file upload (solo jpg, jpeg, png)
- Limite dimensione upload: 16MB
- Decoratore
@login_requiredper rotte admin
Nel file app.py, modifica l'ultima riga:
app.run(debug=True, host='0.0.0.0', port=5000) # Cambia 5000 con la porta desiderataLa gestione degli utenti Γ¨ disponibile tramite l'interfaccia web accessibile agli utenti con permessi di superuser.
Accedi come superuser (admin/admin123 di default) e vai su Utenze nella barra di navigazione per:
- Creare nuovi utenti: Aggiungi username, password e assegna permessi superuser
- Eliminare utenti: Rimuovi utenti esistenti (i ticket assegnati vengono liberati)
- Reimpostare password: Modifica la password di qualsiasi utente
Per testare l'applicazione con dati di esempio:
python seed_data.pyQuesto script crea:
- 3 utenti di test: mario.rossi, luca.bianchi, giulia.verdi (password: password123)
- 10 ticket di esempio: mix di interventi mezzi e tecnici con vari stati
Lo script Γ¨ idempotente e puΓ² essere eseguito piΓΉ volte senza creare duplicati.
Nel file app.py, nella funzione new_mezzi(), modifica la lista anomaly_categories.
- Framework: Flask 3.0
- ORM: SQLAlchemy
- Database: SQLite (file singolo, facile da gestire)
- Frontend: Bootstrap 5 (via CDN)
- Template Engine: Jinja2
- File Storage: Filesystem locale
Un'altra applicazione sta usando la porta 5000. Cambia la porta in app.py o termina l'altra applicazione.
Chiudi tutte le connessioni al database e riavvia l'applicazione.
Verifica che la cartella static/uploads esista e abbia i permessi corretti.
Per il deploy su AWS Lightsail (o altro server Linux) con Gunicorn, systemd e cron, consulta la guida completa:
π DEPLOY.md β Guida al deploy in produzione
La guida include:
- Configurazione Nginx (reverse proxy) + Gunicorn (server WSGI)
- Servizio systemd per avvio automatico e auto-restart
- Cron job per health check ogni 5 minuti
- Istruzioni per aggiornamento e troubleshooting
- Percorso upgrade a HTTPS (Let's Encrypt)
Per problemi o domande, contatta il team di sviluppo.
Versione: 1.0.0
Data: Gennaio 2026
Sviluppato con: Python + Flask + Bootstrap 5