Files
backend/app/Http/Controllers/DangerPointPublicController.php
2024-02-01 09:53:53 +00:00

1260 lines
54 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\DangerPoint;
use App\Models\DangerPointAccident;
use Barryvdh\Snappy\Facades\SnappyPdf;
use Carbon\Carbon;
use Illuminate\Support\Facades\Hash;
class DangerPointPublicController extends Controller
{
public function getUserProvince(Request $request)
{
// if ($request->user()->province_id != null
// && ($request->user()->username == 'witeL' || $request->user()->username == 'drdanesh')) {
// $provinces = \App\Models\Province::all();
// } else {
// $provinces = \App\Models\Province::find($request->user()->province_id);
// }
$provinces = \App\Models\Province::all();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $provinces
], 200);
}
public function getDangerPoint() {
// if (Auth::user()->province_id != null
// && (Auth::user()->username == 'witeL' || Auth::user()->username == 'drdanesh')) {
// $dangerPoints = DangerPoint::all();
// } else {
// $dangerPoints = DangerPoint::where('province_id', Auth::user()->province_id)
// ->get();
// }
$dangerPoints = DangerPoint::all();
$dangerPointsArray = [];
foreach ($dangerPoints As $key => $dangerPoint) {
$dangerPointsArray[$key] = [
'id' => $dangerPoint->id,
'province' => [
'id' => $dangerPoint->province->id,
'name' => $dangerPoint->province->name_fa
],
'axis_name' => $dangerPoint->axis_name,
'axis_type' => $dangerPoint->axis_type,
'axis_start' => $dangerPoint->axis_start,
'axis_end' => $dangerPoint->axis_end,
'distance_axis_start' => $dangerPoint->distance_axis_start,
'local_name' => $dangerPoint->local_name,
'lat_lng' => [
$dangerPoint->lat,
$dangerPoint->lng
],
'accident_251' => $dangerPoint->accident_251,
'accident_251_code' => $dangerPoint->accident_251_code,
'speed_limit' => $dangerPoint->speed_limit,
'speed_average' => $dangerPoint->speed_average,
'accident_possibility' => $dangerPoint->accident_possibility,
'road_guard' => $dangerPoint->road_guard,
'geometric_desc' => $dangerPoint->geometric_desc,
'accident_cause' => $dangerPoint->accident_cause,
'accident_cause_suggest' => $dangerPoint->accident_cause_suggest,
'accident_severity' => $dangerPoint->accident_severity,
'accident_severity_suggest' => $dangerPoint->accident_severity_suggest,
'correction_plan_done' => $dangerPoint->correction_plan_done,
'correction_plan_doing' => $dangerPoint->correction_plan_doing,
'correction_plan_doing_desc' => $dangerPoint->correction_plan_doing_desc,
'correction_plan_doing_suggest' => $dangerPoint->correction_plan_doing_suggest,
'point_images' => $dangerPoint->files,
'btn_deactive' => [
(($dangerPoint->dangerPointAccidents()->count() > 0) ? 0 : 1),
(($dangerPoint->speed_limit != null) ? 0 : 1),
1,
(($dangerPoint->files()->count() == 9) ? 0 : 1),
(($dangerPoint->signature_file != null && $dangerPoint->police_file != null) ? 0 : 1),
1
],
'uploaded_files' => [
['signature_file' => ($dangerPoint->signature_file) ? asset('storage' . substr($dangerPoint->signature_file, 6)) : null],
['police_file' => ($dangerPoint->police_file) ? asset('storage' . substr($dangerPoint->police_file, 6)) : null]
],
'status' => $dangerPoint->status,
'status_desc' => $dangerPoint->status_desc,
'submited_at' => verta($dangerPoint->created_at)->format('Y/m/d'),
'code' => $dangerPoint->code
];
if ($dangerPointsArray[$key]['btn_deactive'][0] == 0 && $dangerPointsArray[$key]['btn_deactive'][1] == 0) {
$dangerPointsArray[$key]['btn_deactive'][2] = 0;
}
if ($dangerPointsArray[$key]['btn_deactive'][0] == 0
&& $dangerPointsArray[$key]['btn_deactive'][1] == 0
&& $dangerPointsArray[$key]['btn_deactive'][2] == 0
&& $dangerPointsArray[$key]['btn_deactive'][3] == 0
&& $dangerPointsArray[$key]['btn_deactive'][4] == 0) {
$dangerPointsArray[$key]['btn_deactive'][5] = 0;
}
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPointsArray,
'can_submit' => 1
], 200);
}
public function getDangerPointAdmin() {
$dangerPoints = DangerPoint::whereIn('status', [1, 2, 3, 4])->get();
$dangerPointsArray = [];
foreach ($dangerPoints As $key => $dangerPoint) {
$dangerPointsArray[$key] = [
'id' => $dangerPoint->id,
'province' => [
'id' => $dangerPoint->province->id,
'name' => $dangerPoint->province->name_fa
],
'axis_name' => $dangerPoint->axis_name,
'axis_type' => $dangerPoint->axis_type,
'axis_start' => $dangerPoint->axis_start,
'axis_end' => $dangerPoint->axis_end,
'distance_axis_start' => $dangerPoint->distance_axis_start,
'local_name' => $dangerPoint->local_name,
'lat_lng' => [
$dangerPoint->lat,
$dangerPoint->lng
],
'accident_251' => $dangerPoint->accident_251,
'accident_251_code' => $dangerPoint->accident_251_code,
'speed_limit' => $dangerPoint->speed_limit,
'speed_average' => $dangerPoint->speed_average,
'accident_possibility' => $dangerPoint->accident_possibility,
'road_guard' => $dangerPoint->road_guard,
'geometric_desc' => $dangerPoint->geometric_desc,
'accident_cause' => $dangerPoint->accident_cause,
'accident_cause_suggest' => $dangerPoint->accident_cause_suggest,
'accident_severity' => $dangerPoint->accident_severity,
'accident_severity_suggest' => $dangerPoint->accident_severity_suggest,
'correction_plan_done' => $dangerPoint->correction_plan_done,
'correction_plan_doing' => $dangerPoint->correction_plan_doing,
'correction_plan_doing_desc' => $dangerPoint->correction_plan_doing_desc,
'correction_plan_doing_suggest' => $dangerPoint->correction_plan_doing_suggest,
'point_images' => $dangerPoint->files,
'btn_deactive' => [
0,
0,
0,
0
],
'uploaded_files' => [
['signature_file' => ($dangerPoint->signature_file) ? asset('storage' . substr($dangerPoint->signature_file, 6)) : null],
['police_file' => ($dangerPoint->police_file) ? asset('storage' . substr($dangerPoint->police_file, 6)) : null]
],
'status' => $dangerPoint->status,
'status_desc' => $dangerPoint->status_desc,
'submited_at' => verta($dangerPoint->created_at)->format('Y/m/d'),
'code' => $dangerPoint->code
];
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPointsArray
], 200);
}
public function getDangerAccidents($id) {
$dangerAccidents = DangerPoint::find($id)->dangerPointAccidents;
$dangerAccidentsArray = [];
foreach ($dangerAccidents As $key => $dangerAccident) {
$dangerAccidentsArray[$key] = [
'id' => $dangerAccident->id,
'serial_number' => $dangerAccident->serial_number,
'accident_date' => (($dangerAccident->accident_date) ? verta($dangerAccident->accident_date)->format('Y/m/d') : $dangerAccident->accident_date),
'day' => $dangerAccident->day,
'time' => $dangerAccident->time,
'accident_direction' => $dangerAccident->accident_direction,
'collision_type' => $dangerAccident->collision_type,
'accident_factors' => $dangerAccident->accident_factors,
'accident_type' => $dangerAccident->accident_type ?? [],
'accident_result' => $dangerAccident->accident_result
];
}
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerAccidentsArray
], 200);
}
public function storeDanger(Request $request)
{
$request->validate([
'province-id' => 'required|integer|exists:provinces,id',
'axis-name' => 'required|string',
'axis-type' => 'required|integer|between:1,6',
'axis-start' => 'required|string',
'axis-end' => 'required|string',
'distance-axis-start' => 'required|integer',
'local-name' => 'required|string',
'lat' => 'required|string|regex:/^[1-9][0-9]\.[0-9]{1,}$/i',
'lng' => 'required|string|regex:/^[1-9][0-9]\.[0-9]{1,}$/i'
]);
$dangerPoint = new DangerPoint;
// PUBLIC URL
$dangerPoint->user_id = Auth::user()->id;//// i commented 470
$dangerPoint->province_id = $request->input('province-id') ?? null;
$dangerPoint->axis_name = $request->input('axis-name') ?? null;
$dangerPoint->axis_type = $request->input('axis-type') ?? null;
$dangerPoint->axis_start = $request->input('axis-start') ?? null;
$dangerPoint->axis_end = $request->input('axis-end') ?? null;
$dangerPoint->distance_axis_start = $request->input('distance-axis-start') ?? null;
$dangerPoint->local_name = $request->input('local-name') ?? null;
$dangerPoint->lat = $request->input('lat') ?? null;
$dangerPoint->lng = $request->input('lng') ?? null;
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint
], 201);
}
public function storeDangerDetails(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'accident-251' => 'required|boolean',
'accident-251-code' => 'required_if:accident-251,1|string',
'speed-limit' => 'required|integer',
'speed-average' => 'required|integer',
'accident-possibility' => 'required|boolean',
'road-guard' => 'required|boolean',
'geometric-desc' => 'required|integer|between:1,16',
'accident-cause' => 'string',
'accident-cause-suggest' => 'string',
'accident-severity' => 'string',
'accident-severity-suggest' => 'string',
'correction-plan-done' => 'string',
'correction-plan-doing' => 'string',
'correction-plan-doing-desc' => 'string',
'correction-plan-doing-suggest' => 'string',
//'signature-file' => 'required|file'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->accident_251 = $request->input('accident-251') ?? null;
$dangerPoint->accident_251_code = $request->input('accident-251-code') ?? null;
$dangerPoint->speed_limit = $request->input('speed-limit') ?? null;
$dangerPoint->speed_average = $request->input('speed-average') ?? null;
$dangerPoint->accident_possibility = $request->input('accident-possibility') ?? null;
$dangerPoint->road_guard = $request->input('road-guard') ?? null;
$dangerPoint->geometric_desc = $request->input('geometric-desc') ?? null;
if ($request->input('accident-cause')) {
$dangerPoint->accident_cause = explode(',', $request->input('accident-cause')) ?? null;
} else {
$dangerPoint->accident_cause = null;
}
$dangerPoint->accident_cause_suggest = $request->input('accident-cause-suggest') ?? null;
if ($request->input('accident-severity')) {
$dangerPoint->accident_severity = explode(',', $request->input('accident-severity')) ?? null;
} else {
$dangerPoint->accident_severity = null;
}
$dangerPoint->accident_severity_suggest = $request->input('accident-severity-suggest') ?? null;
$dangerPoint->correction_plan_done = $request->input('correction-plan-done') ?? null;
$dangerPoint->correction_plan_doing = $request->input('correction-plan-doing') ?? null;
$dangerPoint->correction_plan_doing_desc = $request->input('correction-plan-doing-desc') ?? null;
$dangerPoint->correction_plan_doing_suggest = $request->input('correction-plan-doing-suggest') ?? null;
// $files_path = null;
// if ($request->file('signature-file')) {
// $files_path = $request->file('signature-file')->storeAs(
// 'public/danger-points/signature',
// 'sign_' . time() . '_signature_file_' . $dangerPoint->id . '_' . $request->file('signature-file')->getClientOriginalName()
// );
// }
// $dangerPoint->signature_file = $files_path;
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint
], 201);
}
public function storeDangerAccident(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'serial-number' => 'required|string',
'accident-date' => 'required|date_format:Y-m-d',
'day' => 'required|integer|between:1,7',
'time' => 'required|string',
'accident-direction' => 'required|integer|between:1,2',
'collision-type' => 'required|integer|between:1,6',
'accident-factors' => 'required|json',
'accident-type' => 'required|integer|between:1,3',
'accident-result' => 'required|json'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPointAccident = $dangerPoint->dangerPointAccidents()->create([
// PUBLIC URL
'user_id' => Auth::user()->id,
'serial_number' => $request->input('serial-number') ?? null,
'accident_date' => $request->input('accident-date') ?? null,
'day' => $request->input('day') ?? null,
'time' => $request->input('time') ?? null,
'accident_direction' => $request->input('accident-direction') ?? null,
'collision_type' => $request->input('collision-type') ?? null,
'accident_factors' => (($request->input('accident-factors')) ? json_decode($request->input('accident-factors')) : null),
'accident_type' => $request->input('accident-type') ?? null,
'accident_result' => (($request->input('accident-result')) ? json_decode($request->input('accident-result')) : null)
]);
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPointAccident
], 201);
}
public function storeDangerImages(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'image-right-100-1' => 'image',
'image-right-100-2' => 'image',
'image-right-50-1' => 'image',
'image-right-50-2' => 'image',
'image-left-100-1' => 'image',
'image-left-100-2' => 'image',
'image-left-50-1' => 'image',
'image-left-50-2' => 'image',
'image-satellite' => 'image'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$files_path = [];
$file_index = 0;
$file_time = time();
if ($request->file('image-right-100-1')) {
$dangerPoint->files()->where('path', 'like', '%_image-right-100-1_0_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-right-100-1')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-right-100-1_0_' . $dangerPoint->id . '_' . $request->file('image-right-100-1')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-right-100-2')) {
$dangerPoint->files()->where('path', 'like', '%_image-right-100-2_1_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-right-100-2')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-right-100-2_1_' . $dangerPoint->id . '_' . $request->file('image-right-100-2')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-right-50-1')) {
$dangerPoint->files()->where('path', 'like', '%_image-right-50-1_2_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-right-50-1')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-right-50-1_2_' . $dangerPoint->id . '_' . $request->file('image-right-50-1')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-right-50-2')) {
$dangerPoint->files()->where('path', 'like', '%_image-right-50-2_3_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-right-50-2')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-right-50-2_3_' . $dangerPoint->id . '_' . $request->file('image-right-50-2')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-left-100-1')) {
$dangerPoint->files()->where('path', 'like', '%_image-left-100-1_4_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-left-100-1')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-left-100-1_4_' . $dangerPoint->id . '_' . $request->file('image-left-100-1')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-left-100-2')) {
$dangerPoint->files()->where('path', 'like', '%_image-left-100-2_5_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-left-100-2')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-left-100-2_5_' . $dangerPoint->id . '_' . $request->file('image-left-100-2')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-left-50-1')) {
$dangerPoint->files()->where('path', 'like', '%_image-left-50-1_6_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-left-50-1')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-left-50-1_6_' . $dangerPoint->id . '_' . $request->file('image-left-50-1')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-left-50-2')) {
$dangerPoint->files()->where('path', 'like', '%_image-left-50-2_7_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-left-50-2')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-left-50-2_7_' . $dangerPoint->id . '_' . $request->file('image-left-50-2')->getClientOriginalName()
);
$file_index++;
}
if ($request->file('image-satellite')) {
$dangerPoint->files()->where('path', 'like', '%_image-satellite_8_%')->delete();
$files_path[$file_index]['path'] = $request->file('image-satellite')->storeAs(
'public/danger_points',
'img9_' . $file_time . '_image-satellite_8_' . $dangerPoint->id . '_' . $request->file('image-satellite')->getClientOriginalName()
);
$file_index++;
}
$dangerPoint->files()->createMany($files_path);
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint->files
], 201);
}
public function storeDangerPreviewImage(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'image' => 'required|image',
'name' => 'required|string'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->files()->where('path', 'like', '%img9_' . $request->input('name') . '_%')->delete();
$files_path = $request->file('image')->storeAs(
'public/danger_points',
'img9_' . $request->input('name') . '_' . $dangerPoint->id . '_' . time() . '_' . $request->file('image')->getClientOriginalName()
);
$dangerPoint->files()->create([
'path' => $files_path
]);
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $files_path
], 201);
}
public function destroyDangerPreviewImage(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'name' => 'required|string'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->files()->where('path', 'like', '%_' . $request->input('name') . '_%')->delete();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => 1
], 200);
}
public function showDangerPointPage() {
return view('rmto-preview.pages.danger-point');
}
public function showDangerPointAdminPage() {
if (Auth::user()->username == 'witeL' || Auth::user()->username == 'drdanesh') {
return view('rmto-preview.pages.danger-point-admin');
} else {
return redirect('/danger-point');
}
}
public function updateDanger(Request $request, $id)
{
$request->validate([
'province-id' => 'required|integer|exists:provinces,id',
'axis-name' => 'required|string',
'axis-type' => 'required|integer|between:1,6',
'axis-start' => 'required|string',
'axis-end' => 'required|string',
'distance-axis-start' => 'required|integer',
'local-name' => 'required|string',
'lat' => 'required|string|regex:/^[1-9][0-9]\.[0-9]{1,}$/i',
'lng' => 'required|string|regex:/^[1-9][0-9]\.[0-9]{1,}$/i'
]);
$dangerPoint = DangerPoint::find($id);
$dangerPoint->dangerPointHistories()->create([
// PUBLIC URL
'user_id' => Auth::user()->id,
'previous_code' => $dangerPoint->code,
'previous_axis_name' => $dangerPoint->axis_name,
'previous_axis_type' => $dangerPoint->axis_type,
'previous_axis_start' => $dangerPoint->axis_start,
'previous_axis_end' => $dangerPoint->axis_end,
'previous_distance_axis_start' => $dangerPoint->distance_axis_start,
'previous_local_name' => $dangerPoint->local_name,
'previous_lat' => $dangerPoint->lat,
'previous_lng' => $dangerPoint->lng,
'previous_accident_251' => $dangerPoint->accident_251,
'previous_accident_251_code' => $dangerPoint->accident_251_code,
'previous_speed_limit' => $dangerPoint->speed_limit,
'previous_speed_average' => $dangerPoint->speed_average,
'previous_accident_possibility' => $dangerPoint->accident_possibility,
'previous_road_guard' => $dangerPoint->road_guard,
'previous_geometric_desc' => $dangerPoint->geometric_desc,
'previous_accident_cause' => $dangerPoint->accident_cause,
'previous_accident_cause_suggest' => $dangerPoint->accident_cause_suggest,
'previous_accident_severity' => $dangerPoint->accident_severity,
'previous_accident_severity_suggest' => $dangerPoint->accident_severity_suggest,
'previous_correction_plan_done' => $dangerPoint->correction_plan_done,
'previous_correction_plan_doing' => $dangerPoint->correction_plan_doing,
'previous_correction_plan_doing_desc' => $dangerPoint->correction_plan_doing_desc,
'previous_correction_plan_doing_suggest' => $dangerPoint->correction_plan_doing_suggest,
'previous_status' => $dangerPoint->status,
'previous_status_desc' => $dangerPoint->status_desc
]);
$dangerPoint->province_id = $request->input('province-id') ?? $dangerPoint->province_id;
$dangerPoint->axis_name = $request->input('axis-name') ?? $dangerPoint->axis_name;
$dangerPoint->axis_type = $request->input('axis-type') ?? $dangerPoint->axis_type;
$dangerPoint->axis_start = $request->input('axis-start') ?? $dangerPoint->axis_start;
$dangerPoint->axis_end = $request->input('axis-end') ?? $dangerPoint->axis_end;
$dangerPoint->distance_axis_start = $request->input('distance-axis-start') ?? $dangerPoint->distance_axis_start;
$dangerPoint->local_name = $request->input('local-name') ?? $dangerPoint->local_name;
$dangerPoint->lat = $request->input('lat') ?? $dangerPoint->lat;
$dangerPoint->lng = $request->input('lng') ?? $dangerPoint->lng;
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint
], 200);
}
public function updateDangerDetails(Request $request, $id)
{
$request->validate([
'accident-251' => 'required|boolean',
'accident-251-code' => 'required_if:accident-251,1|string',
'speed-limit' => 'required|integer',
'speed-average' => 'required|integer',
'accident-possibility' => 'required|boolean',
'road-guard' => 'required|boolean',
'geometric-desc' => 'required|integer|between:1,16',
'accident-cause' => 'string',
'accident-cause-suggest' => 'string',
'accident-severity' => 'string',
'accident-severity-suggest' => 'string',
'correction-plan-done' => 'string',
'correction-plan-doing' => 'string',
'correction-plan-doing-desc' => 'string',
'correction-plan-doing-suggest' => 'string',
//'signature-file' => 'required|file'
]);
$dangerPoint = DangerPoint::find($id);
$dangerPoint->dangerPointHistories()->create([
// PUBLIC URL
'user_id' => Auth::user()->id,
'previous_code' => $dangerPoint->code,
'previous_axis_name' => $dangerPoint->axis_name,
'previous_axis_type' => $dangerPoint->axis_type,
'previous_axis_start' => $dangerPoint->axis_start,
'previous_axis_end' => $dangerPoint->axis_end,
'previous_distance_axis_start' => $dangerPoint->distance_axis_start,
'previous_local_name' => $dangerPoint->local_name,
'previous_lat' => $dangerPoint->lat,
'previous_lng' => $dangerPoint->lng,
'previous_accident_251' => $dangerPoint->accident_251,
'previous_accident_251_code' => $dangerPoint->accident_251_code,
'previous_speed_limit' => $dangerPoint->speed_limit,
'previous_speed_average' => $dangerPoint->speed_average,
'previous_accident_possibility' => $dangerPoint->accident_possibility,
'previous_road_guard' => $dangerPoint->road_guard,
'previous_geometric_desc' => $dangerPoint->geometric_desc,
'previous_accident_cause' => $dangerPoint->accident_cause,
'previous_accident_cause_suggest' => $dangerPoint->accident_cause_suggest,
'previous_accident_severity' => $dangerPoint->accident_severity,
'previous_accident_severity_suggest' => $dangerPoint->accident_severity_suggest,
'previous_correction_plan_done' => $dangerPoint->correction_plan_done,
'previous_correction_plan_doing' => $dangerPoint->correction_plan_doing,
'previous_correction_plan_doing_desc' => $dangerPoint->correction_plan_doing_desc,
'previous_correction_plan_doing_suggest' => $dangerPoint->correction_plan_doing_suggest,
'previous_status' => $dangerPoint->status,
'previous_status_desc' => $dangerPoint->status_desc
]);
$dangerPoint->accident_251 = $request->input('accident-251') ?? $dangerPoint->accident_251;
$dangerPoint->accident_251_code = $request->input('accident-251-code') ?? $dangerPoint->accident_251_code;
$dangerPoint->speed_limit = $request->input('speed-limit') ?? $dangerPoint->speed_limit;
$dangerPoint->speed_average = $request->input('speed-average') ?? $dangerPoint->speed_average;
$dangerPoint->accident_possibility = $request->input('accident-possibility') ?? $dangerPoint->accident_possibility;
$dangerPoint->road_guard = $request->input('road-guard') ?? $dangerPoint->road_guard;
$dangerPoint->geometric_desc = $request->input('geometric-desc') ?? $dangerPoint->geometric_desc;
if ($request->input('accident-cause')) {
$dangerPoint->accident_cause = explode(',', $request->input('accident-cause')) ?? $dangerPoint->accident_cause;
}
$dangerPoint->accident_cause_suggest = $request->input('accident-cause-suggest') ?? $dangerPoint->accident_cause_suggest;
if ($request->input('accident-severity')) {
$dangerPoint->accident_severity = explode(',', $request->input('accident-severity')) ?? $dangerPoint->accident_severity;
}
$dangerPoint->accident_severity_suggest = $request->input('accident-severity-suggest') ?? $dangerPoint->accident_severity_suggest;
$dangerPoint->correction_plan_done = $request->input('correction-plan-done') ?? $dangerPoint->correction_plan_done;
$dangerPoint->correction_plan_doing = $request->input('correction-plan-doing') ?? $dangerPoint->correction_plan_doing;
$dangerPoint->correction_plan_doing_desc = $request->input('correction-plan-doing-desc') ?? $dangerPoint->correction_plan_doing_des;
$dangerPoint->correction_plan_doing_suggest = $request->input('correction-plan-doing-suggest') ?? $dangerPoint->correction_plan_doing_suggest;
// $files_path = null;
// if ($request->file('signature-file')) {
// $files_path = $request->file('signature-file')->storeAs(
// 'public/danger-points/signature',
// 'sign_' . time() . '_signature_file_' . $dangerPoint->id . '_' . $request->file('signature-file')->getClientOriginalName()
// );
// }
// $dangerPoint->signature_file = $files_path;
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint
], 200);
}
public function updateDangerAccident(Request $request, $id)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'serial-number' => 'required|string',
'accident-date' => 'required|date_format:Y-m-d',
'day' => 'required|integer|between:1,7',
'time' => 'required|string',
'accident-direction' => 'required|integer|between:1,2',
'collision-type' => 'required|integer|between:1,6',
'accident-factors' => 'required|json',
'accident-type' => 'required|integer|between:1,3',
'accident-result' => 'required|json'
]);
$dangerPointAccident = DangerPointAccident::find($id);
$dangerPointAccident->serial_number = $request->input('serial-number') ?? $dangerPointAccident->serial_number;
$dangerPointAccident->accident_date = $request->input('accident-date') ?? $dangerPointAccident->accident_date;
$dangerPointAccident->day = $request->input('day') ?? $dangerPointAccident->day;
$dangerPointAccident->time = $request->input('time') ?? $dangerPointAccident->time;
$dangerPointAccident->accident_direction = $request->input('accident-direction') ?? $dangerPointAccident->accident_direction;
$dangerPointAccident->collision_type = $request->input('collision-type') ?? $dangerPointAccident->collision_type;
if ($request->input('accident-factors')) {
$dangerPointAccident->accident_factors = json_decode($request->input('accident-factors'));
}
$dangerPointAccident->accident_type = $request->input('accident-type') ?? $dangerPointAccident->accident_type;
if ($request->input('accident-result')) {
$dangerPointAccident->accident_result = json_decode($request->input('accident-result'));
}
$dangerPointAccident->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPointAccident
], 200);
}
function getDangerPointPreview($id, $op = 'print')
{
$dangerPoint = DangerPoint::where('id', $id)->with('dangerPointAccidents')->get();
$dayArray = [
'شنبه',
'یکشنبه',
'دوشنبه',
'سه‌شنبه',
'چهارشنبه',
'پنج‌شنبه',
'جمعه'
];
$collisionTypeArray = [
'رخ به رخ',
'واژگونی',
'جلو به عقب',
'جلو به پهلو',
'برخورد با شی ثابت',
'برخورد با عابر'
];
$dangerAccidentsArray = [];
$dangerAccidentsSum = [
0, 0, 0, 0, 0
];
foreach ($dangerPoint[0]->dangerPointAccidents As $key => $dangerAccident) {
$dangerAccidentsArray[$key] = [
'serial_number' => $dangerAccident->serial_number,
'accident_day' => verta($dangerAccident->accident_date)->format('j'),
'accident_month' => verta($dangerAccident->accident_date)->format('n'),
'accident_year' => verta($dangerAccident->accident_date)->format('y'),
'day' => $dayArray[$dangerAccident->day - 1],
'time' => $dangerAccident->time,
'accident_direction' => $dangerAccident->accident_direction,
'collision_type' => $collisionTypeArray[$dangerAccident->collision_type - 1],
'accident_factors' => $dangerAccident->accident_factors,
'accident_type' => $dangerAccident->accident_type,
'accident_result' => $dangerAccident->accident_result
];
$dangerAccidentsSum[0] += ($dangerAccident->accident_type == 1) ? 1 : 0;
$dangerAccidentsSum[1] += ($dangerAccident->accident_type == 2) ? 1 : 0;
//$dangerAccidentsSum[2] += ($dangerAccident->accident_type == 3) ? 1 : 0;
$dangerAccidentsSum[3] += $dangerAccident->accident_result['de'];
$dangerAccidentsSum[4] += $dangerAccident->accident_result['in'];
}
$axisTypeArray = [
'آزادراه',
'بزرگراه',
'راه اصلی',
'راه فرعی با عملکرد اصلی',
'راه فرعی (درجه 1 یا 2)',
'راه روستایی (فرعی درجه 3)'
];
$accidentPossibilityArray = [
'خیر',
'بله'
];
$roadGuardArray = [
'خیر',
'بله'
];
$accident251Array = [
'خیر',
'بله'
];
$geometricDescArray = [
'تقاطع',
'پل',
'قوس افقی',
'قوس قائم',
'قوس افقی و قائم',
'تونل',
'میدان',
'تقاطع-قوس',
'پل-قوس',
'تونل-قوس',
'پل-تقاطع',
'پل-تقاطع-قوس',
'منطقه مسکونی',
'مسیر مستقیم فاقد راه دسترسی',
'پل - تقاطع - منطقه مسکونی',
'تقاطع - قوس - منطقه مسکونی'
];
$accidentCauseArray = [
'قوس تند افقی',
'ابهام در مسیر (نقص در نحوه مسیرنمایی)',
'عدم رعایت سرعت مجاز',
'قوس تند قائم',
'دید ناکافی (مثلث دید-مسافتدید توفق یا سبقت)',
'عدم رعایت سبقت مجاز',
'قرارگیری قوس افقی در تاج قوس قائم',
'(جانمایی/طرح تابلو ) نقص در علائم پیش آگاهی و هدایت مسیر',
'عدم رعایت محدودیت/ممنوعیت عبور',
'قوس افقی در سرازیری تند',
'نقص در علائم اخطاری و انتظامی',
'عدم رعایت فاصله طولی',
'هندسه نامناسب ورودی و خروجی دسترسی-تقاطع-دوربرگردان',
'نقص در اشکارسازی نواحی انتقال قبل پل ها و تونل ها که شانه حذف میشود',
'افتادگی در لبه آسفالت و یا فقدان شانه',
'تبدیل نامناسب نوع راه (جدا شده به جدا نشده)',
'عدم روشنایی ضروری در نقطه (محل عبور عرضی عمده عابرین یا خودرو ها)',
'منطقه مه گیر /کولاک/یخ زدگی/شن زدگی',
'منطقه با تداخل ترافیکی (نواحی مسکونی ،صنعتی،تفریحی،مدارس،و..)',
'منطقه با عبور حیوانات اهلی / وحشی',
'کاهش نامناسب تعداد خطوط (4 به 3 یا به 2)',
'منطقه با افزایش ناگهانی تراکم ترافیک',
'منطقه با ریزش از دیوار ترانشه',
'نبود /نقص در خط سبقت در سربالایی برای وسایل نقلیه سنگین در نواحی ضروری',
'دور مناسب در قوس',
'نقص در آشکار سازی شرایط خاص یا غیر منتظره',
'رویه نامناسب (ناهموار-قیرزده-صیقلی) یا آسیب دیده (وجود چاله )',
'محل نامناسب دسترسی/دسترسی های متعدد و نا ایمن در حریم راه',
'عرض کم سواره رو',
'سرازیری تند'
];
$accidentSeverityArray = [
'شیروانی تند یا پرتگاه بدون حفاظت',
'سر ازاد حفاظ',
'مانع صلب بدون حفاظت در حاشیه راه',
'نقص در ناحیه انتقالی اتصال انواع حفاظ (محل پل و ...)',
'نقص یا عدم کفایت حفاظ کناری',
'نقص یا عدم کفایت نرده پل',
'نقص یا عدم کفایت حفاظ میانی',
'فقدان جداکننده در میانه راه چهار خطه'
];
$accidentCauseString = "";
if ($dangerPoint[0]->accident_cause) {
foreach ($dangerPoint[0]->accident_cause as $value) {
$accidentCauseString .= ($accidentCauseArray[$value - 1] . ", ");
}
}
$accidentSeverityString = "";
if ($dangerPoint[0]->accident_severity != null) {
foreach ($dangerPoint[0]->accident_severity as $value) {
$accidentSeverityString .= ($accidentSeverityArray[$value - 1] . ", ");
}
}
$dangerPointArray = [
'created_at' => verta($dangerPoint[0]->created_at)->format('Y/m/d - H:m'),
'updated_at' => verta($dangerPoint[0]->updated_at)->format('Y/m/d - H:m'),
'province_name' => $dangerPoint[0]->province->name_fa,
'axis_name' => $dangerPoint[0]->axis_name,
'axis_type' => $axisTypeArray[$dangerPoint[0]->axis_type - 1],
'axis_start' => $dangerPoint[0]->axis_start,
'axis_end' => $dangerPoint[0]->axis_end,
'distance_axis_start' => $dangerPoint[0]->distance_axis_start,
'local_name' => $dangerPoint[0]->local_name,
'lat_lng' => [
$dangerPoint[0]->lat,
$dangerPoint[0]->lng
],
'speed_limit' => $dangerPoint[0]->speed_limit,
'speed_average' => $dangerPoint[0]->speed_average,
'accident_possibility' => $accidentPossibilityArray[$dangerPoint[0]->accident_possibility],
'road_guard' => $roadGuardArray[$dangerPoint[0]->road_guard],
'geometric_desc' => $geometricDescArray[$dangerPoint[0]->geometric_desc - 1],
'accident_cause' => ((strlen($accidentCauseString) > 3) ? substr($accidentCauseString, 0, -2) : $accidentCauseString),
'accident_cause_suggest' => $dangerPoint[0]->accident_cause_suggest,
'accident_severity' => ((strlen($accidentSeverityString) > 3) ? substr($accidentSeverityString, 0, -2) : $accidentSeverityString),
'accident_severity_suggest' => $dangerPoint[0]->accident_severity_suggest,
'correction_plan_done' => $dangerPoint[0]->correction_plan_done,
'correction_plan_doing' => $dangerPoint[0]->correction_plan_doing,
'correction_plan_doing_desc' => $dangerPoint[0]->correction_plan_doing_desc,
'correction_plan_doing_suggest' => $dangerPoint[0]->correction_plan_doing_suggest,
'accident_251' => $accident251Array[$dangerPoint[0]->accident_251],
'accident_251_code' => $dangerPoint[0]->accident_251_code,
'danger_point_accidents' => $dangerAccidentsArray,
'danger_accidents_sum' => $dangerAccidentsSum
];
if ($op == 'print') {
$pdf = SnappyPdf::loadView('rmto-preview.pages.danger-point-preview', ['dangerPointArray' => $dangerPointArray]);
return $pdf->download('danger-points-id-' . $dangerPoint[0]->id . '.pdf');
} else {
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPointArray
], 200);
}
}
function uploadDangerPointFiles(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'signature-file' => 'image',
'police-file' => 'image'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
if ($request->file('signature-file')) {
$signature_file = $request->file('signature-file')->storeAs(
'public/danger_points',
'file_signature-file_' . $dangerPoint->id . '_' . time() . '_' . $request->file('signature-file')->getClientOriginalName()
);
$dangerPoint->signature_file = $signature_file;
}
if ($request->file('police-file')) {
$police_file = $request->file('police-file')->storeAs(
'public/danger_points',
'file_police-file_' . $dangerPoint->id . '_' . time() . '_' . $request->file('police-file')->getClientOriginalName()
);
$dangerPoint->police_file = $police_file;
}
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
$dangerPoint->signature_file,
$dangerPoint->police_file
]
], 200);
}
public function destroyDangerFilesImage(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'name' => 'required|string'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
if ($request->input('name') == 'signature-file') {
$dangerPoint->signature_file = null;
} elseif ($request->input('name') == 'police-file') {
$dangerPoint->police_file = null;
}
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => 1
], 200);
}
public function provinceFinalSubmit(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->status = 1;
$dangerPoint->created_at = Carbon::now();
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => $dangerPoint->status
], 200);
}
public function destroyDanger($id)
{
$dangerPoint = DangerPoint::find($id);
$dangerPoint->dangerPointHistories()->delete();
$dangerPoint->dangerPointAccidents()->delete();
$dangerPoint->files()->delete();
$dangerPoint->delete();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => 1
], 200);
}
public function destroyDangerPointAccident(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'acc-id' => 'required|integer|exists:danger_point_accidents,id'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->dangerPointAccidents()
->where('danger_point_accidents.id', $request->input('acc-id'))
->delete();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => 1
], 200);
}
public function adminSubmitStatus(Request $request)
{
$request->validate([
'danger-id' => 'required|integer|exists:danger_points,id',
'status' => 'required|integer|between:2,4',
'status-desc' => 'required_if:danger-status,3'
]);
$dangerPoint = DangerPoint::find($request->input('danger-id'));
$dangerPoint->status = $request->input('status');
if ($request->input('status-desc') && $request->input('status') == 3) {
$dangerPoint->status_desc = $request->input('status-desc');
}
if ($request->input('status') == 2) {
$provincesCode = [
3 => [
"province_id" => 3,
"province_name" => "اردبیل",
"province_code" => 9199
],
4 => [
"province_id" => 4,
"province_name" => "اصفهان",
"province_code" => 2199
],
5 => [
"province_id" => 5,
"province_name" => "البرز",
"province_code" => 1899
],
6 => [
"province_id" => 6,
"province_name" => "ايرانشهر",
"province_code" => 6299
],
7 => [
"province_id" => 7,
"province_name" => "ايلام ",
"province_code" => 8399
],
2 => [
"province_id" => 2,
"province_name" => "آذربايجان غربي",
"province_code" => 5799
],
1 => [
"province_id" => 1,
"province_name" => "آذربایجان شرقی",
"province_code" => 2699
],
8 => [
"province_id" => 8,
"province_name" => "بوشهر",
"province_code" => 9599
],
9 => [
"province_id" => 9,
"province_name" => "تهران",
"province_code" => 1199
],
10 => [
"province_id" => 10,
"province_name" => "چهارمحال و بختياري",
"province_code" => 7799
],
11 => [
"province_id" => 11,
"province_name" => "خراسان جنوبی",
"province_code" => 3399
],
12 => [
"province_id" => 12,
"province_name" => "خراسان رضوي",
"province_code" => 3199
],
13 => [
"province_id" => 13,
"province_name" => "خراسان شمالی",
"province_code" => 3299
],
14 => [
"province_id" => 14,
"province_name" => "خوزستان",
"province_code" => 3699
],
15 => [
"province_id" => 15,
"province_name" => "زنجان",
"province_code" => 6799
],
17 => [
"province_id" => 17,
"province_name" => "سمنان",
"province_code" => 8799
],
16 => [
"province_id" => 16,
"province_name" => "سمنان شرق",
"province_code" => 8899
],
18 => [
"province_id" => 18,
"province_name" => "سيستان و بلوچستان",
"province_code" => 6199
],
19 => [
"province_id" => 19,
"province_name" => "فارس",
"province_code" => 4199
],
20 => [
"province_id" => 20,
"province_name" => "قزوین",
"province_code" => 1599
],
21 => [
"province_id" => 21,
"province_name" => "قم",
"province_code" => 1499
],
25 => [
"province_id" => 25,
"province_name" => "كرمانشاه",
"province_code" => 7199
],
22 => [
"province_id" => 22,
"province_name" => "کردستان",
"province_code" => 7399
],
23 => [
"province_id" => 23,
"province_name" => "کرمان",
"province_code" => 4599
],
24 => [
"province_id" => 24,
"province_name" => "کرمان جنوب",
"province_code" => 4699
],
26 => [
"province_id" => 26,
"province_name" => "کهگیلویه و بویراحمد",
"province_code" => 8599
],
27 => [
"province_id" => 27,
"province_name" => "گلستان",
"province_code" => 9799
],
28 => [
"province_id" => 28,
"province_name" => "گیلان",
"province_code" => 5499
],
29 => [
"province_id" => 29,
"province_name" => "لارستان",
"province_code" => 2999
],
30 => [
"province_id" => 30,
"province_name" => "لرستان",
"province_code" => 8199
],
31 => [
"province_id" => 31,
"province_name" => "مازندران",
"province_code" => 1699
],
32 => [
"province_id" => 32,
"province_name" => "مركزي",
"province_code" => 5199
],
33 => [
"province_id" => 33,
"province_name" => "هرمزگان",
"province_code" => 6499
],
34 => [
"province_id" => 34,
"province_name" => "همدان",
"province_code" => 7599
],
35 => [
"province_id" => 35,
"province_name" => "يزد",
"province_code" => 9399
]
];
$dangerPoints = DangerPoint::where('province_id', $dangerPoint->province_id)
->where('status', 2)
->orderByDesc('code')
->limit(1)
->get();
if ($dangerPoints->count() == 1) {
$dangerPoint->code = $dangerPoints[0]->code + 1;
} else {
$dangerPoint->code = $provincesCode[$dangerPoint->province_id]['province_code'] . '001';
}
}
$dangerPoint->save();
return response()->json([
'status' => 'succeed',
'message' => '',
'data' => [
'status' => $dangerPoint->status,
'status_desc' => $dangerPoint->status_desc
]
], 200);
}
}