/** * Change l'état "payé/attente" d'un frais sans recharger la page */ function toggleCheck(id, isChecked) { const formData = new FormData(); formData.append("action", "toggle-check"); formData.append("id", id); formData.append("status", isChecked ? 1 : 0); fetch("/modules/budget/includes/api/manage-item.php", { method: "POST", body: formData, }) .then((response) => { if (!response.ok) throw new Error("Erreur réseau"); // Optionnel : on pourrait actualiser un petit label ici console.log("Statut mis à jour pour l'item " + id); }) .catch((error) => { alert("Erreur lors de la mise à jour"); console.error(error); }); } /** * Supprime un item après confirmation */ function deleteItem(id) { if (confirm("Voulez-vous vraiment supprimer cet élément ?")) { const formData = new FormData(); formData.append("action", "delete"); formData.append("id", id); fetch("/modules/budget/includes/api/manage-item.php", { method: "POST", body: formData, }).then(() => { window.location.reload(); // On recharge pour mettre à jour les totaux }); } } /** * Ouvre la modal et pré-remplit les champs pour la modification */ function editItem(item) { // Si 'item' arrive sous forme de string JSON depuis l'attribut HTML const data = typeof item === "string" ? JSON.parse(item) : item; document.getElementById("modalTitle").innerText = "Modifier : " + data.name; document.getElementById("item_id").value = data.id; document.getElementById("item_name").value = data.name; document.getElementById("item_amount").value = data.amount; document.getElementById("item_category").value = data.category; document.getElementById("item_type").value = data.type; document.getElementById("item_day").value = data.payment_day; document.getElementById("item_reg_month").value = data.reg_month || ""; document.getElementById("item_is_estimate").value = data.is_estimate; document.getElementById("budgetModal").style.display = "flex"; } function openModal(mode) { if (mode === "add") { document.getElementById("modalTitle").innerText = "Ajouter un élément"; document.getElementById("item_id").value = ""; document.querySelector("#budgetModal form").reset(); } document.getElementById("budgetModal").style.display = "flex"; } function closeModal() { document.getElementById("budgetModal").style.display = "none"; } // Variable globale pour stocker les catégories existantes (passées par PHP) let knownCategories = []; function openSavingsModal(mode, owner) { document.getElementById("savingsModal").style.display = "flex"; document.getElementById("sav_owner").value = owner; // On stocke le owner dans le form caché const container = document.getElementById("linesContainer"); container.innerHTML = ""; if (mode === "add") { document.getElementById("savingsModalTitle").innerText = "Nouveau pour " + owner; document.getElementById("sav_date").valueAsDate = new Date(); document.getElementById("sav_total").value = ""; // Par défaut, une ligne vide createLine("", ""); } } function editMonth(monthDate, owner, dataValues, allCats) { document.getElementById("savingsModal").style.display = "flex"; document.getElementById("savingsModalTitle").innerText = "Modifier " + owner + " (" + monthDate + ")"; document.getElementById("sav_owner").value = owner; document.getElementById("sav_date").value = monthDate; knownCategories = allCats || []; const container = document.getElementById("linesContainer"); container.innerHTML = ""; // Total if (dataValues["TOTAL_BANQUE"]) { document.getElementById("sav_total").value = dataValues["TOTAL_BANQUE"]; delete dataValues["TOTAL_BANQUE"]; } else { document.getElementById("sav_total").value = ""; } // Lignes existantes for (const [category, amount] of Object.entries(dataValues)) { createLine(category, amount); } createLine("", ""); } function addNewLine() { createLine("", ""); } /** * Crée une ligne HTML dans la modale : [ Nom de la catégorie ] [ Montant ] [ X ] */ function createLine(name, amount) { const container = document.getElementById("linesContainer"); const div = document.createElement("div"); div.className = "savings-line-item"; const listId = "list_" + Math.random().toString(36).substr(2, 9); div.innerHTML = `