false, 'error' => 'No autorizado']); exit; } $pedido_id = trim((string) ($_POST['pedido_id'] ?? '')); $resultado = trim((string) ($_POST['resultado'] ?? 'Llamada iniciada')); $observacion = trim((string) ($_POST['observacion'] ?? '')); $asesor_id = (int) $_SESSION['user_id']; if ($pedido_id === '') { echo json_encode(['success' => false, 'error' => 'ID de pedido faltante']); exit; } if ($resultado === '') { $resultado = 'Llamada iniciada'; } try { $pdo = db(); cc_test_ensure_historial_llamadas_table($pdo); $role = (string) ($_SESSION['user_role'] ?? ''); $isAdmin = in_array($role, ['Administrador', 'admin'], true); if (!$isAdmin) { cc_test_ensure_tracking_table($pdo); $stmtTrack = $pdo->prepare('SELECT user_id FROM callcenter_test_tracking WHERE source_key = ? LIMIT 1'); $stmtTrack->execute([$pedido_id]); $tracking = $stmtTrack->fetch(PDO::FETCH_ASSOC); $trackingUserId = $tracking ? (int) ($tracking['user_id'] ?? 0) : null; if (!$tracking || $trackingUserId !== $asesor_id) { http_response_code(403); echo json_encode(['success' => false, 'error' => 'No autorizado para gestionar este pedido.']); exit; } } $stmt = $pdo->prepare('INSERT INTO historial_llamadas (pedido_id, asesor_id, resultado, observacion) VALUES (?, ?, ?, ?)'); $stmt->execute([$pedido_id, $asesor_id, $resultado, $observacion !== '' ? $observacion : null]); $countStmt = $pdo->prepare('SELECT COUNT(*) FROM historial_llamadas WHERE pedido_id = ?'); $countStmt->execute([$pedido_id]); $totalLlamadas = (int) $countStmt->fetchColumn(); echo json_encode(['success' => true, 'total_llamadas' => $totalLlamadas]); } catch (Throwable $e) { error_log('save_llamada.php: ' . $e->getMessage()); echo json_encode(['success' => false, 'error' => 'No se pudo registrar la llamada']); }