{"version":3,"file":"index-CfZpaNOF.js","sources":["../../../node_modules/@slideslive/fuse-kit/dist/utils/number/format_number.js","../../../app/frontend/modules/money/index.js"],"sourcesContent":["function formatNumber(number, thousandsSeparator = \" \", decimalMark = \".\") {\n  const value = number.toString().split(/[,.]/);\n  value[0] = value[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator);\n  return value.join(decimalMark);\n}\nexport {\n  formatNumber as default\n};\n","import { formatNumber } from '@slideslive/fuse-kit/utils';\n\nconst OPTIONS = {\n  USD: {\n    symbol: '$',\n    html_entity: '$',\n    symbol_first: true,\n    decimal_mark: '.',\n    thousands_separator: ',',\n    withoutTax: '',\n  },\n  CZK: {\n    symbol: 'Kč',\n    html_entity: 'Kč',\n    symbol_first: false,\n    decimal_mark: ',',\n    thousands_separator: ' ',\n    withoutTax: 'bez DPH',\n  },\n  EUR: {\n    symbol: '€',\n    html_entity: '&#x20AC;',\n    symbol_first: true,\n    decimal_mark: ',',\n    thousand_separator: '.',\n    withoutTax: '',\n  },\n  CHF: {\n    symbol: 'CHF',\n    html_entity: 'CHF',\n    symbol_first: false,\n    decimal_mark: ',',\n    thousand_separator: '.',\n    withoutTax: '',\n  },\n  GBP: {\n    symbol: 'GBP',\n    html_entity: 'GBP',\n    symbol_first: false,\n    decimal_mark: ',',\n    thousand_separator: '.',\n    withoutTax: '',\n  },\n  CAD: {\n    symbol: 'CAD',\n    html_entity: 'CAD',\n    symbol_first: false,\n    decimal_mark: ',',\n    thousand_separator: '.',\n    withoutTax: '',\n  },\n  AUD: {\n    symbol: 'AUD',\n    html_entity: 'AUD',\n    symbol_first: false,\n    decimal_mark: '.',\n    thousand_separator: ' ',\n    withoutTax: '',\n  },\n};\n\nconst LOCALES = {\n  CZK: {\n    en: {\n      symbol: 'CZK',\n    },\n    de: {\n      symbol: 'CZK',\n    },\n  },\n};\n\n// eslint-disable-next-line no-unused-vars\nconst TAXES = {\n  CZ: 0.21,\n  DE: 0.19,\n};\n\nconst EU_COUNTRIES = [\n  'AT',\n  'BE',\n  'BG',\n  'CY',\n  'CZ',\n  'DK',\n  'EE',\n  'FI',\n  'FR',\n  'DE',\n  'GR',\n  'HU',\n  'IE',\n  'IT',\n  'LV',\n  'LT',\n  'LU',\n  'MT',\n  'NL',\n  'PL',\n  'PT',\n  'RO',\n  'SK',\n  'SI',\n  'ES',\n  'SE',\n  'GB',\n];\n\nclass Money {\n  constructor(cents, currency = 'CZK') {\n    this.cents = cents;\n    this.currency = currency;\n  }\n\n  format(round, locale) {\n    if (!round) {\n      round = 'auto';\n    }\n\n    const options = OPTIONS[this.currency];\n    if (options == null) {\n      console.warn(`No money options for currency ${this.currency}`);\n    }\n\n    let sign = '';\n    if (this.cents < 0) {\n      sign = '-';\n    }\n\n    if (round === 'auto') {\n      if (this.cents % 100 === 0) {\n        round = 0;\n      } else {\n        round = 2;\n      }\n    } else if (round < 0) {\n      round *= -1;\n    }\n\n    let result = '';\n\n    if (options.symbol_first) {\n      if (locale != null && this.currency in LOCALES && locale in LOCALES[this.currency]) {\n        result += LOCALES[this.currency][locale].symbol;\n      } else {\n        result += options.symbol;\n      }\n    }\n\n    result += sign;\n    result += formatNumber(\n      (Math.abs(this.cents) / 100.0).toFixed(round),\n      options.thousands_separator,\n      options.decimal_mark,\n    );\n\n    if (!options.symbol_first) {\n      if (locale != null && this.currency in LOCALES && locale in LOCALES[this.currency]) {\n        result += ` ${LOCALES[this.currency][locale].symbol}`;\n      } else {\n        result += ` ${options.symbol}`;\n      }\n    }\n\n    return result;\n  }\n\n  exchangeTo(currency, date) {\n    if (currency === this.currency) {\n      return this;\n    }\n\n    let fromBaseRate;\n    let toBaseRate;\n\n    if (date != null) {\n      const day = date.getDate();\n      const month = date.getMonth() + 1;\n      const year = date.getFullYear();\n\n      if (\n        gon.exchange_rates &&\n        gon.exchange_rates[year] &&\n        gon.exchange_rates[year][month] &&\n        gon.exchange_rates[year][month][day]\n      ) {\n        fromBaseRate = gon.exchange_rates[year][month][day][this.currency];\n        toBaseRate = gon.exchange_rates[year][month][day][currency];\n      }\n\n      if (!fromBaseRate) {\n        console.warn(`From base rate undefined for ${date}. Using default.`);\n      }\n\n      if (!toBaseRate) {\n        console.warn(`To base rate undefined for ${date}. Using default.`);\n      }\n    }\n\n    if (!fromBaseRate) {\n      fromBaseRate = gon.default_exchange_rates[this.currency];\n    }\n\n    if (!toBaseRate) {\n      toBaseRate = gon.default_exchange_rates[currency];\n    }\n\n    const rate = fromBaseRate / toBaseRate;\n    const cents = Math.round(this.cents * rate);\n\n    return new Money(cents, currency);\n  }\n\n  plus(other, date) {\n    return new Money(this.cents + other.exchangeTo(this.currency, date).cents, this.currency);\n  }\n\n  minus(other, date) {\n    return new Money(this.cents - other.exchangeTo(this.currency, date).cents, this.currency);\n  }\n\n  vatForSupplierAndClient(supplierCountry, clientCountry, clientState, clientVatId, date) {\n    const taxPct = Money.vatPctForSupplierAndClient(supplierCountry, clientCountry, clientState, clientVatId, date);\n    const cents = Money.roundedTaxPct(this.cents, this.currency, taxPct);\n    return new Money(cents, this.currency);\n  }\n\n  currencyInfo(currency, locale) {\n    let info = OPTIONS[currency];\n    if (locale && currency in LOCALES && locale in LOCALES[currency]) {\n      info = Object.assign(info, LOCALES[currency][locale]);\n    }\n\n    return info;\n  }\n\n  static roundedTaxPct(cents, currency, taxPct) {\n    return Money.roundedTax(cents * taxPct, currency);\n  }\n\n  // eslint-disable-next-line no-unused-vars\n  static roundedTax(tax, currency) {\n    return (tax / 100.0).toFixed(2) * 100;\n  }\n\n  static vatPctForSupplierAndClient(supplierCountry, clientCountry, clientState, clientVatId, date) {\n    let vatPctForSupplierCountry;\n    if (supplierCountry === 'CZ' || supplierCountry === 'DE') {\n      vatPctForSupplierCountry = Money.vatPctForSupplierCountry(supplierCountry, date);\n\n      if (supplierCountry === clientCountry) {\n        return vatPctForSupplierCountry;\n      }\n\n      if (EU_COUNTRIES.indexOf(clientCountry) < 0 && clientCountry !== 'CH') {\n        return vatPctForSupplierCountry;\n      }\n\n      if (!Money.isValidVatNumber(clientVatId, clientCountry)) {\n        return vatPctForSupplierCountry;\n      }\n    }\n\n    return 0;\n  }\n\n  static vatPctForSupplierCountry(country, date) {\n    if (country === 'CZ') return 0.21;\n\n    if (country === 'DE') {\n      if (date.getFullYear() === 2020) {\n        if (date.getMonth() >= 6 && date.getMonth() <= 11) {\n          return 0.16;\n        }\n      }\n\n      return 0.19;\n    }\n\n    if (country === 'US') {\n      return 0;\n    }\n\n    console.warn('Unsupported country for VAT!');\n    return undefined;\n  }\n\n  static isValidVatNumber(vatNumber, country) {\n    if (EU_COUNTRIES.indexOf(country) >= 0 || country === 'CH') {\n      return vatNumber.toUpperCase().startsWith(Money.vatNumberPrefixForCountry(country));\n    }\n\n    return vatNumber.trim() !== '';\n  }\n\n  static vatNumberPrefixForCountry(country) {\n    if (country === 'CH') {\n      return 'CHE';\n    }\n\n    if (country === 'GR') {\n      return 'EL';\n    }\n\n    if (EU_COUNTRIES.indexOf(country) >= 0) {\n      return country;\n    }\n\n    return '';\n  }\n}\n\nexport default Money;\n"],"names":["formatNumber","number","thousandsSeparator","decimalMark","value","OPTIONS","LOCALES","EU_COUNTRIES","Money","cents","currency","round","locale","options","sign","result","date","fromBaseRate","toBaseRate","day","month","year","rate","other","supplierCountry","clientCountry","clientState","clientVatId","taxPct","info","tax","vatPctForSupplierCountry","country","vatNumber"],"mappings":"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","x_google_ignoreList":[0]}