HEX
Server: nginx/1.27.0
System: Linux ns31201788 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: www-data (33)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: /var/www/airpro/database.sql
-- Airpro CRM Database Schema
-- Database: airpro

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ============================================
-- USERS & AUTHENTICATION
-- ============================================

CREATE TABLE IF NOT EXISTS `users` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(50) NOT NULL UNIQUE,
    `password` VARCHAR(255) NOT NULL,
    `email` VARCHAR(100) NOT NULL,
    `nome` VARCHAR(100) NOT NULL,
    `cognome` VARCHAR(100) NOT NULL,
    `telefono` VARCHAR(20),
    `ruolo` ENUM('admin', 'user', 'tecnico') NOT NULL DEFAULT 'user',
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_ruolo` (`ruolo`),
    INDEX `idx_attivo` (`attivo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- ACTIVITY TIMELINE / LOGS
-- ============================================

CREATE TABLE IF NOT EXISTS `activity_logs` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT UNSIGNED NOT NULL,
    `azione` VARCHAR(100) NOT NULL,
    `descrizione` TEXT,
    `tabella_riferimento` VARCHAR(50),
    `record_id` INT UNSIGNED,
    `dati_precedenti` JSON,
    `dati_nuovi` JSON,
    `ip_address` VARCHAR(45),
    `user_agent` TEXT,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_user` (`user_id`),
    INDEX `idx_azione` (`azione`),
    INDEX `idx_tabella` (`tabella_riferimento`),
    INDEX `idx_created` (`created_at`),
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- PRESENZE / ATTENDANCE
-- ============================================

CREATE TABLE IF NOT EXISTS `presenze` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT UNSIGNED NOT NULL,
    `data` DATE NOT NULL,
    `tipo` ENUM('lavoro', 'ferie', 'malattia', 'permesso', 'assenza') NOT NULL DEFAULT 'lavoro',
    `ora_entrata` TIME,
    `ora_uscita` TIME,
    `pausa_minuti` INT DEFAULT 0,
    `ore_lavorate` DECIMAL(4,2),
    `note` TEXT,
    `approvato` TINYINT(1) DEFAULT 0,
    `approvato_da` INT UNSIGNED,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `unique_user_data` (`user_id`, `data`),
    INDEX `idx_data` (`data`),
    INDEX `idx_tipo` (`tipo`),
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`approvato_da`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CLIENTS / CLIENTI
-- ============================================

CREATE TABLE IF NOT EXISTS `clienti` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `tipo_cliente` ENUM('azienda', 'privato') NOT NULL DEFAULT 'azienda',
    `codice_cliente` VARCHAR(20) NOT NULL UNIQUE,
    `ragione_sociale` VARCHAR(200) NOT NULL,
    `partita_iva` VARCHAR(20),
    `codice_fiscale` VARCHAR(20),
    `telefono` VARCHAR(30),
    `cellulare` VARCHAR(30),
    `email` VARCHAR(100),
    `pec` VARCHAR(100),
    `note` TEXT,
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_codice` (`codice_cliente`),
    INDEX `idx_tipo` (`tipo_cliente`),
    INDEX `idx_ragione` (`ragione_sociale`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- STABILIMENTI / SITES
-- ============================================

CREATE TABLE IF NOT EXISTS `stabilimenti` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `cliente_id` INT UNSIGNED NOT NULL,
    `codice_stabilimento` VARCHAR(10) NOT NULL,
    `nome` VARCHAR(200),
    `indirizzo` VARCHAR(255) NOT NULL,
    `cap` VARCHAR(10),
    `citta` VARCHAR(100),
    `provincia` VARCHAR(5),
    `latitudine` DECIMAL(10, 8),
    `longitudine` DECIMAL(11, 8),
    `telefono` VARCHAR(30),
    `referente` VARCHAR(100),
    `note` TEXT,
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `unique_cliente_codice` (`cliente_id`, `codice_stabilimento`),
    INDEX `idx_cliente` (`cliente_id`),
    INDEX `idx_codice` (`codice_stabilimento`),
    FOREIGN KEY (`cliente_id`) REFERENCES `clienti`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CONTRATTI / CONTRACTS
-- ============================================

CREATE TABLE IF NOT EXISTS `contratti` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `cliente_id` INT UNSIGNED NOT NULL,
    `stabilimento_id` INT UNSIGNED,
    `numero_contratto` VARCHAR(20) NOT NULL UNIQUE,
    `descrizione` TEXT,
    `data_inizio` DATE,
    `data_fine` DATE,
    `valore` DECIMAL(12,2),
    `frequenza_manutenzione` ENUM('mensile', 'bimestrale', 'trimestrale', 'semestrale', 'annuale') DEFAULT 'annuale',
    `mese_manutenzione` TINYINT(2),
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_cliente` (`cliente_id`),
    INDEX `idx_stabilimento` (`stabilimento_id`),
    INDEX `idx_numero` (`numero_contratto`),
    FOREIGN KEY (`cliente_id`) REFERENCES `clienti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`stabilimento_id`) REFERENCES `stabilimenti`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- COMPONENTI / EQUIPMENT
