Sintaxis
This commit is contained in:
@@ -4,55 +4,62 @@ require_once __DIR__ . '/../../config/database.php';
|
||||
require_once __DIR__ . '/../helpers/env.php';
|
||||
|
||||
/** Listado de transportes (sólo activos) para el importador logueado **/
|
||||
function lista() {
|
||||
function lista()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$usr = $_SESSION['usuario_id'];
|
||||
|
||||
$conn = getConnection();
|
||||
|
||||
// Sólo mostrar transportes de los transportistas que le pertenecen al usuario
|
||||
$sql = "
|
||||
SELECT t.*, (tr.clave_identificador + ' - ' + tr.nombre) AS transportista
|
||||
FROM dbo.transportes t
|
||||
JOIN dbo.transportistas tr
|
||||
ON t.id_transportista = tr.id_transportista
|
||||
WHERE tr.id_usuario = ? AND t.status = 1
|
||||
ORDER BY t.creado_en DESC
|
||||
";
|
||||
$sql = "SELECT
|
||||
t.*, (tr.clave_identificador + ' - ' + tr.nombre) AS transportista
|
||||
FROM dbo.transportes t
|
||||
JOIN dbo.transportistas tr
|
||||
ON t.id_transportista = tr.id_transportista
|
||||
WHERE tr.id_usuario = ?
|
||||
AND t.status = 1
|
||||
ORDER BY t.creado_en DESC
|
||||
";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$usr]);
|
||||
|
||||
$transportes = [];
|
||||
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
||||
$transportes[] = $r;
|
||||
}
|
||||
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $transportes[] = $r; }
|
||||
|
||||
include __DIR__ . '/../../views/transportes/lista.php';
|
||||
}
|
||||
|
||||
/** Formulario de alta de transporte **/
|
||||
function crear() {
|
||||
function crear()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$usr = $_SESSION['usuario_id'];
|
||||
|
||||
$conn = getConnection();
|
||||
|
||||
// Traer transportistas propios para el select
|
||||
$sql = "
|
||||
SELECT t.id_transportista, t.clave_identificador, t.nombre, t.ciudad, t.domicilio,
|
||||
c.nombre AS ciudad_nombre
|
||||
FROM dbo.transportistas t
|
||||
LEFT JOIN dbo.ciudades c ON t.ciudad = c.id_ciudad
|
||||
WHERE id_usuario = ? AND activo = 1
|
||||
ORDER BY nombre
|
||||
";
|
||||
$sql = "SELECT
|
||||
t.id_transportista, t.clave_identificador, t.nombre, t.ciudad, t.domicilio,
|
||||
c.nombre AS ciudad_nombre
|
||||
FROM dbo.transportistas t
|
||||
LEFT JOIN dbo.ciudades c
|
||||
ON t.ciudad = c.id_ciudad
|
||||
WHERE id_usuario = ?
|
||||
AND activo = 1
|
||||
ORDER BY nombre
|
||||
";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$usr]);
|
||||
|
||||
$transportistas = [];
|
||||
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
||||
$transportistas[] = $r;
|
||||
}
|
||||
while ($r = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { $transportistas[] = $r; }
|
||||
|
||||
include __DIR__ . '/../../views/transportes/crear.php';
|
||||
}
|
||||
@@ -64,9 +71,9 @@ function guardar()
|
||||
die("⚠️ No autorizado.");
|
||||
}
|
||||
|
||||
$vehiculo = trim($_POST['vehiculo'] ?? '');
|
||||
$vehiculo = trim($_POST['vehiculo'] ?? '');
|
||||
$identFiscal = trim($_POST['identificador_fiscal'] ?? '');
|
||||
$idTrans = $_POST['id_transportista'] ?? null;
|
||||
$idTrans = $_POST['id_transportista'] ?? null;
|
||||
|
||||
if ($vehiculo === '' || $identFiscal === '' || !$idTrans) {
|
||||
die("❌ Todos los campos son obligatorios.");
|
||||
@@ -74,11 +81,10 @@ function guardar()
|
||||
|
||||
// Validar que el transportista pertenece al usuario actual
|
||||
$conn = getConnection();
|
||||
$sqlCheck = "
|
||||
SELECT 1 FROM dbo.transportistas
|
||||
WHERE id_transportista = ? AND id_usuario = ? AND activo = 1
|
||||
";
|
||||
|
||||
$sqlCheck = "SELECT 1 FROM dbo.transportistas WHERE id_transportista = ? AND id_usuario = ? AND activo = 1";
|
||||
$stmtCheck = sqlsrv_query($conn, $sqlCheck, [$idTrans, $_SESSION['usuario_id']]);
|
||||
|
||||
if (!sqlsrv_fetch($stmtCheck)) {
|
||||
die("❌ Transportista no válido o no autorizado.");
|
||||
}
|
||||
@@ -87,7 +93,7 @@ function guardar()
|
||||
$fotoUrl = null;
|
||||
if (isset($_FILES['foto']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) {
|
||||
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
|
||||
$ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
|
||||
$ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
|
||||
|
||||
if (!in_array($ext, $allowedExtensions)) {
|
||||
die("❌ Formato de imagen no válido. Solo se permiten: " . implode(', ', $allowedExtensions));
|
||||
@@ -114,13 +120,9 @@ function guardar()
|
||||
}
|
||||
|
||||
// Insertar el nuevo transporte
|
||||
$sql = "
|
||||
INSERT INTO dbo.transportes
|
||||
(vehiculo, identificador_fiscal, foto_url, status, id_transportista)
|
||||
VALUES (?, ?, ?, 1, ?)
|
||||
";
|
||||
$sql = "INSERT INTO dbo.transportes (vehiculo, identificador_fiscal, foto_url, status, id_transportista) VALUES (?, ?, ?, 1, ?)";
|
||||
$params = [$vehiculo, $identFiscal, $fotoUrl, $idTrans];
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
|
||||
if ($stmt === false) {
|
||||
$errors = sqlsrv_errors();
|
||||
@@ -139,56 +141,66 @@ function guardar()
|
||||
}
|
||||
|
||||
/** Formulario de edición **/
|
||||
function editar() {
|
||||
|
||||
function editar()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = $_GET['id'] ?? null;
|
||||
|
||||
if (!$id || !is_numeric($id)) {
|
||||
die("❌ ID inválido.");
|
||||
}
|
||||
|
||||
$conn = getConnection();
|
||||
|
||||
// Validar pertenencia igual que en index()
|
||||
$sql = "
|
||||
SELECT t.*, tr.nombre AS transportista
|
||||
FROM dbo.transportes t
|
||||
JOIN dbo.transportistas tr
|
||||
ON t.id_transportista = tr.id_transportista
|
||||
WHERE t.id_transporte = ?
|
||||
AND tr.id_usuario = ?
|
||||
AND t.status = 1
|
||||
";
|
||||
$sql = "SELECT
|
||||
t.*, tr.nombre AS transportista
|
||||
FROM dbo.transportes t
|
||||
JOIN dbo.transportistas tr
|
||||
ON t.id_transportista = tr.id_transportista
|
||||
WHERE t.id_transporte = ?
|
||||
AND tr.id_usuario = ?
|
||||
AND t.status = 1
|
||||
";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$id, $_SESSION['usuario_id']]);
|
||||
|
||||
$t = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
if (!$t) die("❌ Transporte no encontrado o no autorizado.");
|
||||
|
||||
// Mismo select de transportistas que en crear()
|
||||
$sql2 = "
|
||||
SELECT t.id_transportista, t.clave_identificador, t.nombre, t.ciudad, t.domicilio,
|
||||
c.nombre AS ciudad_nombre
|
||||
FROM dbo.transportistas t
|
||||
LEFT JOIN dbo.ciudades c ON t.ciudad = c.id_ciudad
|
||||
WHERE id_usuario = ? AND activo = 1
|
||||
ORDER BY nombre
|
||||
";
|
||||
$sql2 = "SELECT
|
||||
t.id_transportista, t.clave_identificador, t.nombre, t.ciudad, t.domicilio,
|
||||
c.nombre AS ciudad_nombre
|
||||
FROM dbo.transportistas t
|
||||
LEFT JOIN dbo.ciudades c
|
||||
ON t.ciudad = c.id_ciudad
|
||||
WHERE id_usuario = ?
|
||||
AND activo = 1
|
||||
ORDER BY nombre
|
||||
";
|
||||
$stmt2 = sqlsrv_query($conn, $sql2, [$_SESSION['usuario_id']]);
|
||||
|
||||
$transportistas = [];
|
||||
while ($r=sqlsrv_fetch_array($stmt2,SQLSRV_FETCH_ASSOC)) $transportistas[]=$r;
|
||||
while ($r = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC)) { $transportistas[] = $r; }
|
||||
|
||||
include __DIR__ . '/../../views/transportes/editar.php';
|
||||
}
|
||||
|
||||
/** Procesa la actualización **/
|
||||
function actualizar() {
|
||||
function actualizar()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
die("⚠️ No autorizado.");
|
||||
}
|
||||
$id = $_POST['id_transporte'] ?? null;
|
||||
$vehiculo = trim($_POST['vehiculo'] ?? '');
|
||||
|
||||
$id = $_POST['id_transporte'] ?? null;
|
||||
$vehiculo = trim($_POST['vehiculo'] ?? '');
|
||||
$identFiscal = trim($_POST['identificador_fiscal'] ?? '');
|
||||
$idTrans = $_POST['id_transportista'] ?? null;
|
||||
$idTrans = $_POST['id_transportista'] ?? null;
|
||||
|
||||
if (!$id || !is_numeric($id) || $vehiculo === '' || $identFiscal === '' || !$idTrans) {
|
||||
die("❌ Faltan datos.");
|
||||
@@ -197,17 +209,15 @@ function actualizar() {
|
||||
$conn = getConnection();
|
||||
|
||||
// Antes del UPDATE, validar que el transporte pertenece al usuario
|
||||
$sqlCheck = "
|
||||
SELECT 1 FROM dbo.transportes t
|
||||
JOIN dbo.transportistas tr ON t.id_transportista = tr.id_transportista
|
||||
wHERE t.id_transporte = ? AND tr.id_usuario = ?
|
||||
";
|
||||
$sqlCheck = "SELECT 1 FROM dbo.transportes t JOIN dbo.transportistas tr ON t.id_transportista = tr.id_transportista wHERE t.id_transporte = ? AND tr.id_usuario = ?";
|
||||
$stmtCheck = sqlsrv_query($conn, $sqlCheck, [$id, $_SESSION['usuario_id']]);
|
||||
|
||||
if ($stmtCheck === false) {
|
||||
$errors = sqlsrv_errors();
|
||||
error_log("Error SQL al validar transporte: " . print_r($errors, true));
|
||||
die("❌ Error en la validación SQL.");
|
||||
}
|
||||
|
||||
if (!sqlsrv_fetch($stmtCheck)) {
|
||||
die("❌ No autorizado para modificar este transporte.");
|
||||
}
|
||||
@@ -216,7 +226,7 @@ function actualizar() {
|
||||
$fotoUrl = null;
|
||||
if (isset($_FILES['foto']) && $_FILES['foto']['error'] === UPLOAD_ERR_OK) {
|
||||
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
|
||||
$ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
|
||||
$ext = strtolower(pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION));
|
||||
|
||||
if (!in_array($ext, $allowedExtensions)) {
|
||||
die("❌ Formato de imagen no válido.");
|
||||
@@ -237,27 +247,25 @@ function actualizar() {
|
||||
|
||||
// —– Construye el UPDATE dinámico —–
|
||||
if ($fotoUrl) {
|
||||
$sql = "
|
||||
UPDATE dbo.transportes SET
|
||||
vehiculo = ?,
|
||||
identificador_fiscal = ?,
|
||||
id_transportista = ?,
|
||||
foto_url = ?
|
||||
WHERE id_transporte = ?
|
||||
";
|
||||
$sql = "UPDATE dbo.transportes SET
|
||||
vehiculo = ?,
|
||||
identificador_fiscal = ?,
|
||||
id_transportista = ?,
|
||||
foto_url = ?
|
||||
WHERE id_transporte = ?
|
||||
";
|
||||
$params = [$vehiculo, $identFiscal, $idTrans, $fotoUrl, $id];
|
||||
} else {
|
||||
$sql = "
|
||||
UPDATE dbo.transportes SET
|
||||
vehiculo = ?,
|
||||
identificador_fiscal = ?,
|
||||
id_transportista = ?
|
||||
WHERE id_transporte = ?
|
||||
";
|
||||
$sql = "UPDATE dbo.transportes SET
|
||||
vehiculo = ?,
|
||||
identificador_fiscal = ?,
|
||||
id_transportista = ?
|
||||
WHERE id_transporte = ?
|
||||
";
|
||||
$params = [$vehiculo, $identFiscal, $idTrans, $id];
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, $sql, $params);
|
||||
|
||||
if ($stmt === false) {
|
||||
$errors = sqlsrv_errors();
|
||||
error_log("Error SQL en actualizar transporte: " . print_r($errors, true));
|
||||
@@ -275,28 +283,35 @@ function actualizar() {
|
||||
}
|
||||
|
||||
/** “Soft-delete” (status = 0) **/
|
||||
function eliminar() {
|
||||
|
||||
function eliminar()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = $_GET['id'] ?? null;
|
||||
|
||||
if (!$id||!is_numeric($id)) {
|
||||
die("❌ ID inválido.");
|
||||
}
|
||||
|
||||
$conn = getConnection();
|
||||
$sql = "UPDATE dbo.transportes SET status = 0 WHERE id_transporte = ?";
|
||||
|
||||
$sql = "UPDATE dbo.transportes SET status = 0 WHERE id_transporte = ?";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$id]);
|
||||
|
||||
if ($stmt === false) {
|
||||
die("❌ Error al eliminar: ".print_r(sqlsrv_errors(),true));
|
||||
}
|
||||
|
||||
header('Location: /IMPORTADORES/transportes/lista?deleted=ok');
|
||||
exit;
|
||||
}
|
||||
|
||||
/** Formulario de importación masiva **/
|
||||
function masivo() {
|
||||
function masivo()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
@@ -306,7 +321,8 @@ function masivo() {
|
||||
}
|
||||
|
||||
/** Procesa la importación masiva desde CSV **/
|
||||
function importarGuardar() {
|
||||
function importarGuardar()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
die("⚠️ No autorizado.");
|
||||
}
|
||||
@@ -320,12 +336,13 @@ function importarGuardar() {
|
||||
header('Location: /IMPORTADORES/transportes/importar');
|
||||
exit;
|
||||
}
|
||||
|
||||
$conn = getConnection();
|
||||
|
||||
$tmp = $_FILES['csv']['tmp_name'];
|
||||
$handle = fopen($tmp, 'r');
|
||||
$headers = fgetcsv($handle, 1000, ',');
|
||||
$conn = getConnection();
|
||||
$usr = $_SESSION['usuario_id'];
|
||||
$tmp = $_FILES['csv']['tmp_name'];
|
||||
$handle = fopen($tmp, 'r');
|
||||
$headers = fgetcsv($handle, 1000, ',');
|
||||
$usr = $_SESSION['usuario_id'];
|
||||
$imported = 0;
|
||||
$errors = [];
|
||||
$row = 1;
|
||||
@@ -345,21 +362,19 @@ function importarGuardar() {
|
||||
}
|
||||
|
||||
// Verificar que el transportista pertenezca al usuario
|
||||
$sqlCheck = "SELECT COUNT(*) AS cnt
|
||||
FROM dbo.transportistas
|
||||
WHERE id_transportista = ? AND id_usuario = ?";
|
||||
$sqlCheck = "SELECT COUNT(*) AS cnt FROM dbo.transportistas WHERE id_transportista = ? AND id_usuario = ?";
|
||||
$stmtCheck = sqlsrv_query($conn, $sqlCheck, [$idTrans, $usr]);
|
||||
$rCheck = sqlsrv_fetch_array($stmtCheck, SQLSRV_FETCH_ASSOC);
|
||||
|
||||
if ($rCheck['cnt'] == 0) {
|
||||
$errors[] = "Fila $row: transportista $idTrans no válido.";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Insertar sin foto
|
||||
$sql = "INSERT INTO dbo.transportes
|
||||
(vehiculo, identificador_fiscal, foto_url, status, id_transportista)
|
||||
VALUES (?, ?, NULL, 1, ?)";
|
||||
$sql = "INSERT INTO dbo.transportes (vehiculo, identificador_fiscal, foto_url, status, id_transportista) VALUES (?, ?, NULL, 1, ?)";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$vehiculo, $identFiscal, $idTrans]);
|
||||
|
||||
if ($stmt === false) {
|
||||
$errors[] = "Fila $row: error al insertar.";
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user