Custom Backend OSPRO Surveyor Indonesia
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

256 lines
9.1 KiB

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\HierarchyFtth;
use App\Models\VersionGantt;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Artisan;
class HierarchyFtthController extends Controller
{
public function index()
{
try {
$hierarchyFtths = HierarchyFtth::all();
return response()->json($hierarchyFtths);
} catch (\Exception $e) {
return response()->json([
'message' => 'Failed to retrieve hierarchy FTTHs.',
'error' => $e->getMessage()
], 500);
}
}
public function search(Request $request)
{
$payload = $request->all();
$dataBuilder = $this->setUpPayload($payload, 'm_hierarchy_ftth');
$builder = $dataBuilder['builder'];
$countBuilder = $dataBuilder['count'];
$dataGet = $builder->get();
$totalRecord = $countBuilder->count();
return response()->json(['status'=>'success','code'=>200,'data'=>$dataGet, 'totalRecord'=>$totalRecord], 200);
}
public function store(Request $request)
{
try {
$attributes = $request->only(['name', 'parent_id', 'project_id']);
$hierarchyFtth = HierarchyFtth::create($attributes);
return response()->json([
'status'=>'success',
'code' => 200,
'message' => 'Hierarchy FTTH created successfully.',
'data' => $hierarchyFtth
],200);
} catch (\Exception $e) {
return response()->json([
'message' => 'Failed to create hierarchy FTTH.',
'error' => $e->getMessage()
], 500);
}
}
public function show($id)
{
$hierarchyFtth = HierarchyFtth::where('id', $id)->first();
try {
return response()->json($hierarchyFtth);
} catch (\Exception $e) {
return response()->json([
'message' => 'Failed to retrieve hierarchy FTTH.',
'error' => $e->getMessage()
], 500);
}
}
public function update(Request $request, $id)
{
$hierarchyFtth = HierarchyFtth::where('id', $id)->first();
try {
$hierarchyFtth->update($request->all());
return response()->json([
'message' => 'Hierarchy FTTH updated successfully.',
'data' => $hierarchyFtth
],200);
} catch (\Exception $e) {
return response()->json([
'message' => 'Failed to update hierarchy FTTH.',
'error' => $e->getMessage()
], 500);
}
}
public function destroy($id)
{
$hierarchyFtth = HierarchyFtth::where('id', $id)->first();
try {
$hierarchyFtth->delete();
return response()->json([
'message' => 'Hierarchy FTTH deleted successfully.',
'data' => $hierarchyFtth
],200);
} catch (\Exception $e) {
return response()->json([
'message' => 'Failed to delete hierarchy FTTH.',
'error' => $e->getMessage()
], 500);
}
}
public function countProgress($hierarchy_id) {
// $ftthIds = VersionGantt::select('hierarchy_ftth_id')
// ->where('proyek_id', $project_id)
// ->groupBy('hierarchy_ftth_id')
// ->get();
// if($ftthIds){
// foreach ($ftthIds as $ftthId) {
// $gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress');
// $bobot_planning = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('bobot');
// $ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count();
// $ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id);
// if($ftth){
// $round = $gantts/$ganttCount;
// $round_bobot = $bobot_planning/$ganttCount;
// $ftth->progress = round($round, 2);
// $ftth->bobot_planning = round($round_bobot, 2);
// try {
// $ftth->save();
// } catch (\Exception $e) {
// // Log the error or handle it in some other way
// Log::error($e->getMessage());
// }
// if($ftth->parent_id){
// $this->countParent($ftth);
// }
// }
// }
// }
// calculate ke curva berdasarkan site
Artisan::call('calculate:progressgantt', [
'hierarchy_id' => $hierarchy_id
]);
}
public function countParent($ftth){
$parent = HierarchyFtth::find($ftth->parent_id);
$children = HierarchyFtth::where('parent_id', $ftth->parent_id)->sum('progress');
$childrenCount = HierarchyFtth::where('parent_id', $ftth->parent_id)->count();
if($parent){
$round = $children/$childrenCount;
$parent->progress = round($round, 2);
try {
$parent->save();
} catch (\Exception $e) {
// Log the error or handle it in some other way
Log::error($e->getMessage());
}
if($parent->parent_id) {
$this->countParent($parent);
}
}
}
public function getTreeByGantt($gantt_id)
{
$finalData = [];
$gantt = VersionGantt::find($gantt_id);
if ($gantt->hierarchy_ftth_id) {
$ftth = HierarchyFtth::find($gantt->hierarchy_ftth_id);
array_push($finalData, $ftth);
if($ftth->parent_id){
$this->getParents($finalData, $ftth->parent_id);
}
} else {
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
public function getParents(&$data, $id){
$ftth = HierarchyFtth::find($id);
array_push($data, $ftth);
if ($ftth->parent_id) {
$this->getParents($data, $ftth->parent_id);
}
}
public function getTreeByProject($project_id)
{
$data = HierarchyFtth::where('project_id', $project_id)->whereNull('parent_id')->orderByRaw('id ASC')->get();
$finalData = [];
foreach($data as $objRow){
$objRow->key = rand(1, 1000);
if (VersionGantt::where('hierarchy_ftth_id', $objRow->id)->exists()) {
$dataGantt = VersionGantt::where('hierarchy_ftth_id', $objRow->id)->get();
$progress = $this->ganttProgress('hierarchy_ftth_id', $objRow->id);
foreach ($dataGantt as $gantt) {
$gantt->key = $objRow->key;
foreach ($progress as $p) {
if ($p->id == $gantt->id) {
$gantt->progress = $p->persentase_progress;
$gantt->bobot_planning = $p->bobot_planning ? $p->bobot_planning : 0;
}
}
}
$objRow->dataGantt = $dataGantt;
}
$objRow->children = $this->getChildren($project_id, $objRow->id);
$finalData[] = $objRow;
}
return response()->json(['status'=>'success','data'=>$finalData,'code'=>200], 200);
}
public function countProgressTree($hierarchy_id)
{
Artisan::call('calculate:progressgantt', [
'hierarchy_id' => $hierarchy_id
]);
return response()->json(['status'=>'success','code'=>200], 200);
}
private function getChildren($project_id, $parent_id)
{
$finalData = [];
$data = HierarchyFtth::where('project_id', $project_id)->where('parent_id', $parent_id)->orderByRaw('id ASC')->get();
foreach($data as $objRow){
$objRow->key = rand(1, 1000);
if (VersionGantt::where('hierarchy_ftth_id', $objRow->id)->exists()) {
$dataGantt = VersionGantt::where('hierarchy_ftth_id', $objRow->id)->get();
$progress = $this->ganttProgress('hierarchy_ftth_id', $objRow->id);
foreach ($dataGantt as $gantt) {
$gantt->key = $objRow->key;
foreach ($progress as $p) {
if ($p->id == $gantt->id) {
$gantt->progress = $p->persentase_progress;
$gantt->bobot_planning = $p->bobot_planning ? $p->bobot_planning : 0;
}
}
}
$objRow->dataGantt = $dataGantt;
}
$objRow->children = $this->getChildren($project_id, $objRow->id);
$finalData[] = $objRow;
}
return $finalData;
}
public function ganttProgress($column, $value){
$progress = VersionGantt::select('m_version_gantt.id','m_activity.persentase_progress', 'm_activity.bobot_planning')
->join('m_activity', 'm_version_gantt.id', '=', 'm_activity.version_gantt_id')
->where("m_version_gantt.".$column, $value)
->where('m_activity.type_activity', "project")
->where('m_activity.parent_id', null)
->get();
return $progress;
}
}