feat(v2.0.3): Marchés hybrides et améliorations multiples
Fonctionnalités principales : 1. Marchés hybrides - Onglet Mercurial - Ajout onglet Mercurial avec style distinct (vert, gras, blanc) - Affichage des produits mercuriaux pour marchés hybrides - Filtrage automatique des produits "Hors Marché 999" - Documentation Phase 2 avec CAS 1 et CAS 2 de marchés hybrides - Règles métier pour validation différenciée (devis 100% mercurial vs mixte) 2. Corrections bugs - Fix flag chkChange sur onglet "Sélection Produits" (callback asynchrone) - Plus d'alerte intempestive après sauvegarde des produits 3. Outils de déploiement - Nouveau script deploy-file.sh pour déploiement unitaire (DEV/PROD) - Amélioration deploy-cleo.sh 4. Gestion multi-contacts (v2.0.3) - Contrôleur AJAX cjxcontacts.php - Script migration clients_contacts - Documentation complète 5. Documentation - Mise à jour TODO.md avec Phase 2 marchés hybrides - Mise à jour README.md v2.0.3 - Ajout RULES.md - Ajout migration_clients_contacts.sql 6. Nettoyage - Suppression fichiers obsolètes (conf_new.php, conf_old.php, uof_linet_20250911.sql) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
143
docs/migration_clients_contacts.sql
Normal file
143
docs/migration_clients_contacts.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
-- ============================================================================
|
||||
-- MIGRATION: Gestion multi-contacts par client
|
||||
-- Version: 2.0.3
|
||||
-- Date: 2025-10-21
|
||||
--
|
||||
-- Description:
|
||||
-- - Création de la table clients_contacts
|
||||
-- - Migration des contacts existants depuis la table clients
|
||||
-- - Ajout du champ fk_contact dans la table devis
|
||||
--
|
||||
-- IMPORTANT: Ce script ne modifie PAS la table clients (champs conservés)
|
||||
-- ============================================================================
|
||||
|
||||
USE cleo;
|
||||
|
||||
-- ============================================================================
|
||||
-- ÉTAPE 1: Création de la table clients_contacts
|
||||
-- ============================================================================
|
||||
|
||||
DROP TABLE IF EXISTS `clients_contacts`;
|
||||
|
||||
CREATE TABLE `clients_contacts` (
|
||||
`rowid` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`fk_client` int(11) NOT NULL,
|
||||
`nom` varchar(50) DEFAULT NULL,
|
||||
`prenom` varchar(50) DEFAULT NULL,
|
||||
`fonction` varchar(50) DEFAULT NULL,
|
||||
`telephone` varchar(20) DEFAULT NULL,
|
||||
`mobile` varchar(20) DEFAULT NULL,
|
||||
`email` varchar(75) DEFAULT NULL,
|
||||
`principal` tinyint(1) DEFAULT 0 COMMENT 'Contact principal du client',
|
||||
`active` tinyint(1) DEFAULT 1,
|
||||
`date_creat` datetime DEFAULT NULL,
|
||||
`fk_user_creat` int(11) DEFAULT NULL,
|
||||
`date_modif` datetime DEFAULT NULL,
|
||||
`fk_user_modif` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`rowid`),
|
||||
UNIQUE KEY `rowid_UNIQUE` (`rowid`),
|
||||
KEY `fk_client` (`fk_client`),
|
||||
KEY `principal` (`fk_client`, `principal`),
|
||||
KEY `email` (`email`),
|
||||
CONSTRAINT `clients_contacts_fk_client` FOREIGN KEY (`fk_client`) REFERENCES `clients` (`rowid`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Contacts multiples par client' `PAGE_COMPRESSED`='ON';
|
||||
|
||||
-- ============================================================================
|
||||
-- ÉTAPE 2: Migration des contacts existants depuis la table clients
|
||||
-- ============================================================================
|
||||
|
||||
INSERT INTO `clients_contacts` (
|
||||
`fk_client`,
|
||||
`nom`,
|
||||
`prenom`,
|
||||
`fonction`,
|
||||
`telephone`,
|
||||
`mobile`,
|
||||
`email`,
|
||||
`principal`,
|
||||
`active`,
|
||||
`date_creat`,
|
||||
`fk_user_creat`,
|
||||
`date_modif`,
|
||||
`fk_user_modif`
|
||||
)
|
||||
SELECT
|
||||
c.rowid AS fk_client,
|
||||
c.contact_nom AS nom,
|
||||
c.contact_prenom AS prenom,
|
||||
c.contact_fonction AS fonction,
|
||||
c.telephone,
|
||||
c.mobile,
|
||||
c.email,
|
||||
1 AS principal,
|
||||
c.active,
|
||||
c.date_creat,
|
||||
c.fk_user_creat,
|
||||
c.date_modif,
|
||||
c.fk_user_modif
|
||||
FROM `clients` c
|
||||
WHERE c.active = 1
|
||||
AND (
|
||||
c.contact_nom IS NOT NULL
|
||||
OR c.contact_prenom IS NOT NULL
|
||||
OR c.email IS NOT NULL
|
||||
OR c.telephone IS NOT NULL
|
||||
OR c.mobile IS NOT NULL
|
||||
);
|
||||
|
||||
-- ============================================================================
|
||||
-- ÉTAPE 3: Ajout du champ fk_contact dans la table devis
|
||||
-- ============================================================================
|
||||
|
||||
ALTER TABLE `devis`
|
||||
ADD COLUMN `fk_contact` int(11) DEFAULT NULL AFTER `fk_client`,
|
||||
ADD KEY `fk_contact` (`fk_contact`);
|
||||
|
||||
-- ============================================================================
|
||||
-- ÉTAPE 4: Liaison des devis existants avec les contacts principaux
|
||||
-- ============================================================================
|
||||
|
||||
UPDATE `devis` d
|
||||
INNER JOIN `clients_contacts` cc ON d.fk_client = cc.fk_client AND cc.principal = 1
|
||||
SET d.fk_contact = cc.rowid
|
||||
WHERE d.fk_client > 0;
|
||||
|
||||
-- ============================================================================
|
||||
-- ÉTAPE 5: Vérifications post-migration
|
||||
-- ============================================================================
|
||||
|
||||
-- Nombre de clients avec contacts
|
||||
SELECT COUNT(*) AS 'Clients avec contacts migrés'
|
||||
FROM clients_contacts;
|
||||
|
||||
-- Nombre de clients actifs
|
||||
SELECT COUNT(*) AS 'Total clients actifs'
|
||||
FROM clients
|
||||
WHERE active = 1;
|
||||
|
||||
-- Nombre de contacts principaux
|
||||
SELECT COUNT(*) AS 'Contacts principaux'
|
||||
FROM clients_contacts
|
||||
WHERE principal = 1;
|
||||
|
||||
-- Devis avec contact associé
|
||||
SELECT COUNT(*) AS 'Devis avec contact associé'
|
||||
FROM devis
|
||||
WHERE fk_contact IS NOT NULL;
|
||||
|
||||
-- Devis sans contact (à vérifier)
|
||||
SELECT COUNT(*) AS 'Devis SANS contact (à vérifier)'
|
||||
FROM devis
|
||||
WHERE fk_client > 0 AND fk_contact IS NULL;
|
||||
|
||||
-- Clients sans contact migré (potentiellement vides)
|
||||
SELECT c.rowid, c.code, c.libelle
|
||||
FROM clients c
|
||||
LEFT JOIN clients_contacts cc ON c.rowid = cc.fk_client
|
||||
WHERE c.active = 1
|
||||
AND cc.rowid IS NULL
|
||||
LIMIT 10;
|
||||
|
||||
-- ============================================================================
|
||||
-- FIN DE LA MIGRATION
|
||||
-- ============================================================================
|
||||
Reference in New Issue
Block a user