document.addEventListener("DOMContentLoaded", () => { const form = document.getElementById("form-proveedor"); const tablaBody = document.querySelector("#tabla-proveedores tbody"); form.addEventListener("submit", (e) => { e.preventDefault(); const nombre = document.querySelector(".nombre-proveedor").value; const telefono = document.querySelector(".telefono-proveedor").value; const proveedor = { id: form.dataset.editando || null, nombre, telefono, }; const url = proveedor.id ? "../php/Editar_Proveedor.php" : "../php/Guardar_Proveedor.php"; fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(proveedor), }) .then((res) => res.json()) .then((data) => { if (data.success) { alert(data.message || "Proveedor guardado"); form.reset(); delete form.dataset.editando; cargarProveedores(); } else { alert("Error: " + (data.error || "Error desconocido")); } }); }); cargarProveedores(); // Delegación de eventos para la tabla document.addEventListener("click", (e) => { if (e.target.classList.contains("btn-cancelar")) { e.preventDefault(); e.stopPropagation(); const fila = e.target.closest("tr"); if (fila) { cargarProveedores(); } } }); }); function cargarProveedores() { fetch("../php/Obtener_Proveedores.php") .then((res) => res.json()) .then((proveedores) => { const tablaBody = document.querySelector("#tabla-proveedores tbody"); tablaBody.innerHTML = ""; proveedores.forEach((p) => { const fila = document.createElement("tr"); fila.setAttribute("data-id", p.ID_Proveedor); fila.innerHTML = ` ${p.ID_Proveedor} ${p.Nombre} ${p.Telefono} `; tablaBody.appendChild(fila); }); document.querySelectorAll("#tabla-proveedores .btn-editar-proveedor").forEach((btn) => { btn.addEventListener("click", () => activarModoEdicion(btn)); }); document.querySelectorAll("#tabla-proveedores .btn-eliminar-proveedor").forEach((btn) => { btn.addEventListener("click", () => eliminarProveedor(btn.dataset.id)); }); document.querySelectorAll(".btn-ver-productos").forEach((btn) => { btn.addEventListener("click", () => cargarProductosDelProveedor(btn.dataset.id)); }); }); } function editarProveedor(id) { fetch(`../php/Buscar_Proveedor_Editar.php?id=${id}`) .then((res) => res.json()) .then((data) => { console.log("Respuesta del servidor:", data); if (!data || !data.ID_Proveedor) { alert("Proveedor no encontrado"); return; } const form = document.getElementById("form-proveedor"); document.querySelector(".nombre-proveedor").value = data.Nombre; document.querySelector(".telefono-proveedor").value = data.Telefono; form.dataset.editando = data.ID_Proveedor; }); } function eliminarProveedor(id) { if (!confirm("¿Estás seguro que querés eliminar este proveedor?")) return; fetch("../php/Eliminar_Proveedor.php", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id: parseInt(id, 10) }), }) .then((res) => res.text()) .then((text) => { if (!text) { throw new Error("Respuesta vacía del servidor."); } let data; try { data = JSON.parse(text); } catch (error) { console.warn("Respuesta de Eliminar_Proveedor no es JSON:", text); throw new Error("Respuesta inválida del servidor."); } if (data.success) { alert(data.message || "Proveedor eliminado"); cargarProveedores(); } else { alert("Error: " + (data.error || data.message || "Error desconocido")); } }) .catch((error) => { console.error("Error al eliminar proveedor:", error); alert(error.message || "Error de conexión al eliminar proveedor."); }); } function cargarProductosDelProveedor(idProveedor) { fetch(`../php/Obtener_Productos_Proveedor.php?id=${idProveedor}`) .then((res) => res.json()) .then((productos) => { const contenedor = document.getElementById("productos-proveedor"); const cuerpo = document.getElementById("productos-proveedor-body"); cuerpo.innerHTML = ""; productos.forEach((prod) => { const fila = document.createElement("tr"); fila.setAttribute("data-id", idProveedor); fila.innerHTML = ` ${prod.ID_Producto} ${prod.Descripcion} `; cuerpo.appendChild(fila); }); contenedor.style.display = "block"; document.querySelectorAll(".btn-eliminar-producto").forEach((btn) => { btn.addEventListener("click", () => { const idProd = btn.dataset.idProducto; const idProv = btn.dataset.idProveedor; fetch( `../php/Eliminar_Producto_Proveedor.php?id_proveedor=${idProv}&id_producto=${idProd}` ) .then((res) => res.json()) .then((data) => { if (data.success) { cargarProductosDelProveedor(idProv); } else { alert("Error: " + data.error); } }); }); }); }); } // Agregar producto al proveedor document.addEventListener("DOMContentLoaded", () => { const formAgregarProducto = document.getElementById("form-agregar-producto"); formAgregarProducto.addEventListener("submit", function (e) { e.preventDefault(); const idProveedor = document.getElementById("id-proveedor-producto").value; const idProducto = document.getElementById("nuevo-id-producto").value; fetch("../php/Agregar_Producto_Proveedor.php", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id_proveedor: parseInt(idProveedor), id_producto: parseInt(idProducto), }), }) .then((res) => res.json()) .then((data) => { if (data.success) { cargarProductosDelProveedor(idProveedor); document.getElementById("nuevo-id-producto").value = ""; } else { alert("Error: " + data.error); } }); }); }); document.addEventListener("click", function (e) { if (e.target.classList.contains("btn-ver-productos")) { const idProveedor = e.target.dataset.id; document.getElementById("id-proveedor-producto").value = idProveedor; cargarProductosDelProveedor(idProveedor); // Mostrar tabla productos document.getElementById("productos-proveedor").style.display = "block"; document.getElementById("tabla-proveedores").style.display = "none"; document.getElementById("titulo-proveedores").style.display = "none"; } }); document.getElementById("cerrar-productos").addEventListener("click", () => { document.getElementById("productos-proveedor").style.display = "none"; document.getElementById("tabla-proveedores").style.display = "table"; document.getElementById("titulo-proveedores").style.display = "block"; }); function activarModoEdicion(btnEditar) { const fila = btnEditar.closest("tr"); const celdas = fila.querySelectorAll("td"); // Obtener ID desde el botón const idProveedor = btnEditar.getAttribute("data-id"); if (!idProveedor) { console.error("ID DE PROVEEDOR NO ENCONTRADO"); alert("ID de proveedor no encontrado."); return; } // Obtener valores actuales ANTES de cambiar a inputs const nombreActual = celdas[1].textContent.trim(); const telefonoActual = celdas[2].textContent.trim(); // Reemplazar con inputs celdas[1].innerHTML = ``; celdas[2].innerHTML = ``; // Botón Guardar const btnGuardar = document.createElement("button"); btnGuardar.type = "button"; btnGuardar.textContent = "Guardar"; btnGuardar.className = "btn-guardar"; btnGuardar.setAttribute("data-id", idProveedor); btnGuardar.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); guardarEdicion(fila, idProveedor); }); // Botón Cancelar const btnCancelar = document.createElement("button"); btnCancelar.type = "button"; btnCancelar.textContent = "Cancelar"; btnCancelar.className = "btn-cancelar"; btnCancelar.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); // Simplemente recargar la tabla cancela todos los cambios cargarProveedores(); }); // Reemplazar celda de botones const celdaBotones = celdas[3]; celdaBotones.innerHTML = ""; celdaBotones.appendChild(btnGuardar); celdaBotones.appendChild(btnCancelar); } function guardarEdicion(fila, idProveedor) { const celdas = fila.querySelectorAll("td"); const nuevoNombre = fila.querySelector(".input-nombre").value.trim(); const nuevoTelefono = fila.querySelector(".input-telefono").value.trim(); if (nuevoNombre === "" || nuevoTelefono === "") { alert("Por favor, complete todos los campos."); return; } console.log("Datos enviados:", { id: idProveedor, nombre: nuevoNombre, telefono: nuevoTelefono, }); // Enviar los nuevos datos al servidor para actualizarlos en la base de datos fetch("../php/Editar_Proveedor.php", { method: "POST", body: JSON.stringify({ id: idProveedor, nombre: nuevoNombre, telefono: nuevoTelefono, }), headers: { "Content-Type": "application/json" }, }) .then((response) => response.json()) .then((data) => { if (data.success) { alert("Proveedor actualizado correctamente"); cargarProveedores(); } else { alert("Error al actualizar el proveedor."); } }) .catch((error) => { console.error("Error al actualizar el proveedor:", error); alert("Ocurrió un error al actualizar el proveedor."); }); }