142 lines
8.0 KiB
SQL
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;
|