From 9e1b25d9a185524c72176c99731605e458f174d8 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Mon, 7 Apr 2025 18:13:23 +0330 Subject: [PATCH 01/12] creat index forRoadMaintenanceStationController and write routs for this --- .../RoadMaintenanceStationController.php | 138 ++++++++++++++++++ routes/v3.php | 9 ++ 2 files changed, 147 insertions(+) create mode 100644 app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php new file mode 100644 index 00000000..220ab30f --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -0,0 +1,138 @@ +user(); + auth()->user()->addActivityComplete(1019); + + $allowedFilters = ['*']; + $allowedSortings = ['*']; + + $province = $request->province ?? null; + $status = $request->status ?? null; + $type = $request->type ?? null; + + $query = RahdariPoint::with('files'); + if ($user->can('show-tollhouse')) { + $query + ->when($province, function ($query, $province) { + return $query->where('province_id', $province); + }) + ->when($status, function ($query, $status) { + return $query->where('status', $status); + }) + ->when($type, function ($query, $type) { + return $query->where('type', $type); + }); + + } elseif ($user->can('show-tollhouse-province')) { + $query + ->where('province_id', $user->province_id) + ->when($status, function ($query, $status) { + return $query->where('status', $status); + }) + ->when($type, function ($query, $type) { + return $query->where('type', $type); + }); + + } else { + return response()->json(['message' => 'Forbidden'], 403); + } + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings + ); + + + $processedData = []; + + foreach ($data['data'] as $key => $item) { + $processedData[$key] = $item; + + + if ($user->can('edit-tollhouse')) { + $processedData[$key]['canEdit'] = 1; + } elseif ($user->can('edit-tollhouse-province')) { + $processedData[$key]['canEdit'] = $item['province_id'] == $user->province_id ? 1 : 0; + } else { + $processedData[$key]['canEdit'] = 0; + } + + + if ($user->can('delete-tollhouse')) { + $processedData[$key]['canDelete'] = 1; + } elseif ($user->can('delete-tollhouse-province')) { + $processedData[$key]['canDelete'] = $item['province_id'] == $user->province_id ? 1 : 0; + } else { + $processedData[$key]['canDelete'] = 0; + } + } + + $data['data'] = $processedData; + + return response()->json($data); + } + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/routes/v3.php b/routes/v3.php index bef397bb..42e8c110 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -10,6 +10,7 @@ use App\Http\Controllers\V3\Dashboard\ItemsManagementController; use App\Http\Controllers\V3\Dashboard\ObservedItemController; use App\Http\Controllers\V3\Dashboard\AccidentReceiptController; use App\Http\Controllers\V3\Dashboard\OtpManagementController; +use App\Http\Controllers\V3\Dashboard\RoadMaintenanceStationController; use App\Http\Controllers\V3\Dashboard\Reports\AccidentReceiptReportController; use App\Http\Controllers\V3\Dashboard\Reports\RoadItemsReportController; use App\Http\Controllers\V3\Dashboard\Reports\RoadPatrolReportController; @@ -385,3 +386,11 @@ Route::prefix('permissions') }); Route::get('/notifications', NotificationController::class)->name('notifications'); + +Route::prefix('Road-Maintenance-Station') + ->name('Road-Maintenance-Station.') + ->controller( RoadMaintenanceStationController::class) + ->group(function () { + Route::get('/', 'index')->name('index'); + }); + From 93d177537999b8d4b56a5c6d2442c9a034878be0 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 8 Apr 2025 11:11:26 +0330 Subject: [PATCH 02/12] add axis type to safety excel --- .../Dashboard/SafetyAndPrivacyController.php | 22 +++++++++++++++ .../ThirdStepStoreRequest.php | 1 + .../SafetyAndPrivacyTableService.php | 2 +- ...add_column_to_safety_and_privacy_table.php | 28 +++++++++++++++++++ .../SafetyAndPrivacy/CartableReport.blade.php | 21 ++++++++------ 5 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2025_04_07_133638_add_column_to_safety_and_privacy_table.php diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index 463a2900..df748c35 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -141,6 +141,7 @@ class SafetyAndPrivacyController extends Controller 'step_fa' => 'گام سوم (برخورد)', 'action_picture' => FileFacade::save($request->action_picture, "safety_and_privacy/{$safetyAndPrivacy->id}/action_picture"), 'action_picture_document_upload_date' => now(), + 'action_date' => $request->action_date, ]); $user->addActivityComplete(1136); @@ -201,4 +202,25 @@ class SafetyAndPrivacyController extends Controller ->select('id', 'item', 'item_str', 'sub_item_str as name', 'sub_item_unit as unit', 'needs_image', 'needs_end_point', 'sub_item') ->get()); } + + public function map(Request $request): JsonResponse + { + $province = $request->province_id; + $edare_shahri = $request->edare_shahri_id; + $step = $request->step; + $info_id = $request->info_id; + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + + $activities = SafetyAndPrivacy::query() + ->when($province, fn ($query) => $query->where('province_id', '=', $province)) + ->when($edare_shahri, fn($query) => $query->where('edarate_shahri_id', '=', $edare_shahri)) + ->when($step, fn($query) => $query->where('step', '=', $step)) + ->when($info_id, fn($query) => $query->where('info_id', '=', $info_id)) + ->whereBetween('created_at', [$fromDate, $toDate]) + ->select('id', 'lat', 'lon', 'step') + ->get(); + + return $this->successResponse($activities); + } } diff --git a/app/Http/Requests/V3/SafetyAndPrivacy/ThirdStepStoreRequest.php b/app/Http/Requests/V3/SafetyAndPrivacy/ThirdStepStoreRequest.php index 652ea3a4..91879ed5 100644 --- a/app/Http/Requests/V3/SafetyAndPrivacy/ThirdStepStoreRequest.php +++ b/app/Http/Requests/V3/SafetyAndPrivacy/ThirdStepStoreRequest.php @@ -23,6 +23,7 @@ class ThirdStepStoreRequest extends FormRequest { return [ 'action_picture' => 'required|image', + 'action_date' => 'required|date', ]; } } diff --git a/app/Services/Cartables/SafetyAndPrivacyTableService.php b/app/Services/Cartables/SafetyAndPrivacyTableService.php index e7c9a85d..891999cc 100644 --- a/app/Services/Cartables/SafetyAndPrivacyTableService.php +++ b/app/Services/Cartables/SafetyAndPrivacyTableService.php @@ -20,7 +20,7 @@ class SafetyAndPrivacyTableService $fields = ['id','lat','lon','province_id','province_fa','city_id','city_fa','edare_shahri_id','edare_shahri_name', 'recognize_picture','action_picture','operator_id','operator_name','way_id','created_at','updated_at','step', 'info_id','info_fa','activity_date_time', 'action_picture_document_upload_date', 'judiciary_document_upload_date', - 'step_fa', 'axis_type_id', 'axis_type_name' + 'step_fa', 'axis_type_id', 'axis_type_name', 'action_date' ]; if ($user->hasPermissionTo('show-safety-and-privacy-operator-cartable')) { diff --git a/database/migrations/2025_04_07_133638_add_column_to_safety_and_privacy_table.php b/database/migrations/2025_04_07_133638_add_column_to_safety_and_privacy_table.php new file mode 100644 index 00000000..b3934b8b --- /dev/null +++ b/database/migrations/2025_04_07_133638_add_column_to_safety_and_privacy_table.php @@ -0,0 +1,28 @@ +dateTime('action_date')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('safety_and_privacy', function (Blueprint $table) { + $table->dropColumn('action_date'); + }); + } +}; diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php index 48fb08bf..1888c78a 100644 --- a/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php +++ b/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php @@ -52,7 +52,15 @@ - مورد + مورد مشاهده شده + + + نوع محور + + + تاریخ ثبت @@ -60,20 +68,16 @@ - تاریخ ثبت مستندات قضایی + تاریخ بارگذاری مستندات قضایی - تاریخ اقدام + تاریخ ثبت اقدام وضعیت - - تاریخ ثبت - @@ -84,6 +88,8 @@ {{ $item['province_fa'] ?? '-' }} {{ $item['edare_shahri_name'] ?? '-' }} {{ $item['info_fa'] ?? '-' }} + {{ $item['axis_type_name'] ?? '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} @@ -95,7 +101,6 @@ {{ $item['step_fa'] ?? '-' }} - {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} @endforeach From 107f9ff469a691ad1e2298e0ffaca3773dfd4ba7 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 8 Apr 2025 14:32:41 +0330 Subject: [PATCH 03/12] add map api to safety --- routes/v3.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/v3.php b/routes/v3.php index 42e8c110..cc2cd997 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -347,6 +347,7 @@ Route::prefix('safety_and_privacy') Route::get('/{safetyAndPrivacy}', 'show')->name('show'); Route::delete('/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); Route::get('/deserialize/{safetyAndPrivacy}', 'deserialize')->name('deserialize'); + Route::get('/map', 'map')->name('map'); }); Route::prefix('safety_and_privacy_report') @@ -393,4 +394,3 @@ Route::prefix('Road-Maintenance-Station') ->group(function () { Route::get('/', 'index')->name('index'); }); - From 21f2dd7c2fb8974f4d97426bfc35a07005a7b657 Mon Sep 17 00:00:00 2001 From: joddyabott Date: Wed, 9 Apr 2025 16:21:58 +0330 Subject: [PATCH 04/12] create show,store,update and delete for RoadMaintenanceStationController --- app/Enums/RoadMaintenanceStationTypes.php | 21 ++ .../RoadMaintenanceStationController.php | 236 +++++++++++++----- .../RoadMaintenanceStation/StoreRequest.php | 57 +++++ .../RoadMaintenanceStation/UpdateRequest.php | 52 ++++ routes/v3.php | 12 +- 5 files changed, 312 insertions(+), 66 deletions(-) create mode 100644 app/Enums/RoadMaintenanceStationTypes.php create mode 100644 app/Http/Requests/V3/RoadMaintenanceStation/StoreRequest.php create mode 100644 app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php diff --git a/app/Enums/RoadMaintenanceStationTypes.php b/app/Enums/RoadMaintenanceStationTypes.php new file mode 100644 index 00000000..4d557675 --- /dev/null +++ b/app/Enums/RoadMaintenanceStationTypes.php @@ -0,0 +1,21 @@ + "دائمی", + 2 => "موقت", + 3 => "فصلی", + ]; + + return $mapArray[$state]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index 220ab30f..7b1069ab 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -2,12 +2,22 @@ namespace App\Http\Controllers\V3\Dashboard; +use App\Enums\RoadMaintenanceStationTypes; use App\Facades\DataTable\DataTableFacade; +use App\Facades\File\FileFacade; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\RoadMaintenanceStation\StoreRequest; +use App\Http\Requests\V3\RoadMaintenanceStation\UpdateRequest; use App\Http\Traits\ApiResponse; +use App\Models\City; +use App\Models\Province; use App\Models\RahdariPoint; +use App\Models\RahdariPointHistory; +use Hekmatinasser\Verta\Facades\Verta; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; class RoadMaintenanceStationController extends Controller @@ -22,36 +32,21 @@ class RoadMaintenanceStationController extends Controller $allowedFilters = ['*']; $allowedSortings = ['*']; - $province = $request->province ?? null; - $status = $request->status ?? null; - $type = $request->type ?? null; + $province = $request->province; + $status = $request->status; + $type = $request->type; + + $query = RahdariPoint::with('files') + ->when($status, fn ($query, $status) => $query->where('status', $status)) + ->when($type, fn ($query, $type) => $query->where('type', $type)); - $query = RahdariPoint::with('files'); if ($user->can('show-tollhouse')) { - $query - ->when($province, function ($query, $province) { - return $query->where('province_id', $province); - }) - ->when($status, function ($query, $status) { - return $query->where('status', $status); - }) - ->when($type, function ($query, $type) { - return $query->where('type', $type); - }); - - } elseif ($user->can('show-tollhouse-province')) { - $query - ->where('province_id', $user->province_id) - ->when($status, function ($query, $status) { - return $query->where('status', $status); - }) - ->when($type, function ($query, $type) { - return $query->where('type', $type); - }); - - } else { - return response()->json(['message' => 'Forbidden'], 403); + $query->when($province, fn($query) => $query->where('province_id', $province)); } + elseif ($user->can('show-tollhouse-province')) { + $query->where('province_id', $user->province_id); + } + $data = DataTableFacade::run( $query, $request, @@ -60,79 +55,190 @@ class RoadMaintenanceStationController extends Controller ); - $processedData = []; - - foreach ($data['data'] as $key => $item) { - $processedData[$key] = $item; - - + foreach ($data['data'] as &$stations) { if ($user->can('edit-tollhouse')) { - $processedData[$key]['canEdit'] = 1; + $stations['canEdit'] = 1; } elseif ($user->can('edit-tollhouse-province')) { - $processedData[$key]['canEdit'] = $item['province_id'] == $user->province_id ? 1 : 0; + if ($user->province_id) { + $stations['canEdit'] = 1; + } else { + $stations['canEdit'] = 0; + } } else { - $processedData[$key]['canEdit'] = 0; + $stations['canEdit'] = 0; } - if ($user->can('delete-tollhouse')) { - $processedData[$key]['canDelete'] = 1; + $stations['canDelete'] = 1; } elseif ($user->can('delete-tollhouse-province')) { - $processedData[$key]['canDelete'] = $item['province_id'] == $user->province_id ? 1 : 0; + if ($user->province_id) { + $stations['canDelete'] = 1; + } else { + $stations['canDelete'] = 0; + } } else { - $processedData[$key]['canDelete'] = 0; + $stations['canDelete'] = 0; } } - $data['data'] = $processedData; - return response()->json($data); } - /** - * Show the form for creating a new resource. - */ - public function create() - { - // - } /** * Store a newly created resource in storage. */ - public function store(Request $request) + public function store(StoreRequest $request): JsonResponse { - // + $provinceName = Province::query()->find($request->province_id)->name_fa; + + $cityName = City::query()->find($request->city_id)->name_fa; + + $station = RahdariPoint::query()->create([ + 'province_id' => $request->province_id, + 'province_name' => $provinceName, + 'city_id' => $request->city_id, + 'city_name' => $cityName, + 'name' => $request->name, + 'status' => $request->status, + 'type' => $request->type, + 'type_fa' =>RoadMaintenanceStationTypes::name($request->type), + 'team_num' => $request->team_num, + 'staff_num' => $request->staff_num, + 'phone' => $request->phone, + 'responsible_name' => $request->responsible_name, + 'responsible_mobile' => $request->responsible_mobile, + 'successor_name' => $request->successor_name, + 'successor_mobile' => $request->successor_mobile, + 'machines_light' => $request->machines_light, + 'machines_sheavy' => $request->machines_sheavy, + 'machines_heavy' => $request->machines_heavy, + 'code' => $request->code, + 'lat' => $request->lat, + 'lng' => $request->lng, + 'updated_at_fa' => verta()->now()->format('Y/m/d H:i:s'), + ]); + + $uploadPaths = [ + 'overview_files_1' => 'road_stations', + 'overview_files_2' => 'road_stations', + 'overview_files_3' => 'road_stations', + 'overview_files_4' => 'road_stations', + 'overview_files_5' => 'road_stations', + ]; + + foreach ($uploadPaths as $field => $path) { + if ($request->hasFile($field)) { + $station->files()->create([ + 'path' => FileFacade::save($request->$field, $path) + ]); + } + } + + return $this->successResponse(); } /** * Display the specified resource. */ - public function show(string $id) + public function show(RahdariPoint $rahdariPoint): JsonResponse { - // - } - - /** - * Show the form for editing the specified resource. - */ - public function edit(string $id) - { - // + return $this->successResponse( + $rahdariPoint->load('files') + ); } /** * Update the specified resource in storage. */ - public function update(Request $request, string $id) + public function update(UpdateRequest $request, RahdariPoint $rahdariPoint): JsonResponse { - // + + RahdariPointHistory::query()->create([ + 'user_id' => $request->user()->id, + 'point_id' => $rahdariPoint->id, + 'previous_status' => $rahdariPoint->status, + 'previous_type' => $rahdariPoint->type, + 'previous_team_num' => $rahdariPoint->team_num, + 'previous_staff_num' => $rahdariPoint->staff_num, + 'previous_phone' => $rahdariPoint->phone, + 'previous_responsible_name' => $rahdariPoint->responsible_name, + 'previous_responsible_mobile' => $rahdariPoint->responsible_mobile, + 'previous_successor_name' => $rahdariPoint->successor_name, + 'previous_successor_mobile' => $rahdariPoint->successor_mobile, + 'previous_machines_light' => $rahdariPoint->machines_light, + 'previous_machines_sheavy' => $rahdariPoint->machines_sheavy, + 'previous_machines_heavy' => $rahdariPoint->machines_heavy, + 'previous_lat' => $rahdariPoint->lat, + 'previous_lng' => $rahdariPoint->lng, + 'new_files' => json_encode($rahdariPoint->files), + ]); + + $rahdariPoint->update([ + 'status' => $request->input('status', $rahdariPoint->status), + 'type' => $request->input('type', $rahdariPoint->type), + 'type_fa' => RoadMaintenanceStationTypes::name($request->type) ?? $rahdariPoint->type_fa, + 'team_num' => $request->input('team_num', $rahdariPoint->team_num), + 'staff_num' => $request->input('staff_num', $rahdariPoint->staff_num), + 'phone' => $request->input('phone', $rahdariPoint->phone), + 'responsible_name' => $request->input('responsible_name', $rahdariPoint->responsible_name), + 'responsible_mobile' => $request->input('responsible_mobile', $rahdariPoint->responsible_mobile), + 'successor_name' => $request->input('successor_name', $rahdariPoint->successor_name), + 'successor_mobile' => $request->input('successor_mobile', $rahdariPoint->successor_mobile), + 'machines_light' => $request->input('machines_light', $rahdariPoint->machines_light), + 'machines_sheavy' => $request->input('machines_sheavy', $rahdariPoint->machines_sheavy), + 'machines_heavy' => $request->input('machines_heavy', $rahdariPoint->machines_heavy), + 'lat' => $request->input('lat', $rahdariPoint->lat), + 'lng' => $request->input('lng', $rahdariPoint->lng), + 'lat_from' => $request->lat_from, + 'lng_from' => $request->lng_from, + 'geometry' => $request->geometry, + 'lat_to' => $request->lat_to, + 'lng_to' => $request->lng_to, + 'color' => $request->color, + 'updated_at_fa' => verta()->now()->format('Y/m/d H:i:s'), + ]); + + $uploadFields = [ + 'overview_files_1', + 'overview_files_2', + 'overview_files_3', + 'overview_files_4', + 'overview_files_5', + ]; + + foreach ($uploadFields as $index => $field) { + if ($request->hasFile($field)) { + $existingFile = $rahdariPoint->files->get($index); + + $newPath = FileFacade::save($request->$field, 'rahdari_points/overview'); + + if ($existingFile) { + FileFacade::delete($existingFile->path); + $existingFile->update(['path' => $newPath]); + } else { +// dd($rahdariPoint->id); + $rahdariPoint->files()->create(['path' => $newPath]); + } + } + } + + return $this->successResponse(); } /** * Remove the specified resource from storage. */ - public function destroy(string $id) + public function destroy(RahdariPoint $rahdariPoint): JsonResponse { - // + foreach ($rahdariPoint->files as $file) { + FileFacade::delete($file->path); + } + + RahdariPointHistory::query()->where('point_id', $rahdariPoint->id)->delete(); + + $rahdariPoint->files()->delete(); + $rahdariPoint->delete(); + + return $this->successResponse(); } } diff --git a/app/Http/Requests/V3/RoadMaintenanceStation/StoreRequest.php b/app/Http/Requests/V3/RoadMaintenanceStation/StoreRequest.php new file mode 100644 index 00000000..e58698ea --- /dev/null +++ b/app/Http/Requests/V3/RoadMaintenanceStation/StoreRequest.php @@ -0,0 +1,57 @@ +user(); + + return $user->hasPermissionTo('add-tollhouse') || + ($user->hasPermissionTo('add-tollhouse-province') && $this->province_id == $user->province_id); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array|string> + */ + public function rules(): array + { + return [ + 'province_id' => 'required|exists:provinces,id', + 'city_id' => 'required|exists:cities,id', + 'name' => 'required|string|max:255', + 'status' => 'required|in:0,1', + 'type' =>'required|in:1,2,3', + 'team_num' => 'numeric', + 'staff_num' => 'numeric', + 'phone' => 'string|max:50', + 'responsible_name' => 'string|max:255', + 'responsible_mobile' => 'string|max:50', + 'successor_name' => 'string|max:255', + 'successor_mobile' => 'string|max:50', + 'machines_light' => 'numeric', + 'machines_sheavy' => 'numeric', + 'machines_heavy' => 'numeric', + 'code' => 'string|max:50', + 'lat' => 'numeric', + 'lng' => 'numeric', + 'overview_files_1' => 'file|mimes:jpg,jpeg,png,pdf|max:51200', + 'overview_files_2' => 'file|mimes:jpg,jpeg,png,pdf|max:51200', + 'overview_files_3' => 'file|mimes:jpg,jpeg,png,pdf|max:51200', + 'overview_files_4' => 'file|mimes:jpg,jpeg,png,pdf|max:51200', + 'overview_files_5' => 'file|mimes:jpg,jpeg,png,pdf|max:51200', + ]; + } +} diff --git a/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php b/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php new file mode 100644 index 00000000..892394aa --- /dev/null +++ b/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php @@ -0,0 +1,52 @@ +|string> + */ + public function rules(): array + { + return [ + 'status' => 'integer|in:0,1', + 'type' => 'integer|in:1,2,3', + 'team_num' => 'numeric', + 'staff_num' => 'numeric', + 'phone' => 'string|max:50', + 'responsible_name' => 'string|max:255', + 'responsible_mobile' => 'string|max:50', + 'successor_name' => 'string|max:255', + 'successor_mobile' => 'string|max:50', + 'machines_light' => 'numeric', + 'machines_sheavy' => 'numeric', + 'machines_heavy' => 'numeric', + 'lat' => 'numeric', + 'lng' => 'numeric', + 'lat_from' => 'numeric', + 'lng_from' => 'numeric', + 'lat_to' => 'numeric', + 'lng_to' => 'numeric', + 'color' => 'numeric', + 'geometry' => 'numeric', + 'overview_files_1' => 'file|mimes:jpg,jpeg,png,pdf|max:5120', + 'overview_files_2' => 'file|mimes:jpg,jpeg,png,pdf|max:5120', + 'overview_files_3' => 'file|mimes:jpg,jpeg,png,pdf|max:5120', + 'overview_files_4' => 'file|mimes:jpg,jpeg,png,pdf|max:5120', + 'overview_files_5' => 'file|mimes:jpg,jpeg,png,pdf|max:5120', + ]; + } +} diff --git a/routes/v3.php b/routes/v3.php index 42e8c110..45e8a384 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -391,6 +391,16 @@ Route::prefix('Road-Maintenance-Station') ->name('Road-Maintenance-Station.') ->controller( RoadMaintenanceStationController::class) ->group(function () { - Route::get('/', 'index')->name('index'); + Route::get('/', 'index')->name('index') + ->middleware('permission:show-tollhouse|show-tollhouse-province'); + Route::post('/', 'store')->name('store') + ->middleware('permission:add-tollhouse|add-tollhouse-province'); + Route::get('/{rahdariPoint}', 'show')->name('show') + ->middleware('permission:show-tollhouse|show-tollhouse-province'); + Route::post('/{rahdariPoint}', 'update')->name('update') + ->middleware('permission:edit-tollhouse|edit-tollhouse-province'); + Route::delete('/{rahdariPoint}', 'destroy')->name('destroy') + ->middleware('permission:delete-tollhouse|delete-tollhouse-province'); + }); From a1d3b86a6958f63e52d96cb3af18b12cd888885e Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 12 Apr 2025 12:55:33 +0330 Subject: [PATCH 05/12] add map report to safety --- .../Commands/RoadObservationProblems.php | 2 +- app/Http/Controllers/Api/BiController.php | 4 ++- .../Dashboard/SafetyAndPrivacyController.php | 25 ++++++------------- routes/v3.php | 2 +- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/app/Console/Commands/RoadObservationProblems.php b/app/Console/Commands/RoadObservationProblems.php index d56da6bb..c778d66c 100755 --- a/app/Console/Commands/RoadObservationProblems.php +++ b/app/Console/Commands/RoadObservationProblems.php @@ -99,7 +99,7 @@ class RoadObservationProblems extends Command 'EndTime' => $value->EndTime ?? null, 'StartDate' => $value->StartDate ?? null, 'EndDate' => $value->EndDate ?? null, - 'StartTime_DateTime' => $value->StartTime_DateTime ?? null, + 'StartTime_DateTime' => $value->StartTime_DateTime ? Carbon::createFromFormat('m/d/Y h:i:s A', $value->StartTime_DateTime)->format('Y-m-d H:i:s') : null, 'StartTime_DateTime_fa' => Verta::instance($value->StartTime_DateTime) ?? null, 'EndTime_DateTime' => $value->EndTime_DateTime ?? null, 'AutoID' => $value->AutoID ?? null, diff --git a/app/Http/Controllers/Api/BiController.php b/app/Http/Controllers/Api/BiController.php index 91272974..ecb4de03 100644 --- a/app/Http/Controllers/Api/BiController.php +++ b/app/Http/Controllers/Api/BiController.php @@ -150,6 +150,7 @@ class BiController extends Controller public function getDiagram(Request $request) { + ini_set('memory_limit', '-1'); $subjectID = $request->subject_id; $provinceID = $request->province_id; $dateFrom = $request->from_date; @@ -1021,6 +1022,7 @@ class BiController extends Controller public function separationActivityTypeRahdariActivities(Request $request) { + ini_set('memory_limit', '-1'); $dateFrom = $request->from_date; $dateTo = $request->to_date; $provinceID = $request->province_id ?? null; @@ -1198,4 +1200,4 @@ class BiController extends Controller 'data' => round($camps, 2) ]); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index df748c35..ef1caacf 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\V3\Dashboard; use App\Enums\AxisTypes; use App\Exports\V3\SafetyAndPrivacy\CartableReport; +use App\Facades\DataTable\DataTableFacade; use App\Facades\File\FileFacade; use App\Http\Controllers\Controller; use App\Http\Requests\V3\SafetyAndPrivacy\FirstStepStoreRequest; @@ -205,22 +206,12 @@ class SafetyAndPrivacyController extends Controller public function map(Request $request): JsonResponse { - $province = $request->province_id; - $edare_shahri = $request->edare_shahri_id; - $step = $request->step; - $info_id = $request->info_id; - $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); - - $activities = SafetyAndPrivacy::query() - ->when($province, fn ($query) => $query->where('province_id', '=', $province)) - ->when($edare_shahri, fn($query) => $query->where('edarate_shahri_id', '=', $edare_shahri)) - ->when($step, fn($query) => $query->where('step', '=', $step)) - ->when($info_id, fn($query) => $query->where('info_id', '=', $info_id)) - ->whereBetween('created_at', [$fromDate, $toDate]) - ->select('id', 'lat', 'lon', 'step') - ->get(); - - return $this->successResponse($activities); + return DataTableFacade::run( + SafetyAndPrivacy::query(), + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: ['id', 'lat', 'lon', 'step'] + ); } } diff --git a/routes/v3.php b/routes/v3.php index cc2cd997..cd08f3cb 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -341,13 +341,13 @@ Route::prefix('safety_and_privacy') Route::get('/excel_report', 'excelReport')->name('excelReport')->middleware('permission:show-safety-and-privacy-operator-cartable|show-safety-and-privacy-operator-cartable-province|show-safety-and-privacy-operator-cartable-edarate-shahri'); Route::post('/first_step_store', 'firstStepStore')->name('firstStepStore')->middleware('permission:add-safety-and-privacy'); Route::get('/sub_items', 'subItems')->name('subItems'); + Route::get('/map', 'map')->name('map'); Route::post('/second_step_store/{safetyAndPrivacy}', 'secondStepStore')->name('secondStepStore')->middleware('permission:add-safety-and-privacy'); Route::post('/third_step_store/{safetyAndPrivacy}', 'thirdStepStore')->name('thirdStepStore')->middleware('permission:add-safety-and-privacy'); Route::post('/{safetyAndPrivacy}', 'update')->name('update')->middleware('permission:update-safety-and-privacy'); Route::get('/{safetyAndPrivacy}', 'show')->name('show'); Route::delete('/{safetyAndPrivacy}', 'destroy')->name('destroy')->middleware('permission:delete-safety-and-privacy'); Route::get('/deserialize/{safetyAndPrivacy}', 'deserialize')->name('deserialize'); - Route::get('/map', 'map')->name('map'); }); Route::prefix('safety_and_privacy_report') From c5894051c1f9e3dcf945c41f16cc4e5d7b765ac5 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 12 Apr 2025 14:56:43 +0330 Subject: [PATCH 06/12] return json type --- .../Controllers/V3/Dashboard/SafetyAndPrivacyController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php index ef1caacf..5741f4ff 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacyController.php @@ -206,12 +206,12 @@ class SafetyAndPrivacyController extends Controller public function map(Request $request): JsonResponse { - return DataTableFacade::run( + return response()->json(DataTableFacade::run( SafetyAndPrivacy::query(), $request, allowedFilters: ['*'], allowedSortings: ['*'], allowedSelects: ['id', 'lat', 'lon', 'step'] - ); + )); } } From a643bdf626566a367e5ad352b43e0576db59edcc Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 12 Apr 2025 15:06:50 +0330 Subject: [PATCH 07/12] debug the index method --- .../RoadMaintenanceStationController.php | 36 ++++++++----------- routes/v3.php | 16 +++------ 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index 7b1069ab..28d3a078 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -38,12 +38,10 @@ class RoadMaintenanceStationController extends Controller $query = RahdariPoint::with('files') ->when($status, fn ($query, $status) => $query->where('status', $status)) - ->when($type, fn ($query, $type) => $query->where('type', $type)); + ->when($type, fn ($query, $type) => $query->where('type', $type)) + ->when($province, fn($query, $province) => $query->where('province_id', $province)); - if ($user->can('show-tollhouse')) { - $query->when($province, fn($query) => $query->where('province_id', $province)); - } - elseif ($user->can('show-tollhouse-province')) { + if ($user->hasPermissionTo('show-tollhouse-province')) { $query->where('province_id', $user->province_id); } @@ -56,27 +54,23 @@ class RoadMaintenanceStationController extends Controller foreach ($data['data'] as &$stations) { - if ($user->can('edit-tollhouse')) { + if ($user->hasPermissionTo('edit-tollhouse')) { $stations['canEdit'] = 1; - } elseif ($user->can('edit-tollhouse-province')) { - if ($user->province_id) { - $stations['canEdit'] = 1; - } else { - $stations['canEdit'] = 0; - } - } else { + } + elseif ($user->hasPermissionTo('edit-tollhouse-province') && $stations->province_id == $user->province_id) { + $stations['canEdit'] = 1; + } + else { $stations['canEdit'] = 0; } - if ($user->can('delete-tollhouse')) { + if ($user->hasPermissionTo('delete-tollhouse')) { $stations['canDelete'] = 1; - } elseif ($user->can('delete-tollhouse-province')) { - if ($user->province_id) { - $stations['canDelete'] = 1; - } else { - $stations['canDelete'] = 0; - } - } else { + } + elseif ($user->hasPermissionTo('delete-tollhouse-province') && $stations->province_id == $user->province_id) { + $stations['canDelete'] = 1; + } + else { $stations['canDelete'] = 0; } } diff --git a/routes/v3.php b/routes/v3.php index 28207829..54aa3439 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -392,15 +392,9 @@ Route::prefix('Road-Maintenance-Station') ->name('Road-Maintenance-Station.') ->controller( RoadMaintenanceStationController::class) ->group(function () { - Route::get('/', 'index')->name('index') - ->middleware('permission:show-tollhouse|show-tollhouse-province'); - Route::post('/', 'store')->name('store') - ->middleware('permission:add-tollhouse|add-tollhouse-province'); - Route::get('/{rahdariPoint}', 'show')->name('show') - ->middleware('permission:show-tollhouse|show-tollhouse-province'); - Route::post('/{rahdariPoint}', 'update')->name('update') - ->middleware('permission:edit-tollhouse|edit-tollhouse-province'); - Route::delete('/{rahdariPoint}', 'destroy')->name('destroy') - ->middleware('permission:delete-tollhouse|delete-tollhouse-province'); - + Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province'); + Route::post('/', 'store')->name('store')->middleware('permission:add-tollhouse|add-tollhouse-province'); + Route::get('/{rahdariPoint}', 'show')->name('show')->middleware('permission:show-tollhouse|show-tollhouse-province'); + Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); + Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); }); From 52f22656e2b8322d3b47d96f187dd71b2304cb40 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 12 Apr 2025 16:13:49 +0330 Subject: [PATCH 08/12] add action date to safety --- app/Models/SafetyAndPrivacy.php | 1 + routes/v3.php | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Models/SafetyAndPrivacy.php b/app/Models/SafetyAndPrivacy.php index 8cb61c14..ac347063 100644 --- a/app/Models/SafetyAndPrivacy.php +++ b/app/Models/SafetyAndPrivacy.php @@ -36,6 +36,7 @@ class SafetyAndPrivacy extends Model 'action_picture_document_upload_date', 'axis_type_id', 'axis_type_name', + 'action_date' ]; public $table = "safety_and_privacy"; diff --git a/routes/v3.php b/routes/v3.php index 54aa3439..211b4a6d 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -388,8 +388,8 @@ Route::prefix('permissions') Route::get('/notifications', NotificationController::class)->name('notifications'); -Route::prefix('Road-Maintenance-Station') - ->name('Road-Maintenance-Station.') +Route::prefix('road_maintenance_station') + ->name('roadMaintenanceStation.') ->controller( RoadMaintenanceStationController::class) ->group(function () { Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province'); From 822730afb13a9a50e0eaaeecb2408c4ab472a583 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 13 Apr 2025 09:54:26 +0330 Subject: [PATCH 09/12] debug rahdari point --- .../Dashboard/RoadMaintenanceStationController.php | 14 ++++---------- app/Http/Controllers/V3/NotificationController.php | 7 +++++-- app/Models/RahdariPoint.php | 9 ++++----- routes/v3.php | 2 +- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index 28d3a078..b59790da 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -136,9 +136,7 @@ class RoadMaintenanceStationController extends Controller */ public function show(RahdariPoint $rahdariPoint): JsonResponse { - return $this->successResponse( - $rahdariPoint->load('files') - ); + return $this->successResponse($rahdariPoint->load('files')); } /** @@ -146,7 +144,6 @@ class RoadMaintenanceStationController extends Controller */ public function update(UpdateRequest $request, RahdariPoint $rahdariPoint): JsonResponse { - RahdariPointHistory::query()->create([ 'user_id' => $request->user()->id, 'point_id' => $rahdariPoint->id, @@ -204,13 +201,12 @@ class RoadMaintenanceStationController extends Controller if ($request->hasFile($field)) { $existingFile = $rahdariPoint->files->get($index); - $newPath = FileFacade::save($request->$field, 'rahdari_points/overview'); + $newPath = FileFacade::save($request->field, 'rahdari_points/overview'); if ($existingFile) { FileFacade::delete($existingFile->path); $existingFile->update(['path' => $newPath]); } else { -// dd($rahdariPoint->id); $rahdariPoint->files()->create(['path' => $newPath]); } } @@ -222,14 +218,12 @@ class RoadMaintenanceStationController extends Controller /** * Remove the specified resource from storage. */ - public function destroy(RahdariPoint $rahdariPoint): JsonResponse + public function destroy(RahdariPoint $rahdariPoint): JsonResponse { foreach ($rahdariPoint->files as $file) { FileFacade::delete($file->path); } - - RahdariPointHistory::query()->where('point_id', $rahdariPoint->id)->delete(); - + $rahdariPoint->rahdariPointHistories()->delete(); $rahdariPoint->files()->delete(); $rahdariPoint->delete(); diff --git a/app/Http/Controllers/V3/NotificationController.php b/app/Http/Controllers/V3/NotificationController.php index d322a95a..01d4ae63 100644 --- a/app/Http/Controllers/V3/NotificationController.php +++ b/app/Http/Controllers/V3/NotificationController.php @@ -122,8 +122,11 @@ class NotificationController extends Controller ->get(); } - $safety_and_privacy['step_one'] = isset($activity[0]) ? $activity[0]->cnt : 0; - $safety_and_privacy['step_two'] = isset($activity[1]) ? $activity[1]->cnt : 0; + $step_one = $activity->where('step', '=', 1)->first(); + $step_two = $activity->where('step', '=', 2)->first(); + + $safety_and_privacy['step_one'] = $step_one->cnt ?? 0; + $safety_and_privacy['step_two'] = $step_two->cnt ?? 0; return $safety_and_privacy; } diff --git a/app/Models/RahdariPoint.php b/app/Models/RahdariPoint.php index 66f9fe02..3cbbc611 100644 --- a/app/Models/RahdariPoint.php +++ b/app/Models/RahdariPoint.php @@ -3,6 +3,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\MorphMany; class RahdariPoint extends Model { @@ -69,15 +71,12 @@ class RahdariPoint extends Model 'updated_at_fa', ]; - /** - * Get all of the point's files. - */ - public function files() + public function files(): MorphMany { return $this->morphMany('App\Models\PointFile', 'point_fileable'); } - public function rahdariPointHistories() + public function rahdariPointHistories(): HasMany { return $this->hasMany('App\Models\RahdariPointHistory', 'point_id'); } diff --git a/routes/v3.php b/routes/v3.php index 211b4a6d..54310f34 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -393,7 +393,7 @@ Route::prefix('road_maintenance_station') ->controller( RoadMaintenanceStationController::class) ->group(function () { Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province'); - Route::post('/', 'store')->name('store')->middleware('permission:add-tollhouse|add-tollhouse-province'); + Route::post('/', 'store')->name('store'); Route::get('/{rahdariPoint}', 'show')->name('show')->middleware('permission:show-tollhouse|show-tollhouse-province'); Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); From b25ce4bfe2c268d84ee3cdd16011f67f4ce5c48f Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 14 Apr 2025 10:47:11 +0330 Subject: [PATCH 10/12] create map for rahdari point --- .../RoadMaintenanceStationController.php | 38 ++++++++++++++----- app/Models/PointFile.php | 7 +++- .../SafetyAndPrivacy/CartableReport.blade.php | 10 ++--- routes/v3.php | 2 + 4 files changed, 40 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index b59790da..bef19a2b 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -36,7 +36,7 @@ class RoadMaintenanceStationController extends Controller $status = $request->status; $type = $request->type; - $query = RahdariPoint::with('files') + $query = RahdariPoint::query() ->when($status, fn ($query, $status) => $query->where('status', $status)) ->when($type, fn ($query, $type) => $query->where('type', $type)) ->when($province, fn($query, $province) => $query->where('province_id', $province)); @@ -113,11 +113,11 @@ class RoadMaintenanceStationController extends Controller ]); $uploadPaths = [ - 'overview_files_1' => 'road_stations', - 'overview_files_2' => 'road_stations', - 'overview_files_3' => 'road_stations', - 'overview_files_4' => 'road_stations', - 'overview_files_5' => 'road_stations', + 'overview_files_1' => "road_stations/{$station->id}", + 'overview_files_2' => "road_stations/{$station->id}", + 'overview_files_3' => "road_stations/{$station->id}", + 'overview_files_4' => "road_stations/{$station->id}", + 'overview_files_5' => "road_stations/{$station->id}", ]; foreach ($uploadPaths as $field => $path) { @@ -136,7 +136,7 @@ class RoadMaintenanceStationController extends Controller */ public function show(RahdariPoint $rahdariPoint): JsonResponse { - return $this->successResponse($rahdariPoint->load('files')); + return $this->successResponse($rahdariPoint); } /** @@ -201,13 +201,13 @@ class RoadMaintenanceStationController extends Controller if ($request->hasFile($field)) { $existingFile = $rahdariPoint->files->get($index); - $newPath = FileFacade::save($request->field, 'rahdari_points/overview'); + $path = FileFacade::save($request->$field, "road_stations/{$rahdariPoint->id}"); if ($existingFile) { FileFacade::delete($existingFile->path); - $existingFile->update(['path' => $newPath]); + $existingFile->update(['path' => $path]); } else { - $rahdariPoint->files()->create(['path' => $newPath]); + $rahdariPoint->files()->create(['path' => $path]); } } } @@ -229,4 +229,22 @@ class RoadMaintenanceStationController extends Controller return $this->successResponse(); } + + public function images(RahdariPoint $rahdariPoint): JsonResponse + { + return $this->successResponse($rahdariPoint->files()->get(['path'])); + } + + public function map(Request $request): JsonResponse + { + auth()->user()->addActivityComplete(1023); + + return response()->json(DataTableFacade::run( + RahdariPoint::query(), + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: ['id', 'lat', 'lng', 'status', 'type'], + )); + } } diff --git a/app/Models/PointFile.php b/app/Models/PointFile.php index 4c59eb93..67638dca 100644 --- a/app/Models/PointFile.php +++ b/app/Models/PointFile.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\MorphTo; class PointFile extends Model { @@ -25,13 +26,15 @@ class PointFile extends Model * @var array */ protected $fillable = [ - 'path' + 'path', + 'point_fileable_id', + 'point_fileable_type', ]; /** * Get the owning point_fileable model. */ - public function point_fileable() + public function point_fileable(): MorphTo { return $this->morphTo(); } diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php index 1888c78a..c1065678 100644 --- a/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php +++ b/resources/views/v3/Reports/SafetyAndPrivacy/CartableReport.blade.php @@ -21,18 +21,18 @@ - - - @@ -72,7 +72,7 @@ diff --git a/routes/v3.php b/routes/v3.php index 54310f34..53df4d15 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -394,6 +394,8 @@ Route::prefix('road_maintenance_station') ->group(function () { Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province'); Route::post('/', 'store')->name('store'); + Route::post('/map', 'map')->name('map'); + Route::post('/images/{rahdariPoint}', 'images')->name('images'); Route::get('/{rahdariPoint}', 'show')->name('show')->middleware('permission:show-tollhouse|show-tollhouse-province'); Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); From a3600c68faa30b0f576d457d70bd3be093e5df17 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 14 Apr 2025 11:14:06 +0330 Subject: [PATCH 11/12] add full url for pictures --- .../V3/Dashboard/RoadMaintenanceStationController.php | 2 +- app/Models/PointFile.php | 9 +++++++++ routes/v3.php | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index bef19a2b..17ae8698 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -136,7 +136,7 @@ class RoadMaintenanceStationController extends Controller */ public function show(RahdariPoint $rahdariPoint): JsonResponse { - return $this->successResponse($rahdariPoint); + return $this->successResponse($rahdariPoint->load('files')); } /** diff --git a/app/Models/PointFile.php b/app/Models/PointFile.php index 67638dca..fc437a39 100644 --- a/app/Models/PointFile.php +++ b/app/Models/PointFile.php @@ -2,8 +2,10 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphTo; +use Illuminate\Support\Facades\Storage; class PointFile extends Model { @@ -38,4 +40,11 @@ class PointFile extends Model { return $this->morphTo(); } + + protected function path(): Attribute + { + return Attribute::make( + get: fn($value) => $value == null ? null : Storage::disk('public')->url($value) + ); + } } diff --git a/routes/v3.php b/routes/v3.php index 53df4d15..a71859a2 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -394,8 +394,8 @@ Route::prefix('road_maintenance_station') ->group(function () { Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province'); Route::post('/', 'store')->name('store'); - Route::post('/map', 'map')->name('map'); - Route::post('/images/{rahdariPoint}', 'images')->name('images'); + Route::get('/map', 'map')->name('map'); + Route::get('/images/{rahdariPoint}', 'images')->name('images'); Route::get('/{rahdariPoint}', 'show')->name('show')->middleware('permission:show-tollhouse|show-tollhouse-province'); Route::post('/{rahdariPoint}', 'update')->name('update')->middleware('permission:edit-tollhouse|edit-tollhouse-province'); Route::delete('/{rahdariPoint}', 'destroy')->name('destroy')->middleware('permission:delete-tollhouse|delete-tollhouse-province'); From 2e0b49df45e838756584544183178e7883c2624c Mon Sep 17 00:00:00 2001 From: joddyabott Date: Mon, 14 Apr 2025 15:40:10 +0330 Subject: [PATCH 12/12] create new column for database and improve the controller --- .../RoadMaintenanceStationController.php | 78 +++++++++++-------- .../RoadMaintenanceStation/UpdateRequest.php | 3 + ...ulums_to_rahdari_point_histories_table.php | 40 ++++++++++ 3 files changed, 87 insertions(+), 34 deletions(-) create mode 100644 database/migrations/2025_04_14_150741_add_culums_to_rahdari_point_histories_table.php diff --git a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php index 17ae8698..3dd07a5a 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadMaintenanceStationController.php @@ -13,11 +13,8 @@ use App\Models\City; use App\Models\Province; use App\Models\RahdariPoint; use App\Models\RahdariPointHistory; -use Hekmatinasser\Verta\Facades\Verta; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\DB; class RoadMaintenanceStationController extends Controller @@ -83,15 +80,15 @@ class RoadMaintenanceStationController extends Controller */ public function store(StoreRequest $request): JsonResponse { - $provinceName = Province::query()->find($request->province_id)->name_fa; + $province = Province::query()->find($request->province_id); - $cityName = City::query()->find($request->city_id)->name_fa; + $city = City::query()->find($request->city_id); $station = RahdariPoint::query()->create([ - 'province_id' => $request->province_id, - 'province_name' => $provinceName, - 'city_id' => $request->city_id, - 'city_name' => $cityName, + 'province_id' => $province->id, + 'province_name' => $province->name_fa, + 'city_id' => $city->id, + 'city_name' => $city->name_fa, 'name' => $request->name, 'status' => $request->status, 'type' => $request->type, @@ -144,45 +141,59 @@ class RoadMaintenanceStationController extends Controller */ public function update(UpdateRequest $request, RahdariPoint $rahdariPoint): JsonResponse { + $province = Province::query()->find($request->province_id); + + $city = City::query()->find($request->city_id); + RahdariPointHistory::query()->create([ 'user_id' => $request->user()->id, 'point_id' => $rahdariPoint->id, + 'previous_province_id' => $province->id, + 'previous_province_name' => $province->name_fa, + 'previous_city_id' => $city->id, + 'previous_city_name' => $city->name_fa, + 'previous_name' => $rahdariPoint->name, 'previous_status' => $rahdariPoint->status, 'previous_type' => $rahdariPoint->type, - 'previous_team_num' => $rahdariPoint->team_num, - 'previous_staff_num' => $rahdariPoint->staff_num, + 'previous_team_num' => $rahdariPoint->team_num, + 'previous_staff_num' => $rahdariPoint->staff_num, 'previous_phone' => $rahdariPoint->phone, - 'previous_responsible_name' => $rahdariPoint->responsible_name, - 'previous_responsible_mobile' => $rahdariPoint->responsible_mobile, - 'previous_successor_name' => $rahdariPoint->successor_name, - 'previous_successor_mobile' => $rahdariPoint->successor_mobile, - 'previous_machines_light' => $rahdariPoint->machines_light, - 'previous_machines_sheavy' => $rahdariPoint->machines_sheavy, - 'previous_machines_heavy' => $rahdariPoint->machines_heavy, + 'previous_responsible_name' => $rahdariPoint->responsible_name, + 'previous_responsible_mobile' => $rahdariPoint->responsible_mobile, + 'previous_successor_name' => $rahdariPoint->successor_name, + 'previous_successor_mobile' => $rahdariPoint->successor_mobile, + 'previous_machines_light' => $rahdariPoint->machines_light, + 'previous_machines_sheavy' => $rahdariPoint->machines_sheavy, + 'previous_machines_heavy' => $rahdariPoint->machines_heavy, 'previous_lat' => $rahdariPoint->lat, 'previous_lng' => $rahdariPoint->lng, 'new_files' => json_encode($rahdariPoint->files), ]); $rahdariPoint->update([ - 'status' => $request->input('status', $rahdariPoint->status), - 'type' => $request->input('type', $rahdariPoint->type), + 'province_id' => $province->id, + 'province_name' => $province->name_fa, + 'city_id' => $city->id, + 'city_name' => $city->name_fa, + 'name' => $request->input('name'), + 'status' => $request->input('status'), + 'type' => $request->input('type',), 'type_fa' => RoadMaintenanceStationTypes::name($request->type) ?? $rahdariPoint->type_fa, - 'team_num' => $request->input('team_num', $rahdariPoint->team_num), - 'staff_num' => $request->input('staff_num', $rahdariPoint->staff_num), - 'phone' => $request->input('phone', $rahdariPoint->phone), - 'responsible_name' => $request->input('responsible_name', $rahdariPoint->responsible_name), - 'responsible_mobile' => $request->input('responsible_mobile', $rahdariPoint->responsible_mobile), - 'successor_name' => $request->input('successor_name', $rahdariPoint->successor_name), - 'successor_mobile' => $request->input('successor_mobile', $rahdariPoint->successor_mobile), - 'machines_light' => $request->input('machines_light', $rahdariPoint->machines_light), - 'machines_sheavy' => $request->input('machines_sheavy', $rahdariPoint->machines_sheavy), - 'machines_heavy' => $request->input('machines_heavy', $rahdariPoint->machines_heavy), - 'lat' => $request->input('lat', $rahdariPoint->lat), - 'lng' => $request->input('lng', $rahdariPoint->lng), + 'team_num' => $request->input('team_num'), + 'staff_num' => $request->input('staff_num'), + 'phone' => $request->input('phone'), + 'responsible_name' => $request->input('responsible_name'), + 'responsible_mobile' => $request->input('responsible_mobile'), + 'successor_name' => $request->input('successor_name'), + 'successor_mobile' => $request->input('successor_mobile'), + 'machines_light' => $request->input('machines_light'), + 'machines_sheavy' => $request->input('machines_sheavy'), + 'machines_heavy' => $request->input('machines_heavy'), + 'lat' => $request->input('lat'), + 'lng' => $request->input('lng'), 'lat_from' => $request->lat_from, 'lng_from' => $request->lng_from, - 'geometry' => $request->geometry, + 'geometry' => $request->geometry, 'lat_to' => $request->lat_to, 'lng_to' => $request->lng_to, 'color' => $request->color, @@ -200,7 +211,6 @@ class RoadMaintenanceStationController extends Controller foreach ($uploadFields as $index => $field) { if ($request->hasFile($field)) { $existingFile = $rahdariPoint->files->get($index); - $path = FileFacade::save($request->$field, "road_stations/{$rahdariPoint->id}"); if ($existingFile) { diff --git a/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php b/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php index 892394aa..3443e3b1 100644 --- a/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php +++ b/app/Http/Requests/V3/RoadMaintenanceStation/UpdateRequest.php @@ -22,6 +22,9 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ + 'province_id' => 'required|exists:provinces,id', + 'city_id' => 'required|exists:cities,id', + 'name' => 'required|string|max:255', 'status' => 'integer|in:0,1', 'type' => 'integer|in:1,2,3', 'team_num' => 'numeric', diff --git a/database/migrations/2025_04_14_150741_add_culums_to_rahdari_point_histories_table.php b/database/migrations/2025_04_14_150741_add_culums_to_rahdari_point_histories_table.php new file mode 100644 index 00000000..4743a7a3 --- /dev/null +++ b/database/migrations/2025_04_14_150741_add_culums_to_rahdari_point_histories_table.php @@ -0,0 +1,40 @@ +after('user_id', function (Blueprint $table) { + $table->unsignedSmallInteger('previous_province_id')->nullable(); + $table->string('previous_province_name')->nullable(); + $table->unsignedSmallInteger('previous_city_id')->nullable(); + $table->string('previous_city_name')->nullable(); + $table->string('previous_name')->nullable(); + }); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('rahdari_point_histories', function (Blueprint $table) { + $table->dropColumn([ + 'previous_province_id', + 'previous_province_name', + 'previous_city_id', + 'previous_city_name', + 'previous_name', + ]); + }); + } +};
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
گزارش فعالیت های نگهداری حریم راه - تاریخ ثبت اقدام + تاریخ اقدام @@ -97,7 +97,7 @@ - {{ $item['action_picture_document_upload_date'] ? verta($item['action_picture_document_upload_date'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['action_picture_document_upload_date'] ? verta($item['action_date'])->format('Y/n/j H:i:s') : '-' }} {{ $item['step_fa'] ?? '-' }}