Merge branch 'feature/DetailBugs' into 'develop'

Feature/detail bugs

See merge request witelgroup/rms_v2!100
This commit is contained in:
2025-04-14 12:14:27 +00:00
17 changed files with 535 additions and 23 deletions

View File

@@ -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,

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Enums;
enum RoadMaintenanceStationTypes: int
{
case DAEMI= 1;
case MOVAGHAT = 2;
case FASLI = 3;
public static function name(int $state): string
{
$mapArray = [
1 => "دائمی",
2 => "موقت",
3 => "فصلی",
];
return $mapArray[$state];
}
}

View File

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

View File

@@ -0,0 +1,260 @@
<?php
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 Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class RoadMaintenanceStationController extends Controller
{
use ApiResponse;
public function index(Request $request): JsonResponse
{
$user = auth()->user();
auth()->user()->addActivityComplete(1019);
$allowedFilters = ['*'];
$allowedSortings = ['*'];
$province = $request->province;
$status = $request->status;
$type = $request->type;
$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));
if ($user->hasPermissionTo('show-tollhouse-province')) {
$query->where('province_id', $user->province_id);
}
$data = DataTableFacade::run(
$query,
$request,
allowedFilters: $allowedFilters,
allowedSortings: $allowedSortings
);
foreach ($data['data'] as &$stations) {
if ($user->hasPermissionTo('edit-tollhouse')) {
$stations['canEdit'] = 1;
}
elseif ($user->hasPermissionTo('edit-tollhouse-province') && $stations->province_id == $user->province_id) {
$stations['canEdit'] = 1;
}
else {
$stations['canEdit'] = 0;
}
if ($user->hasPermissionTo('delete-tollhouse')) {
$stations['canDelete'] = 1;
}
elseif ($user->hasPermissionTo('delete-tollhouse-province') && $stations->province_id == $user->province_id) {
$stations['canDelete'] = 1;
}
else {
$stations['canDelete'] = 0;
}
}
return response()->json($data);
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreRequest $request): JsonResponse
{
$province = Province::query()->find($request->province_id);
$city = City::query()->find($request->city_id);
$station = RahdariPoint::query()->create([
'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,
'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/{$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) {
if ($request->hasFile($field)) {
$station->files()->create([
'path' => FileFacade::save($request->$field, $path)
]);
}
}
return $this->successResponse();
}
/**
* Display the specified resource.
*/
public function show(RahdariPoint $rahdariPoint): JsonResponse
{
return $this->successResponse($rahdariPoint->load('files'));
}
/**
* Update the specified resource in storage.
*/
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_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([
'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'),
'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,
'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);
$path = FileFacade::save($request->$field, "road_stations/{$rahdariPoint->id}");
if ($existingFile) {
FileFacade::delete($existingFile->path);
$existingFile->update(['path' => $path]);
} else {
$rahdariPoint->files()->create(['path' => $path]);
}
}
}
return $this->successResponse();
}
/**
* Remove the specified resource from storage.
*/
public function destroy(RahdariPoint $rahdariPoint): JsonResponse
{
foreach ($rahdariPoint->files as $file) {
FileFacade::delete($file->path);
}
$rahdariPoint->rahdariPointHistories()->delete();
$rahdariPoint->files()->delete();
$rahdariPoint->delete();
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'],
));
}
}

View File

@@ -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;
@@ -141,6 +142,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 +203,15 @@ 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
{
return response()->json(DataTableFacade::run(
SafetyAndPrivacy::query(),
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedSelects: ['id', 'lat', 'lon', 'step']
));
}
}

View File

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

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Http\Requests\V3\RoadMaintenanceStation;
use App\Models\RahdariPoint;
use Hekmatinasser\Verta\Facades\Verta;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
* @return bool
*/
public function authorize(): bool
{
$user = auth()->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, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|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',
];
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Http\Requests\V3\RoadMaintenanceStation;
use Illuminate\Foundation\Http\FormRequest;
class UpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
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',
'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',
];
}
}

View File

@@ -23,6 +23,7 @@ class ThirdStepStoreRequest extends FormRequest
{
return [
'action_picture' => 'required|image',
'action_date' => 'required|date',
];
}
}

View File

@@ -2,7 +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
{
@@ -25,14 +28,23 @@ 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();
}
protected function path(): Attribute
{
return Attribute::make(
get: fn($value) => $value == null ? null : Storage::disk('public')->url($value)
);
}
}

View File

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

View File

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

View File

@@ -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')) {

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('safety_and_privacy', function (Blueprint $table) {
$table->dateTime('action_date')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('safety_and_privacy', function (Blueprint $table) {
$table->dropColumn('action_date');
});
}
};

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('rahdari_point_histories', function (Blueprint $table) {
$table->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',
]);
});
}
};

View File

@@ -21,18 +21,18 @@
<table>
<thead>
<tr>
<th colspan="9"
<th colspan="10"
style="background-color: #DAEEF3;text-align: center;border-right: 1px solid black;font-weight:bolder;">
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
</th>
</tr>
<tr>
<th colspan="9"
<th colspan="10"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;">
</th>
</tr>
<tr>
<th colspan="9"
<th colspan="10"
style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;">
گزارش فعالیت های نگهداری حریم راه
</th>
@@ -52,7 +52,15 @@
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
مورد
مورد مشاهده شده
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
نوع محور
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ ثبت
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
@@ -60,7 +68,7 @@
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ ثبت مستندات قضایی
تاریخ بارگذاری مستندات قضایی
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
@@ -70,10 +78,6 @@
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
وضعیت
</th>
<th rowspan="1"
style="text-align: center;border: 1px solid black;background-color: #EBF1DE;font-weight: bold;">
تاریخ ثبت
</th>
</tr>
</thead>
@@ -84,6 +88,8 @@
<td style="border: 1px solid black;text-align: center;">{{ $item['province_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['edare_shahri_name'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['info_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['axis_type_name'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }}</td>
<td style="border: 1px solid black;text-align: center;">
@@ -91,11 +97,10 @@
</td>
<td style="border: 1px solid black;text-align: center;">
{{ $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') : '-' }}
</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['step_fa'] ?? '-' }}</td>
<td style="border: 1px solid black;text-align: center;">{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}</td>
</tr>
@endforeach
</tbody>

View File

@@ -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;
@@ -340,6 +341,7 @@ 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');
@@ -385,3 +387,16 @@ Route::prefix('permissions')
});
Route::get('/notifications', NotificationController::class)->name('notifications');
Route::prefix('road_maintenance_station')
->name('roadMaintenanceStation.')
->controller( RoadMaintenanceStationController::class)
->group(function () {
Route::get('/', 'index')->name('index')->middleware('permission:show-tollhouse|show-tollhouse-province');
Route::post('/', 'store')->name('store');
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');
});