diff --git a/agencias.txt b/agencias.txt index 26cb4d2..aa290e6 100644 --- a/agencias.txt +++ b/agencias.txt @@ -241,4 +241,14 @@ ADD [estado_archivo] [varchar](20) NULL DEFAULT 'ACTIVO', -- ACTIVO, INACTIVO, E -- Agregar foreign key para el usuario que subió el archivo ALTER TABLE [dbo].[expediente_archivos] ADD CONSTRAINT [FK_expediente_archivos_usuario] -FOREIGN KEY ([subido_por]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]); \ No newline at end of file +FOREIGN KEY ([subido_por]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]); + + +-- 1. Modificar la tabla de patentes para incluir la relación con agencia +ALTER TABLE [dbo].[agentes_aduanales] +ADD [id_agencia] [int] NULL; + +-- Agregar foreign key para la agencia +ALTER TABLE [dbo].[agentes_aduanales] +ADD CONSTRAINT [FK_agente_agencia] +FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia]); \ No newline at end of file diff --git a/app/controllers/locaciones.php b/app/controllers/locaciones.php index dcf8a8c..bb228b5 100644 --- a/app/controllers/locaciones.php +++ b/app/controllers/locaciones.php @@ -62,7 +62,8 @@ function alta() } // AJAX: devuelve los estados de un país dado -function estados() { +function estados() +{ header('Content-Type: application/json; charset=utf-8'); $pais = $_GET['pais'] ?? ''; $conn = getConnection(); @@ -77,7 +78,8 @@ function estados() { } // Guardar nuevo estado -function guardarEstado() { +function guardarEstado() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -153,7 +155,8 @@ function guardarEstado() { } // Guardar nueva ciudad -function guardarCiudad() { +function guardarCiudad() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -195,7 +198,8 @@ function guardarCiudad() { } // Función para obtener país por estado (necesaria para el modal de edición de ciudades) -function obtenerPaisPorEstado() { +function obtenerPaisPorEstado() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -223,7 +227,8 @@ function obtenerPaisPorEstado() { } // FUNCIÓN DISPATCHER PARA EDICIÓN -function editar() { +function editar() +{ $tipo = $_POST['tipo'] ?? ''; // Log para debugging @@ -248,7 +253,8 @@ function editar() { } // FUNCIÓN ESPECÍFICA PARA ACTUALIZAR PAÍSES -function actualizarPais() { +function actualizarPais() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -306,7 +312,8 @@ function actualizarPais() { } // FUNCIÓN ESPECÍFICA PARA ACTUALIZAR ESTADOS -function actualizarEstado() { +function actualizarEstado() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -363,7 +370,8 @@ function actualizarEstado() { } // FUNCIÓN ESPECÍFICA PARA ACTUALIZAR CIUDADES -function actualizarCiudad() { +function actualizarCiudad() +{ header('Content-Type: application/json; charset=utf-8'); try { @@ -417,7 +425,8 @@ function actualizarCiudad() { } // Función para eliminar locaciones (países, estados, ciudades) -function eliminar() { +function eliminar() +{ header('Content-Type: application/json; charset=utf-8'); try { diff --git a/app/controllers/patente.php b/app/controllers/patente.php index 9055ec5..019eb80 100644 --- a/app/controllers/patente.php +++ b/app/controllers/patente.php @@ -18,23 +18,35 @@ function lista() header('Location: /IMPORTADORES/login'); exit; } - $usr = $_SESSION['usuario_id']; + $id_agente = $_SESSION['usuario_id']; $conn = getConnection(); + // ✅ NUEVO: Obtener la agencia actual del usuario + $stmt = sqlsrv_query($conn, "SELECT id_agencia FROM dbo.agente_agencia WHERE id_agente = ?", [$id_agente]); + $id_agencia = null; + if ($stmt && $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { + $id_agencia = $row['id_agencia']; + } + $sql = " - SELECT - aa.* - FROM dbo.agentes_aduanales aa - JOIN dbo.usuarios_sistema u - ON aa.id_usuario = u.id_usuario - WHERE u.id_usuario = ? - AND aa.activo = 1 - ORDER BY aa.creado_en DESC + SELECT DISTINCT + aa.*, aga.id_agencia + FROM dbo.agentes_aduanales aa + INNER JOIN dbo.usuarios_sistema u + ON aa.id_usuario = u.id_usuario + INNER JOIN dbo.agente_agencia aga -- Cambié el alias para mayor claridad + ON aga.id_agencia = aa.id_agencia + WHERE u.id_usuario = ? + AND aga.id_agencia = ? + AND aa.activo = 1 + ORDER BY aa.creado_en DESC "; - $stmt = sqlsrv_query($conn, $sql, [$usr]); + + $stmt = sqlsrv_query($conn, $sql, [$id_agente, $id_agencia]); if ($stmt === false) { die("Error en lista(): " . print_r(sqlsrv_errors(), true)); } + $agentes_aduanales = []; while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $agentes_aduanales[] = $r; @@ -45,6 +57,21 @@ function lista() function alta() { + if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'agente_aduanal') { + header('Location: /IMPORTADORES/login'); + exit; + } + + $id_agente = $_SESSION['usuario_id']; + $conn = getConnection(); + + // ✅ NUEVO: Obtener la agencia actual del usuario + $stmt = sqlsrv_query($conn, "SELECT id_agencia FROM dbo.agente_agencia WHERE id_agente = ?", [$id_agente]); + $id_agencia = null; + if ($stmt && $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { + $id_agencia = $row['id_agencia']; + } + include __DIR__ . '/../../views/patente/alta_patente.php'; } @@ -54,41 +81,49 @@ function guardar() die("⚠️ No autorizado."); } + $id_agente = $_SESSION['usuario_id']; $conn = getConnection(); + // ✅ NUEVO: Obtener la agencia actual del usuario + $stmt = sqlsrv_query($conn, "SELECT id_agencia FROM dbo.agente_agencia WHERE id_agente = ?", [$id_agente]); + $id_agencia = null; + if ($stmt && $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { + $id_agencia = $row['id_agencia']; + } + // Capturar campos del formulario - Datos generales - $aduana = trim($_POST['aduana'] ?? ''); - $patente = trim($_POST['patente'] ?? ''); + $aduana = trim($_POST['aduana'] ?? ''); + $patente = trim($_POST['patente'] ?? ''); $agente_aduanal = trim($_POST['agente_aduanal'] ?? ''); - $rfc = trim($_POST['rfc'] ?? ''); - $curp = trim($_POST['curp'] ?? ''); - $razon_social = trim($_POST['razon_social'] ?? ''); + $rfc = trim($_POST['rfc'] ?? ''); + $curp = trim($_POST['curp'] ?? ''); + $razon_social = trim($_POST['razon_social'] ?? ''); $id_usuario = $_SESSION['usuario_id']; - $mf_nombre = trim($_POST['mf_nombre'] ?? ''); - $mf_paterno = trim($_POST['mf_paterno'] ?? ''); - $mf_materno = trim($_POST['mf_materno'] ?? ''); + $mf_nombre = trim($_POST['mf_nombre'] ?? ''); + $mf_paterno = trim($_POST['mf_paterno'] ?? ''); + $mf_materno = trim($_POST['mf_materno'] ?? ''); // Ahora manejamos como VARCHAR - permitir vacío o valor válido - $vp_inicio = trim($_POST['vp_inicio'] ?? ''); - $vp_final = trim($_POST['vp_final'] ?? ''); - $vp_siguiente = trim($_POST['vp_siguiente'] ?? ''); + $vp_inicio = trim($_POST['vp_inicio'] ?? ''); + $vp_final = trim($_POST['vp_final'] ?? ''); + $vp_siguiente = trim($_POST['vp_siguiente'] ?? ''); - $vpe_inicio = trim($_POST['vpe_inicio'] ?? ''); - $vpe_final = trim($_POST['vpe_final'] ?? ''); - $vpe_siguiente = trim($_POST['vpe_siguiente'] ?? ''); + $vpe_inicio = trim($_POST['vpe_inicio'] ?? ''); + $vpe_final = trim($_POST['vpe_final'] ?? ''); + $vpe_siguiente = trim($_POST['vpe_siguiente'] ?? ''); - $vat_pb_inicio = trim($_POST['vat_pb_inicio'] ?? ''); - $vat_pb_final = trim($_POST['vat_pb_final'] ?? ''); + $vat_pb_inicio = trim($_POST['vat_pb_inicio'] ?? ''); + $vat_pb_final = trim($_POST['vat_pb_final'] ?? ''); $vat_pb_siguiente = trim($_POST['vat_pb_siguiente'] ?? ''); - $vcc_inicio = trim($_POST['vcc_inicio'] ?? ''); - $vcc_final = trim($_POST['vcc_final'] ?? ''); - $vcc_siguiente = trim($_POST['vcc_siguiente'] ?? ''); + $vcc_inicio = trim($_POST['vcc_inicio'] ?? ''); + $vcc_final = trim($_POST['vcc_final'] ?? ''); + $vcc_siguiente = trim($_POST['vcc_siguiente'] ?? ''); - $vae_inicio = trim($_POST['vae_inicio'] ?? ''); - $vae_final = trim($_POST['vae_final'] ?? ''); - $vae_siguiente = trim($_POST['vae_siguiente'] ?? ''); + $vae_inicio = trim($_POST['vae_inicio'] ?? ''); + $vae_final = trim($_POST['vae_final'] ?? ''); + $vae_siguiente = trim($_POST['vae_siguiente'] ?? ''); // Validaciones generales if (empty($aduana) || empty($patente) || empty($agente_aduanal) || empty($rfc) || empty($curp) || empty($razon_social)) { @@ -138,35 +173,35 @@ function guardar() sqlsrv_free_stmt($stmtCheck); // Convertir valores vacíos a NULL para la base de datos - $vp_inicio = empty($vp_inicio) ? null : $vp_inicio; - $vp_final = empty($vp_final) ? null : $vp_final; - $vp_siguiente = empty($vp_siguiente) ? null : $vp_siguiente; - $vpe_inicio = empty($vpe_inicio) ? null : $vpe_inicio; - $vpe_final = empty($vpe_final) ? null : $vpe_final; - $vpe_siguiente = empty($vpe_siguiente) ? null : $vpe_siguiente; - $vat_pb_inicio = empty($vat_pb_inicio) ? null : $vat_pb_inicio; - $vat_pb_final = empty($vat_pb_final) ? null : $vat_pb_final; + $vp_inicio = empty($vp_inicio) ? null : $vp_inicio; + $vp_final = empty($vp_final) ? null : $vp_final; + $vp_siguiente = empty($vp_siguiente) ? null : $vp_siguiente; + $vpe_inicio = empty($vpe_inicio ) ? null : $vpe_inicio; + $vpe_final = empty($vpe_final) ? null : $vpe_final; + $vpe_siguiente = empty($vpe_siguiente) ? null : $vpe_siguiente; + $vat_pb_inicio = empty($vat_pb_inicio) ? null : $vat_pb_inicio; + $vat_pb_final = empty($vat_pb_final) ? null : $vat_pb_final; $vat_pb_siguiente = empty($vat_pb_siguiente) ? null : $vat_pb_siguiente; - $vcc_inicio = empty($vcc_inicio) ? null : $vcc_inicio; - $vcc_final = empty($vcc_final) ? null : $vcc_final; - $vcc_siguiente = empty($vcc_siguiente) ? null : $vcc_siguiente; - $vae_inicio = empty($vae_inicio) ? null : $vae_inicio; - $vae_final = empty($vae_final) ? null : $vae_final; - $vae_siguiente = empty($vae_siguiente) ? null : $vae_siguiente; + $vcc_inicio = empty($vcc_inicio) ? null : $vcc_inicio; + $vcc_final = empty($vcc_final) ? null : $vcc_final; + $vcc_siguiente = empty($vcc_siguiente) ? null : $vcc_siguiente; + $vae_inicio = empty($vae_inicio) ? null : $vae_inicio; + $vae_final = empty($vae_final) ? null : $vae_final; + $vae_siguiente = empty($vae_siguiente) ? null : $vae_siguiente; // Insertar registro $sql = "INSERT INTO dbo.agentes_aduanales - (aduana, patente, agente_aduanal, rfc, curp, razon_social, id_usuario, activo, + (id_agencia, aduana, patente, agente_aduanal, rfc, curp, razon_social, id_usuario, activo, mf_nombre, mf_paterno, mf_materno, vp_inicio, vp_final, vp_siguiente, vpe_inicio, vpe_final, vpe_siguiente, vat_pb_inicio, vat_pb_final, vat_pb_siguiente, vcc_inicio, vcc_final, vcc_siguiente, vae_inicio, vae_final, vae_siguiente) - VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $params = [ - $aduana, $patente, $agente_aduanal, $rfc, $curp, $razon_social, $id_usuario, + $id_agencia, $aduana, $patente, $agente_aduanal, $rfc, $curp, $razon_social, $id_usuario, $mf_nombre, $mf_paterno, $mf_materno, $vp_inicio, $vp_final, $vp_siguiente, $vpe_inicio, $vpe_final, $vpe_siguiente, @@ -232,52 +267,59 @@ function actualizar() $conn = getConnection(); // Capturar campos del formulario - Datos generales - $id_agente = (int)($_POST['id_agente'] ?? 0); - $aduana = trim($_POST['aduana'] ?? ''); - $patente = trim($_POST['patente'] ?? ''); + $id_agente = (int)($_POST['id_agente'] ?? 0); + $aduana = trim($_POST['aduana'] ?? ''); + $patente = trim($_POST['patente'] ?? ''); $agente_aduanal = trim($_POST['agente_aduanal'] ?? ''); - $rfc = trim($_POST['rfc'] ?? ''); - $curp = trim($_POST['curp'] ?? ''); - $razon_social = trim($_POST['razon_social'] ?? ''); + $rfc = trim($_POST['rfc'] ?? ''); + $curp = trim($_POST['curp'] ?? ''); + $razon_social = trim($_POST['razon_social'] ?? ''); $id_usuario = $_SESSION['usuario_id']; - $mf_nombre = trim($_POST['mf_nombre'] ?? ''); - $mf_paterno = trim($_POST['mf_paterno'] ?? ''); - $mf_materno = trim($_POST['mf_materno'] ?? ''); + // ✅ NUEVO: Obtener la agencia actual del usuario + $stmt = sqlsrv_query($conn, "SELECT id_agencia FROM dbo.agente_agencia WHERE id_agente = ?", [$id_usuario]); + $id_agencia = null; + if ($stmt && $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { + $id_agencia = $row['id_agencia']; + } + + $mf_nombre = trim($_POST['mf_nombre'] ?? ''); + $mf_paterno = trim($_POST['mf_paterno'] ?? ''); + $mf_materno = trim($_POST['mf_materno'] ?? ''); // Ahora manejamos como VARCHAR - permitir vacío o valor válido - $vp_inicio = trim($_POST['vp_inicio'] ?? ''); - $vp_final = trim($_POST['vp_final'] ?? ''); - $vp_siguiente = trim($_POST['vp_siguiente'] ?? ''); + $vp_inicio = trim($_POST['vp_inicio'] ?? ''); + $vp_final = trim($_POST['vp_final'] ?? ''); + $vp_siguiente = trim($_POST['vp_siguiente'] ?? ''); - $vpe_inicio = trim($_POST['vpe_inicio'] ?? ''); - $vpe_final = trim($_POST['vpe_final'] ?? ''); - $vpe_siguiente = trim($_POST['vpe_siguiente'] ?? ''); + $vpe_inicio = trim($_POST['vpe_inicio'] ?? ''); + $vpe_final = trim($_POST['vpe_final'] ?? ''); + $vpe_siguiente = trim($_POST['vpe_siguiente'] ?? ''); - $vat_pb_inicio = trim($_POST['vat_pb_inicio'] ?? ''); - $vat_pb_final = trim($_POST['vat_pb_final'] ?? ''); + $vat_pb_inicio = trim($_POST['vat_pb_inicio'] ?? ''); + $vat_pb_final = trim($_POST['vat_pb_final'] ?? ''); $vat_pb_siguiente = trim($_POST['vat_pb_siguiente'] ?? ''); - $vcc_inicio = trim($_POST['vcc_inicio'] ?? ''); - $vcc_final = trim($_POST['vcc_final'] ?? ''); - $vcc_siguiente = trim($_POST['vcc_siguiente'] ?? ''); + $vcc_inicio = trim($_POST['vcc_inicio'] ?? ''); + $vcc_final = trim($_POST['vcc_final'] ?? ''); + $vcc_siguiente = trim($_POST['vcc_siguiente'] ?? ''); - $vae_inicio = trim($_POST['vae_inicio'] ?? ''); - $vae_final = trim($_POST['vae_final'] ?? ''); - $vae_siguiente = trim($_POST['vae_siguiente'] ?? ''); + $vae_inicio = trim($_POST['vae_inicio'] ?? ''); + $vae_final = trim($_POST['vae_final'] ?? ''); + $vae_siguiente = trim($_POST['vae_siguiente'] ?? ''); if (!$id_agente || empty($aduana) || empty($patente) || empty($agente_aduanal) || empty($rfc) || empty($curp) || empty($razon_social)) { die("❌ Datos inválidos o incompletos."); } - if (!is_numeric($aduana) || strlen($aduana) > 3) die("❌ La aduana debe ser numérica y máximo 3 dígitos."); + if (!is_numeric($aduana) || strlen($aduana) > 3) die("❌ La aduana debe ser numérica y máximo 3 dígitos."); if (!is_numeric($patente) || strlen($patente) > 4) die("❌ La patente debe ser numérica y máximo 4 dígitos."); - if (strlen($rfc) > 13) die("❌ El RFC no puede exceder 13 caracteres."); + if (strlen($rfc) > 13) die("❌ El RFC no puede exceder 13 caracteres."); if (strlen($curp) > 18) die("❌ El CURP no puede exceder 18 caracteres."); // Validar duplicado (excepto el propio id) - $sqlCheck = "SELECT COUNT(*) as count FROM dbo.agentes_aduanales - WHERE aduana = ? AND patente = ? AND id_usuario = ? AND id_agente != ?"; + $sqlCheck = "SELECT COUNT(*) as count FROM dbo.agentes_aduanales + WHERE aduana = ? AND patente = ? AND id_usuario = ? AND id_agente != ?"; $stmtCheck = sqlsrv_query($conn, $sqlCheck, [$aduana, $patente, $id_usuario, $id_agente]); if ($stmtCheck === false) die("❌ Error al verificar duplicados."); @@ -288,21 +330,21 @@ function actualizar() sqlsrv_free_stmt($stmtCheck); // Convertir valores vacíos a NULL para la base de datos - $vp_inicio = empty($vp_inicio) ? null : $vp_inicio; - $vp_final = empty($vp_final) ? null : $vp_final; - $vp_siguiente = empty($vp_siguiente) ? null : $vp_siguiente; - $vpe_inicio = empty($vpe_inicio) ? null : $vpe_inicio; - $vpe_final = empty($vpe_final) ? null : $vpe_final; - $vpe_siguiente = empty($vpe_siguiente) ? null : $vpe_siguiente; - $vat_pb_inicio = empty($vat_pb_inicio) ? null : $vat_pb_inicio; - $vat_pb_final = empty($vat_pb_final) ? null : $vat_pb_final; + $vp_inicio = empty($vp_inicio) ? null : $vp_inicio; + $vp_final = empty($vp_final) ? null : $vp_final; + $vp_siguiente = empty($vp_siguiente) ? null : $vp_siguiente; + $vpe_inicio = empty($vpe_inicio) ? null : $vpe_inicio; + $vpe_final = empty($vpe_final) ? null : $vpe_final; + $vpe_siguiente = empty($vpe_siguiente) ? null : $vpe_siguiente; + $vat_pb_inicio = empty($vat_pb_inicio) ? null : $vat_pb_inicio; + $vat_pb_final = empty($vat_pb_final) ? null : $vat_pb_final; $vat_pb_siguiente = empty($vat_pb_siguiente) ? null : $vat_pb_siguiente; - $vcc_inicio = empty($vcc_inicio) ? null : $vcc_inicio; - $vcc_final = empty($vcc_final) ? null : $vcc_final; - $vcc_siguiente = empty($vcc_siguiente) ? null : $vcc_siguiente; - $vae_inicio = empty($vae_inicio) ? null : $vae_inicio; - $vae_final = empty($vae_final) ? null : $vae_final; - $vae_siguiente = empty($vae_siguiente) ? null : $vae_siguiente; + $vcc_inicio = empty($vcc_inicio) ? null : $vcc_inicio; + $vcc_final = empty($vcc_final) ? null : $vcc_final; + $vcc_siguiente = empty($vcc_siguiente) ? null : $vcc_siguiente; + $vae_inicio = empty($vae_inicio) ? null : $vae_inicio; + $vae_final = empty($vae_final) ? null : $vae_final; + $vae_siguiente = empty($vae_siguiente) ? null : $vae_siguiente; // UPDATE $sql = "UPDATE dbo.agentes_aduanales SET @@ -312,7 +354,7 @@ function actualizar() vpe_inicio = ?, vpe_final = ?, vpe_siguiente = ?, vat_pb_inicio = ?, vat_pb_final = ?, vat_pb_siguiente = ?, vcc_inicio = ?, vcc_final = ?, vcc_siguiente = ?, - vae_inicio = ?, vae_final = ?, vae_siguiente = ? + vae_inicio = ?, vae_final = ?, vae_siguiente = ?, id_agencia = ? WHERE id_agente = ? AND id_usuario = ?"; $params = [ @@ -322,7 +364,7 @@ function actualizar() $vpe_inicio, $vpe_final, $vpe_siguiente, $vat_pb_inicio, $vat_pb_final, $vat_pb_siguiente, $vcc_inicio, $vcc_final, $vcc_siguiente, - $vae_inicio, $vae_final, $vae_siguiente, + $vae_inicio, $vae_final, $vae_siguiente, $id_agencia, $id_agente, $id_usuario ]; @@ -345,7 +387,7 @@ function eliminar() } $usr = $_SESSION['usuario_id']; - $id = $_GET['id'] ?? null; + $id = $_GET['id'] ?? null; if (!$id || !is_numeric($id)) { die("❌ ID inválido."); } @@ -362,7 +404,7 @@ function eliminar() die("❌ Agente no encontrado o no autorizado."); } - $sql = "UPDATE dbo.agentes_aduanales SET activo = 0 WHERE id_agente = ?"; + $sql = "UPDATE dbo.agentes_aduanales SET activo = 0 WHERE id_agente = ?"; $stmt = sqlsrv_query($conn, $sql, [(int)$id]); if ($stmt === false) { die("❌ Error en eliminar(): " . print_r(sqlsrv_errors(), true)); diff --git a/app/controllers/solicitud_importacion.php b/app/controllers/solicitud_importacion.php index 7c94f24..58ef706 100644 --- a/app/controllers/solicitud_importacion.php +++ b/app/controllers/solicitud_importacion.php @@ -63,7 +63,8 @@ function getApiToken(): ?string } /** Listado de solicitudes de importación (facturas) del importador logueado **/ -function lista() { +function lista() +{ if (!($_SESSION['usuario_id'] ?? false)) { header('Location: /IMPORTADORES/login'); exit; @@ -93,7 +94,7 @@ function lista() { LEFT JOIN dbo.paises p ON f.pais_proveedor = p.id_pais WHERE f.id_importador = ? - AND f.id_agencia = ? + AND f.id_agencia = ? AND f.status >= 1 ORDER BY f.created_at DESC ";