From 01d444279c35b3ee6c7f04c7f250d5f360105e97 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 18 May 2021 22:11:24 +1000 Subject: [PATCH 1/3] Add setting for fixer.io API key --- InvenTree/common/models.py | 6 ++++++ InvenTree/templates/InvenTree/settings/global.html | 1 + 2 files changed, 7 insertions(+) diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 99712b2a93..e499e9b801 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -87,6 +87,12 @@ class InvenTreeSetting(models.Model): 'choices': djmoney.settings.CURRENCY_CHOICES, }, + 'INVENTREE_FIXER_API_KEY': { + 'name': _('fixer.io API key'), + 'description': _('API key for fixer.io currency conversion service'), + 'default': '', + }, + 'INVENTREE_DOWNLOAD_FROM_URL': { 'name': _('Download from URL'), 'description': _('Allow download of remote images and files from external URL'), diff --git a/InvenTree/templates/InvenTree/settings/global.html b/InvenTree/templates/InvenTree/settings/global.html index a0347490d0..5c5dccfb2a 100644 --- a/InvenTree/templates/InvenTree/settings/global.html +++ b/InvenTree/templates/InvenTree/settings/global.html @@ -20,6 +20,7 @@ {% include "InvenTree/settings/setting.html" with key="INVENTREE_BASE_URL" icon="fa-globe" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_COMPANY_NAME" icon="fa-building" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-dollar-sign" %} + {% include "InvenTree/settings/setting.html" with key="INVENTREE_FIXER_API_KEY" icon="fa-key" %} {% include "InvenTree/settings/setting.html" with key="INVENTREE_DOWNLOAD_FROM_URL" icon="fa-cloud-download-alt" %} From 663f5562e8e7bc83f5d8db3caa6e7acb6d2632bb Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 18 May 2021 22:41:26 +1000 Subject: [PATCH 2/3] Schedule a daily task to update currency information --- InvenTree/InvenTree/apps.py | 5 +++++ InvenTree/InvenTree/settings.py | 3 ++- InvenTree/InvenTree/tasks.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index 148638b5b2..aa60058dcf 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -44,3 +44,8 @@ class InvenTreeConfig(AppConfig): schedule_type=Schedule.MINUTES, minutes=15 ) + + InvenTree.tasks.schedule_task( + 'InvenTree.tasks.update_exchange_rates', + schedule_type=Schedule.DAILY, + ) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index 67a500a07a..5cf0b0c544 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -513,7 +513,8 @@ CURRENCIES = CONFIG.get( ], ) -# TODO - Allow live web-based backends in the future +BASE_CURRENCY = CONFIG.get('base_currency', 'USD') + EXCHANGE_BACKEND = 'InvenTree.exchange.InvenTreeManualExchangeBackend' # Extract email settings from the config file diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 6c01e03aa6..8640395d42 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -161,6 +161,34 @@ def check_for_updates(): ) +def update_exchange_rates(): + """ + If an API key for fixer.io has been provided, attempt to update currency exchange rates + """ + + try: + import common.models + from django.conf import settings + from djmoney.contrib.exchange.backends import FixerBackend + except AppRegistryNotReady: + # Apps not yet loaded! + return + + fixer_api_key = common.models.InvenTreeSetting.get_setting('INVENTREE_FIXER_API_KEY', '').strip() + + if not fixer_api_key: + # API key not provided + return + + backend = FixerBackend(access_key=fixer_api_key) + + currencies = ','.join(settings.CURRENCIES) + + base = settings.BASE_CURRENCY + + result = backend.update_rates(base_currency=base, symbols=currencies) + + def send_email(subject, body, recipients, from_email=None): """ Send an email with the specified subject and body, From 4101e2568011b518cc29d0000d3674fc8a01d52e Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 18 May 2021 22:41:57 +1000 Subject: [PATCH 3/3] Style fixes --- InvenTree/InvenTree/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/tasks.py b/InvenTree/InvenTree/tasks.py index 8640395d42..b81b4e6de4 100644 --- a/InvenTree/InvenTree/tasks.py +++ b/InvenTree/InvenTree/tasks.py @@ -186,7 +186,7 @@ def update_exchange_rates(): base = settings.BASE_CURRENCY - result = backend.update_rates(base_currency=base, symbols=currencies) + backend.update_rates(base_currency=base, symbols=currencies) def send_email(subject, body, recipients, from_email=None):