188 lines
7.8 KiB
PHP
188 lines
7.8 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Dashboard\Province;
|
|
|
|
use App\Facades\DataTable\DataTableFacade;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ReportService
|
|
{
|
|
public function cumulative(Request $request): Collection
|
|
{
|
|
$query = DB::table('asteriskcdrdb.cdr')
|
|
->selectRaw("
|
|
DATE(calldate) AS d,
|
|
COUNT(CASE WHEN (recordingfile = '' OR recordingfile LIKE 'q-%') THEN 1 END) AS total,
|
|
COUNT(CASE WHEN lastdata = 'IAX2/serverpeer/100' THEN 1 END) AS teh4,
|
|
COUNT(CASE WHEN lastdata = 'IAX2/242serverpeer/200' THEN 1 END) AS teh5,
|
|
COUNT(CASE WHEN dst = '500' THEN 1 END) AS os4,
|
|
COUNT(CASE WHEN dst = '600' THEN 1 END) AS os5,
|
|
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst BETWEEN 101 AND 104 THEN 1 END) AS ok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'NO ANSWER' AND dst BETWEEN 101 AND 104 AND duration > 14 THEN 1 END) AS nok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst BETWEEN 101 AND 104 AND billsec > 9 THEN 1 END) AS b10,
|
|
COUNT(CASE WHEN lastapp = 'Busy' THEN 1 END) AS dnd,
|
|
COUNT(CASE WHEN dst BETWEEN 502 AND 599 THEN 1 END) AS trans,
|
|
COUNT(CASE WHEN disposition <> 'BUSY' AND dst BETWEEN 101 AND 105 THEN 1 END) AS all_calls,
|
|
AVG(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' THEN billsec END) AS avg,
|
|
(
|
|
COUNT(CASE WHEN disposition <> 'BUSY' AND dst BETWEEN 101 AND 105 THEN 1 END)
|
|
- (
|
|
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst BETWEEN 101 AND 104 THEN 1 END)
|
|
+ COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'NO ANSWER' AND dst BETWEEN 101 AND 104 AND duration > 14 THEN 1 END)
|
|
)
|
|
) AS fail
|
|
")->groupByRaw('DATE(calldate)');
|
|
|
|
$data = DataTableFacade::run(
|
|
$query,
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
);
|
|
|
|
$data = collect($data);
|
|
|
|
$totals = [
|
|
'd' => 'TOTAL',
|
|
'total' => $data->sum('total'),
|
|
'teh4' => $data->sum('teh4'),
|
|
'teh5' => $data->sum('teh5'),
|
|
'os4' => $data->sum('os4'),
|
|
'os5' => $data->sum('os5'),
|
|
'ok' => $data->sum('ok'),
|
|
'nok' => $data->sum('nok'),
|
|
'b10' => $data->sum('b10'),
|
|
'dnd' => $data->sum('dnd'),
|
|
'trans' => $data->sum('trans'),
|
|
'all' => $data->sum('all'),
|
|
'avg' => round($data->avg('avg'), 2),
|
|
];
|
|
|
|
$data->push($totals);
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function peopleMessages(Request $request)
|
|
{
|
|
$query = DB::table('people_messages')
|
|
->selectRaw('
|
|
COUNT(CASE WHEN is_listen = 1 THEN 1 END) AS l,
|
|
COUNT(CASE WHEN is_listen = 0 THEN 1 END) AS nl
|
|
');
|
|
|
|
return DataTableFacade::run(
|
|
$query,
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
);
|
|
}
|
|
|
|
public function detailedLogs(Request $request)
|
|
{
|
|
$query = DB::table('asteriskcdrdb.cdr')
|
|
->where('recordingfile', '<>', '');
|
|
|
|
return DataTableFacade::run(
|
|
$query,
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
allowedSelects: ['calldate', 'src', 'dst', 'disposition', 'duration']
|
|
);
|
|
}
|
|
|
|
public function operatorPerformanceDaily(Request $request)
|
|
{
|
|
$query = DB::table('asteriskcdrdb.cdr')
|
|
->selectRaw("
|
|
DATE(calldate) as d,
|
|
dst,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105 THEN 1 END) AS ok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'NO ANSWER'
|
|
AND dst > 100 AND dst < 105
|
|
AND duration > 14 THEN 1 END) AS nok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105
|
|
AND billsec > 9 THEN 1 END) AS b10,
|
|
COUNT(CASE WHEN lastapp = 'Busy' THEN 1 END) AS dnd,
|
|
COUNT(CASE WHEN dst > 501 AND dst < 600 THEN 1 END) AS trans,
|
|
COUNT(CASE WHEN disposition <> 'BUSY'
|
|
AND dst BETWEEN 101 AND 105 THEN 1 END) AS total,
|
|
(COUNT(CASE WHEN disposition <> 'BUSY'
|
|
AND dst BETWEEN 101 AND 105 THEN 1 END)
|
|
- (COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105 THEN 1 END)
|
|
+ COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'NO ANSWER'
|
|
AND dst > 100 AND dst < 105
|
|
AND duration > 14 THEN 1 END)
|
|
)
|
|
) AS fail
|
|
")
|
|
->whereBetween('dst', [1, 104]) // dst>100 AND dst<105
|
|
->groupBy('dst', DB::raw('DATE(calldate)'))
|
|
->orderBy('dst');
|
|
|
|
return DataTableFacade::run(
|
|
$query,
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
);
|
|
}
|
|
|
|
public function operatorPerformanceTotal(Request $request)
|
|
{
|
|
$query = DB::table('asteriskcdrdb.cdr')
|
|
->selectRaw("
|
|
dst,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105 THEN 1 END) AS ok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'NO ANSWER'
|
|
AND dst > 100 AND dst < 105
|
|
AND duration > 14 THEN 1 END) AS nok,
|
|
COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105
|
|
AND billsec > 9 THEN 1 END) AS b10,
|
|
COUNT(CASE WHEN lastapp = 'Busy' THEN 1 END) AS dnd,
|
|
COUNT(CASE WHEN dst > 501 AND dst < 600 THEN 1 END) AS trans,
|
|
COUNT(CASE WHEN disposition <> 'BUSY'
|
|
AND dst BETWEEN 101 AND 105 THEN 1 END) AS total,
|
|
(COUNT(CASE WHEN disposition <> 'BUSY'
|
|
AND dst BETWEEN 101 AND 105 THEN 1 END)
|
|
- (COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'ANSWERED'
|
|
AND dst > 100 AND dst < 105 THEN 1 END)
|
|
+ COUNT(CASE WHEN dcontext = 'from-internal'
|
|
AND disposition = 'NO ANSWER'
|
|
AND dst > 100 AND dst < 105
|
|
AND duration > 14 THEN 1 END)
|
|
)
|
|
) AS fail
|
|
")
|
|
->whereBetween('dst', [1, 104])
|
|
->groupBy('dst')
|
|
->orderBy(DB::raw('DATE(calldate)'))
|
|
->orderBy('dst');
|
|
|
|
return DataTableFacade::run(
|
|
$query,
|
|
$request,
|
|
allowedFilters: ['*'],
|
|
allowedSortings: ['*'],
|
|
);
|
|
}
|
|
}
|