diff --git a/src/html/js/entries.js b/src/html/js/entries.js
index 92c80d8..af8fbcc 100644
--- a/src/html/js/entries.js
+++ b/src/html/js/entries.js
@@ -11,12 +11,28 @@ function entry(){
this.category=ko.observable();
}
+// Account object
+function account() {
+ this.id=ko.observable();
+ this.name=ko.observable();
+ this.future=ko.observable();
+ this.current=ko.observable();
+ this.pointed=ko.observable();
+}
+
+// Month object
+function month() {
+ this.year=ko.observable();
+ this.month=ko.observable();
+}
+
// Util function to show a message in message placeholder.
function message(alertType, title, message) {
$(".alert").alert('close');
$("#message-placeholder").append('
' + title + '
' + message + '');
}
+// The ListViewModel used to instanciate viewmodel.
var ListViewModel = function() {
var self = this;
@@ -120,53 +136,74 @@ var ListViewModel = function() {
// 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();
-
+ $.post("api/entry.php", {action: "get_entries", account: account.id(), year: month.year(), month: month.month()}, function(data) {
// Clean up selected entry.
self.selectedItem(null);
+ // Update entries
self.entries(ko.utils.arrayMap(data, ko.mapping.fromJS));
});
};
+ // Function to load accounts
self.loadAccounts = function() {
- $.post("api/entry.php", {action: "get_accounts"}).success(function (result) {
- self.accounts(result);
+ $.post("api/entry.php", {action: "get_accounts"}).success(function (data) {
+ // Update accounts
+ self.accounts(ko.utils.arrayMap(data, ko.mapping.fromJS));
+ // Reset selected account to the new instance corresponding to the old one.
if(self.account()) {
+ var oldId = self.account().id();
+
+ // Reset to null
+ self.account(null);
+
+ // Find the new instance of the previously selected account.
$.each(self.accounts(), function(index, account) {
- if(self.account().id == account.id) {
+ if(account.id() == oldId) {
self.account(account);
}
});
}
+ // Set selected account to first one if not yet selected
if(!self.account()){
- self.account(result[0]);
+ self.account(self.accounts()[0]);
}
+ // Load months
self.loadMonths(self.account());
});
};
+ // Function to load months
self.loadMonths = function(account){
- $.post("api/entry.php", {action: "get_months", account: account.id}).success(function (result) {
- self.months(result);
+ $.post("api/entry.php", {action: "get_months", account: account.id()}).success(function (data) {
+ // Update months
+ self.months(ko.utils.arrayMap(data, ko.mapping.fromJS));
+ // Reset selected month to the new instance corresponding to the old one
if(self.month()) {
+ var oldYear = self.month().year();
+ var oldMonth = self.month().month();
+
+ // Reset to null
+ self.month(null);
+
+ // Find the new instance of the previously selected month.
$.each(self.months(), function(index, month) {
- if(self.month().year == month.year && self.month().month == month.month) {
+ if(month.year() == oldYear && month.month() == oldMonth) {
self.month(month);
}
});
}
+ // Set selected month to the last one if not yet selected.
if(!self.month()) {
- self.month(result[result.length - 1]);
+ self.month(self.months()[self.months().length - 1]);
}
+ // Load entries
self.loadEntries(self.account(), self.month());
});
};
@@ -213,7 +250,7 @@ var ListViewModel = function() {
self.add = function() {
var newEntry = new entry();
- newEntry.account_id(self.account().id);
+ newEntry.account_id(self.account().id());
self.entries.unshift(newEntry);