Added resume option to tasks

This commit is contained in:
Hillel Coren 2015-06-14 17:03:37 +03:00
parent 88865d44fc
commit 97adc27ba1
5 changed files with 14 additions and 7 deletions

View File

@ -163,7 +163,8 @@ class TaskController extends BaseController
'clientPublicId' => $task->client ? $task->client->public_id : 0, 'clientPublicId' => $task->client ? $task->client->public_id : 0,
'method' => 'PUT', 'method' => 'PUT',
'url' => 'tasks/'.$publicId, 'url' => 'tasks/'.$publicId,
'title' => trans('texts.edit_task') 'title' => trans('texts.edit_task'),
'duration' => $task->resume_time ? ($task->duration + strtotime('now') - strtotime($task->resume_time)) : (strtotime('now') - strtotime($task->start_time))
]; ];
$data = array_merge($data, self::getViewModel()); $data = array_merge($data, self::getViewModel());

View File

@ -60,13 +60,17 @@ class TaskRepository
$task->description = trim($data['description']); $task->description = trim($data['description']);
} }
$timeLog = $task->time_log ? json_decode($task->time_log) : [];
if ($data['action'] == 'start') { if ($data['action'] == 'start') {
$task->start_time = Carbon::now()->toDateTimeString(); $task->start_time = Carbon::now()->toDateTimeString();
$task->is_running = true; $task->is_running = true;
$timeLog[] = [strtotime('now'), false];
} else if ($data['action'] == 'resume') { } else if ($data['action'] == 'resume') {
$task->break_duration = strtotime('now') - strtotime($task->start_time) + $task->duration; $task->break_duration = strtotime('now') - strtotime($task->start_time) + $task->duration;
$task->resume_time = Carbon::now()->toDateTimeString(); $task->resume_time = Carbon::now()->toDateTimeString();
$task->is_running = true; $task->is_running = true;
$timeLog[] = [strtotime('now'), false];
} else if ($data['action'] == 'stop' && $task->is_running) { } else if ($data['action'] == 'stop' && $task->is_running) {
if ($task->resume_time) { if ($task->resume_time) {
$task->duration = $task->duration + strtotime('now') - strtotime($task->resume_time); $task->duration = $task->duration + strtotime('now') - strtotime($task->resume_time);
@ -74,6 +78,7 @@ class TaskRepository
} else { } else {
$task->duration = strtotime('now') - strtotime($task->start_time); $task->duration = strtotime('now') - strtotime($task->start_time);
} }
$timeLog[count($timeLog)-1][1] = strtotime('now');
$task->is_running = false; $task->is_running = false;
} else if ($data['action'] == 'save' && !$task->is_running) { } else if ($data['action'] == 'save' && !$task->is_running) {
$task->start_time = $data['start_time']; $task->start_time = $data['start_time'];
@ -83,6 +88,7 @@ class TaskRepository
$task->duration = max($task->duration, 0); $task->duration = max($task->duration, 0);
$task->break_duration = max($task->break_duration, 0); $task->break_duration = max($task->break_duration, 0);
$task->time_log = json_encode($timeLog);
$task->save(); $task->save();

View File

@ -17,6 +17,7 @@ class EnableResumingTasks extends Migration {
$table->boolean('is_running')->default(false); $table->boolean('is_running')->default(false);
$table->integer('break_duration')->nullable(); $table->integer('break_duration')->nullable();
$table->timestamp('resume_time')->nullable(); $table->timestamp('resume_time')->nullable();
$table->text('time_log')->nullable();
}); });
$tasks = DB::table('tasks') $tasks = DB::table('tasks')
@ -49,6 +50,7 @@ class EnableResumingTasks extends Migration {
$table->dropColumn('is_running'); $table->dropColumn('is_running');
$table->dropColumn('resume_time'); $table->dropColumn('resume_time');
$table->dropColumn('break_duration'); $table->dropColumn('break_duration');
$table->dropColumn('time_log');
}); });
} }

View File

@ -690,5 +690,6 @@ return array(
'resume' => 'Resume', 'resume' => 'Resume',
'break_duration' => 'Break', 'break_duration' => 'Break',
'edit_details' => 'Edit Details', 'edit_details' => 'Edit Details',
'work' => 'Work',
); );

View File

@ -55,9 +55,6 @@
@if ($task->duration) @if ($task->duration)
{{ trans('texts.duration') }}: <span id="durationText"></span><br/> {{ trans('texts.duration') }}: <span id="durationText"></span><br/>
@endif @endif
@if ($task->break_duration)
{{ trans('texts.break_duration') }}: <span id="breakDurationText"></span><br/>
@endif
<p>{!! Button::primary(trans('texts.edit_details'))->withAttributes(['onclick'=>'showTimeDetails()'])->small() !!}</p> <p>{!! Button::primary(trans('texts.edit_details'))->withAttributes(['onclick'=>'showTimeDetails()'])->small() !!}</p>
</div> </div>
</div> </div>
@ -94,7 +91,7 @@
<div class="form-group"> <div class="form-group">
<label class="control-label col-lg-4 col-sm-4"> <label class="control-label col-lg-4 col-sm-4">
{{ trans('texts.duration') }} {{ trans('texts.work') }}
</label> </label>
<div class="col-lg-8 col-sm-8 time-input"> <div class="col-lg-8 col-sm-8 time-input">
<input class="form-control" id="duration_hours" placeholder="{{ uctrans('texts.hours') }}" <input class="form-control" id="duration_hours" placeholder="{{ uctrans('texts.hours') }}"
@ -285,7 +282,7 @@
@if ($task) @if ($task)
NINJA.startTime = {{ strtotime($task->start_time) }}; NINJA.startTime = {{ strtotime($task->start_time) }};
@if ($task->is_running) @if ($task->is_running)
tock({{ $task->duration ?: strtotime('now') - strtotime($task->start_time) }}); tock({{ $duration }});
@else @else
var date = new Date(NINJA.startTime * 1000); var date = new Date(NINJA.startTime * 1000);
var hours = date.getHours(); var hours = date.getHours();