user(); $fields = [ 'id','lat','lon', 'recognize_picture','action_picture','created_at','step', 'final_description', 'info_fa', 'activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date', 'is_finished', 'status_fa', 'supervisor_description', 'operator_description' ]; throw_if(is_null($user->edarate_shahri_id), new ProhibitedAction('اداره ای برای شما در سامانه ثبت نشده است!')); $query = SafetyAndPrivacy::query()->where('edare_shahri_id', '=', $user->edarate_shahri_id); return DataTableFacade::run( $query, $request, allowedFilters: ['*'], allowedSortings: ['*'], allowedSelects: $fields ); } public function countryActivity(int $info_id): array { return DB::select(" WITH combinations AS ( SELECT axis_type_id, step FROM ( SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) a CROSS JOIN ( SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3 ) s ), provinces AS ( SELECT DISTINCT province_fa FROM safety_and_privacy WHERE info_id = ? ), data AS ( SELECT p.province_fa, c.axis_type_id, c.step, COUNT(sp.id) AS total FROM combinations c CROSS JOIN provinces p LEFT JOIN safety_and_privacy sp ON sp.axis_type_id = c.axis_type_id AND sp.step = c.step AND sp.province_fa = p.province_fa AND sp.info_id = ? GROUP BY p.province_fa, c.axis_type_id, c.step ) SELECT province_fa, axis_type_id, step, total, SUM(total) OVER (PARTITION BY province_fa) AS total_sum FROM data ORDER BY province_fa, axis_type_id, step ", [$info_id, $info_id]); } public function provinceActivity(int $info_id, int $province_id): array { return DB::select(" WITH combinations AS ( SELECT axis_type_id, step FROM ( SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) a CROSS JOIN ( SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3 ) s ), edarat AS ( SELECT id AS edare_id, name_fa FROM edarate_shahri WHERE province_id = :provinceId ), data AS ( SELECT e.edare_id, c.axis_type_id, c.step, COUNT(sp.id) AS total FROM combinations c CROSS JOIN edarat e LEFT JOIN safety_and_privacy sp ON sp.axis_type_id = c.axis_type_id AND sp.step = c.step AND sp.city_id = e.edare_id AND sp.info_id = :infoId GROUP BY e.edare_id, c.axis_type_id, c.step ) SELECT e.edare_id, e.name_fa AS edare_name, d.axis_type_id, d.step, d.total, SUM(d.total) OVER (PARTITION BY e.edare_id) AS total_sum FROM data d JOIN edarat e ON e.edare_id = d.edare_id ORDER BY e.edare_id, d.axis_type_id, d.step ",[ 'provinceId' => $province_id, 'infoId' => $info_id, ]); } }