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: ['*'], ); } }