-- ================================================================
-- CORRECTION DES DÉBITS COPROPRIÉTAIRES MAL CATÉGORISÉS
-- ================================================================
-- Ce script corrige les opérations bancaires de débit vers des copropriétaires
-- qui ont été enregistrées en 606000 (Charges diverses) au lieu de 450XXX
-- ================================================================

-- ================================================================
-- 1) DIAGNOSTIC : Identifier les opérations mal catégorisées
-- ================================================================

-- Trouver les débits avec copropriétaire qui ont une écriture en 606000
SELECT 
    b.id AS bank_id,
    b.date,
    b.description,
    b.debit,
    b.coproprietaire,
    CONCAT(u.prenom, ' ', u.nom) AS nom_coproprietaire,
    u.compte_450,
    ec.id AS id_ecriture,
    ec.numero_ecriture,
    'DOIT ÊTRE CORRIGÉ' AS statut
FROM bank b
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
JOIN users u ON u.id = b.coproprietaire
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.coproprietaire IS NOT NULL
  AND le.numero_compte = '606000'
ORDER BY b.date DESC;

-- Compter le nombre d'écritures à corriger
SELECT 
    COUNT(DISTINCT b.id) AS 'Nombre d\'opérations à corriger'
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.coproprietaire IS NOT NULL
  AND le.numero_compte = '606000';

-- ================================================================
-- 2) CORRECTION : Remplacer 606000 par le compte 450XXX du copropriétaire
-- ================================================================

-- 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
JOIN users u ON u.id = b.coproprietaire
SET 
    le.numero_compte = u.compte_450,
    le.id_tiers = b.coproprietaire,
    le.type_tiers = 'coproprietaire'
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.coproprietaire IS NOT NULL
  AND le.numero_compte = '606000'
  AND le.debit = b.debit;

SELECT ROW_COUNT() AS 'Lignes corrigées';

-- ================================================================
-- 3) VÉRIFICATION POST-CORRECTION
-- ================================================================

-- Vérifier qu'il ne reste plus d'erreurs
SELECT 
    COUNT(DISTINCT b.id) AS 'Opérations encore en erreur (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.coproprietaire IS NOT NULL
  AND le.numero_compte = '606000';

-- Afficher les opérations corrigées
SELECT 
    b.id AS bank_id,
    b.date,
    b.description,
    b.debit,
    CONCAT(u.prenom, ' ', u.nom) AS nom_coproprietaire,
    u.compte_450 AS compte_utilise,
    ec.numero_ecriture,
    '✅ CORRIGÉ' AS statut
FROM bank b
JOIN ecritures_comptables ec ON ec.id = b.id_ecriture_comptable
JOIN lignes_ecritures le ON le.id_ecriture = ec.id
JOIN users u ON u.id = b.coproprietaire
WHERE b.debit IS NOT NULL 
  AND b.debit > 0
  AND b.coproprietaire IS NOT NULL
  AND le.numero_compte = u.compte_450
  AND le.type_tiers = 'coproprietaire'
ORDER BY b.date DESC;

-- ================================================================
-- 4) VÉRIFIER LA BALANCE DES COMPTES COPROPRIÉTAIRES
-- ================================================================

-- Balance des comptes 450XXX après correction
SELECT 
    u.compte_450,
    CONCAT(u.prenom, ' ', u.nom) AS coproprietaire,
    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 users u
LEFT JOIN lignes_ecritures le ON le.numero_compte = u.compte_450
LEFT JOIN ecritures_comptables ec ON ec.id = le.id_ecriture AND ec.valide = 1
WHERE u.compte_450 IS NOT NULL
  AND u.admin = 0
GROUP BY u.compte_450, u.prenom, u.nom
HAVING total_debit > 0 OR total_credit > 0
ORDER BY u.nom, u.prenom;

-- ================================================================
-- FIN DE LA CORRECTION
-- ================================================================

/*
EXPLICATION DU PROBLÈME :

Avant correction :
- Opération : Débit 100€ vers copropriétaire ID=5
- Écriture comptable :
  Ligne 1 : D 606000 Charges diverses    100.00
  Ligne 2 : C 512001 Banque                      100.00
  ❌ INCORRECT : Le débit devrait aller vers le compte 450XXX du copropriétaire

Après correction :
- Opération : Débit 100€ vers copropriétaire ID=5
- Écriture comptable :
  Ligne 1 : D 450000005DUPONT Copropriétaire   100.00
  Ligne 2 : C 512001 Banque                            100.00
  ✅ CORRECT : Le débit est bien attribué au copropriétaire

UTILISATION :
1. Exécuter le script dans phpMyAdmin
2. Vérifier le diagnostic (section 1)
3. Appliquer la correction (section 2)
4. Vérifier les résultats (sections 3 et 4)
5. Mettre à jour la procédure stockée avec le nouveau code

PRÉVENTION :
La procédure creer_ecriture_bancaire a été mise à jour pour gérer
correctement les débits vers des copropriétaires à l'avenir.
*/
