mirror of
https://codeberg.org/metamuffin/abrechenbarkeit.git
synced 2024-12-28 07:54:35 +00:00
product list
This commit is contained in:
parent
a98f08d6c2
commit
bccab824ba
2 changed files with 28 additions and 2 deletions
|
@ -14,3 +14,5 @@ useful for development or proxyless deployments.
|
|||
|
||||
- `log` stores the transaction log as CSV (`time,user,amount,comment`)
|
||||
- `products` stores the product list as CSV (`barcode,price,name`)
|
||||
- `config` stores configuration parameters as ESV (`key=value`)
|
||||
- `transaction_sound`: URL to sound played when creating a transaction
|
||||
|
|
|
@ -3,10 +3,12 @@
|
|||
local function escape(s)
|
||||
return s:gsub("<", "<"):gsub("<", "<")
|
||||
end
|
||||
|
||||
local function urldecode(s)
|
||||
if s == nil then return nil end
|
||||
return s:gsub("+", " "):gsub("%%20", " ")
|
||||
end
|
||||
|
||||
local function urlencode(s)
|
||||
if s == nil then return nil end
|
||||
return s:gsub(" ", "%%20")
|
||||
|
@ -90,7 +92,8 @@ local function respond(status, title, body)
|
|||
<body>
|
||||
<nav>
|
||||
<h2><a href="/">Strichliste v2</a></h2>
|
||||
<span><a href="/?log">View Log</a></span>
|
||||
<span><a href="/?log">Log</a></span>
|
||||
<span><a href="/?products">Products</a></span>
|
||||
<span><a href="https://codeberg.org/metamuffin/strichliste">Source</a></span>
|
||||
</nav>
|
||||
]], escape(title), stylesheet, script, config.head_extra or ""))
|
||||
|
@ -136,6 +139,7 @@ local function read_log()
|
|||
return tonumber(time), username, tonumber(amount), comment
|
||||
end
|
||||
end
|
||||
|
||||
local function read_products()
|
||||
local log = io.open("products", "r")
|
||||
if log == nil then
|
||||
|
@ -159,6 +163,7 @@ local function balances()
|
|||
end
|
||||
return users
|
||||
end
|
||||
|
||||
local function last_txns()
|
||||
local users = {}
|
||||
for time, username, _, _ in read_log() do
|
||||
|
@ -338,6 +343,23 @@ local function r_create_user()
|
|||
return redirect(string.format("/%s", urlencode(username)))
|
||||
end
|
||||
|
||||
local function r_products()
|
||||
respond(200, "Product List", function()
|
||||
print("<h1>Product List</h1>")
|
||||
print("<table><tr><th>Name</th><th>Price</th><th>Amount</th></tr>")
|
||||
for barcode, price, name in read_products() do
|
||||
print(string.format([[
|
||||
<tr><td>%s</td><td class="amount-%s">%.02f€</td><td>%s</td></tr>
|
||||
]],
|
||||
name,
|
||||
price >= 0 and "pos" or "neg", price / 100,
|
||||
barcode
|
||||
))
|
||||
end
|
||||
print("</table>")
|
||||
end)
|
||||
end
|
||||
|
||||
local function extract_username()
|
||||
if path == nil then
|
||||
return respond_error("no path")
|
||||
|
@ -350,7 +372,9 @@ local function extract_username()
|
|||
end
|
||||
|
||||
if path == "/" then
|
||||
if query.log then
|
||||
if query.products then
|
||||
return r_products()
|
||||
elseif query.log then
|
||||
return r_log()
|
||||
elseif query.create_user then
|
||||
return r_create_user()
|
||||
|
|
Loading…
Reference in a new issue