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 = $request->to_date ? Carbon::parse($request->to_date)->endOfDay() : today()->endOfDay(); $sql = " SELECT* FROM( SELECT 'کل کشور' AS province_name, -1 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)/3600, 0) AS gps, COALESCE(SUM(m.mission_duration)/3600, 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 missions m WHERE m.created_at >= :from_m_1 AND m.created_at <= :to_m_1 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)/3600, 0) AS gps, COALESCE(SUM(m.mission_duration)/3600, 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_2 AND m.created_at <= :to_m_2 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_1' => $from, 'to_m_1' => $to, 'from_m_2' => $from, 'to_m_2' => $to, ]); } public function provinceActivity(Request $request): array { $provinceId = $request->province_id ?? auth()->user()->province_id; $from = $request->from_date ?? today()->startOfDay(); $to = $request->to_date ? Carbon::parse($request->to_date)->endOfDay() : today()->endOfDay(); $sql = " SELECT* FROM( SELECT 'کل استان' AS city_name, -1 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)/3600, 0) AS gps, COALESCE(SUM(m.mission_duration)/3600, 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 missions m WHERE m.created_at >= :from_m_1 AND m.created_at <= :to_m_1 AND m.province_id = :province_id_1 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)/3600, 0) AS gps, COALESCE(SUM(m.mission_duration)/3600, 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_2 AND m.created_at <= :to_m_2 WHERE c.province_id = :province_id_2 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_1' => $provinceId, 'from_m_1' => $from, 'to_m_1' => $to, 'province_id_2' => $provinceId, 'from_m_2' => $from, 'to_m_2' => $to, ]); } }