diff --git a/src/html/js/entries.js b/src/html/js/entries.js
index 6901f8c..02942be 100644
--- a/src/html/js/entries.js
+++ b/src/html/js/entries.js
@@ -11,6 +11,7 @@ function entry(data){
this.category=ko.observable(ko.utils.unwrapObservable(data.category));
}
+// Util function to show a message in message placeholder.
function message(alertType, title, message) {
$(".alert").alert('close');
$("#message-placeholder").append('
' + title + '
' + message + '
');
@@ -19,30 +20,33 @@ function message(alertType, title, message) {
var ListViewModel = function() {
var self = this;
+ // Account store and selection
self.account = ko.observable();
self.accounts = ko.observableArray([]);
- self.entries = ko.observableArray([]);
-
+ // Month store and selection
self.months = ko.observableArray();
self.month = ko.observable();
+ // Entry store and selection
+ self.entries = ko.observableArray([]);
self.selectedItem = ko.observable();
+ // Placeholder for saved value to cancel entry edition
self.savedItem = ko.observable();
+ // Placeholder for entry to remove to be available in modal function "yes" click callback
self.itemToRemove = ko.observable();
- self.chart = null;
+ // Returns the data for the categories by summing values with same category
self.expenseCategoriesChart = ko.computed(function() {
var entries=ko.utils.unwrapObservable(self.entries);
- var chartValues = [];
+ // First pass: get sum values for each category.
var chartValuesTmp = {};
-
$.each(entries, function(index, entry) {
var category = entry.category();
var value = entry.value() ? Number(entry.value()) : null;
- if(category && value) {
+ if(category && value && value < 0.0) {
var oldValue = 0.0;
if(chartValuesTmp[category]) {
@@ -53,6 +57,8 @@ var ListViewModel = function() {
}
});
+ // Second pass: transform to an array readable by jqplot.
+ var chartValues = [];
$.each(chartValuesTmp, function(key, value) {
chartValues.push([key, value]);
});
@@ -60,12 +66,13 @@ var ListViewModel = function() {
return chartValues;
});
+ // Return the data for the sold chart.
self.entriesChart = ko.computed(function() {
+ // We assume that entries are sorted by value date descending.
var entries = ko.utils.unwrapObservable(self.entries).slice().reverse();
- var chartValues = [];
+ // First pass: get open, high, low and close values for each day.
var chartValuesTmp = {};
-
$.each(entries, function(index, entry) {
//var date = entry.value_date() ? entry.value_date().toString() : null;
var date = entry.value_date();
@@ -100,24 +107,22 @@ var ListViewModel = function() {
}
});
+ // Second pass: transform to an array readable by jqplot OHLC renderer.
+ var chartValues = [];
$.each(chartValuesTmp, function(key, value) {
- var ohlc = [key, value['open'], value['high'], value['low'], value['close']];
- chartValues.push(ohlc);
- });
-
- chartValues.sort(function(a, b){
- var aDate = Date.parse(a[0]);
- var bDate = Date.parse(b[0]);
-
- return aDate < bDate ? -1 : 1;
+ chartValues.push([key, value['open'], value['high'], value['low'], value['close']]);
});
return chartValues;
}, self);
+ // Function to load entries from server for a specific account and month.
self.loadEntries = function(account, month) {
$.post("api/entry.php", {action: "get_entries", account: account.id, year: month.year, month: month.month}, function(data) {
+ // Clean up current entries.
self.entries.removeAll();
+
+ // Clean up selected entry.
self.selectedItem(null);
var entries = [];