create new category for Road patrole service

This commit is contained in:
2025-06-22 10:35:58 +03:30
parent 9eea764477
commit dc887a5215
8 changed files with 107 additions and 87 deletions

View File

@@ -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']);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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']);

View File

@@ -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);

View File

@@ -0,0 +1,35 @@
<?php
namespace App\Services\Cartables\RoadPatrol;
use App\Facades\DataTable\DataTableFacade;
use App\Models\RoadPatrol;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class OperatorService
{
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;
}
}

View File

@@ -1,74 +1,14 @@
<?php
namespace App\Services\Cartables;
namespace App\Services\Cartables\RoadPatrol;
use App\Facades\DataTable\DataTableFacade;
use App\Models\RoadPatrol;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class RoadPatrolTableService
class ReportService
{
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->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();

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Services\Cartables\RoadPatrol;
use App\Facades\DataTable\DataTableFacade;
use App\Models\RoadPatrol;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SupervisiorService
{
public function supervisorCartableReport(Request $request, $loadRelations = false)
{
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$user = auth()->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;
}
}