public function timing(Phase $phase, $id) { $data = array(); $data = splitString($id); $id = $data[0]; $statusName = $data[2]; $currentStatus = $data[3]; $timing = new Timing(); $affectedRows = $timing->whereId($id)->orderBy('id', 'desc')->first(); $datetime = currentTimestamp($currentStatus); if ($currentStatus == "start") { $newStatus = "pause"; } elseif ($currentStatus == "notStart") { $newStatus = "start"; } elseif ($currentStatus == "pause") { $newStatus = "restart"; } elseif ($currentStatus == "restart") { $newStatus = "pause"; } $timing->tracker = $datetime; $timing->status = $newStatus; $timing->type_id = $affectedRows->type_id; $timing->phase_id = $affectedRows->phase_id; $timing->project_id = $affectedRows->project_id; $timing->save(); $updatePhase = $this->phase->where('id', $affectedRows->phase_id)->update(array('updated_at' => currentTimestamp($affectedRows->phase_id))); return view('phases.show', compact('phase')); }
function projectPhaseTracker($projectID) { $pauses = 0; $restarts = 0; $startTime = ''; $endTime = ''; $finalPause = ''; $finalRestart = ''; $projectTaskTime = \App\models\Timing::whereProject_id($projectID)->orderBy('id', 'asc')->get(); foreach ($projectTaskTime as $task) { if ($task->status == 'start') { $startTime = $task->tracker; } if ($task->status == 'pause') { $pauseTime[] = $task->tracker; $pauses++; $finalPause = $task->tracker; } if ($task->status == 'restart') { $restartTime[] = $task->tracker; $restarts++; $finalRestart = $task->tracker; } if ($task->status == 'end') { $endTime = $task->tracker; } } if ($startTime) { /** * if the project's task was started * */ $startedtime = new DateTime($startTime); if ($restarts) { /** * if the project has been restarted, calculate time between paused and restarted points again and again * startedtime = started point time + sum(pauses time) * */ for ($j = 0; $j < $restarts; $j++) { $ptime = new DateTime($pauseTime[$j]); $rtime = new DateTime($restartTime[$j]); $diffPausesAndRestart[] = $ptime->diff($rtime); } for ($u = 0; $u < $j; $u++) { $startedtime->add($diffPausesAndRestart[$u]); } } else { if ($pauses) { /** * if the project has been paused, calculate time between started and paused points * */ $endTime = $pauseTime[0]; } } if ($finalPause) { /** * if last stop before end is pause and not a restarted and the project is end or not * */ if ($finalRestart) { if ($finalPause > $finalRestart) { if ($endTime) { $ftime = new DateTime($finalPause); $etime = new DateTime($endTime); $diffPausesAndEnd = $ftime->diff($etime); $pauseFinal = $diffPausesAndEnd; $startedtime->add($pauseFinal); } else { $endTime = $finalPause; } } else { if (empty($endTime)) { $dt = new DateTime(); $endTime = $dt->format('y-m-d H:i:s'); } } } } if ($endTime) { /** * if the project is finished last stop will be end * */ $endedtime = new DateTime($endTime); return $fromStartToEnd = $startedtime->diff($endedtime); //return format_interval($fromStartToEnd); } else { $endTime = new DateTime(); return $fromStartToEnd = $startedtime->diff($endTime); //return format_interval($fromStartToEnd); } } else { return 'Task not started'; } }