// AGREGAR PRODUCTO A LA CAJA case 'agregar_producto_caja': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header('Location: index.php?opt=crear_venta'); exit; } $ids = $_POST['ids'] ?? []; $cantidades = $_POST['cantidades'] ?? []; if (empty($ids)) { $_SESSION['flash_error'] = 'No se seleccionó ningún producto.'; header('Location: index.php?opt=agregar_producto'); exit; } $agregados = 0; $errores = []; // Evitar duplicados $ids = array_unique($ids); foreach ($ids as $idProducto) { $idProducto = (int) $idProducto; $cantidad = isset($cantidades[$idProducto]) ? (int) $cantidades[$idProducto] : 1; if ($idProducto <= 0 || $cantidad <= 0) { $errores[] = 'Datos inválidos.'; continue; } $producto = $productomodel->obtenerPorIdParaCaja($idProducto); if (!$producto) { $errores[] = 'Producto inexistente.'; continue; } if ($cajamodel->agregarProducto($producto, $cantidad)) { $agregados++; } else { $errores[] = $cajamodel->getError(); } } // Condiciones para mostrar mensajes if ($agregados === 1) { $_SESSION['flash_success'] = "Se agregó un producto correctamente."; } else if ($agregados > 1) { $_SESSION['flash_success'] = "Se agregaron {$agregados} productos correctamente."; } if (!empty($errores)) { $_SESSION['flash_error'] = implode('
', array_unique($errores)); header('Location: index.php?opt=agregar_producto'); exit; } header('Location: index.php?opt=crear_venta'); exit; // ELIMINAR PRODUCTO DE CAJA case 'eliminar_producto': $idProducto = (int) ($_POST['id_producto'] ?? 0); if ($idProducto <= 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=crear_venta'); exit; } if (!$cajamodel->eliminarProducto($idProducto)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudo eliminar el producto.'; } else { $_SESSION['flash_success'] = 'Producto eliminado correctamente.'; } header('Location: index.php?opt=crear_venta'); exit; // EDITAR CANTIDAD DE PRODUCTO case 'editar_cantidad': $idProducto = (int) ($_POST['id_producto'] ?? 0); $nuevaCantidad = (int) ($_POST['cantidad'] ?? 0); if ($idProducto <= 0 || $nuevaCantidad <= 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=crear_venta'); exit; } if (!$cajamodel->editarCantidad($idProducto, $nuevaCantidad)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudo actualizar la cantidad.'; } else { $_SESSION['flash_success'] = 'Cantidad editada correctamente.'; } header('Location: index.php?opt=crear_venta'); exit; // VACIAR CAJA DE PRODUCTOS case 'vaciar_caja_venta': if ($cajamodel->vaciarCajaVenta()) { $_SESSION['flash_success'] = 'Carrito vaciado.'; } else { $_SESSION['flash_error'] = 'No se pudo vaciar el carrito.'; } header('Location: index.php?opt=crear_venta'); exit; // <---------------------------------- MANEJO DE CAJA PARA PEDIDO ----------------------------------> // AGREGAR PRODUCTO A CAJA DE PEDIDO case 'agregar_producto_pedido_caja': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header('Location: index.php?opt=crear_pedido'); exit; } $ids = $_POST['ids'] ?? []; $costos = $_POST['costos'] ?? []; $cantidades = $_POST['cantidades'] ?? []; if (empty($ids)) { $_SESSION['flash_error'] = 'No se seleccionó ningún producto.'; header('Location: index.php?opt=agregar_producto_pedido'); exit; } $errores = []; $agregados = 0; // Evitar duplicados $ids = array_unique($ids); foreach ($ids as $idProducto) { $idProducto = (int) $idProducto; $costo = isset($costos[$idProducto]) ? (float) $costos[$idProducto] : 0; $cantidad = isset($cantidades[$idProducto]) ? (int) $cantidades[$idProducto] : 1; if ($idProducto <= 0 || $cantidad <= 0 || $costo <= 0) { $errores[] = 'Datos inválidos.'; continue; } $producto = $productomodel->obtenerPorIdParaCajaPedido($idProducto); if (!$producto) { $errores[] = 'Producto inexistente.'; continue; } if ($cajamodel->agregarProductoPedido($producto, $costo, $cantidad)) { $agregados++; } else { $errores[] = $cajamodel->getError(); } } // Condiciones para manejo de mensajes if ($agregados === 1) { $_SESSION['flash_success'] = "Se agregó un producto correctamente."; } else if ($agregados > 1) { $_SESSION['flash_success'] = "Se agregaron {$agregados} productos correctamente."; } if (!empty($errores)) { $_SESSION['flash_error'] = implode('
', array_unique($errores)); header('Location: index.php?opt=agregar_producto_pedido'); exit; } header('Location: index.php?opt=crear_pedido'); exit; // VACIAR CAJA DE PRODUCTOS PARA PEDIDO case 'vaciar_caja_pedido': // Guardo datos en $_SESSION para mantener persistencia $_SESSION['pedido']['cond_iva'] = $_POST['cond_iva'] ?? ''; $_SESSION['pedido']['cuit'] = $_POST['cuit'] ?? ''; if ($cajamodel->vaciarCajaPedido()) { $_SESSION['flash_success'] = 'Carrito vaciado.'; } else { $_SESSION['flash_error'] = 'No se pudo vaciar el carrito.'; } header('Location: index.php?opt=crear_pedido'); exit; // ELIMINAR PRODUCTO DE PEDIDO case 'eliminar_producto_pedido': // Guardo datos en $_SESSION para mantener persistencia $_SESSION['pedido']['cond_iva'] = $_POST['cond_iva'] ?? ''; $_SESSION['pedido']['cuit'] = ($_POST['cuit_1'] ?? '') . ($_POST['cuit_2'] ?? '') . ($_POST['cuit_3'] ?? ''); $idProducto = (int) ($_POST['id_producto'] ?? 0); if ($idProducto <= 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=crear_pedido'); exit; } if (!$cajamodel->eliminarProductoPedido($idProducto)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudo eliminar el producto.'; } header('Location: index.php?opt=crear_pedido'); exit; // EDITAR DATOS DE PRODUCTOS PARA PEDIDO case 'editar_datos_producto': // Guardo datos para mantener consistencia $_SESSION['pedido']['cond_iva'] = $_POST['cond_iva'] ?? ''; $_SESSION['pedido']['cuit'] = ($_POST['cuit_1'] ?? '') . ($_POST['cuit_2'] ?? '') . ($_POST['cuit_3'] ?? ''); // Saneamiento de datos $idProducto = (int) ($_POST['id_producto'] ?? 0); $nuevaCantidad = $_POST['cantidad'][$idProducto] ?? null; $nuevoCosto = $_POST['costo'][$idProducto] ?? null; if ($idProducto <= 0 || $nuevoCosto <= 0 || $nuevaCantidad <= 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=crear_pedido'); exit; } if (!$cajamodel->editarDatosProductoPedido($idProducto, $nuevoCosto, $nuevaCantidad)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudieron actualizar los datos.'; } else { $_SESSION['flash_success'] = 'Datos actualizados.'; } header('Location: index.php?opt=crear_pedido'); exit; // <---------------------------------- MANEJO DE CAJA PARA SERVICIO ----------------------------------> // AGREGAR INSUMOS PARA SERVICIO EN LA CAJA case 'agregar_insumo_caja': $idServicio = (int) ($_GET['id'] ?? 0); if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header('Location: index.php?opt=actualizar_servicio'); exit; } $ids = $_POST['ids'] ?? []; $cantidades = $_POST['cantidades'] ?? []; if (empty($ids)) { $_SESSION['flash_error'] = 'No se seleccionó ningún insumo.'; header('Location: index.php?opt=agregar_insumo'); exit; } $agregados = 0; $errores = []; // Evitar duplicados $ids = array_unique($ids); foreach ($ids as $idInsumo) { $idInsumo = (int) $idInsumo; $cantidad = isset($cantidades[$idInsumo]) ? (int) $cantidades[$idInsumo] : 1; if ($idInsumo <= 0 || $cantidad <= 0) { $errores[] = 'Datos inválidos.'; continue; } $insumo = $productomodel->obtenerPorIdParaCajaServicio($idInsumo); if (!$insumo) { $errores[] = 'Producto inexistente.'; continue; } if ($cajamodel->agregarInsumo($insumo, $cantidad)) { $agregados++; } else { $errores[] = $cajamodel->getError(); } } // Condiciones para mensajes if ($agregados === 1) { $_SESSION['flash_success'] = "Se agregó un insumo correctamente."; } else if ($agregados > 1) { $_SESSION['flash_success'] = "Se agregaron {$agregados} insumos correctamente."; } if (!empty($errores)) { $_SESSION['flash_error'] = implode('
', array_unique($errores)); header('Location: index.php?opt=agregar_insumo'); exit; } header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; // VACIAR CAJA DE INSUMOS PARA SERVICIO case 'vaciar_caja_servicio': $idServicio = (int) ($_POST['id'] ?? 0); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $_SESSION['servicio']['detalle_realizado'] = $_POST['detalle_realizado'] ?? ''; $_SESSION['servicio']['mano_obra'] = (float) $_POST['mano_obra'] ?? 0; } $manoObra = $_SESSION['servicio']['mano_obra'] ?? 0; if ($manoObra < 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; } if ($cajamodel->vaciarCajaServicio()) { $_SESSION['flash_success'] = 'Carrito vaciado.'; } else { $_SESSION['flash_error'] = 'No se pudo vaciar el carrito.'; } header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; // ELIMINAR INSUMO DE SERVICIO case 'eliminar_insumo': $idServicio = (int) ($_GET['id'] ?? 0); $idInsumo = (int) ($_POST['id_producto'] ?? 0); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $_SESSION['servicio']['detalle_realizado'] = $_POST['detalle_realizado'] ?? ''; $_SESSION['servicio']['mano_obra'] = (float) $_POST['mano_obra'] ?? 0; } $manoObra = $_SESSION['servicio']['mano_obra'] ?? 0; // Validaciones if ($idInsumo <= 0 || $manoObra < 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; } if (!$cajamodel->eliminarInsumoServicio($idInsumo)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudo eliminar el producto.'; } else { $_SESSION['flash_success'] = 'Insumo eliminado correctamente.'; } header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; // EDITAR CANTIDAD DE INSUMO DE SERVICIO case 'editar_cantidad_insumo': $idServicio = (int) ($_GET['id'] ?? 0); $idInsumo = (int) ($_POST['id_producto'] ?? 0); $nuevaCantidad = $_POST['cantidad'][$idInsumo] ?? null; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $_SESSION['servicio']['detalle_realizado'] = $_POST['detalle_realizado'] ?? ''; $_SESSION['servicio']['mano_obra'] = (float) $_POST['mano_obra'] ?? 0; } $manoObra = $_SESSION['servicio']['mano_obra'] ?? 0; // Validaciones if ($idInsumo <= 0 || $nuevaCantidad <= 0 || $manoObra < 0) { $_SESSION['flash_error'] = 'Datos inválidos.'; header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; } if (!$cajamodel->editarCantidadInsumo($idInsumo, $nuevaCantidad)) { $_SESSION['flash_error'] = $cajamodel->getError() ?? 'No se pudo actualizar la cantidad.'; } else { $_SESSION['flash_success'] = 'Cantidad editada correctamente.'; } header('Location: index.php?opt=actualizar_servicio&id=' . $idServicio); exit; // DEFAULT (404) default: ob_start(); header("Location: index.php?opt=404View.php"); return ob_get_clean(); }