diff --git a/resources/views/tasks/time_tracker.blade.php b/resources/views/tasks/time_tracker.blade.php
index 4ede54d9f063..80b7e6f5382a 100644
--- a/resources/views/tasks/time_tracker.blade.php
+++ b/resources/views/tasks/time_tracker.blade.php
@@ -226,16 +226,20 @@
->raw() !!}
- {!! Former::text('start_time')
- ->placeholder('start_time')
- ->data_bind("timepicker: startTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
- ->raw() !!}
+
+ {!! Former::text('start_time')
+ ->placeholder('start_time')
+ ->data_bind("timepicker: startTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
+ ->raw() !!}
+
|
- {!! Former::text('end_time')
- ->placeholder('end_time')
- ->data_bind("timepicker: endTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
- ->raw() !!}
+
+ {!! Former::text('end_time')
+ ->placeholder('end_time')
+ ->data_bind("timepicker: endTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
+ ->raw() !!}
+
|
{!! Former::text('duration')
diff --git a/resources/views/tasks/time_tracker_knockout.blade.php b/resources/views/tasks/time_tracker_knockout.blade.php
index a5ccb5bad37d..e63d69b4bee5 100644
--- a/resources/views/tasks/time_tracker_knockout.blade.php
+++ b/resources/views/tasks/time_tracker_knockout.blade.php
@@ -303,6 +303,10 @@
if (self.selectedTask()) {
self.selectedTask().onStartClick();
} else {
+ if (! task.checkForOverlaps()) {
+ swal("{{ trans('texts.task_errors') }}");
+ return;
+ }
var time = new TimeModel();
time.startTime(moment().unix());
var task = new TaskModel();
@@ -560,6 +564,10 @@
}
self.save = function(isSelected) {
+ if (! self.checkForOverlaps()) {
+ swal("{{ trans('texts.task_errors') }}");
+ return;
+ }
if (self.isValid() !== true) {
toastr.error("{{ trans('texts.error_refresh_page') }}");
throw self.isValid();
@@ -658,6 +666,33 @@
}
}
+ self.checkForOverlaps = function() {
+ var lastTime = 0;
+ var isValid = true;
+
+ for (var i=0; i timeLog.endTime())) {
+ startValid = false;
+ }
+ if (timeLog.endTime() && timeLog.endTime() < Math.min(timeLog.startTime(), lastTime)) {
+ endValid = false;
+ }
+ lastTime = Math.max(lastTime, timeLog.endTime());
+ }
+ timeLog.isStartValid(startValid);
+ timeLog.isEndValid(endValid);
+ if (! startValid || ! endValid) {
+ isValid = false;
+ }
+ }
+
+ return isValid;
+ }
+
self.checkForEmpty = function() {
setTimeout(function() {
var hasEmpty = false;
@@ -708,6 +743,7 @@
});
self.onChange = function() {
+ self.checkForOverlaps();
self.checkForEmpty();
}
@@ -780,17 +816,18 @@
if (! model.isStartEnabled()) {
return false;
}
-
+ if (! self.checkForOverlaps()) {
+ swal("{{ trans('texts.task_errors') }}");
+ return;
+ }
if (self.isRunning()) {
var time = self.lastTime();
time.endTime(moment().unix());
} else {
var lastTime = self.lastTime();
if (lastTime && ! lastTime.startTime()) {
- console.log('using time');
var time = lastTime;
} else {
- console.log('adding time');
var time = new TimeModel();
self.addTime(time);
}
|