Newer
Older
* @module package/quiqqer/currency/bin/Currency
* @author wwww.pcsg.de (Henning Leutz)
*/
define('package/quiqqer/currency/bin/Currency', [
'qui/QUI',
'Ajax',
'package/quiqqer/currency/bin/classes/BulkConverting'
], function (QUI, QUIDOM, QUIAjax, BulkConverting) {
// package_quiqqer_currency_ajax_setUserCurrency
if (typeof window.DEFAULT_CURRENCY !== 'undefined') {

Henning Leutz
committed
if (typeof window.DEFAULT_USER_CURRENCY !== 'undefined') {

Henning Leutz
committed
}
const Currencies = new Class({
Type: 'package/quiqqer/currency/bin/Currency',
this.$currency = def;
this.$currencies = {};
if (SYSTEM_CURRENCY !== this.$currency) {
this.fireEvent('change', [
this,
this.$currency
]);
}
},
/**
* Change the global currency
*
* @param {String} currencyCode
*/
setCurrency: function (currencyCode) {
this.getCurrencies().then(function (currencies) {
const found = currencies.find(function (Currency) {
return Currency.code === currencyCode;
this.fireEvent('change', [
this,
found.code
]);
* Return the data of a wanted currency
* @param {String} [currencyCode] - optional, default = current currency
* @param {Boolean} [refresh] - Refresh data from database
getCurrency: function (currencyCode, refresh) {
currencyCode = currencyCode || this.$currency;
if (refresh) {
return new Promise((resolve, reject) => {
QUIAjax.get('package_quiqqer_currency_ajax_getCurrency', resolve, {
'package': 'quiqqer/currency',
currency: currencyCode,
onError: reject
return new Promise((resolve, reject) => {
this.getCurrencies().then((currencies) => {
const found = currencies.find((Currency) => {
return Currency.code === currencyCode;
});
if (found) {
return resolve(found);
}
return reject('Currency is not supported. ' + currencyCode);
/**
* Return all available currencies
*
* @returns {Promise}
*/
if (Object.getLength(this.$currencies)) {
return Promise.resolve(this.$currencies);
}
if (getCurrenciesFetch) {
return new Promise((resolve) => {
(() => {
this.getCurrencies().then(resolve);
}).delay(50);
});
}
getCurrenciesFetch = true;
return new Promise((resolve, reject) => {
QUIAjax.get('package_quiqqer_currency_ajax_getAllowedCurrencies', (result) => {
* Return default currency
*
* @returns {Promise}
*/
getDefaultCurrency: function () {
if (SYSTEM_CURRENCY !== '') {
return Promise.resolve(SYSTEM_CURRENCY);
}
return new Promise((resolve, reject) => {
QUIAjax.get('package_quiqqer_currency_ajax_getDefault', (result) => {
SYSTEM_CURRENCY = result.code;
resolve(result.code);
}, {
'package': 'quiqqer/currency',
onError: reject
});
});
},
/**
* Return all available currency types.
*
* @returns {Promise<Array>}
*/
if (this.$currencyTypes.length) {
return Promise.resolve(this.$currencyTypes);
}
return new Promise((resolve, reject) => {
QUIAjax.get('package_quiqqer_currency_ajax_getCurrencyTypes', (result) => {
this.$currencyTypes = result;
resolve(this.$currencyTypes);
}, {
'package': 'quiqqer/currency',
/**
* Convert an amount, the result is without the currency sign
*
* @param {Number} amount
* @param {String} currencyFrom
* @param {String} currencyTo
* @returns {Promise}
*/
convert: function (amount, currencyFrom, currencyTo) {
currencyTo = currencyTo || this.$currency;
return new Promise((resolve) => {
QUIAjax.get('package_quiqqer_currency_ajax_convert', resolve, {
'package': 'quiqqer/currency',
amount: amount,
});
});
},
/**
* Convert an amount, the result is with the currency sign
*
* @param {Number} amount
* @param {String} currencyFrom
* @param {String} currencyTo
* @returns {Promise}
*/
convertWithSign: function (amount, currencyFrom, currencyTo) {
currencyTo = currencyTo || this.$currency;
if (typeof currencyTo === 'object' && typeof currencyTo.code !== 'undefined') {
currencyTo = currencyTo.code;
}
if (typeof currencyFrom === 'object' && typeof currencyFrom.code !== 'undefined') {
currencyFrom = currencyFrom.code;
}
if (!Converter) {
Converter = new BulkConverting();
}
if (Converter.isRunning() === false) {
Converter.removeEvents('onDone');
}
Converter.add(amount, currencyFrom, currencyTo);
return new Promise((resolve) => {
Converter.addEvent('onDone', (Cnv, result) => {

Henning Leutz
committed
if (!result) {
return;
}
let i = 0, len = result.length;
for (; i < len; i++) {
if (result[i].amount == amount &&
result[i].from === currencyFrom &&
result[i].to === currencyTo) {
break;
}
}
if (typeof result[i] === 'undefined' || typeof result[i].converted === 'undefined') {
return;
}