diff --git a/script.js b/script.js new file mode 100644 index 0000000..78ea506 --- /dev/null +++ b/script.js @@ -0,0 +1,22 @@ +function setData(selectedObject) { + var optionData = selectedObject.options[selectedObject.selectedIndex].dataset + if (selectedObject.value == 0) { + var balance = "" + var href = "" + var proedreio = (optionData.proedreio == 'false'); + var asylia = (optionData.asylia == 'false'); + var banned = (optionData.banned == 'false'); + } else { + var balance = "€" + optionData.balance; + var href = "/user?uid=" + selectedObject.value; + var proedreio = (optionData.proedreio == 'true'); + var asylia = (optionData.asylia == 'true'); + var banned = (optionData.banned == 'true'); + } + + document.getElementById('balance').innerHTML = balance; + document.getElementById('user-link').href = href; + document.getElementById('proedreio').checked = proedreio; + document.getElementById('asylia').checked = asylia; + document.getElementById('ban').checked = banned; +} diff --git a/server.rb b/server.rb index 9b14620..3f0746a 100755 --- a/server.rb +++ b/server.rb @@ -10,7 +10,8 @@ DB = Sequel.connect('sqlite://database.db') set :port, 8091 set :nav, [ - { title: 'Χρήστες', href: '/users' } + { title: 'Χρήστες', href: '/users' }, + { title: 'Συνέλευση', href: '/input' } ] get '/users' do @@ -38,3 +39,36 @@ post '/user' do ) redirect '/user?uid=' + params['uid'] end + +get '/' do + redirect '/input' +end + +get '/input' do + l = {} + l[:users] = DB[:user].all + slim :input, locals: l +end + +post '/save' do + DB[:log_entry].insert( + timestamp: DateTime.now, + id: params['user'].to_i, + amount_paid: params['amount_paid'].to_f, + amount_donated: params['amount_donated'].to_f, + comments: params['comments'].to_s, + ban: params['ban'] == 'on', + apousia: params['apousia'] == 'on', + asylia: params['asylia'] == 'on', + proedreio: params['proedreio'] == 'on' + ) + DB[:user].where(id: params['user']).update( + # TODO: wtf why integer + balance: Sequel[:balance] - params[:amount_paid].to_i, + asylia: params['asylia'] == 'on', + proedreio: params['proedreio'] == 'on', + banned: params['ban'] == 'on', + active: params['ban'] != 'on' + ) + redirect '/input' +end diff --git a/views/input.slim b/views/input.slim new file mode 100644 index 0000000..7ebb6fa --- /dev/null +++ b/views/input.slim @@ -0,0 +1,46 @@ +doctype html +html + head + include head + body + include nav + .container role="main" + form method="post" action="/save" + div.form-group.row + label.col-form-label.col-sm-2 for="sel" Όνομα + div#sel.dropdown.bootstrap-select.col-sm-4 + select.selectpicker data-live-search="true" name="user" onchange="setData(this)" + option value="0" Επιλέξτε Χρήστη + - users.each do |u| + option value="#{u[:id]}" data-balance="#{u[:balance]}" data-proedreio="#{u[:proedreio]}" data-banned="#{u[:banned]}" data-asylia="#{u[:asylia]}"=u[:name] + a#user-link Ρυθμίσεις Χρήστη + div.row style="padding-bottom:1em" + span.col-sm-2 Ποσό οφειλής + span#balance.col-sm-2 + div.form-group.row + label.col-form-label.col-sm-2 for="amount_paid" Ποσό πληρωμής + .input-group.col-sm-2 + .input-group-prepend + span.input-group-text € + input#amount_paid.form-control.col-sm-4 type="number" name="amount_paid" + div.form-group.row + label.col-form-label.col-sm-2 for="amount_donated" Ποσό δωρεάς + .input-group.col-sm-2 + .input-group-prepend + span.input-group-text € + input#amount_donated.form-control.col-sm-4 type="number" name="amount_donated" + div.input-group.form-group.row + label.col-form-label.col-sm-2 for="comments" Σχόλια + input#comments.form-control.col-sm-6 type="textarea" name="comments" + // + div.form-group + div.input-group.custom-control.custom-switch.custom-control-inline + input#proedreio.custom-control-input.pull-right type="checkbox" name="proedreio" + label.custom-control-label.col-form-label for="proedreio" Proedreio + div.input-group.custom-control.custom-switch.custom-control-inline + input#asylia.custom-control-input type="checkbox" name="asylia" + label.col-form-label.custom-control-label.col-form-label for="asylia" Ασυλία + div.input-group.custom-control.custom-switch.custom-control-inline + input#ban.custom-control-input type="checkbox" name="ban" + label.col-form-label.custom-control-label.col-form-label for="ban" Ban + button.btn.btn-primary name="submit" type="submit" Υποβολή