-- Migration 0070 : Ajout de la hiérarchie des modules
-- A exécuter sur omag_opa ET sur les bases client (commun6)
-- Permet de structurer les modules en modules principaux et sous-modules

-- ============================================================================
-- 1. Table modules (omag_opa) - si elle existe
-- ============================================================================

-- Ajouter idParent à modules
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'modules')
   AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'modules' AND COLUMN_NAME = 'idParent')
BEGIN
    EXEC('ALTER TABLE modules ADD idParent INT NULL DEFAULT NULL');
    PRINT 'Colonne idParent ajoutee a modules';
END

-- Ajouter ordre à modules
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'modules')
   AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'modules' AND COLUMN_NAME = 'ordre')
BEGIN
    EXEC('ALTER TABLE modules ADD ordre INT NOT NULL DEFAULT 0');
    PRINT 'Colonne ordre ajoutee a modules';
END

-- ============================================================================
-- 2. Table modulesLocal (bases client commun6) - si elle existe
-- ============================================================================

-- Ajouter idParent à modulesLocal
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'modulesLocal')
   AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'modulesLocal' AND COLUMN_NAME = 'idParent')
BEGIN
    EXEC('ALTER TABLE modulesLocal ADD idParent INT NULL DEFAULT NULL');
    PRINT 'Colonne idParent ajoutee a modulesLocal';
END

-- Ajouter ordre à modulesLocal
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'modulesLocal')
   AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'modulesLocal' AND COLUMN_NAME = 'ordre')
BEGIN
    EXEC('ALTER TABLE modulesLocal ADD ordre INT NOT NULL DEFAULT 0');
    PRINT 'Colonne ordre ajoutee a modulesLocal';
END

-- ============================================================================
-- 3. Mise à jour des données existantes : définir la hiérarchie
-- ============================================================================

-- Définir la hiérarchie et enrichir les descriptions
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'modules')
   AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'modules' AND COLUMN_NAME = 'idParent')
