fix(ucp): correction journal personnel Mes Appels CDR (v2.5.4)
This commit is contained in:
1 parent
d618d426e7
commit
c10c980024
3 files changed
+54
-13
No files matched your search
+33
-5
@@ -607,10 +607,16 @@ class UcpManager
|
||||
return ['calls' => [], 'stats' => ['total' => 0, 'answered' => 0, 'missed' => 0]];
|
||||
}
|
||||
|
||||
$rawDisp = strtoupper(trim((string)($filters['disposition'] ?? 'all')));
|
||||
$cdrDisp = match ($rawDisp) {
|
||||
'ANSWERED' => 'answered',
|
||||
default => 'all',
|
||||
};
|
||||
|
||||
$res = CdrManager::getCalls($db, [
|
||||
'limit' => 500,
|
||||
'direction' => (string)($filters['direction'] ?? 'all'),
|
||||
'disposition' => (string)($filters['disposition'] ?? 'all'),
|
||||
'disposition' => $cdrDisp,
|
||||
'period' => (string)($filters['period'] ?? 'all'),
|
||||
'search' => (string)($filters['search'] ?? ''),
|
||||
]);
|
||||
@@ -619,17 +625,39 @@ class UcpManager
|
||||
$answered = 0;
|
||||
$missed = 0;
|
||||
|
||||
$extractExt = static function (string $chan): string {
|
||||
if (preg_match('/^(?:PJSIP|SIP)\/([^-\/@]+)/i', trim($chan), $m)) {
|
||||
return (string)$m[1];
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
foreach ($res['calls'] as $call) {
|
||||
$srcMatch = in_array((string)($call['src'] ?? ''), $extSet, true);
|
||||
$dstMatch = in_array((string)($call['dst'] ?? ''), $extSet, true);
|
||||
if (!$srcMatch && !$dstMatch) {
|
||||
$callerNum = (string)($call['caller_number'] ?? $call['src'] ?? '');
|
||||
$calleeNum = (string)($call['callee_number'] ?? $call['dst'] ?? '');
|
||||
$srcChanEp = $extractExt((string)($call['channel'] ?? ''));
|
||||
$dstChanEp = $extractExt((string)($call['dstchannel'] ?? ''));
|
||||
|
||||
$isMine = in_array($callerNum, $extSet, true)
|
||||
|| in_array($calleeNum, $extSet, true)
|
||||
|| ($srcChanEp !== '' && in_array($srcChanEp, $extSet, true))
|
||||
|| ($dstChanEp !== '' && in_array($dstChanEp, $extSet, true));
|
||||
|
||||
if (!$isMine) {
|
||||
continue;
|
||||
}
|
||||
if (($call['disposition'] ?? '') === 'ANSWERED') {
|
||||
|
||||
$disp = strtoupper((string)($call['disposition'] ?? 'NO ANSWER'));
|
||||
if ($rawDisp === 'MISSED' && $disp === 'ANSWERED') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($disp === 'ANSWERED') {
|
||||
$answered++;
|
||||
} else {
|
||||
$missed++;
|
||||
}
|
||||
|
||||
$filtered[] = $call;
|
||||
if (count($filtered) >= 120) {
|
||||
break;
|
||||
|
||||
Reference in new issue
Block a user