From e11d76395ce0ba821f58bfb1956a56f6ffc8494b Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Sat, 15 Jun 2013 23:12:26 +0200 Subject: web: add cashbox tracking --- src/web/web.vala | 78 ++++++++++++++++++++++++++++++++++++++++++++ templates/cashbox/add.html | 17 ++++++++++ templates/cashbox/index.html | 11 +++++++ templates/menu.html | 3 ++ 4 files changed, 109 insertions(+) create mode 100644 templates/cashbox/add.html create mode 100644 templates/cashbox/index.html diff --git a/src/web/web.vala b/src/web/web.vala index 0bfa08d..28c5d87 100644 --- a/src/web/web.vala +++ b/src/web/web.vala @@ -909,6 +909,80 @@ public class WebServer { } } + void handler_cashbox(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { + try { + var session = new WebSession(server, msg, path, query, client); + + if(!session.superuser) { + handler_403(server, msg, path, query, client); + return; + } + + var template = new WebTemplate("cashbox/index.html", session); + template.replace("TITLE", "KtT Shop System: Cashbox"); + template.replace("CASHBOX_STATUS", db.cashbox_status().to_string()); + template.menu_set_active("cashbox"); + msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); + } catch(TemplateError e) { + stderr.printf(e.message+"\n"); + handler_404(server, msg, path, query, client); + } catch(DatabaseError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } catch(IOError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } + } + + void handler_cashbox_add(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { + try { + var session = new WebSession(server, msg, path, query, client); + + if(!session.superuser) { + handler_403(server, msg, path, query, client); + return; + } + + var template = new WebTemplate("cashbox/add.html", session); + template.replace("TITLE", "KtT Shop System: Cashbox Balance"); + template.menu_set_active("cashbox"); + + bool error = false; + if(query == null || !query.contains("type") || !query.contains("amount")) + error = true; + + int64 timestamp = (new DateTime.now_utc()).to_unix(); + Price amount = Price.parse(query["amount"]); + string type = query["type"]; + + if(type != "user" && type != "loss") + error = true; + + if(!error) + db.cashbox_add(type == "user" ? session.user : -3, amount, timestamp); + + if(error) { + template.replace("NEW.OK", "none"); + template.replace("NEW.FAIL", "block"); + } else { + template.replace("NEW.OK", "block"); + template.replace("NEW.FAIL", "none"); + } + + msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); + } catch(TemplateError e) { + stderr.printf(e.message+"\n"); + handler_404(server, msg, path, query, client); + } catch(DatabaseError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } catch(IOError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } + } + public WebServer(int port = 8080) { srv = new Soup.Server(Soup.SERVER_PORT, port); @@ -923,6 +997,10 @@ public class WebServer { srv.add_handler("/css", handler_css); srv.add_handler("/img", handler_img); + /* cashbox */ + srv.add_handler("/cashbox", handler_cashbox); + srv.add_handler("/cashbox/add", handler_cashbox_add); + /* products */ srv.add_handler("/products", handler_products); srv.add_handler("/products/new", handler_products_new); diff --git a/templates/cashbox/add.html b/templates/cashbox/add.html new file mode 100644 index 0000000..6e26f00 --- /dev/null +++ b/templates/cashbox/add.html @@ -0,0 +1,17 @@ +
+

Successfully balanced cashbox:

+ + + + +
Type{{{TYPE}}}
Amount{{{AMOUNT}}}
+
+ +
+

Error

+ Creating new cashbox balance entry failed. Please make + sure you have sufficient permissions and gave valid + values for type and amount. +
+ +Back to cashbox overview diff --git a/templates/cashbox/index.html b/templates/cashbox/index.html new file mode 100644 index 0000000..1466272 --- /dev/null +++ b/templates/cashbox/index.html @@ -0,0 +1,11 @@ +Current Cashbox Status: + +
+ Cashbox Balance/Withdrawal/Deposit + + + +
diff --git a/templates/menu.html b/templates/menu.html index 747853d..138cc23 100644 --- a/templates/menu.html +++ b/templates/menu.html @@ -4,6 +4,8 @@