provapraticabackend/initdb/01_schema.sql
AV77web cbf7318594
All checks were successful
Deploy to VPS / build (push) Successful in 17s
Deploy to VPS / deploy (push) Successful in 21s
modifica a select dipendenti
2026-06-09 14:44:14 +02:00

114 lines
4.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ============================================================
-- 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;