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/migration_fix.sql
-- ============================================
-- AIRPRO CRM - MIGRATION FIX
-- Run this after initial database.sql import
-- ============================================

-- Add missing columns to fogli_lavoro
ALTER TABLE `fogli_lavoro` 
ADD COLUMN IF NOT EXISTS `ora_inizio_effettiva` DATETIME NULL AFTER `ora_fine`,
ADD COLUMN IF NOT EXISTS `ora_fine_effettiva` DATETIME NULL AFTER `ora_inizio_effettiva`;

-- Add pausa_minuti to presenze
ALTER TABLE `presenze`
ADD COLUMN IF NOT EXISTS `pausa_minuti` INT DEFAULT 0 AFTER `ora_uscita`;

-- ============================================
-- EXPANDED CLIENT FIELDS
-- ============================================

-- Add new fields to clienti table
ALTER TABLE `clienti`
ADD COLUMN IF NOT EXISTS `indirizzo` VARCHAR(255) AFTER `pec`,
ADD COLUMN IF NOT EXISTS `cap` VARCHAR(10) AFTER `indirizzo`,
ADD COLUMN IF NOT EXISTS `citta` VARCHAR(100) AFTER `cap`,
ADD COLUMN IF NOT EXISTS `provincia` VARCHAR(5) AFTER `citta`,
ADD COLUMN IF NOT EXISTS `nazione` VARCHAR(100) DEFAULT 'Italia' AFTER `provincia`,
ADD COLUMN IF NOT EXISTS `sito_web` VARCHAR(255) AFTER `nazione`,
ADD COLUMN IF NOT EXISTS `facebook` VARCHAR(255) AFTER `sito_web`,
ADD COLUMN IF NOT EXISTS `instagram` VARCHAR(255) AFTER `facebook`,
ADD COLUMN IF NOT EXISTS `linkedin` VARCHAR(255) AFTER `instagram`,
ADD COLUMN IF NOT EXISTS `codice_sdi` VARCHAR(10) AFTER `linkedin`,
ADD COLUMN IF NOT EXISTS `iban` VARCHAR(34) AFTER `codice_sdi`,
ADD COLUMN IF NOT EXISTS `banca` VARCHAR(100) AFTER `iban`,
ADD COLUMN IF NOT EXISTS `condizioni_pagamento` VARCHAR(100) AFTER `banca`,
ADD COLUMN IF NOT EXISTS `giorni_pagamento` INT DEFAULT 30 AFTER `condizioni_pagamento`,
ADD COLUMN IF NOT EXISTS `sconto_default` DECIMAL(5,2) DEFAULT 0 AFTER `giorni_pagamento`,
ADD COLUMN IF NOT EXISTS `fido_max` DECIMAL(12,2) AFTER `sconto_default`,
ADD COLUMN IF NOT EXISTS `categoria` VARCHAR(50) AFTER `fido_max`,
ADD COLUMN IF NOT EXISTS `settore` VARCHAR(100) AFTER `categoria`,
ADD COLUMN IF NOT EXISTS `referente_nome` VARCHAR(100) AFTER `settore`,
ADD COLUMN IF NOT EXISTS `referente_ruolo` VARCHAR(100) AFTER `referente_nome`,
ADD COLUMN IF NOT EXISTS `referente_telefono` VARCHAR(30) AFTER `referente_ruolo`,
ADD COLUMN IF NOT EXISTS `referente_email` VARCHAR(100) AFTER `referente_telefono`,
ADD COLUMN IF NOT EXISTS `note_interne` TEXT AFTER `referente_email`,
ADD COLUMN IF NOT EXISTS `note_pagamento` TEXT AFTER `note_interne`,
ADD COLUMN IF NOT EXISTS `accesso_portale` TINYINT(1) DEFAULT 0 AFTER `note_pagamento`,
ADD COLUMN IF NOT EXISTS `portale_username` VARCHAR(50) AFTER `accesso_portale`,
ADD COLUMN IF NOT EXISTS `portale_password` VARCHAR(255) AFTER `portale_username`,
ADD COLUMN IF NOT EXISTS `portale_ultimo_accesso` DATETIME AFTER `portale_password`;

-- ============================================
-- CLIENT DOCUMENTS TABLE
-- ============================================

CREATE TABLE IF NOT EXISTS `clienti_documenti` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `cliente_id` INT UNSIGNED NOT NULL,
    `nome_file` VARCHAR(255) NOT NULL,
    `nome_originale` VARCHAR(255) NOT NULL,
    `tipo_documento` VARCHAR(100),
    `descrizione` TEXT,
    `dimensione` INT UNSIGNED,
    `mime_type` VARCHAR(100),
    `visibile_cliente` TINYINT(1) DEFAULT 1,
    `caricato_da` INT UNSIGNED,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_cliente` (`cliente_id`),
    INDEX `idx_tipo` (`tipo_documento`),
    FOREIGN KEY (`cliente_id`) REFERENCES `clienti`(`id`) ON DELETE CASCADE,
    FOREIGN KEY (`caricato_da`) REFERENCES `users`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CLIENT ACCESS LOGS
-- ============================================

CREATE TABLE IF NOT EXISTS `clienti_accessi` (
    `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `cliente_id` INT UNSIGNED NOT NULL,
    `ip_address` VARCHAR(45),
    `user_agent` TEXT,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_cliente` (`cliente_id`),
    INDEX `idx_data` (`created_at`),
    FOREIGN KEY (`cliente_id`) REFERENCES `clienti`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Verify columns exist
SHOW COLUMNS FROM fogli_lavoro LIKE 'ora_%';
SHOW COLUMNS FROM presenze LIKE 'pausa%';
SHOW COLUMNS FROM clienti LIKE 'portale%';