-- Migration 0040: Module Chiffrage Gardiennage
-- Tables de paramétrage et opérationnelles pour le calcul des coûts gardiennage

-- ============================================================================
-- TABLES DE PARAMÉTRAGE (Administration)
-- ============================================================================

-- Table des paramètres globaux de calcul
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_parametres')
BEGIN
    CREATE TABLE chiffrage_parametres (
        id_parametre NUMERIC(12,0) NOT NULL DEFAULT 0,
        code VARCHAR(50) NOT NULL DEFAULT '',
        libelle VARCHAR(100) NOT NULL DEFAULT '',
        valeur NUMERIC(18,6) NOT NULL DEFAULT 0,
        unite VARCHAR(20) NOT NULL DEFAULT '',
        description VARCHAR(255) NOT NULL DEFAULT '',
        actif NUMERIC(1,0) NOT NULL DEFAULT 1,
        CONSTRAINT PK_chiffrage_parametres PRIMARY KEY (id_parametre)
    );

    -- Données initiales paramètres
    INSERT INTO chiffrage_parametres (id_parametre, code, libelle, valeur, unite, description, actif) VALUES
    (1, 'SALAIRE_BASE', 'Salaire de base 6j/7', 3403.62, 'Dhs', 'Salaire journalier agent 6j/7', 1),
    (2, 'TAUX_REMPLACANT', 'Taux agent remplaçant', 0.1665, '%', '% salaire pour remplaçant', 1),
    (3, 'TAUX_CONGES', 'Taux congés payés', 0.0673, '%', '% salaire pour congés payés', 1),
    (4, 'TAUX_FERIES', 'Taux jours fériés', 0.0487, '%', '% salaire pour jours fériés', 1),
    (5, 'CNSS_PATRONALE', 'CNSS patronale', 0.166, '%', 'Charge patronale CNSS', 1),
    (6, 'AMO_PATRONALE', 'AMO patronale', 0.0411, '%', 'Assurance maladie obligatoire', 1),
    (7, 'ASSURANCE_AT', 'Assurance AT', 0.02, '%', 'Accidents du travail', 1),
    (8, 'ASSURANCE_RC', 'Assurance RC', 0.01, '%', 'Responsabilité civile', 1),
    (9, 'IPE', 'Impôt professionnel', 0.0038, '%', 'Taxe professionnelle', 1),
    (10, 'MARGE_1', 'Marge commerciale 1', 0.05, '%', 'Marge 5%', 1),
    (11, 'MARGE_2', 'Marge commerciale 2', 0.06, '%', 'Marge 6%', 1),
    (12, 'MARGE_3', 'Marge commerciale 3', 0.08, '%', 'Marge 8%', 1);
END

-- Table des profils d'agents
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_profils')
BEGIN
    CREATE TABLE chiffrage_profils (
        id_profil NUMERIC(12,0) NOT NULL DEFAULT 0,
        code VARCHAR(20) NOT NULL DEFAULT '',
        libelle VARCHAR(100) NOT NULL DEFAULT '',
        salaire_base NUMERIC(18,2) NOT NULL DEFAULT 0,
        coefficient NUMERIC(8,4) NOT NULL DEFAULT 1,
        actif NUMERIC(1,0) NOT NULL DEFAULT 1,
        ordre NUMERIC(12,0) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_profils PRIMARY KEY (id_profil)
    );

    -- Données initiales profils
    INSERT INTO chiffrage_profils (id_profil, code, libelle, salaire_base, coefficient, actif, ordre) VALUES
    (1, 'SUP', 'Superviseur', 3403.62, 1.0, 1, 1),
    (2, 'CE', 'Chef d''équipe', 3403.62, 1.0, 1, 2),
    (3, 'ADS', 'Agent de sécurité', 3403.62, 1.0, 1, 3);
END

