summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sre@ring0.de>2012-11-04 09:39:08 +0100
committerSebastian Reichel <sre@ring0.de>2012-11-04 09:39:08 +0100
commit25f1132d4f004211adf39e3f373ec0498c0d0fc7 (patch)
treead1b4e1c34abb59393325aed4ec952aabf26f16f
parent5be3749d4690220b7b12acde68e4de984dd8ebdf (diff)
downloadserial-barcode-scanner-25f1132d4f004211adf39e3f373ec0498c0d0fc7.tar.bz2
Web: add option for adding new selling price info
-rw-r--r--src/web.vala49
-rw-r--r--templates/products/entry.html10
-rw-r--r--templates/products/newprice.html18
3 files changed, 74 insertions, 3 deletions
diff --git a/src/web.vala b/src/web.vala
index 6722f17..2bb59f8 100644
--- a/src/web.vala
+++ b/src/web.vala
@@ -372,6 +372,9 @@ public class WebServer {
case "restock":
handler_product_restock(server, msg, path, query, client, id);
break;
+ case "newprice":
+ handler_product_newprice(server, msg, path, query, client, id);
+ break;
default:
handler_product_entry(server, msg, path, query, client, id);
break;
@@ -426,9 +429,9 @@ public class WebServer {
t.replace("AMOUNT", "%d".printf(db.get_product_amount(id)));
if(l.superuser)
- t.replace("RESTOCK", "block");
+ t.replace("ISADMIN", "block");
else
- t.replace("RESTOCK", "none");
+ t.replace("ISADMIN", "none");
/* prices */
string prices = "";
@@ -540,6 +543,48 @@ public class WebServer {
}
}
+ void handler_product_newprice(Soup.Server server, Soup.Message msg, string path, GLib.HashTable<string,string>? query, Soup.ClientContext client, uint64 id) {
+ try {
+ var session = new WebSession(server, msg, path, query, client);
+ int64 timestamp = (new DateTime.now_utc()).to_unix();
+
+ if(!session.superuser) {
+ handler_403(server, msg, path, query, client);
+ return;
+ }
+
+ var template = new WebTemplate("products/newprice.html", session);
+ template.replace("TITLE", "KtT Shop System: New Price for Product %llu".printf(id));
+ template.replace("NAME", db.get_product_name(id));
+ template.menu_set_active("products");
+
+ if(query != null && query.contains("guest") && query.contains("member")) {
+ Price member = Price.parse(query["member"]);
+ Price guest = Price.parse(query["guest"]);
+
+ if(guest >= 1 && member >= 1) {
+ if(db.new_price(id, timestamp, member, guest)) {
+ template.replace("GUEST", @"$guest");
+ template.replace("MEMBER", @"$guest");
+ template.replace("NEWPRICE.OK", "block");
+ template.replace("NEWPRICE.FAIL", "none");
+ msg.set_response("text/html", Soup.MemoryUse.COPY, template.data);
+ return;
+ }
+ }
+ }
+
+ template.replace("NEWPRICE.OK", "none");
+ template.replace("NEWPRICE.FAIL", "block");
+ msg.set_response("text/html", Soup.MemoryUse.COPY, template.data);
+ return;
+ } catch(TemplateError e) {
+ stderr.printf(e.message+"\n");
+ handler_404(server, msg, path, query, client);
+ }
+ }
+
+
void handler_stats(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
try {
var l = new WebSession(server, msg, path, query, client);
diff --git a/templates/products/entry.html b/templates/products/entry.html
index e6f4f38..2b3969a 100644
--- a/templates/products/entry.html
+++ b/templates/products/entry.html
@@ -13,13 +13,21 @@
{{{PRICES}}}
</table>
+<div id="new_price" style="display: {{{ISADMIN}}};">
+ <form action="/products/{{{EAN}}}/newprice" class="form-horizontal">
+ <input class="input-small" name="member" type="number" min="1" placeholder="Member" />
+ <input class="input-small" name="guest" type="number" min="1" placeholder="Guest" />
+ <button type="submit" class="btn btn-primary">Add new Prices</button>
+ </form>
+</div>
+
<h2>Restock</h2>
<table class="table table-bordered table-nonfluid">
<tr><th>Date</th><th>Amount</th><th>Unit Price</th></tr>
{{{RESTOCKS}}}
</table>
-<div id="restock" style="display: {{{RESTOCK}}};">
+<div id="restock" style="display: {{{ISADMIN}}};">
<form action="/products/{{{EAN}}}/restock" class="form-horizontal">
<input class="input-small" name="amount" type="number" min="1" placeholder="Amount" />
<input class="input-small" name="price" type="number" min="1" placeholder="Price" />
diff --git a/templates/products/newprice.html b/templates/products/newprice.html
new file mode 100644
index 0000000..c46d439
--- /dev/null
+++ b/templates/products/newprice.html
@@ -0,0 +1,18 @@
+<h2>Restock: {{{NAME}}}</h2>
+
+<div id="newprice-successful" class="alert alert-success" style="display: {{{NEWPRICE.OK}}};">
+ Successfully added new prices to <b>{{{NAME}}}</b>. New prices valid from now on:
+ <ul>
+ <li>Member: {{{MEMBER}}}€</li>
+ <li>Guest: {{{GUEST}}}€</li>
+ </ul>
+</div>
+
+<div id="newprice-failed" class="alert alert-error" style="display: {{{NEWPRICE.FAIL}}};">
+ <h4>Error</h4>
+ Adding new price for <b>{{{NAME}}}</b> failed. Please make sure you
+ have sufficient permissions and gave valid prices for members and
+ guests.
+</div>
+
+<a href=".">Back to {{{NAME}}}</a>