diff --git a/lib/routes/customerRoutes.js b/lib/routes/customerRoutes.js index d5daee99..cccb9554 100644 --- a/lib/routes/customerRoutes.js +++ b/lib/routes/customerRoutes.js @@ -119,10 +119,12 @@ function updateTxCustomerPhoto (req, res, next) { function sendSmsReceipt (req, res, next) { const receiptOptions = _.omit(['active', 'sms'], configManager.getReceipt(req.settings.config)) - const smsRequest = sms.formatSmsRequest(req.body.data, receiptOptions) - sms.sendMessage(req.settings, smsRequest) - .then(() => respond(req, res, {})) - .catch(next) + sms.buildSms(req.body.data, receiptOptions) + .then(smsRequest => { + sms.sendMessage(req.settings, smsRequest) + .then(() => respond(req, res, {})) + .catch(next) + }) } router.patch('/:id', updateCustomer) diff --git a/lib/sms.js b/lib/sms.js index 3d67bf86..ed2de98b 100644 --- a/lib/sms.js +++ b/lib/sms.js @@ -1,5 +1,11 @@ +const { BigNumber } = require('bignumber.js') const ph = require('./plugin-helper') const argv = require('minimist')(process.argv.slice(2)) +const { getTx } = require('./new-admin/services/transactions.js') +const { getCustomerById } = require('./customers') +const configManager = require('./new-config-manager') +const machineLoader = require('./machine-loader') +const { utils: coinUtils } = require('lamassu-coins') function getPlugin (settings) { const pluginCode = argv.mockSms ? 'mock-sms' : 'twilio' @@ -24,6 +30,46 @@ function getLookup (settings, number) { return plugin.getLookup(account, number) }) } +const toCryptoUnits = (cryptoAtoms, cryptoCode) => { + const unitScale = coinUtils.getCryptoCurrency(cryptoCode).unitScale + return cryptoAtoms.shift(-unitScale) +} + +function buildSms (data, receiptOptions) { + return getTx(data.session, data.txClass) + .then(tx => { + Promise.all([getCustomerById(tx.customer_id), machineLoader.getConfig(), machineLoader.getMachine()]) + .then(([customer, config, deviceConfig]) => { + const localeConfig = configManager.getLocale(tx.device_id, config) + const timezone = localeConfig.timezone.split(':') + const dstOffset = timezone[1] + + const cashInCommission = BigNumber(1).add(BigNumber(tx.commissionPercentage)) + + const rate = BigNumber(tx.rawTickerPrice).mul(cashInCommission).round(2) + const date = new Date() + date.setMinutes(date.getMinutes() + parseInt(dstOffset)) + const dateString = `${date.toISOString().replace('T', ' ').slice(0, 19)}` + + const data = { + operatorInfo: configManager.getOperatorInfo(config), + location: deviceConfig.machineLocation, + customerName: customer.name, + customerPhone: customer.phone, + session: tx.id, + time: dateString, + direction: tx.direction === 'cashIn' ? 'Cash-in' : 'Cash-out', + fiat: `${tx.fiat.toString()} ${tx.fiatCode}`, + crypto: `${toCryptoUnits(tx.cryptoAtoms, tx.cryptoCode)} ${tx.cryptoCode}`, + rate: `1 ${tx.cryptoCode} = ${rate} ${tx.fiatCode}`, + address: tx.toAddress, + txId: tx.txHash + } + + return formatSmsReceipt(data, receiptOptions) + }) + }) +} function formatSmsReceipt (data, options) { var message = `RECEIPT\n` @@ -86,4 +132,4 @@ function formatSmsReceipt (data, options) { return request } -module.exports = { sendMessage, formatSmsReceipt, getLookup } +module.exports = { sendMessage, formatSmsReceipt, getLookup, buildSms }