-- Table des tenues vestimentaires
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_tenues')
BEGIN
    CREATE TABLE chiffrage_tenues (
        id_tenue NUMERIC(12,0) NOT NULL DEFAULT 0,
        libelle VARCHAR(100) NOT NULL DEFAULT '',
        quantite_defaut NUMERIC(12,0) NOT NULL DEFAULT 0,
        prix_unitaire NUMERIC(18,2) NOT NULL DEFAULT 0,
        duree_amortissement NUMERIC(12,0) NOT NULL DEFAULT 12,
        actif NUMERIC(1,0) NOT NULL DEFAULT 1,
        ordre NUMERIC(12,0) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_tenues PRIMARY KEY (id_tenue)
    );

    -- Données initiales tenues
    INSERT INTO chiffrage_tenues (id_tenue, libelle, quantite_defaut, prix_unitaire, duree_amortissement, actif, ordre) VALUES
    (1, 'Chemise', 2, 85, 12, 1, 1),
    (2, 'Cravate', 2, 18, 12, 1, 2),
    (3, 'Costume', 2, 500, 12, 1, 3),
    (4, 'Combinaison', 0, 200, 12, 1, 4),
    (5, 'Pantalon gris', 2, 130, 12, 1, 5),
    (6, 'Casquette', 2, 40, 12, 1, 6),
    (7, 'Parka', 1, 200, 12, 1, 7),
    (8, 'Pantalon para', 0, 200, 12, 1, 8),
    (9, 'Ceinture', 2, 80, 12, 1, 9),
    (10, 'Chaussure ville', 2, 145, 12, 1, 10),
    (11, 'Manteau', 1, 200, 12, 1, 11),
    (12, 'Pull', 2, 90, 12, 1, 12);
END

-- Table des matériels
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_materiels')
BEGIN
    CREATE TABLE chiffrage_materiels (
        id_materiel NUMERIC(12,0) NOT NULL DEFAULT 0,
        libelle VARCHAR(100) NOT NULL DEFAULT '',
        quantite_defaut NUMERIC(12,0) NOT NULL DEFAULT 0,
        prix_unitaire NUMERIC(18,2) NOT NULL DEFAULT 0,
        duree_amortissement NUMERIC(12,0) NOT NULL DEFAULT 12,
        type_amortissement VARCHAR(20) NOT NULL DEFAULT 'global',
        actif NUMERIC(1,0) NOT NULL DEFAULT 1,
        ordre NUMERIC(12,0) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_materiels PRIMARY KEY (id_materiel)
    );

    -- Données initiales matériels
    -- duree_amortissement = durée en mois (le calcul divise par effectif × durée)
    INSERT INTO chiffrage_materiels (id_materiel, libelle, quantite_defaut, prix_unitaire, duree_amortissement, type_amortissement, actif, ordre) VALUES
    (1, 'Registre', 12, 49, 3, 'global', 1, 1),
    (2, 'Carnet rapport', 12, 49, 3, 'global', 1, 2),
    (3, 'Radio E/R', 19, 2500, 18, 'global', 1, 3),
    (4, 'Batteries rechargeables', 19, 550, 18, 'global', 1, 4),
    (5, 'Lampes Torches', 19, 140, 18, 'global', 1, 5),
    (6, 'Contrôleur de ronde NFC', 3, 1080, 18, 'global', 1, 6),
    (7, 'Frais Divers NFC', 3, 80.77, 1, 'global', 1, 7),
    (8, 'Sifflet', 55, 12, 12, 'global', 1, 8),
    (9, 'GSM appareil', 3, 1600, 18, 'global', 1, 9),
    (10, 'GSM abonnement', 3, 200, 1, 'global', 1, 10),
    (11, 'Guérite aluminium 2M*3M', 1, 30000, 36, 'global', 1, 11),
    (12, 'Système de détection', 1, 40000, 24, 'global', 1, 12),
    (13, 'Guérite aluminium 1.5M*1.5M', 3, 11500, 36, 'global', 1, 13),
    (14, 'Parasol', 1, 260, 72, 'global', 1, 14),
    (15, 'PC', 1, 2500, 18, 'global', 1, 15),
    (16, 'WIFI', 1, 400, 24, 'global', 1, 16),
    (17, 'Internet', 1, 220, 1, 'global', 1, 17),
    (18, 'Imprimante', 1, 1400, 18, 'global', 1, 18),
    (19, 'Toner', 1, 170, 12, 'global', 1, 19),
    (20, 'Cachet', 1, 120, 24, 'global', 1, 20),
    (21, 'Frais Badge', 1, 150, 1, 'global', 1, 21),
    (22, 'Fourniture', 1, 150, 1, 'global', 1, 22);
END

