diff --git a/lib/plugins.js b/lib/plugins.js index 9dbedfe6..f0b1870a 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -336,8 +336,8 @@ exports.cashOut = function cashOut(session, tx, cb) { }); }; -exports.dispenseAck = function dispenseAck(session, tx) { - db.addDispense(session, tx); +exports.dispenseAck = function dispenseAck(session, rec) { + db.addDispense(session, rec.tx, rec.cartridges); }; exports.fiatBalance = function fiatBalance() { diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index a8cebd58..c54887da 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -480,11 +480,39 @@ exports.addInitialIncoming = function addInitialIncoming(session, tx, cb) { }); }; -exports.addDispense = function addDispense(session, tx) { +function insertDispense(client, session, tx, cartridges, transactionId, cb) { + var fields = [ + 'device_fingerprint', 'transaction_id', + 'dispense1', 'reject1', 'count1', + 'dispense2', 'reject2', 'count2', + 'refill', 'error' + ]; + + var sql = getInsertQuery('dispenses', fields, true); + + var dispense1 = tx.bills[0].actualDispense; + var dispense2 = tx.bills[1].actualDispense; + var reject1 = tx.bills[0].rejected; + var reject2 = tx.bills[1].rejected; + var count1 = cartridges[0].count; + var count2 = cartridges[1].count; + var values = [ + session.fingerprint, transactionId, + dispense1, reject1, count1, dispense2, reject2, count2, + false, tx.error + ]; + client.query(sql, values, cb); +} + +exports.addDispense = function addDispense(session, tx, cartridges) { connect(function(cerr, client, done) { if (cerr) return; - insertIncoming(client, session, tx, 0, tx.fiat, 'dispense', 'authorized', function (err) { + async.waterfall([ + async.apply(insertIncoming, client, session, tx, 0, tx.fiat, + 'dispense', 'authorized'), + async.apply(insertDispense, client, session, tx, cartridges) + ], function(err) { done(); if (err) logger.error(err); }); @@ -495,9 +523,9 @@ exports.cartridgeCounts = function cartridgeCounts(session, cb) { connect(function(cerr, client, done) { if (cerr) return cb(cerr); var sql = 'SELECT id, count1, count2 FROM dispenses ' + - 'WHERE device_fingerprint=$1 ' + + 'WHERE device_fingerprint=$1 AND refill=$2 ' + 'ORDER BY id DESC LIMIT 1'; - query(client, sql, [session.fingerprint], function(err, results) { + query(client, sql, [session.fingerprint, true], function(err, results) { done(); if (err) return cb(err); var counts = results.rows.length === 1 ?