Files
backend/app/Http/Controllers/V3/Dashboard/DailyAccidentController.php

458 lines
26 KiB
PHP

<?php
namespace App\Http\Controllers\V3\Dashboard;
use App\Enums\AccidentWayGeoTypes;
use App\Enums\AccidentWeatherConditions;
use App\Enums\AxisTypes;
use App\Facades\DataTable\DataTableFacade;
use App\Facades\File\FileFacade;
use App\Http\Controllers\Controller;
use App\Http\Requests\V3\DailyAccident\StoreRequest;
use App\Http\Requests\V3\DailyAccident\SupervisorRequest;
use App\Http\Traits\ApiResponse;
use App\Models\DailyAccident;
use App\Models\DailyAccidentSettings;
use App\Models\Province;
use App\Services\NominatimService;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class DailyAccidentController extends Controller
{
use ApiResponse;
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
auth()->user()->addActivityComplete(1117);
$query = DailyAccident::query();
$dataTable = DataTableFacade::run(
$query,
$request,
allowedFilters: ['*'],
allowedSortings: ['*']
);
return response()->json($dataTable);
}
/**
* Store a newly created resource in storage.
* @throws Throwable
*/
public function store(StoreRequest $request, NominatimService $nominatimService)
{
$province = Province::query()->find($request->province_id);
$data = [
'province_id' => $province->id,
'province_fa' => $province->name_fa,
'axis_name' => $request->axis_name,
'axis_type' => $request->axis_type,
'axis_type_fa' => AxisTypes::name($request->axis_type),
'axis_start' => $request->axis_start,
'axis_end' => $request->axis_end,
'distance_axis_start' => $request->distance_axis_start,
'local_name' => $request->local_name,
'lat' => $request->lat,
'lng' => $request->lng,
'police_serial' => $request->police_serial,
'accident_date' => $request->accident_date,
'accident_time' => $request->accident_time,
'day_of_the_week' => $request->day_of_the_week,
'direction' => $request->direction,
'direction_fa' => $request->direction == 1 ? 'رفت' : 'برگشت',
'number_of_injured' => $request->number_of_injured,
'number_of_died' => $request->number_of_died,
'weather_condition' => $request->weather_condition,
'weather_condition_fa' => AccidentWeatherConditions::name($request->weather_condition),
'way_geometri' => $request->way_geometri,
'way_geometri_fa' => AccidentWayGeoTypes::name($request->way_geometri),
'collision_type' => $request->collision_type,
'collision_type_fa' => DailyAccidentSettings::query()
->where([
['type', '=', 'collision_type'],
['key', '=', $request->collision_type]
])->first()->value,
'participants_heavy_vehicle' => $request->participants_heavy_vehicle,
'participants_light_vehicle' => $request->participants_light_vehicle,
'participants_bicycle' => $request->participants_bicycle,
'accident_type' => $request->accident_type,
'accident_type_fa' => DailyAccidentSettings::query()
->where([
['type', '=', 'accident_type'],
['name', '=', $request->accident_type]
])->first()->value,
'legal_speed' => $request->legal_speed,
'avarage_speed' => $request->avarage_speed,
'increase_damage_reasons_feqdan_jodakonnande_dar_miyane_rah' => $request->increase_damage_reasons_feqdan_jodakonnande_dar_miyane_rah ?? 0,
'increase_damage_reasons_naqs_ya_adam_kefayat_hefaze_miyani' => $request->increase_damage_reasons_naqs_ya_adam_kefayat_hefaze_miyani ?? 0,
'increase_damage_reasons_naqs_ya_adam_kefayat_narde_pol' => $request->increase_damage_reasons_naqs_ya_adam_kefayat_narde_pol ?? 0,
'increase_damage_reasons_naqs_ya_adam_kefayat' => $request->increase_damage_reasons_naqs_ya_adam_kefayat ?? 0,
'increase_damage_reasons_naqs_dar_naheye_enteqali' => $request->increase_damage_reasons_naqs_dar_naheye_enteqali ?? 0,
'increase_damage_reasons_mane_solb_bedone_hefaz' => $request->increase_damage_reasons_mane_solb_bedone_hefaz ?? 0,
'increase_damage_reasons_sar_azad_hefaz' => $request->increase_damage_reasons_sar_azad_hefaz ?? 0,
'increase_damage_reasons_shirvani_tond_ya_partgah' => $request->increase_damage_reasons_shirvani_tond_ya_partgah ?? 0,
'accident_reason_dor_monaseb_dar_qus' => $request->accident_reason_dor_monaseb_dar_qus ?? 0,
'accident_reason_saraziri_tond' => $request->accident_reason_saraziri_tond ?? 0,
'accident_reason_nabod_dar_khat_sebqat_dar_sarbalaye' => $request->accident_reason_nabod_dar_khat_sebqat_dar_sarbalaye ?? 0,
'accident_reason_mantaqe_ba_rizesh_az_divar' => $request->accident_reason_mantaqe_ba_rizesh_az_divar ?? 0,
'accident_reason_mantaqe_ba_afzayesh_nagahani' => $request->accident_reason_mantaqe_ba_afzayesh_nagahani ?? 0,
'accident_reason_kahesh_na_monaseb_tedad' => $request->accident_reason_kahesh_na_monaseb_tedad ?? 0,
'accident_reason_mantaqe_ba_obor_heyvanat_ahli' => $request->accident_reason_mantaqe_ba_obor_heyvanat_ahli ?? 0,
'accident_reason_mantaqe_ba_tadakhol_terafiki' => $request->accident_reason_mantaqe_ba_tadakhol_terafiki ?? 0,
'accident_reason_arze_kam_savare_ro' => $request->accident_reason_arze_kam_savare_ro ?? 0,
'accident_reason_mantaqe_meh_gir' => $request->accident_reason_mantaqe_meh_gir ?? 0,
'accident_reason_adam_roshanaye_zarori_dar_noqte' => $request->accident_reason_adam_roshanaye_zarori_dar_noqte ?? 0,
'accident_reason_tabdil_na_monaseb_noe_rah' => $request->accident_reason_tabdil_na_monaseb_noe_rah ?? 0,
'accident_reason_oftadegi_dar_labe_asphalt' => $request->accident_reason_oftadegi_dar_labe_asphalt ?? 0,
'accident_reason_naqs_dar_ashkarsazi_navahi' => $request->accident_reason_naqs_dar_ashkarsazi_navahi ?? 0,
'accident_reason_mahal_na_monaseb_dastrasi' => $request->accident_reason_mahal_na_monaseb_dastrasi ?? 0,
'accident_reason_roye_na_monaseb' => $request->accident_reason_roye_na_monaseb ?? 0,
'accident_reason_naqs_dar_ashkar_sazi_shrayet_khas' => $request->accident_reason_naqs_dar_ashkar_sazi_shrayet_khas ?? 0,
'accident_reason_hendese_na_monaseb_vorodi_va_khoroji' => $request->accident_reason_hendese_na_monaseb_vorodi_va_khoroji ?? 0,
'accident_reason_adam_rayat_fasele_tooli' => $request->accident_reason_adam_rayat_fasele_tooli ?? 0,
'accident_reason_naqs_dar_alayem_ekhtari_va_entezami' => $request->accident_reason_naqs_dar_alayem_ekhtari_va_entezami ?? 0,
'accident_reason_qus_ofoqi_dar_saraziri_tond' => $request->accident_reason_qus_ofoqi_dar_saraziri_tond ?? 0,
'accident_reason_adam_rayat_obor' => $request->accident_reason_adam_rayat_obor ?? 0,
'accident_reason_naqs_dar_alayem_pish_agahi' => $request->accident_reason_naqs_dar_alayem_pish_agahi ?? 0,
'accident_reason_qarar_gire_qus_ofoqi' => $request->accident_reason_qarar_gire_qus_ofoqi ?? 0,
'accident_reason_adam_rayat_sebghat_mojaz' => $request->accident_reason_adam_rayat_sebghat_mojaz ?? 0,
'accident_reason_did_na_kafi' => $request->accident_reason_did_na_kafi ?? 0,
'accident_reason_qus_tond_qaem' => $request->accident_reason_qus_tond_qaem ?? 0,
'accident_reason_adam_rayat_sorat_mojaz' => $request->accident_reason_adam_rayat_sorat_mojaz ?? 0,
'accident_reason_ebham_dar_masir' => $request->accident_reason_ebham_dar_masir ?? 0,
'accident_reason_qus_tond_ofoghi' => $request->accident_reason_qus_tond_ofoghi ?? 0,
'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng)
];
DB::transaction(function () use ($data, $request)
{
$accident = DailyAccident::query()->create($data);
$accident->first_image = $request->has('first_image') ? FileFacade::save($request->file('first_image'), "daily_accident_files/{$accident->id}") : null;
$accident->second_image = $request->has('second_image') ? FileFacade::save($request->file('second_image'), "daily_accident_files/{$accident->id}") : null;
$accident->police_file = $request->has('police_file') ? FileFacade::save($request->file('police_file'), "daily_accident_files/{$accident->id}") : null;
$accident->save();
auth()->user()->addActivityComplete(1118);
});
return $this->successResponse();
}
/**
* Display the specified resource.
*/
public function show(DailyAccident $dailyAccident)
{
return $this->successResponse($dailyAccident);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, DailyAccident $dailyAccident)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(DailyAccident $dailyAccident)
{
auth()->user()->addActivityComplete(1120, $dailyAccident);
FileFacade::deleteDirectory("daily_accident_files/{$dailyAccident->id}");
$dailyAccident->delete();
return $this->successResponse();
}
/**
* @throws Throwable
*/
public function supervise(DailyAccident $dailyAccident, SupervisorRequest $request)
{
DB::transaction(function () use ($request, $dailyAccident) {
$dailyAccident->update([
'state' => $request->state,
'state_fa' => $request->state == '1' ? 'تایید شده' : 'عدم تایید',
'message' => $request->message,
'state_updated_at' => now(),
]);
auth()->user()->addActivityComplete(1121, $dailyAccident);
});
return $this->successResponse();
}
public function map(Request $request)
{
$dataTable = DataTableFacade::run(
DailyAccident::query(),
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
allowedSelects: ['lat', 'lng', 'id']
);
return response()->json($dataTable);
}
public function poster(Request $request)
{
$request->validate([
'province_id' => 'numeric',
'from_date' => 'date_format:Y-m-d',
'to_date' => 'date_format:Y-m-d',
]);
$province_id = $request->province_id;
$from_date = $request->from_date;
$to_date = $request->to_date;
$data = [];
$data['payamad_tasadof'] = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->selectRaw('sum(number_of_died) as number_of_died, sum(number_of_injured) as number_of_injured, count(id) as number_of_accident')
->get();
// ACCIDENT REPORT -> PIE CHART
$accident_types_with_zero_accidents = DailyAccident::selectRaw('0 as cnt, accident_type, accident_type_fa, 0 as percentage')
->whereNotIn('accident_type_fa', function ($query) use ($province_id, $from_date, $to_date) {
$query->select('accident_type_fa')->distinct()
->from('daily_accidents')
->when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
});
})
->groupBy('accident_type_fa');
$data['accident_report']['pie_chart'] = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->groupBy('accident_type_fa')
->selectRaw('count(accident_type) as cnt, accident_type, accident_type_fa, round(count(*) * 100 / sum(count(*)) over(), 1) as percentage')
->union($accident_types_with_zero_accidents)
// ->orderBy('accident_type', 'desc')
->get();
// END
// ACCIDENT REPORT -> schematic_map AND NUMBER OF ACCIDENTS PER PROVINCE
if(!$province_id){
$provinces_with_zero_accidents = Province::whereNotIn('id', function ($query) use ($from_date, $to_date) {
$query->select('province_id')
->distinct('province_id')
->from('daily_accidents')
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
});
})->selectRaw('null, id, name_fa');
$data['accident_report']['schematic_map'] = DailyAccident::when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->groupBy('province_id')
->selectRaw('count(*) as cnt, province_id, province_fa')
->union($provinces_with_zero_accidents)
->orderBy('province_id', 'asc')
// ->orderBy('cnt', 'asc')
->get();
$data['number_of_accidents_per_province'] = $data['accident_report']['schematic_map'];
}
// END
// ACCIDENT REPORT -> bar chart
$way_geometries_with_zero_accidents = DailyAccident::selectRaw('0 as cnt, way_geometri, way_geometri_fa')
->whereNotIn('way_geometri', function ($query) use ($province_id, $from_date, $to_date) {
$query->select('way_geometri')->distinct()
->from('daily_accidents')
->when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
});
})
->groupBy('way_geometri');
$data['accident_report']['bar_chart'] = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->groupBy('way_geometri')
->selectRaw('count(*) as cnt, way_geometri, way_geometri_fa')
->union($way_geometries_with_zero_accidents)
->orderBy('cnt', 'desc')
->get();
// END
// share_of_accidents_by_road_type
$share_by_road_type_data = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->groupBy('axis_type', 'accident_type')
->selectRaw('count(*) as cnt, axis_type, axis_type_fa, accident_type, accident_type_fa')
->get()->toArray();
$result = [
['accident_type_fa' => 'خسارتی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['accident_type_fa' => 'جرحی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['accident_type_fa' => 'فوتی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
];
foreach ($share_by_road_type_data as $item) {
$key = $item['accident_type'] - 1;
foreach ($result[$key]['data'] as $k => $axis_data) {
if ($axis_data['axis_type_fa'] == $item['axis_type_fa']) {
$result[$key]['data'][$k]['cnt'] = $item['cnt'];
break;
}
}
}
$data['share_of_accidents_by_road_type'] = $result;
// END
// share_of_accidents_by_road_geometry
$share_by_road_geometry_data = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->groupBy('way_geometri', 'axis_type')
->selectRaw('count(*) as cnt, way_geometri, way_geometri_fa, axis_type, axis_type_fa')
->get()->toArray();
$result = [
['way_geometri_fa' => 'تقاطع - دسترسی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'قوس افقی یا قائم', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'پل', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'پل و قوس', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'تونل', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'میدان', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'دوربرگردان', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'بریدگی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'تقاطع و قوس', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
['way_geometri_fa' => 'نقطه عادی', 'data' => [['axis_type_fa' => 'آزادراه', 'cnt' => 0], ['axis_type_fa' => 'بزرگراه', 'cnt' => 0], ['axis_type_fa' => 'اصلی', 'cnt' => 0], ['axis_type_fa' => 'فرعی', 'cnt' => 0]]],
];
foreach ($share_by_road_geometry_data as $item) {
$key = $item['way_geometri'] - 1;
foreach ($result[$key]['data'] as $k => $axis_data) {
if ($axis_data['axis_type_fa'] == $item['axis_type_fa']) {
$result[$key]['data'][$k]['cnt'] = $item['cnt'];
break;
}
}
}
$data['share_of_accidents_by_road_geometry'] = $result;
// END
// collision type
$collision_types_with_zero_accidents = DailyAccident::selectRaw('0 as percentage, collision_type, collision_type_fa')
->whereNotIn('collision_type', function ($query) use ($province_id, $from_date, $to_date) {
$query->select('collision_type')->distinct()
->from('daily_accidents')
->when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
});
})
->groupBy('collision_type');
// dd($collision_types_with_zero_accidents->get()) ;
$data['collision_type'] = DailyAccident::when($province_id, function ($query, $province_id) {
$query->where('province_id', $province_id);
})
->when(($from_date && $to_date), function ($query) use ($from_date, $to_date) {
$query->whereBetween('accident_date', [$from_date . ' 00:00:00', $to_date . ' 23:59:59']);
})
->whereNotNull(['collision_type', 'collision_type_fa'])
->groupBy('collision_type')
->selectRaw('round(count(*) * 100 / sum(count(*)) over(), 1) as percentage, collision_type, collision_type_fa')
->union($collision_types_with_zero_accidents)
->orderBy('percentage', 'desc')
->get();
// END
// per day
$where_province_exists = ($province_id) ? "province_id = $province_id and" : '';
$where_date_exists = ($from_date && $to_date) ? "accident_date BETWEEN '$from_date 00:00:00' and '$to_date 23:59:59' and" : '';
// dd($where_date_exists);
$per_day_array = DB::select("SELECT t1.*, round(sum(t1.cnt) over(PARTITION by day_part) * 100 / sum(t1.cnt) over(), 1) as day_percentage
from
(select count(*) as cnt, sum(count(*)) over() as total, round(count(*) * 100/ sum(count(*)) over(), 1) as percent, accident_type, accident_type_fa, 'day' as day_part
from daily_accidents da where $where_province_exists $where_date_exists accident_time BETWEEN '06:00:00' and '18:00:00' group by accident_type
UNION
select count(*) as cnt, sum(count(*)) over() as total, round(count(*) * 100/ sum(count(*)) over(), 1) as percent, accident_type, accident_type_fa, 'night' as day_part
from daily_accidents da where $where_province_exists $where_date_exists accident_time not BETWEEN '06:00:00' and '18:00:00' group by accident_type)t1
order by day_part");
// dd($per_day_array);
$per_day_result = [
['accident_type_fa' => 'خسارتی', 'night' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0], 'day' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0]],
['accident_type_fa' => 'جرحی', 'night' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0], 'day' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0]],
['accident_type_fa' => 'فوتی', 'night' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0], 'day' => ['cnt' => 0, 'percent' => 0, 'total_percentage' => 0]]
];
$per_day_array = json_decode(json_encode($per_day_array), true);
foreach ($per_day_array as $item) {
$key = $item['accident_type'] - 1;
$per_day_result[$key][$item['day_part']]['cnt'] = $item['cnt'];
$per_day_result[$key][$item['day_part']]['percent'] = $item['percent'];
// $per_day_result[$key][$item['day_part']]['total_percentage'] = $item['day_percentage'];
for ($i=0; $i < count($per_day_result); $i++) {
$per_day_result[$i][$item['day_part']]['total_percentage'] = $item['day_percentage'];
}
}
$data['per_day'] = $per_day_result;
// END
return view('posters.DailyAccidentPoster', compact("data"));
}
}