40097-vm/update_callcenter_test_tracking.php
2026-05-25 01:22:01 +00:00

73 lines
2.1 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
header('Content-Type: application/json; charset=utf-8');
if (!isset($_SESSION['user_id'])) {
http_response_code(403);
echo json_encode(['success' => false, 'message' => 'No autorizado']);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'message' => 'Método no permitido']);
exit;
}
$sourceKey = trim((string) ($_POST['source_key'] ?? ''));
$estado = trim((string) ($_POST['estado'] ?? 'POR LLAMAR'));
$nota = trim((string) ($_POST['nota_seguimiento'] ?? ''));
$validStates = ['POR LLAMAR', 'REINTENTO', 'CONFIRMADO'];
if ($sourceKey === '' || !preg_match('/^[a-f0-9]{40}$/', $sourceKey)) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Pedido de prueba inválido']);
exit;
}
if (!in_array($estado, $validStates, true)) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Estado inválido']);
exit;
}
if (mb_strlen($nota) > 3000) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'La nota es demasiado larga']);
exit;
}
try {
$pdo = db();
$stmt = $pdo->prepare(
'INSERT INTO callcenter_test_tracking (source_key, estado, nota_seguimiento, user_id)
VALUES (:source_key, :estado, :nota, :user_id)
ON DUPLICATE KEY UPDATE
estado = VALUES(estado),
nota_seguimiento = VALUES(nota_seguimiento),
user_id = VALUES(user_id),
updated_at = CURRENT_TIMESTAMP'
);
$stmt->execute([
':source_key' => $sourceKey,
':estado' => $estado,
':nota' => $nota,
':user_id' => (int) $_SESSION['user_id'],
]);
echo json_encode([
'success' => true,
'message' => 'Seguimiento actualizado correctamente.',
'estado' => $estado,
]);
} catch (Throwable $exception) {
http_response_code(500);
echo json_encode([
'success' => false,
'message' => 'No se pudo guardar el seguimiento.',
]);
}