· 8 years ago · Jul 23, 2018, 04:24 PM
1ListAssistant.prototype.activate = function(event) {
2 /* put in event handlers here that should only be in effect when this scene is active. For
3 example, key handlers that are observing the document */
4
5 if (!Miles.Db) {
6 Mojo.Log.error("Could not open database");
7 }
8 else {
9 // Check if tables exist
10 var sql = "SELECT name FROM sqlite_master WHERE name='mileageEvents'";
11 Miles.Db.transaction(
12 (function (transaction) {
13 transaction.executeSql(sql, [],
14 this.tablesExist.bind(this),
15 function(transaction, error){ // error handler
16 Mojo.Log.error("Error with DB call: " + error.message);
17 });
18 }).bind(this)
19 );
20
21 //this.createVehicles();
22 //this.createMileageEvents();
23
24 //this.tableCreated();
25 //this.vehiclesCreated();
26 //this.categoriesCreated();
27
28 }
29}
30
31ListAssistant.prototype.dbErrorHandler = function (transaction, error) {
32 Mojo.Log.info("**********Database failure of some kind!*********", error.message);
33}
34
35ListAssistant.prototype.tablesExist = function(transaction, results) {
36 if (!results.rows.length) {
37 // Tables do not exist so create
38 Mojo.Log.info("CREATING TABLES because they doesn't exist");
39 var sql = "CREATE TABLE IF NOT EXISTS 'categories' (value INTEGER PRIMARY KEY, label TEXT)";
40 //Mojo.Log.info(sql);
41 Miles.Db.transaction(
42 (function(transaction){
43 transaction.executeSql(sql, [],
44 this.tableCreated.bind(this),
45 this.dbErrorHandler.bind(this)
46 );
47 }).bind(this)
48 );
49
50 this.createMileageEvents();
51 this.createVehicles();
52 //Mojo.Log.info("OK");
53 }
54 else {
55 // Tables do exist, so load data
56 this.eventsCreated();
57 this.vehiclesCreated();
58 this.categoriesCreated();
59
60 }
61}
62
63ListAssistant.prototype.tableCreated = function(transaction, results) {
64 //create default categories
65 Mojo.Log.info("CREATED TABLES! Adding default categories");
66 sql = "INSERT INTO 'categories' (label) VALUES ('Unfiled')";
67 sql1 = "INSERT INTO 'categories' (label) VALUES ('Business')";
68 sql2 = "INSERT INTO 'categories' (label) VALUES ('Personal')";
69 //Mojo.Log.info(sql);
70 Miles.Db.transaction(
71 (function (transaction) {
72 transaction.executeSql(sql),
73 transaction.executeSql(sql1),
74 transaction.executeSql(sql2, [],
75 this.categoriesCreated.bind(this),
76 this.dbErrorHandler.bind(this));
77 }).bind(this)
78 );
79}
80
81ListAssistant.prototype.createMileageEvents = function() {
82 Mojo.Log.info("CREATING MILEAGE EVENTS TABLE");
83 var sql = "CREATE TABLE IF NOT EXISTS 'mileageEvents' (id INTEGER PRIMARY KEY, date INTEGER, endDate INTEGER, dateformat TEXT, begMiles TEXT, endMiles TEXT, mileage TEXT, purpose TEXT, destination TEXT, notes TEXT, category TEXT, vehicle INTEGER NOT NULL DEFAULT 0)"; // check sqlite data types for other values
84 //Mojo.Log.info(sql);
85 Miles.Db.transaction(
86 (function (transaction) {
87 transaction.executeSql(sql, [],
88 this.eventsCreated.bind(this),
89 this.dbErrorHandler.bind(this));
90 }).bind(this)
91 );
92}
93
94ListAssistant.prototype.eventsCreated = function (transaction, result) {
95 Mojo.Log.info("LOADING FROM MILEAGE EVENTS!");
96 //load existing data, if any - Miles.Db opened in AppAssistant
97 var sql = "SELECT * FROM mileageEvents";
98 //Mojo.Log.info(Miles.Db);
99 Miles.Db.transaction(
100 (function (transaction) {
101 transaction.executeSql(sql, [],
102 this.dataRetrieved.bind(this),
103 this.dbErrorHandler.bind(this));
104 }).bind(this)
105 );
106}
107
108ListAssistant.prototype.dataRetrieved = function (transaction, results) {
109 Mojo.Log.info("Retrieved %j events from database.", results.rows.length);
110 //Mojo.Log.info("Results are: %j", results.rows.item(0));
111 Miles.mileageEvents.clear();
112 for (var i=0; i<results.rows.length; i++) {
113 var thisMiles = {};
114 //Mojo.Log.info("Results are: %j", results.rows.item(i));
115 try {
116 thisMiles.id = results.rows.item(i).id;
117 //Mojo.Log.info("OK", thisMiles.id);
118 thisMiles.begMiles = results.rows.item(i).begMiles;
119 thisMiles.endMiles = results.rows.item(i).endMiles;
120 thisMiles.mileage = parseInt(results.rows.item(i).mileage);
121 thisMiles.purpose = results.rows.item(i).purpose;
122 thisMiles.destination = results.rows.item(i).destination;
123 thisMiles.notes = results.rows.item(i).notes;
124 thisMiles.category = results.rows.item(i).category;
125 thisMiles.vehicle = results.rows.item(i).vehicle;
126 var d1 = results.rows.item(i).date;
127 //Mojo.Log.info ("My date is: ", d1+"1");
128 var y = new Date();
129 y.setTime(d1);
130 //Mojo.Log.info(y);
131 thisMiles.date = d1;
132 //Mojo.Log.info ("My date is now: ", thisMiles.date);
133 thisMiles.dateformat = Mojo.Format.formatDate(y,{date: 'medium'});
134 var d2 = results.rows.item(i).endDate;
135 y.setTime(d2);
136 thisMiles.endDate = d2;
137 var diff = new Date(d2-d1);
138 thisMiles.timeDiff = diff.getUTCHours() + " hrs " + diff.getUTCMinutes() + " mins";
139 thisMiles.timeDiff = (diff.getUTCDate()-1) ? diff.getUTCDate()-1 + " days " + thisMiles.timeDiff : thisMiles.timeDiff;
140 if (diff < 0) thisMiles.timeDiff = "Error: End time before Begin time";
141 Mojo.Log.info("Time", thisMiles.timeDiff);
142 }
143 catch (e) {
144 Mojo.Log.error(e);
145 }
146 Miles.mileageEvents.push(thisMiles);
147 }
148 // sort by category & date
149
150 Miles.mileageEvents.sort(this.milesSort.bind(this));
151
152 // reverse sort order
153 Miles.mileageEvents.reverse();
154 // update list model
155 //this.controller.modelChanged(this.listModel);
156
157}