34849-vm/save_llamada.php
2026-07-07 08:34:42 +00:00

60 lines
2.2 KiB
PHP

<?php
require_once 'db/config.php';
require_once 'includes/callcenter_test_helpers.php';
session_start();
header('Content-Type: application/json');
if (!isset($_SESSION['user_id']) || !cc_test_current_user_can_access_module(db())) {
echo json_encode(['success' => 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']);
}