-- ================================================================
-- MIGRATION DES CHARGES 606000 VERS 471000
-- ================================================================
-- Ce script migre les charges diverses (606000) vers le compte
-- 471000 (Travaux / Charges à répartir) pour les opérations sans tiers
-- ================================================================

-- ================================================================
-- 1) DIAGNOSTIC : Identifier les charges en 606000 sans tiers
-- ================================================================

-- Trouver toutes les opérations en 606000 qui n'ont ni fournisseur ni copropriétaire
SELECT 
    b.id AS bank_id,
    b.date,
    b.description,
    b.debit,
    ba.nom_banque,
    ec.numero_ecriture,
    'SERA MIGRÉ VERS 471000' AS statut
FROM bank b
JOIN bank_account ba ON ba.id = b.id_bank
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '606000'
  AND le.debit = b.debit
ORDER BY b.date DESC;

-- Compter le nombre d'opérations à migrer
SELECT 
    COUNT(DISTINCT b.id) AS 'Nombre d\'opérations à migrer vers 471000'
FROM bank b
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '606000';

-- ================================================================
-- 2) CRÉER LE COMPTE 471000 SI NÉCESSAIRE
-- ================================================================

-- Créer le compte 471000 dans le plan comptable pour chaque copropriété concernée
INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
SELECT DISTINCT 
    '471000' AS numero_compte,
    'Compte d''attente' AS libelle,
    'charge' AS type_compte,
    '4' AS classe,
    b.id_copro,
    NULL AS id_entite,
    'autre' AS type_entite
FROM bank b
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
WHERE b.debit IS NOT NULL 
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '606000'
ON DUPLICATE KEY UPDATE 
    libelle = 'Compte d''attente',
    type_compte = 'charge';

SELECT ROW_COUNT() AS 'Comptes 471000 créés/mis à jour';

-- ================================================================
-- 3) MIGRATION : Remplacer 606000 par 471000
-- ================================================================

-- Mettre à jour les lignes d'écritures
UPDATE lignes_ecritures le
JOIN ecritures_comptables ec ON ec.id = le.id_ecriture
JOIN bank b ON b.id_ecriture_comptable = ec.id
SET 
    le.numero_compte = '471000'
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '606000'
  AND le.debit = b.debit;

SELECT ROW_COUNT() AS 'Lignes migrées vers 471000';

-- ================================================================
-- 4) VÉRIFICATION POST-MIGRATION
-- ================================================================

-- Vérifier qu'il ne reste plus de charges 606000 sans tiers
SELECT 
    COUNT(DISTINCT b.id) AS 'Charges 606000 sans tiers restantes (devrait être 0)'
FROM bank b
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '606000';

-- Afficher les opérations maintenant en 471000
SELECT 
    b.id AS bank_id,
    b.date,
    b.description,
    b.debit,
    ba.nom_banque,
    ec.numero_ecriture,
    '✅ MIGRÉ VERS 471000' AS statut
FROM bank b
JOIN bank_account ba ON ba.id = b.id_bank
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.fournisseur IS NULL
  AND b.coproprietaire IS NULL
  AND b.transfer_id IS NULL
  AND le.numero_compte = '471000'
  AND le.debit = b.debit
ORDER BY b.date DESC
LIMIT 50;

-- ================================================================
-- 5) BALANCE DES COMPTES 471000 ET 606000
-- ================================================================

-- Balance du nouveau compte 471000
SELECT 
    pc.numero_compte,
    pc.libelle,
    pc.id_copro,
    COALESCE(SUM(le.debit), 0) AS total_debit,
    COALESCE(SUM(le.credit), 0) AS total_credit,
    COALESCE(SUM(le.debit - le.credit), 0) AS solde
FROM plan_comptable pc
LEFT JOIN lignes_ecritures le ON le.numero_compte = pc.numero_compte
LEFT JOIN ecritures_comptables ec ON ec.id = le.id_ecriture 
    AND ec.id_copro = pc.id_copro 
    AND ec.valide = 1
WHERE pc.numero_compte = '471000'
GROUP BY pc.numero_compte, pc.libelle, pc.id_copro
HAVING total_debit > 0 OR total_credit > 0
ORDER BY pc.id_copro;

-- Balance de l'ancien compte 606000 (devrait diminuer ou disparaître)
SELECT 
    pc.numero_compte,
    pc.libelle,
    pc.id_copro,
    COALESCE(SUM(le.debit), 0) AS total_debit,
    COALESCE(SUM(le.credit), 0) AS total_credit,
    COALESCE(SUM(le.debit - le.credit), 0) AS solde
FROM plan_comptable pc
LEFT JOIN lignes_ecritures le ON le.numero_compte = pc.numero_compte
LEFT JOIN ecritures_comptables ec ON ec.id = le.id_ecriture 
    AND ec.id_copro = pc.id_copro 
    AND ec.valide = 1
WHERE pc.numero_compte = '606000'
GROUP BY pc.numero_compte, pc.libelle, pc.id_copro
HAVING total_debit > 0 OR total_credit > 0
ORDER BY pc.id_copro;

-- ================================================================
-- FIN DE LA MIGRATION
-- ================================================================

/*
EXPLICATION DE LA MIGRATION :

Avant migration :
- Opération : Charge 1000€ - "Travaux ascenseur" - Type: Aucun
- Écriture comptable :
  Ligne 1 : D 606000 Charges diverses           1000.00
  Ligne 2 : C 512001 Banque                             1000.00
  ❌ Classé en "charges diverses" (classe 6)

Après migration :
- Opération : Charge 1000€ - "Travaux ascenseur" - Type: Aucun
- Écriture comptable :
  Ligne 1 : D 471000 Compte d'attente           1000.00
  Ligne 2 : C 512001 Banque                             1000.00
  ✅ Classé en "compte d'attente" (classe 4 - comptes de tiers)

AVANTAGES :
- Compte 471000 : Permet de suivre les charges en attente d'affectation
- Plus cohérent comptablement pour les travaux et acomptes
- Facilite la répartition ultérieure entre lots ou exercices
- 606000 reste disponible pour de vraies charges diverses

CAS D'USAGE :
- Acomptes sur travaux
- Travaux exceptionnels non votés
- Dépenses en attente de validation
- Charges à répartir entre copropriétaires

PROCHAINES ÉTAPES :
1. Exécuter update_procedures.sql pour mettre à jour la procédure
2. Exécuter ce script pour migrer les données existantes
3. Les nouvelles opérations sans tiers iront automatiquement en 471000
*/
