mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-03 22:13:18 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			250 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import axios from 'axios'
 | 
						|
import { defineStore } from 'pinia'
 | 
						|
import { useNotificationStore } from '@/scripts/stores/notification'
 | 
						|
import { handleError } from '@/scripts/helpers/error-handling'
 | 
						|
 | 
						|
export const useExchangeRateStore = (useWindow = false) => {
 | 
						|
  const defineStoreFunc = useWindow ? window.pinia.defineStore : defineStore
 | 
						|
  const { global } = window.i18n
 | 
						|
  const notificationStore = useNotificationStore()
 | 
						|
 | 
						|
  return defineStoreFunc({
 | 
						|
    id: 'exchange-rate',
 | 
						|
 | 
						|
    state: () => ({
 | 
						|
      supportedCurrencies: [],
 | 
						|
      drivers: [],
 | 
						|
      activeUsedCurrencies: [],
 | 
						|
      providers: [],
 | 
						|
      currencies: null,
 | 
						|
      currentExchangeRate: {
 | 
						|
        id: null,
 | 
						|
        driver: '',
 | 
						|
        key: '',
 | 
						|
        active: true,
 | 
						|
        currencies: [],
 | 
						|
      },
 | 
						|
      currencyConverter: {
 | 
						|
        type: '',
 | 
						|
        url: '',
 | 
						|
      },
 | 
						|
      bulkCurrencies: [],
 | 
						|
    }),
 | 
						|
    getters: {
 | 
						|
      isEdit: (state) => (state.currentExchangeRate.id ? true : false),
 | 
						|
    },
 | 
						|
 | 
						|
    actions: {
 | 
						|
      fetchProviders(params) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get('/api/v1/exchange-rate-providers', { params })
 | 
						|
            .then((response) => {
 | 
						|
              this.providers = response.data.data
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
 | 
						|
      fetchDefaultProviders() {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get(`/api/v1/config?key=exchange_rate_drivers`)
 | 
						|
            .then((response) => {
 | 
						|
              this.drivers = response.data.exchange_rate_drivers
 | 
						|
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
 | 
						|
      fetchProvider(id) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get(`/api/v1/exchange-rate-providers/${id}`)
 | 
						|
            .then((response) => {
 | 
						|
              this.currentExchangeRate = response.data.data
 | 
						|
              this.currencyConverter = response.data.data.driver_config
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
 | 
						|
      addProvider(data) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .post('/api/v1/exchange-rate-providers', data)
 | 
						|
            .then((response) => {
 | 
						|
              notificationStore.showNotification({
 | 
						|
                type: 'success',
 | 
						|
                message: global.t('settings.exchange_rate.created_message'),
 | 
						|
              })
 | 
						|
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
 | 
						|
      updateProvider(data) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .put(`/api/v1/exchange-rate-providers/${data.id}`, data)
 | 
						|
            .then((response) => {
 | 
						|
              notificationStore.showNotification({
 | 
						|
                type: 'success',
 | 
						|
                message: global.t('settings.exchange_rate.updated_message'),
 | 
						|
              })
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
 | 
						|
      deleteExchangeRate(id) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .delete(`/api/v1/exchange-rate-providers/${id}`)
 | 
						|
            .then((response) => {
 | 
						|
              let index = this.drivers.findIndex((driver) => driver.id === id)
 | 
						|
              this.drivers.splice(index, 1)
 | 
						|
              if (response.data.success) {
 | 
						|
                notificationStore.showNotification({
 | 
						|
                  type: 'success',
 | 
						|
                  message: global.t('settings.exchange_rate.deleted_message'),
 | 
						|
                })
 | 
						|
              } else {
 | 
						|
                notificationStore.showNotification({
 | 
						|
                  type: 'error',
 | 
						|
                  message: global.t('settings.exchange_rate.error'),
 | 
						|
                })
 | 
						|
              }
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      fetchCurrencies(params) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get(`/api/v1/supported-currencies`, { params })
 | 
						|
            .then((response) => {
 | 
						|
              this.supportedCurrencies = response.data.supportedCurrencies
 | 
						|
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      fetchActiveCurrency(params) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get('/api/v1/used-currencies', { params })
 | 
						|
            .then((response) => {
 | 
						|
              this.activeUsedCurrencies = response.data.activeUsedCurrencies
 | 
						|
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      fetchBulkCurrencies() {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get('/api/v1/currencies/used')
 | 
						|
            .then((response) => {
 | 
						|
              this.bulkCurrencies = response.data.currencies.map((_m) => {
 | 
						|
                _m.exchange_rate = null
 | 
						|
                return _m
 | 
						|
              })
 | 
						|
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      updateBulkExchangeRate(data) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .post('/api/v1/currencies/bulk-update-exchange-rate', data)
 | 
						|
            .then((response) => {
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      getCurrentExchangeRate(currencyId) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get(`/api/v1/currencies/${currencyId}/exchange-rate`)
 | 
						|
            .then((response) => {
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      getCurrencyConverterServers() {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get('/api/v1/config?key=currency_converter_servers')
 | 
						|
            .then((response) => {
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              handleError(err)
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
      checkForActiveProvider(currency_id) {
 | 
						|
        return new Promise((resolve, reject) => {
 | 
						|
          axios
 | 
						|
            .get(`/api/v1/currencies/${currency_id}/active-provider`)
 | 
						|
            .then((response) => {
 | 
						|
              resolve(response)
 | 
						|
            })
 | 
						|
            .catch((err) => {
 | 
						|
              reject(err)
 | 
						|
            })
 | 
						|
        })
 | 
						|
      },
 | 
						|
    },
 | 
						|
  })()
 | 
						|
}
 |