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

1201 lines
50 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\RoadUpgradeSafety;
use App\Models\RoadDangerPrevention;
use App\Models\RoadTechnicalBuilding;
use App\Models\RoadMaintenanceProject;
use App\Models\RoadTollhouseManagement;
use App\Models\RoadItemsProject;
use App\Models\RoadPatrol;
use App\Models\AccidentPoint;
use App\Models\DangerPoint;
use App\Models\Camp;
use App\Models\ContractSubItems;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\Models\Province;
use App\Models\City;
use App\Models\RahdariPoint;
use App\Models\InfoItem;
use App\Models\RoadObserved;
class BiController extends Controller
{
public function getSubtitleCounts(Request $request)
{
if (auth()->user()) {
auth()->user()->addActivityComplete(1054);
}
$subjectID = $request->subject_id;
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
/// Number of Rahdari Projects
$rahdariSum = ContractSubItems::when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->count();
/// Number of Road items project
$roadItemsProjectsCount = RoadItemsProject::when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->count();
/// Number of Road patrol projects
$roadPatrolProjects = RoadPatrol::when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->count();
/// Number of Road Observeds
$roadObservedCount = RoadObserved::where('rms_status', '!=', 0)
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($cityID, function ($query, $cityID) {
return $query->where('rms_city_id', $cityID);
})
->count();
// Number of Accident points in 1395
$accidentPointsCount = AccidentPoint::count();
// Number of Danger points in 1399
$dangerPointCount = DangerPoint::when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->count();
// Number of camp
$campsCount = Camp::when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($cityID, function ($query, $cityID) {
return $query->where('cities_id', $cityID);
})
->count();
return response()->json([
'message' => 'success',
'data' => [
'subjects' => [
[
'count' => $rahdariSum,
'action_id' => '1'
],
[
'count' => $roadItemsProjectsCount,
'action_id' => '2'
],
[
'count' => $roadPatrolProjects,
'action_id' => '3'
],
[
'count' => $roadObservedCount,
'action_id' => '4'
],
[
'count' => $accidentPointsCount,
'action_id' => '5'
],
[
'count' => $dangerPointCount,
'action_id' => '6'
],
[
'count' => $campsCount,
'action_id' => '7'
]
],
]
]);
}
public function getDiagram(Request $request)
{
$subjectID = $request->subject_id;
$provinceID = $request->province_id;
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$todayDate = Carbon::now()->format('Y-m-d');
$provinces = Province::select('id', 'name_fa')->get();
$cities = City::select('id', 'name_fa')
->where("type_id", 1)
->where('province_id', $provinceID)
->get();
$array = [];
switch ($subjectID) {
case 1:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('contract_subitems')
->where('progress_project', '!=', null)
->select('province_id', 'province_fa', DB::raw('round(avg(progress_project), 1) as count, count(progress_project) as count_number'))
->groupBy('province_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa', DB::raw('round(avg(progress_project), 1) as count, count(progress_project) as count_number'))
->groupBy('city_id');
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
$array_for_number = self::createDataArrayForCountNumber($data, $array);
break;
case 2:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('road_items_projects')
->select('province_id', 'province_fa')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa');
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$dataAfter = [];
if($provinceID) {
foreach ($data as $key => $value) {
$dataAfter[$value->city_id - 1]['city_fa'] = $value->city_id;
$dataAfter[$value->city_id - 1]['city_id'] = $value->city_id;
if(!isset($dataAfter[$value->city_id - 1]['count'])) $dataAfter[$value->city_id - 1]['count'] =0;
$dataAfter[$value->city_id - 1]['count']++;
}
} else {
foreach ($data as $key => $value) {
$dataAfter[$value->province_id - 1]['province_fa'] = $value->province_fa;
$dataAfter[$value->province_id - 1]['province_id'] = $value->province_id;
if(!isset($dataAfter[$value->province_id - 1]['count'])) $dataAfter[$value->province_id - 1]['count'] =0;
$dataAfter[$value->province_id - 1]['count']++;
}
}
$array = self::createDataArray($dataAfter, $array);
break;
case 3:
// if (! $provinceID) {
// $array = self::createArrayFromProvincesOrCities($provinces, $array);
// }
// if ($provinceID) {
// $array = self::createArrayFromProvincesOrCities($cities, $array);
// }
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}else {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
$data = DB::table('road_patrols')
->select('province_id', 'province_fa', DB::raw('count(*) as count'))
->groupBy('province_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa', DB::raw('count(*) as count'))
->groupBy('city_id');
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
case 4:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = RoadObserved::select('rms_province_id as province_id', 'ProvinceName as province_fa', 'rms_status as status')
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID)
->select('rms_city_id as city_id', 'TownName as city_fa', 'rms_status as status');
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$dataAfter = [];
if($provinceID) {
foreach ($data as $key => $value) {
$dataAfter[$value->city_id - 1]['city_fa'] = $value->city_fa;
$dataAfter[$value->city_id - 1]['city_id'] = $value->city_id;
if(!isset($dataAfter[$value->city_id - 1]['count_number'])) $dataAfter[$value->city_id - 1]['count_number'] = 0;
$dataAfter[$value->city_id - 1]['count_number']++;
if(!isset($dataAfter[$value->city_id - 1]['count'])) $dataAfter[$value->city_id - 1]['count'] = 0;
if($value->status != 0) {
$dataAfter[$value->city_id - 1]['count']++;
}
}
} else {
foreach ($data as $key => $value) {
$dataAfter[$value->province_id - 1]['province_fa'] = $value->province_fa;
$dataAfter[$value->province_id - 1]['province_id'] = $value->province_id;
if(!isset($dataAfter[$value->province_id - 1]['count_number'])) $dataAfter[$value->province_id - 1]['count_number'] = 0;
$dataAfter[$value->province_id - 1]['count_number']++;
if(!isset($dataAfter[$value->province_id - 1]['count'])) $dataAfter[$value->province_id - 1]['count'] = 0;
if($value->status != 0) {
$dataAfter[$value->province_id - 1]['count']++;
}
}
}
$array = self::createDataArray($dataAfter, $array);
// dd($array);
$array_for_number = self::createDataArrayForCountNumber($dataAfter, $array);
break;
case 5:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('accident_points')
->select('province_id', 'province as province_fa', DB::raw('count(*) as count'))
->groupBy('province_id')
->get();
$array = self::createDataArray($data, $array);
break;
case 6:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('danger_points')
->select('province_id', 'province_fa', DB::raw('count(*) as count'))
->groupBy('province_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id as city_id', DB::raw('count(*) as count'))
->groupBy('city_id');
})
->get();
$array = self::createDataArray($data, $array);
break;
case 7:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('camps')
->select('province_id', 'province_id', DB::raw('count(*) as count , city_id'))
->groupBy('province_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_1_fa', DB::raw('count(*) as count, city_id'))
->groupBy('cities_id');
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
default:
return response()->json([
'status' => 'failed',
'message' => 'Request is NULL'
]);
break;
}
$finalArray = [];
if ($subjectID == 1 || $subjectID == 4) {
foreach ($array['label'] as $index => $value) {
if ($array_for_number['data'][$index] == NULL ) {
$finalArray['label'][] = $value;
$finalArray['data'][] = NULL;
} else {
$finalArray['label'][] = $value." (".$array_for_number['data'][$index].")";
$finalArray['data'][] = $array['data'][$index];
}
}
}else {
foreach ($array['label'] as $index => $value) {
$finalArray['label'][] = $value;
$finalArray['data'][] = $array['data'][$index];
}
}
$geoJsonArray = $finalArray['data'];
array_multisort($finalArray['data'], SORT_DESC, $finalArray['label']);
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'نمودار وضعیت',
'data' => $finalArray['data']
];
return response()->json([
'status' => 'success',
'data' => $myArray,
'geojson' => $geoJsonArray
]);
}
public function getDiagramForTile(Request $request)
{
$subjectID = $request->subject_id;
$provinceID = $request->province_id;
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$todayDate = Carbon::now()->format('Y-m-d');
$provinces = Province::select('id', 'name_fa')->get();
$cities = City::select('id', 'name_fa')
->where("type_id", 1)
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->get();
$array = [];
foreach ($cities as $key => $value) {
$array['label'][$value->id] = $value->name_fa;
$array['data'][$value->id] = null;
}
switch ($subjectID) {
case 1:
$array = self::createArrayFromProvincesOrCities($cities, $array);
$data = DB::table('contract_subitems')
->where('progress_project', '!=', null)
->select('city_id', 'city_fa', DB::raw('round(avg(progress_project), 1) as count'))
->groupBy('city_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa', DB::raw('round(avg(progress_project), 1) as count'));
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
case 2:
$array = self::createArrayFromProvincesOrCities($cities, $array);
$data = DB::table('road_items_projects')
->select('city_id', 'city_fa', DB::raw('count(*) as count'))
->groupBy('city_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa', DB::raw('count(*) as count'));
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
case 3:
$array = self::createArrayFromProvincesOrCities($cities, $array);
$data = DB::table('road_patrol_projects')
->select('city_id', 'city_fa', DB::raw('count(*) as count'))
->groupBy('city_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', 'city_fa', DB::raw('count(*) as count'));
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
case 4:
$array = self::createArrayFromProvincesOrCities($cities, $array);
$data = RoadObserved::select('rms_city_id as city_id', 'TownName as city_fa', DB::raw('count(*) as count'))
->groupBy('rms_city_id')
->where('rms_status', '!=', 0)
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID)
->select('rms_city_id as city_id', 'TownName as city_fa', DB::raw('count(*) as count'));
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
case 5:
$array = self::createArrayFromProvincesOrCities($cities, $array);
$data = DB::table('accident_points')
->select('province_id', 'province as province_fa', DB::raw('count(*) as count'))
->groupBy('province_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id as city_id', DB::raw('count(*) as count'))
->groupBy('city_id');
})
->get();
$array = self::createDataArray($data, $array);
break;
case 6:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('danger_points')
->select('city_id', 'city_fa', DB::raw('count(*) as count'))
->groupBy('city_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_id', DB::raw('count(*) as count'));
})
->get();
$array = self::createDataArray($data, $array);
break;
case 7:
if (! $provinceID) {
$array = self::createArrayFromProvincesOrCities($provinces, $array);
}
if ($provinceID) {
$array = self::createArrayFromProvincesOrCities($cities, $array);
}
$data = DB::table('camps')
->select('city_1_fa', DB::raw('count(*) as count, city_id'))
->groupBy('cities_id')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID)
->select('city_1_fa', DB::raw('count(*) as count, city_id'));
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->get();
$array = self::createDataArray($data, $array);
break;
default:
return response()->json([
'status' => 'failed',
'message' => 'Request is NULL'
]);
break;
}
return response()->json([
'message' => 'success',
'data' => $array
]);
}
public static function createDataArray($data, $array)
{
if(gettype($data) == 'array') {
foreach ($data as $key => $item) {
// $item['province_id'] = $item['province_id'] ?? 'استان نامشخص';
$array['data'][($item['province_id'] ?? $item['city_id'] ?? 'استان نامشخص')] = $item['count'];
}
} else {
foreach ($data as $key => $item) {
$array['data'][($item->province_id ?? $item->city_id ?? 'استان نامشخص' )] = $item->count;
}
}
return $array;
}
public static function createDataArrayForCountNumber($data, $array)
{
if(gettype($data) == 'array') {
foreach ($data as $key => $item) {
$array['data'][($item['province_id'] ?? $item['city_id'] )] = $item['count_number'];
}
} else {
foreach ($data as $key => $item) {
$array['data'][($item->province_id ?? $item->city_id)] = $item->count_number;
}
}
return $array;
}
public static function createArrayFromProvincesOrCities($collection, $array,$default = null)
{
$newArray = [];
foreach ($collection as $key => $value) {
$array['label'][$value->id] = $value->name_fa;
$array['data'][$value->id] = $default;
}
return $array;
}
public function getItems()
{
$items = \App\Models\InfoItem::select('item as id', 'item_str')->groupBy('item')->get();
return response()->json([
'status' => 'success',
'data' => $items
]);
}
public function TollhousesCount(Request $request)
{
$province = $request->province_id;
$city = $request->city_id;
switch ($request->type) {
case '1':
$data = RahdariPoint::where('status', '!=', 0)
->when($province, function ($query, $province) {
return $query->where('province_id', $province);
})
->when($city, function ($query, $city) {
return $query->where('city_id', $city);
})
->count();
break;
default:
# code...
break;
}
return response()->json([
'message' => 'success',
'data' => $data
]);
}
public function averagePhysicalProgressRahdariProjects(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$avg = DB::table('contract_subitems')
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->avg('progress_project');
return response()->json([
'message' => 'success',
'data' => round($avg) ?? 0
]);
}
public function separationProjectTypeRahdariProjects(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$collection = ContractSubItems::groupBy('project_type_id')
->select('project_type_id as id', 'project_type_fa_for_chart as label')
->get();
$array = [];
foreach ($collection as $key => $value) {
$array['label'][$value->id] = $value->label;
$array['data'][$value->id] = 0;
}
$data = DB::table('contract_subitems')
->groupBy('project_type_id')
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->select('project_type_id as id', 'project_type_fa_for_chart as label', DB::raw('count(*) as count'))
->get();
foreach ($data as $key => $item) {
$array['data'][$item->id] = $item->count;
}
$finalArray = [];
foreach ($array['label'] as $value) {
$finalArray['label'][] = $value;
}
foreach ($array['data'] as $value) {
$finalArray['data'][] = $value;
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'به تفکیک نوع پروژه های راهداری',
'data' => $finalArray['data']
];
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function separationLastStatusRahdariProjects(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$collection = ContractSubItems::groupBy('last_status_id')
->where('last_status_id', '!=', '0')
->select('last_status_id as id', 'last_status_fa_for_chart as label')
->get();
$array = [];
foreach ($collection as $key => $value) {
$array['label'][$value->id] = $value->label;
$array['data'][$value->id] = 0;
}
$data = DB::table('contract_subitems')
->where('last_status_id', '!=', '0')
->groupBy('last_status_id')
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->select('last_status_id as id', 'last_status_fa as label', DB::raw('count(*) as count'))
->get();
foreach ($data as $key => $item) {
$array['data'][$item->id] = $item->count;
}
$finalArray = [];
foreach ($array['label'] as $value) {
$finalArray['label'][] = $value;
}
foreach ($array['data'] as $value) {
$finalArray['data'][] = $value;
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'تفکیک به آخرین وضعیت پروژه',
'data' => $finalArray['data']
];
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function separationAxisTypeRahdariProjects(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$collection = ContractSubItems::groupBy('axis_type_id')
->select('axis_type_id as id', 'axis_type_fa as label')
->get();
$array = [];
foreach ($collection as $key => $value) {
$array['label'][$value->id] = $value->label;
$array['data'][$value->id] = 0;
}
$data = DB::table('contract_subitems')
->groupBy('axis_type_id')
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('contract_date_from_parent_contract', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->select('axis_type_id as id', 'axis_type_fa as label', DB::raw('count(*) as count'))
->get();
foreach ($data as $key => $item) {
$array['data'][$item->id] = $item->count;
}
$finalArray = [];
foreach ($array['label'] as $value) {
$finalArray['label'][] = $value;
}
foreach ($array['data'] as $value) {
$finalArray['data'][] = $value;
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'تفکیک به نوع محور',
'data' => $finalArray['data']
];
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function percentComplaintsHandled(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$countHandled = RoadObserved::when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('rms_city_id', $cityID);
})
->where('rms_status', "<>",0)
->count();
$countAll = RoadObserved::when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('rms_city_id', $cityID);
})
->count();
$percent = $countAll ? ($countHandled / $countAll) * 100 : 0;
return response()->json([
'message' => 'success',
'data' => round($percent) ?? 0
]);
}
public function CountByNumbersAccidentPoints(Request $request)
{
$provinceID = $request->province_id;
$collection = AccidentPoint::groupBy('geometric_desc')
->select('geometric_desc as label')
->get();
$array = [];
foreach ($collection as $key => $value) {
$array['label'][$value->label] = $value->label;
$array['data'][$value->label] = 0;
}
$data = DB::table('accident_points')
->groupBy('geometric_desc')
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->select('geometric_desc as label', DB::raw('count(*) as count'))
->get();
foreach ($data as $key => $item) {
$array['data'][$item->label] = $item->count;
}
$finalArray = [];
foreach ($array['label'] as $value) {
$finalArray['label'][] = $value;
}
foreach ($array['data'] as $value) {
$finalArray['data'][] = $value;
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'تفکیک هندسی',
'data' => $finalArray['data']
];
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function CountAccidentPoints(Request $request)
{
$provinceID = $request->province_id;
$data = DB::table('accident_points')
->where('end_date', '!=', null)
->count();
$percent = ($data / AccidentPoint::count()) * 100;
return response()->json([
'message' => 'success',
'data' => round($percent)
]);
}
public function roadItemProjectItemChart(Request $request)
{
$itemId = $request->item_id;
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id ?? null;
$cityID = $request->city_id ?? null;
$start = microtime(true);
$data = DB::table('road_items_projects')
->select('sub_item_fa as label', DB::raw('count(*) as count'))
->where('item', $itemId)
->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59'])
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->groupBy('sub_item')
->get();
$end = microtime(true);
$sub_item = \App\Models\InfoItem::select('item as id', 'sub_item_str')
->where('item', $itemId)
->get();
$finalArray = [];
foreach ($sub_item as $value) {
$finalArray['label'][] = $value->sub_item_str;
$temp = $data->where('label', $value->sub_item_str)->first();
if ($temp) {
$finalArray['data'][] = $temp->count;
} else {
$finalArray['data'][] = 0;
}
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'به تفکیک نوع پروژه های راهداری',
'data' => $finalArray['data']
];
$diff = $end - $start;
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function separationActivityTypeRahdariActivities(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id ?? null;
$cityID = $request->city_id ?? null;
$finalArray = [];
foreach (InfoItem::groupby('item')->get() as $key => $value) {
$finalArray['label'][$value['item']] = $value['item_str'];
$finalArray['data'][$value['item']] = 0;
}
$data = DB::table('road_items_projects')
->select('item_fa as label', 'item')
->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59'])
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('city_id', $cityID);
})
->get();
$dataAfter = array();
foreach ($data as $key => $value) {
$dataAfter[$value->item]['label'] = $value->label;
if(!isset($dataAfter[$value->item]['count'])) $dataAfter[$value->item]['count'] =0;
$dataAfter[$value->item]['count']++;
}
foreach ($dataAfter as $key => $value) {
$finalArray['label'][$key] = $value['label'];
$finalArray['data'][$key] = $value['count'];
}
$temporary = [];
foreach ($finalArray['label'] as $value) {
$temporary['label'][] = $value;
}
foreach ($finalArray['data'] as $value) {
$temporary['data'][] = $value;
}
array_multisort($temporary['data'], SORT_DESC, $temporary['label']);
$myArray = [];
$myArray['labels'] = $temporary['label'];
$myArray['datasets'][] = [
'label' => 'به تفکیک نوع پروژه های راهداری',
'data' => $temporary['data']
];
return response()->json([
'message' => 'success',
'data' => $myArray
]);
}
public function separationComplainTypeRahdariComplains(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$dataLabel = RoadObserved::select('fk_FeatureType as id', 'FeatureTypeTitle as label', DB::raw('count(*) as count'))
->groupBy('fk_FeatureType')
->get();
$array = [];
foreach ($dataLabel as $value) {
$array['label'][$value->id] = $value->label;
$array['dataVasel'][$value->id] = 0;
$array['dataResidegiShode'][$value->id] = 0;
}
$dataResidegiShode = RoadObserved::where('rms_status', '!=', 0)
->select('fk_FeatureType as id', DB::raw('count(*) as count'))
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom, $dateTo]);
})
->when($cityID, function ($query, $cityID) {
return $query->where('rms_city_id', $cityID);
})
->groupBy('fk_FeatureType')
->get();
foreach ($dataResidegiShode as $key => $item) {
$array['dataResidegiShode'][$item->id] = $item->count;
}
$dataVasel = RoadObserved::select('fk_FeatureType as id', DB::raw('count(*) as count'))
->when($provinceID, function ($query, $provinceID) {
return $query->where('rms_province_id', $provinceID);
})
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom, $dateTo]);
})
->when($cityID, function ($query, $cityID) {
return $query->where('rms_city_id', $cityID);
})
->groupBy('fk_FeatureType')
->get();
foreach ($dataVasel as $key => $item) {
$array['dataVasel'][$item->id] = $item->count;
}
$finalArray = [];
foreach ($array['label'] as $value) {
$finalArray['label'][] = $value;
}
foreach ($array['dataResidegiShode'] as $value) {
$finalArray['dataResidegiShode'][] = $value;
}
foreach ($array['dataVasel'] as $value) {
$finalArray['dataVasel'][] = $value;
}
$myArray = [];
$myArray['labels'] = $finalArray['label'];
$myArray['datasets'][] = [
'label' => 'رسیدگی شده',
'data' => $finalArray['dataResidegiShode']
];
$myArray['datasets'][] = [
'label' => 'واصل شده',
'data' => $finalArray['dataVasel']
];
return response()->json([
'message' => 'success',
'data' => $myArray ?? null
]);
}
public function primaryEstimatesDamages(Request $request)
{
return response()->json([
'message' => 'success',
'data' => Camp::where('is_open', 2)->sum('blockage_damage_money')
]);
}
public function totalLengthDamagedAxes(Request $request)
{
$dateFrom = $request->from_date;
$dateTo = $request->to_date;
$provinceID = $request->province_id;
$cityID = $request->city_id;
$camps = DB::table('camps')
->when($dateFrom, function ($query) use ($dateFrom, $dateTo) {
return $query->whereBetween('created_at', [$dateFrom . ' 00:00:00', $dateTo . ' 23:59:59']);
})
->when($provinceID, function ($query, $provinceID) {
return $query->where('province_id', $provinceID);
})
->when($cityID, function ($query, $cityID) {
return $query->where('cities_id', $cityID);
})
->sum('blockage_length');
return response()->json([
'message' => 'success',
'data' => round($camps, 2)
]);
}
}