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 = {