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 = " SELECT* FROM( SELECT 'کل کشور' AS province_name, -1 AS province_id, SUM(t.total) AS total, SUM(t.khareg_mahdode) AS khareg_mahdode, SUM(t.gps) AS gps, SUM(t.durations) AS durations, SUM(t.far_h) AS far_h, SUM(t.far_d) AS far_d, SUM(t.un_far_h) AS un_far_h, SUM(t.un_far_d) AS un_far_d, SUM(t.item) AS item, SUM(t.patrol) AS patrol FROM ( SELECT p.id AS province_id, COUNT(m.id) AS total, COALESCE(SUM(m.mission_duration != m.in_area_duration), 0) AS khareg_mahdode, COALESCE(SUM(m.in_area_duration), 0) AS gps, COALESCE(SUM(m.mission_duration), 0) AS durations, COALESCE(SUM(CASE WHEN m.type = 1 THEN 1 ELSE 0 END), 0) AS far_h, COALESCE(SUM(CASE WHEN m.type = 2 THEN 1 ELSE 0 END), 0) AS far_d, COALESCE(SUM(CASE WHEN m.type = 3 THEN 1 ELSE 0 END), 0) AS un_far_h, COALESCE(SUM(CASE WHEN m.type = 4 THEN 1 ELSE 0 END), 0) AS un_far_d, COALESCE(SUM(CASE WHEN m.category_id = 1 THEN 1 ELSE 0 END), 0) AS item, COALESCE(SUM(CASE WHEN m.category_id = 2 THEN 1 ELSE 0 END), 0) AS patrol FROM provinces p 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 ) t UNION ALL SELECT p.name_fa AS province_name, p.id AS province_id, COUNT(m.id) AS total, COALESCE(SUM(m.mission_duration != m.in_area_duration), 0) AS khareg_mahdode, COALESCE(SUM(m.in_area_duration), 0) AS gps, COALESCE(SUM(m.mission_duration), 0) AS durations, COALESCE(SUM(CASE WHEN m.type = 1 THEN 1 ELSE 0 END), 0) AS far_h, COALESCE(SUM(CASE WHEN m.type = 2 THEN 1 ELSE 0 END), 0) AS far_d, COALESCE(SUM(CASE WHEN m.type = 3 THEN 1 ELSE 0 END), 0) AS un_far_h, COALESCE(SUM(CASE WHEN m.type = 4 THEN 1 ELSE 0 END), 0) AS un_far_d, COALESCE(SUM(CASE WHEN m.category_id = 1 THEN 1 ELSE 0 END), 0) AS item, COALESCE(SUM(CASE WHEN m.category_id = 2 THEN 1 ELSE 0 END), 0) AS patrol FROM provinces p 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 )q ORDER BY CASE WHEN province_id = -1 THEN 0 ELSE 1 END, province_name; "; return DB::select($sql, [ 'from_m' => $from, 'to_m' => $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 = " SELECT* FROM( SELECT 'کل استان' AS city_name, -1 AS city_id, SUM(t.total) AS total, SUM(t.khareg_mahdode) AS khareg_mahdode, SUM(t.gps) AS gps, SUM(t.durations) AS durations, SUM(t.far_h) AS far_h, SUM(t.far_d) AS far_d, SUM(t.un_far_h) AS un_far_h, SUM(t.un_far_d) AS un_far_d, SUM(t.item) AS item, SUM(t.patrol) AS patrol FROM ( SELECT c.id AS city_id, COUNT(m.id) AS total, COALESCE(SUM(m.mission_duration != m.in_area_duration), 0) AS khareg_mahdode, COALESCE(SUM(m.in_area_duration), 0) AS gps, COALESCE(SUM(m.mission_duration), 0) AS durations, COALESCE(SUM(m.type = 1), 0) AS far_h, COALESCE(SUM(m.type = 2), 0) AS far_d, COALESCE(SUM(m.type = 3), 0) AS un_far_h, COALESCE(SUM(m.type = 4), 0) AS un_far_d, COALESCE(SUM(m.category_id = 1), 0) AS item, COALESCE(SUM(m.category_id = 2), 0) AS patrol FROM cities c LEFT JOIN missions m ON m.city_id = c.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 ) t UNION ALL SELECT c.name_fa AS city_name, c.id AS city_id, COUNT(m.id) AS total, COALESCE(SUM(m.mission_duration != m.in_area_duration), 0) AS khareg_mahdode, COALESCE(SUM(m.in_area_duration), 0) AS gps, COALESCE(SUM(m.mission_duration), 0) AS durations, COALESCE(SUM(m.type = 1), 0) AS far_h, COALESCE(SUM(m.type = 2), 0) AS far_d, COALESCE(SUM(m.type = 3), 0) AS un_far_h, COALESCE(SUM(m.type = 4), 0) AS un_far_d, COALESCE(SUM(m.category_id = 1), 0) AS item, COALESCE(SUM(m.category_id = 2), 0) AS patrol FROM cities c LEFT JOIN missions m ON m.city_id = c.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 ) q ORDER BY CASE WHEN q.city_id = -1 THEN 0 ELSE 1 END, q.city_name; "; return DB::select($sql, [ 'province_id' => $provinceId, 'from_m' => $from, 'to_m' => $to, ]); } }