prepare($sql); $stmt->bindParam(':nombre', $nombre_sede); $stmt->execute(); $feedback = 'Sede añadida correctamente.'; $feedback_type = 'success'; } catch (PDOException $e) { $feedback = 'Error al añadir la sede: ' . $e->getMessage(); $feedback_type = 'danger'; } } else { $feedback = 'El nombre de la sede no puede estar vacío.'; $feedback_type = 'warning'; } } // --- ELIMINAR SEDE --- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_sede'])) { $sede_id = $_POST['sede_id']; try { $sql = "DELETE FROM sedes WHERE id = :id"; $stmt = $conn->prepare($sql); $stmt->bindParam(':id', $sede_id, PDO::PARAM_INT); $stmt->execute(); $feedback = 'Sede eliminada correctamente.'; $feedback_type = 'success'; } catch (PDOException $e) { $feedback = 'Error al eliminar la sede.'; $feedback_type = 'danger'; } } // --- REGISTRAR ENTRADA DE INVENTARIO --- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['registrar_entrada'])) { $producto_id = $_POST['producto_id']; $cantidad = $_POST['cantidad']; if (!empty($producto_id) && !empty($cantidad) && is_numeric($cantidad) && $cantidad > 0) { try { $conn->beginTransaction(); $stmt = $conn->prepare("UPDATE productos SET unidades_disponibles = unidades_disponibles + :cantidad WHERE id = :id"); $stmt->bindParam(':cantidad', $cantidad, PDO::PARAM_INT); $stmt->bindParam(':id', $producto_id, PDO::PARAM_INT); $stmt->execute(); $conn->commit(); $feedback = 'Stock actualizado correctamente.'; $feedback_type = 'success'; } catch (PDOException $e) { $conn->rollBack(); $feedback = 'Error al actualizar el stock: ' . $e->getMessage(); $feedback_type = 'danger'; } } else { $feedback = 'Por favor, selecciona un producto e introduce una cantidad válida.'; $feedback_type = 'warning'; } } // --- REGISTRAR NUEVO PRODUCTO --- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['registrar_producto'])) { $nombre = trim($_POST['nombre']); $unidades = (int)$_POST['unidades_disponibles']; $precio = (float)$_POST['precio_unitario']; $costo = (float)$_POST['costo_unitario']; if (!empty($nombre) && $unidades >= 0 && $precio >= 0 && $costo >= 0) { try { $sql = "INSERT INTO productos (nombre, unidades_disponibles, precio_unitario, costo_unitario) VALUES (:nombre, :unidades, :precio, :costo)"; $stmt = $conn->prepare($sql); $stmt->execute([':nombre' => $nombre, ':unidades' => $unidades, ':precio' => $precio, ':costo' => $costo]); $feedback = 'Producto registrado correctamente.'; $feedback_type = 'success'; } catch (PDOException $e) { $feedback = 'Error al registrar el producto: ' . $e->getMessage(); $feedback_type = 'danger'; } } else { $feedback = 'Por favor, completa todos los campos del producto correctamente.'; $feedback_type = 'warning'; } } // ======= OBTENCIÓN DE DATOS (GET) ======= // --- DATOS PARA GRÁFICOS --- $productos_por_agotarse = $conn->query("SELECT nombre, unidades_disponibles FROM productos WHERE unidades_disponibles > 0 ORDER BY unidades_disponibles ASC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC); $productos_mas_stock = $conn->query("SELECT nombre, unidades_disponibles FROM productos ORDER BY unidades_disponibles DESC LIMIT 5")->fetchAll(PDO::FETCH_ASSOC); // --- LISTA DE TODOS LOS PRODUCTOS --- $productos = $conn->query("SELECT * FROM productos ORDER BY nombre ASC")->fetchAll(PDO::FETCH_ASSOC); // --- LISTA DE SEDES --- $sedes = $conn->query("SELECT * FROM sedes ORDER BY nombre ASC")->fetchAll(PDO::FETCH_ASSOC); $pageTitle = "Panel de Inventario"; include 'layout_header.php'; ?>

Panel de Inventario

Productos por Agotarse
Top 5 Productos con más Stock
Stock General de Productos
Nombre Unidades Disponibles Precio Unitario Costo Unitario
S/ S/
No hay productos registrados.
Registrar Nuevo Producto
Registrar Entrada de Inventario
Añadir Nueva Sede
Sedes Existentes
  • No hay sedes registradas.