first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,60 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime as dt
from decimal import Decimal
import requests
from lxml import etree
import trytond.config as config
from trytond.modules.currency.currency import CronFetchError
from trytond.pool import PoolMeta
from trytond.pyson import Eval, If
URL_10DAYS = 'https://bnr.ro/nbrfxrates10days.xml'
URL_YEAR = 'https://bnr.ro/files/xml/years/nbrfxrates%s.xml'
class Cron(metaclass=PoolMeta):
__name__ = 'currency.cron'
@classmethod
def __setup__(cls):
super().__setup__()
cls.source.selection.append(('bnr_ro', "Romanian National Bank"))
cls.currency.domain = [
cls.currency.domain or [],
If(Eval('source') == 'bnr_ro',
('code', '=', 'RON'),
()),
]
def fetch_bnr_ro(self, date):
if (dt.date.today() - date).days < 10:
url = URL_10DAYS
else:
url = URL_YEAR % date.year
timeout = config.getfloat(
'currency_ro', 'requests_timeout', default=300)
try:
response = requests.get(url, timeout=timeout)
except requests.HTTPError as e:
raise CronFetchError() from e
tree = etree.fromstring(response.content)
origin, = tree.xpath(
'//x:Body/x:OrigCurrency',
namespaces={'x': 'http://www.bnr.ro/xsd'})
assert origin.text == self.currency.code
cubes = tree.xpath(
'//x:Body/x:Cube[@date="%s"]' % date.isoformat(),
namespaces={'x': 'http://www.bnr.ro/xsd'})
if cubes:
cube, = cubes
return {
r.get('currency'): (
Decimal(r.get('multiplier', 1)) / Decimal(r.text))
for r in cube.iter('{*}Rate')}
else:
return {}

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banc Nacional de Romania"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Rumänische Nationalbank"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banco Nacional de Rumanía"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banque nationale roumaine"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banca nazionale Rumena"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Roemeense Nationale Bank"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,8 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banco Nacional Romeno"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr "Banca Naţionala a României"

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,7 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "selection:currency.cron,source:"
msgid "Romanian National Bank"
msgstr ""

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,56 @@
====================
Currency RO Scenario
====================
Imports::
>>> import datetime as dt
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules
>>> today = dt.date.today()
>>> previous_month = today - dt.timedelta(days=30)
>>> before_previous_month = previous_month - dt.timedelta(days=1)
Activate modules::
>>> config = activate_modules('currency_ro')
Import models::
>>> Currency = Model.get('currency.currency')
>>> Cron = Model.get('currency.cron')
Create some currencies::
>>> eur = Currency(name="Euro", code='EUR', symbol="€")
>>> eur.save()
>>> ron = Currency(name="Romanian Leu", code='RON', symbol="L")
>>> ron.save()
Setup cron::
>>> cron = Cron()
>>> cron.source = 'bnr_ro'
>>> cron.frequency = 'daily'
>>> cron.day = None
>>> cron.currency = ron
>>> cron.currencies.append(Currency(eur.id))
>>> cron.last_update = before_previous_month
>>> cron.save()
Run update::
>>> cron.click('run')
>>> cron.last_update >= previous_month
True
>>> ron.reload()
>>> rate = [r for r in ron.rates if r.date < today][0]
>>> rate.rate
Decimal('1.000000')
>>> eur.reload()
>>> rate = [r for r in eur.rates if r.date < today][0]
>>> bool(rate.rate)
True

View File

@@ -0,0 +1,12 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import ModuleTestCase
class CurrencyRoTestCase(ModuleTestCase):
'Test Currency Ro module'
module = 'currency_ro'
del ModuleTestCase

View File

@@ -0,0 +1,10 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import TEST_NETWORK, load_doc_tests
def load_tests(*args, **kwargs):
if not TEST_NETWORK:
kwargs.setdefault('skips', set()).add('scenario_currency_ro.rst')
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,9 @@
[tryton]
version=7.8.0
depends:
currency
ir
[register]
model:
currency.Cron