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->date_to ? Carbon::parse($request->date_to)->endOfDay() : today()->endOfDay(); $sql = " SELECT* FROM( SELECT 'کل کشور' AS province_name, -1 AS province_id, COUNT(mv.id) AS total, COALESCE(SUM(CASE WHEN mv.status = 1 THEN 1 ELSE 0 END), 0) as done, COALESCE(SUM(CASE WHEN mv.status = 0 THEN 1 ELSE 0 END), 0) as undone, COALESCE(SUM(CASE WHEN gps = 1 THEN 1 ELSE 0 END), 0) as gps, COALESCE(SUM(CASE WHEN gps = 0 THEN 1 ELSE 0 END), 0) as herasat, COALESCE(SUM(CASE WHEN gps = 1 THEN mileage ELSE 0 END),0) as mil_gps FROM mission_violations mv WHERE mv.created_at >= :from_mv_1 AND mv.created_at <= :to_mv_1 UNION ALL SELECT p.name_fa AS province_name, p.id AS province_id, COUNT(mv.id) AS total, COALESCE(SUM(CASE WHEN mv.status = 1 THEN 1 ELSE 0 END), 0) as done, COALESCE(SUM(CASE WHEN mv.status = 0 THEN 1 ELSE 0 END), 0) as undone, COALESCE(SUM(CASE WHEN gps = 1 THEN 1 ELSE 0 END), 0) as gps, COALESCE(SUM(CASE WHEN gps = 0 THEN 1 ELSE 0 END), 0) as herasat, COALESCE(SUM(CASE WHEN gps = 1 THEN mileage ELSE 0 END),0) as mil_gps FROM provinces p LEFT JOIN mission_violations mv ON mv.province_id = p.id AND mv.type = 1 AND mv.created_at >= :from_mv_2 AND mv.created_at <= :to_mv_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_mv_1' => $from, 'to_mv_1' => $to, 'from_mv_2' => $from, 'to_mv_2' => $to, ]); } public function provinceActivity(Request $request): array { $provinceId = $request->province_id ?? auth()->user()->province_id; $from = $request->from_date ?? today()->startOfDay(); $to = $request->date_to ? Carbon::parse($request->date_to)->endOfDay() : today()->endOfDay(); $sql = " SELECT* FROM( SELECT 'کل استان' AS city_name, -1 AS city_id, COUNT(mv.id) AS total, COALESCE(SUM(mv.status = 1), 0) AS done, COALESCE(SUM(mv.status = 0), 0) AS undone, COALESCE(SUM(mv.gps = 1), 0) AS gps, COALESCE(SUM(mv.gps = 0), 0) AS herasat, COALESCE(SUM(CASE WHEN mv.gps = 1 THEN mv.mileage ELSE 0 END), 0) AS mil_gps FROM mission_violations mv WHERE mv.type = 1 AND mv.created_at >= :from_mv_1 AND mv.created_at <= :to_mv_1 AND mv.province_id = :province_id_1 UNION ALL SELECT c.name_fa AS city_name, c.id AS city_id, COUNT(mv.id) AS total, COALESCE(SUM(mv.status = 1), 0) AS done, COALESCE(SUM(mv.status = 0), 0) AS undone, COALESCE(SUM(mv.gps = 1), 0) AS gps, COALESCE(SUM(mv.gps = 0), 0) AS herasat, COALESCE(SUM(CASE WHEN mv.gps = 1 THEN mv.mileage ELSE 0 END), 0) AS mil_gps FROM cities c LEFT JOIN mission_violations mv ON mv.city_id = c.id AND mv.type = 1 AND mv.created_at >= :from_mv_2 AND mv.created_at <= :to_mv_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_mv_1' => $from, 'to_mv_1' => $to, 'province_id_2' => $provinceId, 'from_mv_2' => $from, 'to_mv_2' => $to, ]); } }