user(); $query = MissionViolation::query()->where('edare_shahri_id', '=', $user->edarate_shahri_id); return DataTableFacade::run( $query, $request, allowedFilters: ['*'], allowedSortings: ['*'], ); } public function countryActivity(Request $request): array { $from = $request->from_date ?? today()->startOfDay(); $to = Carbon::parse($request->to_date)->endOfDay() ?? today()->endOfDay(); $sql = " WITH r AS ( SELECT p.id AS province_id, p.name_fa AS province_name, COUNT(DISTINCT mv.id) AS total_violations, SUM(CASE WHEN mv.status = 1 THEN 1 ELSE 0 END) AS egdam_shode, SUM(CASE WHEN mv.status = 2 THEN 1 ELSE 0 END) AS bedone_egdam, SUM(CASE WHEN mv.gps = 1 THEN 1 ELSE 0 END) AS sabt_gps, SUM(CASE WHEN mv.gps = 0 THEN 1 ELSE 0 END) AS sabt_herasat FROM provinces p LEFT JOIN cmms_machines cm ON cm.province_id = p.id LEFT JOIN mission_violations mv ON TRIM(cm.machine_code) = TRIM(mv.machine_code) AND mv.type = 1 AND mv.created_at >= :from_mv AND mv.created_at <= :to_mv GROUP BY p.id, p.name_fa ) SELECT -1 AS province_id, 'کل کشور' AS province_name, SUM(total_violations) AS total_violations, SUM(egdam_shode) AS egdam_shode, SUM(bedone_egdam) AS bedone_egdam, SUM(sabt_gps) AS sabt_gps, SUM(sabt_herasat) AS sabt_herasat FROM r UNION ALL SELECT province_id, province_name, total_violations, egdam_shode, bedone_egdam, sabt_gps, sabt_herasat FROM r ORDER BY CASE WHEN province_id = -1 THEN 0 ELSE 1 END, province_name "; return DB::select($sql, [ 'from_mv' => $from, 'to_mv' => $to, ]); } public function provinceActivity(Request $request): array { $provinceId = $request->province_id ?? auth()->user()->province_id; $from = $request->from_date ?? today()->startOfDay(); $to = Carbon::parse($request->to_date)->endOfDay() ?? today()->endOfDay(); $sql = " WITH r AS ( SELECT c.id AS city_id, c.name_fa AS city_name, COUNT(DISTINCT mv.id) AS total_violations, SUM(CASE WHEN mv.status = 1 THEN 1 ELSE 0 END) AS egdam_shode, SUM(CASE WHEN mv.status = 2 THEN 1 ELSE 0 END) AS bedone_egdam, SUM(CASE WHEN mv.gps = 1 THEN 1 ELSE 0 END) AS sabt_gps, SUM(CASE WHEN mv.gps = 0 THEN 1 ELSE 0 END) AS sabt_herasat FROM cities c LEFT JOIN cmms_machines cm ON cm.city_id = c.id LEFT JOIN mission_violations mv ON TRIM(cm.machine_code) = TRIM(mv.machine_code) AND mv.type = 1 AND mv.created_at >= :from_mv AND mv.created_at <= :to_mv WHERE c.province_id = :province_id AND ( c.type_id = 1 OR c.name_fa IN ('اداره ماشين‌آلات', 'اداره نقلیه') ) GROUP BY c.id, c.name_fa ) SELECT -1 AS city_id, 'کل استان' AS city_name, SUM(total_violations) AS total_violations, SUM(egdam_shode) AS egdam_shode, SUM(bedone_egdam) AS bedone_egdam, SUM(sabt_gps) AS sabt_gps, SUM(sabt_herasat) AS sabt_herasat FROM r UNION ALL SELECT city_id, city_name, total_violations, egdam_shode, bedone_egdam, sabt_gps, sabt_herasat FROM r ORDER BY CASE WHEN city_id = -1 THEN 0 ELSE 1 END, city_name "; return DB::select($sql, [ 'province_id' => $provinceId, 'from_mv' => $from, 'to_mv' => $to, ]); } }