-- ============================================================================
-- TABLES OPÉRATIONNELLES (Chiffrages)
-- ============================================================================

-- Table en-tête des chiffrages
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_entete')
BEGIN
    CREATE TABLE chiffrage_entete (
        id_chiffrage NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_opportunite NUMERIC(12,0) NOT NULL DEFAULT 0,
        code_client VARCHAR(20) NOT NULL DEFAULT '',
        date_creation DATE NULL DEFAULT NULL,
        libelle VARCHAR(200) NOT NULL DEFAULT '',
        marge_appliquee NUMERIC(8,4) NOT NULL DEFAULT 0,
        total_salaires_charges NUMERIC(18,2) NOT NULL DEFAULT 0,
        total_tenues NUMERIC(18,2) NOT NULL DEFAULT 0,
        total_materiels NUMERIC(18,2) NOT NULL DEFAULT 0,
        total_ht NUMERIC(18,2) NOT NULL DEFAULT 0,
        total_avec_marge NUMERIC(18,2) NOT NULL DEFAULT 0,
        effectif_total NUMERIC(12,0) NOT NULL DEFAULT 0,
        valide NUMERIC(1,0) NOT NULL DEFAULT 0,
        id_utilisateur NUMERIC(12,0) NOT NULL DEFAULT 0,
        commentaire VARCHAR(MAX) NOT NULL DEFAULT '',
        CONSTRAINT PK_chiffrage_entete PRIMARY KEY (id_chiffrage)
    );
END

-- Table lignes profils d'un chiffrage
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_lignes_profils')
BEGIN
    CREATE TABLE chiffrage_lignes_profils (
        id_ligne NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_chiffrage NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_profil NUMERIC(12,0) NOT NULL DEFAULT 0,
        effectif NUMERIC(12,0) NOT NULL DEFAULT 0,
        salaire_base NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_remplacant NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_conges NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_feries NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_cnss NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_amo NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_at NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_rc NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_ipe NUMERIC(18,2) NOT NULL DEFAULT 0,
        total_salaires_charges NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_tenue NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_materiel NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_total_agent NUMERIC(18,2) NOT NULL DEFAULT 0,
        cout_total_ligne NUMERIC(18,2) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_lignes_profils PRIMARY KEY (id_ligne)
    );

    CREATE INDEX IX_chiffrage_lignes_profils_chiffrage ON chiffrage_lignes_profils (id_chiffrage);
END

-- Table lignes tenues d'un chiffrage
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_lignes_tenues')
BEGIN
    CREATE TABLE chiffrage_lignes_tenues (
        id_ligne NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_chiffrage NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_tenue NUMERIC(12,0) NOT NULL DEFAULT 0,
        quantite NUMERIC(12,0) NOT NULL DEFAULT 0,
        prix_unitaire NUMERIC(18,2) NOT NULL DEFAULT 0,
        prix_total NUMERIC(18,2) NOT NULL DEFAULT 0,
        duree_amortissement NUMERIC(12,0) NOT NULL DEFAULT 12,
        amortissement_mensuel NUMERIC(18,2) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_lignes_tenues PRIMARY KEY (id_ligne)
    );

    CREATE INDEX IX_chiffrage_lignes_tenues_chiffrage ON chiffrage_lignes_tenues (id_chiffrage);
END

-- Table lignes matériels d'un chiffrage
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'chiffrage_lignes_materiels')
BEGIN
    CREATE TABLE chiffrage_lignes_materiels (
        id_ligne NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_chiffrage NUMERIC(12,0) NOT NULL DEFAULT 0,
        id_materiel NUMERIC(12,0) NOT NULL DEFAULT 0,
        quantite NUMERIC(12,0) NOT NULL DEFAULT 0,
        prix_unitaire NUMERIC(18,2) NOT NULL DEFAULT 0,
        prix_total NUMERIC(18,2) NOT NULL DEFAULT 0,
        duree_amortissement NUMERIC(12,0) NOT NULL DEFAULT 12,
        amortissement_mensuel NUMERIC(18,2) NOT NULL DEFAULT 0,
        CONSTRAINT PK_chiffrage_lignes_materiels PRIMARY KEY (id_ligne)
    );

    CREATE INDEX IX_chiffrage_lignes_materiels_chiffrage ON chiffrage_lignes_materiels (id_chiffrage);
END
