From aaadb000fd4dc2fb9758ba92d1ea3d15871c096f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 24 Aug 2014 21:46:41 -0700 Subject: Transaction notes and delete function --- app.js | 4 ++ public/assets/css/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../css/images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../css/images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../css/images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../css/images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../css/images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../css/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../assets/css/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../assets/css/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../assets/css/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../assets/css/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../assets/css/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes public/css/calculator.less | 6 +++ public/css/images/animated-overlay.gif | Bin 1738 -> 0 bytes public/css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 212 -> 0 bytes public/css/images/ui-bg_flat_75_ffffff_40x100.png | Bin 208 -> 0 bytes public/css/images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 335 -> 0 bytes public/css/images/ui-bg_glass_65_ffffff_1x400.png | Bin 207 -> 0 bytes public/css/images/ui-bg_glass_75_dadada_1x400.png | Bin 262 -> 0 bytes public/css/images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 262 -> 0 bytes public/css/images/ui-bg_glass_95_fef1ec_1x400.png | Bin 332 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 280 -> 0 bytes public/css/images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes public/css/images/ui-icons_2e83ff_256x240.png | Bin 4549 -> 0 bytes public/css/images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes public/css/images/ui-icons_888888_256x240.png | Bin 6999 -> 0 bytes public/css/images/ui-icons_cd0a0a_256x240.png | Bin 4549 -> 0 bytes public/js/report.coffee | 47 ++++++++++++++++-- routes/transactions.js | 55 ++++++++++++--------- routes/users.js | 3 -- src/app.coffee | 2 + src/routes/transactions.coffee | 43 +++++++++------- src/routes/users.coffee | 2 - views/transactions/index.html | 21 +++++++- 37 files changed, 132 insertions(+), 51 deletions(-) create mode 100644 public/assets/css/images/animated-overlay.gif create mode 100644 public/assets/css/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 public/assets/css/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 public/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 public/assets/css/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 public/assets/css/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 public/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 public/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 public/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 public/assets/css/images/ui-icons_222222_256x240.png create mode 100644 public/assets/css/images/ui-icons_2e83ff_256x240.png create mode 100644 public/assets/css/images/ui-icons_454545_256x240.png create mode 100644 public/assets/css/images/ui-icons_888888_256x240.png create mode 100644 public/assets/css/images/ui-icons_cd0a0a_256x240.png delete mode 100644 public/css/images/animated-overlay.gif delete mode 100644 public/css/images/ui-bg_flat_0_aaaaaa_40x100.png delete mode 100644 public/css/images/ui-bg_flat_75_ffffff_40x100.png delete mode 100644 public/css/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100644 public/css/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 public/css/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 public/css/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 public/css/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 public/css/images/ui-icons_222222_256x240.png delete mode 100644 public/css/images/ui-icons_2e83ff_256x240.png delete mode 100644 public/css/images/ui-icons_454545_256x240.png delete mode 100644 public/css/images/ui-icons_888888_256x240.png delete mode 100644 public/css/images/ui-icons_cd0a0a_256x240.png diff --git a/app.js b/app.js index e5fa6f70..b568e65a 100644 --- a/app.js +++ b/app.js @@ -133,6 +133,10 @@ app.post('/:user/transactions', transactions.create); + app.post('/transactions/:txid', transactions.update); + + app["delete"]('/:user/transactions/:txid', transactions["delete"]); + app.get('/:user/report', authorize, transactions.index); app.get('/:user.json', users.json); diff --git a/public/assets/css/images/animated-overlay.gif b/public/assets/css/images/animated-overlay.gif new file mode 100644 index 00000000..d441f75e Binary files /dev/null and b/public/assets/css/images/animated-overlay.gif differ diff --git a/public/assets/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/assets/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 00000000..9aab30b1 Binary files /dev/null and b/public/assets/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/public/assets/css/images/ui-bg_flat_75_ffffff_40x100.png b/public/assets/css/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 00000000..0b2088de Binary files /dev/null and b/public/assets/css/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/public/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/public/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 00000000..b1e1380b Binary files /dev/null and b/public/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/public/assets/css/images/ui-bg_glass_65_ffffff_1x400.png b/public/assets/css/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 00000000..0850cce5 Binary files /dev/null and b/public/assets/css/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/public/assets/css/images/ui-bg_glass_75_dadada_1x400.png b/public/assets/css/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 00000000..7d57debb Binary files /dev/null and b/public/assets/css/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/public/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/public/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 00000000..4061d4a2 Binary files /dev/null and b/public/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/public/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png b/public/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 00000000..83e61bc8 Binary files /dev/null and b/public/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/public/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 00000000..7d58f386 Binary files /dev/null and b/public/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/public/assets/css/images/ui-icons_222222_256x240.png b/public/assets/css/images/ui-icons_222222_256x240.png new file mode 100644 index 00000000..c1cb1170 Binary files /dev/null and b/public/assets/css/images/ui-icons_222222_256x240.png differ diff --git a/public/assets/css/images/ui-icons_2e83ff_256x240.png b/public/assets/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 00000000..84b601bf Binary files /dev/null and b/public/assets/css/images/ui-icons_2e83ff_256x240.png differ diff --git a/public/assets/css/images/ui-icons_454545_256x240.png b/public/assets/css/images/ui-icons_454545_256x240.png new file mode 100644 index 00000000..b6db1acd Binary files /dev/null and b/public/assets/css/images/ui-icons_454545_256x240.png differ diff --git a/public/assets/css/images/ui-icons_888888_256x240.png b/public/assets/css/images/ui-icons_888888_256x240.png new file mode 100644 index 00000000..feea0e20 Binary files /dev/null and b/public/assets/css/images/ui-icons_888888_256x240.png differ diff --git a/public/assets/css/images/ui-icons_cd0a0a_256x240.png b/public/assets/css/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 00000000..ed5b6b09 Binary files /dev/null and b/public/assets/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/public/css/calculator.less b/public/css/calculator.less index 4ba5058a..316fd9cd 100644 --- a/public/css/calculator.less +++ b/public/css/calculator.less @@ -53,3 +53,9 @@ td#total { font-weight: bold; text-align: right; } background-image: url('../img/coinos_logo.svg') !important; background-size: 300px 80px; } + +@media screen and (min-width: 768px) { + .modal-dialog { + width: 400px; /* either % (e.g. 60%) or px (400px) */ + } +} diff --git a/public/css/images/animated-overlay.gif b/public/css/images/animated-overlay.gif deleted file mode 100644 index d441f75e..00000000 Binary files a/public/css/images/animated-overlay.gif and /dev/null differ diff --git a/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png deleted file mode 100644 index 9aab30b1..00000000 Binary files a/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ diff --git a/public/css/images/ui-bg_flat_75_ffffff_40x100.png b/public/css/images/ui-bg_flat_75_ffffff_40x100.png deleted file mode 100644 index 0b2088de..00000000 Binary files a/public/css/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ diff --git a/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100644 index b1e1380b..00000000 Binary files a/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png and /dev/null differ diff --git a/public/css/images/ui-bg_glass_65_ffffff_1x400.png b/public/css/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 0850cce5..00000000 Binary files a/public/css/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ diff --git a/public/css/images/ui-bg_glass_75_dadada_1x400.png b/public/css/images/ui-bg_glass_75_dadada_1x400.png deleted file mode 100644 index 7d57debb..00000000 Binary files a/public/css/images/ui-bg_glass_75_dadada_1x400.png and /dev/null differ diff --git a/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index 4061d4a2..00000000 Binary files a/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png and /dev/null differ diff --git a/public/css/images/ui-bg_glass_95_fef1ec_1x400.png b/public/css/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index 83e61bc8..00000000 Binary files a/public/css/images/ui-bg_glass_95_fef1ec_1x400.png and /dev/null differ diff --git a/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100644 index 7d58f386..00000000 Binary files a/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ diff --git a/public/css/images/ui-icons_222222_256x240.png b/public/css/images/ui-icons_222222_256x240.png deleted file mode 100644 index c1cb1170..00000000 Binary files a/public/css/images/ui-icons_222222_256x240.png and /dev/null differ diff --git a/public/css/images/ui-icons_2e83ff_256x240.png b/public/css/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index 84b601bf..00000000 Binary files a/public/css/images/ui-icons_2e83ff_256x240.png and /dev/null differ diff --git a/public/css/images/ui-icons_454545_256x240.png b/public/css/images/ui-icons_454545_256x240.png deleted file mode 100644 index b6db1acd..00000000 Binary files a/public/css/images/ui-icons_454545_256x240.png and /dev/null differ diff --git a/public/css/images/ui-icons_888888_256x240.png b/public/css/images/ui-icons_888888_256x240.png deleted file mode 100644 index feea0e20..00000000 Binary files a/public/css/images/ui-icons_888888_256x240.png and /dev/null differ diff --git a/public/css/images/ui-icons_cd0a0a_256x240.png b/public/css/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index ed5b6b09..00000000 Binary files a/public/css/images/ui-icons_cd0a0a_256x240.png and /dev/null differ diff --git a/public/js/report.coffee b/public/js/report.coffee index 99a0df25..72000fc8 100644 --- a/public/js/report.coffee +++ b/public/js/report.coffee @@ -56,20 +56,57 @@ display = (transactions) -> else $('.alert').hide() $.each(transactions, -> - exchange = parseFloat(this.exchange) - received = parseFloat(this.received) + exchange = parseFloat(@exchange) + received = parseFloat(@received) amount = received * exchange + notes = @notes + txid = @txid + date = moment(@date, 'YYYY-MM-DD h:mm:ss').format('MMM D h:mma') - $('.report tbody').append(""" - - #{moment(this.date, 'YYYY-MM-DD h:mm:ss').format('MMM D h:mma')} + row = $(""" + + #{date}   #{exchange.toFixed(2)} #{received.toFixed(8)} #{amount.toFixed(2)} """) + + if notes + row.attr('data-notes', notes) + row.find('span').removeClass('hidden') + + $('.report tbody').append(row) + + row.click(-> + notes = $(this).attr('data-notes') + + $('#modal').modal() + $('#modal textarea').val('') + + $('#modal .btn-danger').off().click(-> + $.ajax(type: 'delete', url: "/#{$('#user').val()}/transactions/#{txid}") + $('#modal').modal('hide') + row.remove() + ) + + $('#modal textarea').off().change(-> + notes = $(this).val() + $.post("/transactions/#{txid}", notes: $(this).val()) if txid + + row.find('span').addClass('hidden') + if notes + row.find('span').removeClass('hidden') + + row.attr('data-notes', $(this).val()) + ) + + if notes + $('#modal textarea').val(notes) + ) ) + btc = 0 $('table.report tbody td:nth-child(3)').each(-> btc += parseFloat($(this).html()) diff --git a/routes/transactions.js b/routes/transactions.js index 83ec441f..171163bc 100644 --- a/routes/transactions.js +++ b/routes/transactions.js @@ -4,6 +4,19 @@ db = require('../redis'); module.exports = { + index: function(req, res) { + return res.render('transactions/index', { + user: req.params.user, + layout: 'layout', + navigation: true, + js: (function() { + return global.js; + }), + css: (function() { + return global.css; + }) + }); + }, json: function(req, res) { var r, user; user = req.params.user; @@ -12,26 +25,25 @@ }; return db.lrange("" + user + ":transactions", 0, -1, function(err, transactions) { var cb, i, txid; + txid = function() { + var x; + x = transactions[i++]; + if (typeof x !== "number") { + return x; + } + return user + ":transactions:" + x; + }; cb = function(err, t) { - var txid; r.transactions.push(t); if (i >= transactions.length) { res.write(JSON.stringify(r)); return res.end(); } else { - txid = transactions[i++]; - if (parseInt(txid)) { - txid = user + ":transactions:" + txid; - } - return db.hgetall(txid, cb); + return db.hgetall(txid(), cb); } }; i = 0; - txid = transactions[i++]; - if (parseInt(txid)) { - txid = user + ":transactions:" + txid; - } - return db.hgetall(txid, cb); + return db.hgetall(txid(), cb); }); }, create: function(req, res) { @@ -56,17 +68,16 @@ }); }); }, - index: function(req, res) { - return res.render('transactions/index', { - user: req.params.user, - layout: 'layout', - navigation: true, - js: (function() { - return global.js; - }), - css: (function() { - return global.css; - }) + update: function(req, res) { + return db.hset(req.params.txid, 'notes', req.body.notes, function() { + return res.end(); + }); + }, + "delete": function(req, res) { + return db.del(req.params.txid, function() { + return db.lrem(req.params.user + ":transactions", 0, req.params.txid, function() { + return res.end(); + }); }); } }; diff --git a/routes/users.js b/routes/users.js index 8065e4f1..2b4a31ef 100644 --- a/routes/users.js +++ b/routes/users.js @@ -115,9 +115,6 @@ }); }, update: function(req, res) { - if (!(req.params.user === req.user.username || req.user.username === 'admin')) { - return; - } if (req.body.password === '') { delete req.body.password; } diff --git a/src/app.coffee b/src/app.coffee index 4198754c..01e6fb15 100644 --- a/src/app.coffee +++ b/src/app.coffee @@ -77,6 +77,8 @@ app.post('/:user', authorize, users.update) app.get('/:user/transactions.json', authorize, transactions.json) app.post('/:user/transactions', transactions.create) +app.post('/transactions/:txid', transactions.update) +app.delete('/:user/transactions/:txid', transactions.delete) app.get('/:user/report', authorize, transactions.index) app.get('/:user.json', users.json) diff --git a/src/routes/transactions.coffee b/src/routes/transactions.coffee index 06636a15..8163748a 100644 --- a/src/routes/transactions.coffee +++ b/src/routes/transactions.coffee @@ -1,11 +1,25 @@ db = require('../redis') module.exports = + index: (req, res) -> + res.render('transactions/index', + user: req.params.user, + layout: 'layout', + navigation: true, + js: (-> global.js), + css: (-> global.css) + ) + json: (req, res) -> user = req.params.user r = 'transactions': [] db.lrange("#{user}:transactions", 0, -1, (err, transactions) -> + txid = -> + x = transactions[i++] + return x if typeof x != "number" + return user + ":transactions:" + x + cb = (err, t) -> r.transactions.push t @@ -13,19 +27,10 @@ module.exports = res.write(JSON.stringify(r)) res.end() else - txid = transactions[i++] - if parseInt(txid) - txid = user + ":transactions:" + txid - - db.hgetall(txid, cb) + db.hgetall(txid(), cb) i = 0 - - txid = transactions[i++] - if parseInt(txid) - txid = user + ":transactions:" + txid - - db.hgetall(txid, cb) + db.hgetall(txid(), cb) ) create: (req, res) -> @@ -48,12 +53,14 @@ module.exports = ) ) - index: (req, res) -> - res.render('transactions/index', - user: req.params.user, - layout: 'layout', - navigation: true, - js: (-> global.js), - css: (-> global.css) + update: (req, res) -> + db.hset(req.params.txid, 'notes', req.body.notes, -> + res.end() ) + delete: (req, res) -> + db.del(req.params.txid, -> + db.lrem(req.params.user + ":transactions", 0, req.params.txid, -> + res.end() + ) + ) diff --git a/src/routes/users.coffee b/src/routes/users.coffee index a213f678..0af8a097 100644 --- a/src/routes/users.coffee +++ b/src/routes/users.coffee @@ -81,8 +81,6 @@ module.exports = (sessions) -> ) update: (req, res) -> - return unless req.params.user is req.user.username or - req.user.username is 'admin' if req.body.password is '' delete req.body.password db.hmset("user:"+req.params.user, req.body, -> diff --git a/views/transactions/index.html b/views/transactions/index.html index 633fa212..3584e832 100644 --- a/views/transactions/index.html +++ b/views/transactions/index.html @@ -15,7 +15,7 @@ - + @@ -34,3 +34,22 @@ + + + -- cgit v1.2.3