86 lines
3.3 KiB
PHP
86 lines
3.3 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);
|
|
$tracking = null;
|
|
|
|
if (!$isAdmin) {
|
|
cc_test_ensure_tracking_table($pdo);
|
|
|
|
$stmtTrack = $pdo->prepare('SELECT user_id, estado, assigned_at, promo_final_evidencia_path 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;
|
|
|
|
$storeKey = '';
|
|
try {
|
|
$stmtOrder = $pdo->prepare('SELECT store_key FROM callcenter_test_orders WHERE source_key = ? LIMIT 1');
|
|
$stmtOrder->execute([$pedido_id]);
|
|
$storeKey = trim((string) ($stmtOrder->fetchColumn() ?: ''));
|
|
} catch (Throwable $lookupException) {
|
|
$storeKey = '';
|
|
}
|
|
|
|
$isRecoverablesQueue = cc_test_is_recoverables_store_key($storeKey);
|
|
$canClaimRecoverable = $isRecoverablesQueue && cc_test_can_claim_recoverable_order($tracking);
|
|
$needsRecoverableClaim = $canClaimRecoverable && ($tracking === null || $trackingUserId !== $asesor_id);
|
|
|
|
if ($tracking === null) {
|
|
if (!$canClaimRecoverable) {
|
|
http_response_code(403);
|
|
echo json_encode(['success' => false, 'error' => 'No autorizado para gestionar este pedido.']);
|
|
exit;
|
|
}
|
|
} elseif ($trackingUserId !== $asesor_id && !$canClaimRecoverable) {
|
|
http_response_code(403);
|
|
echo json_encode(['success' => false, 'error' => 'No autorizado para gestionar este pedido.']);
|
|
exit;
|
|
}
|
|
|
|
if ($needsRecoverableClaim) {
|
|
cc_test_upsert_assignee($pdo, $pedido_id, $asesor_id);
|
|
}
|
|
}
|
|
|
|
$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']);
|
|
}
|