|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
|
|
|
|
use App\Helpers\MasterFunctionsHelper;
|
|
|
|
use App\Models\HierarchyFtth;
|
|
|
|
use App\Models\Project;
|
|
|
|
use App\Models\VersionGantt;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
|
|
|
|
class ActualProgressProject extends Command
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* The name and signature of the console command.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $signature = 'calculate:ActualProgressProject';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The console command description.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $description = 'For show Actual Progress Project';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new command instance.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
parent::__construct();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Execute the console command.
|
|
|
|
*
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
$projects = Project::leftJoin('m_type_proyek', 'm_proyek.type_proyek_id', '=', 'm_type_proyek.id')
|
|
|
|
->select('m_proyek.*', 'm_type_proyek.is_multiLocation')
|
|
|
|
->get();
|
|
|
|
|
|
|
|
foreach ($projects as $project) {
|
|
|
|
if ($project->is_multiLocation == 1) {
|
|
|
|
// untuk project multi location
|
|
|
|
$versionGantt = VersionGantt::join('m_proyek', 'm_version_gantt.proyek_id', 'm_proyek.id')
|
|
|
|
->select('m_version_gantt.*')
|
|
|
|
->where('m_version_gantt.proyek_id', $project->id)
|
|
|
|
->get();
|
|
|
|
foreach ($versionGantt as $key => $gantt) {
|
|
|
|
$hierarchy = HierarchyFtth::where('id',$gantt->hierarchy_ftth_id)->count();
|
|
|
|
// Perhitungan jika project memiliki gantt tetapi tidak ada hierarchy (Kasus perpindahan tipe project dari single location ke multi location)
|
|
|
|
if($hierarchy == 0){
|
|
|
|
$progress[$key] = 0;
|
|
|
|
} else {
|
|
|
|
$progress[$key] = $gantt->progress;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$actualProgress = round(array_sum($progress) / count($versionGantt), 2);
|
|
|
|
$progress = array(); // unset/kosongkan array progress untuk project selanjutnya
|
|
|
|
} else {
|
|
|
|
// untuk project single location
|
|
|
|
$gantt = MasterFunctionsHelper::getLatestGantt($project->id);
|
|
|
|
isset($gantt['last_gantt_id']) ? $lastGantt = $gantt['last_gantt_id'] : $lastGantt = 0;
|
|
|
|
|
|
|
|
$arr = [
|
|
|
|
'project_id' => $project->id,
|
|
|
|
'gantt_id' => $lastGantt,
|
|
|
|
'periode' => 'week'
|
|
|
|
];
|
|
|
|
// kondisi jika tidak ada gantt_id
|
|
|
|
if (empty($arr['gantt_id'])) {
|
|
|
|
$actualProgress = 0;
|
|
|
|
} else {
|
|
|
|
$project->scurve = MasterFunctionsHelper::getSCurve(collect($arr));
|
|
|
|
$actualArray = $project->scurve[0]['data']['percentageReal'];
|
|
|
|
$actualProgress = !empty($actualArray) ? round(end($actualArray), 2) : 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Project::where('id', $project->id)->update(['persentase_progress' => $actualProgress]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|