HEX
Server: Apache
System: Linux webm002.cluster129.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: xnmprns (501243)
PHP: 8.4.10
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/x/n/m/xnmprns/www/Script/script.js
// Tarifs des sous-services
const tarifs = {
    'Pose de Cloisons': 47,
    'Plafonds ( Préparation plus finition peinture )': 23,
    'Murs très peu ou pas fissurés Avec finition peinture': 23,
    'Murs fissurés ou très fissurés Avec finition peinture': 58,
    'Mur en crépi à mettre en mur lisse Avec finition peinture': 43,
    'Mur pose de toile de verre': 18,
    'Préparation des supports ( Enduit, ponçage et impression )': 11,
    'Peinture finition deux couches ( Uniquement la peinture )': 13,
    'Pose de papier peint': 15,
    'Dépose de papier peint': 7,
    'Suppléments dépose de toile verre existantes': 9,
    'Pose parquet stratifié': 28,
    'Pose moquette': 34,
    'Pose de carrelage Avec finition': 55,
    'Pose de plinthe carrelage': 10,
    'Pose plinthe bois hydro': 10,
    'Pose plinthe bois': 10,
    'Dépose carrelage': 18,
    'Dépose parquet stratifié': 22,
    'Dépose moquette': 24
};

let totalPrix = 0; // Prix total
let servicesChoisis = []; // Liste des services choisis

// Fonction pour afficher les sous-services en fonction de la catégorie sélectionnée
function afficherSousServices() {
    const categorie = document.getElementById('categorie').value;
    const sousServiceSelect = document.getElementById('sous_service');
    const sousServicesSection = document.getElementById('sousServicesSection');

    // Effacer les options existantes
    sousServiceSelect.innerHTML = '<option value="">Sélectionnez un sous-service</option>';

    // Afficher les sous-services en fonction de la catégorie
    if (categorie === 'murs_plafonds') {
        const sousServices = [
            'Pose de Cloisons',
            'Plafonds ( Préparation plus finition peinture )',
            'Murs très peu ou pas fissurés Avec finition peinture',
            'Murs fissurés ou très fissurés Avec finition peinture',
            'Mur en crépi à mettre en mur lisse Avec finition peinture',
            'Mur pose de toile de verre',            
            'Préparation des supports ( Enduit, ponçage et impression )',            
            'Peinture finition deux couches ( Uniquement la peinture )',            
            'Pose de papier peint',
            'Dépose de papier peint',
            'Suppléments dépose de toile verre existantes'
        ];
        sousServices.forEach(service => {
            let option = new Option(service, service);
            sousServiceSelect.add(option);
        });
    } else if (categorie === 'sols_plinthes') {
        const sousServices = [
            'Dépose parquet stratifié',
            'Dépose carrelage',
            'Dépose moquette',
            'Pose parquet stratifié',
            'Pose moquette',
            'Pose de carrelage Avec finition',
            'Pose de plinthe carrelage',
            'Pose plinthe bois hydro',
            'Pose plinthe bois'                         
        ];
        sousServices.forEach(service => {
            let option = new Option(service, service);
            sousServiceSelect.add(option);
        });
    }

    sousServicesSection.style.display = 'block'; // Afficher la section des sous-services
}

