query("SELECT id, nombre FROM productos ORDER BY nombre ASC"); $productos = $productos_resultado->fetch_all(MYSQLI_ASSOC); // Construir consulta dinámica $condiciones = []; if ($producto_filtro !== '') { $condiciones[] = "m.producto_id = " . intval($producto_filtro); } if ($desde_filtro !== '' && $hasta_filtro !== '') { $condiciones[] = "DATE(m.fecha) BETWEEN '" . $conn->real_escape_string($desde_filtro) . "' AND '" . $conn->real_escape_string($hasta_filtro) . "'"; } if ($tipo_filtro !== '') { $condiciones[] = "m.tipo = '" . $conn->real_escape_string($tipo_filtro) . "'"; } $where = count($condiciones) > 0 ? 'WHERE ' . implode(' AND ', $condiciones) : ''; // Consulta de movimientos con nombre y unidad del producto $sql = " SELECT m.*, p.nombre, p.unidad_medida FROM movimientos m JOIN productos p ON m.producto_id = p.id $where ORDER BY m.fecha ASC "; $movimientos = $conn->query($sql); ?> Informe de Movimientos

Informe de Movimientos

num_rows > 0) || $producto_filtro !== ''): ?>
num_rows > 0) || $producto_filtro !== ''): ?> query("SELECT nombre, unidad_medida, stock_inicial FROM productos WHERE id = " . intval($producto_filtro)); if ($producto_info && $producto_info->num_rows > 0) { $info = $producto_info->fetch_assoc(); echo ''; } } // Mostrar los movimientos if ($movimientos && $movimientos->num_rows > 0): while ($row = $movimientos->fetch_assoc()): ?>
Fecha Producto Tipo Cantidad Unidad Precio Unitario (L) Total (L)
- ' . htmlspecialchars($info['nombre']) . ' Stock Inicial ' . number_format($info['stock_inicial'], 2) . ' ' . htmlspecialchars($info['unidad_medida']) . ' - -

No hay movimientos que coincidan con los filtros seleccionados.

Volver al Inicio