Merge branch 'feature/TokenLogin' into 'develop'

Feature/token login

See merge request witel-back-end/crm!30
This commit is contained in:
2025-08-13 13:26:20 +00:00
2 changed files with 65 additions and 21 deletions

View File

@@ -25,7 +25,14 @@ class ReportService
COUNT(CASE WHEN lastapp = 'Busy' THEN 1 END) AS dnd, 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 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, 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 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)'); ")->groupByRaw('DATE(calldate)');
$data = DataTableFacade::run( $data = DataTableFacade::run(
@@ -33,7 +40,6 @@ class ReportService
$request, $request,
allowedFilters: ['*'], allowedFilters: ['*'],
allowedSortings: ['*'], allowedSortings: ['*'],
allowedGroupBy: ['d']
); );
$data = collect($data); $data = collect($data);
@@ -91,20 +97,39 @@ class ReportService
public function operatorPerformanceDaily(Request $request) public function operatorPerformanceDaily(Request $request)
{ {
$query = DB::table(DB::raw("(SELECT *, CAST(dst AS UNSIGNED) AS dst_num FROM asteriskcdrdb.cdr) AS cdr")) $query = DB::table('asteriskcdrdb.cdr')
->selectRaw(" ->selectRaw("
DATE(calldate) AS d, DATE(calldate) as d,
dst, dst,
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst_num BETWEEN 1 AND 104 THEN 1 END) AS ok, COUNT(CASE WHEN dcontext = 'from-internal'
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'NO ANSWER' AND dst_num BETWEEN 1 AND 104 AND duration > 14 THEN 1 END) AS nok, AND disposition = 'ANSWERED'
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst_num BETWEEN 1 AND 104 AND billsec > 9 THEN 1 END) AS b10, 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 lastapp = 'Busy' THEN 1 END) AS dnd,
COUNT(CASE WHEN dst_num BETWEEN 502 AND 599 THEN 1 END) AS trans, COUNT(CASE WHEN dst > 501 AND dst < 600 THEN 1 END) AS trans,
COUNT(CASE WHEN disposition <> 'BUSY' AND dst_num BETWEEN 1 AND 105 THEN 1 END) AS total_calls 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_num', [1, 105]) ->whereBetween('dst', [1, 104]) // dst>100 AND dst<105
->groupBy(DB::raw('DATE(calldate)'), 'dst') ->groupBy('dst', DB::raw('DATE(calldate)'))
->orderBy(DB::raw('DATE(calldate)'))
->orderBy('dst'); ->orderBy('dst');
return DataTableFacade::run( return DataTableFacade::run(
@@ -117,18 +142,37 @@ class ReportService
public function operatorPerformanceTotal(Request $request) public function operatorPerformanceTotal(Request $request)
{ {
$query = DB::table(DB::raw("(SELECT *, CAST(dst AS UNSIGNED) AS dst_num FROM asteriskcdrdb.cdr) AS cdr")) $query = DB::table('asteriskcdrdb.cdr')
->selectRaw(" ->selectRaw("
DATE(calldate) AS d,
dst, dst,
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst_num BETWEEN 1 AND 104 THEN 1 END) AS ok, COUNT(CASE WHEN dcontext = 'from-internal'
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'NO ANSWER' AND dst_num BETWEEN 1 AND 104 AND duration > 14 THEN 1 END) AS nok, AND disposition = 'ANSWERED'
COUNT(CASE WHEN dcontext = 'from-internal' AND disposition = 'ANSWERED' AND dst_num BETWEEN 1 AND 104 AND billsec > 9 THEN 1 END) AS b10, 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 lastapp = 'Busy' THEN 1 END) AS dnd,
COUNT(CASE WHEN dst_num BETWEEN 502 AND 599 THEN 1 END) AS trans, COUNT(CASE WHEN dst > 501 AND dst < 600 THEN 1 END) AS trans,
COUNT(CASE WHEN disposition <> 'BUSY' AND dst_num BETWEEN 1 AND 105 THEN 1 END) AS total_calls 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_num', [1, 105]) ->whereBetween('dst', [1, 104])
->groupBy('dst') ->groupBy('dst')
->orderBy(DB::raw('DATE(calldate)')) ->orderBy(DB::raw('DATE(calldate)'))
->orderBy('dst'); ->orderBy('dst');

View File

@@ -153,7 +153,7 @@ Route::middleware('auth')
->group(function () { ->group(function () {
Route::get('/', 'index')->name('index'); Route::get('/', 'index')->name('index');
Route::get('/excel', 'excel')->name('excel'); Route::get('/excel', 'excel')->name('excel');
Route::post('/rate/{operatorDialogue}', 'rate')->name('rate'); Route::post('/rate', 'rate')->name('rate');
Route::get('/{operatorDialogue}', 'show')->name('show'); Route::get('/{operatorDialogue}', 'show')->name('show');
}); });
}); });