mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-29 12:41:10 -04: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)
 | |
|             })
 | |
|         })
 | |
|       },
 | |
|     },
 | |
|   })()
 | |
| }
 |