UNPKG

@bitrix24/b24jssdk

Version:

Bitrix24 REST API JavaScript SDK

1 lines 13.7 kB
{"version":3,"file":"currency-manager.mjs","sources":["../../../src/helper/currency-manager.ts"],"sourcesContent":["import type { BoolString, ISODate, NumberString } from '../types/common'\nimport type { Currency, CurrencyFormat } from '../types/b24-helper'\nimport { AbstractHelper, UnhandledMatchError } from './abstract-helper'\nimport { Type } from '../tools/type'\nimport { Text } from '../tools/text'\n\ntype CurrencyFormatInit = {\n DECIMALS: NumberString\n DEC_POINT: string\n FORMAT_STRING: string\n FULL_NAME: string\n HIDE_ZERO: BoolString\n THOUSANDS_SEP?: string\n THOUSANDS_VARIANT: string\n}\n\ntype CurrencyInit = {\n AMOUNT: NumberString\n AMOUNT_CNT: NumberString\n BASE: BoolString\n CURRENCY: string\n DATE_UPDATE: ISODate\n DECIMALS: NumberString\n DEC_POINT: string\n FORMAT_STRING: string\n FULL_NAME: string\n LID: string\n SORT: NumberString\n THOUSANDS_SEP?: string\n LANG?: Record<string, CurrencyFormatInit>\n}\n\ntype CurrencyInitData = {\n currencyBase: string\n currencyList: CurrencyInit[]\n}\n\ntype CurrencyData = {\n currencyBase: string\n currencyList: Map<string, Currency>\n}\n\nexport class CurrencyManager extends AbstractHelper {\n /**\n * @inheritDoc\n */\n override async initData(data: CurrencyInitData): Promise<void> {\n this._data = {\n currencyBase: '?',\n currencyList: new Map()\n } as CurrencyData\n\n this.setBaseCurrency(data.currencyBase)\n this.setCurrencyList(data.currencyList)\n\n try {\n await this.loadData()\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n\n this.getLogger().error('Failed to load data', { error })\n throw new Error('Failed to load data')\n }\n }\n\n async loadData(): Promise<void> {\n const batchRequest: {\n method: string\n params: { id: string }\n }[] = this.currencyList.map((currencyCode) => {\n return {\n method: 'crm.currency.get',\n params: {\n id: currencyCode\n }\n }\n })\n\n if (batchRequest.length === 0) {\n return Promise.resolve()\n }\n\n try {\n const response = await this._b24.callBatchByChunk(batchRequest, true)\n const data = response.getData()\n\n data.forEach((row: CurrencyInit) => {\n if (typeof row.LANG === 'undefined') {\n return\n }\n\n const currencyCode = row.CURRENCY\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n return\n }\n\n for (const [langCode, formatData] of Object.entries(row.LANG)) {\n currency.lang[langCode] = {\n decimals: Number.parseInt(formatData.DECIMALS),\n decPoint: formatData.DEC_POINT,\n formatString: formatData.FORMAT_STRING,\n fullName: formatData.FULL_NAME,\n isHideZero: formatData.HIDE_ZERO === 'Y',\n thousandsSep: formatData.THOUSANDS_SEP,\n thousandsVariant: formatData.THOUSANDS_VARIANT\n } as CurrencyFormat\n\n switch (currency.lang[langCode].thousandsVariant) {\n case 'N':\n currency.lang[langCode].thousandsSep = ''\n break\n case 'D':\n currency.lang[langCode].thousandsSep = '.'\n break\n case 'C':\n currency.lang[langCode].thousandsSep = ','\n break\n case 'S':\n currency.lang[langCode].thousandsSep = ' '\n break\n case 'B':\n currency.lang[langCode].thousandsSep = '&nbsp;'\n break\n // case 'OWN': ////\n default:\n if (!Type.isStringFilled(currency.lang[langCode].thousandsSep)) {\n currency.lang[langCode].thousandsSep = ' '\n }\n break\n }\n }\n })\n } catch (error) {\n this.getLogger().error('Failed to load data', { error })\n }\n }\n\n get data(): CurrencyData {\n if (null === this._data) {\n throw new Error('CurrencyManager.data not initialized')\n }\n\n return this._data\n }\n\n // region BaseCurrency ////\n setBaseCurrency(currencyBase: string) {\n this._data.currencyBase = currencyBase\n }\n\n get baseCurrency(): string {\n return this.data.currencyBase\n }\n // endregion ////\n\n // region CurrencyList ////\n setCurrencyList(list: CurrencyInit[] = []) {\n this.data.currencyList.clear()\n\n for (const row of list) {\n this.data.currencyList.set(row.CURRENCY, {\n amount: Number.parseFloat(row.CURRENCY),\n amountCnt: Number.parseInt(row.AMOUNT_CNT),\n isBase: row.BASE === 'Y',\n currencyCode: row.CURRENCY,\n dateUpdate: Text.toDateTime(row.DATE_UPDATE),\n decimals: Number.parseInt(row.DECIMALS),\n decPoint: row.DEC_POINT,\n formatString: row.FORMAT_STRING,\n fullName: row.FULL_NAME,\n lid: row.LID,\n sort: Number.parseInt(row.SORT),\n thousandsSep: row?.THOUSANDS_SEP || null,\n lang: {}\n } as Currency)\n }\n }\n // endregion ////\n\n // region Info ////\n getCurrencyFullName(currencyCode: string, langCode: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n let fullName = currency.fullName\n\n if (!(typeof langCode === 'undefined')) {\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n fullName = langFormatter.fullName\n }\n }\n\n return fullName\n }\n\n getCurrencyLiteral(currencyCode: string, langCode?: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n let formatString = currency.formatString\n\n if (!(typeof langCode === 'undefined')) {\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n formatString = langFormatter.formatString\n }\n }\n\n return (\n formatString\n .replaceAll('&#', '&%')\n .replaceAll('#', '')\n .replaceAll('&%', '&#')\n .trim() || ''\n )\n }\n\n get currencyList(): string[] {\n return [...this.data.currencyList.keys()]\n }\n // endregion ////\n\n // region Format ////\n format(value: number, currencyCode: string, langCode: string): string {\n const currency = this.data.currencyList.get(currencyCode)\n if (typeof currency === 'undefined') {\n throw new UnhandledMatchError(currencyCode)\n }\n\n const options = {\n formatString: currency.formatString,\n decimals: currency.decimals,\n decPoint: currency.decPoint,\n thousandsSep: currency.thousandsSep\n }\n if (!Type.isStringFilled(options.thousandsSep)) {\n options.thousandsSep = ''\n }\n\n const langFormatter = currency.lang[langCode]\n if (!Type.isUndefined(langFormatter)) {\n options.formatString = langFormatter.formatString\n options.decimals = langFormatter.decimals\n options.decPoint = langFormatter.decPoint\n options.thousandsSep = langFormatter.thousandsSep\n }\n\n return (\n options.formatString\n .replaceAll('&#', '&%')\n .replace(\n '#',\n Text.numberFormat(\n value,\n options.decimals,\n options.decPoint,\n options.thousandsSep\n )\n )\n .replaceAll('&%', '&#') || ''\n )\n }\n // endregion ////\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA0CO,MAAM,wBAAwB,cAAA,CAAe;AAAA,EA1CpD;AA0CoD,IAAA,MAAA,CAAA,IAAA,EAAA,iBAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlD,MAAe,SAAS,IAAA,EAAuC;AAC7D,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,YAAA,EAAc,GAAA;AAAA,MACd,YAAA,sBAAkB,GAAA;AAAI,KACxB;AAEA,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,YAAY,CAAA;AACtC,IAAA,IAAA,CAAK,eAAA,CAAgB,KAAK,YAAY,CAAA;AAEtC,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,QAAA,EAAS;AAAA,IACtB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,qBAAA,EAAuB,EAAE,OAAO,CAAA;AACvD,MAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,YAAA,GAGA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,YAAA,KAAiB;AAC5C,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,UACN,EAAA,EAAI;AAAA;AACN,OACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,MAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,IAAA,CAAK,IAAA,CAAK,gBAAA,CAAiB,cAAc,IAAI,CAAA;AACpE,MAAA,MAAM,IAAA,GAAO,SAAS,OAAA,EAAQ;AAE9B,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,KAAsB;AAClC,QAAA,IAAI,OAAO,GAAA,CAAI,IAAA,KAAS,WAAA,EAAa;AACnC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,eAAe,GAAA,CAAI,QAAA;AACzB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,IAAI,YAAY,CAAA;AACxD,QAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,UAAA;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,CAAC,UAAU,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7D,UAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,GAAI;AAAA,YACxB,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA;AAAA,YAC7C,UAAU,UAAA,CAAW,SAAA;AAAA,YACrB,cAAc,UAAA,CAAW,aAAA;AAAA,YACzB,UAAU,UAAA,CAAW,SAAA;AAAA,YACrB,UAAA,EAAY,WAAW,SAAA,KAAc,GAAA;AAAA,YACrC,cAAc,UAAA,CAAW,aAAA;AAAA,YACzB,kBAAkB,UAAA,CAAW;AAAA,WAC/B;AAEA,UAAA,QAAQ,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,gBAAA;AAAkB,YAChD,KAAK,GAAA;AACH,cAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,EAAA;AACvC,cAAA;AAAA,YACF,KAAK,GAAA;AACH,cAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,GAAA;AACvC,cAAA;AAAA,YACF,KAAK,GAAA;AACH,cAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,GAAA;AACvC,cAAA;AAAA,YACF,KAAK,GAAA;AACH,cAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,GAAA;AACvC,cAAA;AAAA,YACF,KAAK,GAAA;AACH,cAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,QAAA;AACvC,cAAA;AAAA;AAAA,YAEF;AACE,cAAA,IAAI,CAAC,KAAK,cAAA,CAAe,QAAA,CAAS,KAAK,QAAQ,CAAA,CAAE,YAAY,CAAA,EAAG;AAC9D,gBAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,YAAA,GAAe,GAAA;AAAA,cACzC;AACA,cAAA;AAAA;AACJ,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,WAAU,CAAE,KAAA,CAAM,qBAAA,EAAuB,EAAE,OAAO,CAAA;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI,IAAA,GAAqB;AACvB,IAAA,IAAI,IAAA,KAAS,KAAK,KAAA,EAAO;AACvB,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA,EAGA,gBAAgB,YAAA,EAAsB;AACpC,IAAA,IAAA,CAAK,MAAM,YAAA,GAAe,YAAA;AAAA,EAC5B;AAAA,EAEA,IAAI,YAAA,GAAuB;AACzB,IAAA,OAAO,KAAK,IAAA,CAAK,YAAA;AAAA,EACnB;AAAA;AAAA;AAAA,EAIA,eAAA,CAAgB,IAAA,GAAuB,EAAC,EAAG;AACzC,IAAA,IAAA,CAAK,IAAA,CAAK,aAAa,KAAA,EAAM;AAE7B,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,QAAA,EAAU;AAAA,QACvC,MAAA,EAAQ,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAAA,QACtC,SAAA,EAAW,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,UAAU,CAAA;AAAA,QACzC,MAAA,EAAQ,IAAI,IAAA,KAAS,GAAA;AAAA,QACrB,cAAc,GAAA,CAAI,QAAA;AAAA,QAClB,UAAA,EAAY,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,WAAW,CAAA;AAAA,QAC3C,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAAA,QACtC,UAAU,GAAA,CAAI,SAAA;AAAA,QACd,cAAc,GAAA,CAAI,aAAA;AAAA,QAClB,UAAU,GAAA,CAAI,SAAA;AAAA,QACd,KAAK,GAAA,CAAI,GAAA;AAAA,QACT,IAAA,EAAM,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,QAC9B,YAAA,EAAc,KAAK,aAAA,IAAiB,IAAA;AAAA,QACpC,MAAM;AAAC,OACI,CAAA;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,mBAAA,CAAoB,cAAsB,QAAA,EAA0B;AAClE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,IAAI,YAAY,CAAA;AACxD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,IAAI,oBAAoB,YAAY,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,WAAW,QAAA,CAAS,QAAA;AAExB,IAAA,IAAI,EAAE,OAAO,QAAA,KAAa,WAAA,CAAA,EAAc;AACtC,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAC5C,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,aAAa,CAAA,EAAG;AACpC,QAAA,QAAA,GAAW,aAAA,CAAc,QAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,kBAAA,CAAmB,cAAsB,QAAA,EAA2B;AAClE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,IAAI,YAAY,CAAA;AACxD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,IAAI,oBAAoB,YAAY,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,eAAe,QAAA,CAAS,YAAA;AAE5B,IAAA,IAAI,EAAE,OAAO,QAAA,KAAa,WAAA,CAAA,EAAc;AACtC,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAC5C,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,aAAa,CAAA,EAAG;AACpC,QAAA,YAAA,GAAe,aAAA,CAAc,YAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,OACE,YAAA,CACG,UAAA,CAAW,IAAA,EAAM,IAAI,EACrB,UAAA,CAAW,GAAA,EAAK,EAAE,CAAA,CAClB,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,CACrB,MAAK,IAAK,EAAA;AAAA,EAEjB;AAAA,EAEA,IAAI,YAAA,GAAyB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA,EAIA,MAAA,CAAO,KAAA,EAAe,YAAA,EAAsB,QAAA,EAA0B;AACpE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,IAAI,YAAY,CAAA;AACxD,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAM,IAAI,oBAAoB,YAAY,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,cAAc,QAAA,CAAS,YAAA;AAAA,MACvB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,UAAU,QAAA,CAAS,QAAA;AAAA,MACnB,cAAc,QAAA,CAAS;AAAA,KACzB;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,YAAA,GAAe,EAAA;AAAA,IACzB;AAEA,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,aAAa,CAAA,EAAG;AACpC,MAAA,OAAA,CAAQ,eAAe,aAAA,CAAc,YAAA;AACrC,MAAA,OAAA,CAAQ,WAAW,aAAA,CAAc,QAAA;AACjC,MAAA,OAAA,CAAQ,WAAW,aAAA,CAAc,QAAA;AACjC,MAAA,OAAA,CAAQ,eAAe,aAAA,CAAc,YAAA;AAAA,IACvC;AAEA,IAAA,OACE,OAAA,CAAQ,YAAA,CACL,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,CACrB,OAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,CAAK,YAAA;AAAA,QACH,KAAA;AAAA,QACA,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ;AAAA;AACV,KACF,CACC,UAAA,CAAW,IAAA,EAAM,IAAI,CAAA,IAAK,EAAA;AAAA,EAEjC;AAAA;AAEF;;;;"}