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';
    }
}