From 82f492bc2c5bbca8b02168075b5d5356f1b35951 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 9 Mar 2012 16:29:38 +0100 Subject: [PATCH 01/28] [FIX] related fields: fix and simplify search (was wrong with a single indirection) bzr revid: rco@openerp.com-20120309152938-n467ap8hnw406rau --- openerp/osv/fields.py | 18 +++-------- openerp/tests/__init__.py | 2 ++ openerp/tests/test_fields.py | 59 ++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 openerp/tests/test_fields.py diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 7c1761a4aec..fdbd6a6f7cc 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -1153,20 +1153,10 @@ class related(function): """ def _fnct_search(self, tobj, cr, uid, obj=None, name=None, domain=None, context=None): - self._field_get2(cr, uid, obj, context) - i = len(self._arg)-1 - sarg = name - while i>0: - if type(sarg) in [type([]), type( (1,) )]: - where = [(self._arg[i], 'in', sarg)] - else: - where = [(self._arg[i], '=', sarg)] - if domain: - where = map(lambda x: (self._arg[i],x[1], x[2]), domain) - domain = [] - sarg = obj.pool.get(self._relations[i]['object']).search(cr, uid, where, context=context) - i -= 1 - return [(self._arg[0], 'in', sarg)] + # assume self._arg = ('foo', 'bar', 'baz') + # domain = [(name, op, val)] => search [('foo.bar.baz', op, val)] + field = '.'.join(self._arg) + return map(lambda x: (field, x[1], x[2]), domain) def _fnct_write(self,obj,cr, uid, ids, field_name, values, args, context=None): self._field_get2(cr, uid, obj, context=context) diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index 5fccb07a082..e02a7d7042c 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -11,6 +11,7 @@ See the :ref:`test-framework` section in the :ref:`features` list. import test_expression import test_ir_sequence import test_orm +import test_fields fast_suite = [ test_ir_sequence, @@ -19,6 +20,7 @@ fast_suite = [ checks = [ test_expression, test_orm, + test_fields, ] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/tests/test_fields.py b/openerp/tests/test_fields.py new file mode 100644 index 00000000000..c049a43fc97 --- /dev/null +++ b/openerp/tests/test_fields.py @@ -0,0 +1,59 @@ +# +# test cases for fields access, etc. +# + +import unittest2 +import common + +import openerp +from openerp.osv import fields + +class TestRelatedField(common.TransactionCase): + + def setUp(self): + super(TestRelatedField, self).setUp() + self.partner = self.registry('res.partner') + + def do_test_company_field(self, field): + # get a partner with a non-null company_id + ids = self.partner.search(self.cr, self.uid, [('company_id', '!=', False)], limit=1) + partner = self.partner.browse(self.cr, self.uid, ids[0]) + + # check reading related field + self.assertEqual(partner[field], partner.company_id) + + # check that search on related field is equivalent to original field + ids1 = self.partner.search(self.cr, self.uid, [('company_id', '=', partner.company_id.id)]) + ids2 = self.partner.search(self.cr, self.uid, [(field, '=', partner.company_id.id)]) + self.assertEqual(ids1, ids2) + + def test_1_single_related(self): + """ test a related field with a single indirection like fields.related('foo') """ + # add a related field test_related_company_id on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'single_related_company_id': fields.related('company_id', type='many2one', obj='res.company'), + }) + + self.do_test_company_field('single_related_company_id') + + # restore res.partner fields + self.partner._columns = old_columns + + def test_2_related_related(self): + """ test a related field referring to a related field """ + # add a related field on a related field on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'single_related_company_id': fields.related('company_id', type='many2one', obj='res.company'), + 'related_related_company_id': fields.related('single_related_company_id', type='many2one', obj='res.company'), + }) + + self.do_test_company_field('related_related_company_id') + + # restore res.partner fields + self.partner._columns = old_columns + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 8f8b5497d124fd553e6a44a21fca1eccca42d0f8 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 9 Mar 2012 17:15:47 +0100 Subject: [PATCH 02/28] [IMP] tests: add test on related fields bzr revid: rco@openerp.com-20120309161547-um53k5rqqts9flz6 --- openerp/tests/test_fields.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/openerp/tests/test_fields.py b/openerp/tests/test_fields.py index c049a43fc97..73f57ac8bbe 100644 --- a/openerp/tests/test_fields.py +++ b/openerp/tests/test_fields.py @@ -13,6 +13,29 @@ class TestRelatedField(common.TransactionCase): def setUp(self): super(TestRelatedField, self).setUp() self.partner = self.registry('res.partner') + self.company = self.registry('res.company') + + def test_0_related(self): + """ test an usual related field """ + # add a related field test_related_company_id on res.partner + old_columns = self.partner._columns + self.partner._columns = dict(old_columns) + self.partner._columns.update({ + 'related_company_partner_id': fields.related('company_id', 'partner_id', type='many2one', obj='res.partner'), + }) + + # find a company with a non-null partner_id + ids = self.company.search(self.cr, self.uid, [('partner_id', '!=', False)], limit=1) + id = ids[0] + + # find partners that satisfy [('partner_id.company_id', '=', id)] + company_ids = self.company.search(self.cr, self.uid, [('partner_id', '=', id)]) + partner_ids1 = self.partner.search(self.cr, self.uid, [('company_id', 'in', company_ids)]) + partner_ids2 = self.partner.search(self.cr, self.uid, [('related_company_partner_id', '=', id)]) + self.assertEqual(partner_ids1, partner_ids2) + + # restore res.partner fields + self.partner._columns = old_columns def do_test_company_field(self, field): # get a partner with a non-null company_id From 63702d6064d6dd457ccd82aa56ac44d375fe001c Mon Sep 17 00:00:00 2001 From: "Vidhin Mehta (OpenERP)" Date: Tue, 14 Aug 2012 14:20:41 +0530 Subject: [PATCH 03/28] [IMP]minor fix to view editor. bzr revid: vme@tinyerp.com-20120814085041-s0lkqzcnyks0ukdn --- addons/web_view_editor/static/src/css/view_editor.css | 4 ++++ addons/web_view_editor/static/src/js/view_editor.js | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/addons/web_view_editor/static/src/css/view_editor.css b/addons/web_view_editor/static/src/css/view_editor.css index e80e15a4c17..2f2b5860cf6 100644 --- a/addons/web_view_editor/static/src/css/view_editor.css +++ b/addons/web_view_editor/static/src/css/view_editor.css @@ -19,3 +19,7 @@ .openerp .oe_view_editor tr:hover { background-color: #ecebf2; } +.openerp .oe_view_editor_field a{ + font-size : 12px; + color : #404040; +} \ No newline at end of file diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js index cfdd5d6bfea..770d32b2e56 100644 --- a/addons/web_view_editor/static/src/js/view_editor.js +++ b/addons/web_view_editor/static/src/js/view_editor.js @@ -73,8 +73,7 @@ instance.web_view_editor.ViewEditor = instance.web.OldWidget.extend({ $.when(this.action_manager.do_action(action)).then(function() { var viewmanager = self.action_manager.inner_widget, controller = viewmanager.views[viewmanager.active_view].controller; - self.action_manager.appendTo(self.view_edit_dialog.$element); - self.action_manager.renderElement(self.view_edit_dialog); + self.action_manager.$element.appendTo(self.view_edit_dialog.$element); controller.on_loaded.add_last(function(){ $(controller.groups).bind({ 'selected': function(e, ids, records) { From 35e86bbe97f6c9ddc1d161bbbbcb3c3a770ec25f Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Mon, 29 Oct 2012 11:56:15 +0530 Subject: [PATCH 04/28] [IMP] hr_expense: improved view of form for total amount bzr revid: tpa@tinyerp.com-20121029062615-6yso6bkirdm1yjus --- addons/hr_expense/hr_expense_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index 1b8fd17dece..327a8ac3cd8 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -123,8 +123,8 @@ - - + + From ffc347d3aed24e8d88a33fdff940a42ef07b8812 Mon Sep 17 00:00:00 2001 From: "Turkesh Patel (Open ERP)" Date: Mon, 29 Oct 2012 12:44:09 +0530 Subject: [PATCH 05/28] [IMP] hr_holidays: add onchange on employee_id field to change department also. bzr revid: tpa@tinyerp.com-20121029071409-r8z0q8fko35gnsjy --- addons/hr_holidays/hr_holidays.py | 7 +++++++ addons/hr_holidays/hr_holidays_view.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 0977f3729b4..eb7b44b8a3d 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -182,6 +182,13 @@ class hr_holidays(osv.osv): } return result + def onchange_employee(self, cr, uid, ids, employee_id): + result = {'value': {'department_id': False}} + if employee_id: + employee = self.pool.get('hr.employee').browse(cr, uid, employee_id) + result['value'] = {'department_id': employee.department_id.id} + return result + # TODO: can be improved using resource calendar method def _get_number_of_days(self, date_from, date_to): """Returns a float equals to the timedelta between two dates given as string.""" diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 1808e216906..ea9a7fe3a66 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -115,7 +115,7 @@ - + From f95608ae892c1d17c99a05c10c87dd44fd7290ba Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Mon, 29 Oct 2012 14:04:14 +0530 Subject: [PATCH 06/28] [ADD]:Add onchange for contact from and leave request bzr revid: aja@tinyerp.com-20121029083414-4bw6i8ii72wctevk --- addons/hr_holidays/hr_holidays.py | 8 +++++++- addons/hr_holidays/hr_holidays_view.xml | 4 ++-- addons/hr_recruitment/hr_recruitment.py | 11 +++++++++++ addons/hr_recruitment/hr_recruitment_view.xml | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 0977f3729b4..636ee6ea9b3 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -199,7 +199,13 @@ class hr_holidays(osv.osv): raise osv.except_osv(_('Warning!'),_('You cannot delete a leave which is in %s state!')%(rec.state)) return super(hr_holidays, self).unlink(cr, uid, ids, context) - def onchange_date_from(self, cr, uid, ids, date_to, date_from): + def onchange_date_from(self, cr, uid, ids, date_from): + date_to = False + if date_from: + date_to = date_from + return {'value':{'date_to': date_to}} + + def onchange_date_to(self, cr, uid, ids, date_to, date_from): result = {} if date_to and date_from: diff_day = self._get_number_of_days(date_from, date_to) diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 1808e216906..89a526c9046 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -104,8 +104,8 @@