Files
Vivier/sql/migration-1.3-vers-1.4.sql
T

142 lines
8.0 KiB
SQL

-- Vivier : passage d'une base 1.3 à 1.4
-- Un seul état « Entretiens en cours », archivage, suivi des entretiens, relances, besoins clients,
-- champs commerciaux, consentement, import en lot, sauvegardes.
-- À exécuter une seule fois dans phpMyAdmin.
SET NAMES utf8mb4;
-- Les deux anciens états d'entretien deviennent « entretiens »
ALTER TABLE candidats MODIFY statut ENUM('recu','en_cours','entretien_1_valide','entretien_2_valide','entretiens',
'non_retenu','valide','embauche') NOT NULL DEFAULT 'recu';
UPDATE candidats SET statut = 'entretiens' WHERE statut IN ('entretien_1_valide', 'entretien_2_valide');
ALTER TABLE candidats MODIFY statut ENUM('recu','en_cours','entretiens','non_retenu','valide','embauche') NOT NULL DEFAULT 'recu';
ALTER TABLE candidats
ADD COLUMN disponible_le DATE NULL AFTER disponibilite,
ADD COLUMN tjm SMALLINT UNSIGNED NULL AFTER disponible_le,
ADD COLUMN salaire_souhaite INT UNSIGNED NULL AFTER tjm,
ADD COLUMN mobilite VARCHAR(200) NULL AFTER salaire_souhaite,
ADD COLUMN teletravail ENUM('non','partiel','complet') NULL AFTER mobilite,
ADD COLUMN archive_le DATETIME NULL AFTER motif_refus,
ADD COLUMN archive_par INT UNSIGNED NULL AFTER archive_le,
ADD COLUMN consentement_le DATE NULL AFTER conserver_jusqu_au,
ADD COLUMN consentement_note VARCHAR(200) NULL AFTER consentement_le,
ADD KEY idx_archive (archive_le),
ADD CONSTRAINT fk_candidat_archive_par FOREIGN KEY (archive_par) REFERENCES utilisateurs(id);
-- Le journal accepte de nouvelles actions sans changer la table à chaque version
ALTER TABLE historique MODIFY action VARCHAR(40) NOT NULL;
-- ---------------------------------------------------------------
-- Besoins clients : les missions à pourvoir, et les profils proposés pour chacune
-- ---------------------------------------------------------------
CREATE TABLE besoins (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
client VARCHAR(200) NOT NULL,
intitule VARCHAR(200) NOT NULL,
description TEXT NULL,
technologies VARCHAR(1000) NULL, -- liste séparée par des virgules
seniorite_min ENUM('junior','intermediaire','confirme','expert') NULL,
langues VARCHAR(300) NULL, -- liste séparée par des virgules
lieu VARCHAR(150) NULL,
teletravail ENUM('non','partiel','complet') NULL,
tjm_max SMALLINT UNSIGNED NULL, -- budget journalier du client, en euros
date_debut DATE NULL,
statut ENUM('ouvert','pourvu','ferme') NOT NULL DEFAULT 'ouvert',
cree_par INT UNSIGNED NOT NULL,
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
modifie_le DATETIME NULL,
KEY idx_besoin_statut (statut),
CONSTRAINT fk_besoin_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE besoin_candidat (
besoin_id INT UNSIGNED NOT NULL,
candidat_id INT UNSIGNED NOT NULL,
etat ENUM('propose','presente','retenu','ecarte') NOT NULL DEFAULT 'propose',
note VARCHAR(500) NULL,
ajoute_par INT UNSIGNED NOT NULL,
ajoute_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (besoin_id, candidat_id),
KEY idx_bc_candidat (candidat_id),
CONSTRAINT fk_bc_besoin FOREIGN KEY (besoin_id) REFERENCES besoins(id) ON DELETE CASCADE,
CONSTRAINT fk_bc_candidat FOREIGN KEY (candidat_id) REFERENCES candidats(id) ON DELETE CASCADE,
CONSTRAINT fk_bc_utilisateur FOREIGN KEY (ajoute_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ---------------------------------------------------------------
-- Entretiens : un candidat peut en passer plusieurs pendant le statut « Entretiens en cours »
-- ---------------------------------------------------------------
CREATE TABLE entretiens (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
candidat_id INT UNSIGNED NOT NULL,
date_entretien DATETIME NOT NULL,
type ENUM('telephone','visio','presentiel','technique','client') NOT NULL,
interlocuteur VARCHAR(150) NULL, -- qui a mené l'entretien
besoin_id INT UNSIGNED NULL, -- besoin client concerné, s'il y en a un
avis ENUM('favorable','reserve','defavorable') NULL,
compte_rendu TEXT NULL,
cree_par INT UNSIGNED NOT NULL,
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_entretien_candidat (candidat_id, date_entretien),
KEY idx_entretien_date (date_entretien),
CONSTRAINT fk_entretien_candidat FOREIGN KEY (candidat_id) REFERENCES candidats(id) ON DELETE CASCADE,
CONSTRAINT fk_entretien_besoin FOREIGN KEY (besoin_id) REFERENCES besoins(id) ON DELETE SET NULL,
CONSTRAINT fk_entretien_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ---------------------------------------------------------------
-- Relances : une chose à faire pour un candidat, à une date donnée
-- ---------------------------------------------------------------
CREATE TABLE relances (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
candidat_id INT UNSIGNED NOT NULL,
echeance DATE NOT NULL,
objet VARCHAR(200) NOT NULL,
fait_le DATETIME NULL,
fait_par INT UNSIGNED NULL,
cree_par INT UNSIGNED NOT NULL,
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_relance_echeance (fait_le, echeance),
KEY idx_relance_candidat (candidat_id),
CONSTRAINT fk_relance_candidat FOREIGN KEY (candidat_id) REFERENCES candidats(id) ON DELETE CASCADE,
CONSTRAINT fk_relance_fait_par FOREIGN KEY (fait_par) REFERENCES utilisateurs(id),
CONSTRAINT fk_relance_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ---------------------------------------------------------------
-- Import en lot : un CV par ligne, en attente d'analyse ou de relecture.
-- La ligne disparaît quand le profil est enregistré.
-- ---------------------------------------------------------------
CREATE TABLE imports_lot (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
jeton CHAR(32) CHARACTER SET ascii NOT NULL, -- nom du dossier temporaire
nom_fichier VARCHAR(255) NOT NULL,
etat ENUM('en_attente','pret','erreur') NOT NULL DEFAULT 'en_attente',
erreur VARCHAR(1000) NULL,
candidat VARCHAR(200) NULL, -- nom lu dans le profil, une fois l'analyse faite
meta JSON NULL, -- fichiers rangés dans le dossier temporaire
cree_par INT UNSIGNED NOT NULL,
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uq_lot_jeton (jeton),
CONSTRAINT fk_lot_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ---------------------------------------------------------------
-- Sauvegardes de la base : une ligne par exécution, réussie ou non
-- ---------------------------------------------------------------
CREATE TABLE sauvegardes (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cree_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
origine ENUM('planifiee','manuelle') NOT NULL,
reussie TINYINT(1) NOT NULL DEFAULT 0,
fichier VARCHAR(100) NULL, -- nom du zip dans stockage/sauvegardes, NULL s'il a été supprimé
taille_octets INT UNSIGNED NULL,
profils INT UNSIGNED NULL, -- nombre de profils dans la sauvegarde
envoi ENUM('envoye','sans_piece','echec','non_demande') NOT NULL DEFAULT 'non_demande',
detail VARCHAR(500) NULL,
cree_par INT UNSIGNED NULL, -- NULL : tâche planifiée
KEY idx_sauvegarde_date (cree_le),
CONSTRAINT fk_sauvegarde_cree_par FOREIGN KEY (cree_par) REFERENCES utilisateurs(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;