Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
AVIDOTAPP
/
controllers
:
InventarioController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php class InventarioController { private $modelo; public function __construct() { require_once 'models/InventarioModel.php'; $this->modelo = new InventarioModel(); } // ═══════════════════════════════════════════════════════════════ // INVENTARIO PRINCIPAL // ═══════════════════════════════════════════════════════════════ /** * Pantalla principal: lista EPPs con checkbox + cantidad para seleccionar * URL: index.php?controller=Inventario&action=index * Equivale a: inventario/DOTIN.PHP */ public function index() { $this->verificarSesion(); // Mensajes flash $msg_ok = $_SESSION['mensaje_exito'] ?? ''; $msg_err = $_SESSION['mensaje_error'] ?? ''; unset($_SESSION['mensaje_exito'], $_SESSION['mensaje_error']); // POST — seleccionar elementos if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['CONTINUAR'])) { $seleccionados = $this->procesarSeleccion($_POST); if (!empty($seleccionados)) { $_SESSION['elementos_seleccionados'] = $seleccionados; $_SESSION['inv_tipo'] = 'principal'; header('Location: index.php?controller=Inventario&action=verificar'); exit(); } $msg_err = 'Debes seleccionar al menos un elemento con cantidad válida.'; } $epps = $this->modelo->getEPPs(); include 'views/inventario/seleccionar.php'; } /** * Verificar / previsualizar antes de confirmar — inventario principal * URL: index.php?controller=Inventario&action=verificar * Equivale a: inventario/VERNOEN.PHP (con factura/proveedor/precio) */ public function verificar() { $this->verificarSesion(); // Eliminar elemento de la lista if (isset($_GET['eliminar'])) { $this->eliminarDeSession($_GET['eliminar']); header('Location: index.php?controller=Inventario&action=verificar'); exit(); } // Guardar info factura/proveedor/precio por elemento (AJAX o POST) if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['guardar_info'])) { $codigo = $_POST['codigo']; if (!isset($_SESSION['info_elementos'])) $_SESSION['info_elementos'] = []; $_SESSION['info_elementos'][$codigo] = [ 'nfactura' => trim($_POST['nfactura'] ?? ''), 'provedor' => trim($_POST['provedor'] ?? ''), 'precio' => floatval($_POST['precio'] ?? 0), ]; echo json_encode(['ok' => true]); exit(); } // Confirmar ingreso if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['CONFIRMA'])) { $elementos = $_SESSION['elementos_seleccionados'] ?? []; $info_elementos = $_SESSION['info_elementos'] ?? []; $user = $_SESSION['DIGITA'] ?? 'DESCONOCIDO'; // Validar que todos tengan factura y proveedor $errores = $this->validarInfoElementos($elementos, $info_elementos); if (!empty($errores)) { $_SESSION['mensaje_error'] = implode('<br>', $errores); header('Location: index.php?controller=Inventario&action=verificar'); exit(); } $resultado = $this->modelo->confirmarIngresoPrincipal($elementos, $info_elementos, $user); if ($resultado['ok']) { unset($_SESSION['elementos_seleccionados'], $_SESSION['info_elementos']); $_SESSION['mensaje_exito'] = 'Inventario actualizado correctamente.'; header('Location: index.php?controller=Inventario&action=index'); } else { $_SESSION['mensaje_error'] = $resultado['error']; header('Location: index.php?controller=Inventario&action=verificar'); } exit(); } $msg_ok = $_SESSION['mensaje_exito'] ?? ''; $msg_err = $_SESSION['mensaje_error'] ?? ''; unset($_SESSION['mensaje_exito'], $_SESSION['mensaje_error']); $elementos_session = $_SESSION['elementos_seleccionados'] ?? []; $info_elementos = $_SESSION['info_elementos'] ?? []; $elementos_mostrar = $this->prepararElementosVer($elementos_session, 'principal'); include 'views/inventario/verificar.php'; } /** * Agregar nuevo EPP al catálogo * URL: index.php?controller=Inventario&action=agregarEPP * Equivale a: inventario/AGREGAR.PHP */ public function agregarEPP() { $this->verificarSesion(); $msg_ok = $msg_err = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['guardar'])) { $codigo = trim($_POST['codigo'] ?? ''); $prenda = trim($_POST['prenda'] ?? ''); if (strlen($codigo) >= 1 && strlen($prenda) >= 1) { if ($this->modelo->agregarEPP($codigo, $prenda)) { $msg_ok = 'EPP creado correctamente.'; } else { $msg_err = 'Error al crear el EPP. Verifique que el código no exista.'; } } else { $msg_err = 'Por favor completa todos los campos.'; } } include 'views/inventario/agregar_epp.php'; } /** * AJAX — actualizar cantidad en inventario principal * URL: index.php?controller=Inventario&action=ajaxActualizar (POST) * Equivale a: inventario/BOTON.PHP */ public function ajaxActualizar() { $codigo = $_POST['codigo'] ?? ''; $cantidad = $_POST['cantidad'] ?? 0; $ok = $this->modelo->actualizarCantidadPrincipal($codigo, (int)$cantidad); echo $ok ? 'success' : 'error'; exit(); } /** * AJAX — eliminar del inventario principal * URL: index.php?controller=Inventario&action=ajaxEliminar (POST) * Equivale a: inventario/ELIMINAR.PHP */ public function ajaxEliminar() { $codigo = $_POST['codigo'] ?? ''; $ok = $this->modelo->eliminarItemPrincipal($codigo); echo $ok ? 'success' : 'Error: ' . 'no se pudo eliminar'; exit(); } // ═══════════════════════════════════════════════════════════════ // INVENTARIO USADO // ═══════════════════════════════════════════════════════════════ /** * Pantalla principal inventario usado * URL: index.php?controller=Inventario&action=usado * Equivale a: inventarioUsa/DOTIN.PHP */ public function usado() { $this->verificarSesion(); $msg_ok = $_SESSION['mensaje_exito'] ?? ''; $msg_err = $_SESSION['mensaje_error'] ?? ''; unset($_SESSION['mensaje_exito'], $_SESSION['mensaje_error']); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['CONTINUAR'])) { $seleccionados = $this->procesarSeleccion($_POST); if (!empty($seleccionados)) { $_SESSION['elementos_seleccionados'] = $seleccionados; $_SESSION['inv_tipo'] = 'usado'; header('Location: index.php?controller=Inventario&action=verificarUsado'); exit(); } $msg_err = 'Debes seleccionar al menos un elemento con cantidad válida.'; } $epps = $this->modelo->getEPPs(); include 'views/inventario/seleccionar_usado.php'; } /** * Verificar / previsualizar — inventario usado (sin factura/proveedor) * URL: index.php?controller=Inventario&action=verificarUsado * Equivale a: inventarioUsa/VERNOEN.PHP */ public function verificarUsado() { $this->verificarSesion(); if (isset($_GET['eliminar'])) { $this->eliminarDeSession($_GET['eliminar']); header('Location: index.php?controller=Inventario&action=verificarUsado'); exit(); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['CONFIRMA'])) { $elementos = $_SESSION['elementos_seleccionados'] ?? []; $user = $_SESSION['DIGITA'] ?? 'DESCONOCIDO'; $resultado = $this->modelo->confirmarIngresoUsado($elementos, $user); if ($resultado['ok']) { unset($_SESSION['elementos_seleccionados']); $_SESSION['mensaje_exito'] = 'Inventario de usados actualizado correctamente.'; header('Location: index.php?controller=Inventario&action=usado'); } else { $_SESSION['mensaje_error'] = $resultado['error']; header('Location: index.php?controller=Inventario&action=verificarUsado'); } exit(); } $msg_ok = $_SESSION['mensaje_exito'] ?? ''; $msg_err = $_SESSION['mensaje_error'] ?? ''; unset($_SESSION['mensaje_exito'], $_SESSION['mensaje_error']); $elementos_session = $_SESSION['elementos_seleccionados'] ?? []; $elementos_mostrar = $this->prepararElementosVer($elementos_session, 'usado'); include 'views/inventario/verificar_usado.php'; } /** * AJAX — actualizar cantidad inventario usado * URL: index.php?controller=Inventario&action=ajaxActualizarUsado (POST) */ public function ajaxActualizarUsado() { $codigo = $_POST['codigo'] ?? ''; $cantidad = $_POST['cantidad'] ?? 0; $ok = $this->modelo->actualizarCantidadUsado($codigo, (int)$cantidad); echo $ok ? 'success' : 'error'; exit(); } /** * AJAX — eliminar del inventario usado * URL: index.php?controller=Inventario&action=ajaxEliminarUsado (POST) */ public function ajaxEliminarUsado() { $codigo = $_POST['codigo'] ?? ''; $ok = $this->modelo->eliminarItemUsado($codigo); echo $ok ? 'success' : 'Error: no se pudo eliminar'; exit(); } // ═══════════════════════════════════════════════════════════════ // HELPERS PRIVADOS // ═══════════════════════════════════════════════════════════════ private function procesarSeleccion(array $post): array { $seleccionados = []; foreach ($post as $key => $value) { if (strpos($key, 'seleccionar_') === 0 && $value === 'on') { $codigo = substr($key, 12); $cantidad = isset($post[$codigo]) ? intval($post[$codigo]) : 0; if ($cantidad > 0) { $epps = $this->modelo->getEPPs(); $desc = ''; foreach ($epps as $e) { if ($e['CODIGO'] === $codigo) { $desc = $e['NOMBRE']; break; } } $seleccionados[] = ['codigo' => $codigo, 'descripcion' => $desc, 'cantidad' => $cantidad]; } } } return $seleccionados; } private function prepararElementosVer(array $elementos, string $tipo): array { $resultado = []; foreach ($elementos as $el) { $actual = $tipo === 'principal' ? $this->modelo->getCantidadActualPrincipal($el['codigo']) : $this->modelo->getCantidadActualUsado($el['codigo']); $resultado[] = [ 'codigo' => $el['codigo'], 'descripcion' => $el['descripcion'], 'cantidad' => $el['cantidad'], 'cantidad_actual'=> $actual, 'cantidad_total' => $actual + $el['cantidad'], ]; } return $resultado; } private function validarInfoElementos(array $elementos, array $info): array { $errores = []; foreach ($elementos as $el) { $cod = $el['codigo']; if (!isset($info[$cod])) { $errores[] = "Falta información de factura/proveedor para: {$el['descripcion']}"; continue; } if (empty($info[$cod]['nfactura'])) $errores[] = "Falta N° factura para: {$el['descripcion']}"; if (empty($info[$cod]['provedor'])) $errores[] = "Falta proveedor para: {$el['descripcion']}"; } return $errores; } private function eliminarDeSession(string $codigo) { if (isset($_SESSION['elementos_seleccionados'])) { $_SESSION['elementos_seleccionados'] = array_values( array_filter($_SESSION['elementos_seleccionados'], fn($el) => $el['codigo'] !== $codigo) ); } } private function verificarSesion() { if (!isset($_SESSION['DIGITA']) || empty($_SESSION['DIGITA'])) { header('Location: index.php'); exit(); } } } ?>