summaryrefslogtreecommitdiffstats
path: root/src/web/web.vala
diff options
context:
space:
mode:
authorSebastian Reichel <sre@ring0.de>2015-09-13 23:05:18 +0200
committerSebastian Reichel <sre@ring0.de>2015-09-13 23:05:18 +0200
commit1ea4fdf8072d6be99a13cc796c9775c05f8c9498 (patch)
treeb743630f1813670d6034717da829b17bc33e906b /src/web/web.vala
parent9dce0dfa4cd90e7ce2131e1e5821f54eb3754b26 (diff)
downloadserial-barcode-scanner-1ea4fdf8072d6be99a13cc796c9775c05f8c9498.tar.bz2
Add support for aliased EANs
Some products are sold under different EANs (e.g. per-country EANs). The alias table can be used to map multiple EANs to a single product.
Diffstat (limited to 'src/web/web.vala')
-rw-r--r--src/web/web.vala84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/web/web.vala b/src/web/web.vala
index a8ab59f..698e2c3 100644
--- a/src/web/web.vala
+++ b/src/web/web.vala
@@ -767,6 +767,87 @@ public class WebServer {
}
}
+ void handler_alias_list(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
+ try {
+ var l = new WebSession(server, msg, path, query, client);
+ var t = new WebTemplate("aliases/index.html", l);
+ t.replace("TITLE", "KtT Shop System: Alias List");
+ t.menu_set_active("aliases");
+
+ string table = "";
+ foreach(var e in db.ean_alias_list()) {
+ var productname = db.get_product_name(e.real_ean);
+ table += @"<tr><td>$(e.ean)</td><td><a href=\"/products/$(e.real_ean)\">$(e.real_ean)</a></td><td><a href=\"/products/$(e.real_ean)\">$(productname)</a></td></tr>";
+ }
+
+ t.replace("DATA", table);
+
+ if(l.superuser || l.auth_products)
+ t.replace("NEWALIAS", "block");
+ else
+ t.replace("NEWALIAS", "none");
+
+ msg.set_response("text/html", Soup.MemoryUse.COPY, t.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_alias_new(Soup.Server server, Soup.Message msg, string path, GLib.HashTable<string,string>? query, Soup.ClientContext client) {
+ try {
+ var session = new WebSession(server, msg, path, query, client);
+ var template = new WebTemplate("aliases/new.html", session);
+ template.replace("TITLE", "KtT Shop System: New Alias");
+ template.menu_set_active("aliases");
+
+ if(!session.superuser && !session.auth_products) {
+ handler_403(server, msg, path, query, client);
+ return;
+ }
+
+ if(query != null && query.contains("ean") && query.contains("real_ean")) {
+ var ean = uint64.parse(query["ean"]);
+ var real_ean = uint64.parse(query["real_ean"]);
+
+ if(ean > 0 && real_ean > 0) {
+ db.ean_alias_add(ean, real_ean);
+ template.replace("EAN", @"$ean");
+ template.replace("REAL_EAN", @"$real_ean");
+ template.replace("NEW.OK", "block");
+ template.replace("NEW.FAIL", "none");
+ } else {
+ template.replace("EAN", "virtual ean");
+ template.replace("REAL_EAN", "real ean");
+ template.replace("NEW.OK", "none");
+ template.replace("NEW.FAIL", "block");
+ }
+ } else {
+ template.replace("EAN", "virtual ean");
+ template.replace("REAL_EAN", "real ean");
+ template.replace("NEW.OK", "none");
+ template.replace("NEW.FAIL", "block");
+ }
+
+ 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);
+ }
+ }
+
#if 0
void handler_stats(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
try {
@@ -1206,6 +1287,9 @@ public class WebServer {
srv.add_handler("/products", handler_products);
srv.add_handler("/products/new", handler_products_new);
+ srv.add_handler("/aliases", handler_alias_list);
+ srv.add_handler("/aliases/new", handler_alias_new);
+
#if 0
/* stats */
srv.add_handler("/stats", handler_stats);