-- ============================================
-- Migration 0042: Renommer nlign en id_source dans RsCalcul
-- Date: 2026-03-01
-- ============================================
-- Description:
-- Renomme la colonne nlign (non utilisée) en id_source pour
-- permettre la liaison directe avec les tables sources :
--   - Rubrique 590 (prêts)   : id_source = Pret.Id
--   - Rubrique 561 (avances) : id_source = Avance.Id (futur)
-- Résout le problème de limitation à 7 prêts et de traçabilité
-- ============================================

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON

-- Vérifier si la table RsCalcul existe (n'existe que dans les bases paie)
IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'RsCalcul')
BEGIN
    PRINT 'Table RsCalcul non trouvée - migration ignorée (base non-paie)';
END
ELSE
BEGIN
    -- Supprimer l'ancien index sur nlign s'il existe
    IF EXISTS (
        SELECT 1 FROM sys.indexes
        WHERE name = 'nix_RsCalcul_nlign' AND object_id = OBJECT_ID('RsCalcul')
    )
    BEGIN
        DROP INDEX nix_RsCalcul_nlign ON RsCalcul;
        PRINT 'Index nix_RsCalcul_nlign supprimé';
    END

    -- Vérifier si la colonne nlign existe
    IF EXISTS (
        SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'RsCalcul' AND COLUMN_NAME = 'nlign'
    )
    BEGIN
        -- Renommer nlign en id_source
        EXEC sp_rename 'RsCalcul.nlign', 'id_source', 'COLUMN';
        PRINT 'Colonne nlign renommée en id_source';
    END
    ELSE IF EXISTS (
        SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = 'RsCalcul' AND COLUMN_NAME = 'id_source'
    )
    BEGIN
        -- Déjà renommée
        PRINT 'Colonne id_source existe déjà';
    END
    ELSE
    BEGIN
        -- La colonne n'existe pas, la créer
        ALTER TABLE RsCalcul ADD id_source INT NULL DEFAULT 0;
        PRINT 'Colonne id_source créée';
    END

    -- Index pour améliorer les performances des jointures sur prêts/avances
    IF NOT EXISTS (
        SELECT 1 FROM sys.indexes
        WHERE name = 'IX_RsCalcul_id_source' AND object_id = OBJECT_ID('RsCalcul')
    )
    BEGIN
        EXEC('CREATE INDEX IX_RsCalcul_id_source ON RsCalcul(Rubrique, id_source) WHERE id_source IS NOT NULL AND id_source > 0');
        PRINT 'Index IX_RsCalcul_id_source créé';
    END
END
