diff --git a/addons/account/account.py b/addons/account/account.py index 33b52b643ed..82957fc93d3 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -137,16 +137,27 @@ class account_account_type(osv.osv): _name = "account.account.type" _description = "Account Type" - def _get_current_report_type(self, cr, uid, ids, name, arg, context=None): + def _get_financial_report_ref(self, cr, uid, context=None): obj_data = self.pool.get('ir.model.data') obj_financial_report = self.pool.get('account.financial.report') + financial_report_ref = {} + for key, financial_report in [ + ('asset','account_financial_report_assets0'), + ('liability','account_financial_report_liability0'), + ('income','account_financial_report_income0'), + ('expense','account_financial_report_expense0'), + ]: + try: + financial_report_ref[key] = obj_financial_report.browse(cr, uid, + obj_data.get_object_reference(cr, uid, 'account', financial_report)[1], + context=context) + except ValueError: + pass + return financial_report_ref + + def _get_current_report_type(self, cr, uid, ids, name, arg, context=None): res = {} - financial_report_ref = { - 'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context), - 'liability': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_liability0')[1], context=context), - 'income': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_income0')[1], context=context), - 'expense': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_expense0')[1], context=context), - } + financial_report_ref = self._get_financial_report_ref(cr, uid, context=context) for record in self.browse(cr, uid, ids, context=context): res[record.id] = 'none' for key, financial_report in financial_report_ref.items(): @@ -157,15 +168,9 @@ class account_account_type(osv.osv): def _save_report_type(self, cr, uid, account_type_id, field_name, field_value, arg, context=None): field_value = field_value or 'none' - obj_data = self.pool.get('ir.model.data') obj_financial_report = self.pool.get('account.financial.report') #unlink if it exists somewhere in the financial reports related to BS or PL - financial_report_ref = { - 'asset': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_assets0')[1], context=context), - 'liability': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_liability0')[1], context=context), - 'income': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_income0')[1], context=context), - 'expense': obj_financial_report.browse(cr, uid, obj_data.get_object_reference(cr, uid, 'account','account_financial_report_expense0')[1], context=context), - } + financial_report_ref = self._get_financial_report_ref(cr, uid, context=context) for key, financial_report in financial_report_ref.items(): list_ids = [x.id for x in financial_report.account_type_ids] if account_type_id in list_ids: @@ -1258,6 +1263,10 @@ class account_move(osv.osv): return [('id', 'in', tuple(ids))] return [('id', '=', '0')] + def _get_move_from_lines(self, cr, uid, ids, context=None): + line_obj = self.pool.get('account.move.line') + return [line.move_id.id for line in line_obj.browse(cr, uid, ids, context=context)] + _columns = { 'name': fields.char('Number', size=64, required=True), 'ref': fields.char('Reference', size=64), @@ -1267,7 +1276,10 @@ class account_move(osv.osv): help='All manually created new journal entries are usually in the status \'Unposted\', but you can set the option to skip that status on the related journal. In that case, they will behave as journal entries automatically created by the system on document validation (invoices, bank statements...) and will be created in \'Posted\' status.'), 'line_id': fields.one2many('account.move.line', 'move_id', 'Entries', states={'posted':[('readonly',True)]}), 'to_check': fields.boolean('To Review', help='Check this box if you are unsure of that journal entry and if you want to note it as \'to be reviewed\' by an accounting expert.'), - 'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store=True), + 'partner_id': fields.related('line_id', 'partner_id', type="many2one", relation="res.partner", string="Partner", store={ + _name: (lambda self, cr,uid,ids,c: ids, ['line_id'], 10), + 'account.move.line': (_get_move_from_lines, ['partner_id'],10) + }), 'amount': fields.function(_amount_compute, string='Amount', digits_compute=dp.get_precision('Account'), type='float', fnct_search=_search_amount), 'date': fields.date('Date', required=True, states={'posted':[('readonly',True)]}, select=True), 'narration':fields.text('Internal Note'), @@ -1633,9 +1645,11 @@ class account_move(osv.osv): else: # We can't validate it (it's unbalanced) # Setting the lines as draft - obj_move_line.write(cr, uid, line_ids, { - 'state': 'draft' - }, context, check=False) + not_draft_line_ids = list(set(line_ids) - set(line_draft_ids)) + if not_draft_line_ids: + obj_move_line.write(cr, uid, not_draft_line_ids, { + 'state': 'draft' + }, context, check=False) # Create analytic lines for the valid moves for record in valid_moves: obj_move_line.create_analytic_lines(cr, uid, [line.id for line in record.line_id], context) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index bf1da5cb71b..42f3effd6f9 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1431,6 +1431,7 @@ class account_invoice_line(osv.osv): _name = "account.invoice.line" _description = "Invoice Line" + _order = "invoice_id,sequence,id" _columns = { 'name': fields.text('Description', required=True), 'origin': fields.char('Source Document', size=256, help="Reference of the document that produced this invoice."), @@ -1467,6 +1468,7 @@ class account_invoice_line(osv.osv): 'discount': 0.0, 'price_unit': _price_unit_default, 'account_id': _default_account_id, + 'sequence': 10, } def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index c71b97d5796..d56fe27759c 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -192,6 +192,7 @@ + @@ -250,7 +251,7 @@ - + @@ -392,7 +393,7 @@ - + - - + + diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 91c6d6608fd..4fae65917bf 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -413,7 +413,7 @@ - + @@ -1406,7 +1406,7 @@ - + diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 21ea2a85f7f..e518d8899b2 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -133,7 +133,7 @@ - + @@ -206,7 +206,7 @@ - + diff --git a/addons/account/project/wizard/account_analytic_chart_view.xml b/addons/account/project/wizard/account_analytic_chart_view.xml index 70769049002..50a13acef18 100644 --- a/addons/account/project/wizard/account_analytic_chart_view.xml +++ b/addons/account/project/wizard/account_analytic_chart_view.xml @@ -7,16 +7,16 @@ account.analytic.chart
-
-
+
+
diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml index 551265252cc..66959051ea4 100644 --- a/addons/account/report/account_entries_report_view.xml +++ b/addons/account/report/account_entries_report_view.xml @@ -92,7 +92,7 @@ - + diff --git a/addons/account/report/account_financial_report.py b/addons/account/report/account_financial_report.py index 864c4bbc7d1..2b1f5af4d68 100644 --- a/addons/account/report/account_financial_report.py +++ b/addons/account/report/account_financial_report.py @@ -38,6 +38,7 @@ class report_account_common(report_sxw.rml_parse, common_report_header): 'get_filter': self._get_filter, 'get_start_date':self._get_start_date, 'get_end_date':self._get_end_date, + 'get_target_move': self._get_target_move, }) self.context = context diff --git a/addons/account/report/account_financial_report.rml b/addons/account/report/account_financial_report.rml index 1ee8d5b1858..7949077e43f 100644 --- a/addons/account/report/account_financial_report.rml +++ b/addons/account/report/account_financial_report.rml @@ -166,11 +166,12 @@ - + Chart of Accounts Fiscal Year Filter By [[ get_filter(data)!='No Filters' and get_filter(data) ]] + Target Moves [[ get_account(data) or removeParentNode('para') ]] @@ -197,6 +198,10 @@ + + [[ get_target_move(data) ]] + + diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml index 5f38db5e71f..47ce75b4d61 100644 --- a/addons/account/report/account_invoice_report_view.xml +++ b/addons/account/report/account_invoice_report_view.xml @@ -71,7 +71,7 @@ - + diff --git a/addons/account/wizard/account_financial_report.py b/addons/account/wizard/account_financial_report.py index 2ce7118335a..48bdfd33081 100644 --- a/addons/account/wizard/account_financial_report.py +++ b/addons/account/wizard/account_financial_report.py @@ -54,7 +54,7 @@ class accounting_report(osv.osv_memory): 'target_move': 'posted', 'account_report_id': _get_account_report, } - + def _build_comparison_context(self, cr, uid, ids, data, context=None): if context is None: context = {} @@ -62,6 +62,7 @@ class accounting_report(osv.osv_memory): result['fiscalyear'] = 'fiscalyear_id_cmp' in data['form'] and data['form']['fiscalyear_id_cmp'] or False result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False result['chart_account_id'] = 'chart_account_id' in data['form'] and data['form']['chart_account_id'] or False + result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or '' if data['form']['filter_cmp'] == 'filter_date': result['date_from'] = data['form']['date_from_cmp'] result['date_to'] = data['form']['date_to_cmp'] @@ -86,7 +87,7 @@ class accounting_report(osv.osv_memory): return res def _print_report(self, cr, uid, ids, data, context=None): - data['form'].update(self.read(cr, uid, ids, ['date_from_cmp', 'debit_credit', 'date_to_cmp', 'fiscalyear_id_cmp', 'period_from_cmp', 'period_to_cmp', 'filter_cmp', 'account_report_id', 'enable_filter', 'label_filter'], context=context)[0]) + data['form'].update(self.read(cr, uid, ids, ['date_from_cmp', 'debit_credit', 'date_to_cmp', 'fiscalyear_id_cmp', 'period_from_cmp', 'period_to_cmp', 'filter_cmp', 'account_report_id', 'enable_filter', 'label_filter','target_move'], context=context)[0]) return { 'type': 'ir.actions.report.xml', 'report_name': 'account.financial.report', diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index 5be9ebc5c80..4b7a7fd5314 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -157,8 +157,8 @@ class account_invoice_refund(osv.osv_memory): for line in movelines: if line.account_id.id == inv.account_id.id: to_reconcile_ids[line.account_id.id] = [line.id] - if type(line.reconcile_id) != osv.orm.browse_null: - reconcile_obj.unlink(cr, uid, line.reconcile_id.id) + if line.reconcile_id: + line.reconcile_id.unlink() inv_obj.signal_invoice_open(cr, uid, [refund.id]) refund = inv_obj.browse(cr, uid, refund_id[0], context=context) for tmpline in refund.move_id.line_id: diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index b8dc562f3a0..6641c280765 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -154,6 +154,7 @@ class account_common_report(osv.osv_memory): result['fiscalyear'] = 'fiscalyear_id' in data['form'] and data['form']['fiscalyear_id'] or False result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False result['chart_account_id'] = 'chart_account_id' in data['form'] and data['form']['chart_account_id'] or False + result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or '' if data['form']['filter'] == 'filter_date': result['date_from'] = data['form']['date_from'] result['date_to'] = data['form']['date_to'] diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index cd4be740815..8e08f90eb02 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -239,8 +239,8 @@ - - + + diff --git a/addons/account_analytic_default/account_analytic_default_view.xml b/addons/account_analytic_default/account_analytic_default_view.xml index 889563b3bcb..8ff323e45c7 100644 --- a/addons/account_analytic_default/account_analytic_default_view.xml +++ b/addons/account_analytic_default/account_analytic_default_view.xml @@ -29,7 +29,7 @@ - + diff --git a/addons/account_asset/report/account_asset_report_view.xml b/addons/account_asset/report/account_asset_report_view.xml index c772c6e4103..c0055773bea 100644 --- a/addons/account_asset/report/account_asset_report_view.xml +++ b/addons/account_asset/report/account_asset_report_view.xml @@ -56,9 +56,9 @@ - - diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index 237406ff657..71358736110 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -111,7 +111,7 @@ - + diff --git a/addons/account_followup/report/account_followup_report.xml b/addons/account_followup/report/account_followup_report.xml index b7c38e89f5e..7f9ea48010b 100644 --- a/addons/account_followup/report/account_followup_report.xml +++ b/addons/account_followup/report/account_followup_report.xml @@ -50,7 +50,7 @@ - + diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml index aa52d1d443e..982de455063 100644 --- a/addons/account_payment/account_payment_view.xml +++ b/addons/account_payment/account_payment_view.xml @@ -79,7 +79,7 @@ - + diff --git a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml index e2be4939be8..d0f696c2f7e 100644 --- a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml +++ b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml @@ -63,7 +63,7 @@ - + diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py index df852181709..14c8f712e81 100644 --- a/addons/analytic/analytic.py +++ b/addons/analytic/analytic.py @@ -295,10 +295,6 @@ class account_analytic_account(osv.osv): args=[] if context is None: context={} - if context.get('current_model') == 'project.project': - project_obj = self.pool.get("account.analytic.account") - project_ids = project_obj.search(cr, uid, args) - return self.name_get(cr, uid, project_ids, context=context) if name: account_ids = self.search(cr, uid, [('code', '=', name)] + args, limit=limit, context=context) if not account_ids: diff --git a/addons/analytic/analytic_view.xml b/addons/analytic/analytic_view.xml index 0faca841a0f..9a99552be13 100644 --- a/addons/analytic/analytic_view.xml +++ b/addons/analytic/analytic_view.xml @@ -22,7 +22,7 @@ - + diff --git a/addons/analytic_user_function/analytic_user_function_view.xml b/addons/analytic_user_function/analytic_user_function_view.xml index 69e1add13bb..ca148175c5a 100644 --- a/addons/analytic_user_function/analytic_user_function_view.xml +++ b/addons/analytic_user_function/analytic_user_function_view.xml @@ -8,7 +8,7 @@ analytic.user.funct.grid - + @@ -22,7 +22,7 @@
- + @@ -124,7 +124,7 @@ - + diff --git a/addons/audittrail/audittrail_view.xml b/addons/audittrail/audittrail_view.xml index 5d5bdcc6c21..5ea15ab557b 100644 --- a/addons/audittrail/audittrail_view.xml +++ b/addons/audittrail/audittrail_view.xml @@ -166,7 +166,7 @@ - + diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 64b6f01d05c..d4cd1e083b4 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -578,8 +578,7 @@ property or property parameter."), def do_accept(self, cr, uid, ids, context=None, *args): """ - Update state of invitation as Accepted and if the invited user is other - then event user it will make a copy of this event for invited user. + Marks event invitation as Accepted. @param cr: the current row, from the database cursor @param uid: the current user's ID for security checks @param ids: list of calendar attendee's IDs @@ -589,15 +588,7 @@ property or property parameter."), if context is None: context = {} - for vals in self.browse(cr, uid, ids, context=context): - if vals.ref and vals.ref.user_id: - mod_obj = self.pool[vals.ref._name] - res=mod_obj.read(cr,uid,[vals.ref.id],['duration','class'],context) - defaults = {'user_id': vals.user_id.id, 'organizer_id': vals.ref.user_id.id,'duration':res[0]['duration'],'class':res[0]['class']} - mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context) - self.write(cr, uid, vals.id, {'state': 'accepted'}, context) - - return True + return self.write(cr, uid, ids, {'state': 'accepted'}, context) def do_decline(self, cr, uid, ids, context=None, *args): """ @@ -1126,12 +1117,14 @@ rule or repeating pattern of time to exclude from the recurring rule."), for partner in event.partner_ids: if partner.id in attendees: continue + local_context = context.copy() + local_context.pop('default_state', None) att_id = self.pool.get('calendar.attendee').create(cr, uid, { 'partner_id': partner.id, 'user_id': partner.user_ids and partner.user_ids[0].id or False, 'ref': self._name+','+str(event.id), 'email': partner.email - }, context=context) + }, context=local_context) if partner.email: mail_to = mail_to + " " + partner.email self.write(cr, uid, [event.id], { diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml index 92ffad4be9a..3ef2c8f59ce 100644 --- a/addons/base_calendar/base_calendar_view.xml +++ b/addons/base_calendar/base_calendar_view.xml @@ -265,7 +265,7 @@ - + diff --git a/addons/base_calendar/crm_meeting_view.xml b/addons/base_calendar/crm_meeting_view.xml index d9b659b91fa..2c3bb40c9c2 100644 --- a/addons/base_calendar/crm_meeting_view.xml +++ b/addons/base_calendar/crm_meeting_view.xml @@ -68,7 +68,7 @@ on_change="onchange_dates(date,False,date_deadline)"/> - + diff --git a/addons/base_crypt/i18n/da.po b/addons/base_crypt/i18n/da.po index 55305f7647c..b71b72e7bb9 100644 --- a/addons/base_crypt/i18n/da.po +++ b/addons/base_crypt/i18n/da.po @@ -8,16 +8,16 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-03 16:03+0000\n" -"PO-Revision-Date: 2012-01-27 08:38+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2013-09-03 16:43+0000\n" +"Last-Translator: Niels L \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-09-03 05:44+0000\n" +"X-Launchpad-Export-Date: 2013-09-04 04:40+0000\n" "X-Generator: Launchpad (build 16753)\n" #. module: base_crypt #: model:ir.model,name:base_crypt.model_res_users msgid "Users" -msgstr "" +msgstr "Brugere" diff --git a/addons/base_gengo/__openerp__.py b/addons/base_gengo/__openerp__.py index aa1be78321f..3f1b5957fec 100644 --- a/addons/base_gengo/__openerp__.py +++ b/addons/base_gengo/__openerp__.py @@ -36,13 +36,13 @@ This wizard will activate the CRON job and the Scheduler and will start the auto 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'depends': ['base'], - 'init_xml': ['gengo_sync_schedular_data.xml'], - 'update_xml': [ + 'data': [ + 'gengo_sync_schedular_data.xml', 'ir_translation.xml', 'res_company_view.xml', 'wizard/base_gengo_translations_view.xml', - ], - 'demo_xml': [], + ], + 'demo': [], 'test': [], 'installable': True, 'auto_install': False, diff --git a/addons/base_gengo/gengo_sync_schedular_data.xml b/addons/base_gengo/gengo_sync_schedular_data.xml index 823ca8f14db..baf2a639cff 100644 --- a/addons/base_gengo/gengo_sync_schedular_data.xml +++ b/addons/base_gengo/gengo_sync_schedular_data.xml @@ -1,6 +1,6 @@ - + Gengo Sync Translation (Response) diff --git a/addons/base_import/__openerp__.py b/addons/base_import/__openerp__.py index eb8b4561c7e..e044930a242 100644 --- a/addons/base_import/__openerp__.py +++ b/addons/base_import/__openerp__.py @@ -26,7 +26,7 @@ Re-implement openerp's file import system: 'author': 'OpenERP SA', 'depends': ['web'], 'installable': True, - 'auto_install': False, + 'auto_install': True, 'data': [ 'security/ir.model.access.csv', ], diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 04a17b9dbc0..932fa998d0a 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -160,7 +160,7 @@ class crm_case_section(osv.osv): 'note': fields.text('Description'), 'working_hours': fields.float('Working Hours', digits=(16, 2)), 'stage_ids': fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'), - 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, + 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="restrict", required=True, help="The email address associated with this team. New emails received will automatically " "create new leads assigned to the team."), 'color': fields.integer('Color Index'), diff --git a/addons/crm/crm_case_section_view.xml b/addons/crm/crm_case_section_view.xml index c957311b47f..24862a39e89 100644 --- a/addons/crm/crm_case_section_view.xml +++ b/addons/crm/crm_case_section_view.xml @@ -174,7 +174,7 @@ - + diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index c4e2cbdc91d..e49ae818cae 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -634,7 +634,7 @@ class crm_lead(format_address, osv.osv): # Merge notifications about loss of information opportunities = [highest] opportunities.extend(opportunities_rest) - self._merge_notify(cr, uid, highest, opportunities, context=context) + self._merge_notify(cr, uid, highest.id, opportunities, context=context) # Check if the stage is in the stages of the sales team. If not, assign the stage with the lowest sequence if merged_data.get('section_id'): section_stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('section_ids', 'in', merged_data['section_id']), ('type', '=', merged_data.get('type'))], order='sequence', context=context) diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 849cecaac85..d885627a2c2 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -145,7 +145,7 @@ + context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'base.group_sale_salesman_all_leads'] }"/>