diff --git a/__init__.py b/__init__.py
index 96d23e4..5db7bbe 100644
--- a/__init__.py
+++ b/__init__.py
@@ -4,10 +4,10 @@ from trytond.pool import Pool
from .party import Address, Party, ContactMechanism, NereidUser, Permission, \
UserPermission
-from .routing import URLMap, WebSite, URLRule, URLRuleDefaults, \
- WebsiteCountry, WebsiteCurrency
+from .routing import URLMap, WebSite, WebSiteLocale, URLRule, URLRuleDefaults, \
+ WebsiteCountry, WebsiteCurrency, WebsiteWebsiteLocale
from .static_file import NereidStaticFolder, NereidStaticFile
-from .currency import Currency, Language
+from .currency import Currency
from .template import ContextProcessors
@@ -21,13 +21,14 @@ def register():
UserPermission,
URLMap,
WebSite,
+ WebSiteLocale,
URLRule,
URLRuleDefaults,
WebsiteCountry,
WebsiteCurrency,
+ WebsiteWebsiteLocale,
NereidStaticFolder,
NereidStaticFile,
- Language,
Currency,
ContextProcessors,
module='nereid', type_='model'
diff --git a/configuration.xml b/configuration.xml
index ec7b712..8115480 100644
--- a/configuration.xml
+++ b/configuration.xml
@@ -23,13 +23,6 @@
-
- ir.lang
- tree
-
- lang_form
-
-
@@ -60,6 +53,34 @@
+
+
+ nereid.website.locale
+ form
+ website_locale_form
+
+
+ nereid.website.locale
+ tree
+ website_locale_tree
+
+
+ Web Sites Locale
+ nereid.website.locale
+
+
+
+
+
+
+
+
+
+
+
+
+
nereid.url_map
diff --git a/currency.py b/currency.py
index 4ce9721..64d25dc 100644
--- a/currency.py
+++ b/currency.py
@@ -1,9 +1,9 @@
# 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.model import ModelView, ModelSQL, fields
+from trytond.model import ModelView, ModelSQL
from nereid import request
-__all__ = ['Currency', 'Language']
+__all__ = ['Currency']
class Currency(ModelSQL, ModelView):
@@ -34,11 +34,3 @@ class Currency(ModelSQL, ModelView):
'compute': cls.compute,
'convert': cls.convert
}
-
-
-class Language(ModelSQL, ModelView):
- __name__ = "ir.lang"
-
- default_currency = fields.Many2One(
- 'currency.currency', 'Default Currency'
- )
diff --git a/routing.py b/routing.py
index f1c07e7..d25b77f 100644
--- a/routing.py
+++ b/routing.py
@@ -15,8 +15,8 @@ from trytond.pool import Pool
from .i18n import _
-__all__ = ['URLMap', 'WebSite', 'URLRule', 'URLRuleDefaults',
- 'WebsiteCountry', 'WebsiteCurrency']
+__all__ = ['URLMap', 'WebSite', 'WebSiteLocale', 'URLRule', 'URLRuleDefaults',
+ 'WebsiteCountry', 'WebsiteCurrency', 'WebsiteWebsiteLocale']
class URLMap(ModelSQL, ModelView):
@@ -132,12 +132,17 @@ class WebSite(ModelSQL, ModelView):
'nereid.website-currency.currency',
'website', 'currency', 'Currencies Available')
- #: Default language
- default_language = fields.Many2One(
- 'ir.lang', 'Default Language',
+ #: Default locale
+ default_locale = fields.Many2One(
+ 'nereid.website.locale', 'Default Locale',
required=True
)
+ #: Allowed locales in the website
+ locales = fields.Many2Many(
+ 'nereid.website-nereid.website.locale',
+ 'website', 'locale', 'Languages Available')
+
#: The res.user with which the nereid application will be loaded
#: .. versionadded: 0.3
application_user = fields.Many2One(
@@ -347,6 +352,28 @@ class WebSite(ModelSQL, ModelView):
return jsonify(status=cls._user_status())
+class WebSiteLocale(ModelSQL, ModelView):
+ 'Web Site Locale'
+ __name__ = "nereid.website.locale"
+ _rec_name = 'code'
+
+ code = fields.Char('Code', required=True)
+ language = fields.Many2One(
+ 'ir.lang', 'Default Language', required=True
+ )
+ currency = fields.Many2One(
+ 'currency.currency', 'Currency', ondelete='CASCADE', required=True
+ )
+
+ @classmethod
+ def __setup__(cls):
+ super(WebSiteLocale, cls).__setup__()
+ cls._sql_constraints += [
+ ('unique_code', 'UNIQUE(code)',
+ 'Code must be unique'),
+ ]
+
+
class URLRule(ModelSQL, ModelView):
"""
URL Rule
@@ -497,3 +524,16 @@ class WebsiteCurrency(ModelSQL):
currency = fields.Many2One(
'currency.currency', 'Currency',
ondelete='CASCADE', select=1, required=True)
+
+
+class WebsiteWebsiteLocale(ModelSQL):
+ "Languages to be made available on website"
+ __name__ = 'nereid.website-nereid.website.locale'
+ _table = 'website_locale_rel'
+
+ website = fields.Many2One(
+ 'nereid.website', 'Website',
+ ondelete='CASCADE', select=1, required=True)
+ locale = fields.Many2One(
+ 'nereid.website.locale', 'Locale',
+ ondelete='CASCADE', select=1, required=True)
diff --git a/tests/test_address.py b/tests/test_address.py
index 0bf4df6..f6a4e3b 100755
--- a/tests/test_address.py
+++ b/tests/test_address.py
@@ -26,6 +26,7 @@ class TestAddress(NereidTestCase):
trytond.tests.test_tryton.install_module('nereid')
self.nereid_website_obj = POOL.get('nereid.website')
+ self.nereid_website_locale_obj = POOL.get('nereid.website.locale')
self.nereid_user_obj = POOL.get('nereid.user')
self.url_map_obj = POOL.get('nereid.url_map')
self.company_obj = POOL.get('company.company')
@@ -130,12 +131,19 @@ class TestAddress(NereidTestCase):
url_map_id, = self.url_map_obj.search([], limit=1)
en_us, = self.language_obj.search([('code', '=', 'en_US')])
+ currency, = self.currency_obj.search([('code', '=', 'USD')])
+ locale, = self.nereid_website_locale_obj.create([{
+ 'code': 'en_US',
+ 'language': en_us,
+ 'currency': currency,
+ }])
self.nereid_website_obj.create([{
'name': 'localhost',
'url_map': url_map_id,
'company': self.company,
'application_user': USER,
- 'default_language': en_us,
+ 'default_locale': locale,
+ 'locales': [('add', [locale.id])],
'guest_user': self.guest_user,
'countries': [('set', self.available_countries)],
}])
diff --git a/tests/test_auth.py b/tests/test_auth.py
index 81a47d8..1b585bf 100644
--- a/tests/test_auth.py
+++ b/tests/test_auth.py
@@ -25,6 +25,7 @@ class TestAuth(NereidTestCase):
trytond.tests.test_tryton.install_module('nereid')
self.nereid_website_obj = POOL.get('nereid.website')
+ self.nereid_website_locale_obj = POOL.get('nereid.website.locale')
self.nereid_permission_obj = POOL.get('nereid.permission')
self.nereid_user_obj = POOL.get('nereid.user')
self.url_map_obj = POOL.get('nereid.url_map')
@@ -71,12 +72,19 @@ class TestAuth(NereidTestCase):
url_map, = self.url_map_obj.search([], limit=1)
en_us, = self.language_obj.search([('code', '=', 'en_US')])
+ currency, = self.currency_obj.search([('code', '=', 'USD')])
+ locale, = self.nereid_website_locale_obj.create([{
+ 'code': 'en_US',
+ 'language': en_us,
+ 'currency': currency,
+ }])
self.nereid_website_obj.create([{
'name': 'localhost',
'url_map': url_map,
'company': self.company,
'application_user': USER,
- 'default_language': en_us,
+ 'default_locale': locale,
+ 'locales': [('add', [locale.id])],
'guest_user': self.guest_user,
}])
self.templates = {
diff --git a/tests/test_currency.py b/tests/test_currency.py
index b901cd8..cf35991 100644
--- a/tests/test_currency.py
+++ b/tests/test_currency.py
@@ -19,6 +19,7 @@ class TestCurrency(NereidTestCase):
trytond.tests.test_tryton.install_module('nereid')
self.nereid_website_obj = POOL.get('nereid.website')
+ self.nereid_website_locale_obj = POOL.get('nereid.website.locale')
self.nereid_permission_obj = POOL.get('nereid.permission')
self.nereid_user_obj = POOL.get('nereid.user')
self.url_map_obj = POOL.get('nereid.url_map')
@@ -37,6 +38,12 @@ class TestCurrency(NereidTestCase):
'symbol': '$',
'rates': [('create', [{'rate': Decimal('1')}])],
}])
+ eur, = self.currency_obj.create([{
+ 'name': 'Euro',
+ 'code': 'EUR',
+ 'symbol': 'E',
+ 'rates': [('create', [{'rate': Decimal('2')}])],
+ }])
self.party, = self.party_obj.create([{
'name': 'Openlabs',
}])
@@ -82,12 +89,25 @@ class TestCurrency(NereidTestCase):
self.website_currencies = [c1, c2]
url_map, = self.url_map_obj.search([], limit=1)
self.en_us, = self.language_obj.search([('code', '=', 'en_US')])
+ self.es_es, = self.language_obj.search([('code', '=', 'es_ES')])
+ self.usd, = self.currency_obj.search([('code', '=', 'USD')])
+ self.eur, = self.currency_obj.search([('code', '=', 'EUR')])
+ locale_en_us, locale_es_es = self.nereid_website_locale_obj.create([{
+ 'code': 'en_US',
+ 'language': self.en_us,
+ 'currency': self.usd,
+ }, {
+ 'code': 'es_ES',
+ 'language': self.es_es,
+ 'currency': self.eur,
+ }])
self.nereid_website_obj.create([{
'name': 'localhost',
'url_map': url_map,
'company': self.company,
'application_user': USER,
- 'default_language': self.en_us,
+ 'default_locale': locale_en_us.id,
+ 'locales': [('add', [locale_en_us.id, locale_es_es.id])],
'guest_user': self.guest_user.id,
'currencies': [('set', self.website_currencies)],
}])
@@ -111,37 +131,41 @@ class TestCurrency(NereidTestCase):
app = self.get_app()
with app.test_client() as c:
- rv = c.get('/en_US/')
+ rv = c.get('/en_us/')
self.assertEqual(rv.status_code, 200)
self.assertEqual(int(rv.data), self.company.currency.id)
+ with app.test_request_context('/en_us/'):
+ self.assertEqual(
+ self.currency_obj.convert(Decimal('100')), Decimal('100')
+ )
+
+ def test_0020_currency_from_locale(self):
+ """
+ Test and ensure that the currency is based on the locale
+ """
+ with Transaction().start(DB_NAME, USER, CONTEXT):
+ self.setup_defaults()
+ app = self.get_app()
+
+ with app.test_client() as c:
+ rv = c.get('/en_US/')
+ self.assertEqual(rv.status_code, 200)
+ self.assertEqual(int(rv.data), int(self.usd.id))
+
+ rv = c.get('/es_ES/')
+ self.assertEqual(rv.status_code, 200)
+ self.assertEqual(int(rv.data), int(self.eur.id))
+
with app.test_request_context('/en_US/'):
self.assertEqual(
self.currency_obj.convert(Decimal('100')), Decimal('100')
)
- def test_0020_currency_from_language(self):
- """
- Set the currency for the language and check if the currency
- in the request is correct
- """
- with Transaction().start(DB_NAME, USER, CONTEXT):
- self.setup_defaults()
- app = self.get_app()
-
- self.language_obj.write(
- [self.en_us], {'default_currency': self.lang_currency}
- )
- with app.test_client() as c:
- rv = c.get('/en_US/')
- self.assertEqual(rv.status_code, 200)
-
- self.assertEqual(int(rv.data), int(self.lang_currency))
-
- with app.test_request_context('/en_US/'):
+ with app.test_request_context('/es_ES/'):
self.assertEqual(
- self.currency_obj.convert(Decimal('100')), Decimal('3000')
+ self.currency_obj.convert(Decimal('100')), Decimal('200')
)
diff --git a/tests/test_i18n.py b/tests/test_i18n.py
index e15fc45..3c50836 100644
--- a/tests/test_i18n.py
+++ b/tests/test_i18n.py
@@ -25,6 +25,7 @@ class TestI18N(NereidTestCase):
trytond.tests.test_tryton.install_module('nereid')
self.nereid_website_obj = POOL.get('nereid.website')
+ self.nereid_website_locale_obj = POOL.get('nereid.website.locale')
self.nereid_permission_obj = POOL.get('nereid.permission')
self.nereid_user_obj = POOL.get('nereid.user')
self.url_map_obj = POOL.get('nereid.url_map')
@@ -55,12 +56,19 @@ class TestI18N(NereidTestCase):
})
url_map_id, = self.url_map_obj.search([], limit=1)
en_us, = self.language_obj.search([('code', '=', 'en_US')])
+ currency, = self.currency_obj.search([('code', '=', 'USD')])
+ locale, = self.nereid_website_locale_obj.create([{
+ 'code': 'en_US',
+ 'language': en_us,
+ 'currency': currency,
+ }])
self.nereid_website_obj.create({
'name': 'localhost',
'url_map': url_map_id,
'company': self.company_id,
'application_user': USER,
- 'default_language': en_us,
+ 'default_locale': locale,
+ 'locales': [('add', [locale.id])],
'guest_user': self.guest_user_id,
})
diff --git a/tests/test_static_file.py b/tests/test_static_file.py
index ab0408a..777b1d6 100644
--- a/tests/test_static_file.py
+++ b/tests/test_static_file.py
@@ -34,6 +34,7 @@ class TestStaticFile(NereidTestCase):
trytond.tests.test_tryton.install_module('nereid')
self.nereid_website_obj = POOL.get('nereid.website')
+ self.nereid_website_locale_obj = POOL.get('nereid.website.locale')
self.nereid_user_obj = POOL.get('nereid.user')
self.url_map_obj = POOL.get('nereid.url_map')
self.company_obj = POOL.get('company.company')
@@ -84,12 +85,19 @@ class TestStaticFile(NereidTestCase):
url_map_id, = self.url_map_obj.search([], limit=1)
en_us, = self.language_obj.search([('code', '=', 'en_US')])
+ currency, = self.currency_obj.search([('code', '=', 'USD')])
+ locale, = self.nereid_website_locale_obj.create([{
+ 'code': 'en_US',
+ 'language': en_us,
+ 'currency': currency,
+ }])
self.nereid_website_obj.create([{
'name': 'localhost',
'url_map': url_map_id,
'company': self.company,
'application_user': USER,
- 'default_language': en_us,
+ 'default_locale': locale,
+ 'locales': [('add', [locale.id])],
'guest_user': self.guest_user,
}])
diff --git a/urls.xml b/urls.xml
index 7847e38..adb70ed 100644
--- a/urls.xml
+++ b/urls.xml
@@ -28,7 +28,7 @@
- /<language>/login
+ /login
nereid.website.login
@@ -37,7 +37,7 @@
- /<language>/logout
+ /logout
nereid.website.logout
@@ -45,7 +45,7 @@
- /<language>/registration
+ /registration
nereid.user.registration
@@ -54,7 +54,7 @@
- /<language>/account
+ /account
nereid.website.account
@@ -62,7 +62,7 @@
- /<language>/change-password
+ /change-password
nereid.user.change_password
@@ -71,7 +71,7 @@
- /<language>/new-password
+ /new-password
nereid.user.new_password
@@ -80,7 +80,7 @@
- /<language>/activate-account/<int:active_id>/<activation_code>
+ /activate-account/<int:active_id>/<activation_code>
nereid.user.activate
@@ -89,7 +89,7 @@
- /<language>/reset-account
+ /reset-account
nereid.user.reset_account
@@ -98,7 +98,7 @@
- /<language>/save-new-address
+ /save-new-address
party.address.edit_address
@@ -108,7 +108,7 @@
- /<language>/edit-address/<int:address>
+ /edit-address/<int:address>
party.address.edit_address
@@ -117,7 +117,7 @@
- /<language>/view-address
+ /view-address
party.address.view_address
@@ -125,7 +125,7 @@
- /<language>/countries
+ /countries
nereid.website.country_list
@@ -133,7 +133,7 @@
- /<language>/subdivisions
+ /subdivisions
nereid.website.subdivision_list
@@ -141,7 +141,7 @@
- /<language>/static-file/<folder>/<name>
+ /static-file/<folder>/<name>
nereid.static.file.send_static_file
@@ -149,14 +149,14 @@
- /<language>/user_status
+ /user_status
nereid.website.user_status
- /<language>/contact-mechanisms/add
+ /contact-mechanisms/add
party.contact_mechanism.add
@@ -164,7 +164,7 @@
- /<language>/contact-mechanisms/remove
+ /contact-mechanisms/remove
party.contact_mechanism.remove
@@ -172,7 +172,7 @@
- /<language>/me
+ /me
nereid.user.profile
diff --git a/view/website_form.xml b/view/website_form.xml
index 223f34b..ed25c55 100644
--- a/view/website_form.xml
+++ b/view/website_form.xml
@@ -10,8 +10,8 @@ this repository contains the full copyright notices and license terms. -->
-
-
+
+
@@ -19,6 +19,9 @@ this repository contains the full copyright notices and license terms. -->
+
+
+
diff --git a/view/website_locale_form.xml b/view/website_locale_form.xml
new file mode 100644
index 0000000..52091c6
--- /dev/null
+++ b/view/website_locale_form.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/view/lang_form.xml b/view/website_locale_tree.xml
similarity index 56%
rename from view/lang_form.xml
rename to view/website_locale_tree.xml
index 4040f48..e2359c3 100644
--- a/view/lang_form.xml
+++ b/view/website_locale_tree.xml
@@ -1,8 +1,8 @@
-
-
-
-
-
+
+
+
+
+