summaryrefslogtreecommitdiffstats
path: root/db.vala
diff options
context:
space:
mode:
Diffstat (limited to 'db.vala')
-rw-r--r--db.vala92
1 files changed, 91 insertions, 1 deletions
diff --git a/db.vala b/db.vala
index a02cfca..4b83196 100644
--- a/db.vala
+++ b/db.vala
@@ -2,9 +2,19 @@ public class Database {
private Sqlite.Database db;
private Sqlite.Statement insert_stmt;
private Sqlite.Statement product_stmt;
+ private Sqlite.Statement undo_stmt;
+ private Sqlite.Statement stock_stmt1;
+ private Sqlite.Statement stock_stmt2;
uint64 user = 0;
+ uint64 product = 0;
+ bool logged_in = false;
+ bool stock_mode = false;
private static string insert_query = "INSERT INTO purchases ('user', 'product', 'timestamp') VALUES (?, ?, ?)";
private static string product_query = "SELECT name FROM products WHERE id = ?";
+ private static string undo_query = "DELETE FROM purchases WHERE user = ? ORDER BY 'timestamp' DESC LIMIT 1";
+
+ private static string stock_query1 = "INSERT INTO restock ('user', 'product', 'amount', 'timestamp') VALUES (?, ?, ?, ?)";
+ private static string stock_query2 = "UPDATE products SET amount = amount + ? WHERE id = ?";
public Database(string file) {
int rc;
@@ -23,15 +33,33 @@ public class Database {
if(rc != Sqlite.OK) {
error("could not prepare article statement!");
}
+
+ rc = this.db.prepare_v2(undo_query, -1, out undo_stmt);
+ if(rc != Sqlite.OK) {
+ error("could not prepare undo statement!");
+ }
+
+ rc = this.db.prepare_v2(stock_query1, -1, out stock_stmt1);
+ if(rc != Sqlite.OK) {
+ error("could not prepare first stock statement!");
+ }
+
+ rc = this.db.prepare_v2(stock_query2, -1, out stock_stmt2);
+ if(rc != Sqlite.OK) {
+ error("could not prepare second stock statement!");
+ }
+
}
public bool login(uint64 id) {
this.user = id;
+ this.logged_in = true;
return true;
}
public bool logout() {
this.user = 0;
+ this.logged_in = false;
return true;
}
@@ -71,7 +99,69 @@ public class Database {
}
}
+ public bool undo() {
+ if(is_logged_in()) {
+ this.undo_stmt.reset();
+ this.undo_stmt.bind_text(1, "%llu".printf(user));
+
+ int rc = this.undo_stmt.step();
+ if(rc != Sqlite.DONE)
+ error("[interner Fehler: %d]".printf(rc));
+ else
+ return true;
+ }
+
+ return false;
+ }
+
+ public bool choose_stock_product(uint64 id) {
+ if(is_in_stock_mode()) {
+ product = id;
+ return true;
+ }
+ return false;
+ }
+
+ public bool add_stock_product(uint64 amount) {
+ if(is_in_stock_mode() && product != 0) {
+ int rc = 0;
+ int64 timestamp = (new DateTime.now_utc()).to_unix();
+
+ this.stock_stmt1.reset();
+ this.stock_stmt1.bind_text(1, "%llu".printf(user));
+ this.stock_stmt1.bind_text(2, "%llu".printf(product));
+ this.stock_stmt1.bind_text(3, "%llu".printf(amount));
+ this.stock_stmt1.bind_text(4, "%llu".printf(timestamp));
+
+ rc = this.stock_stmt1.step();
+ if(rc != Sqlite.DONE)
+ error("[interner Fehler: %d]".printf(rc));
+
+ this.stock_stmt2.reset();
+ this.stock_stmt2.bind_text(1, "%llu".printf(amount));
+ this.stock_stmt2.bind_text(2, "%llu".printf(product));
+
+ rc = this.stock_stmt2.step();
+ if(rc != Sqlite.DONE)
+ error("[interner Fehler: %d]".printf(rc));
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public bool go_into_stock_mode() {
+ if(is_logged_in())
+ stock_mode = true;
+ return stock_mode;
+ }
+
public bool is_logged_in() {
- return (user != 0);
+ return this.logged_in;
+ }
+
+ public bool is_in_stock_mode() {
+ return this.stock_mode;
}
}