mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-23 20:00:33 -04:00
Working on time tracker
This commit is contained in:
parent
b8ecfbf5c2
commit
9fba49009c
@ -2467,7 +2467,7 @@ $LANG = array(
|
|||||||
'stopped' => 'Stopped',
|
'stopped' => 'Stopped',
|
||||||
'ascending' => 'Ascending',
|
'ascending' => 'Ascending',
|
||||||
'descending' => 'Descending',
|
'descending' => 'Descending',
|
||||||
'direction' => 'Direction',
|
'sort_direction' => 'Direction',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -235,18 +235,18 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6" style="padding-top:24px;">
|
<div class="col-md-6" style="padding-top:24px;">
|
||||||
{!! Former::select('sort_by')
|
{!! Former::select('sort_by')
|
||||||
->addOption(trans('texts.date'), 'date')
|
->addOption(trans('texts.date'), 'createdAt')
|
||||||
->addOption(trans('texts.duration'), 'duration')
|
->addOption(trans('texts.duration'), 'duration')
|
||||||
->addOption(trans('texts.client'), 'client')
|
->addOption(trans('texts.client'), 'client')
|
||||||
->addOption(trans('texts.project'), 'project')
|
->addOption(trans('texts.project'), 'project')
|
||||||
->addOption(trans('texts.description'), 'description')
|
->addOption(trans('texts.description'), 'description')
|
||||||
->data_bind('value: sortBy') !!}
|
->data_bind('value: sortBy, event: {change: onSortChange}') !!}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6" style="padding-top:24px;">
|
<div class="col-md-6" style="padding-top:24px;">
|
||||||
{!! Former::select('direction')
|
{!! Former::select('sort_direction')
|
||||||
->addOption(trans('texts.ascending'), 'asc')
|
->addOption(trans('texts.ascending'), 'ascending')
|
||||||
->addOption(trans('texts.descending'), 'desc')
|
->addOption(trans('texts.descending'), 'descending')
|
||||||
->data_bind('value: sortDirection') !!}
|
->data_bind('value: sortDirection, event: {change: onSortChange}') !!}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
self.selectedProject = ko.observable(false);
|
self.selectedProject = ko.observable(false);
|
||||||
|
|
||||||
self.filterState = ko.observable('all');
|
self.filterState = ko.observable('all');
|
||||||
self.sortBy = ko.observable('date');
|
self.sortBy = ko.observable('createdAt');
|
||||||
self.sortDirection = ko.observable('desc');
|
self.sortDirection = ko.observable('descending');
|
||||||
|
|
||||||
self.isDesktop = function() {
|
self.isDesktop = function() {
|
||||||
return navigator.userAgent == 'Time Tracker';
|
return navigator.userAgent == 'Time Tracker';
|
||||||
@ -31,6 +31,10 @@
|
|||||||
task.save(data, true);
|
task.save(data, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.onSortChange = function() {
|
||||||
|
console.log('sort change...');
|
||||||
|
}
|
||||||
|
|
||||||
self.onFilterClick = function(event) {
|
self.onFilterClick = function(event) {
|
||||||
$('#filterPanel').toggle();
|
$('#filterPanel').toggle();
|
||||||
}
|
}
|
||||||
@ -323,14 +327,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.filteredTasks = ko.computed(function() {
|
self.filteredTasks = ko.computed(function() {
|
||||||
|
|
||||||
var tasks = self.tasks();
|
var tasks = self.tasks();
|
||||||
|
|
||||||
// bind to fields
|
|
||||||
self.filterState();
|
|
||||||
|
|
||||||
var filtered = ko.utils.arrayFilter(tasks, function(task) {
|
var filtered = ko.utils.arrayFilter(tasks, function(task) {
|
||||||
return task.matchesFilter();
|
return task.matchesFilter(self.filter(), self.filterState());
|
||||||
});
|
});
|
||||||
|
|
||||||
if (! self.filter() || filtered.length > 0) {
|
if (! self.filter() || filtered.length > 0) {
|
||||||
@ -339,12 +339,21 @@
|
|||||||
|
|
||||||
// sort the data
|
// sort the data
|
||||||
tasks.sort(function (left, right) {
|
tasks.sort(function (left, right) {
|
||||||
return right.createdAt() - left.createdAt();
|
var leftSortValue = left.sortValue(self.sortBy());
|
||||||
/*
|
var rightSortValue = right.sortValue(self.sortBy());
|
||||||
right = right.firstTime() ? right.firstTime().order() : right.createdAt();
|
if (self.sortBy() == 'createdAt' || self.sortBy() == 'duration') {
|
||||||
left = left.firstTime() ? left.firstTime().order() : left.createdAt();
|
if (self.sortDirection() == 'descending') {
|
||||||
return right - left;
|
return rightSortValue - leftSortValue
|
||||||
*/
|
} else {
|
||||||
|
return leftSortValue - rightSortValue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (self.sortDirection() == 'ascending') {
|
||||||
|
return leftSortValue.localeCompare(rightSortValue);
|
||||||
|
} else {
|
||||||
|
return rightSortValue.localeCompare(leftSortValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return tasks;
|
return tasks;
|
||||||
@ -560,6 +569,18 @@
|
|||||||
self.update(data);
|
self.update(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.sortValue = function(field) {
|
||||||
|
if (field == 'client') {
|
||||||
|
return self.client() && self.client().displayName() ? self.client().displayName().toLowerCase() : '';
|
||||||
|
} else if (field == 'project') {
|
||||||
|
return self.project() && self.project().name() ? self.project().name().toLowerCase() : '';
|
||||||
|
} else if (field == 'duration') {
|
||||||
|
return self.seconds(true);
|
||||||
|
} else {
|
||||||
|
return self[field]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.isNew = ko.computed(function() {
|
self.isNew = ko.computed(function() {
|
||||||
return ! self.public_id();
|
return ! self.public_id();
|
||||||
});
|
});
|
||||||
@ -595,8 +616,8 @@
|
|||||||
return times;
|
return times;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.matchesFilter = function() {
|
self.matchesFilter = function(filter, filterState) {
|
||||||
if (model.filter()) {
|
if (filter) {
|
||||||
filter = model.filter().toLowerCase();
|
filter = model.filter().toLowerCase();
|
||||||
var parts = filter.split(' ');
|
var parts = filter.split(' ');
|
||||||
for (var i=0; i<parts.length; i++) {
|
for (var i=0; i<parts.length; i++) {
|
||||||
@ -625,9 +646,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model.filterState() == 'stopped' && self.isRunning()) {
|
if (filterState == 'stopped' && self.isRunning()) {
|
||||||
return false;
|
return false;
|
||||||
} else if (model.filterState() == 'running' && ! self.isRunning()) {
|
} else if (filterState == 'running' && ! self.isRunning()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -740,9 +761,9 @@
|
|||||||
return time.age();
|
return time.age();
|
||||||
});
|
});
|
||||||
|
|
||||||
self.calcDuration = function(total) {
|
self.seconds = function(total) {
|
||||||
if (! self.time_log().length) {
|
if (! self.time_log().length) {
|
||||||
return '0:00:00';
|
return moment.duration(0);
|
||||||
}
|
}
|
||||||
var time = self.lastTime();
|
var time = self.lastTime();
|
||||||
var now = new Date().getTime();
|
var now = new Date().getTime();
|
||||||
@ -756,18 +777,19 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var duration = moment.duration(duration * 1000);
|
return moment.duration(duration * 1000);
|
||||||
return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.totalDuration = ko.computed(function() {
|
self.totalDuration = ko.computed(function() {
|
||||||
model.clock(); // bind to the clock
|
model.clock(); // bind to the clock
|
||||||
return self.calcDuration(true);
|
var duration = self.seconds(true);
|
||||||
|
return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
|
||||||
});
|
});
|
||||||
|
|
||||||
self.duration = ko.computed(function() {
|
self.duration = ko.computed(function() {
|
||||||
model.clock(); // bind to the clock
|
model.clock(); // bind to the clock
|
||||||
return self.calcDuration(false);
|
var duration = self.seconds(false);
|
||||||
|
return Math.floor(duration.asHours()) + moment.utc(duration.asMilliseconds()).format(":mm:ss");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user