diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 0cfc8cbedca..07369c02bb2 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -89,13 +89,11 @@ class crm_lead(base_stage, format_address, osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('section_id'): - ctx['default_section_id'] = vals['section_id'] - if vals.get('type'): - ctx['default_type'] = vals['type'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + if vals.get('type') and not context.get('default_type'): + context['default_type'] = vals.get('type') + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) return super(crm_lead, self).create(cr, uid, vals, context=create_context) @@ -362,12 +360,11 @@ class crm_lead(base_stage, format_address, osv.osv): def on_change_user(self, cr, uid, ids, user_id, context=None): """ When changing the user, also set a section_id or restrict section id to the ones user_id is member of. """ - section_id = False if user_id: section_ids = self.pool.get('crm.case.section').search(cr, uid, ['|', ('user_id', '=', user_id), ('member_ids', '=', user_id)], context=context) if section_ids: - section_id = section_ids[0] - return {'value': {'section_id': section_id}} + return {'value': {'section_id': section_ids[0]}} + return {'value': {}} def _check(self, cr, uid, ids=False, context=None): """ Override of the base.stage method. diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index daca2188a2b..6dfc0869947 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -240,7 +240,7 @@ class hr_applicant(base_stage, osv.Model): _defaults = { 'active': lambda *a: 1, - 'user_id': lambda s, cr, uid, c: uid, + 'user_id': lambda s, cr, uid, c: uid, 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c), @@ -253,13 +253,11 @@ class hr_applicant(base_stage, osv.Model): } def onchange_job(self, cr, uid, ids, job, context=None): - result = {} - if job: - job_obj = self.pool.get('hr.job') - result['department_id'] = job_obj.browse(cr, uid, job, context=context).department_id.id - return {'value': result} - return {'value': {'department_id': False}} + job_record = self.pool.get('hr.job').browse(cr, uid, job, context=context) + if job_record and job_record.department_id: + return {'value': {'department_id': job_record.department_id.id}} + return {} def onchange_department_id(self, cr, uid, ids, department_id=False, context=None): obj_recru_stage = self.pool.get('hr.recruitment.stage') @@ -401,6 +399,11 @@ class hr_applicant(base_stage, osv.Model): return super(hr_applicant, self).message_update(cr, uid, ids, msg, update_vals=update_vals, context=context) def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('department_id') and not context.get('default_department_id'): + context['default_department_id'] = vals.get('department_id') + obj_id = super(hr_applicant, self).create(cr, uid, vals, context=context) applicant = self.browse(cr, uid, obj_id, context=context) if applicant.job_id: diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index 0d3d1ab4be1..98ebc7969fe 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -186,6 +186,7 @@ + diff --git a/addons/project/project.py b/addons/project/project.py index 4dd50861509..10288f0792b 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -584,6 +584,15 @@ class task(base_stage, osv.osv): }, } + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + partner = self.pool.get('project.project').browse(cr, uid, project_id, context=context).partner_id + if partner: + return partner.id + return super(task, self)._get_default_partner(cr, uid, context=context) + def _get_default_project_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return (self._resolve_project_id_from_context(cr, uid, context=context) or False) @@ -598,7 +607,8 @@ class task(base_stage, osv.osv): context key, or None if it cannot be resolved to a single project. """ - if context is None: context = {} + if context is None: + context = {} if type(context.get('default_project_id')) in (int, long): return context['default_project_id'] if isinstance(context.get('default_project_id'), basestring): @@ -679,13 +689,11 @@ class task(base_stage, osv.osv): def onchange_planned(self, cr, uid, ids, planned=0.0, effective=0.0): return {'value':{'remaining_hours': planned - effective}} - def onchange_project(self, cr, uid, id, project_id): - if not project_id: - return {} - data = self.pool.get('project.project').browse(cr, uid, [project_id]) - partner_id=data and data[0].partner_id - if partner_id: - return {'value':{'partner_id':partner_id.id}} + def onchange_project(self, cr, uid, id, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} def duplicate_task(self, cr, uid, map_ids, context=None): @@ -808,8 +816,9 @@ class task(base_stage, osv.osv): 'progress': 0, 'sequence': 10, 'active': True, - 'user_id': lambda obj, cr, uid, context: uid, - 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=c), + 'user_id': lambda obj, cr, uid, ctx=None: uid, + 'company_id': lambda self, cr, uid, ctx=None: self.pool.get('res.company')._company_default_get(cr, uid, 'project.task', context=ctx), + 'partner_id': lambda self, cr, uid, ctx=None: self._get_default_partner(cr, uid, context=ctx), } _order = "priority, sequence, date_start, name, id" @@ -1103,11 +1112,9 @@ class task(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('project_id'): - ctx['default_project_id'] = vals['project_id'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) task_id = super(task, self).create(cr, uid, vals, context=create_context) diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 1e91371091e..7bdaf8c9581 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -65,15 +65,22 @@ class project_issue(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): if context is None: context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('project_id'): - ctx['default_project_id'] = vals['project_id'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) + if vals.get('project_id') and not context.get('default_project_id'): + context['default_project_id'] = vals.get('project_id') + # context: no_log, because subtype already handle this create_context = dict(context, mail_create_nolog=True) return super(project_issue, self).create(cr, uid, vals, context=create_context) + def _get_default_partner(self, cr, uid, context=None): + """ Override of base_stage to add project specific behavior """ + project_id = self._get_default_project_id(cr, uid, context) + if project_id: + partner = self.pool.get('project.project').browse(cr, uid, project_id, context=context).partner_id + if partner: + return partner.id + return super(project_issue, self)._get_default_partner(cr, uid, context=context) + def _get_default_project_id(self, cr, uid, context=None): """ Gives default project by checking if present in the context """ return self._resolve_project_id_from_context(cr, uid, context=context) @@ -215,6 +222,10 @@ class project_issue(base_stage, osv.osv): return res def on_change_project(self, cr, uid, ids, project_id, context=None): + if project_id: + project = self.pool.get('project.project').browse(cr, uid, project_id, context=context) + if project and project.partner_id: + return {'value': {'partner_id': project.partner_id.id}} return {} def _get_issue_task(self, cr, uid, ids, context=None): @@ -309,6 +320,7 @@ class project_issue(base_stage, osv.osv): 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c), 'priority': crm.AVAILABLE_PRIORITIES[2][0], 'kanban_state': 'normal', + 'user_id': lambda obj, cr, uid, context: uid, } _group_by_full = {