-- ========================================
-- SCRIPT FINAL COMPLET POUR LA PRODUCTION ET LE DEV
-- Table : bon_de_commande
-- ========================================
-- Ce script combine TOUTES les corrections nécessaires :
-- 1. Correction des valeurs de created_at et updated_at
-- 2. Ajout de DEFAULT CURRENT_TIMESTAMP sur created_at et updated_at
-- 3. Ajout de AUTO_INCREMENT sur id
-- 4. Ajout de valeurs par défaut sur TOUS les champs NOT NULL
--
-- ⚠️ À EXÉCUTER SUR : crmgaujdev ET crmgaujprod UNIQUEMENT
-- (DÉJÀ FAIT sur crmgaujlocal)
-- ========================================

-- Désactiver temporairement le mode strict
SET sql_mode = '';

-- ========================================
-- PARTIE 1 : FIX DES TIMESTAMPS
-- ========================================

-- Corriger les valeurs invalides de created_at
UPDATE `bon_de_commande` 
SET `created_at` = '2024-01-01 00:00:00' 
WHERE `created_at` = '0000-00-00 00:00:00' OR `created_at` IS NULL;

-- Corriger les valeurs invalides de updated_at
UPDATE `bon_de_commande` 
SET `updated_at` = '2024-01-01 00:00:00' 
WHERE `updated_at` = '0000-00-00 00:00:00' OR `updated_at` IS NULL;

-- Modifier created_at pour avoir une valeur par défaut
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

-- Modifier updated_at pour avoir une valeur par défaut et mise à jour automatique
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

-- Ajouter AUTO_INCREMENT à la colonne id
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `id` BIGINT NOT NULL AUTO_INCREMENT;

-- ========================================
-- PARTIE 2 : VALEURS PAR DÉFAUT POUR TOUS LES CHAMPS
-- ========================================

-- Champs liés au domaine et prestations
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `domaine_activite` VARCHAR(255) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `type_prestation` VARCHAR(255) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `details_prestation` VARCHAR(255) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `siteweb` VARCHAR(255) DEFAULT '';

-- Champs liés aux dates et campagne
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `date_campagne` VARCHAR(255) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `date_bdc_du_jour` VARCHAR(50) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `debut_payment_date` VARCHAR(255) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `fin_payment_date` VARCHAR(50) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `final_payment_date` VARCHAR(50) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `date_signature_electronique` VARCHAR(255) DEFAULT '';

-- Champs liés aux paiements
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `nb_reglements` VARCHAR(255) DEFAULT '1';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `mode_paiement` VARCHAR(255) DEFAULT 'Virement';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `detail_reglements` VARCHAR(500) DEFAULT '';

-- Champs financiers
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `montant_ht` VARCHAR(255) DEFAULT '0';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `montant_ttc` VARCHAR(20) DEFAULT '0';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `taux_tva` VARCHAR(11) DEFAULT '20';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `montant_tva` VARCHAR(11) DEFAULT '0';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `devise` VARCHAR(255) DEFAULT 'MAD';

-- Champs de statut et état
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `statut_bdc` VARCHAR(50) DEFAULT 'en_attente';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `facture_cree` VARCHAR(10) DEFAULT 'non';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `transition_old_new` VARCHAR(20) DEFAULT '';

-- Champs d'upload et documents
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `upload_url` VARCHAR(100) DEFAULT '';

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `upload_url_bdc_signe` VARCHAR(255) DEFAULT '';

-- Champ token
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `token` VARCHAR(100) DEFAULT '';

-- Champs numériques
ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `bdc_du_jour` INT DEFAULT 0;

ALTER TABLE `bon_de_commande` 
MODIFY COLUMN `manager_id` INT DEFAULT 0;

-- ========================================
-- PARTIE 3 : NETTOYAGE DES DONNÉES EXISTANTES
-- ========================================

