diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php index 0abd41b3..7283dcf2 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php @@ -17,9 +17,10 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class AccessRoadActivityController extends Controller { use ApiResponse; + public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $data = $operatorService->countryActivity(90); + $data = $operatorService->countryActivity(90, $request); return $this->successResponse([ 'activities' => $data, @@ -31,8 +32,8 @@ class AccessRoadActivityController extends Controller { $data = $operatorService->provinceActivity( - info_id: 90, - province_id: $request->input('province_id') + $request, + 90, ); return $this->successResponse([ @@ -42,7 +43,7 @@ class AccessRoadActivityController extends Controller } public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { - $data = $operatorService->countryActivity(90); + $data = $operatorService->countryActivity(90, $request); $name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new ExcelReport($data), $name); } @@ -50,8 +51,8 @@ class AccessRoadActivityController extends Controller public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity( - info_id: 90, - province_id: $request->input('province_id') + $request, + 90, ); $name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new AccessRoadReport($data, $request), $name); diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php index f3907676..0db03253 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php @@ -20,7 +20,7 @@ class ConstructionActivityController extends Controller use ApiResponse; public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $data = $operatorService->countryActivity(89); + $data = $operatorService->countryActivity(89, $request); return $this->successResponse([ 'activities' => $data, @@ -30,8 +30,8 @@ class ConstructionActivityController extends Controller public function provinceActivity(Request $request, OperatorService $operatorService,): JsonResponse { $data = $operatorService->provinceActivity( - info_id: 89, - province_id: $request->input('province_id') + $request, + 89, ); return $this->successResponse([ @@ -46,7 +46,7 @@ class ConstructionActivityController extends Controller */ public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { - $data = $operatorService->countryActivity(89); + $data = $operatorService->countryActivity(89, $request); $name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new ExcelReport($data), $name); @@ -59,8 +59,8 @@ class ConstructionActivityController extends Controller public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity( - info_id: 89, - province_id: $request->input('province_id') + $request, + 89, ); $name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php index d11623aa..3e92c834 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php @@ -20,7 +20,7 @@ class UtilityPassingActivityController extends Controller public function countryActivity(Request $request, OperatorService $operatorService): JsonResponse { - $data = $operatorService->countryActivity(91); + $data = $operatorService->countryActivity(91, $request); return $this->successResponse([ 'activities' => $data, @@ -30,8 +30,8 @@ class UtilityPassingActivityController extends Controller public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse { $data = $operatorService->provinceActivity( - info_id: 91, - province_id: $request->input('province_id') + $request, + 91, ); return $this->successResponse([ @@ -41,7 +41,7 @@ class UtilityPassingActivityController extends Controller } public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { - $data = $operatorService->countryActivity(91); + $data = $operatorService->countryActivity(91, $request); $name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new ExcelReport($data), $name); @@ -50,8 +50,8 @@ class UtilityPassingActivityController extends Controller public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity( - info_id: 91, - province_id: $request->input('province_id') + $request, + 91, ); $name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; diff --git a/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php index fec10878..ede66264 100644 --- a/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php +++ b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php @@ -34,8 +34,38 @@ class OperatorService ); } - public function countryActivity(int $info_id): array + public function countryActivity(int $info_id, Request $request): array { + $params = [ + 'infoId' => $info_id, + ]; + + $dateFields = [ + 'created_at', + 'activity_date_time', + 'judiciary_document_upload_date', + 'action_date', + ]; + + + foreach ($dateFields as $field) { + $params["{$field}_from"] = null; + $params["{$field}_to"] = null; + $params["{$field}_from_2"] = null; + $params["{$field}_to_2"] = null; + } + + foreach (json_decode($request->filters, true) as $filter) { + if ($filter['fn'] === "between") + { + $field = $filter['id']; + $params["{$field}_from"] = $filter['value'][0] . ' 00:00:00'; + $params["{$field}_to"] = $filter['value'][1] . ' 23:59:59'; + $params["{$field}_from_2"] = $filter['value'][0] . ' 00:00:00'; + $params["{$field}_to_2"] = $filter['value'][1] . ' 23:59:59'; + } + } + return DB::select(" WITH base AS ( SELECT @@ -51,6 +81,21 @@ class OperatorService ON t.province_id = p.id AND t.axis_type_id = a.id AND t.info_id = :infoId + AND ( + (:created_at_from IS NULL OR :created_at_to IS NULL) + OR t.created_at BETWEEN :created_at_from_2 AND :created_at_to_2) + AND ( + (:activity_date_time_from IS NULL OR :activity_date_time_to IS NULL) + OR t.activity_date_time BETWEEN :activity_date_time_from_2 AND :activity_date_time_to_2 + ) + AND ( + (:judiciary_document_upload_date_from IS NULL OR :judiciary_document_upload_date_to IS NULL) + OR t.judiciary_document_upload_date BETWEEN :judiciary_document_upload_date_from_2 AND :judiciary_document_upload_date_to_2 + ) + AND ( + (:action_date_from IS NULL OR :action_date_to IS NULL) + OR t.action_date BETWEEN :action_date_from_2 AND :action_date_to_2 + ) GROUP BY p.id, a.id ) SELECT @@ -83,13 +128,44 @@ class OperatorService ORDER BY province_id, axis_type_id - ", [ - 'infoId' => $info_id, - ]); + ",$params); } - - public function provinceActivity(int $info_id, int $province_id): array + public function provinceActivity(Request $request, int $info_id): array { + $params = [ + 'infoId' => $info_id, + ]; + + $dateFields = [ + 'created_at', + 'activity_date_time', + 'judiciary_document_upload_date', + 'action_date', + ]; + + + foreach ($dateFields as $field) { + $params["{$field}_from"] = NULL; + $params["{$field}_to"] = NULL; + $params["{$field}_from_2"] = NULL; + $params["{$field}_to_2"] = NULL; + } + + foreach (json_decode($request->filters, true) as $filter) { + if ($filter['fn'] === "between") + { + $field = $filter['id']; + $params["{$field}_from"] = $filter['value'][0] . ' 00:00:00'; + $params["{$field}_to"] = $filter['value'][1] . ' 23:59:59'; + $params["{$field}_from_2"] = $filter['value'][0] . ' 00:00:00'; + $params["{$field}_to_2"] = $filter['value'][1] . ' 23:59:59'; + } + if ($filter['id'] === "province_id") + { + $params["provinceId"] = $filter['value']; + } + } + return DB::select(" WITH edareh_data AS ( SELECT @@ -105,6 +181,21 @@ class OperatorService ON e.id = t.edare_shahri_id AND t.axis_type_id = a.id AND t.info_id = :infoId + AND ( + (:created_at_from IS NULL OR :created_at_to IS NULL) + OR t.created_at BETWEEN :created_at_from_2 AND :created_at_to_2) + AND ( + (:activity_date_time_from IS NULL OR :activity_date_time_to IS NULL) + OR t.activity_date_time BETWEEN :activity_date_time_from_2 AND :activity_date_time_to_2 + ) + AND ( + (:judiciary_document_upload_date_from IS NULL OR :judiciary_document_upload_date_to IS NULL) + OR t.judiciary_document_upload_date BETWEEN :judiciary_document_upload_date_from_2 AND :judiciary_document_upload_date_to_2 + ) + AND ( + (:action_date_from IS NULL OR :action_date_to IS NULL) + OR t.action_date BETWEEN :action_date_from_2 AND :action_date_to_2 + ) WHERE e.province_id = :provinceId GROUP BY e.id, a.id ) @@ -137,9 +228,6 @@ class OperatorService GROUP BY axis_type_id ORDER BY edare_id , axis_type_id - ", [ - 'provinceId' => $province_id, - 'infoId' => $info_id, - ]); + ", $params); } } \ No newline at end of file