1020 lines
47 KiB
PHP
1020 lines
47 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\RoadMaintenanceProject;
|
|
use Hekmatinasser\Verta\Verta;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Collection;
|
|
|
|
|
|
class RoadMaintenanceProjectPublicController extends Controller
|
|
{
|
|
//// i oked response
|
|
public function getMaintenanceProjectList()
|
|
{
|
|
if (Auth::user()->hasRole('superadmin') || Auth::user()->hasRole('management') || Auth::user()->hasRole('witel') || Auth::user()->hasRole('admin') || Auth::user()->hasRole('modiran') || Auth::user()->hasRole('setadi'))
|
|
$roadProjects = RoadMaintenanceProject::with('latestHistory')->get();
|
|
// $roadProjects = Collection::make(DB::table('road_maintenance_projects')
|
|
// ->leftJoin('road_maintenance_project_histories', function($query)
|
|
// {
|
|
// $query->on('road_maintenance_projects.id', '=', 'road_maintenance_project_histories.project_id')
|
|
// ->whereRaw('road_maintenance_project_histories.id IN (select MAX(a2.id) from road_maintenance_project_histories as a2 join road_maintenance_projects as u2 on u2.id = a2.project_id group by u2.id)');
|
|
// })
|
|
// ->select('road_maintenance_project_histories.previous_status', 'road_maintenance_projects.*')
|
|
// ->get());
|
|
// $roadProjects = RoadMaintenanceProject::with(['projectHistories' => function($c){
|
|
// $c->latest()->limit(1)->first();
|
|
// } ])->get();
|
|
// return gettype($roadProjects[0]->project_distance);
|
|
else
|
|
$roadProjects = RoadMaintenanceProject::with('latestHistory')
|
|
->where('province_id', Auth::user()->province_id)
|
|
->get();
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProjects,
|
|
'can_submit' => (((Auth::user()->id < 36) || Auth::user()->hasRole('witel') || Auth::user()->hasRole('admin') || Auth::user()->hasRole('edaratostani') || Auth::user()->hasRole('setadi')) ? 1 : 0)
|
|
], 200);
|
|
// $roadProjectsArray = [];
|
|
|
|
// foreach ($roadProjects as $key => $roadProject) {
|
|
// $cities = [];
|
|
// $citiesIndex = 0;
|
|
|
|
// foreach ($roadProject->cities_id as $cityKey => $value) {
|
|
// $getCity = \App\Models\City::find($cityKey);
|
|
|
|
// $cities[$citiesIndex] = [
|
|
// 'id' => $getCity->id,
|
|
// 'name' => $getCity->name_fa,
|
|
// 'value' => $value
|
|
// ];
|
|
|
|
// $citiesIndex++;
|
|
// }
|
|
|
|
// $roadProjectHistories = $roadProject->projectHistories;
|
|
|
|
// $roadProjectHistoriesFiles = [];
|
|
// $roadProjectHistoriesFilesDates = [];
|
|
// $imagesIndex = 0;
|
|
|
|
// foreach ($roadProjectHistories as $historyKey => $roadProjectHistoryValue) {
|
|
// foreach ($roadProjectHistoryValue->files as $keyPath => $file) {
|
|
// $roadProjectHistoriesFiles[$imagesIndex] = asset('storage' . substr($file->path, 6));
|
|
// $roadProjectHistoriesFilesDates[$imagesIndex] = verta($file->created_at)->format('Y/n/j - H:i');
|
|
// $imagesIndex++;
|
|
// }
|
|
// }
|
|
|
|
// $roadProjectHistory = $roadProject->projectHistories()->latest()
|
|
// ->where('road_maintenance_project_histories.previous_status', 1)
|
|
// ->first();
|
|
|
|
// $roadProjectsArray[$key] = [
|
|
// 'id' => $roadProject->id,
|
|
// 'province' => [
|
|
// 'id' => ($roadProject->province) ? $roadProject->province->id : null,
|
|
// 'name' => ($roadProject->province) ? $roadProject->province->name_fa : '-'
|
|
// ],
|
|
// 'cities' => $cities,
|
|
// 'axis_name' => ($roadProject->axis_name) ? $roadProject->axis_name : '-',
|
|
// 'axis_type' => ($roadProject->axis_type) ? : 0,
|
|
// 'project_name' => ($roadProject->project_name) ? $roadProject->project_name : '-',
|
|
// 'contractor_name' => ($roadProject->contractor_name) ? $roadProject->contractor_name : '-',
|
|
// 'consultant_name' => ($roadProject->consultant_name) ? $roadProject->consultant_name : '-',
|
|
// 'contract_date' => ($roadProject->contract_date) ? $roadProject->contract_date : '-',
|
|
// 'contract_credit' => ($roadProject->contract_credit) ? $roadProject->contract_credit : '-',
|
|
// 'submited_at' => ($roadProject->submited_at) ?
|
|
// verta($roadProject->submited_at)->format('Y/n/j - H:i') : '-',
|
|
// 'last_updated_at' => ($roadProject->last_updated_at) ?
|
|
// verta($roadProject->last_updated_at)->format('Y/n/j - H:i') : '-',
|
|
// 'start_latlng' => $roadProject->start_latlng,
|
|
// 'end_latlng' => $roadProject->end_latlng,
|
|
// 'project_distance' => $roadProject->project_distance,
|
|
// 'project_distance_update' => $roadProject->project_distance_update,
|
|
// 'btn_status' => [
|
|
// (($roadProject->project_distance) ? 1 : 0),
|
|
// (($roadProject->status == 1) ? 1 : 0),
|
|
// (($roadProject->status == 2) ? 0 : 1)
|
|
// ],
|
|
// 'status' => $roadProject->status,
|
|
// 'last_history' => (($roadProjectHistory) ? [
|
|
// 'last_updated_at' => verta($roadProjectHistory->updated_at)->format('Y/n/j - H:i'),
|
|
// 'last_project_status' => $roadProjectHistory->previous_project_status,
|
|
// 'status' => $roadProjectHistory->previous_status,
|
|
// 'updated_at_ge' => $roadProjectHistory->updated_at
|
|
// ] : [
|
|
// 'last_updated_at' => '-',
|
|
// 'last_project_status' => '-',
|
|
// 'status' => '-'
|
|
// ]),
|
|
// 'images' => $roadProjectHistoriesFiles,
|
|
// 'images_dates' => $roadProjectHistoriesFilesDates
|
|
// ];
|
|
// }
|
|
|
|
// return response()->json([
|
|
// 'status' => 'succeed',
|
|
// 'message' => '',
|
|
// 'data' => $roadProjectsArray,
|
|
// 'can_submit' => (((Auth::user()->id < 36) || Auth::user()->hasRole('witel') || Auth::user()->hasRole('admin') || Auth::user()->hasRole('edaratostani')) ? 1 : 0)
|
|
// ], 200);
|
|
}
|
|
//// i oked cities axis and province
|
|
public function storeMaintenanceProject(Request $request)
|
|
{
|
|
$roadProject = new RoadMaintenanceProject;
|
|
|
|
$roadProject->user_id = Auth::user()->id;
|
|
// $roadProject->user_id = 470;
|
|
$roadProject->province_id = $request->input('province-id') ?? null;
|
|
|
|
$province_fa = \App\Models\Province::find($request->input('province-id'));
|
|
$roadProject->province_fa = $province_fa->name_fa;
|
|
if ($request->input('cities-id')) {
|
|
$roadProject->cities_id = json_decode($request->input('cities-id')) ?? null;
|
|
$city = array();
|
|
foreach(json_decode($request->input('cities-id')) as $city_id => $percent){
|
|
$x = \App\Models\City::find($city_id);
|
|
$city[] = $x->name_fa;
|
|
}
|
|
$roadProject->city_1_fa = $city[0] ?? null;
|
|
$roadProject->city_2_fa = $city[1] ?? null;
|
|
$roadProject->city_3_fa = $city[2] ?? null;
|
|
}
|
|
$roadProject->axis_name = $request->input('axis-name') ?? null;
|
|
$roadProject->axis_type = $request->input('axis-type') ?? null;
|
|
if ($request->input('axis-type')){
|
|
switch($request->input('axis-type')){
|
|
case 1:
|
|
$roadProject->axis_type_fa = 'شریانی';
|
|
break;
|
|
case 2:
|
|
$roadProject->axis_type_fa = 'اصلی';
|
|
break;
|
|
case 3:
|
|
$roadProject->axis_type_fa = 'فرعی';
|
|
break;
|
|
case 4:
|
|
$roadProject->axis_type_fa = 'روستایی';
|
|
break;
|
|
}
|
|
}
|
|
$roadProject->project_name = $request->input('project-name') ?? null;
|
|
$roadProject->contractor_name = $request->input('contractor-name') ?? null;
|
|
$roadProject->consultant_name = $request->input('consultant-name') ?? null;
|
|
|
|
/*
|
|
$accDate = $request->input('contract-date') ?? null;
|
|
$accDateGregorian = Verta::getGregorian($accDate[0], $accDate[1], $accDate[2]);
|
|
if (count($accDateGregorian) == 3) {
|
|
$accDateGregorianSt = $accDateGregorian[0] . '-'
|
|
. (($accDateGregorian[1] > 10) ? $accDateGregorian[1] : '0' . $accDateGregorian[1])
|
|
. '-'
|
|
. (($accDateGregorian[2] > 10) ? $accDateGregorian[2] : '0' . $accDateGregorian[2]);
|
|
|
|
if (!strlen($accDateGregorianSt) == 10) {
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => -1
|
|
], 200);
|
|
}
|
|
} else {
|
|
$accDateGregorianSt = null;
|
|
}
|
|
*/
|
|
$roadProject->contract_date = $request->input('contract-date') ?? null;
|
|
$roadProject->contract_credit = $request->input('contract-credit') ?? null;
|
|
if ($request->input('start-latlng')) {
|
|
$roadProject->start_latlng = explode(',', $request->input('start-latlng')) ?? null;
|
|
}
|
|
if ($request->input('end-latlng')) {
|
|
$roadProject->end_latlng = explode(',', $request->input('end-latlng')) ?? null;
|
|
}
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProject
|
|
], 201);
|
|
}
|
|
//// i oked cities axis and province
|
|
public function updateMaintenanceProject(Request $request, $id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
// $roadProject->projectHistories()->create([
|
|
// 'user_id' => 470,
|
|
// 'previous_axis_name' => $roadProject->axis_name,
|
|
// 'previous_axis_type' => $roadProject->axis_type,
|
|
// 'previous_project_name' => $roadProject->project_name,
|
|
// 'previous_cities_id' => ($roadProject->cities_id) ? json_encode($roadProject->cities_id) : null,
|
|
// 'previous_contractor_name' => $roadProject->contractor_name,
|
|
// 'previous_consultant_name' => $roadProject->consultant_name,
|
|
// 'previous_contract_date' => $roadProject->contract_date,
|
|
// 'previous_contract_credit' => $roadProject->contract_credit,
|
|
// 'previous_start_latlng' => $roadProject->start_latlng,
|
|
// 'previous_end_latlng' => $roadProject->end_latlng,
|
|
// 'previous_submited_at' => $roadProject->submited_at,
|
|
// 'previous_last_updated_at' => $roadProject->last_updated_at,
|
|
// 'previous_project_distance' => $roadProject->project_distance,
|
|
// 'previous_project_distance_update' => $roadProject->project_distance_update,
|
|
// 'previous_contractor_credit' => $roadProject->contractor_credit,
|
|
// 'previous_physical_progress' => $roadProject->physical_progress,
|
|
// 'previous_description' => $roadProject->description,
|
|
// 'previous_status' => $roadProject->status,
|
|
// 'previous_project_status' => $roadProject->project_status
|
|
// ]);
|
|
|
|
$roadProject->province_id = $request->input('province-id') ?? $roadProject->province_id;
|
|
$province_fa = \App\Models\Province::find($request->input('province-id'));
|
|
$roadProject->province_fa = $province_fa->name_fa;
|
|
if ($request->input('cities-id')) {
|
|
$roadProject->cities_id = json_decode($request->input('cities-id')) ?? null;
|
|
$city = array();
|
|
foreach(json_decode($request->input('cities-id')) as $city_id => $percent){
|
|
$x = \App\Models\City::find($city_id);
|
|
$city[] = $x->name_fa;
|
|
}
|
|
$roadProject->city_1_fa = $city[0] ?? null;
|
|
$roadProject->city_2_fa = $city[1] ?? null;
|
|
$roadProject->city_3_fa = $city[2] ?? null;
|
|
}
|
|
$roadProject->axis_name = $request->input('axis-name') ?? null;
|
|
$roadProject->axis_type = $request->input('axis-type') ?? null;
|
|
if ($request->input('axis-type')){
|
|
switch($request->input('axis-type')){
|
|
case 1:
|
|
$roadProject->axis_type_fa = 'شریانی';
|
|
break;
|
|
case 2:
|
|
$roadProject->axis_type_fa = 'اصلی';
|
|
break;
|
|
case 3:
|
|
$roadProject->axis_type_fa = 'فرعی';
|
|
break;
|
|
case 4:
|
|
$roadProject->axis_type_fa = 'روستایی';
|
|
break;
|
|
}
|
|
}
|
|
$roadProject->project_name = $request->input('project-name') ?? $roadProject->project_name;
|
|
$roadProject->contractor_name = $request->input('contractor-name') ?? $roadProject->contractor_name;
|
|
$roadProject->consultant_name = $request->input('consultant-name') ?? $roadProject->consultant_name;
|
|
|
|
// $accDate = explode('/', $request->input('contract-date'));
|
|
// $accDateGregorian = Verta::getGregorian($accDate[0], $accDate[1], $accDate[2]);
|
|
// if (count($accDateGregorian) == 3) {
|
|
// $accDateGregorianSt = $accDateGregorian[0] . '-'
|
|
// . (($accDateGregorian[1] > 10) ? $accDateGregorian[1] : '0' . $accDateGregorian[1])
|
|
// . '-'
|
|
// . (($accDateGregorian[2] > 10) ? $accDateGregorian[2] : '0' . $accDateGregorian[2]);
|
|
|
|
// if (!strlen($accDateGregorianSt) == 10) {
|
|
// return response()->json([
|
|
// 'status' => 'succeed',
|
|
// 'message' => '',
|
|
// 'data' => -1
|
|
// ], 200);
|
|
// }
|
|
// } else {
|
|
// $accDateGregorianSt = null;
|
|
// }
|
|
|
|
$roadProject->contract_date =$request->input('contract-date') ?? null;
|
|
$roadProject->contract_credit = $request->input('contract-credit') ?? $roadProject->contract_credit;
|
|
if ($request->input('start-latlng')) {
|
|
$roadProject->start_latlng = explode(',', $request->input('start-latlng')) ?? $roadProject->start_latlng;
|
|
}
|
|
if ($request->input('end-latlng')) {
|
|
$roadProject->end_latlng = explode(',', $request->input('end-latlng')) ?? $roadProject->end_latlng;
|
|
}
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProject
|
|
], 200);
|
|
}
|
|
|
|
public function getMaintenanceProjectDistance($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => ($roadProject->project_distance) ? [$roadProject->project_distance] : []
|
|
], 200);
|
|
}
|
|
public function getMaintenanceProjectDistancePublic($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => ($roadProject->project_distance) ? [$roadProject->project_distance] : []
|
|
], 200);
|
|
}
|
|
|
|
public function updateMaintenanceProjectDistance(Request $request, $id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
if ($request->input('project-distance')) {
|
|
$roadProject->project_distance = json_decode($request->input('project-distance')) ?? $roadProject->project_distance;
|
|
}
|
|
|
|
$roadProject->status = 1;
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProject
|
|
], 200);
|
|
}
|
|
|
|
public function submitMaintenanceProjectDistance($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
$roadProject->status = 1;
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProject->status
|
|
], 200);
|
|
}
|
|
/// i oked submited_at_fa
|
|
public function submitMaintenanceProject($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
$roadProject->status = 2;
|
|
$roadProject->submited_at = Carbon::now();
|
|
$roadProject->submited_at_fa = verta(Carbon::now())->format('Y/n/j - H:i');
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => [
|
|
'redirect' => 'https://rms.rmto.ir/road-maintenance-project/showonmap?uid=' . $roadProject->id
|
|
]
|
|
], 200);
|
|
}
|
|
|
|
public function destroyMaintenanceProject($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
$roadProjectHistory = \App\Models\RoadMaintenanceProjectHistory::where('project_id', $id)->get();
|
|
foreach($roadProjectHistory as $value){
|
|
$x = \App\Models\ProjectFile::where('project_fileable_id', $value->id)
|
|
->where('project_fileable_type', 'App\Models\RoadMaintenanceProjectHistory')
|
|
->get('path');
|
|
\App\Models\ProjectFile::where('project_fileable_id', $value->id)
|
|
->where('project_fileable_type', 'App\Models\RoadMaintenanceProjectHistory')
|
|
->delete();
|
|
if(isset($x) and count($x) > 0)
|
|
\Storage::delete($x[0]->path);
|
|
$value->delete();
|
|
}
|
|
$roadProject->delete();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => 1
|
|
], 200);
|
|
}
|
|
|
|
public function getMaintenanceProject($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
$roadProjectHistories = $roadProject->projectHistories;
|
|
|
|
$roadProjectHistoriesFiles = [];
|
|
$imagesIndex = 0;
|
|
|
|
foreach ($roadProjectHistories as $key => $roadProjectHistory) {
|
|
foreach ($roadProjectHistory->files as $keyPath => $file) {
|
|
$roadProjectHistoriesFiles[$imagesIndex] = asset('storage' . substr($file->path, 6));
|
|
$imagesIndex++;
|
|
}
|
|
|
|
}
|
|
|
|
$cities = [];
|
|
$citiesIndex = 0;
|
|
|
|
foreach ($roadProject->cities_id as $cityKey => $value) {
|
|
$getCity = \App\Models\City::find($cityKey);
|
|
|
|
$cities[$citiesIndex] = [
|
|
'id' => $getCity->id,
|
|
'name' => $getCity->name_fa,
|
|
'value' => $value
|
|
];
|
|
|
|
$citiesIndex++;
|
|
}
|
|
|
|
$roadProjectArray = [
|
|
'id' => $roadProject->id,
|
|
'province' => [
|
|
'id' => ($roadProject->province) ? $roadProject->province->id : null,
|
|
'name' => ($roadProject->province) ? $roadProject->province->name_fa : '-',
|
|
'lat_lng' => [
|
|
$roadProject->province->center_lat,
|
|
$roadProject->province->center_long
|
|
]
|
|
],
|
|
'cities' => $cities,
|
|
'axis_name' => ($roadProject->axis_name) ? $roadProject->axis_name : '-',
|
|
'axis_type' => ($roadProject->axis_type) ? : 0,
|
|
'project_name' => ($roadProject->project_name) ? $roadProject->project_name : '-',
|
|
'contractor_name' => ($roadProject->contractor_name) ? $roadProject->contractor_name : '-',
|
|
'consultant_name' => ($roadProject->consultant_name) ? $roadProject->consultant_name : '-',
|
|
'contract_date' => ($roadProject->contract_date) ? $roadProject->contract_date : '-',
|
|
'contract_credit' => ($roadProject->contract_credit) ? $roadProject->contract_credit : '-',
|
|
'submited_at' => ($roadProject->submited_at) ?
|
|
verta($roadProject->submited_at)->format('Y/n/j - H:i') : '-',
|
|
'last_updated_at' => ($roadProject->last_updated_at) ?
|
|
verta($roadProject->last_updated_at)->format('Y/n/j - H:i') : '-',
|
|
'start_latlng' => $roadProject->start_latlng,
|
|
'end_latlng' => $roadProject->end_latlng,
|
|
'project_distance' => $roadProject->project_distance,
|
|
'project_distance_update' => $roadProject->project_distance_update,
|
|
'physical_progress' => $roadProject->physical_progress,
|
|
// 'credit_progress' => ((($roadProject->contract_credit - $roadProject->contractor_credit)
|
|
// / $roadProject->contract_credit) * 100),
|
|
'images' => $roadProjectHistoriesFiles,
|
|
'project_status' => $roadProject->project_status,
|
|
'rate' => ($roadProject->rate)? $roadProject->rate:null,
|
|
'rate_desc' => ($roadProject->rate_desc)? $roadProject->rate_desc:null
|
|
];
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => [
|
|
$roadProjectArray
|
|
]
|
|
], 200);
|
|
}
|
|
|
|
public function getMaintenanceProjectDistanceUpdate($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
$roadProjectArray = [
|
|
'project_distance' => $roadProject->project_distance,
|
|
'project_distance_update' => $roadProject->project_distance_update,
|
|
'contractor_credit' => $roadProject->contractor_credit,
|
|
'project_status' => $roadProject->project_status,
|
|
'physical_progress' => $roadProject->physical_progress
|
|
];
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProjectArray
|
|
], 200);
|
|
}
|
|
/// i oked last_updated_at_fa and project_status_fa
|
|
public function updateMaintenanceProjectDistanceUpdate(Request $request, $id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
|
|
$history_id = $roadProject->projectHistories()->create([
|
|
'user_id' => Auth::user()->id,
|
|
// 'user_id' => 470,
|
|
'previous_project_distance_update' => json_decode($request->input('project-distance-update')),
|
|
'previous_contractor_credit' => $request->input('contractor-credit'),
|
|
'previous_project_status' => $request->input('project-status'),
|
|
'previous_team_latlng' => $request->input('team-latlng'),
|
|
'previous_stop_reason' => $request->input('stop-reason') ?? null,
|
|
'previous_physical_progress' => $request->input('physical-progress'),
|
|
'previous_status' => 0
|
|
])->id;
|
|
////// for fast view in excell i should add 13 * 3 = 39 columns
|
|
if ($request->input('project-distance-update')) {
|
|
$roadProject->project_distance_update = json_decode($request->input('project-distance-update')) ?? $roadProject->project_distance_update;
|
|
}
|
|
$roadProject->contractor_credit = $request->input('contractor-credit');
|
|
$roadProject->project_status = $request->input('project-status');
|
|
switch($request->input('project-status')){
|
|
case 1:
|
|
$roadProject->project_status_fa = "در دست برنامه ریزی اولیه";
|
|
break;
|
|
case 2:
|
|
$roadProject->project_status_fa = "در دست مطالعه و تهیه اسناد مناقصه";
|
|
break;
|
|
case 3:
|
|
$roadProject->project_status_fa = "در دست مناقصه";
|
|
break;
|
|
case 4:
|
|
$roadProject->project_status_fa = "در حال تجهیز کارگاه";
|
|
break;
|
|
case 5:
|
|
$roadProject->project_status_fa = "در حال اجرا/فعال";
|
|
break;
|
|
case 6:
|
|
$roadProject->project_status_fa = "در حال اجرا/متوقف";
|
|
break;
|
|
case 7:
|
|
$roadProject->project_status_fa = "در حال آماده سازی برای افتتاح";
|
|
break;
|
|
case 8:
|
|
$roadProject->project_status_fa = "تکمیل و خاتمه یافته و بهره برداری شده";
|
|
break;
|
|
}
|
|
$roadProject->physical_progress = $request->input('physical-progress');
|
|
|
|
$roadProject->last_updated_at = Carbon::now();
|
|
$roadProject->last_updated_at_fa = verta(Carbon::now())->format('Y/n/j - H:i');
|
|
|
|
$roadProject->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProject,
|
|
'history_id' => $history_id
|
|
], 200);
|
|
}
|
|
|
|
public function getMaintenanceProjectDistanceUpdateList($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
$roadProjectHistories = $roadProject->projectHistories;
|
|
|
|
$roadProjectHistoriesArray = [];
|
|
|
|
foreach ($roadProjectHistories as $key => $roadProjectHistory) {
|
|
$roadProjectHistoriesArray[$key] = [
|
|
'id' => $roadProjectHistory->id,
|
|
'previous_project_distance_update' => $roadProjectHistory->previous_project_distance_update,
|
|
'previous_contractor_credit' => $roadProjectHistory->previous_contractor_credit,
|
|
'previous_project_status' => $roadProjectHistory->previous_project_status,
|
|
'previous_team_latlng' => $roadProjectHistory->previous_team_latlng,
|
|
'previous_stop_reason' => $roadProjectHistory->previous_stop_reason,
|
|
'previous_physical_progress' => $roadProjectHistory->previous_physical_progress,
|
|
'previous_status' => $roadProjectHistory->previous_status,
|
|
'updated_at' => (($roadProjectHistory->previous_status == 1) ? verta($roadProjectHistory->updated_at)->format('Y/m/d - H:i') : '-'),
|
|
'updated_at_ge' => $roadProjectHistory->updated_at,
|
|
'images' => $roadProjectHistory->files
|
|
];
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => [
|
|
'distance' => $roadProject->project_distance,
|
|
'distance_update' => $roadProjectHistoriesArray
|
|
]
|
|
], 200);
|
|
}
|
|
public function getMaintenanceProjectDistanceUpdateListPublic($id)
|
|
{
|
|
$roadProject = RoadMaintenanceProject::find($id);
|
|
$roadProjectHistories = $roadProject->projectHistories;
|
|
|
|
$roadProjectHistoriesArray = [];
|
|
|
|
foreach ($roadProjectHistories as $key => $roadProjectHistory) {
|
|
$roadProjectHistoriesArray[$key] = [
|
|
'id' => $roadProjectHistory->id,
|
|
'previous_project_distance_update' => $roadProjectHistory->previous_project_distance_update,
|
|
'previous_contractor_credit' => $roadProjectHistory->previous_contractor_credit,
|
|
'previous_project_status' => $roadProjectHistory->previous_project_status,
|
|
'previous_team_latlng' => $roadProjectHistory->previous_team_latlng,
|
|
'previous_stop_reason' => $roadProjectHistory->previous_stop_reason,
|
|
'previous_physical_progress' => $roadProjectHistory->previous_physical_progress,
|
|
'previous_status' => $roadProjectHistory->previous_status,
|
|
'updated_at' => (($roadProjectHistory->previous_status == 1) ? verta($roadProjectHistory->updated_at)->format('Y/m/d - H:i') : '-'),
|
|
'updated_at_ge' => $roadProjectHistory->updated_at,
|
|
'images' => $roadProjectHistory->files
|
|
];
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => [
|
|
'distance' => $roadProject->project_distance,
|
|
'distance_update' => $roadProjectHistoriesArray
|
|
]
|
|
], 200);
|
|
}
|
|
|
|
public function storeMaintenanceProjectHistoryImage(Request $request)
|
|
{
|
|
$request->validate([
|
|
'history-id' => 'required|integer|exists:road_maintenance_project_histories,id',
|
|
'image' => 'required|image',
|
|
'name' => 'required|string'
|
|
]);
|
|
|
|
$roadProjectHistory = \App\Models\RoadMaintenanceProjectHistory::find($request->input('history-id'));
|
|
|
|
$roadProjectHistory->files()
|
|
->where('path', 'like', '%img8_' . $request->input('name') . '_%')->delete();
|
|
|
|
$files_path = $request->file('image')->storeAs(
|
|
'public/road_maintenance_projects',
|
|
'img8_' . $request->input('name') . '_' . $roadProjectHistory->id . '_' . time() . '_' . $request->file('image')->getClientOriginalName()
|
|
);
|
|
|
|
$roadProjectHistory->files()->create([
|
|
'path' => $files_path
|
|
]);
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $files_path
|
|
], 201);
|
|
}
|
|
|
|
public function destroyMaintenanceProjectHistoryImage(Request $request)
|
|
{
|
|
$request->validate([
|
|
'history-id' => 'required|integer|exists:road_maintenance_project_histories,id',
|
|
'name' => 'required|string'
|
|
]);
|
|
|
|
$roadProjectHistory = \App\Models\RoadMaintenanceProjectHistory::find($request->input('history-id'));
|
|
|
|
$roadProjectHistory->files()
|
|
->where('path', 'like', '%img8_' . $request->input('name') . '_%')->delete();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => 1
|
|
], 200);
|
|
}
|
|
|
|
public function submitMaintenanceProjectHistory($id)
|
|
{
|
|
$roadProjectHistory = \App\Models\RoadMaintenanceProjectHistory::find($id);
|
|
|
|
$roadProjectHistory->previous_status = 1;
|
|
|
|
$roadProjectHistory->save();
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProjectHistory->previous_status
|
|
], 200);
|
|
}
|
|
|
|
public function showMaintenanceProjectMap() {
|
|
return view('rmto-preview.pages.road-maintenance-map');
|
|
}
|
|
|
|
public function getMaintenanceProjectProvinceStat(Request $request)
|
|
{
|
|
$request->validate([
|
|
'province-id' => 'integer|exists:provinces,id',
|
|
'end-date' => 'date_format:Y-m-d',
|
|
'axis-types' => 'string'
|
|
]);
|
|
|
|
if ($request->input('end-date')) {
|
|
$endDate = date($request->input('end-date') . ' 23:59:59');
|
|
} else {
|
|
$endDate = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
if ($request->input('axis-types')) {
|
|
$axisTypes = explode(',', $request->input('axis-types'));
|
|
} else {
|
|
$axisTypes = [1, 2, 3, 4];
|
|
}
|
|
|
|
|
|
|
|
$city_id = $request->input('city-id') ?? null;
|
|
$province_id = $request->input('province-id') ?? null;
|
|
// dd($province_id);
|
|
$roadProjects = RoadMaintenanceProject::
|
|
when(!empty($axisTypes), function ($query) use ($axisTypes) {
|
|
// dd( $query->where('axis_type', $axisTypes));
|
|
return $query->whereIn('axis_type', $axisTypes);
|
|
})
|
|
->when(!empty($province_id), function ($query) use ($province_id) {
|
|
return $query->where('province_id', $province_id);
|
|
})
|
|
->when(!empty($city_id), function ($query) use ($city_id) {
|
|
return $query->where('cities_id', 'like', '%"'.$city_id.'":%');
|
|
})
|
|
->with(['projectHistories' => function ($query) use ($endDate) {
|
|
$query->whereDate('updated_at', '<=', $endDate);
|
|
}])
|
|
->get();
|
|
$roadProjects_count = $roadProjects->count();
|
|
|
|
|
|
$roadProjectsArray = [];
|
|
$lastArraySum = [
|
|
0 => 0,
|
|
1 => 0,
|
|
2 => 0,
|
|
3 => 0,
|
|
4 => 0,
|
|
5 => 0,
|
|
6 => 0,
|
|
7 => 0,
|
|
8 => 0,
|
|
9 => 0,
|
|
10 => 0,
|
|
11 => 0,
|
|
12 => 0,
|
|
13 => 0,
|
|
14 => 0,
|
|
15 => 0,
|
|
16 => 0,
|
|
17 => 0,
|
|
18 => 0,
|
|
19 => 0,
|
|
20 => 0,
|
|
21 => 0,
|
|
22 => 0,
|
|
23 => 0,
|
|
24 => 0,
|
|
25 => 0,
|
|
26 => 0,
|
|
27 => 0,
|
|
28 => 0,
|
|
29 => 0
|
|
];
|
|
|
|
foreach ($roadProjects as $projectKey => $roadProject) {
|
|
if (!$roadProject->projectHistories->isEmpty()) {
|
|
$lastProjectHistory = $roadProject->projectHistories->last();
|
|
|
|
foreach ($roadProject->cities_id as $cityKey => $value) {
|
|
if (isset($roadProjectsArray[$cityKey])) {
|
|
$roadProjectsArray[$cityKey]['projectsCount'] += 1;
|
|
// $roadProjectsArray[$cityKey]['contractCredit'] += (($roadProject->contract_credit * $value) / 100);
|
|
// $roadProjectsArray[$cityKey]['contractorCredit'] += (($lastProjectHistory->previous_contractor_credit * $value) / 100);
|
|
$roadProjectsArray[$cityKey]['physicalProgress'] += $lastProjectHistory->previous_physical_progress;
|
|
|
|
foreach ($lastProjectHistory->previous_project_distance_update as $keyUpdate => $distance) {
|
|
if ($keyUpdate < 12) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] += (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] += (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][2] += (($distance[2] != "" && $distance[2] >= 0) ? (float)$distance[2] : 0);
|
|
} elseif ($keyUpdate == 12) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] += (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] += (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][2] += (($distance[2] != "" && $distance[2] >= 0) ? (float)$distance[2] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][3] += (($distance[3] != "" && $distance[3] >= 0) ? (float)$distance[3] : 0);
|
|
} elseif ($keyUpdate == 13) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] += (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] += (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
}
|
|
}
|
|
} else {
|
|
$roadProjectsArray[$cityKey]['projectsCount'] = 1;
|
|
// $roadProjectsArray[$cityKey]['contractCredit'] = (($roadProject->contract_credit * $value) / 100);
|
|
// $roadProjectsArray[$cityKey]['contractorCredit'] = (($lastProjectHistory->previous_contractor_credit * $value) / 100);
|
|
$roadProjectsArray[$cityKey]['physicalProgress'] = $lastProjectHistory->previous_physical_progress;
|
|
$roadProjectsArray[$cityKey]['projectDistance'] = [
|
|
1 => [
|
|
0, 0, 0
|
|
],
|
|
2 => [
|
|
0, 0, 0
|
|
],
|
|
3 => [
|
|
0, 0, 0
|
|
],
|
|
4 => [
|
|
0, 0, 0
|
|
],
|
|
5 => [
|
|
0, 0, 0
|
|
],
|
|
6 => [
|
|
0, 0, 0
|
|
],
|
|
7 => [
|
|
0, 0, 0
|
|
],
|
|
8 => [
|
|
0, 0, 0
|
|
],
|
|
9 => [
|
|
0, 0, 0
|
|
],
|
|
10 => [
|
|
0, 0, 0
|
|
],
|
|
11 => [
|
|
0, 0, 0
|
|
],
|
|
12 => [
|
|
0, 0, 0, 0
|
|
],
|
|
13 => [
|
|
0,0
|
|
]
|
|
];
|
|
|
|
foreach ($lastProjectHistory->previous_project_distance_update as $keyUpdate => $distance) {
|
|
if ($keyUpdate < 12) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] = (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] = (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][2] = (($distance[2] != "" && $distance[2] >= 0) ? (float)$distance[2] : 0);
|
|
} elseif ($keyUpdate == 12) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] = (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] = (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][2] = (($distance[2] != "" && $distance[2] >= 0) ? (float)$distance[2] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][3] = (($distance[3] != "" && $distance[3] >= 0) ? (float)$distance[3] : 0);
|
|
} elseif ($keyUpdate == 13) {
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][0] = (($distance[0] != "" && $distance[0] >= 0) ? (float)$distance[0] : 0);
|
|
$roadProjectsArray[$cityKey]['projectDistance'][$keyUpdate][1] = (($distance[1] != "" && $distance[1] >= 0) ? (float)$distance[1] : 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$lastArray = [];
|
|
$arrayIndex = 0;
|
|
|
|
foreach ($roadProjectsArray As $cityKey => $value) {
|
|
$getCity = \App\Models\City::find($cityKey);
|
|
$getProvince = \App\Models\Province::find($getCity->province_id);
|
|
|
|
$lastArray[$arrayIndex] = $value;
|
|
$lastArray[$arrayIndex]['cityName'] = $getCity->name_fa;
|
|
$lastArray[$arrayIndex]['cityId'] = $getCity->id;
|
|
$lastArray[$arrayIndex]['proviceName'] = $getProvince->name_fa;
|
|
$lastArray[$arrayIndex]['proviceId'] = $getProvince->id;
|
|
$lastArray[$arrayIndex]['physicalProgress'] = (int)($lastArray[$arrayIndex]['physicalProgress'] / $lastArray[$arrayIndex]['projectsCount']);
|
|
|
|
$lastArraySum[0] += $lastArray[$arrayIndex]['projectsCount'];
|
|
$lastArraySum[1] = '-';
|
|
$lastArraySum[2] = '-';
|
|
$lastArraySum[3] = '-';
|
|
$lastArraySum[4] += $lastArray[$arrayIndex]['projectDistance'][13][0];
|
|
$lastArraySum[5] += $lastArray[$arrayIndex]['projectDistance'][12][0];
|
|
$lastArraySum[6] += $lastArray[$arrayIndex]['projectDistance'][12][1];
|
|
$lastArraySum[7] += $lastArray[$arrayIndex]['projectDistance'][12][2];
|
|
$lastArraySum[8] += $lastArray[$arrayIndex]['projectDistance'][1][0];
|
|
$lastArraySum[9] += $lastArray[$arrayIndex]['projectDistance'][1][1];
|
|
$lastArraySum[10] += $lastArray[$arrayIndex]['projectDistance'][2][0];
|
|
$lastArraySum[11] += $lastArray[$arrayIndex]['projectDistance'][2][1];
|
|
$lastArraySum[12] += $lastArray[$arrayIndex]['projectDistance'][3][0];
|
|
$lastArraySum[13] += $lastArray[$arrayIndex]['projectDistance'][3][1];
|
|
$lastArraySum[14] += $lastArray[$arrayIndex]['projectDistance'][4][0];
|
|
$lastArraySum[15] += $lastArray[$arrayIndex]['projectDistance'][4][1];
|
|
$lastArraySum[16] += $lastArray[$arrayIndex]['projectDistance'][5][0];
|
|
$lastArraySum[17] += $lastArray[$arrayIndex]['projectDistance'][5][1];
|
|
$lastArraySum[18] += $lastArray[$arrayIndex]['projectDistance'][6][0];
|
|
$lastArraySum[19] += $lastArray[$arrayIndex]['projectDistance'][6][1];
|
|
$lastArraySum[20] += $lastArray[$arrayIndex]['projectDistance'][7][0];
|
|
$lastArraySum[21] += $lastArray[$arrayIndex]['projectDistance'][7][1];
|
|
$lastArraySum[22] += $lastArray[$arrayIndex]['projectDistance'][8][0];
|
|
$lastArraySum[23] += $lastArray[$arrayIndex]['projectDistance'][8][1];
|
|
$lastArraySum[24] += $lastArray[$arrayIndex]['projectDistance'][9][0];
|
|
$lastArraySum[25] += $lastArray[$arrayIndex]['projectDistance'][9][1];
|
|
$lastArraySum[26] += $lastArray[$arrayIndex]['projectDistance'][10][0];
|
|
$lastArraySum[27] += $lastArray[$arrayIndex]['projectDistance'][10][1];
|
|
$lastArraySum[28] += $lastArray[$arrayIndex]['projectDistance'][11][0];
|
|
$lastArraySum[29] += $lastArray[$arrayIndex]['projectDistance'][11][1];
|
|
|
|
$arrayIndex++;
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => [
|
|
'stat' => $lastArray,
|
|
'sum' => $lastArraySum,
|
|
'count' => $roadProjects_count
|
|
]
|
|
], 200);
|
|
}
|
|
|
|
public function getRoadMaintenanceReportPage()
|
|
{
|
|
return view('rmto-preview.pages.road-maintenance-report');
|
|
}
|
|
public function indexPoints() {
|
|
$roadProjects = RoadMaintenanceProject::where('status', 2)->get();
|
|
$roadProjectArray = [];
|
|
|
|
foreach ($roadProjects As $key => $roadProject) {
|
|
$roadProjectHistories = $roadProject->projectHistories;
|
|
|
|
$roadProjectHistoriesFiles = [];
|
|
$imagesIndex = 0;
|
|
|
|
foreach ($roadProjectHistories as $key => $roadProjectHistory) {
|
|
foreach ($roadProjectHistory->files as $keyPath => $file) {
|
|
$roadProjectHistoriesFiles[$imagesIndex] = asset('storage' . substr($file->path, 6));
|
|
$imagesIndex++;
|
|
}
|
|
|
|
}
|
|
|
|
$cities = [];
|
|
$citiesIndex = 0;
|
|
|
|
foreach ($roadProject->cities_id as $cityKey => $value) {
|
|
$getCity = \App\Models\City::find($cityKey);
|
|
|
|
$cities[$citiesIndex] = [
|
|
'id' => $getCity->id,
|
|
'name' => $getCity->name_fa,
|
|
'value' => $value
|
|
];
|
|
|
|
$citiesIndex++;
|
|
}
|
|
|
|
$roadProjectArray[$key] = [
|
|
'id' => $roadProject->id,
|
|
'province' => [
|
|
'id' => ($roadProject->province) ? $roadProject->province->id : null,
|
|
'name' => ($roadProject->province) ? $roadProject->province->name_fa : '-',
|
|
'lat_lng' => [
|
|
$roadProject->province->center_lat,
|
|
$roadProject->province->center_long
|
|
]
|
|
],
|
|
'cities' => $cities,
|
|
'axis_name' => ($roadProject->axis_name) ? $roadProject->axis_name : '-',
|
|
'axis_type' => ($roadProject->axis_type) ? : 0,
|
|
'project_name' => ($roadProject->project_name) ? $roadProject->project_name : '-',
|
|
'contractor_name' => ($roadProject->contractor_name) ? $roadProject->contractor_name : '-',
|
|
'consultant_name' => ($roadProject->consultant_name) ? $roadProject->consultant_name : '-',
|
|
'contract_date' => ($roadProject->contract_date) ?
|
|
verta($roadProject->contract_date)->format('Y/n/j') : '-',
|
|
'contract_credit' => ($roadProject->contract_credit) ? $roadProject->contract_credit : '-',
|
|
'submited_at' => ($roadProject->submited_at) ?
|
|
verta($roadProject->submited_at)->format('Y/n/j - H:i') : '-',
|
|
'last_updated_at' => ($roadProject->last_updated_at) ?
|
|
verta($roadProject->last_updated_at)->format('Y/n/j - H:i') : '-',
|
|
'start_latlng' => $roadProject->start_latlng,
|
|
'end_latlng' => $roadProject->end_latlng,
|
|
'project_distance' => $roadProject->project_distance,
|
|
'project_distance_update' => $roadProject->project_distance_update,
|
|
'physical_progress' => $roadProject->physical_progress,
|
|
// 'credit_progress' => ((($roadProject->contract_credit - $roadProject->contractor_credit)
|
|
// / $roadProject->contract_credit) * 100),
|
|
'images' => $roadProjectHistoriesFiles,
|
|
'project_status' => $roadProject->project_status
|
|
];
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => '',
|
|
'data' => $roadProjectArray
|
|
], 200);
|
|
}
|
|
public function submitRoadMaintenanceProjectRate(Request $request)
|
|
{
|
|
$request->validate([
|
|
'id' => 'required',
|
|
'rate' => 'required'
|
|
]);
|
|
// $roadProject->province_id = $request->input('province-id') ?? null;
|
|
$data = RoadMaintenanceProject::find($request->input('id'));
|
|
$data->rate = $request->input('rate');
|
|
$data->rate_desc = $request->input('rate_desc') ?? null;
|
|
$data->save();
|
|
return response()->json([
|
|
'status' => 'succeed',
|
|
'message' => ''
|
|
], 200);
|
|
}
|
|
} |