From b11374fbf4a9e8900c1471dc1e8350a07d8a4a68 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Wed, 8 Aug 2012 06:35:02 +0200 Subject: implement & enable new stock dialog --- db.vala | 36 +++++++++++++++ ui.vala | 14 +++++- user-interface.ui | 133 +++++++++++++++++++++++++++++------------------------- 3 files changed, 120 insertions(+), 63 deletions(-) diff --git a/db.vala b/db.vala index 8adf81d..10687f4 100644 --- a/db.vala +++ b/db.vala @@ -13,6 +13,14 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +public struct StockEntry { + public string id; + public string name; + public int amount; + public string memberprice; + public string guestprice; +} + public class Database { private Sqlite.Database db; private Sqlite.Statement product_stmt; @@ -25,6 +33,7 @@ public class Database { private Sqlite.Statement stock_stmt1; private Sqlite.Statement stock_stmt2; private Sqlite.Statement price_stmt; + private Sqlite.Statement stock_status_stmt; int32 user = 0; bool logged_in = false; private static string product_query = "SELECT name FROM products WHERE id = ?"; @@ -37,6 +46,7 @@ public class Database { 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 = ?"; private static string price_query = "SELECT memberprice, guestprice FROM prices WHERE product = ? AND valid_from <= ? ORDER BY valid_from DESC LIMIT 1"; + private static string stock_status_query = "SELECT id, name, amount, memberprice, guestprice FROM products, prices WHERE products.id = prices.product AND products.amount > 0 AND prices.valid_from = (SELECT valid_from FROM prices WHERE product = products.id ORDER BY valid_from DESC LIMIT 1)"; public Database(string file) { int rc; @@ -96,6 +106,10 @@ public class Database { error("could not prepare price statement!"); } + rc = this.db.prepare_v2(stock_status_query, -1, out stock_status_stmt); + if(rc != Sqlite.OK) { + error("could not prepare stock status statement!"); + } } public bool login(int32 id) { @@ -120,6 +134,28 @@ public class Database { return result; } + public Gee.List get_stock() { + var result = new Gee.ArrayList(); + this.stock_status_stmt.reset(); + + while(this.stock_status_stmt.step() == Sqlite.ROW) { + StockEntry entry = { + this.stock_status_stmt.column_text(0), + this.stock_status_stmt.column_text(1), + this.stock_status_stmt.column_int(2), + null, + null + }; + + entry.memberprice = "%d.%02d€".printf(this.stock_status_stmt.column_int(3) / 100, this.stock_status_stmt.column_int(3) % 100); + entry.guestprice = "%d.%02d€".printf(this.stock_status_stmt.column_int(4) / 100, this.stock_status_stmt.column_int(4) % 100); + + result.add(entry); + } + + return result; + } + public bool buy(uint64 article) { if(is_logged_in()) { int rc = 0; diff --git a/ui.vala b/ui.vala index 843198b..a5d37a4 100644 --- a/ui.vala +++ b/ui.vala @@ -21,7 +21,6 @@ public void init_ui() { public void init_main_window() { var window = builder.get_object("main") as Gtk.Window; - /* TODO */ window.destroy.connect(() => { Gtk.main_quit(); }); @@ -76,6 +75,19 @@ public void show_main_window() { (builder.get_object("main") as Gtk.Window).show(); } +public void show_stock_dialog() { + var liststore = builder.get_object("stock-store") as Gtk.ListStore; + liststore.clear(); + + Gtk.TreeIter iter; + foreach(var item in db.get_stock()) { + liststore.append(out iter); + liststore.set(iter, 0, item.id, 1, item.name, 2, item.amount, 3, item.memberprice, 4, item.guestprice, -1); + } + + (builder.get_object("stock-dialog") as Gtk.Window).show(); +} + [PrintfFormat] public void write_to_log(string format, ...) { var arguments = va_list(); diff --git a/user-interface.ui b/user-interface.ui index be36742..a2fafe0 100644 --- a/user-interface.ui +++ b/user-interface.ui @@ -188,10 +188,10 @@ Lennart Weller <lhw@ring0.de> Stock & Price Information False True - False False image4 False + @@ -599,11 +599,30 @@ Lennart Weller <lhw@ring0.de> button-restock-add + + + + + + + + + + + + + + + 400 + 500 False 5 stock dialog + + + False @@ -643,77 +662,67 @@ Lennart Weller <lhw@ring0.de> True in - + True - False + True + stock-store + 1 + vertical + + + - - True - False + + ID - - True - False - EAN - - - 0 - 0 - 1 - 1 - + + + 0 + + + + + + Name - - True - False - Name - - - 1 - 0 - 1 - 1 - + + + 1 + + + + + + Amount - - True - False - Amount - - - 2 - 0 - 1 - 1 - + + + 2 + + + + + + Member Price - - True - False - Member Price - - - 3 - 0 - 1 - 1 - + + + 3 + + + + + + Guest Price - - True - False - Guest Price - - - 4 - 0 - 1 - 1 - + + + 4 + @@ -721,7 +730,7 @@ Lennart Weller <lhw@ring0.de> - False + True True 1 -- cgit v1.2.3