BEGIN
    -- ======================================================================
    -- MODULES PRINCIPAUX (idParent = NULL)
    -- ======================================================================

    -- 1. Commercial
    EXEC('UPDATE modules SET idParent = NULL, ordre = 1, description = ''Gestion commerciale : ventes, achats, stock, devis, BL, factures, clients et fournisseurs'' WHERE id = 1');

    -- 2. Comptabilité
    EXEC('UPDATE modules SET idParent = NULL, ordre = 2, description = ''Comptabilite generale : ecritures, journaux, grand livre, balance, bilan et declarations fiscales'' WHERE id = 2');

    -- 3. Paie
    EXEC('UPDATE modules SET idParent = NULL, ordre = 3, description = ''Gestion de la paie : bulletins de salaire, charges sociales, declarations et etats reglementaires'' WHERE id = 3');

    -- 20. Parc Auto
    EXEC('UPDATE modules SET idParent = NULL, ordre = 4, description = ''Gestion du parc automobile : suivi des vehicules, entretien, consommation carburant et assurances'' WHERE id = 20');

    -- ======================================================================
    -- SOUS-MODULES COMMERCIAL (idParent = 1)
    -- ======================================================================

    -- 4. Point de vente
    EXEC('UPDATE modules SET idParent = 1, ordre = 1, description = ''Point de vente (comptoir) : vente directe, encaissement rapide et gestion de caisse'' WHERE id = 4');

    -- 5. Atelier / SAV
    EXEC('UPDATE modules SET idParent = 1, ordre = 2, description = ''Atelier et service apres-vente : suivi des reparations, interventions et gestion des equipements'' WHERE id = 5');

    -- 6. Assemblage / Nomenclature
    EXEC('UPDATE modules SET idParent = 1, ordre = 3, description = ''Assemblage et fabrication : nomenclatures articles, ordres de fabrication et suivi de production'' WHERE id = 6');

    -- 7. Affaire
    EXEC('UPDATE modules SET idParent = 1, ordre = 4, description = ''Gestion par affaire : suivi de rentabilite, regroupement des documents par projet ou chantier'' WHERE id = 7');

    -- 8. CRM
    EXEC('UPDATE modules SET idParent = 1, ordre = 5, description = ''Gestion de la relation client : prospection, suivi des opportunites et actions commerciales'' WHERE id = 8');

    -- 9. Consolidation bancaire
    EXEC('UPDATE modules SET idParent = 1, ordre = 6, description = ''Consolidation bancaire : analyse des comptes bancaires sur un ensemble de bases de donnees (groupe de societes)'' WHERE id = 9');

    -- 10. Camion / Transport
    EXEC('UPDATE modules SET idParent = 1, ordre = 7, description = ''Extension camion : gestion du transport, suivi des livraisons et logistique'' WHERE id = 10');

    -- 11. Appels d''offres
    EXEC('UPDATE modules SET idParent = 1, ordre = 8, description = ''Gestion des appels d''''offres : creation, suivi et reponse aux consultations'' WHERE id = 11');

    -- 12. Amortissement (desktop)
    EXEC('UPDATE modules SET idParent = 1, ordre = 9, description = ''Module amortissement (desktop) : calcul et suivi des amortissements sur OMAG Desktop'' WHERE id = 12');

    -- ======================================================================
    -- SOUS-MODULES COMPTABILITE (idParent = 2)
    -- ======================================================================

    -- 19. Immobilisation
    EXEC('UPDATE modules SET idParent = 2, ordre = 1, description = ''Gestion des immobilisations : acquisition, amortissement, cession et inventaire des actifs'' WHERE id = 19');

    -- ======================================================================
    -- SOUS-MODULES PAIE (idParent = 3)
    -- ======================================================================

    -- 13. Pointage
    EXEC('UPDATE modules SET idParent = 3, ordre = 1, description = ''Gestion du pointage : saisie des presences, absences, heures supplementaires et planning'' WHERE id = 13');

    -- 14. ZK (pointeuses)
    EXEC('UPDATE modules SET idParent = 3, ordre = 2, description = ''Communication pointeuses ZK : synchronisation avec les terminaux de pointage de la famille ZKTeco'' WHERE id = 14');

    -- 15. Paie-Facturation (intérim)
    EXEC('UPDATE modules SET idParent = 3, ordre = 3, description = ''Liaison paie-facturation : generation automatique des factures a partir des bulletins de paie (interim)'' WHERE id = 15');

    -- 16. DMM (ministère emploi)
    EXEC('UPDATE modules SET idParent = 3, ordre = 4, description = ''Rapports DMM : etats reglementaires du ministere de l''''emploi pour le secteur interim'' WHERE id = 16');

    -- 17. PDF CNSS
    EXEC('UPDATE modules SET idParent = 3, ordre = 5, description = ''Extraction PDF CNSS : generation des donnees pour le bordereau de declaration CNSS'' WHERE id = 17');

    -- 18. Paie Terminal Mobile
    EXEC('UPDATE modules SET idParent = 3, ordre = 6, description = ''Terminal mobile pointage : communication avec les terminaux mobiles pour la saisie du pointage a distance'' WHERE id = 18');

    -- 22. Mouvement Paie
    EXEC('UPDATE modules SET idParent = 3, ordre = 7, description = ''Mouvement paie : gestion du pointage via les mouvements pour les clients specifiques'' WHERE id = 22');

    -- ======================================================================
    -- SOUS-MODULES CRM (idParent = 8)
    -- ======================================================================

    -- 24. Chiffrage (spécifique sécurité/nettoyage)
    IF NOT EXISTS (SELECT 1 FROM modules WHERE id = 24)
    BEGIN
        EXEC('INSERT INTO modules (id, libelle, description, idParent, ordre) VALUES (24, ''Chiffrage'', ''Module de chiffrage : estimation des couts pour les entreprises de securite et nettoyage (profils, tenues, materiels)'', 8, 1)');
        PRINT 'Module 24 (Chiffrage) cree';
    END
    ELSE
    BEGIN
        EXEC('UPDATE modules SET idParent = 8, ordre = 1, description = ''Module de chiffrage : estimation des couts pour les entreprises de securite et nettoyage (profils, tenues, materiels)'' WHERE id = 24');
    END

    PRINT 'Hierarchie et descriptions des modules mises a jour';
END

PRINT 'Migration 0070 terminee';
