diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index d4382427..32f032f0 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -8,9 +8,8 @@ use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; -use App\Models\RoadObserved; use App\Models\RoadPatrol; -use App\Services\Cartables\RoadPatrolTableService; +use App\Services\Cartables\RoadPatrol\ReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; @@ -19,7 +18,7 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class RoadPatrolReportController extends Controller { use ApiResponse; - public function countryPatrolActivity(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function countryPatrolActivity(Request $request, ReportService $roadPatrolTableService): JsonResponse { $activities = $roadPatrolTableService->countryActivity($request); @@ -31,7 +30,7 @@ class RoadPatrolReportController extends Controller ]); } - public function provincePatrolActivity(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function provincePatrolActivity(Request $request, ReportService $roadPatrolTableService): JsonResponse { $request->validate(["province_id" => "required",]); @@ -45,7 +44,7 @@ class RoadPatrolReportController extends Controller ]); } - public function countryActivityExcel(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function countryActivityExcel(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $activities = $roadPatrolTableService->countryActivity($request); $provinces = Province::all(['id', 'name_fa']); @@ -58,7 +57,7 @@ class RoadPatrolReportController extends Controller ]), $name); } - public function provinceActivityExcel(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function provinceActivityExcel(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $activities = $roadPatrolTableService->provinceActivity($request); $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 3d0de3b9..a8d9fbe1 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -16,8 +16,8 @@ use App\Models\Mission; use App\Models\RoadItemsProject; use App\Models\RoadObserved; use App\Models\RoadPatrol; +use App\Services\Cartables\RoadPatrol\ReportService; use App\Services\NominatimService; -use App\Services\Cartables\RoadPatrolTableService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -32,7 +32,7 @@ class RoadPatrolProjectController extends Controller { use ApiResponse; - public function supervisorIndex(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function supervisorIndex(Request $request, ReportService $roadPatrolTableService): JsonResponse { $data = $roadPatrolTableService->supervisorCartableReport($request); @@ -82,14 +82,14 @@ class RoadPatrolProjectController extends Controller return $this->successResponse(); } - public function supervisorCartableReport(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function supervisorCartableReport(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolTableService->supervisorCartableReport($request, true); return Excel::download(new SupervisorCartableReport($data['data']), $name); } - public function operatorIndex(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function operatorIndex(Request $request, ReportService $roadPatrolTableService): JsonResponse { $data = $roadPatrolTableService->operatorCartableReport($request); return response()->json($data); @@ -331,7 +331,7 @@ class RoadPatrolProjectController extends Controller return $this->successResponse($roadPatrol); } - public function operatorCartableReport(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function operatorCartableReport(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolTableService->operatorCartableReport($request, true); diff --git a/app/Http/Controllers/V3/RoadPatrole/OperatorController.php b/app/Http/Controllers/V3/RoadPatrole/OperatorController.php index c423388c..a61fe47d 100644 --- a/app/Http/Controllers/V3/RoadPatrole/OperatorController.php +++ b/app/Http/Controllers/V3/RoadPatrole/OperatorController.php @@ -5,7 +5,6 @@ namespace App\Http\Controllers\V3\RoadPatrole; use App\Enums\MissionStates; use App\Exports\V3\RoadPatrols\OperatorCartableReport; -use App\Exports\V3\RoadPatrols\ProvinceActivity; use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; use App\Http\Requests\V3\RoadPatrol\DeleteRequest; @@ -16,7 +15,7 @@ use App\Models\InfoItem; use App\Models\Mission; use App\Models\RoadItemsProject; use App\Models\RoadPatrol; -use App\Services\Cartables\RoadPatrolTableService; +use App\Services\Cartables\RoadPatrol\OperatorService; use App\Services\NominatimService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; @@ -31,12 +30,12 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class OperatorController extends Controller { use ApiResponse; - public function index(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function index(Request $request, OperatorService $roadPatrolTableService): JsonResponse { $data = $roadPatrolTableService->operatorCartableReport($request); return response()->json($data); } - public function operatorCartableReport(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function operatorCartableReport(Request $request, OperatorService $roadPatrolTableService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolTableService->operatorCartableReport($request, true); diff --git a/app/Http/Controllers/V3/RoadPatrole/ReportController.php b/app/Http/Controllers/V3/RoadPatrole/ReportController.php index a900029e..8d12d301 100644 --- a/app/Http/Controllers/V3/RoadPatrole/ReportController.php +++ b/app/Http/Controllers/V3/RoadPatrole/ReportController.php @@ -9,7 +9,7 @@ use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; use App\Models\RoadPatrol; -use App\Services\Cartables\RoadPatrolTableService; +use App\Services\Cartables\RoadPatrol\ReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; @@ -70,7 +70,7 @@ class ReportController extends Controller $data['observed_items'] = $observed_items; return $this->successResponse($data); } - public function countryPatrolActivity(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function countryPatrolActivity(Request $request, ReportService $roadPatrolTableService): JsonResponse { $activities = $roadPatrolTableService->countryActivity($request); @@ -82,7 +82,7 @@ class ReportController extends Controller ]); } - public function provincePatrolActivity(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function provincePatrolActivity(Request $request, ReportService $roadPatrolTableService): JsonResponse { $request->validate(["province_id" => "required",]); @@ -96,7 +96,7 @@ class ReportController extends Controller ]); } - public function countryActivityExcel(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function countryActivityExcel(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $activities = $roadPatrolTableService->countryActivity($request); $provinces = Province::all(['id', 'name_fa']); @@ -109,7 +109,7 @@ class ReportController extends Controller ]), $name); } - public function provinceActivityExcel(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function provinceActivityExcel(Request $request, ReportService $roadPatrolTableService): BinaryFileResponse { $activities = $roadPatrolTableService->provinceActivity($request); $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); diff --git a/app/Http/Controllers/V3/RoadPatrole/SupervisorController.php b/app/Http/Controllers/V3/RoadPatrole/SupervisorController.php index e5be5893..ad6bead0 100644 --- a/app/Http/Controllers/V3/RoadPatrole/SupervisorController.php +++ b/app/Http/Controllers/V3/RoadPatrole/SupervisorController.php @@ -2,12 +2,10 @@ namespace App\Http\Controllers\V3\RoadPatrole; -use App\Exports\V3\RoadPatrols\CountryActivity; use App\Exports\V3\RoadPatrols\SupervisorCartableReport; use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; -use App\Models\Province; -use App\Services\Cartables\RoadPatrolTableService; +use App\Services\Cartables\RoadPatrol\SupervisiorService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; @@ -17,7 +15,7 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class SupervisorController extends Controller { use ApiResponse; - public function index(Request $request, RoadPatrolTableService $roadPatrolTableService): JsonResponse + public function index(Request $request, SupervisiorService $roadPatrolTableService): JsonResponse { $data = $roadPatrolTableService->supervisorCartableReport($request); @@ -31,7 +29,7 @@ class SupervisorController extends Controller return response()->json($data); } - public function supervisorCartableReport(Request $request, RoadPatrolTableService $roadPatrolTableService): BinaryFileResponse + public function supervisorCartableReport(Request $request, SupervisiorService $roadPatrolTableService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolTableService->supervisorCartableReport($request, true); diff --git a/app/Services/Cartables/RoadPatrol/OperatorService.php b/app/Services/Cartables/RoadPatrol/OperatorService.php new file mode 100644 index 00000000..3fcc0306 --- /dev/null +++ b/app/Services/Cartables/RoadPatrol/OperatorService.php @@ -0,0 +1,35 @@ +select([ + 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' + ]) + ->where('operator_id', '=', auth()->user()->id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } +} \ No newline at end of file diff --git a/app/Services/Cartables/RoadPatrolTableService.php b/app/Services/Cartables/RoadPatrol/ReportService.php similarity index 74% rename from app/Services/Cartables/RoadPatrolTableService.php rename to app/Services/Cartables/RoadPatrol/ReportService.php index d43a45d7..827648b3 100644 --- a/app/Services/Cartables/RoadPatrolTableService.php +++ b/app/Services/Cartables/RoadPatrol/ReportService.php @@ -1,74 +1,14 @@ user(); - $query = null; - - if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) { - $query = RoadPatrol::query() - ->select([ - 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' - ]) - ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); - } - elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) { - if (is_null($user->province_id)) { - return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); - } - $query = RoadPatrol::query() - ->select([ - 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' - ]) - ->where('province_id', '=', $user->province_id) - ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); - } - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - - return $data; - } - - public function operatorCartableReport(Request $request, $loadRelations = false) - { - $allowedFilters = ['*']; - $allowedSortings = ['*']; - - $query = RoadPatrol::query() - ->select([ - 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', - 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' - ]) - ->where('operator_id', '=', auth()->user()->id) - ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - - return $data; - } - public function countryActivity(Request $request): array { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); diff --git a/app/Services/Cartables/RoadPatrol/SupervisiorService.php b/app/Services/Cartables/RoadPatrol/SupervisiorService.php new file mode 100644 index 00000000..5fb85820 --- /dev/null +++ b/app/Services/Cartables/RoadPatrol/SupervisiorService.php @@ -0,0 +1,49 @@ +user(); + $query = null; + + if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) { + $query = RoadPatrol::query() + ->select([ + 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' + ]) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + } + elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) { + if (is_null($user->province_id)) { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + $query = RoadPatrol::query() + ->select([ + 'province_fa', 'province_id', 'id', 'edare_id', 'edare_name', 'start_time', 'end_time', 'created_at', 'description', + 'distance', 'vehicle_runtime', 'fuel_consumption', 'stop_points' + ]) + ->where('province_id', '=', $user->province_id) + ->when($loadRelations, fn ($query) => $query->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + } + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } +} \ No newline at end of file