From f7fe753d074160e6c21cc5b26f0d21bafb07db82 Mon Sep 17 00:00:00 2001 From: tpa-odoo Date: Tue, 20 May 2014 17:00:15 +0530 Subject: [PATCH 01/36] [IMP] unlink ir.action.todo which are related to actions which will be deleted. --- openerp/addons/base/ir/ir_actions.py | 7 +++++++ openerp/addons/base/ir/ir_ui_menu.py | 10 +++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index 57f24c8864a..3fb42ac75c8 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -57,6 +57,13 @@ class actions(osv.osv): 'usage': lambda *a: False, } + def unlink(self, cr, uid, ids, context=None): + """unlink ir.action.todo which are related to actions which will be deleted. + NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually.""" + todo_obj = self.pool.get('ir.actions.todo') + todo_ids = todo_obj.search(cr, uid, [('action_id', 'in', ids)], context=context) + todo_obj.unlink(cr, uid, todo_ids, context=context) + return super(actions, self).unlink(cr, uid, ids, context=context) class ir_actions_report_xml(osv.osv): diff --git a/openerp/addons/base/ir/ir_ui_menu.py b/openerp/addons/base/ir/ir_ui_menu.py index f01ce54bfc2..957e0903013 100644 --- a/openerp/addons/base/ir/ir_ui_menu.py +++ b/openerp/addons/base/ir/ir_ui_menu.py @@ -312,9 +312,13 @@ class ir_ui_menu(osv.osv): menu_ref = [menu_ref] model_data_obj = self.pool.get('ir.model.data') for menu_data in menu_ref: - model, id = model_data_obj.get_object_reference(cr, uid, menu_data.split('.')[0], menu_data.split('.')[1]) - if (model == 'ir.ui.menu'): - menu_ids.add(id) + try: + model, id = model_data_obj.get_object_reference(cr, uid, menu_data.split('.')[0], menu_data.split('.')[1]) + if (model == 'ir.ui.menu'): + menu_ids.add(id) + except Exception: + pass + menu_ids = list(menu_ids) for menu in self.browse(cr, uid, menu_ids, context=context): From 93f66e98e2ba94ae63d7b2f6d23e523a31519f38 Mon Sep 17 00:00:00 2001 From: Rucha Dave Date: Fri, 30 May 2014 16:02:35 +0530 Subject: [PATCH 02/36] [IMP] update value --- addons/crm/crm_lead.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index a209bba4890..6afc87f4b82 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -305,7 +305,8 @@ class crm_lead(format_address, osv.osv): if partner_id: partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) values = { - 'partner_name': partner.name, + 'partner_name': partner.parent_id.name if partner.parent_id else partner.name, + 'contact_name': partner.name if partner.parent_id else False, 'street': partner.street, 'street2': partner.street2, 'city': partner.city, From d1857e0f28ce9a93c205098bea77529ba79d32d2 Mon Sep 17 00:00:00 2001 From: Rucha Dave Date: Fri, 30 May 2014 17:27:37 +0530 Subject: [PATCH 03/36] [IMP] claim form --- addons/crm_claim/crm_claim_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index b6d43c4b140..fe9f39df41c 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -151,7 +151,7 @@ - + From 34097b4f88f6a0f8fb374cccebd4bfeed2e61f84 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 11:46:56 +0200 Subject: [PATCH 04/36] [IMP] mandate a variable name in foreach --- openerp/addons/base/ir/ir_qweb.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 11c2432a874..01ed5bc32e4 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -355,32 +355,29 @@ class QWeb(orm.AbstractModel): expr = template_attributes["foreach"] enum = self.eval_object(expr, qwebcontext) if enum is not None: - var = template_attributes.get('as', expr).replace('.', '_') + varname = template_attributes['as'].replace('.', '_') copy_qwebcontext = qwebcontext.copy() size = -1 if isinstance(enum, (list, tuple)): size = len(enum) elif hasattr(enum, 'count'): size = enum.count() - copy_qwebcontext["%s_size" % var] = size - copy_qwebcontext["%s_all" % var] = enum + copy_qwebcontext["%s_size" % varname] = size + copy_qwebcontext["%s_all" % varname] = enum index = 0 ru = [] for i in enum: - copy_qwebcontext["%s_value" % var] = i - copy_qwebcontext["%s_index" % var] = index - copy_qwebcontext["%s_first" % var] = index == 0 - copy_qwebcontext["%s_even" % var] = index % 2 - copy_qwebcontext["%s_odd" % var] = (index + 1) % 2 - copy_qwebcontext["%s_last" % var] = index + 1 == size + copy_qwebcontext[varname] = i + copy_qwebcontext["%s_value" % varname] = i + copy_qwebcontext["%s_index" % varname] = index + copy_qwebcontext["%s_first" % varname] = index == 0 + copy_qwebcontext["%s_even" % varname] = index % 2 + copy_qwebcontext["%s_odd" % varname] = (index + 1) % 2 + copy_qwebcontext["%s_last" % varname] = index + 1 == size if index % 2: - copy_qwebcontext["%s_parity" % var] = 'odd' + copy_qwebcontext["%s_parity" % varname] = 'odd' else: - copy_qwebcontext["%s_parity" % var] = 'even' - if 'as' in template_attributes: - copy_qwebcontext[var] = i - elif isinstance(i, dict): - copy_qwebcontext.update(i) + copy_qwebcontext["%s_parity" % varname] = 'even' ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) index += 1 return "".join(ru) From 0b3abaf4ceb6ef73d8d63205a66baaf15d05fa90 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 12:01:04 +0200 Subject: [PATCH 05/36] [FIX] _even/_odd were reversed, also some reformatting thing --- openerp/addons/base/ir/ir_qweb.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 01ed5bc32e4..38ad5c19393 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -366,18 +366,26 @@ class QWeb(orm.AbstractModel): copy_qwebcontext["%s_all" % varname] = enum index = 0 ru = [] - for i in enum: - copy_qwebcontext[varname] = i - copy_qwebcontext["%s_value" % varname] = i - copy_qwebcontext["%s_index" % varname] = index - copy_qwebcontext["%s_first" % varname] = index == 0 - copy_qwebcontext["%s_even" % varname] = index % 2 - copy_qwebcontext["%s_odd" % varname] = (index + 1) % 2 - copy_qwebcontext["%s_last" % varname] = index + 1 == size + for item in enum: + copy_qwebcontext.update({ + varname: item, + '%s_value' % varname: item, + '%s_index' % varname: index, + '%s_first' % varname: index == 0, + '%s_last' % varname: index + 1 == size, + }) if index % 2: - copy_qwebcontext["%s_parity" % varname] = 'odd' + copy_qwebcontext.update({ + '%s_parity' % varname: 'odd', + '%s_even' % varname: False, + '%s_odd' % varname: True, + }) else: - copy_qwebcontext["%s_parity" % varname] = 'even' + copy_qwebcontext.update({ + '%s_parity' % varname: 'even', + '%s_even' % varname: True, + '%s_odd' % varname: False, + }) ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) index += 1 return "".join(ru) From 03b75477ecc342c31ad3de3b1a719560243befcb Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 12:01:44 +0200 Subject: [PATCH 06/36] [IMP] use enumerate instead of explicit index thing --- openerp/addons/base/ir/ir_qweb.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 38ad5c19393..1fe1abd35eb 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -364,9 +364,8 @@ class QWeb(orm.AbstractModel): size = enum.count() copy_qwebcontext["%s_size" % varname] = size copy_qwebcontext["%s_all" % varname] = enum - index = 0 ru = [] - for item in enum: + for index, item in enumerate(enum): copy_qwebcontext.update({ varname: item, '%s_value' % varname: item, @@ -387,7 +386,6 @@ class QWeb(orm.AbstractModel): '%s_odd' % varname: False, }) ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) - index += 1 return "".join(ru) else: template = qwebcontext.get('__template__') From 7f0db3c257e097c36ae9c8d32c69bf3d5c3ca795 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 12:03:16 +0200 Subject: [PATCH 07/36] [IMP] use Sized for iterable size and remove support for count --- openerp/addons/base/ir/ir_qweb.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index 1fe1abd35eb..d74ba0566f0 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -358,10 +358,8 @@ class QWeb(orm.AbstractModel): varname = template_attributes['as'].replace('.', '_') copy_qwebcontext = qwebcontext.copy() size = -1 - if isinstance(enum, (list, tuple)): + if isinstance(enum, collections.Sized): size = len(enum) - elif hasattr(enum, 'count'): - size = enum.count() copy_qwebcontext["%s_size" % varname] = size copy_qwebcontext["%s_all" % varname] = enum ru = [] From 0de6710c3c43db55aad94bfb4a59a1f87f4436b4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 12:05:24 +0200 Subject: [PATCH 08/36] [IMP] guard for None enum, remove 1 level of indent --- openerp/addons/base/ir/ir_qweb.py | 64 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index d74ba0566f0..a7183eacc7a 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -354,41 +354,41 @@ class QWeb(orm.AbstractModel): def render_tag_foreach(self, element, template_attributes, generated_attributes, qwebcontext): expr = template_attributes["foreach"] enum = self.eval_object(expr, qwebcontext) - if enum is not None: - varname = template_attributes['as'].replace('.', '_') - copy_qwebcontext = qwebcontext.copy() - size = -1 - if isinstance(enum, collections.Sized): - size = len(enum) - copy_qwebcontext["%s_size" % varname] = size - copy_qwebcontext["%s_all" % varname] = enum - ru = [] - for index, item in enumerate(enum): - copy_qwebcontext.update({ - varname: item, - '%s_value' % varname: item, - '%s_index' % varname: index, - '%s_first' % varname: index == 0, - '%s_last' % varname: index + 1 == size, - }) - if index % 2: - copy_qwebcontext.update({ - '%s_parity' % varname: 'odd', - '%s_even' % varname: False, - '%s_odd' % varname: True, - }) - else: - copy_qwebcontext.update({ - '%s_parity' % varname: 'even', - '%s_even' % varname: True, - '%s_odd' % varname: False, - }) - ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) - return "".join(ru) - else: + if enum is None: template = qwebcontext.get('__template__') raise QWebException("foreach enumerator %r is not defined while rendering template %r" % (expr, template), template=template) + varname = template_attributes['as'].replace('.', '_') + copy_qwebcontext = qwebcontext.copy() + size = -1 + if isinstance(enum, collections.Sized): + size = len(enum) + copy_qwebcontext["%s_size" % varname] = size + copy_qwebcontext["%s_all" % varname] = enum + ru = [] + for index, item in enumerate(enum): + copy_qwebcontext.update({ + varname: item, + '%s_value' % varname: item, + '%s_index' % varname: index, + '%s_first' % varname: index == 0, + '%s_last' % varname: index + 1 == size, + }) + if index % 2: + copy_qwebcontext.update({ + '%s_parity' % varname: 'odd', + '%s_even' % varname: False, + '%s_odd' % varname: True, + }) + else: + copy_qwebcontext.update({ + '%s_parity' % varname: 'even', + '%s_even' % varname: True, + '%s_odd' % varname: False, + }) + ru.append(self.render_element(element, template_attributes, generated_attributes, copy_qwebcontext)) + return "".join(ru) + def render_tag_if(self, element, template_attributes, generated_attributes, qwebcontext): if self.eval_bool(template_attributes["if"], qwebcontext): return self.render_element(element, template_attributes, generated_attributes, qwebcontext) From fcb82dc5f1cc4c81dabd2f0be318d4774a630e54 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 5 Jun 2014 13:10:48 +0200 Subject: [PATCH 09/36] [IMP] add XID to view name in Ace editor dropdown When looking for template bit to override or alter (in-core) through the Ace editor, displaying only the name is a pain: - the name generally sucks diseased donkey balls - having to go through the code to find out what the template's XID is is a waste of time --- addons/website/static/src/js/website.ace.js | 25 ++++++++++----------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js index 27e5cd60e62..e1c45065c33 100644 --- a/addons/website/static/src/js/website.ace.js +++ b/addons/website/static/src/js/website.ace.js @@ -65,12 +65,13 @@ website.ace.ViewOption = openerp.Widget.extend({ template: 'website.ace_view_option', init: function (parent, options) { - var indent = "- "; this.view_id = options.id; this.view_name = options.name; - for (var i = 0; i Date: Thu, 5 Jun 2014 17:49:08 +0200 Subject: [PATCH 10/36] [REM] python-qweb support for as-less foreach --- addons/website/views/website_templates.xml | 30 ++++++++++++------- addons/website_event/views/website_event.xml | 17 ++++++----- .../views/website_membership.xml | 8 ++--- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index f6f9c475f57..253424b9401 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -428,29 +428,37 @@ - - + + - - diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index 15bb778ab0b..774d38381fb 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -162,10 +162,11 @@
-
+
- + + + -