Initial commit
This commit is contained in:
194
src/main/resources/db/migration/V1__Initial_schema.sql
Normal file
194
src/main/resources/db/migration/V1__Initial_schema.sql
Normal file
@@ -0,0 +1,194 @@
|
||||
-- Extension pour UUID
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
|
||||
-- Table clients
|
||||
CREATE TABLE clients (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
nom VARCHAR(100) NOT NULL,
|
||||
prenom VARCHAR(100) NOT NULL,
|
||||
entreprise VARCHAR(200),
|
||||
email VARCHAR(255) UNIQUE,
|
||||
telephone VARCHAR(20),
|
||||
adresse VARCHAR(500),
|
||||
code_postal VARCHAR(10),
|
||||
ville VARCHAR(100),
|
||||
numero_tva VARCHAR(20),
|
||||
siret VARCHAR(14),
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
actif BOOLEAN NOT NULL DEFAULT TRUE
|
||||
);
|
||||
|
||||
-- Index sur clients
|
||||
CREATE INDEX idx_clients_nom ON clients(nom);
|
||||
CREATE INDEX idx_clients_email ON clients(email);
|
||||
CREATE INDEX idx_clients_actif ON clients(actif);
|
||||
CREATE INDEX idx_clients_entreprise ON clients(entreprise);
|
||||
|
||||
-- Table chantiers
|
||||
CREATE TABLE chantiers (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
nom VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
adresse VARCHAR(500) NOT NULL,
|
||||
code_postal VARCHAR(10),
|
||||
ville VARCHAR(100),
|
||||
date_debut DATE NOT NULL,
|
||||
date_fin_prevue DATE,
|
||||
date_fin_reelle DATE,
|
||||
statut VARCHAR(20) NOT NULL DEFAULT 'PLANIFIE',
|
||||
montant_prevu DECIMAL(10,2),
|
||||
montant_reel DECIMAL(10,2),
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
client_id UUID NOT NULL REFERENCES clients(id)
|
||||
);
|
||||
|
||||
-- Index sur chantiers
|
||||
CREATE INDEX idx_chantiers_client_id ON chantiers(client_id);
|
||||
CREATE INDEX idx_chantiers_statut ON chantiers(statut);
|
||||
CREATE INDEX idx_chantiers_date_debut ON chantiers(date_debut);
|
||||
CREATE INDEX idx_chantiers_actif ON chantiers(actif);
|
||||
|
||||
-- Table devis
|
||||
CREATE TABLE devis (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
numero VARCHAR(50) NOT NULL UNIQUE,
|
||||
objet VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
date_emission DATE NOT NULL,
|
||||
date_validite DATE NOT NULL,
|
||||
statut VARCHAR(20) NOT NULL DEFAULT 'BROUILLON',
|
||||
montant_ht DECIMAL(10,2),
|
||||
taux_tva DECIMAL(5,2) DEFAULT 20.0,
|
||||
montant_tva DECIMAL(10,2),
|
||||
montant_ttc DECIMAL(10,2),
|
||||
conditions_paiement TEXT,
|
||||
delai_execution INTEGER,
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
client_id UUID NOT NULL REFERENCES clients(id),
|
||||
chantier_id UUID REFERENCES chantiers(id)
|
||||
);
|
||||
|
||||
-- Index sur devis
|
||||
CREATE INDEX idx_devis_numero ON devis(numero);
|
||||
CREATE INDEX idx_devis_client_id ON devis(client_id);
|
||||
CREATE INDEX idx_devis_chantier_id ON devis(chantier_id);
|
||||
CREATE INDEX idx_devis_statut ON devis(statut);
|
||||
CREATE INDEX idx_devis_date_emission ON devis(date_emission);
|
||||
CREATE INDEX idx_devis_actif ON devis(actif);
|
||||
|
||||
-- Table lignes_devis
|
||||
CREATE TABLE lignes_devis (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
designation VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
quantite DECIMAL(10,2) NOT NULL,
|
||||
unite VARCHAR(20) NOT NULL,
|
||||
prix_unitaire DECIMAL(10,2) NOT NULL,
|
||||
montant_ligne DECIMAL(10,2),
|
||||
ordre INTEGER NOT NULL DEFAULT 0,
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
devis_id UUID NOT NULL REFERENCES devis(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Index sur lignes_devis
|
||||
CREATE INDEX idx_lignes_devis_devis_id ON lignes_devis(devis_id);
|
||||
CREATE INDEX idx_lignes_devis_ordre ON lignes_devis(ordre);
|
||||
|
||||
-- Table factures
|
||||
CREATE TABLE factures (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
numero VARCHAR(50) NOT NULL UNIQUE,
|
||||
objet VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
date_emission DATE NOT NULL,
|
||||
date_echeance DATE NOT NULL,
|
||||
date_paiement DATE,
|
||||
statut VARCHAR(20) NOT NULL DEFAULT 'BROUILLON',
|
||||
montant_ht DECIMAL(10,2),
|
||||
taux_tva DECIMAL(5,2) DEFAULT 20.0,
|
||||
montant_tva DECIMAL(10,2),
|
||||
montant_ttc DECIMAL(10,2),
|
||||
montant_paye DECIMAL(10,2),
|
||||
conditions_paiement TEXT,
|
||||
type_facture VARCHAR(20) NOT NULL DEFAULT 'FACTURE',
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
actif BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
client_id UUID NOT NULL REFERENCES clients(id),
|
||||
chantier_id UUID REFERENCES chantiers(id),
|
||||
devis_id UUID REFERENCES devis(id)
|
||||
);
|
||||
|
||||
-- Index sur factures
|
||||
CREATE INDEX idx_factures_numero ON factures(numero);
|
||||
CREATE INDEX idx_factures_client_id ON factures(client_id);
|
||||
CREATE INDEX idx_factures_chantier_id ON factures(chantier_id);
|
||||
CREATE INDEX idx_factures_devis_id ON factures(devis_id);
|
||||
CREATE INDEX idx_factures_statut ON factures(statut);
|
||||
CREATE INDEX idx_factures_date_emission ON factures(date_emission);
|
||||
CREATE INDEX idx_factures_date_echeance ON factures(date_echeance);
|
||||
CREATE INDEX idx_factures_actif ON factures(actif);
|
||||
|
||||
-- Table lignes_facture
|
||||
CREATE TABLE lignes_facture (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
designation VARCHAR(200) NOT NULL,
|
||||
description TEXT,
|
||||
quantite DECIMAL(10,2) NOT NULL,
|
||||
unite VARCHAR(20) NOT NULL,
|
||||
prix_unitaire DECIMAL(10,2) NOT NULL,
|
||||
montant_ligne DECIMAL(10,2),
|
||||
ordre INTEGER NOT NULL DEFAULT 0,
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
facture_id UUID NOT NULL REFERENCES factures(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Index sur lignes_facture
|
||||
CREATE INDEX idx_lignes_facture_facture_id ON lignes_facture(facture_id);
|
||||
CREATE INDEX idx_lignes_facture_ordre ON lignes_facture(ordre);
|
||||
|
||||
-- Triggers pour mettre à jour date_modification
|
||||
CREATE OR REPLACE FUNCTION update_date_modification()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.date_modification = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE TRIGGER clients_update_date_modification
|
||||
BEFORE UPDATE ON clients
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
CREATE TRIGGER chantiers_update_date_modification
|
||||
BEFORE UPDATE ON chantiers
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
CREATE TRIGGER devis_update_date_modification
|
||||
BEFORE UPDATE ON devis
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
CREATE TRIGGER factures_update_date_modification
|
||||
BEFORE UPDATE ON factures
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
CREATE TRIGGER lignes_devis_update_date_modification
|
||||
BEFORE UPDATE ON lignes_devis
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
CREATE TRIGGER lignes_facture_update_date_modification
|
||||
BEFORE UPDATE ON lignes_facture
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
80
src/main/resources/db/migration/V2__Sample_data.sql
Normal file
80
src/main/resources/db/migration/V2__Sample_data.sql
Normal file
@@ -0,0 +1,80 @@
|
||||
-- Données de test pour les clients
|
||||
INSERT INTO clients (nom, prenom, entreprise, email, telephone, adresse, code_postal, ville, numero_tva, siret) VALUES
|
||||
('Dupont', 'Jean', 'Construction Dupont SARL', 'jean.dupont@construction-dupont.fr', '0123456789', '15 Avenue de la République', '75001', 'Paris', 'FR12345678901', '12345678901234'),
|
||||
('Martin', 'Marie', 'Rénovation Martin', 'marie.martin@renovation-martin.fr', '0987654321', '8 Rue des Artisans', '69001', 'Lyon', 'FR98765432109', '98765432109876'),
|
||||
('Leroy', 'Pierre', 'Maçonnerie Leroy', 'pierre.leroy@maconnerie-leroy.fr', '0456789123', '22 Boulevard des Bâtisseurs', '13001', 'Marseille', 'FR45678912345', '45678912345678'),
|
||||
('Moreau', 'Sophie', 'Électricité Moreau', 'sophie.moreau@electricite-moreau.fr', '0321654987', '5 Impasse de l''Électricité', '31000', 'Toulouse', 'FR32165498765', '32165498765432'),
|
||||
('Bertrand', 'Michel', 'Plomberie Bertrand', 'michel.bertrand@plomberie-bertrand.fr', '0654321987', '18 Rue de la Plomberie', '59000', 'Lille', 'FR65432198765', '65432198765432');
|
||||
|
||||
-- Données de test pour les chantiers
|
||||
INSERT INTO chantiers (nom, description, adresse, code_postal, ville, date_debut, date_fin_prevue, statut, montant_prevu, client_id) VALUES
|
||||
('Rénovation Maison Particulier', 'Rénovation complète d''une maison de 150m²', '45 Rue de la Paix', '75002', 'Paris', '2024-01-15', '2024-06-30', 'EN_COURS', 85000.00, (SELECT id FROM clients WHERE nom = 'Dupont')),
|
||||
('Construction Pavillon', 'Construction d''un pavillon de 120m²', '12 Allée des Roses', '69002', 'Lyon', '2024-03-01', '2024-12-31', 'EN_COURS', 180000.00, (SELECT id FROM clients WHERE nom = 'Martin')),
|
||||
('Rénovation Appartement', 'Rénovation d''un appartement de 80m²', '8 Avenue Victor Hugo', '13002', 'Marseille', '2024-02-01', '2024-05-31', 'PLANIFIE', 45000.00, (SELECT id FROM clients WHERE nom = 'Leroy')),
|
||||
('Installation Électrique', 'Installation électrique complète bureau', '25 Rue du Commerce', '31001', 'Toulouse', '2024-04-01', '2024-04-30', 'PLANIFIE', 12000.00, (SELECT id FROM clients WHERE nom = 'Moreau')),
|
||||
('Rénovation Salle de Bain', 'Rénovation complète salle de bain', '7 Impasse des Lilas', '59001', 'Lille', '2024-01-01', '2024-02-28', 'TERMINE', 8500.00, (SELECT id FROM clients WHERE nom = 'Bertrand'));
|
||||
|
||||
-- Données de test pour les devis
|
||||
INSERT INTO devis (numero, objet, description, date_emission, date_validite, statut, montant_ht, client_id, chantier_id) VALUES
|
||||
('DEV-2024-001', 'Rénovation Maison Particulier', 'Devis pour rénovation complète', '2024-01-01', '2024-02-01', 'ACCEPTE', 70833.33, (SELECT id FROM clients WHERE nom = 'Dupont'), (SELECT id FROM chantiers WHERE nom = 'Rénovation Maison Particulier')),
|
||||
('DEV-2024-002', 'Construction Pavillon', 'Devis construction pavillon', '2024-02-15', '2024-03-15', 'ACCEPTE', 150000.00, (SELECT id FROM clients WHERE nom = 'Martin'), (SELECT id FROM chantiers WHERE nom = 'Construction Pavillon')),
|
||||
('DEV-2024-003', 'Rénovation Appartement', 'Devis rénovation appartement', '2024-01-15', '2024-02-15', 'ENVOYE', 37500.00, (SELECT id FROM clients WHERE nom = 'Leroy'), (SELECT id FROM chantiers WHERE nom = 'Rénovation Appartement')),
|
||||
('DEV-2024-004', 'Installation Électrique', 'Devis installation électrique', '2024-03-15', '2024-04-15', 'BROUILLON', 10000.00, (SELECT id FROM clients WHERE nom = 'Moreau'), (SELECT id FROM chantiers WHERE nom = 'Installation Électrique')),
|
||||
('DEV-2024-005', 'Rénovation Salle de Bain', 'Devis rénovation salle de bain', '2023-12-01', '2024-01-01', 'ACCEPTE', 7083.33, (SELECT id FROM clients WHERE nom = 'Bertrand'), (SELECT id FROM chantiers WHERE nom = 'Rénovation Salle de Bain'));
|
||||
|
||||
-- Données de test pour les lignes de devis
|
||||
INSERT INTO lignes_devis (designation, description, quantite, unite, prix_unitaire, devis_id, ordre) VALUES
|
||||
('Démolition', 'Démolition cloisons existantes', 25.00, 'm²', 35.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 1),
|
||||
('Cloisons', 'Pose nouvelles cloisons placo', 40.00, 'm²', 55.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 2),
|
||||
('Peinture', 'Peinture murs et plafonds', 150.00, 'm²', 25.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 3),
|
||||
('Carrelage', 'Pose carrelage sol', 80.00, 'm²', 45.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 4),
|
||||
('Électricité', 'Installation électrique complète', 1.00, 'forfait', 8500.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 5),
|
||||
('Plomberie', 'Installation plomberie', 1.00, 'forfait', 6500.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-001'), 6),
|
||||
|
||||
('Gros œuvre', 'Fondations et structure', 120.00, 'm²', 450.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-002'), 1),
|
||||
('Charpente', 'Charpente traditionnelle', 120.00, 'm²', 180.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-002'), 2),
|
||||
('Couverture', 'Tuiles et zinguerie', 120.00, 'm²', 85.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-002'), 3),
|
||||
('Isolation', 'Isolation thermique', 200.00, 'm²', 35.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-002'), 4),
|
||||
('Menuiseries', 'Portes et fenêtres', 1.00, 'forfait', 15000.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-002'), 5),
|
||||
|
||||
('Tableaux électriques', 'Pose tableaux électriques', 2.00, 'unité', 850.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-004'), 1),
|
||||
('Câblage', 'Câblage réseau électrique', 150.00, 'ml', 12.50, (SELECT id FROM devis WHERE numero = 'DEV-2024-004'), 2),
|
||||
('Prises et interrupteurs', 'Pose prises et interrupteurs', 45.00, 'unité', 25.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-004'), 3),
|
||||
('Éclairage', 'Installation éclairage LED', 20.00, 'unité', 85.00, (SELECT id FROM devis WHERE numero = 'DEV-2024-004'), 4);
|
||||
|
||||
-- Mettre à jour les montants des lignes de devis (trigger should do this, but let's be explicit)
|
||||
UPDATE lignes_devis SET montant_ligne = quantite * prix_unitaire;
|
||||
|
||||
-- Mettre à jour les montants des devis
|
||||
UPDATE devis SET
|
||||
montant_ht = (SELECT SUM(montant_ligne) FROM lignes_devis WHERE devis_id = devis.id),
|
||||
montant_tva = (SELECT SUM(montant_ligne) FROM lignes_devis WHERE devis_id = devis.id) * taux_tva / 100,
|
||||
montant_ttc = (SELECT SUM(montant_ligne) FROM lignes_devis WHERE devis_id = devis.id) * (1 + taux_tva / 100);
|
||||
|
||||
-- Données de test pour les factures
|
||||
INSERT INTO factures (numero, objet, description, date_emission, date_echeance, statut, montant_ht, client_id, chantier_id, devis_id) VALUES
|
||||
('FAC-2024-001', 'Acompte Rénovation Maison', 'Facture d''acompte 30%', '2024-01-15', '2024-02-14', 'PAYEE', 21250.00, (SELECT id FROM clients WHERE nom = 'Dupont'), (SELECT id FROM chantiers WHERE nom = 'Rénovation Maison Particulier'), (SELECT id FROM devis WHERE numero = 'DEV-2024-001')),
|
||||
('FAC-2024-002', 'Rénovation Salle de Bain', 'Facture finale salle de bain', '2024-02-28', '2024-03-30', 'PAYEE', 7083.33, (SELECT id FROM clients WHERE nom = 'Bertrand'), (SELECT id FROM chantiers WHERE nom = 'Rénovation Salle de Bain'), (SELECT id FROM devis WHERE numero = 'DEV-2024-005'));
|
||||
|
||||
-- Données de test pour les lignes de facture
|
||||
INSERT INTO lignes_facture (designation, description, quantite, unite, prix_unitaire, facture_id, ordre) VALUES
|
||||
('Acompte 30%', 'Acompte sur devis DEV-2024-001', 1.00, 'forfait', 21250.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-001'), 1),
|
||||
('Démolition', 'Démolition carrelage existant', 8.00, 'm²', 25.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 1),
|
||||
('Carrelage', 'Pose carrelage salle de bain', 8.00, 'm²', 65.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 2),
|
||||
('Sanitaires', 'Pose sanitaires complets', 1.00, 'forfait', 1200.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 3),
|
||||
('Plomberie', 'Installation plomberie salle de bain', 1.00, 'forfait', 1500.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 4),
|
||||
('Électricité', 'Installation électrique salle de bain', 1.00, 'forfait', 800.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 5),
|
||||
('Peinture', 'Peinture murs et plafond', 15.00, 'm²', 22.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 6),
|
||||
('Accessoires', 'Miroirs et accessoires', 1.00, 'forfait', 250.00, (SELECT id FROM factures WHERE numero = 'FAC-2024-002'), 7);
|
||||
|
||||
-- Mettre à jour les montants des lignes de facture
|
||||
UPDATE lignes_facture SET montant_ligne = quantite * prix_unitaire;
|
||||
|
||||
-- Mettre à jour les montants des factures
|
||||
UPDATE factures SET
|
||||
montant_ht = (SELECT SUM(montant_ligne) FROM lignes_facture WHERE facture_id = factures.id),
|
||||
montant_tva = (SELECT SUM(montant_ligne) FROM lignes_facture WHERE facture_id = factures.id) * taux_tva / 100,
|
||||
montant_ttc = (SELECT SUM(montant_ligne) FROM lignes_facture WHERE facture_id = factures.id) * (1 + taux_tva / 100);
|
||||
|
||||
-- Marquer les factures payées
|
||||
UPDATE factures SET montant_paye = montant_ttc WHERE statut = 'PAYEE';
|
||||
54
src/main/resources/db/migration/V3__create_auth_tables.sql
Normal file
54
src/main/resources/db/migration/V3__create_auth_tables.sql
Normal file
@@ -0,0 +1,54 @@
|
||||
-- Migration V1.0.0 - Création des tables d'authentification
|
||||
|
||||
-- Table des utilisateurs
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
email VARCHAR(255) NOT NULL UNIQUE,
|
||||
nom VARCHAR(100) NOT NULL,
|
||||
prenom VARCHAR(100) NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
role VARCHAR(50) NOT NULL DEFAULT 'OUVRIER',
|
||||
actif BOOLEAN NOT NULL DEFAULT true,
|
||||
telephone VARCHAR(20),
|
||||
adresse TEXT,
|
||||
code_postal VARCHAR(10),
|
||||
ville VARCHAR(100),
|
||||
date_creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
date_modification TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
derniere_connexion TIMESTAMP,
|
||||
reset_password_token VARCHAR(255),
|
||||
reset_password_expiry TIMESTAMP
|
||||
);
|
||||
|
||||
-- Index pour améliorer les performances
|
||||
CREATE INDEX idx_users_email ON users(email);
|
||||
CREATE INDEX idx_users_role ON users(role);
|
||||
CREATE INDEX idx_users_actif ON users(actif);
|
||||
CREATE INDEX idx_users_reset_token ON users(reset_password_token);
|
||||
|
||||
-- Trigger pour mettre à jour automatiquement date_modification (utilise la fonction existante)
|
||||
CREATE TRIGGER update_users_modified
|
||||
BEFORE UPDATE ON users
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_date_modification();
|
||||
|
||||
-- L'utilisateur administrateur sera créé au démarrage par DataInitService
|
||||
|
||||
-- Commentaires sur les colonnes
|
||||
COMMENT ON TABLE users IS 'Table des utilisateurs du système BTP Xpress';
|
||||
COMMENT ON COLUMN users.id IS 'Identifiant unique de l''utilisateur';
|
||||
COMMENT ON COLUMN users.email IS 'Email de l''utilisateur (identifiant de connexion)';
|
||||
COMMENT ON COLUMN users.nom IS 'Nom de famille de l''utilisateur';
|
||||
COMMENT ON COLUMN users.prenom IS 'Prénom de l''utilisateur';
|
||||
COMMENT ON COLUMN users.password IS 'Mot de passe hashé de l''utilisateur';
|
||||
COMMENT ON COLUMN users.role IS 'Rôle de l''utilisateur (ADMIN, MANAGER, CHEF_CHANTIER, OUVRIER, COMPTABLE)';
|
||||
COMMENT ON COLUMN users.actif IS 'Indique si le compte utilisateur est actif';
|
||||
COMMENT ON COLUMN users.telephone IS 'Numéro de téléphone de l''utilisateur';
|
||||
COMMENT ON COLUMN users.adresse IS 'Adresse complète de l''utilisateur';
|
||||
COMMENT ON COLUMN users.code_postal IS 'Code postal de l''utilisateur';
|
||||
COMMENT ON COLUMN users.ville IS 'Ville de l''utilisateur';
|
||||
COMMENT ON COLUMN users.date_creation IS 'Date de création du compte utilisateur';
|
||||
COMMENT ON COLUMN users.date_modification IS 'Date de dernière modification du compte';
|
||||
COMMENT ON COLUMN users.derniere_connexion IS 'Date de dernière connexion de l''utilisateur';
|
||||
COMMENT ON COLUMN users.reset_password_token IS 'Token pour la réinitialisation du mot de passe';
|
||||
COMMENT ON COLUMN users.reset_password_expiry IS 'Date d''expiration du token de réinitialisation';
|
||||
@@ -0,0 +1,63 @@
|
||||
-- Migration V4: Création des templates de phases pour différents types de chantiers
|
||||
|
||||
-- Templates de phases pour IMMEUBLE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_moyenne_jours, cout_moyen) VALUES
|
||||
(gen_random_uuid(), 'Études et conception', 'IMMEUBLE', 1, 'Études techniques, plans architecturaux et obtention des permis', 30, 50000),
|
||||
(gen_random_uuid(), 'Préparation du terrain', 'IMMEUBLE', 2, 'Démolition, terrassement et préparation du site', 15, 80000),
|
||||
(gen_random_uuid(), 'Fondations', 'IMMEUBLE', 3, 'Réalisation des fondations et sous-sol', 45, 250000),
|
||||
(gen_random_uuid(), 'Gros œuvre', 'IMMEUBLE', 4, 'Construction de la structure porteuse', 120, 800000),
|
||||
(gen_random_uuid(), 'Étanchéité et toiture', 'IMMEUBLE', 5, 'Mise hors d''eau et hors d''air', 30, 150000),
|
||||
(gen_random_uuid(), 'Second œuvre', 'IMMEUBLE', 6, 'Cloisons, électricité, plomberie, menuiseries', 90, 500000),
|
||||
(gen_random_uuid(), 'Finitions', 'IMMEUBLE', 7, 'Peinture, revêtements, aménagements intérieurs', 60, 300000),
|
||||
(gen_random_uuid(), 'Équipements techniques', 'IMMEUBLE', 8, 'Ascenseurs, chauffage, ventilation, climatisation', 30, 200000),
|
||||
(gen_random_uuid(), 'Aménagements extérieurs', 'IMMEUBLE', 9, 'Parkings, espaces verts, voiries', 30, 150000),
|
||||
(gen_random_uuid(), 'Réception et livraison', 'IMMEUBLE', 10, 'Contrôles finaux, levée des réserves et remise des clés', 15, 20000);
|
||||
|
||||
-- Templates de phases pour MAISON_INDIVIDUELLE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_moyenne_jours, cout_moyen) VALUES
|
||||
(gen_random_uuid(), 'Étude et conception', 'MAISON_INDIVIDUELLE', 1, 'Plans, permis de construire, études techniques', 21, 5000),
|
||||
(gen_random_uuid(), 'Terrassement', 'MAISON_INDIVIDUELLE', 2, 'Préparation du terrain et excavation', 5, 8000),
|
||||
(gen_random_uuid(), 'Fondations', 'MAISON_INDIVIDUELLE', 3, 'Coulage des fondations et soubassement', 10, 15000),
|
||||
(gen_random_uuid(), 'Maçonnerie', 'MAISON_INDIVIDUELLE', 4, 'Élévation des murs porteurs', 20, 40000),
|
||||
(gen_random_uuid(), 'Charpente et couverture', 'MAISON_INDIVIDUELLE', 5, 'Pose de la charpente et de la toiture', 10, 25000),
|
||||
(gen_random_uuid(), 'Menuiseries extérieures', 'MAISON_INDIVIDUELLE', 6, 'Installation des portes et fenêtres', 5, 15000),
|
||||
(gen_random_uuid(), 'Plomberie et électricité', 'MAISON_INDIVIDUELLE', 7, 'Installation des réseaux', 15, 20000),
|
||||
(gen_random_uuid(), 'Isolation et cloisons', 'MAISON_INDIVIDUELLE', 8, 'Pose de l''isolation et des cloisons intérieures', 10, 12000),
|
||||
(gen_random_uuid(), 'Finitions intérieures', 'MAISON_INDIVIDUELLE', 9, 'Peinture, carrelage, parquet', 20, 18000),
|
||||
(gen_random_uuid(), 'Extérieurs', 'MAISON_INDIVIDUELLE', 10, 'Terrasse, allées, clôture', 10, 10000);
|
||||
|
||||
-- Templates de phases pour RENOVATION
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_moyenne_jours, cout_moyen) VALUES
|
||||
(gen_random_uuid(), 'Diagnostic', 'RENOVATION', 1, 'État des lieux et diagnostic technique', 5, 2000),
|
||||
(gen_random_uuid(), 'Dépose et démolition', 'RENOVATION', 2, 'Retrait des éléments à remplacer', 7, 5000),
|
||||
(gen_random_uuid(), 'Gros œuvre', 'RENOVATION', 3, 'Reprises structurelles si nécessaire', 15, 20000),
|
||||
(gen_random_uuid(), 'Réseaux', 'RENOVATION', 4, 'Mise aux normes électricité et plomberie', 10, 12000),
|
||||
(gen_random_uuid(), 'Isolation', 'RENOVATION', 5, 'Amélioration de l''isolation thermique', 8, 8000),
|
||||
(gen_random_uuid(), 'Aménagements', 'RENOVATION', 6, 'Nouveaux cloisonnements et aménagements', 12, 15000),
|
||||
(gen_random_uuid(), 'Finitions', 'RENOVATION', 7, 'Peinture et revêtements', 10, 10000),
|
||||
(gen_random_uuid(), 'Nettoyage et réception', 'RENOVATION', 8, 'Nettoyage final et réception des travaux', 2, 1000);
|
||||
|
||||
-- Templates de phases pour BATIMENT_INDUSTRIEL
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_moyenne_jours, cout_moyen) VALUES
|
||||
(gen_random_uuid(), 'Études préliminaires', 'BATIMENT_INDUSTRIEL', 1, 'Études de faisabilité et d''impact', 45, 75000),
|
||||
(gen_random_uuid(), 'Terrassement industriel', 'BATIMENT_INDUSTRIEL', 2, 'Préparation de la plateforme', 20, 150000),
|
||||
(gen_random_uuid(), 'Fondations spéciales', 'BATIMENT_INDUSTRIEL', 3, 'Fondations renforcées pour charges lourdes', 30, 300000),
|
||||
(gen_random_uuid(), 'Structure métallique', 'BATIMENT_INDUSTRIEL', 4, 'Montage de la structure porteuse', 45, 600000),
|
||||
(gen_random_uuid(), 'Bardage et couverture', 'BATIMENT_INDUSTRIEL', 5, 'Enveloppe du bâtiment', 30, 250000),
|
||||
(gen_random_uuid(), 'Dallage industriel', 'BATIMENT_INDUSTRIEL', 6, 'Réalisation du dallage haute résistance', 20, 200000),
|
||||
(gen_random_uuid(), 'Réseaux techniques', 'BATIMENT_INDUSTRIEL', 7, 'Électricité HT/BT, fluides industriels', 40, 350000),
|
||||
(gen_random_uuid(), 'Équipements spécifiques', 'BATIMENT_INDUSTRIEL', 8, 'Installation des équipements de production', 30, 500000),
|
||||
(gen_random_uuid(), 'Sécurité et conformité', 'BATIMENT_INDUSTRIEL', 9, 'Mise en conformité et systèmes de sécurité', 15, 100000),
|
||||
(gen_random_uuid(), 'Mise en service', 'BATIMENT_INDUSTRIEL', 10, 'Tests et mise en service progressive', 10, 50000);
|
||||
|
||||
-- Templates de phases pour INFRASTRUCTURE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_moyenne_jours, cout_moyen) VALUES
|
||||
(gen_random_uuid(), 'Études d''impact', 'INFRASTRUCTURE', 1, 'Études environnementales et techniques', 60, 100000),
|
||||
(gen_random_uuid(), 'Acquisitions foncières', 'INFRASTRUCTURE', 2, 'Achat des terrains nécessaires', 90, 500000),
|
||||
(gen_random_uuid(), 'Travaux préparatoires', 'INFRASTRUCTURE', 3, 'Déviations, protections, installations de chantier', 30, 200000),
|
||||
(gen_random_uuid(), 'Terrassements', 'INFRASTRUCTURE', 4, 'Déblais, remblais, modelage du terrain', 60, 800000),
|
||||
(gen_random_uuid(), 'Ouvrages d''art', 'INFRASTRUCTURE', 5, 'Construction des ponts, tunnels, viaducs', 180, 2000000),
|
||||
(gen_random_uuid(), 'Corps de chaussée', 'INFRASTRUCTURE', 6, 'Mise en œuvre des couches de roulement', 90, 1500000),
|
||||
(gen_random_uuid(), 'Équipements', 'INFRASTRUCTURE', 7, 'Signalisation, éclairage, barrières', 30, 300000),
|
||||
(gen_random_uuid(), 'Finitions', 'INFRASTRUCTURE', 8, 'Marquage, espaces verts, finitions diverses', 20, 150000),
|
||||
(gen_random_uuid(), 'Réception', 'INFRASTRUCTURE', 9, 'Contrôles et réception des ouvrages', 10, 50000);
|
||||
@@ -0,0 +1,61 @@
|
||||
-- Migration V4: Création des templates de phases pour différents types de chantiers (version corrigée)
|
||||
|
||||
-- Templates de phases pour IMMEUBLE_COLLECTIF (remplace IMMEUBLE)
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_prevue_jours, actif, bloquante, critique) VALUES
|
||||
(gen_random_uuid(), 'Études et conception', 'IMMEUBLE_COLLECTIF', 1, 'Études techniques, plans architecturaux et obtention des permis', 30, true, false, false),
|
||||
(gen_random_uuid(), 'Préparation du terrain', 'IMMEUBLE_COLLECTIF', 2, 'Démolition, terrassement et préparation du site', 15, true, true, false),
|
||||
(gen_random_uuid(), 'Fondations', 'IMMEUBLE_COLLECTIF', 3, 'Réalisation des fondations et sous-sol', 45, true, true, true),
|
||||
(gen_random_uuid(), 'Gros œuvre', 'IMMEUBLE_COLLECTIF', 4, 'Construction de la structure porteuse', 120, true, true, true),
|
||||
(gen_random_uuid(), 'Étanchéité et toiture', 'IMMEUBLE_COLLECTIF', 5, 'Mise hors d''eau et hors d''air', 30, true, true, false),
|
||||
(gen_random_uuid(), 'Second œuvre', 'IMMEUBLE_COLLECTIF', 6, 'Cloisons, électricité, plomberie, menuiseries', 90, true, false, false),
|
||||
(gen_random_uuid(), 'Finitions', 'IMMEUBLE_COLLECTIF', 7, 'Peinture, revêtements, aménagements intérieurs', 60, true, false, false),
|
||||
(gen_random_uuid(), 'Équipements techniques', 'IMMEUBLE_COLLECTIF', 8, 'Ascenseurs, chauffage, ventilation, climatisation', 30, true, false, true),
|
||||
(gen_random_uuid(), 'Aménagements extérieurs', 'IMMEUBLE_COLLECTIF', 9, 'Parkings, espaces verts, voiries', 30, true, false, false),
|
||||
(gen_random_uuid(), 'Réception et livraison', 'IMMEUBLE_COLLECTIF', 10, 'Contrôles finaux, levée des réserves et remise des clés', 15, true, false, false);
|
||||
|
||||
-- Templates de phases pour MAISON_INDIVIDUELLE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_prevue_jours, actif, bloquante, critique, priorite) VALUES
|
||||
(gen_random_uuid(), 'Étude et conception', 'MAISON_INDIVIDUELLE', 1, 'Plans, permis de construire, études techniques', 21, true, false, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Terrassement', 'MAISON_INDIVIDUELLE', 2, 'Préparation du terrain et excavation', 5, true, true, false, 'HAUTE'),
|
||||
(gen_random_uuid(), 'Fondations', 'MAISON_INDIVIDUELLE', 3, 'Coulage des fondations et soubassement', 10, true, true, true, 'CRITIQUE'),
|
||||
(gen_random_uuid(), 'Maçonnerie', 'MAISON_INDIVIDUELLE', 4, 'Élévation des murs porteurs', 20, true, true, true, 'CRITIQUE'),
|
||||
(gen_random_uuid(), 'Charpente et couverture', 'MAISON_INDIVIDUELLE', 5, 'Pose de la charpente et de la toiture', 10, true, true, false, 'HAUTE'),
|
||||
(gen_random_uuid(), 'Menuiseries extérieures', 'MAISON_INDIVIDUELLE', 6, 'Installation des portes et fenêtres', 5, true, false, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Plomberie et électricité', 'MAISON_INDIVIDUELLE', 7, 'Installation des réseaux', 15, true, false, true, 'HAUTE'),
|
||||
(gen_random_uuid(), 'Isolation et cloisons', 'MAISON_INDIVIDUELLE', 8, 'Pose de l''isolation et des cloisons intérieures', 10, true, false, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Finitions intérieures', 'MAISON_INDIVIDUELLE', 9, 'Peinture, carrelage, parquet', 20, true, false, false, 'BASSE'),
|
||||
(gen_random_uuid(), 'Extérieurs', 'MAISON_INDIVIDUELLE', 10, 'Terrasse, allées, clôture', 10, true, false, false, 'BASSE');
|
||||
|
||||
-- Templates de phases pour RENOVATION_RESIDENTIELLE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_prevue_jours, actif, bloquante, critique, priorite) VALUES
|
||||
(gen_random_uuid(), 'Diagnostic', 'RENOVATION_RESIDENTIELLE', 1, 'État des lieux et diagnostic technique', 5, true, true, false, 'HAUTE'),
|
||||
(gen_random_uuid(), 'Dépose et démolition', 'RENOVATION_RESIDENTIELLE', 2, 'Retrait des éléments à remplacer', 7, true, true, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Gros œuvre', 'RENOVATION_RESIDENTIELLE', 3, 'Reprises structurelles si nécessaire', 15, true, true, true, 'CRITIQUE'),
|
||||
(gen_random_uuid(), 'Réseaux', 'RENOVATION_RESIDENTIELLE', 4, 'Mise aux normes électricité et plomberie', 10, true, false, true, 'HAUTE'),
|
||||
(gen_random_uuid(), 'Isolation', 'RENOVATION_RESIDENTIELLE', 5, 'Amélioration de l''isolation thermique', 8, true, false, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Aménagements', 'RENOVATION_RESIDENTIELLE', 6, 'Nouveaux cloisonnements et aménagements', 12, true, false, false, 'NORMALE'),
|
||||
(gen_random_uuid(), 'Finitions', 'RENOVATION_RESIDENTIELLE', 7, 'Peinture et revêtements', 10, true, false, false, 'BASSE'),
|
||||
(gen_random_uuid(), 'Nettoyage et réception', 'RENOVATION_RESIDENTIELLE', 8, 'Nettoyage final et réception des travaux', 2, true, false, false, 'BASSE');
|
||||
|
||||
-- Templates de phases pour BUREAU_COMMERCIAL
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_prevue_jours, actif, bloquante, critique, livrables_attendus) VALUES
|
||||
(gen_random_uuid(), 'Conception', 'BUREAU_COMMERCIAL', 1, 'Plans d''aménagement et design intérieur', 15, true, false, false, 'Plans détaillés, 3D, devis'),
|
||||
(gen_random_uuid(), 'Préparation', 'BUREAU_COMMERCIAL', 2, 'Préparation des espaces', 5, true, true, false, 'Espaces libérés et protégés'),
|
||||
(gen_random_uuid(), 'Cloisonnement', 'BUREAU_COMMERCIAL', 3, 'Installation des cloisons et espaces', 10, true, true, false, 'Espaces délimités selon plan'),
|
||||
(gen_random_uuid(), 'Réseaux techniques', 'BUREAU_COMMERCIAL', 4, 'Câblage informatique, électricité, climatisation', 15, true, false, true, 'Réseaux conformes et testés'),
|
||||
(gen_random_uuid(), 'Revêtements', 'BUREAU_COMMERCIAL', 5, 'Sols, murs, plafonds', 10, true, false, false, 'Surfaces finies selon cahier des charges'),
|
||||
(gen_random_uuid(), 'Mobilier', 'BUREAU_COMMERCIAL', 6, 'Installation du mobilier de bureau', 5, true, false, false, 'Bureaux équipés et fonctionnels'),
|
||||
(gen_random_uuid(), 'Finitions et signalétique', 'BUREAU_COMMERCIAL', 7, 'Touches finales et signalisation', 3, true, false, false, 'Espaces prêts à l''usage');
|
||||
|
||||
-- Templates de phases pour ENTREPOT_LOGISTIQUE
|
||||
INSERT INTO phase_templates (id, nom, type_chantier, ordre_execution, description, duree_prevue_jours, actif, bloquante, critique, mesures_securite) VALUES
|
||||
(gen_random_uuid(), 'Études logistiques', 'ENTREPOT_LOGISTIQUE', 1, 'Analyse des flux et besoins de stockage', 20, true, false, false, 'Respect des normes ICPE'),
|
||||
(gen_random_uuid(), 'Terrassement', 'ENTREPOT_LOGISTIQUE', 2, 'Préparation de la plateforme', 15, true, true, false, 'Sécurisation du chantier, signalisation'),
|
||||
(gen_random_uuid(), 'Fondations industrielles', 'ENTREPOT_LOGISTIQUE', 3, 'Fondations renforcées', 20, true, true, true, 'Port des EPI obligatoire'),
|
||||
(gen_random_uuid(), 'Structure métallique', 'ENTREPOT_LOGISTIQUE', 4, 'Montage de la charpente métallique', 30, true, true, true, 'Harnais de sécurité, échafaudages normés'),
|
||||
(gen_random_uuid(), 'Bardage', 'ENTREPOT_LOGISTIQUE', 5, 'Pose du bardage et isolation', 20, true, false, false, 'Travail en hauteur sécurisé'),
|
||||
(gen_random_uuid(), 'Dallage', 'ENTREPOT_LOGISTIQUE', 6, 'Réalisation du dallage industriel', 15, true, true, false, 'Protection respiratoire lors du lissage'),
|
||||
(gen_random_uuid(), 'Équipements', 'ENTREPOT_LOGISTIQUE', 7, 'Portes sectionnelles, quais de chargement', 10, true, false, false, 'Formation spécifique pour les équipements'),
|
||||
(gen_random_uuid(), 'Réseaux', 'ENTREPOT_LOGISTIQUE', 8, 'Électricité, éclairage, sprinklers', 15, true, false, true, 'Consignation électrique obligatoire'),
|
||||
(gen_random_uuid(), 'Voiries et aires', 'ENTREPOT_LOGISTIQUE', 9, 'Création des accès et parkings', 10, true, false, false, 'Circulation alternée, signaleurs'),
|
||||
(gen_random_uuid(), 'Mise en service', 'ENTREPOT_LOGISTIQUE', 10, 'Tests et réception', 5, true, false, false, 'Vérification de tous les systèmes de sécurité');
|
||||
Reference in New Issue
Block a user