114 lines
4.2 KiB
SQL
114 lines
4.2 KiB
SQL
-- ============================================================
|
||
-- Schema tabelle – Gestione Rimborsi Spese Aziendali
|
||
-- ============================================================
|
||
|
||
USE provapratica;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella UTENTI
|
||
-- Ruoli: DIPENDENTE | RESPONSABILE_AMMINISTRATIVO
|
||
-- ------------------------------------------------------------
|
||
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,
|
||
password_hash VARCHAR(255) NOT NULL COMMENT 'Password salvata come hash (es. bcrypt)',
|
||
ruolo ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO')
|
||
NOT NULL DEFAULT 'DIPENDENTE',
|
||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
||
PRIMARY KEY (utente_id),
|
||
UNIQUE KEY uk_utenti_email (email),
|
||
KEY idx_utenti_ruolo (ruolo)
|
||
) ENGINE=InnoDB
|
||
DEFAULT CHARSET=utf8mb4
|
||
COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella CATEGORIE_SPESA
|
||
-- ------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS categorie_spesa (
|
||
categoria_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
descrizione VARCHAR(150) NOT NULL,
|
||
|
||
PRIMARY KEY (categoria_id),
|
||
UNIQUE KEY uk_categorie_spesa_descrizione (descrizione)
|
||
) ENGINE=InnoDB
|
||
DEFAULT CHARSET=utf8mb4
|
||
COLLATE=utf8mb4_unicode_ci;
|
||
|
||
-- ------------------------------------------------------------
|
||
-- Tabella RICHIESTE_RIMBORSO
|
||
-- Stati: IN_ATTESA | APPROVATA | RIFIUTATA | LIQUIDATA
|
||
-- ------------------------------------------------------------
|
||
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,
|
||
stato ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA')
|
||
NOT NULL DEFAULT 'IN_ATTESA',
|
||
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,
|
||
|
||
PRIMARY KEY (richiesta_id),
|
||
|
||
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;
|