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 m.id) AS total_missions, SUM(CASE WHEN m.mission_duration != m.in_area_duration THEN 1 ELSE 0 END) AS taradod_khareg_mahdode, SUM(CASE WHEN m.mission_status = 1 THEN 1 ELSE 0 END) AS bafarayand_saeti, SUM(CASE WHEN m.mission_status = 2 THEN 1 ELSE 0 END) AS bafarayand_rozaneh, SUM(CASE WHEN m.mission_status = 3 THEN 1 ELSE 0 END) AS bedon_bafarayand_saeti, SUM(CASE WHEN m.mission_status = 4 THEN 1 ELSE 0 END) AS bedon_bafarayand_rozaneh, FROM provinces LEFT JOIN missions m ON m.province_id = p.id AND m.created_at >= :from_m AND m.created_at <= :to_m GROUP BY p.id, p.name_fa ) SELECT -1 AS province_id, 'کل کشور' AS province_name, SUM(total_missions) AS total_missions, SUM(taradod_khareg_mahdode) AS taradod_khareg_mahdode, SUM(bafarayand_saeti) AS bafarayand_saeti, SUM(bafarayand_rozaneh) AS bafarayand_rozaneh, SUM(bedon_bafarayand_saeti) AS bedon_bafarayand_saeti, SUM(bedon_bafarayand_rozaneh) AS bedon_bafarayand_rozaneh FROM r UNION ALL SELECT province_id, province_name, total_missions, taradod_khareg_mahdode, bafarayand_saeti, bafarayand_rozaneh, bedon_bafarayand_saeti, bedon_bafarayand_rozaneh 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 m.id) AS total_missions, SUM(CASE WHEN m.mission_duration != m.in_area_duration THEN 1 ELSE 0 END) AS taradod_khareg_mahdode, SUM(CASE WHEN m.mission_status = 1 THEN 1 ELSE 0 END) AS bafarayand_saeti, SUM(CASE WHEN m.mission_status = 2 THEN 1 ELSE 0 END) AS bafarayand_rozaneh, SUM(CASE WHEN m.mission_status = 3 THEN 1 ELSE 0 END) AS bedon_bafarayand_saeti, SUM(CASE WHEN m.mission_status = 4 THEN 1 ELSE 0 END) AS bedon_bafarayand_rozaneh, FROM cities c LEFT JOIN cmms_machines cm ON cm.city_id = c.id LEFT JOIN missions m ON m.province_id = p.id AND m.created_at >= :from_m AND m.created_at <= :to_m 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_missions) AS total_missions, SUM(taradod_khareg_mahdode) AS taradod_khareg_mahdode, SUM(bafarayand_saeti) AS bafarayand_saeti, SUM(bafarayand_rozaneh) AS bafarayand_rozaneh, SUM(bedon_bafarayand_saeti) AS bedon_bafarayand_saeti, SUM(bedon_bafarayand_rozaneh) AS bedon_bafarayand_rozaneh FROM r UNION ALL SELECT city_id, city_name, total_missions, taradod_khareg_mahdode, bafarayand_saeti, bafarayand_rozaneh, bedon_bafarayand_saeti, bedon_bafarayand_rozaneh 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, ]); } }