-- ============================================

CREATE TABLE IF NOT EXISTS `componenti` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `stabilimento_id` INT UNSIGNED NOT NULL,
    `contratto_id` INT UNSIGNED,
    `codice_componente` VARCHAR(20) NOT NULL,
    `tipologia` ENUM('caldaia', 'pdc', 'gf', 'fancoil', 'split', 'vrf', 'chiller', 'uta', 'altro') NOT NULL,
    `marca` VARCHAR(100),
    `modello` VARCHAR(100),
    `matricola` VARCHAR(100),
    `ubicazione` VARCHAR(200),
    `potenza_kw` DECIMAL(10,2),
    `refrigerante` VARCHAR(50),
    `quantita_refrigerante` DECIMAL(10,3),
    `n_circuiti` INT,
    `codice_banca_dati_fgas` VARCHAR(50),
    `codice_catasto_circe` VARCHAR(50),
    `terzo_responsabile` VARCHAR(200),
    `frequenza_ricerca_fughe` ENUM('3_mesi', '6_mesi', '12_mesi', 'non_richiesta') DEFAULT 'non_richiesta',
    `data_scadenza_ricerca_fughe` DATE,
    `foto_etichetta` VARCHAR(255),
    `note` TEXT,
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `unique_stab_codice` (`stabilimento_id`, `codice_componente`),
    INDEX `idx_stabilimento` (`stabilimento_id`),
    INDEX `idx_contratto` (`contratto_id`),
    INDEX `idx_tipologia` (`tipologia`),
    INDEX `idx_scadenza_fughe` (`data_scadenza_ricerca_fughe`),
    FOREIGN KEY (`stabilimento_id`) REFERENCES `stabilimenti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`contratto_id`) REFERENCES `contratti`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CHECKLIST TEMPLATES
-- ============================================

CREATE TABLE IF NOT EXISTS `checklist_templates` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `tipologia_componente` ENUM('caldaia', 'pdc', 'gf', 'fancoil', 'split', 'vrf', 'chiller', 'uta', 'altro') NOT NULL,
    `nome` VARCHAR(200) NOT NULL,
    `ordine` INT DEFAULT 0,
    `attivo` TINYINT(1) DEFAULT 1,
    INDEX `idx_tipologia` (`tipologia_componente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `checklist_items` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `template_id` INT UNSIGNED NOT NULL,
    `descrizione` TEXT NOT NULL,
    `ordine` INT DEFAULT 0,
    `obbligatorio` TINYINT(1) DEFAULT 0,
    FOREIGN KEY (`template_id`) REFERENCES `checklist_templates`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- SCADENZIARIO MANUTENZIONI
-- ============================================