UPDATE `bon_de_commande` SET `domaine_activite` = '' WHERE `domaine_activite` IS NULL;
UPDATE `bon_de_commande` SET `date_campagne` = '' WHERE `date_campagne` IS NULL;
UPDATE `bon_de_commande` SET `nb_reglements` = '1' WHERE `nb_reglements` IS NULL;
UPDATE `bon_de_commande` SET `mode_paiement` = 'Virement' WHERE `mode_paiement` IS NULL;
UPDATE `bon_de_commande` SET `montant_ht` = '0' WHERE `montant_ht` IS NULL;
UPDATE `bon_de_commande` SET `montant_ttc` = '0' WHERE `montant_ttc` IS NULL;
UPDATE `bon_de_commande` SET `taux_tva` = '20' WHERE `taux_tva` IS NULL;
UPDATE `bon_de_commande` SET `montant_tva` = '0' WHERE `montant_tva` IS NULL;
UPDATE `bon_de_commande` SET `devise` = 'MAD' WHERE `devise` IS NULL;
UPDATE `bon_de_commande` SET `siteweb` = '' WHERE `siteweb` IS NULL;
UPDATE `bon_de_commande` SET `type_prestation` = '' WHERE `type_prestation` IS NULL;
UPDATE `bon_de_commande` SET `details_prestation` = '' WHERE `details_prestation` IS NULL;
UPDATE `bon_de_commande` SET `statut_bdc` = 'en_attente' WHERE `statut_bdc` IS NULL;
UPDATE `bon_de_commande` SET `upload_url` = '' WHERE `upload_url` IS NULL;
UPDATE `bon_de_commande` SET `facture_cree` = 'non' WHERE `facture_cree` IS NULL;
UPDATE `bon_de_commande` SET `final_payment_date` = '' WHERE `final_payment_date` IS NULL;
UPDATE `bon_de_commande` SET `bdc_du_jour` = 0 WHERE `bdc_du_jour` IS NULL;
UPDATE `bon_de_commande` SET `date_bdc_du_jour` = '' WHERE `date_bdc_du_jour` IS NULL;
UPDATE `bon_de_commande` SET `detail_reglements` = '' WHERE `detail_reglements` IS NULL;
UPDATE `bon_de_commande` SET `upload_url_bdc_signe` = '' WHERE `upload_url_bdc_signe` IS NULL;
UPDATE `bon_de_commande` SET `debut_payment_date` = '' WHERE `debut_payment_date` IS NULL;
UPDATE `bon_de_commande` SET `fin_payment_date` = '' WHERE `fin_payment_date` IS NULL;
UPDATE `bon_de_commande` SET `transition_old_new` = '' WHERE `transition_old_new` IS NULL;
UPDATE `bon_de_commande` SET `date_signature_electronique` = '' WHERE `date_signature_electronique` IS NULL;
UPDATE `bon_de_commande` SET `token` = '' WHERE `token` IS NULL;
UPDATE `bon_de_commande` SET `manager_id` = 0 WHERE `manager_id` IS NULL;

-- Réactiver le mode SQL par défaut
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- ========================================
-- VÉRIFICATION
-- ========================================
-- Exécuter pour vérifier :
-- SHOW COLUMNS FROM bon_de_commande;
-- 
-- Attendu pour 'id' :
--   - Extra: auto_increment
-- 
-- Attendu pour 'created_at' :
--   - Default: CURRENT_TIMESTAMP
-- 
-- Attendu pour 'updated_at' :
--   - Default: CURRENT_TIMESTAMP
--   - Extra: on update CURRENT_TIMESTAMP
-- 
-- Tous les autres champs NOT NULL doivent avoir une valeur par défaut appropriée
-- ========================================

-- ========================================
-- 📋 INSTRUCTIONS D'EXÉCUTION
-- ========================================
-- 1. Se connecter au phpMyAdmin OVH
-- 2. Sélectionner la base crmgaujdev
-- 3. Aller dans l'onglet SQL
-- 4. Copier-coller CE SCRIPT COMPLET
-- 5. Cliquer sur "Exécuter"
-- 6. ✅ Vérifier qu'il n'y a pas d'erreur
-- 7. Répéter les étapes 1-6 pour crmgaujprod
-- ========================================

-- ========================================
-- ✅ RÉSULTAT ATTENDU
-- ========================================
-- Après l'exécution, vous ne devriez PLUS JAMAIS avoir d'erreur du type :
-- "Field 'xxx' doesn't have a default value"
-- lors de la création d'un bon de commande !
-- ========================================

