-- ================================================================
-- SYNDICOS - SYSTÈME DE COMPTABILITÉ EN PARTIE DOUBLE
-- ================================================================
-- Ce fichier met en place un système comptable complet pour SyndicOS
-- avec génération automatique des écritures comptables
-- ================================================================

-- ----------------------------------------------------------------
-- 1. TABLE PLAN COMPTABLE
-- ----------------------------------------------------------------
-- Contient tous les comptes utilisés (401xxx, 450xxx, 512xxx, etc.)

CREATE TABLE IF NOT EXISTS `plan_comptable` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `numero_compte` VARCHAR(20) NOT NULL COMMENT 'Ex: 401EDF, 450001DUPONT, 512001',
  `libelle` VARCHAR(255) NOT NULL COMMENT 'Nom du compte',
  `type_compte` ENUM('actif', 'passif', 'charge', 'produit', 'tiers') NOT NULL,
  `classe` ENUM('1','2','3','4','5','6','7') NOT NULL COMMENT 'Classe comptable',
  `id_copro` INT NOT NULL,
  `id_entite` INT DEFAULT NULL COMMENT 'ID du fournisseur, copropriétaire ou banque lié',
  `type_entite` ENUM('fournisseur', 'coproprietaire', 'banque', 'autre') DEFAULT NULL,
  `actif` TINYINT(1) DEFAULT 1,
  `date_creation` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `date_modification` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_compte_copro` (`numero_compte`, `id_copro`),
  KEY `idx_copro` (`id_copro`),
  KEY `idx_type` (`type_entite`, `id_entite`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Plan comptable - Tous les comptes utilisés';

-- ----------------------------------------------------------------
-- 2. TABLE ÉCRITURES COMPTABLES
-- ----------------------------------------------------------------
-- Contient les en-têtes des écritures (une écriture = plusieurs lignes)

CREATE TABLE IF NOT EXISTS `ecritures_comptables` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `numero_ecriture` VARCHAR(50) NOT NULL COMMENT 'Numéro séquentiel ex: EC-2024-0001',
  `id_copro` INT NOT NULL,
  `id_exercice` INT NOT NULL,
  `date_ecriture` DATE NOT NULL,
  `libelle` TEXT NOT NULL COMMENT 'Description de l\'opération',
  `type_ecriture` ENUM('banque', 'achat', 'vente', 'od', 'an') NOT NULL COMMENT 'banque=opération bancaire, od=opération diverse, an=à nouveau',
  `source_id` BIGINT DEFAULT NULL COMMENT 'ID de la source (bank.id, facture.id, etc.)',
  `source_type` VARCHAR(50) DEFAULT NULL COMMENT 'Type de source (bank, facture, appel, etc.)',
  `montant_total` DECIMAL(10,2) NOT NULL COMMENT 'Montant total (pour vérification)',
  `valide` TINYINT(1) DEFAULT 0 COMMENT '0=brouillon, 1=validé',
  `lettre` VARCHAR(10) DEFAULT NULL COMMENT 'Pour le lettrage',
  `date_validation` TIMESTAMP NULL DEFAULT NULL,
  `user_validation` INT DEFAULT NULL,
  `date_creation` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `date_modification` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_numero` (`numero_ecriture`, `id_copro`),
  KEY `idx_copro_exercice` (`id_copro`, `id_exercice`),
  KEY `idx_date` (`date_ecriture`),
  KEY `idx_source` (`source_type`, `source_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Écritures comptables - En-têtes';

-- ----------------------------------------------------------------
-- 3. TABLE LIGNES D'ÉCRITURES
-- ----------------------------------------------------------------
-- Contient les lignes de débit/crédit de chaque écriture

CREATE TABLE IF NOT EXISTS `lignes_ecritures` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `id_ecriture` BIGINT NOT NULL,
  `numero_ligne` INT NOT NULL COMMENT 'Ordre de la ligne dans l\'écriture',
  `numero_compte` VARCHAR(20) NOT NULL COMMENT 'Compte débité ou crédité',
  `libelle_ligne` TEXT DEFAULT NULL COMMENT 'Libellé spécifique de la ligne',
  `debit` DECIMAL(10,2) DEFAULT 0.00,
  `credit` DECIMAL(10,2) DEFAULT 0.00,
  `date_echeance` DATE DEFAULT NULL COMMENT 'Pour les comptes tiers',
  `id_tiers` INT DEFAULT NULL COMMENT 'ID du tiers concerné',
  `type_tiers` ENUM('fournisseur', 'coproprietaire') DEFAULT NULL,
  `lettre` VARCHAR(10) DEFAULT NULL COMMENT 'Pour le lettrage',
  `date_lettrage` DATE DEFAULT NULL,
  `date_creation` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_ecriture` (`id_ecriture`),
  KEY `idx_compte` (`numero_compte`),
  KEY `idx_tiers` (`type_tiers`, `id_tiers`),
  CONSTRAINT `fk_ligne_ecriture` FOREIGN KEY (`id_ecriture`) REFERENCES `ecritures_comptables` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Lignes d\'écritures - Détail débit/crédit';

-- ----------------------------------------------------------------
-- 4. MODIFICATION TABLE BANK
-- ----------------------------------------------------------------
-- La colonne id_ecriture_comptable existe déjà dans la base
-- Rien à faire ici

-- ----------------------------------------------------------------
-- 5. MODIFICATION TABLE BANK_ACCOUNT
-- ----------------------------------------------------------------
-- Ajout du numéro de compte bancaire (512xxx)
-- Si la colonne existe déjà, cette commande générera une erreur (ignorable)

ALTER TABLE `bank_account` 
  ADD COLUMN `numero_compte_512` VARCHAR(20) DEFAULT NULL COMMENT 'Numéro de compte comptable 512XXX' AFTER `bank_name`;

-- ----------------------------------------------------------------
-- 6. MODIFICATION TABLE FOURNISSEURS
-- ----------------------------------------------------------------
-- Le champ compte_401 existe déjà, rien à modifier

-- ----------------------------------------------------------------
-- 7. MODIFICATION TABLE USERS (Copropriétaires)
-- ----------------------------------------------------------------
-- Ajout du numéro de compte 450xxx
-- Si la colonne existe déjà, cette commande générera une erreur (ignorable)

ALTER TABLE `users`
  ADD COLUMN `compte_450` VARCHAR(20) DEFAULT NULL COMMENT 'Compte copropriétaire 450XXX' AFTER `nom`;

-- ----------------------------------------------------------------
-- 8. PROCÉDURE : GÉNÉRER COMPTE FOURNISSEUR
-- ----------------------------------------------------------------
-- À appeler depuis PHP lors de la création d'un fournisseur

DROP PROCEDURE IF EXISTS generer_compte_fournisseur;

DELIMITER $$

CREATE PROCEDURE generer_compte_fournisseur(
    IN p_id_fournisseur INT
)
BEGIN
    DECLARE v_nom VARCHAR(255);
    DECLARE v_compte VARCHAR(50);
    DECLARE v_id_copro INT;
    DECLARE v_compte_clean VARCHAR(20);
    
    SELECT nom, compte_401, id_copro INTO v_nom, v_compte, v_id_copro
    FROM fournisseurs WHERE id = p_id_fournisseur;
    
    IF v_compte IS NULL OR v_compte = '' THEN
        SET v_compte_clean = UPPER(v_nom);
        SET v_compte_clean = REPLACE(v_compte_clean, ' ', '');
        SET v_compte_clean = REPLACE(v_compte_clean, '-', '');
        SET v_compte_clean = REPLACE(v_compte_clean, '''', '');
        SET v_compte_clean = REPLACE(v_compte_clean, 'É', 'E');
        SET v_compte_clean = REPLACE(v_compte_clean, 'È', 'E');
        SET v_compte_clean = REPLACE(v_compte_clean, 'À', 'A');
        SET v_compte_clean = SUBSTRING(v_compte_clean, 1, 12);
        SET v_compte = CONCAT('401', v_compte_clean);
        
        UPDATE fournisseurs SET compte_401 = v_compte WHERE id = p_id_fournisseur;
    END IF;
    
    INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
    VALUES (v_compte, v_nom, 'tiers', '4', v_id_copro, p_id_fournisseur, 'fournisseur')
    ON DUPLICATE KEY UPDATE libelle = v_nom;
END$$

DELIMITER ;

-- ----------------------------------------------------------------
-- 9. PROCÉDURE : GÉNÉRER COMPTE COPROPRIÉTAIRE
-- ----------------------------------------------------------------
-- À appeler depuis PHP lors de la création d'un copropriétaire

DROP PROCEDURE IF EXISTS generer_compte_coproprietaire;

DELIMITER $$

CREATE PROCEDURE generer_compte_coproprietaire(
    IN p_id_user INT
)
BEGIN
    DECLARE v_nom VARCHAR(255);
    DECLARE v_prenom VARCHAR(255);
    DECLARE v_compte VARCHAR(50);
    DECLARE v_copro INT;
    DECLARE v_nom_clean VARCHAR(20);
    DECLARE v_dernier_numero INT;
    
    SELECT nom, prenom, compte_450, copro INTO v_nom, v_prenom, v_compte, v_copro
    FROM users WHERE id = p_id_user;
    
    IF v_compte IS NULL OR v_compte = '' THEN
        SELECT COALESCE(MAX(CAST(SUBSTRING(compte_450, 4, 6) AS UNSIGNED)), 0) INTO v_dernier_numero
        FROM users
        WHERE copro = v_copro AND compte_450 REGEXP '^450[0-9]{6}';
        
        SET v_dernier_numero = v_dernier_numero + 1;
        SET v_nom_clean = UPPER(v_nom);
        SET v_nom_clean = REPLACE(v_nom_clean, ' ', '');
        SET v_nom_clean = REPLACE(v_nom_clean, '-', '');
        SET v_nom_clean = REPLACE(v_nom_clean, 'É', 'E');
        SET v_nom_clean = REPLACE(v_nom_clean, 'È', 'E');
        SET v_nom_clean = REPLACE(v_nom_clean, 'À', 'A');
        SET v_nom_clean = SUBSTRING(v_nom_clean, 1, 8);
        SET v_compte = CONCAT('450', LPAD(v_dernier_numero, 6, '0'), v_nom_clean);
        
        UPDATE users SET compte_450 = v_compte WHERE id = p_id_user;
    END IF;
    
    INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
    VALUES (v_compte, CONCAT(v_prenom, ' ', v_nom), 'tiers', '4', v_copro, p_id_user, 'coproprietaire')
    ON DUPLICATE KEY UPDATE libelle = CONCAT(v_prenom, ' ', v_nom);
END$$

DELIMITER ;

-- ----------------------------------------------------------------
-- 10. PROCÉDURE : CRÉER ÉCRITURE BANCAIRE
-- ----------------------------------------------------------------
-- À appeler depuis PHP après insertion d'une opération bancaire

DROP PROCEDURE IF EXISTS creer_ecriture_bancaire;

DELIMITER $$

CREATE PROCEDURE creer_ecriture_bancaire(
    IN p_id_bank BIGINT
)
BEGIN
    DECLARE v_id_ecriture BIGINT;
    DECLARE v_numero_ecriture VARCHAR(50);
    DECLARE v_id_copro INT;
    DECLARE v_exercice INT;
    DECLARE v_date DATE;
    DECLARE v_description TEXT;
    DECLARE v_debit DECIMAL(10,2);
    DECLARE v_credit DECIMAL(10,2);
    DECLARE v_id_bank_account INT;
    DECLARE v_id_fournisseur INT;
    DECLARE v_id_coproprietaire INT;
    DECLARE v_transfer_id INT;
    DECLARE v_compte_banque VARCHAR(20);
    DECLARE v_compte_contrepartie VARCHAR(20);
    DECLARE v_libelle_contrepartie VARCHAR(255);
    DECLARE v_type_plan VARCHAR(10);
    DECLARE v_montant DECIMAL(10,2);
    DECLARE v_dernier_numero INT;
    DECLARE v_annee VARCHAR(4);
    DECLARE v_nouveau_compte INT;
    
    SELECT id_copro, exercice, date, description, debit, credit, id_bank, fournisseur, coproprietaire, transfer_id
    INTO v_id_copro, v_exercice, v_date, v_description, v_debit, v_credit, v_id_bank_account, v_id_fournisseur, v_id_coproprietaire, v_transfer_id
    FROM bank 
    WHERE id = p_id_bank;
    
    SELECT numero_compte_512 INTO v_compte_banque
    FROM bank_account 
    WHERE id = v_id_bank_account;
    
    IF v_compte_banque IS NULL THEN
        CALL obtenir_prochain_numero_compte(v_id_copro, '512', v_nouveau_compte);
        SET v_compte_banque = CONCAT('512', LPAD(v_nouveau_compte, 3, '0'));

        UPDATE bank_account 
        SET numero_compte_512 = v_compte_banque 
        WHERE id = v_id_bank_account;

        INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
        SELECT v_compte_banque, nom_banque, 'tiers', '5', v_id_copro, v_id_bank_account, 'banque'
        FROM bank_account WHERE id = v_id_bank_account
        ON DUPLICATE KEY UPDATE libelle = nom_banque, id_entite = v_id_bank_account, type_entite = 'banque';
    END IF;
    
    SET v_montant = COALESCE(v_debit, v_credit);
    
    SELECT YEAR(debut) INTO v_annee 
    FROM exercices 
    WHERE id = v_exercice 
    LIMIT 1;
    
    SELECT COALESCE(MAX(CAST(SUBSTRING_INDEX(numero_ecriture, '-', -1) AS UNSIGNED)), 0) INTO v_dernier_numero
    FROM ecritures_comptables
    WHERE id_copro = v_id_copro 
      AND id_exercice = v_exercice 
      AND type_ecriture = 'banque';
    
    SET v_dernier_numero = v_dernier_numero + 1;
    SET v_numero_ecriture = CONCAT('BQ-', v_annee, '-', LPAD(v_dernier_numero, 4, '0'));
    
    INSERT INTO ecritures_comptables 
        (numero_ecriture, id_copro, id_exercice, date_ecriture, libelle, type_ecriture, source_id, source_type, montant_total, valide)
    VALUES
        (v_numero_ecriture, v_id_copro, v_exercice, v_date, v_description, 'banque', p_id_bank, 'bank', v_montant, 1);
    
    SET v_id_ecriture = LAST_INSERT_ID();

    IF v_debit IS NOT NULL AND v_debit > 0 THEN
        IF v_transfer_id IS NOT NULL THEN
            SELECT numero_compte_512 INTO v_compte_contrepartie
            FROM bank_account WHERE id = v_transfer_id;

            IF v_compte_contrepartie IS NULL THEN
                CALL obtenir_prochain_numero_compte(v_id_copro, '512', v_nouveau_compte);
                SET v_compte_contrepartie = CONCAT('512', LPAD(v_nouveau_compte, 3, '0'));

                UPDATE bank_account 
                SET numero_compte_512 = v_compte_contrepartie 
                WHERE id = v_transfer_id;

                INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
                SELECT v_compte_contrepartie, nom_banque, 'tiers', '5', v_id_copro, v_transfer_id, 'banque'
                FROM bank_account WHERE id = v_transfer_id
                ON DUPLICATE KEY UPDATE libelle = nom_banque, id_entite = v_transfer_id, type_entite = 'banque';
            END IF;

            -- Créer compte 580000 si nécessaire
            INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
            VALUES ('580000', 'Virements internes', 'tiers', '5', v_id_copro, NULL, 'autre')
            ON DUPLICATE KEY UPDATE libelle = 'Virements internes';

            -- Ligne 1 : Débit 580000 (l'argent arrive dans le compte de virements internes)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 1, '580000', v_description, v_debit, 0);

            -- Ligne 2 : Crédit 512 source (l'argent sort du compte source)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 2, v_compte_banque, v_description, 0, v_debit);

            -- Ligne 3 : Débit 512 destination (l'argent arrive sur le compte destination)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 3, v_compte_contrepartie, v_description, v_debit, 0);

            -- Ligne 4 : Crédit 580000 (l'argent quitte le compte de virements internes)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 4, '580000', v_description, 0, v_debit);

        ELSEIF v_id_fournisseur IS NOT NULL AND v_id_fournisseur > 0 THEN
            SELECT compte_401 INTO v_compte_contrepartie 
            FROM fournisseurs WHERE id = v_id_fournisseur;

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit, id_tiers, type_tiers)
            VALUES
                (v_id_ecriture, 1, v_compte_contrepartie, v_description, v_debit, 0, v_id_fournisseur, 'fournisseur');
        ELSE
            SET v_compte_contrepartie = '606000';
            SET v_libelle_contrepartie = 'Charges diverses';
            SET v_type_plan = 'charge';

            INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
            VALUES (v_compte_contrepartie, v_libelle_contrepartie, v_type_plan, '6', v_id_copro, NULL, 'autre')
            ON DUPLICATE KEY UPDATE libelle = v_libelle_contrepartie;

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 1, v_compte_contrepartie, v_description, v_debit, 0);

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 2, v_compte_banque, v_description, 0, v_debit);
        END IF;
    END IF;

    IF v_credit IS NOT NULL AND v_credit > 0 THEN
        IF v_transfer_id IS NOT NULL THEN
            SELECT numero_compte_512 INTO v_compte_contrepartie
            FROM bank_account WHERE id = v_transfer_id;

            IF v_compte_contrepartie IS NULL THEN
                CALL obtenir_prochain_numero_compte(v_id_copro, '512', v_nouveau_compte);
                SET v_compte_contrepartie = CONCAT('512', LPAD(v_nouveau_compte, 3, '0'));

                UPDATE bank_account 
                SET numero_compte_512 = v_compte_contrepartie 
                WHERE id = v_transfer_id;

                INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
                SELECT v_compte_contrepartie, nom_banque, 'tiers', '5', v_id_copro, v_transfer_id, 'banque'
                FROM bank_account WHERE id = v_transfer_id
                ON DUPLICATE KEY UPDATE libelle = nom_banque, id_entite = v_transfer_id, type_entite = 'banque';
            END IF;

            -- Créer compte 580000 si nécessaire
            INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
            VALUES ('580000', 'Virements internes', 'tiers', '5', v_id_copro, NULL, 'autre')
            ON DUPLICATE KEY UPDATE libelle = 'Virements internes';

            -- Ligne 1 : Crédit 580000 (l'argent sort du compte de virements internes)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 1, '580000', v_description, 0, v_credit);

            -- Ligne 2 : Débit 512 destination (l'argent arrive sur le compte destination)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 2, v_compte_banque, v_description, v_credit, 0);

            -- Ligne 3 : Crédit 512 source (l'argent quitte le compte source)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 3, v_compte_contrepartie, v_description, 0, v_credit);

            -- Ligne 4 : Débit 580000 (l'argent arrive dans le compte de virements internes)
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 4, '580000', v_description, v_credit, 0);

        ELSEIF v_id_coproprietaire IS NOT NULL AND v_id_coproprietaire > 0 THEN
            SELECT compte_450 INTO v_compte_contrepartie 
            FROM users WHERE id = v_id_coproprietaire;

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 1, v_compte_banque, v_description, v_credit, 0);

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit, id_tiers, type_tiers)
            VALUES
                (v_id_ecriture, 2, v_compte_contrepartie, v_description, 0, v_credit, v_id_coproprietaire, 'coproprietaire');
        ELSE
            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 1, v_compte_banque, v_description, v_credit, 0);
            
            IF LOWER(v_description) REGEXP 'travaux|exceptionnel|fonds\\s*travaux|\bft\b' THEN
                SET v_compte_contrepartie = '706002';
                SET v_libelle_contrepartie = 'Appels de fonds exceptionnels';
            ELSE
                SET v_compte_contrepartie = '706001';
                SET v_libelle_contrepartie = 'Appels de fonds (charges courantes)';
            END IF;

            SET v_type_plan = 'produit';

            INSERT INTO plan_comptable (numero_compte, libelle, type_compte, classe, id_copro, id_entite, type_entite)
            VALUES (v_compte_contrepartie, v_libelle_contrepartie, v_type_plan, '7', v_id_copro, NULL, 'autre')
            ON DUPLICATE KEY UPDATE libelle = v_libelle_contrepartie;

            INSERT INTO lignes_ecritures 
                (id_ecriture, numero_ligne, numero_compte, libelle_ligne, debit, credit)
            VALUES
                (v_id_ecriture, 2, v_compte_contrepartie, v_description, 0, v_credit);
        END IF;
    END IF;

    UPDATE bank 
    SET id_ecriture_comptable = v_id_ecriture 
    WHERE id = p_id_bank;
END$$

DELIMITER ;

-- ================================================================
-- FIN DU SCRIPT DE MISE EN PLACE DE LA COMPTABILITÉ
-- ================================================================

-- UTILISATION :
-- 
-- 1. Les comptes sont générés par les procédures stockées
-- 2. Appeler generer_compte_fournisseur(id) après création d'un fournisseur
-- 3. Appeler generer_compte_coproprietaire(id) après création d'un copropriétaire
-- 4. Appeler creer_ecriture_bancaire(id) après insertion dans bank
-- 5. Pour les comptes bancaires, remplir numero_compte_512 (ex: 512001)

