mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-07 19:04:41 -04:00
Working on the time tracker
This commit is contained in:
parent
1189d7c8e8
commit
b70c4b6b20
@ -220,7 +220,7 @@
|
|||||||
<tr data-bind="event: { mouseover: onMouseOver, mouseout: onMouseOut }">
|
<tr data-bind="event: { mouseover: onMouseOver, mouseout: onMouseOut }">
|
||||||
<td style="padding: 0 6px 10px 0">
|
<td style="padding: 0 6px 10px 0">
|
||||||
{!! Former::text('date')
|
{!! Former::text('date')
|
||||||
->placeholder('date')
|
->placeholder($account->formatDate($account->getDateTime()))
|
||||||
->data_bind("datepicker: startDate, valueUpdate: 'afterkeydown'")
|
->data_bind("datepicker: startDate, valueUpdate: 'afterkeydown'")
|
||||||
->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT, DEFAULT_DATE_PICKER_FORMAT))
|
->data_date_format(Session::get(SESSION_DATE_PICKER_FORMAT, DEFAULT_DATE_PICKER_FORMAT))
|
||||||
->raw() !!}
|
->raw() !!}
|
||||||
@ -228,13 +228,13 @@
|
|||||||
<td style="padding: 0 6px 10px 6px">
|
<td style="padding: 0 6px 10px 6px">
|
||||||
{!! Former::text('start_time')
|
{!! Former::text('start_time')
|
||||||
->placeholder('start_time')
|
->placeholder('start_time')
|
||||||
->data_bind("timepicker: startTime, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
|
->data_bind("timepicker: startTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
|
||||||
->raw() !!}
|
->raw() !!}
|
||||||
</td>
|
</td>
|
||||||
<td style="padding: 0 6px 10px 6px">
|
<td style="padding: 0 6px 10px 6px">
|
||||||
{!! Former::text('end_time')
|
{!! Former::text('end_time')
|
||||||
->placeholder('end_time')
|
->placeholder('end_time')
|
||||||
->data_bind("timepicker: endTime, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
|
->data_bind("timepicker: endTimeOfDay, timepickerOptions: {scrollDefault: 'now', timeFormat: '" . ($account->military_time ? 'H:i:s' : 'g:i:s A') . "'}")
|
||||||
->raw() !!}
|
->raw() !!}
|
||||||
</td>
|
</td>
|
||||||
<td style="padding: 0 0 10px 6px">
|
<td style="padding: 0 0 10px 6px">
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
|
|
||||||
ko.utils.registerEventHandler(element, 'change', function () {
|
ko.utils.registerEventHandler(element, 'change', function () {
|
||||||
var value = valueAccessor();
|
var value = valueAccessor();
|
||||||
|
var seconds = $(element).timepicker('getSecondsFromMidnight');
|
||||||
|
value(seconds);
|
||||||
|
/*
|
||||||
var field = $(element).attr('name');
|
var field = $(element).attr('name');
|
||||||
var time = 0;
|
var time = 0;
|
||||||
if (field == 'duration') {
|
if (field == 'duration') {
|
||||||
@ -59,16 +62,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
value(time);
|
value(time);
|
||||||
|
*/
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
update: function (element, valueAccessor) {
|
update: function (element, valueAccessor) {
|
||||||
var value = ko.utils.unwrapObservable(valueAccessor());
|
var value = ko.utils.unwrapObservable(valueAccessor());
|
||||||
var field = $(element).attr('name');
|
var field = $(element).attr('name');
|
||||||
|
|
||||||
if (field == 'duration') {
|
if (value) {
|
||||||
$(element).timepicker('setTime', intToTime(value));
|
if (field == 'duration') {
|
||||||
} else {
|
$(element).timepicker('setTime', intToTime(value));
|
||||||
if (value) {
|
} else {
|
||||||
$(element).timepicker('setTime', new Date(value * 1000));
|
$(element).timepicker('setTime', new Date(value * 1000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -662,8 +666,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data) {
|
self.checkForEmpty = function() {
|
||||||
self.update(data);
|
var hasEmpty = false;
|
||||||
|
var lastTime = 0;
|
||||||
|
for (var i=0; i<self.time_log().length; i++) {
|
||||||
|
var timeLog = self.time_log()[i];
|
||||||
|
if (timeLog.isEmpty() || timeLog.isRunning()) {
|
||||||
|
hasEmpty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasEmpty) {
|
||||||
|
self.addTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.sortValue = function(field) {
|
self.sortValue = function(field) {
|
||||||
@ -712,6 +726,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.addTime = function(time) {
|
self.addTime = function(time) {
|
||||||
|
if (!time) {
|
||||||
|
time = new TimeModel();
|
||||||
|
}
|
||||||
self.time_log.push(time);
|
self.time_log.push(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -897,9 +914,14 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
self.removeTime = function(time) {
|
self.removeTime = function(time) {
|
||||||
console.log('removed..');
|
|
||||||
model.formChanged(true);
|
model.formChanged(true);
|
||||||
self.time_log.remove(time);
|
self.time_log.remove(time);
|
||||||
|
self.checkForEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
self.update(data);
|
||||||
|
self.checkForEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -991,17 +1013,49 @@
|
|||||||
self.isHovered(false);
|
self.isHovered(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.startDateMidnight = function() {
|
||||||
|
return moment.unix(self.startTime()).set('hours', 0).set('minutes', 0).set('seconds', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.startTimeOfDay = ko.computed({
|
||||||
|
read: function () {
|
||||||
|
return self.startTime();
|
||||||
|
},
|
||||||
|
write: function(value) {
|
||||||
|
console.log('midnigh: ' + self.startDateMidnight().unix());
|
||||||
|
console.log('value: ' + value);
|
||||||
|
self.startTime(self.startDateMidnight().unix() + value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.endTimeOfDay = ko.computed({
|
||||||
|
read: function () {
|
||||||
|
return self.endTime();
|
||||||
|
},
|
||||||
|
write: function(value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
self.startDate = ko.computed({
|
self.startDate = ko.computed({
|
||||||
read: function () {
|
read: function () {
|
||||||
return self.startTime();
|
return self.startTime();
|
||||||
},
|
},
|
||||||
write: function(value) {
|
write: function(value) {
|
||||||
var origVal = moment.unix(self.startTime()).set('hours', 0).set('minutes', 0).set('seconds', 0);
|
var origVal = self.startDateMidnight();
|
||||||
var newVal = moment(value).set('hours', 0);
|
var newVal = moment(value).set('hours', 0);
|
||||||
var diff = newVal.diff(origVal, 'days') * 60 * 60 * 24;
|
var diff = newVal.diff(origVal, 'days') * 60 * 60 * 24;
|
||||||
self.startTime(self.startTime() + diff);
|
if (self.startTime()) {
|
||||||
if (self.endTime()) {
|
self.startTime(self.startTime() + diff);
|
||||||
self.endTime(self.endTime() + diff);
|
console.log('update start to: ' + self.startTime());
|
||||||
|
if (self.endTime()) {
|
||||||
|
self.endTime(self.endTime() + diff);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.startTime(newVal.unix());
|
||||||
|
//self.startTime(value);
|
||||||
|
console.log('set start to: ' + self.startTime());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -1011,11 +1065,11 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
self.isEmpty = ko.computed(function() {
|
self.isEmpty = ko.computed(function() {
|
||||||
return !self.startTime() && !self.endTime();
|
return ! self.startTime() && ! self.endTime();
|
||||||
});
|
});
|
||||||
|
|
||||||
self.isRunning = ko.computed(function() {
|
self.isRunning = ko.computed(function() {
|
||||||
return self.startTime() && !self.endTime();
|
return self.startTime() && ! self.endTime();
|
||||||
});
|
});
|
||||||
|
|
||||||
self.age = ko.computed(function() {
|
self.age = ko.computed(function() {
|
||||||
@ -1026,6 +1080,9 @@
|
|||||||
self.duration = ko.computed({
|
self.duration = ko.computed({
|
||||||
read: function () {
|
read: function () {
|
||||||
model.clock(); // bind to the clock
|
model.clock(); // bind to the clock
|
||||||
|
if (! self.startTime()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var endTime = self.endTime() ? self.endTime() : moment().unix();
|
var endTime = self.endTime() ? self.endTime() : moment().unix();
|
||||||
return endTime - self.startTime();
|
return endTime - self.startTime();
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user