2026-06-09 14:44:14 +02:00
|
|
|
|
-- ============================================================
|
|
|
|
|
|
-- Schema tabelle – Gestione Rimborsi Spese Aziendali
|
|
|
|
|
|
-- ============================================================
|
|
|
|
|
|
|
2026-06-09 13:15:32 +02:00
|
|
|
|
USE provapratica;
|
|
|
|
|
|
|
2026-06-09 14:44:14 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
|
|
|
|
|
-- Tabella UTENTI
|
|
|
|
|
|
-- Ruoli: DIPENDENTE | RESPONSABILE_AMMINISTRATIVO
|
|
|
|
|
|
-- ------------------------------------------------------------
|
2026-06-09 13:15:32 +02:00
|
|
|
|
CREATE TABLE IF NOT EXISTS utenti (
|
|
|
|
|
|
utente_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
nome VARCHAR(100) NOT NULL,
|
|
|
|
|
|
cognome VARCHAR(100) NOT NULL,
|
|
|
|
|
|
email VARCHAR(255) NOT NULL,
|
2026-06-09 14:44:14 +02:00
|
|
|
|
password_hash VARCHAR(255) NOT NULL COMMENT 'Password salvata come hash (es. bcrypt)',
|
|
|
|
|
|
ruolo ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO')
|
|
|
|
|
|
NOT NULL DEFAULT 'DIPENDENTE',
|
2026-06-09 13:15:32 +02:00
|
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
2026-06-09 14:44:14 +02:00
|
|
|
|
|
2026-06-09 13:15:32 +02:00
|
|
|
|
PRIMARY KEY (utente_id),
|
2026-06-09 14:44:14 +02:00
|
|
|
|
UNIQUE KEY uk_utenti_email (email),
|
|
|
|
|
|
KEY idx_utenti_ruolo (ruolo)
|
|
|
|
|
|
) ENGINE=InnoDB
|
|
|
|
|
|
DEFAULT CHARSET=utf8mb4
|
|
|
|
|
|
COLLATE=utf8mb4_unicode_ci;
|
2026-06-09 13:15:32 +02:00
|
|
|
|
|
2026-06-09 14:44:14 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
|
|
|
|
|
-- Tabella CATEGORIE_SPESA
|
|
|
|
|
|
-- ------------------------------------------------------------
|
2026-06-09 13:15:32 +02:00
|
|
|
|
CREATE TABLE IF NOT EXISTS categorie_spesa (
|
|
|
|
|
|
categoria_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
descrizione VARCHAR(150) NOT NULL,
|
2026-06-09 14:44:14 +02:00
|
|
|
|
|
2026-06-09 13:15:32 +02:00
|
|
|
|
PRIMARY KEY (categoria_id),
|
|
|
|
|
|
UNIQUE KEY uk_categorie_spesa_descrizione (descrizione)
|
2026-06-09 14:44:14 +02:00
|
|
|
|
) ENGINE=InnoDB
|
|
|
|
|
|
DEFAULT CHARSET=utf8mb4
|
|
|
|
|
|
COLLATE=utf8mb4_unicode_ci;
|
2026-06-09 13:15:32 +02:00
|
|
|
|
|
2026-06-09 14:44:14 +02:00
|
|
|
|
-- ------------------------------------------------------------
|
|
|
|
|
|
-- Tabella RICHIESTE_RIMBORSO
|
|
|
|
|
|
-- Stati: IN_ATTESA | APPROVATA | RIFIUTATA | LIQUIDATA
|
|
|
|
|
|
-- ------------------------------------------------------------
|
2026-06-09 13:15:32 +02:00
|
|
|
|
CREATE TABLE IF NOT EXISTS richieste_rimborso (
|
|
|
|
|
|
richiesta_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
|
|
data_inserimento DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
data_spesa DATE NOT NULL,
|
|
|
|
|
|
categoria_id INT UNSIGNED NOT NULL,
|
|
|
|
|
|
importo DECIMAL(10, 2) NOT NULL,
|
|
|
|
|
|
descrizione VARCHAR(500) NOT NULL,
|
|
|
|
|
|
riferimento_giustificativo VARCHAR(255) NULL,
|
2026-06-09 14:44:14 +02:00
|
|
|
|
stato ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA')
|
|
|
|
|
|
NOT NULL DEFAULT 'IN_ATTESA',
|
2026-06-09 13:15:32 +02:00
|
|
|
|
dipendente_id INT UNSIGNED NOT NULL,
|
|
|
|
|
|
data_valutazione DATETIME NULL,
|
|
|
|
|
|
responsabile_valutazione_id INT UNSIGNED NULL,
|
|
|
|
|
|
motivazione_rifiuto VARCHAR(500) NULL,
|
|
|
|
|
|
data_liquidazione DATETIME NULL,
|
2026-06-09 14:44:14 +02:00
|
|
|
|
|
2026-06-09 13:15:32 +02:00
|
|
|
|
PRIMARY KEY (richiesta_id),
|
2026-06-09 14:44:14 +02:00
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_richieste_categoria
|
|
|
|
|
|
FOREIGN KEY (categoria_id)
|
|
|
|
|
|
REFERENCES categorie_spesa (categoria_id)
|
|
|
|
|
|
ON UPDATE CASCADE
|
|
|
|
|
|
ON DELETE RESTRICT,
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_richieste_dipendente
|
|
|
|
|
|
FOREIGN KEY (dipendente_id)
|
|
|
|
|
|
REFERENCES utenti (utente_id)
|
|
|
|
|
|
ON UPDATE CASCADE
|
|
|
|
|
|
ON DELETE RESTRICT,
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT fk_richieste_responsabile
|
|
|
|
|
|
FOREIGN KEY (responsabile_valutazione_id)
|
|
|
|
|
|
REFERENCES utenti (utente_id)
|
|
|
|
|
|
ON UPDATE CASCADE
|
|
|
|
|
|
ON DELETE SET NULL,
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT chk_richieste_importo_positivo
|
|
|
|
|
|
CHECK (importo > 0),
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT chk_richieste_descrizione_non_vuota
|
|
|
|
|
|
CHECK (CHAR_LENGTH(TRIM(descrizione)) > 0),
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT chk_richieste_data_valutazione
|
|
|
|
|
|
CHECK (
|
|
|
|
|
|
data_valutazione IS NULL
|
|
|
|
|
|
OR data_valutazione >= data_inserimento
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT chk_richieste_data_liquidazione
|
|
|
|
|
|
CHECK (
|
|
|
|
|
|
data_liquidazione IS NULL
|
|
|
|
|
|
OR data_valutazione IS NULL
|
|
|
|
|
|
OR data_liquidazione >= data_valutazione
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
CONSTRAINT chk_richieste_rifiuto_motivazione
|
|
|
|
|
|
CHECK (
|
|
|
|
|
|
stato <> 'RIFIUTATA'
|
|
|
|
|
|
OR motivazione_rifiuto IS NOT NULL
|
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
|
|
KEY idx_richieste_stato (stato),
|
|
|
|
|
|
KEY idx_richieste_data_spesa (data_spesa),
|
|
|
|
|
|
KEY idx_richieste_dipendente (dipendente_id),
|
|
|
|
|
|
KEY idx_richieste_categoria (categoria_id),
|
|
|
|
|
|
KEY idx_richieste_data_inserimento (data_inserimento)
|
|
|
|
|
|
) ENGINE=InnoDB
|
|
|
|
|
|
DEFAULT CHARSET=utf8mb4
|
|
|
|
|
|
COLLATE=utf8mb4_unicode_ci;
|