File: /home/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);
}