|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use App\Models\HierarchyFtth;
|
|
|
|
use App\Models\VersionGantt;
|
|
|
|
|
|
|
|
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($project_id) {
|
|
|
|
$ftthIds = VersionGantt::select('hierarchy_ftth_id')
|
|
|
|
->where('proyek_id', $project_id)
|
|
|
|
->groupBy('hierarchy_ftth_id')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
foreach ($ftthIds as $ftthId) {
|
|
|
|
$gantts = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->sum('progress');
|
|
|
|
$ganttCount = VersionGantt::where('hierarchy_ftth_id', $ftthId->hierarchy_ftth_id)->count();
|
|
|
|
|
|
|
|
$ftth = HierarchyFtth::find($ftthId->hierarchy_ftth_id);
|
|
|
|
$round = $gantts/$ganttCount;
|
|
|
|
$ftth->progress = round($round, 2);
|
|
|
|
$ftth->save();
|
|
|
|
|
|
|
|
if($ftth->parent_id){
|
|
|
|
$this->countParent($ftth);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
$round = $children/$childrenCount;
|
|
|
|
$parent->progress = round($round, 2);
|
|
|
|
$parent->save();
|
|
|
|
if($parent->parent_id) {
|
|
|
|
$this->countParent($parent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTreeByProject($project_id)
|
|
|
|
{
|
|
|
|
$this->countProgress(intval($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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$objRow->dataGantt = $dataGantt;
|
|
|
|
}
|
|
|
|
$objRow->children = $this->getChildren($project_id, $objRow->id);
|
|
|
|
$finalData[] = $objRow;
|
|
|
|
}
|
|
|
|
|
|
|
|
return response()->json(['status'=>'success','data'=>$finalData,'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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$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')
|
|
|
|
->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;
|
|
|
|
}
|
|
|
|
}
|