diff --git a/call_center_pro.php b/call_center_pro.php
index b4c19a66..4a6aba85 100644
--- a/call_center_pro.php
+++ b/call_center_pro.php
@@ -16,6 +16,28 @@ $departamentosContraentrega = array_keys($provinciasPorDepartamentoContraentrega
$pageTitle = 'Pedidos Asignados | Bandeja de la asesora';
$pageDescription = 'Bandeja para que cada asesora gestione sus pedidos asignados con la misma interfaz, estados, historial y acciones.';
+$kpiPeriodConfig = cc_test_resolve_kpi_period((string) ($_GET['kpi_period'] ?? 'today'), (string) ($_GET['kpi_date'] ?? ''));
+$kpiPeriodKey = (string) ($kpiPeriodConfig['key'] ?? 'today');
+$kpiPeriodLabel = (string) ($kpiPeriodConfig['label'] ?? 'Hoy');
+$kpiPeriodCustomDate = $kpiPeriodConfig['custom_date'] instanceof DateTimeImmutable ? $kpiPeriodConfig['custom_date'] : null;
+$kpiPeriodCustomDateInput = $kpiPeriodCustomDate instanceof DateTimeImmutable ? $kpiPeriodCustomDate->format('Y-m-d') : '';
+$kpiPeriodTitleLabel = match ($kpiPeriodKey) {
+ 'today' => 'diario',
+ 'yesterday' => 'ayer',
+ '7', '15', '30' => 'los ' . mb_strtolower($kpiPeriodLabel),
+ default => mb_strtolower($kpiPeriodLabel),
+};
+$kpiPeriodStart = $kpiPeriodConfig['start'] instanceof DateTimeImmutable ? $kpiPeriodConfig['start'] : new DateTimeImmutable('today');
+$kpiPeriodEnd = $kpiPeriodConfig['end'] instanceof DateTimeImmutable ? $kpiPeriodConfig['end'] : $kpiPeriodStart;
+$kpiPeriodButtons = [
+ 'today' => 'Hoy',
+ 'yesterday' => 'Ayer',
+ '7' => '7 Días',
+ '15' => '15 Días',
+ '30' => '30 Días',
+ 'month' => 'Este Mes',
+];
+
if (!cc_test_current_user_can_access_module($pdo)) {
http_response_code(403);
require_once 'layout_header.php';
@@ -676,28 +698,39 @@ try {
}));
}
- $performanceDashboard = cc_test_build_performance_dashboard($performanceOrders, $assessors, 7);
+ $performanceDashboard = cc_test_build_performance_dashboard_period($performanceOrders, $assessors, $kpiPeriodStart, $kpiPeriodEnd);
+ $performanceSubtitle = $isTuaniRecuperablesStore
+ ? 'Los indicadores de esta bandeja se calculan sobre todos los pedidos visibles para cualquier asesora en el periodo seleccionado.'
+ : ($isAdmin
+ ? 'Confirmación = pedidos asignados en el periodo confirmados en el mismo periodo. Recuperación = pedidos asignados antes del periodo confirmados dentro del periodo. Rendimiento = confirmados totales (nuevos + recuperados) sobre asignados del periodo.'
+ : 'Tus KPIs del periodo seleccionado se calculan sobre tus pedidos asignados en ese rango. Confirmación = asignados del periodo confirmados en el mismo periodo. Recuperación = asignados antes del periodo confirmados dentro del periodo. Rendimiento = confirmados totales (nuevos + recuperados) sobre asignados del periodo.');
+
if ($isTuaniRecuperablesStore) {
- $performanceTitle = 'KPI compartido de recuperación';
- $performanceSubtitle = 'Los indicadores de esta bandeja se calculan sobre todos los pedidos visibles para cualquier asesora.';
+ $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 visibles por estado en esta bandeja compartida.';
- $performanceChart2Title = 'Evolución de los últimos 7 días';
- $performanceChart2Note = 'La línea muestra cómo se mueve la bandeja compartida en los últimos 7 días.';
+ $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 y cancelados.';
+ $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.';
} else {
- $performanceTitle = $isAdmin
- ? ($selectedAssessorFilterLabel !== '' ? 'KPI diario · ' . $selectedAssessorFilterLabel : 'KPI diario por asesora')
- : 'Mi KPI diario';
- $performanceSubtitle = $isAdmin
- ? 'Confirmación = pedidos asignados hoy confirmados hoy. Recuperación = pedidos asignados antes de hoy confirmados hoy. Rendimiento del día = confirmados totales (nuevos + recuperados) sobre asignados hoy.'
- : 'Tus KPIs de hoy se calculan sobre tus pedidos asignados hoy. Confirmación = asignados hoy confirmados hoy. Recuperación = asignados antes de hoy confirmados hoy. Rendimiento del día = confirmados totales (nuevos + recuperados) sobre asignados hoy.';
+ if ($isAdmin) {
+ $performanceTitle = $selectedAssessorFilterLabel !== ''
+ ? ($kpiPeriodKey === 'today' ? 'KPI diario · ' . $selectedAssessorFilterLabel : 'KPI de ' . $kpiPeriodTitleLabel . ' · ' . $selectedAssessorFilterLabel)
+ : ($kpiPeriodKey === 'today' ? 'KPI diario por asesora' : 'KPI de ' . $kpiPeriodTitleLabel . ' por asesora');
+ } else {
+ $performanceTitle = $kpiPeriodKey === 'today' ? 'Mi KPI diario' : 'Mi KPI de ' . $kpiPeriodTitleLabel;
+ }
$performanceChart1Title = $isAdmin ? 'Distribución de estados' : 'Mi distribución de estados';
- $performanceChart1Note = 'La dona separa los pedidos de hoy por estado: confirmados nuevos, recuperados, POR LLAMAR, DEVOLVER LLAMADA, OBSERVADO, SE ENVIO NUMERO DE CUENTA, repetidos y cancelados.';
- $performanceChart2Title = $isAdmin ? 'Evolución de los últimos 7 días' : 'Tu evolución de los últimos 7 días';
- $performanceChart2Note = 'La línea de confirmados separa pedidos asignados hoy y pedidos asignados antes de hoy.';
- $performanceFootnote = 'Seguimiento abierto = pedidos asignados hoy en POR LLAMAR, DEVOLVER LLAMADA, OBSERVADO y SE ENVIO NUMERO DE CUENTA que todavía no pasan a Promo Final.';
+ $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 y cancelados.';
+ $performanceChart2Title = $kpiPeriodKey === 'today'
+ ? ($isAdmin ? 'Evolución de hoy' : 'Tu evolución de hoy')
+ : ($isAdmin ? 'Evolución de ' . $kpiPeriodTitleLabel : 'Tu evolución de ' . $kpiPeriodTitleLabel);
+ $performanceChart2Note = 'La línea de confirmados separa pedidos asignados y recuperados dentro del periodo seleccionado.';
+ $performanceFootnote = 'Seguimiento abierto = pedidos asignados en el periodo en POR LLAMAR, DEVOLVER LLAMADA, OBSERVADO y SE ENVIO NUMERO DE CUENTA que todavía no pasan a Promo Final.';
}
+
$performanceDashboardHtml = cc_test_render_performance_dashboard($performanceDashboard, [
'title' => $performanceTitle,
'subtitle' => $performanceSubtitle,
@@ -706,6 +739,8 @@ 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 (%)',
]);
$visibleOrders = array_values(array_filter($orders, static function (array $order) use ($view, $selectedAssessorFilter, $todayStart): bool {
@@ -828,7 +863,11 @@ try {
$callCenterBaseParams = [
'view' => $view,
'store' => $storeKey,
+ 'kpi_period' => $kpiPeriodKey,
];
+if ($kpiPeriodCustomDateInput !== '') {
+ $callCenterBaseParams['kpi_date'] = $kpiPeriodCustomDateInput;
+}
$callCenterParams = $callCenterBaseParams;
if ($selectedAssessorFilter !== '') {
$callCenterParams['assessor'] = $selectedAssessorFilter;
@@ -1083,6 +1122,41 @@ require_once 'layout_header.php';
+
+
+
+
+
+
+
Filtro KPI
+
Panel KPI ·
+
Filtra el panel para ver el avance del periodo seleccionado.