diff --git a/app/components/debit_customer_modal.js b/app/components/debit_customer_modal.js index b75078c60..d3733c007 100644 --- a/app/components/debit_customer_modal.js +++ b/app/components/debit_customer_modal.js @@ -5,6 +5,16 @@ Balanced.DebitCustomerModalComponent = Balanced.ModalComponent.extend({ dollar_amount: null, + selected_currency: "USD", + + currency_list: function() { + return Balanced.CURRENCY_LIST.map(function(currency) { + return _.extend({ + formatted_name: "%@ (%@)".fmt(currency.name, currency.code) + }, currency); + }); + }.property(), + actions: { open: function() { var fundingInstruments = this.get('customer.debitable_funding_instruments'); @@ -13,6 +23,7 @@ Balanced.DebitCustomerModalComponent = Balanced.ModalComponent.extend({ var debit = Balanced.Debit.create({ uri: debitUri, amount: null, + selected_currency: null, order: this.get('order.href') }); @@ -40,7 +51,10 @@ Balanced.DebitCustomerModalComponent = Balanced.ModalComponent.extend({ }); return; } - debit.set('amount', cents); + debit.setProperties({ + amount: cents, + currency: this.get('selected_currency') + }); this._super(debit); } }, diff --git a/app/lib/handlebars_helpers.js b/app/lib/handlebars_helpers.js index 3058f940a..3470918ed 100644 --- a/app/lib/handlebars_helpers.js +++ b/app/lib/handlebars_helpers.js @@ -2,6 +2,8 @@ require('app/lib/utils'); Ember.Handlebars.registerBoundHelper('formatCurrency', Balanced.Utils.formatCurrency); +Ember.Handlebars.registerBoundHelper('formatCapturedCurrency', Balanced.Utils.formatCapturedCurrency); + Ember.Handlebars.registerBoundHelper('formatNumber', Balanced.Utils.formatNumber); Ember.Handlebars.registerBoundHelper('formatError', Balanced.Utils.formatError); diff --git a/app/lib/utils.js b/app/lib/utils.js index 8d4deed62..5b2164f49 100644 --- a/app/lib/utils.js +++ b/app/lib/utils.js @@ -119,6 +119,22 @@ Balanced.Utils = Ember.Namespace.create({ return prepend + Balanced.Utils.centsToDollars(cents); }, + formatCapturedCurrency: function(amount, unit) { + if (!amount) { + return unit + ' 0'; + } + + var prepend = unit + ' '; + + if (amount < 0) { + amount = amount * -1; + prepend = '-' + prepend; + } + amount = Balanced.Utils.formatNumber(amount); + + return prepend + amount; + }, + formatNumber: function(number) { if (!number) { return 0; diff --git a/app/lib/variables.js b/app/lib/variables.js index 5805e7428..c7b4aa3f8 100644 --- a/app/lib/variables.js +++ b/app/lib/variables.js @@ -40,7 +40,8 @@ Balanced.SEARCH = { // time in ms to throttle between key presses for search Balanced.THROTTLE = { SEARCH: 400, - REFRESH: 1000 + REFRESH: 1000, + CURRENCY_CONVERSION: 400 }; Balanced.PASSWORD = { @@ -60,3 +61,164 @@ Balanced.DATES = { RESULTS_MAX_TIME: moment().add('hours', 2).startOf('hour').toDate(), RESULTS_MIN_TIME: moment().subtract('months', 1).startOf('hour').toDate() }; + +Balanced.CURRENCY_LIST = [ + { code: "AED", name: "UAE Dirham", decimal_place: 2 }, + { code: "AFN", name: "Afghan Afghani", decimal_place: 2 }, + { code: "ALL", name: "Albanian Lek", decimal_place: 2 }, + { code: "AMD", name: "Armenian Dram", decimal_place: 2 }, + { code: "ANG", name: "Netherlands Antillian Guilder", decimal_place: 2 }, + { code: "AOA", name: "Angolan Kwanza", decimal_place: 2 }, + { code: "ARS", name: "Argentine Peso", decimal_place: 2 }, + { code: "AUD", name: "Australian Dollar", decimal_place: 2 }, + { code: "AWG", name: "Aruban Guilder", decimal_place: 2 }, + { code: "AZN", name: "Azerbaijanian Manat", decimal_place: 2 }, + { code: "BAM", name: "Convertible Marks", decimal_place: 2 }, + { code: "BBD", name: "Barbados Dollar", decimal_place: 2 }, + { code: "BDT", name: "Bangladeshi Taka", decimal_place: 2 }, + { code: "BGN", name: "Bulgarian Lev", decimal_place: 2 }, + { code: "BHD", name: "Bahraini Dinar", decimal_place: 3 }, + { code: "BIF", name: "Burundi Franc", decimal_place: 0 }, + { code: "BMD", name: "Bermudian Dollar", decimal_place: 2 }, + { code: "BND", name: "Brunei Dollar", decimal_place: 2 }, + { code: "BOB", name: "Boliviano", decimal_place: 2 }, + { code: "BRL", name: "Brazilian Real", decimal_place: 2 }, + { code: "BSD", name: "Bahamian Dollar", decimal_place: 2 }, + { code: "BWP", name: "Botswana Pula", decimal_place: 2 }, + { code: "BYR", name: "Belarussian Ruble", decimal_place: 0 }, + { code: "BZD", name: "Belize Dollar", decimal_place: 2 }, + { code: "CAD", name: "Canadian Dollar", decimal_place: 2 }, + { code: "CDF", name: "Franc Congolais", decimal_place: 2 }, + { code: "CHF", name: "Swiss Franc", decimal_place: 2 }, + { code: "CLP", name: "Chilean Peso", decimal_place: 2 }, + { code: "CNY", name: "Yuan Renminbi", decimal_place: 2 }, + { code: "COP", name: "Colombian Peso", decimal_place: 2 }, + { code: "CRC", name: "Costa Rican Colon", decimal_place: 2 }, + { code: "CUC", name: "Cuban Convertable Peso", decimal_place: 2 }, + { code: "CVE", name: "Cape Verde Escudo", decimal_place: 2 }, + { code: "CZK", name: "Czech Koruna", decimal_place: 2 }, + { code: "DJF", name: "Djibouti Franc", decimal_place: 0 }, + { code: "DKK", name: "Danish Krone", decimal_place: 2 }, + { code: "DOP", name: "Dominican Peso", decimal_place: 2 }, + { code: "DZD", name: "Algerian Dinar", decimal_place: 2 }, + { code: "EEK", name: "Estonian Kroon", decimal_place: 2 }, + { code: "EGP", name: "Egyptian Pound", decimal_place: 2 }, + { code: "ERN", name: "Nakfa", decimal_place: 2 }, + { code: "ETB", name: "Ethiopian Birr", decimal_place: 2 }, + { code: "EUR", name: "Euro", decimal_place: 2 }, + { code: "FJD", name: "Fiji Dollar", decimal_place: 2 }, + { code: "FKP", name: "Falkland Islands Pound", decimal_place: 2 }, + { code: "GBP", name: "Pound Sterling", decimal_place: 2 }, + { code: "GEL", name: "Georgian Lari", decimal_place: 2 }, + { code: "GHS", name: "Ghana Cedi", decimal_place: 2 }, + { code: "GIP", name: "Gibraltar Pound", decimal_place: 2 }, + { code: "GMD", name: "Gambian Dalasi", decimal_place: 2 }, + { code: "GNF", name: "Guinea Franc", decimal_place: 0 }, + { code: "GQE", name: "CFA Franc", decimal_place: 0 }, + { code: "GTQ", name: "Guatemalan Quetzal", decimal_place: 2 }, + { code: "GYD", name: "Guyana Dollar", decimal_place: 2 }, + { code: "HKD", name: "Hong Kong Dollar", decimal_place: 2 }, + { code: "HNL", name: "Honduran Lempira", decimal_place: 2 }, + { code: "HRK", name: "Croatian Kuna", decimal_place: 2 }, + { code: "HTG", name: "Haitian Gourde", decimal_place: 2 }, + { code: "HUF", name: "Hungarian Forint", decimal_place: 2 }, + { code: "IDR", name: "Indonesian Rupiah", decimal_place: 0 }, + { code: "ILS", name: "New Israeli Sheqel", decimal_place: 2 }, + { code: "INR", name: "Indian Rupee Ngultrum", decimal_place: 2 }, + { code: "IQD", name: "Iraqi Dinar", decimal_place: 3 }, + { code: "IRR", name: "Iranian Rial", decimal_place: 2 }, + { code: "ISK", name: "Iceland Krona", decimal_place: 2 }, + { code: "JMD", name: "Jamaican Dollar", decimal_place: 2 }, + { code: "JOD", name: "Jordanian Dinar", decimal_place: 3 }, + { code: "JPY", name: "Japanese Yen", decimal_place: 0 }, + { code: "KES", name: "Kenyan Shilling", decimal_place: 2 }, + { code: "KGS", name: "Kyrgyzstani Som", decimal_place: 2 }, + { code: "KHR", name: "Cambodian Riel", decimal_place: 2 }, + { code: "KMF", name: "Comoro Franc", decimal_place: 0 }, + { code: "KPW", name: "North Korean Won", decimal_place: 2 }, + { code: "KRW", name: "South Korean Won", decimal_place: 0 }, + { code: "KWD", name: "Kuwaiti Dinar", decimal_place: 3 }, + { code: "KYD", name: "Cayman Islands Dollar", decimal_place: 2 }, + { code: "KZT", name: "Kazakhstani Tenge", decimal_place: 2 }, + { code: "LAK", name: "Laotian Kip", decimal_place: 2 }, + { code: "LBP", name: "Lebanese Pound", decimal_place: 2 }, + { code: "LKR", name: "Sri Lanka Rupee", decimal_place: 2 }, + { code: "LRD", name: "Liberian Dollar", decimal_place: 2 }, + { code: "LSL", name: "Lesotho Loti", decimal_place: 2 }, + { code: "LTL", name: "Lithuanian Litas", decimal_place: 2 }, + { code: "LVL", name: "Latvian Lats", decimal_place: 2 }, + { code: "LYD", name: "Libyan Dinar", decimal_place: 3 }, + { code: "MAD", name: "Moroccan Dirham", decimal_place: 2 }, + { code: "MDL", name: "Moldovan Leu", decimal_place: 2 }, + { code: "MGA", name: "Malagasy Ariary", decimal_place: 0 }, + { code: "MKD", name: "Macedonian Denar", decimal_place: 2 }, + { code: "MMK", name: "Kyat", decimal_place: 2 }, + { code: "MNT", name: "Mongolian Tugrik", decimal_place: 2 }, + { code: "MOP", name: "Macanese Pataca", decimal_place: 2 }, + { code: "MRO", name: "Mauritanian Ouguiya", decimal_place: 2 }, + { code: "MUR", name: "Mauritius Rupee", decimal_place: 2 }, + { code: "MVR", name: "Rufiyaa", decimal_place: 2 }, + { code: "MWK", name: "Malawian Kwacha", decimal_place: 2 }, + { code: "MXN", name: "Mexican Peso", decimal_place: 2 }, + { code: "MYR", name: "Malaysian Ringgit", decimal_place: 2 }, + { code: "MZM", name: "Mozambican Meticalis", decimal_place: 2 }, + { code: "NAD", name: "Namibia Dollar", decimal_place: 2 }, + { code: "NGN", name: "Nigerian Naira", decimal_place: 2 }, + { code: "NIO", name: "Cordoba Oro", decimal_place: 2 }, + { code: "NOK", name: "Norwegian Krone", decimal_place: 2 }, + { code: "NPR", name: "Nepalese Rupee", decimal_place: 2 }, + { code: "NZD", name: "New Zealand Dollar", decimal_place: 2 }, + { code: "OMR", name: "Rial Omani", decimal_place: 3 }, + { code: "PAB", name: "Panamanian Balboa", decimal_place: 2 }, + { code: "PEN", name: "Nuevo Sol", decimal_place: 2 }, + { code: "PGK", name: "Papua New Guinean Kina", decimal_place: 2 }, + { code: "PHP", name: "Philippine Peso", decimal_place: 2 }, + { code: "PKR", name: "Pakistan Rupee", decimal_place: 2 }, + { code: "PLN", name: "Polish Zloty", decimal_place: 2 }, + { code: "PYG", name: "Paraguayan Guarani", decimal_place: 0 }, + { code: "QAR", name: "Qatari Rial", decimal_place: 2 }, + { code: "RON", name: "Romanian Leu", decimal_place: 2 }, + { code: "RSD", name: "Serbian Dinar", decimal_place: 2 }, + { code: "RUB", name: "Russian Ruble", decimal_place: 2 }, + { code: "RWF", name: "Rwanda Franc", decimal_place: 0 }, + { code: "SAR", name: "Saudi Riyal", decimal_place: 2 }, + { code: "SBD", name: "Solomon Islands Dollar", decimal_place: 2 }, + { code: "SCR", name: "Seychelles Rupee", decimal_place: 2 }, + { code: "SDG", name: "Sudanese Pound", decimal_place: 2 }, + { code: "SEK", name: "Swedish Krona", decimal_place: 2 }, + { code: "SGD", name: "Singapore Dollar", decimal_place: 2 }, + { code: "SHP", name: "Saint Helena Pound", decimal_place: 2 }, + { code: "SLL", name: "Sierra Leonean Leone", decimal_place: 2 }, + { code: "SOS", name: "Somali Shilling", decimal_place: 2 }, + { code: "SRD", name: "Surinam Dollar", decimal_place: 2 }, + { code: "STD", name: "São Tomé and Príncipe Dobra", decimal_place: 2 }, + { code: "SYP", name: "Syrian Pound", decimal_place: 2 }, + { code: "SZL", name: "Swazi Lilangeni", decimal_place: 2 }, + { code: "THB", name: "Thai Baht", decimal_place: 2 }, + { code: "TJS", name: "Tajikistani Somoni", decimal_place: 2 }, + { code: "TMM", name: "Manat", decimal_place: 2 }, + { code: "TMT", name: "Turkmenistan Manat", decimal_place: 2 }, + { code: "TND", name: "Tunisian Dinar", decimal_place: 3 }, + { code: "TOP", name: "Pa'anga", decimal_place: 2 }, + { code: "TRY", name: "New Turkish Lira", decimal_place: 2 }, + { code: "TTD", name: "Trinidad and Tobago Dollar", decimal_place: 2 }, + { code: "TWD", name: "New Taiwan Dollar", decimal_place: 2 }, + { code: "TZS", name: "Tanzanian Shilling", decimal_place: 2 }, + { code: "UAH", name: "Ukrainian Hryvnia", decimal_place: 2 }, + { code: "UGX", name: "Uganda Shilling", decimal_place: 2 }, + { code: "USD", name: "US Dollar", decimal_place: 3 }, + { code: "UYU", name: "Peso Uruguayo", decimal_place: 2 }, + { code: "UZS", name: "Uzbekistan Sum", decimal_place: 2 }, + { code: "VEB", name: "Venezuelan Bolivares", decimal_place: 2 }, + { code: "VND", name: "Vietnamese Dong", decimal_place: 2 }, + { code: "VUV", name: "Vanuatu Vatu", decimal_place: 0 }, + { code: "WST", name: "Samoan Tala", decimal_place: 2 }, + { code: "XAF", name: "Central African CFA Franc", decimal_place: 0 }, + { code: "XCD", name: "East Caribbean Dollar", decimal_place: 2 }, + { code: "XOF", name: "West African CFA Franc", decimal_place: 2 }, + { code: "XPF", name: "CFP Franc", decimal_place: 0 }, + { code: "YER", name: "Yemeni Rial", decimal_place: 2 }, + { code: "ZAR", name: "South African Rand", decimal_place: 2 }, + { code: "ZMK", name: "Kwacha", decimal_place: 2 }, + { code: "ZWR", name: "Zimbabwean Dollar", decimal_place: 2 } +]; diff --git a/app/models/transaction.js b/app/models/transaction.js index 021354e4a..74cfe626a 100644 --- a/app/models/transaction.js +++ b/app/models/transaction.js @@ -19,6 +19,21 @@ Balanced.Transaction = Balanced.Model.extend( } }.property('amount'), + // Note: Returning dummy values while waiting for the forex API to be available + // TODO: Remove this when the API is available + currency: 'USD', + captured_currency: 'KRW', + + // Note: Returing dummy value while waiting for the forex API to be available + // TODO: Remove this when the API is available + amount_in_captured_currency: function() { + return this.get('amount') * 1000; + }.property('amount'), + + isUSD: function() { + return (this.get('captured_currency') === 'USD'); + }, + customer_name_summary: function() { if (this.get('customer')) { return this.get('customer.display_me_with_email'); diff --git a/app/templates/components/debit-customer-modal.hbs b/app/templates/components/debit-customer-modal.hbs index 449298cdc..3eb2b2386 100644 --- a/app/templates/components/debit-customer-modal.hbs +++ b/app/templates/components/debit-customer-modal.hbs @@ -33,36 +33,44 @@ -
- -
- {{selected_funding_instrument.name}} -
+
+ +
+ {{selected_funding_instrument.name}}
+
-
- -
- {{selected_funding_instrument.brand}} -
+
+ +
+ {{selected_funding_instrument.brand}}
+
-
- -
-
- $ - {{view Ember.TextField valueBinding="dollar_amount" name="dollar_amount" class="span"}} -
+
+ +
+ {{view Ember.Select + contentBinding="currency_list" + optionValuePath="content.code" + optionLabelPath="content.formatted_name" + valueBinding="selected_currency" + value="selected_currency" + name="selected_currency" + }} + {{view Ember.TextField valueBinding="dollar_amount" name="dollar_amount"}} +
+ {{formatCapturedCurrency dollar_amount selected_currency}} = USD {{formatCurrency dollar_amount}}
+
-
- -
- {{view Ember.TextField valueBinding="model.appears_on_statement_as" name="appears_on_statement_as" class="full" maxlengthBinding="selected_funding_instrument.appears_on_statement_max_length"}} -
+
+ +
+ {{view Ember.TextField valueBinding="model.appears_on_statement_as" name="appears_on_statement_as" class="full" maxlengthBinding="selected_funding_instrument.appears_on_statement_max_length"}}
+
diff --git a/app/templates/components/refund-debit-modal.hbs b/app/templates/components/refund-debit-modal.hbs index da907e90a..ee0cdb6c3 100644 --- a/app/templates/components/refund-debit-modal.hbs +++ b/app/templates/components/refund-debit-modal.hbs @@ -18,8 +18,16 @@
- $ - {{view Ember.TextField valueBinding="dollar_amount" name="dollar_amount" class="span3"}} + {{#if isUSD}} + $ + {{view Ember.TextField valueBinding="dollar_amount" name="dollar_amount" class="span3"}} + {{else}} + {{debit.captured_currency}} + {{view Ember.TextField valueBinding="debit.amount_in_captured_currency" name="dollar_amount" class="span3"}} + {{/if}} +
+
+ {{formatCapturedCurrency debit.amount_in_captured_currency debit.captured_currency}} = USD {{dollar_amount}}
diff --git a/app/templates/components/txn-debit.hbs b/app/templates/components/txn-debit.hbs index 355371f83..0b868b565 100644 --- a/app/templates/components/txn-debit.hbs +++ b/app/templates/components/txn-debit.hbs @@ -3,7 +3,7 @@
Debit
- {{titleCase debit.status}}: {{formatCurrency debit.amount}} + {{titleCase debit.status}}: {{formatCurrency debit.amount}} ({{formatCapturedCurrency debit.amount_in_captured_currency debit.captured_currency}})
{{#if debit.can_refund}} diff --git a/app/templates/results/transactions_table.hbs b/app/templates/results/transactions_table.hbs index c523201eb..8ecdb9c20 100644 --- a/app/templates/results/transactions_table.hbs +++ b/app/templates/results/transactions_table.hbs @@ -111,7 +111,12 @@ {{#link-to transaction.route_name transaction}} - {{formatCurrency transaction.amount}} + {{#if view.transaction.isUSD}} + {{formatCurrency transaction.amount}} + {{else}} + {{formatCurrency transaction.amount}} + {{formatCapturedCurrency transaction.amount_in_captured_currency transaction.captured_currency}} + {{/if}} {{/link-to}} diff --git a/static/less/forms.less b/static/less/forms.less index c9032c4e7..f323d24f3 100644 --- a/static/less/forms.less +++ b/static/less/forms.less @@ -73,7 +73,7 @@ form { .input-prepend { .add-on { font-size: @inputFontSize; - height: 30px; + height: 40px; min-width: @inputFontSize; line-height: 1.7; border-radius: 0; @@ -85,6 +85,12 @@ form { } } } + + .input-note { + .sl-sm; + color: @gray5; + padding-top: 5px; + } } .form-horizontal:not(.split-labels) { @@ -115,6 +121,12 @@ form { } } + &.inline-select { + select, input { + width: 49%; + } + } + &.text-label { padding-top: 5px; }