diff --git a/call_center_pro.php b/call_center_pro.php index b4b6778c..1bfab7ad 100644 --- a/call_center_pro.php +++ b/call_center_pro.php @@ -332,6 +332,7 @@ $recoverablesMainStoreKey = trim((string) ($storeConfig['main_store_key'] ?? '') $recoverablesMainStoreLabel = $recoverablesMainStoreKey !== '' && isset($availableStores[$recoverablesMainStoreKey]) ? (string) ($availableStores[$recoverablesMainStoreKey]['label'] ?? strtoupper($recoverablesMainStoreKey)) : $storeLabel; $recoverablesStoreLabelHtml = htmlspecialchars($storeLabel); $recoverablesMainStoreLabelHtml = htmlspecialchars($recoverablesMainStoreLabel); +$canOpenRecoverablesStore = $recoverablesStoreKey !== '' && isset($availableStores[$recoverablesStoreKey]); $usesIncrementalSync = !empty($storeConfig['incremental_sync']); $storeNav = drive_test_store_navigation_state($availableStores, $storeKey); $storeNavGroups = $storeNav['groups']; @@ -347,7 +348,7 @@ if ($isTuaniRecuperablesStore && trim((string) ($_GET['view'] ?? '')) === '') { } $canShowTuaniLogisticaButton = $isMainTuaniStore || $isTuaniRecuperablesStore; $postedAction = trim((string) ($_POST['action'] ?? '')); -$recoverablesResyncRequested = $isTuaniRecuperablesStore && $postedAction === 'reimport_recoverables_queue'; +$recoverablesResyncRequested = $isTuaniRecuperablesStore && $isAdmin && $postedAction === 'reimport_recoverables_queue'; $recoverablesResyncRow = $isTuaniRecuperablesStore ? (int) ($storeConfig['startRow'] ?? 2000) : null; $viewCardColumnClass = $isTuaniRecuperablesStore ? 'col-md-6 col-xl-2' : 'col-md-6 col-xl-2'; $defaultView = cc_test_callcenter_pro_default_view_key($storeKey); @@ -587,6 +588,7 @@ try { $recoverablesFirstSourceRow = $recoverablesSummary['first_source_row'] !== null ? (int) $recoverablesSummary['first_source_row'] : null; $recoverablesLastSourceRow = $recoverablesSummary['last_source_row'] !== null ? (int) $recoverablesSummary['last_source_row'] : null; $recoverablesNotice = $recoverablesSummary['notice'] ?? null; + $recoverablesNotice = null; } else { $recoverablesImportCount = count($orders); $recoverablesFirstSourceRow = null; @@ -854,9 +856,23 @@ try { })); } + $performanceValueOverride = ''; + $performanceMetaTitleOverride = ''; $performanceDashboard = cc_test_build_performance_dashboard_period($performanceOrders, $assessors, $kpiPeriodStart, $kpiPeriodEnd); + if ($isTuaniRecuperablesStore) { + $performanceDashboard = cc_test_filter_dashboard_status_chart($performanceDashboard, ['Confirmados nuevos', 'Recuperados']); + $recoverablesStatusDataset = (array) (($performanceDashboard['status_chart']['datasets'][0] ?? []) ?: []); + $recoverablesStatusValues = array_map(static function ($value) { + return (int) $value; + }, array_values((array) ($recoverablesStatusDataset['data'] ?? []))); + if (array_sum($recoverablesStatusValues) > 0) { + $performanceValueOverride = ''; + $performanceMetaTitleOverride = 'Confirmados nuevos + recuperados cubren el periodo mostrado.'; + } + } + $performanceStatusHeading = $kpiPeriodKey === 'today' ? 'Detalle del KPI de hoy (%)' : 'Detalle del KPI del periodo (%)'; $performanceSubtitle = $isTuaniRecuperablesStore - ? 'Los indicadores de esta bandeja se calculan sobre todos los pedidos visibles para cualquier asesora en el periodo seleccionado; los repetidos solo suman cantidad y no bajan el porcentaje.' + ? 'En carritos recuperables solo se muestran confirmados nuevos y recuperados; cuando hay datos, esas dos categorías visibles cubren el periodo mostrado y los repetidos solo suman cantidad.' : ($isAdmin ? 'Confirmación = pedidos asignados en el periodo confirmados en el mismo periodo, sin contar repetidos. Recuperación = pedidos asignados antes del periodo confirmados dentro del periodo. Rendimiento = confirmados totales (nuevos + recuperados) sobre asignados efectivos sin repetidos.' : 'Tus KPIs del periodo seleccionado se calculan sobre tus pedidos asignados en ese rango. Confirmación = asignados del periodo confirmados en el mismo periodo, sin contar repetidos. Recuperación = asignados antes del periodo confirmados dentro del periodo. Rendimiento = confirmados totales (nuevos + recuperados) sobre asignados efectivos sin repetidos.'); @@ -865,11 +881,15 @@ try { $performanceTitle = $kpiPeriodKey === 'today' ? 'KPI compartido de recuperación' : 'KPI compartido de recuperación · ' . $kpiPeriodLabel; - $performanceChart1Title = 'Distribución de estados de la bandeja'; - $performanceChart1Note = 'La dona separa los pedidos del periodo seleccionado por estado: confirmados nuevos, recuperados, POR LLAMAR, DEVOLVER LLAMADA, OBSERVADO, SE ENVIO NUMERO DE CUENTA, repetidos (solo cantidad) y cancelados.'; + $performanceChart1Title = 'Confirmados nuevos vs recuperados'; + $performanceChart1Note = 'La dona muestra solo confirmados nuevos y recuperados en esta bandeja.'; $performanceChart2Title = $kpiPeriodKey === 'today' ? 'Evolución de hoy' : 'Evolución de ' . $kpiPeriodTitleLabel; $performanceChart2Note = 'La línea muestra cómo se mueve la bandeja compartida en el periodo seleccionado.'; $performanceFootnote = 'Los indicadores se calculan sobre todos los pedidos visibles de esta bandeja compartida; los repetidos solo suman cantidad y no bajan el porcentaje.'; + $performanceLabel = 'Rendimiento del periodo'; + $performanceValueOverride = ''; + $performanceMetaTitleOverride = 'Confirmados nuevos + recuperados cubren el periodo mostrado.'; + $performanceStatusHeading = 'Detalle del KPI del periodo (%)'; } else { if ($isAdmin) { $performanceTitle = $selectedAssessorFilterLabel !== '' @@ -895,8 +915,11 @@ try { 'chart2_title' => $performanceChart2Title, 'chart2_note' => $performanceChart2Note, 'footnote' => $performanceFootnote, - 'performance_label' => $kpiPeriodKey === 'today' ? 'Rendimiento del día' : 'Rendimiento del periodo', - 'status_detail_heading' => $kpiPeriodKey === 'today' ? 'Detalle del KPI de hoy (%)' : 'Detalle del KPI del periodo (%)', + 'performance_label' => $performanceLabel, + 'performance_value_hidden' => $isTuaniRecuperablesStore, + 'status_detail_heading' => $performanceStatusHeading, + 'performance_value' => $performanceValueOverride, + 'performance_meta_title' => $performanceMetaTitleOverride, ]); $visibleOrders = array_values(array_filter($orders, static function (array $order) use ($view, $selectedAssessorFilter, $todayStart): bool { @@ -1398,7 +1421,7 @@ require_once 'layout_header.php'; Tienda activa: Solo pedidos válidos: IDs #D... - + Abrir (#D...) @@ -1439,7 +1462,7 @@ require_once 'layout_header.php'; Actualización en vivo cada 5 min Ver vista previa Drive - +