CREATE TABLE IF NOT EXISTS `scadenziario` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `contratto_id` INT UNSIGNED NOT NULL,
    `componente_id` INT UNSIGNED,
    `mese` TINYINT(2) NOT NULL,
    `anno` SMALLINT(4) NOT NULL,
    `data_prevista` DATE,
    `data_esecuzione` DATE,
    `stato` ENUM('da_programmare', 'programmato', 'eseguito', 'saltato') DEFAULT 'da_programmare',
    `foglio_lavoro_id` INT UNSIGNED,
    `note` TEXT,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_contratto` (`contratto_id`),
    INDEX `idx_componente` (`componente_id`),
    INDEX `idx_mese_anno` (`anno`, `mese`),
    INDEX `idx_stato` (`stato`),
    FOREIGN KEY (`contratto_id`) REFERENCES `contratti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`componente_id`) REFERENCES `componenti`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- FOGLI DI LAVORO / WORKSHEETS
-- ============================================

CREATE TABLE IF NOT EXISTS `fogli_lavoro` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `numero_progressivo` INT UNSIGNED,
    `cliente_id` INT UNSIGNED NOT NULL,
    `stabilimento_id` INT UNSIGNED,
    `indirizzo_intervento` VARCHAR(255),
    `latitudine` DECIMAL(10, 8),
    `longitudine` DECIMAL(11, 8),
    `contatto_telefono` VARCHAR(30),
    `data_intervento` DATE NOT NULL,
    `ora_inizio` TIME,
    `ora_fine` TIME,
    `ora_inizio_effettiva` DATETIME,
    `ora_fine_effettiva` DATETIME,
    `stato` ENUM('programmato', 'in_corso', 'da_riprogrammare', 'eseguito', 'annullato') DEFAULT 'programmato',
    `priorita` ENUM('bassa', 'media', 'alta', 'urgente') DEFAULT 'media',
    `tipo_intervento` ENUM('manutenzione', 'riparazione', 'installazione', 'collaudo', 'sopralluogo') DEFAULT 'manutenzione',
    `economia` TINYINT(1) DEFAULT 0,
    `garanzia` TINYINT(1) DEFAULT 0,
    `collaudo` TINYINT(1) DEFAULT 0,
    `vitto_tecnico` TINYINT(1) DEFAULT 0,
    `diritto_chiamata` TINYINT(1) DEFAULT 0,
    `percorrenza_km` DECIMAL(10,2),
    `preventivo` TINYINT(1) DEFAULT 0,
    `descrizione_lavoro` TEXT,
    `difetto_segnalato` TEXT,
    `note_ufficio` TEXT,
    `note_tecnico` TEXT,
    `lavoro_eseguito` TEXT,
    `firma_cliente` VARCHAR(255),
    `nome_firmatario` VARCHAR(100),
    `data_firma` DATETIME,
    `creato_da` INT UNSIGNED,
    `data_completamento` DATETIME,
    `esportato_danea` TINYINT(1) DEFAULT 0,
    `data_esportazione` DATETIME,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_cliente` (`cliente_id`),
    INDEX `idx_stabilimento` (`stabilimento_id`),
    INDEX `idx_data` (`data_intervento`),
    INDEX `idx_stato` (`stato`),
    INDEX `idx_numero` (`numero_progressivo`),
    FOREIGN KEY (`cliente_id`) REFERENCES `clienti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`stabilimento_id`) REFERENCES `stabilimenti`(`id`) ON DELETE SET NULL,
    FOREIGN KEY (`creato_da`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- ASSEGNAZIONE TECNICI AI FOGLI LAVORO
-- ============================================

CREATE TABLE IF NOT EXISTS `foglio_tecnici` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `foglio_lavoro_id` INT UNSIGNED NOT NULL,
    `tecnico_id` INT UNSIGNED NOT NULL,
    `ore_lavoro` DECIMAL(4,2),
    `ore_viaggio` DECIMAL(4,2),
    `ordine` TINYINT DEFAULT 1,
    UNIQUE KEY `unique_foglio_tecnico` (`foglio_lavoro_id`, `tecnico_id`),
    INDEX `idx_tecnico` (`tecnico_id`),
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`tecnico_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- MATERIALI USATI
-- ============================================

CREATE TABLE IF NOT EXISTS `foglio_materiali` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `foglio_lavoro_id` INT UNSIGNED NOT NULL,
    `articolo_id` INT UNSIGNED,
    `descrizione` VARCHAR(255) NOT NULL,
    `quantita` DECIMAL(10,2) NOT NULL DEFAULT 1,
    `unita_misura` VARCHAR(20) DEFAULT 'pz',
    `prezzo_unitario` DECIMAL(10,2),
    `sconto` DECIMAL(5,2) DEFAULT 0,
    `note` TEXT,
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CHECKLIST COMPILATE
-- ============================================

CREATE TABLE IF NOT EXISTS `checklist_compilate` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `foglio_lavoro_id` INT UNSIGNED NOT NULL,
    `componente_id` INT UNSIGNED NOT NULL,
    `template_id` INT UNSIGNED NOT NULL,
    `tecnico_id` INT UNSIGNED,
    `data_compilazione` DATETIME,
    `note` TEXT,
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`componente_id`) REFERENCES `componenti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`template_id`) REFERENCES `checklist_templates`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`tecnico_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `checklist_risposte` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `checklist_compilata_id` INT UNSIGNED NOT NULL,
    `item_id` INT UNSIGNED NOT NULL,
    `eseguito` ENUM('si', 'no', 'na') DEFAULT 'no',
    `note` TEXT,
    FOREIGN KEY (`checklist_compilata_id`) REFERENCES `checklist_compilate`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`item_id`) REFERENCES `checklist_items`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- LIBRETTI MANUTENZIONE DIGITALI
-- ============================================

CREATE TABLE IF NOT EXISTS `libretti_manutenzione` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `componente_id` INT UNSIGNED NOT NULL,
    `tipo_intervento` VARCHAR(100) NOT NULL,
    `descrizione` TEXT,
    `esecutore` VARCHAR(100),
    `tecnico_id` INT UNSIGNED,
    `data_esecuzione` DATE,
    `note` TEXT,
    `valori_rilevati` JSON,
    `foglio_lavoro_id` INT UNSIGNED,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_componente` (`componente_id`),
    INDEX `idx_data` (`data_esecuzione`),
    FOREIGN KEY (`componente_id`) REFERENCES `componenti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`tecnico_id`) REFERENCES `users`(`id`) ON DELETE SET NULL,
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- MAGAZZINO / INVENTORY
-- ============================================

CREATE TABLE IF NOT EXISTS `categorie_magazzino` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `nome` VARCHAR(100) NOT NULL,
    `parent_id` INT UNSIGNED,
    `ordine` INT DEFAULT 0,
    INDEX `idx_parent` (`parent_id`),
    FOREIGN KEY (`parent_id`) REFERENCES `categorie_magazzino`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `articoli` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `codice` VARCHAR(50) NOT NULL UNIQUE,
    `descrizione` VARCHAR(255) NOT NULL,
    `categoria_id` INT UNSIGNED,
    `marca` VARCHAR(100),
    `unita_misura` VARCHAR(20) DEFAULT 'pz',
    `prezzo_acquisto` DECIMAL(10,2),
    `prezzo_vendita` DECIMAL(10,2),
    `giacenza` DECIMAL(10,2) DEFAULT 0,
    `scorta_minima` DECIMAL(10,2),
    `ubicazione` VARCHAR(100),
    `note` TEXT,
    `attivo` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_codice` (`codice`),
    INDEX `idx_categoria` (`categoria_id`),
    FOREIGN KEY (`categoria_id`) REFERENCES `categorie_magazzino`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `movimenti_magazzino` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `articolo_id` INT UNSIGNED NOT NULL,
    `tipo` ENUM('carico', 'scarico', 'rettifica') NOT NULL,
    `quantita` DECIMAL(10,2) NOT NULL,
    `foglio_lavoro_id` INT UNSIGNED,
    `motivo` VARCHAR(255),
    `user_id` INT UNSIGNED,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_articolo` (`articolo_id`),
    INDEX `idx_tipo` (`tipo`),
    FOREIGN KEY (`articolo_id`) REFERENCES `articoli`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE SET NULL,
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- FOTO INTERVENTI
-- ============================================

CREATE TABLE IF NOT EXISTS `foto_interventi` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `foglio_lavoro_id` INT UNSIGNED NOT NULL,
    `componente_id` INT UNSIGNED,
    `percorso` VARCHAR(255) NOT NULL,
    `descrizione` VARCHAR(255),
    `tipo` ENUM('prima', 'dopo', 'difetto', 'altro') DEFAULT 'altro',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`foglio_lavoro_id`) REFERENCES `fogli_lavoro`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`componente_id`) REFERENCES `componenti`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- INSERT DEFAULT DATA
-- ============================================

-- Default admin user (password: admin123)
INSERT INTO `users` (`username`, `password`, `email`, `nome`, `cognome`, `ruolo`) VALUES
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@airpro.it', 'Admin', 'Sistema', 'admin');

-- Default checklist templates for caldaia
INSERT INTO `checklist_templates` (`tipologia_componente`, `nome`, `ordine`) VALUES
('caldaia', 'Pulizia Annuale Caldaia', 1),
('caldaia', 'Verifica Regolazione', 2),
('caldaia', 'Verifica Funzionamento', 3),
('caldaia', 'Inversione Stagionale', 4);

INSERT INTO `checklist_items` (`template_id`, `descrizione`, `ordine`, `obbligatorio`) VALUES
(1, 'Pulizia della caldaia', 1, 1),
(1, 'Smontaggio circuiti aria premiscelatori per pulizia bruciatori', 2, 1),
(1, 'Lavaggio completo scambiatori di calore lato fumo e condensa', 3, 1),
(1, 'Pulizia filtri generatori e elettrodi accensione/ionizzazione', 4, 1),
(1, 'Svuotamento circuito e verifica/pompaggio vasi espansione', 5, 0),
(1, 'Pulizia sifoni e vaschette raccogli condensa', 6, 1),
(1, 'Caricamento e sfiato circuito caldaia', 7, 1),
(1, 'Verifica anomalie e taratura combustione', 8, 1),
(1, 'Efficienza energetica - compilazione CIRCE', 9, 0),
(2, 'Verifica regolazione sonde temperatura e pressione', 1, 1),
(2, 'Svuotamento circuito fino a compensatori idraulici', 2, 0),
(2, 'Pompaggio vasi espansione', 3, 0),
(3, 'Verifica corretto funzionamento caldaia', 1, 1),
(3, 'Rilevazione In H2O', 2, 0),
(3, 'Rilevazione Out H2O', 3, 0),
(3, 'Rilevazione T. Esterna', 4, 0),
(3, 'Rilevazione % Lavoro', 5, 0),
(4, 'Inversione impianto - riposo estivo', 1, 0),
(4, 'Messa in servizio', 2, 0);

-- Default checklist for GF (Gruppo Frigo)
INSERT INTO `checklist_templates` (`tipologia_componente`, `nome`, `ordine`) VALUES
('gf', 'Manutenzione Gruppo Frigo', 1);

INSERT INTO `checklist_items` (`template_id`, `descrizione`, `ordine`, `obbligatorio`) VALUES
(5, 'Pulizia macchina (vano compressori, quadro elettrico)', 1, 1),
(5, 'Pulizia scambiatori', 2, 1),
(5, 'Verifica corretto funzionamento (press. esercizio, carica refr.)', 3, 1),
(5, 'Verifica assorbimenti e resistenze carter compressori', 4, 1),
(5, 'Ricerca fughe gas - Compilazione registro FGAS', 5, 1),
(5, 'Efficienza energetica - compilazione CIRCE', 6, 0),
(5, 'Verifica regolatore e parametrizzazione', 7, 0),
(5, 'Inversione impianto', 8, 0);

-- Default warehouse categories
INSERT INTO `categorie_magazzino` (`nome`, `ordine`) VALUES
('Abbigliamento', 1),
('Ricambi', 2),
('Refrigeranti', 3),
('Materiale Elettrico', 4),
('Utensileria', 5);

SET FOREIGN_KEY_CHECKS = 1;