summaryrefslogtreecommitdiff
path: root/odoo
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-16 19:30:20 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-16 19:30:20 +0100
commit6faad524cf5e4db02855cb213277c40aee14c42a (patch)
tree383c984dc1461a03481baa9fbdce8c156ca97e2e /odoo
parent3657dc77c2ddb4275f07d1271b93e7f25e09913a (diff)
parentbc744a1da46efda6f1eb5c341f2fa5df30c9c7ad (diff)
[MERGE] forward port branch 12.0 up to bc744a1da46
Diffstat (limited to 'odoo')
-rw-r--r--odoo/PKG-INFO18
-rw-r--r--odoo/addons/base/rng/calendar_view.rng2
-rw-r--r--odoo/addons/base/static/src/js/res_config_settings.js9
-rw-r--r--odoo/addons/base/static/tests/base_settings_tests.js4
-rw-r--r--odoo/addons/base/views/ir_module_views.xml4
-rw-r--r--odoo/addons/base/views/res_partner_views.xml10
-rw-r--r--odoo/addons/test_main_flows/static/src/js/tour.js2
-rw-r--r--odoo/addons/test_new_api/ir.model.access.csv4
-rw-r--r--odoo/addons/test_new_api/models.py35
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py20
-rw-r--r--odoo/cli/deploy.py39
-rw-r--r--odoo/fields.py14
-rw-r--r--odoo/tests/common.py2
13 files changed, 106 insertions, 57 deletions
diff --git a/odoo/PKG-INFO b/odoo/PKG-INFO
deleted file mode 100644
index fba4a850f51..00000000000
--- a/odoo/PKG-INFO
+++ /dev/null
@@ -1,18 +0,0 @@
-Metadata-Version: 1.1
-Name: OpenERP
-Version: 6.0.0
-Author: OpenERP S.A.
-Author-email: fp at openerp com
-Maintainer: OpenERP S.A.
-Maintainer-email: fp at openerp com
-Home-page: http://www.openerp.com
-Download-url: http://www.openerp.com/downloads.html
-Summary: OpenERP is an Enterprise Resource Management written entirely in python.
-License: GPL-3
-Description: OpenERP is a complete ERP and CRM. The main features are accounting (analytic
- and financial), stock management, sales and purchases management, tasks
- automation, marketing campaigns, help desk, POS, etc. Technical features include
- a distributed server, flexible workflows, an object database, a dynamic GUI,
- customizable reports, and an XML-RPC interface.
-Keywords: ERP, Accounting, Stock, CRM, Enterprise, Logistics, Management, Sales, Purchases
-Platform: Linux, Win32
diff --git a/odoo/addons/base/rng/calendar_view.rng b/odoo/addons/base/rng/calendar_view.rng
index 949c3f48318..500a61b3389 100644
--- a/odoo/addons/base/rng/calendar_view.rng
+++ b/odoo/addons/base/rng/calendar_view.rng
@@ -32,7 +32,7 @@
<rng:ref name="field"/>
</rng:zeroOrMore>
<rng:optional>
- <rng:element name="template">
+ <rng:element name="templates">
<rng:oneOrMore>
<rng:ref name="any"/>
</rng:oneOrMore>
diff --git a/odoo/addons/base/static/src/js/res_config_settings.js b/odoo/addons/base/static/src/js/res_config_settings.js
index 855b03452ae..9514d431141 100644
--- a/odoo/addons/base/static/src/js/res_config_settings.js
+++ b/odoo/addons/base/static/src/js/res_config_settings.js
@@ -354,6 +354,15 @@ var BaseSettingController = FormController.extend({
this.disableAutofocus = true;
this.renderer.activeSettingTab = this.initialState.context.module;
},
+ /**
+ * Settings view should always be in edit mode, so we have to override
+ * default behaviour
+ *
+ * @override
+ */
+ willRestore: function () {
+ this.mode = 'edit';
+ },
});
var BaseSettingsModel = BasicModel.extend({
diff --git a/odoo/addons/base/static/tests/base_settings_tests.js b/odoo/addons/base/static/tests/base_settings_tests.js
index e0ee5dd6380..eb9726b9fa6 100644
--- a/odoo/addons/base/static/tests/base_settings_tests.js
+++ b/odoo/addons/base/static/tests/base_settings_tests.js
@@ -87,7 +87,7 @@ QUnit.module('base_settings_tests', {
});
QUnit.test('settings views does not read existing id when coming back in breadcrumbs', function (assert) {
- assert.expect(7);
+ assert.expect(8);
var actions = [{
id: 1,
@@ -127,6 +127,8 @@ QUnit.module('base_settings_tests', {
actionManager.doAction(1);
actionManager.$('button[name="4"]').click();
$('.o_control_panel .breadcrumb-item a').click();
+ assert.ok(actionManager.$('.o_form_view').hasClass('o_form_editable'),
+ 'settings view should still be in edit mode');
assert.verifySteps([
'load_views', // initial setting action
'default_get', // this is a setting view => create new record
diff --git a/odoo/addons/base/views/ir_module_views.xml b/odoo/addons/base/views/ir_module_views.xml
index ebf6700ecea..7f1bb9727a9 100644
--- a/odoo/addons/base/views/ir_module_views.xml
+++ b/odoo/addons/base/views/ir_module_views.xml
@@ -37,8 +37,8 @@
<search string="Search modules">
<field name="name" filter_domain="['|', '|', ('summary', 'ilike', self), ('shortdesc', 'ilike', self), ('name',
'ilike', self)]" string="Module"/>
- <filter name="app" string="Apps" domain="[('application', '=', 1)]"/>
- <filter name="extra" string="Extra" domain="[('application', '=', 0)]"/>
+ <filter name="app" string="Apps" domain="[('application', '=', True)]"/>
+ <filter name="extra" string="Extra" domain="[('application', '=', False)]"/>
<separator/>
<filter name="installed" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
<filter name="not_installed" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml
index 9a86939782b..1880589a326 100644
--- a/odoo/addons/base/views/res_partner_views.xml
+++ b/odoo/addons/base/views/res_partner_views.xml
@@ -449,15 +449,15 @@
<search string="Search Partner">
<field name="name"
filter_domain="['|','|',('display_name','ilike',self),('ref','=',self),('email','ilike',self)]"/>
- <field name="parent_id" domain="[('is_company','=',1)]" operator="child_of"/>
+ <field name="parent_id" domain="[('is_company','=',True)]" operator="child_of"/>
<filter name="filter_my_partners" help="My Contacts"
domain="[('user_id','=',uid)]"/>
<separator/>
- <filter string="Individuals" name="type_person" domain="[('is_company','=',0)]"/>
- <filter string="Companies" name="type_company" domain="[('is_company','=',1)]"/>
+ <filter string="Individuals" name="type_person" domain="[('is_company','=',False)]"/>
+ <filter string="Companies" name="type_company" domain="[('is_company','=',True)]"/>
<separator/>
- <filter string="Customers" name="customer" domain="[('customer','=',1), ('parent_id', '=', False)]"/>
- <filter string="Vendors" name="supplier" domain="[('supplier','=',1), ('parent_id', '=', False)]"/>
+ <filter string="Customers" name="customer" domain="[('customer','=',True), ('parent_id', '=', False)]"/>
+ <filter string="Vendors" name="supplier" domain="[('supplier','=',True), ('parent_id', '=', False)]"/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
<separator/>
<field name="category_id" string="Tag" filter_domain="[('category_id','ilike', self)]"/>
diff --git a/odoo/addons/test_main_flows/static/src/js/tour.js b/odoo/addons/test_main_flows/static/src/js/tour.js
index 717c9d81884..d79036346b2 100644
--- a/odoo/addons/test_main_flows/static/src/js/tour.js
+++ b/odoo/addons/test_main_flows/static/src/js/tour.js
@@ -671,7 +671,7 @@ tour.register('main_flow_tour', {
position: 'bottom',
}, {
edition: "enterprise",
- trigger: '.o_app[data-menu-xmlid="account.menu_finance"]',
+ trigger: '.o_app[data-menu-xmlid="account_accountant.menu_accounting"]',
content: _t('Go to Accounting'),
position: 'bottom',
}, {
diff --git a/odoo/addons/test_new_api/ir.model.access.csv b/odoo/addons/test_new_api/ir.model.access.csv
index c825fb51c59..77c881dcc4d 100644
--- a/odoo/addons/test_new_api/ir.model.access.csv
+++ b/odoo/addons/test_new_api/ir.model.access.csv
@@ -22,3 +22,7 @@ access_test_new_api_multi_compute_inverse,access_test_new_api_multi_compute_inve
access_test_new_api_recursive,access_test_new_api_recursive,model_test_new_api_recursive,,1,1,1,1
access_test_new_api_cascade,access_test_new_api_cascade,model_test_new_api_cascade,,1,1,1,1
access_test_new_api_binary_svg,access_test_new_api_binary_svg,model_test_new_api_binary_svg,,1,1,1,1
+access_test_new_api_monetary_base,access_test_new_api_monetary_base,model_test_new_api_monetary_base,,1,1,1,1
+access_test_new_api_monetary_related,access_test_new_api_monetary_related,model_test_new_api_monetary_related,,1,1,1,1
+access_test_new_api_monetary_custom,access_test_new_api_monetary_custom,model_test_new_api_monetary_custom,,1,1,1,1
+access_test_new_api_monetary_inherits,access_test_new_api_monetary_inherits,model_test_new_api_monetary_inherits,,1,1,1,1
diff --git a/odoo/addons/test_new_api/models.py b/odoo/addons/test_new_api/models.py
index 043ee8a0b7d..7d7ad777b44 100644
--- a/odoo/addons/test_new_api/models.py
+++ b/odoo/addons/test_new_api/models.py
@@ -468,3 +468,38 @@ class BinarySvg(models.Model):
name = fields.Char(required=True)
image_attachment = fields.Binary(attachment=True)
image_wo_attachment = fields.Binary(attachment=False)
+
+
+class MonetaryBase(models.Model):
+ _name = 'test_new_api.monetary_base'
+ _description = 'Monetary Base'
+
+ base_currency_id = fields.Many2one('res.currency')
+ amount = fields.Monetary(currency_field='base_currency_id')
+
+
+class MonetaryRelated(models.Model):
+ _name = 'test_new_api.monetary_related'
+ _description = 'Monetary Related'
+
+ monetary_id = fields.Many2one('test_new_api.monetary_base')
+ currency_id = fields.Many2one('res.currency', related='monetary_id.base_currency_id')
+ amount = fields.Monetary(related='monetary_id.amount')
+
+
+class MonetaryCustom(models.Model):
+ _name = 'test_new_api.monetary_custom'
+ _description = 'Monetary Related Custom'
+
+ monetary_id = fields.Many2one('test_new_api.monetary_base')
+ x_currency_id = fields.Many2one('res.currency', related='monetary_id.base_currency_id')
+ x_amount = fields.Monetary(related='monetary_id.amount')
+
+
+class MonetaryInherits(models.Model):
+ _name = 'test_new_api.monetary_inherits'
+ _description = 'Monetary Inherits'
+ _inherits = {'test_new_api.monetary_base': 'monetary_id'}
+
+ monetary_id = fields.Many2one('test_new_api.monetary_base', required=True, ondelete='cascade')
+ currency_id = fields.Many2one('res.currency')
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py
index caa4eedf4bf..9b3da038c5c 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -1054,6 +1054,26 @@ class TestFields(common.TransactionCase):
])
self.assertEqual(attachment.mimetype, 'text/plain')
+ def test_93_monetary_related(self):
+ """ Check the currency field on related monetary fields. """
+ # check base field
+ field = self.env['test_new_api.monetary_base']._fields['amount']
+ self.assertEqual(field.currency_field, 'base_currency_id')
+
+ # related fields must use the field 'currency_id' or 'x_currency_id'
+ field = self.env['test_new_api.monetary_related']._fields['amount']
+ self.assertEqual(field.related, ('monetary_id', 'amount'))
+ self.assertEqual(field.currency_field, 'currency_id')
+
+ field = self.env['test_new_api.monetary_custom']._fields['x_amount']
+ self.assertEqual(field.related, ('monetary_id', 'amount'))
+ self.assertEqual(field.currency_field, 'x_currency_id')
+
+ # inherited field must use the same field as its parent field
+ field = self.env['test_new_api.monetary_inherits']._fields['amount']
+ self.assertEqual(field.related, ('monetary_id', 'amount'))
+ self.assertEqual(field.currency_field, 'base_currency_id')
+
class TestX2many(common.TransactionCase):
def test_search_many2many(self):
diff --git a/odoo/cli/deploy.py b/odoo/cli/deploy.py
index 6e76cea7d45..29b969135dd 100644
--- a/odoo/cli/deploy.py
+++ b/odoo/cli/deploy.py
@@ -18,40 +18,29 @@ class Deploy(Command):
def deploy_module(self, module_path, url, login, password, db='', force=False):
url = url.rstrip('/')
- csrf_token = self.authenticate(url, login, password, db)
module_file = self.zip_module(module_path)
try:
- return self.upload_module(url, module_file, force=force, csrf_token=csrf_token)
+ return self.login_upload_module(module_file, url, login, password, db, force=force)
finally:
os.remove(module_file)
- def upload_module(self, server, module_file, force=False, csrf_token=None):
+ def login_upload_module(self, module_file, url, login, password, db, force=False):
print("Uploading module file...")
- url = server + '/base_import_module/upload'
-
- post_data = {'force': '1' if force else ''}
- if csrf_token: post_data['csrf_token'] = csrf_token
-
+ endpoint = url + '/base_import_module/login_upload'
+ post_data = {
+ 'login': login,
+ 'password': password,
+ 'db': db,
+ 'force': '1' if force else '',
+ }
with open(module_file, 'rb') as f:
- res = self.session.post(url, files={'mod_file': f}, data=post_data)
- res.raise_for_status()
-
- return res.text
+ res = self.session.post(endpoint, files={'mod_file': f}, data=post_data)
- def authenticate(self, server, login, password, db=''):
- print("Authenticating on server '%s' ..." % server)
-
- # Fixate session with a given db if any
- self.session.get(server + '/web/login', params=dict(db=db))
-
- args = dict(login=login, password=password, db=db)
- res = self.session.post(server + '/base_import_module/login', args)
if res.status_code == 404:
- raise Exception("The server '%s' does not have the 'base_import_module' installed." % server)
- elif res.status_code != 200:
- raise Exception(res.text)
-
- return res.headers.get('x-csrf-token')
+ raise Exception(
+ "The server '%s' does not have the 'base_import_module' installed or is not up-to-date." % url)
+ res.raise_for_status()
+ return res.text
def zip_module(self, path):
path = os.path.abspath(path)
diff --git a/odoo/fields.py b/odoo/fields.py
index 6d89f9355ec..d877cd71f87 100644
--- a/odoo/fields.py
+++ b/odoo/fields.py
@@ -1276,11 +1276,9 @@ class Monetary(Field):
def __init__(self, string=Default, currency_field=Default, **kwargs):
super(Monetary, self).__init__(string=string, currency_field=currency_field, **kwargs)
- _related_currency_field = property(attrgetter('currency_field'))
_description_currency_field = property(attrgetter('currency_field'))
- def _setup_regular_full(self, model):
- super(Monetary, self)._setup_regular_full(model)
+ def _setup_currency_field(self, model):
if not self.currency_field:
# pick a default, trying in order: 'currency_id', 'x_currency_id'
if 'currency_id' in model._fields:
@@ -1290,6 +1288,16 @@ class Monetary(Field):
assert self.currency_field in model._fields, \
"Field %s with unknown currency_field %r" % (self, self.currency_field)
+ def _setup_regular_full(self, model):
+ super(Monetary, self)._setup_regular_full(model)
+ self._setup_currency_field(model)
+
+ def _setup_related_full(self, model):
+ super(Monetary, self)._setup_related_full(model)
+ if self.inherited:
+ self.currency_field = self.related_field.currency_field
+ self._setup_currency_field(model)
+
def convert_to_column(self, value, record, values=None, validate=True):
# retrieve currency from values or record
if values and self.currency_field in values:
diff --git a/odoo/tests/common.py b/odoo/tests/common.py
index 782debfe74f..6c562acff79 100644
--- a/odoo/tests/common.py
+++ b/odoo/tests/common.py
@@ -314,7 +314,7 @@ class BaseCase(TreeCase, MetaCase('DummyCase', (object,), {})):
field_type = record._fields[field_name].type
if field_type == 'monetary':
# Compare monetary field.
- currency_field_name = record._fields[field_name]._related_currency_field
+ currency_field_name = record._fields[field_name].currency_field
record_currency = record[currency_field_name]
if record_currency.compare_amounts(candidate_value, record_value)\
if record_currency else candidate_value != record_value: