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()->orderBy('id')->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'], )); } }