// Fonction pour afficher les champs de mesure en fonction du sous-service sélectionné
function afficherMesures() {
    const sousService = document.getElementById('sous_service').value;
    const mesuresSection = document.getElementById('mesuresSection');
    const champsMesures = document.getElementById('champs_mesures');

    champsMesures.innerHTML = ''; // Réinitialiser les champs de mesures

    // Afficher les champs de mesures en fonction du sous-service
    if (['Pose de Cloisons', 'Plafonds ( Préparation plus finition peinture )', 'Murs très peu ou pas fissurés Avec finition peinture', 'Murs fissurés ou très fissurés Avec finition peinture', 'Mur en crépi à mettre en mur lisse Avec finition peinture', 'Mur pose de toile de verre', 'Préparation des supports ( Enduit, ponçage et impression )', 'Peinture finition deux couches ( Uniquement la peinture )', 'Pose de papier peint', 'Dépose de papier peint', 'Suppléments dépose de toile verre existantes'].includes(sousService)) {
        champsMesures.innerHTML = `
            <label for="hauteur">Hauteur (en mètres) :</label>
            <input type="number" step="0.01" id="hauteur" name="hauteur" required>
            <label for="longueur">Longueur (en mètres) :</label>
            <input type="number" step="0.01" id="longueur" name="longueur" required>
        `;
    } else if (['Pose parquet stratifié', 'Pose moquette', 'Pose de carrelage Avec finition', 'Dépose carrelage', 'Dépose parquet stratifié', 'Dépose moquette'].includes(sousService)) {
        champsMesures.innerHTML = `
            <label for="largeur">Largeur (en mètres) :</label>
            <input type="number" step="0.01" id="largeur" name="largeur" required>
            <label for="longueur">Longueur (en mètres) :</label>
            <input type="number" step="0.01" id="longueur" name="longueur" required>
        `;
    } else if (['Pose de plinthe carrelage', 'Pose plinthe bois hydro', 'Pose plinthe bois'].includes(sousService)) {
        champsMesures.innerHTML = `
            <label for="longueur">Longueur (en mètres) :</label>
            <input type="number" step="0.01" id="longueur" name="longueur" required>
        `;
    }

    mesuresSection.style.display = 'block'; // Afficher la section des mesures
} 

// Fonction pour ajouter un service au récapitulatif
function ajouterService() {
    const sousService = document.getElementById('sous_service').value;
    const hauteur = parseFloat(document.getElementById('hauteur') ? document.getElementById('hauteur').value : 0);
    const longueur = parseFloat(document.getElementById('longueur').value) || 0;
    const largeur = parseFloat(document.getElementById('largeur') ? document.getElementById('largeur').value : 0);

    let surface;
    
    // Vérifier si le service concerne les plinthes (où on ne calcule que la longueur)
    if (['Pose de plinthe carrelage', 'Pose plinthe bois hydro', 'Pose plinthe bois'].includes(sousService)) {
        surface = longueur; // Pour les plinthes, on utilise uniquement la longueur
    } else {
        // Calculer la surface en fonction des dimensions fournies pour les autres services
        surface = (hauteur && longueur) ? (hauteur * longueur) : (largeur * longueur);
    }

    let prix = tarifs[sousService] * surface;

    // Vérifier que le prix et la surface sont valides
    if (!isNaN(prix) && surface > 0) {
        const devisDetails = document.getElementById('devisDetails');
        const ligne = `
            <div class="devis-item">
                <p><b class="org-txt">${sousService}</b>, Surface: ${surface.toFixed(2)} m² - Prix: ${prix.toFixed(2)} € TTC</p>
                <span class="supprimer" onclick="supprimerService(this, ${prix})"><i class='bx bx-x'></i></span>
            </div>
        `;
        devisDetails.innerHTML += ligne; // Ajouter la ligne au récapitulatif

        totalPrix += prix; // Mettre à jour le prix total
        document.getElementById('totalPrix').innerText = totalPrix.toFixed(2); // Afficher le prix total

        // Ajouter à la liste des services choisis
        servicesChoisis.push({
            service: sousService,
            surface: surface
        });

        // Mettre à jour le champ caché avec les services choisis
        document.getElementById('servicesChoisis').value = JSON.stringify(servicesChoisis);
    } else {
        alert("Veuillez entrer des valeurs valides pour la surface.");
    }
}

// Fonction pour supprimer un service du récapitulatif
function supprimerService(button, prix) {
    const serviceItem = button.parentElement; // Récupérer l'élément parent
    serviceItem.remove(); // Supprimer l'élément du DOM
    totalPrix -= prix; // Soustraire le prix du total
    document.getElementById('totalPrix').innerText = totalPrix.toFixed(2); // Mettre à jour le prix total

    // Mettre à jour la liste des services choisis
    servicesChoisis = servicesChoisis.filter(service => {
        const surface = service.surface;
        const serviceName = service.service;
        return serviceName !== button.parentElement.querySelector('p').innerText.split(',')[0].split(': ')[1];
    });
    document.getElementById('servicesChoisis').value = JSON.stringify(servicesChoisis);
}