diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 330bbb1fc9b..cca195a1539 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -102,6 +102,7 @@ class crm_case_section(osv.osv): """ Model for sales teams. """ _name = "crm.case.section" _inherits = {'mail.alias': 'alias_id'} + _inherit = "mail.thread" _description = "Sales Teams" _order = "complete_name" diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index d8b7fb58e49..d3f7e1d77ef 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -277,6 +277,10 @@ class crm_lead(base_stage, format_address, osv.osv): def create(self, cr, uid, vals, context=None): obj_id = super(crm_lead, self).create(cr, uid, vals, context) + section_id = self.browse(cr, uid, obj_id, context=context).section_id + if section_id: + followers = [follow.id for follow in section_id.message_follower_ids] + self.message_subscribe(cr, uid, [obj_id], followers, context=context) self.create_send_note(cr, uid, [obj_id], context=context) return obj_id @@ -790,7 +794,12 @@ class crm_lead(base_stage, format_address, osv.osv): stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) if stage.on_change: vals['probability'] = stage.probability - return super(crm_lead,self).write(cr, uid, ids, vals, context) + if vals.get('section_id'): + section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context) + if section_id: + vals.setdefault('message_follower_ids', []) + vals['message_follower_ids'] += [(4, follower.id) for follower in section_id.message_follower_ids] + return super(crm_lead,self).write(cr, uid, ids, vals, context) # ---------------------------------------- # Mail Gateway diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml index df2177a51fe..1da78e50843 100644 --- a/addons/crm/crm_view.xml +++ b/addons/crm/crm_view.xml @@ -115,6 +115,10 @@ +
+ + +
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py index 3508dc36d49..d0da22c5681 100644 --- a/addons/hr_evaluation/hr_evaluation.py +++ b/addons/hr_evaluation/hr_evaluation.py @@ -141,6 +141,7 @@ hr_employee() class hr_evaluation(osv.osv): _name = "hr_evaluation.evaluation" + _inherit = "mail.thread" _description = "Employee Appraisal" _rec_name = 'employee_id' _columns = { @@ -242,8 +243,10 @@ class hr_evaluation(osv.osv): def button_final_validation(self, cr, uid, ids, context=None): request_obj = self.pool.get('hr.evaluation.interview') self.write(cr, uid, ids, {'state':'progress'}, context=context) - for id in self.browse(cr, uid, ids, context=context): - if len(id.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', id.id),('state', 'in', ['done','cancel'])], context=context)): + for evaluation in self.browse(cr, uid, ids, context=context): + if evaluation.employee_id and evaluation.employee_id.parent_id and evaluation.employee_id.parent_id.user_id: + self.message_subscribe_users(cr, uid, [evaluation.id], user_ids=[evaluation.employee_id.parent_id.user_id.id], context=context) + if len(evaluation.survey_request_ids) != len(request_obj.search(cr, uid, [('evaluation_id', '=', evaluation.id),('state', 'in', ['done','cancel'])], context=context)): raise osv.except_osv(_('Warning!'),_("You cannot change state, because some appraisal(s) are in waiting answer or draft state.")) return True @@ -263,6 +266,10 @@ class hr_evaluation(osv.osv): return True def write(self, cr, uid, ids, vals, context=None): + if vals.get('employee_id'): + employee_id = self.pool.get('hr.employee').browse(cr, uid, vals.get('employee_id'), context=context) + if employee_id.parent_id and employee_id.parent_id.user_id: + vals['message_follower_ids'] = [(4, employee_id.parent_id.user_id.partner_id.id)] if 'date' in vals: new_vals = {'date_deadline': vals.get('date')} obj_hr_eval_iterview = self.pool.get('hr.evaluation.interview') diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index 2f3deae7b60..ca90e98e516 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -209,6 +209,10 @@ +
+ + +
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py index 83f986e59cc..91dc44fed61 100644 --- a/addons/hr_expense/hr_expense.py +++ b/addons/hr_expense/hr_expense.py @@ -118,6 +118,9 @@ class hr_expense_expense(osv.osv): return {'value': {'department_id': department_id, 'company_id': company_id}} def expense_confirm(self, cr, uid, ids, *args): + for expense in self.browse(cr, uid, ids): + if expense.employee_id and expense.employee_id.parent_id.user_id: + self.message_subscribe_users(cr, uid, [expense.id], user_ids=[expense.employee_id.parent_id.user_id.id]) self.write(cr, uid, ids, { 'state':'confirm', 'date_confirm': time.strftime('%Y-%m-%d') diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 759170224bd..76d4e42818a 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -303,7 +303,7 @@ class hr_holidays(osv.osv): self.check_holidays(cr, uid, ids, context=context) for record in self.browse(cr, uid, ids, context=context): if record.employee_id and record.employee_id.parent_id and record.employee_id.parent_id.user_id: - self.message_subscribe(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context) + self.message_subscribe_users(cr, uid, [record.id], user_ids=[record.employee_id.parent_id.user_id.id], context=context) self.holidays_confirm_notificate(cr, uid, ids, context=context) return self.write(cr, uid, ids, {'state':'confirm'}) diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py index fcdbfda0667..13c11cf72c7 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py @@ -103,6 +103,7 @@ class one2many_mod(fields.one2many): class hr_timesheet_sheet(osv.osv): _name = "hr_timesheet_sheet.sheet" + _inherit = "mail.thread" _table = 'hr_timesheet_sheet_sheet' _order = "id desc" _description="Timesheet" @@ -265,6 +266,8 @@ class hr_timesheet_sheet(osv.osv): def button_confirm(self, cr, uid, ids, context=None): for sheet in self.browse(cr, uid, ids, context=context): + if sheet.employee_id and sheet.employee_id.parent_id and sheet.employee_id.parent_id.user_id: + self.message_subscribe_users(cr, uid, [sheet.id], user_ids=[sheet.employee_id.parent_id.user_id.id], context=context) self.check_employee_attendance_state(cr, uid, sheet.id, context=context) di = sheet.user_id.company_id.timesheet_max_difference if (abs(sheet.total_difference) < di) or not di: diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml index 2d6930b85d1..9a7416464af 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml @@ -142,6 +142,10 @@ +
+ + +
diff --git a/addons/mail/static/src/js/mail_followers.js b/addons/mail/static/src/js/mail_followers.js index cf33bd64640..d1dd9f89fb7 100644 --- a/addons/mail/static/src/js/mail_followers.js +++ b/addons/mail/static/src/js/mail_followers.js @@ -26,6 +26,8 @@ openerp_mail_followers = function(session, mail) { this._super.apply(this, arguments); this.options.image = this.node.attrs.image || 'image_small'; this.options.title = this.node.attrs.title || 'Followers'; + this.options.context = this.node.attrs.context; + this.options.comment = this.node.attrs.help || false; this.ds_model = new session.web.DataSetSearch(this, this.view.model); this.ds_follow = new session.web.DataSetSearch(this, this.field.relation); }, diff --git a/addons/mail/static/src/xml/mail_followers.xml b/addons/mail/static/src/xml/mail_followers.xml index 32ce34d48d1..cf31ab3e24c 100644 --- a/addons/mail/static/src/xml/mail_followers.xml +++ b/addons/mail/static/src/xml/mail_followers.xml @@ -11,6 +11,11 @@ +
+ +
+
+

diff --git a/addons/project/project.py b/addons/project/project.py index 3572fd094b3..dbb579e2f7d 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -1100,6 +1100,10 @@ class task(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): task_id = super(task, self).create(cr, uid, vals, context=context) + project_id = self.browse(cr, uid, task_id, context=context).project_id + if project_id: + followers = [follower.id for follower in project_id.message_follower_ids] + self.message_subscribe(cr, uid, [task_id], followers, context=context) self._store_history(cr, uid, [task_id], context=context) self.create_send_note(cr, uid, [task_id], context=context) return task_id @@ -1109,6 +1113,9 @@ class task(base_stage, osv.osv): def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] + if vals.get('project_id'): + project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context) + vals['message_follower_ids'] = [(4, follower.id) for follower in project_id.message_follower_ids] if vals and not 'kanban_state' in vals and 'stage_id' in vals: new_stage = vals.get('stage_id') vals_reset_kstate = dict(vals, kanban_state='normal') diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index 745b4dfb43d..4ce02f5a437 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -152,7 +152,7 @@
- +
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index f39be0c09d5..981ab0693d4 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -364,6 +364,10 @@ class project_issue(base_stage, osv.osv): logged_fields = ['stage_id', 'state', 'message_ids'] if any([field in vals for field in logged_fields]): vals['date_action_last'] = time.strftime('%Y-%m-%d %H:%M:%S') + if vals.get('project_id'): + project_id = self.pool.get('project.project').browse(cr, uid, vals.get('project_id'), context=context) + vals['message_follower_ids'] = [(4, follower.id) for follower in project_id.message_follower_ids] + return super(project_issue, self).write(cr, uid, ids, vals, context) def onchange_task_id(self, cr, uid, ids, task_id, context=None): @@ -381,6 +385,10 @@ class project_issue(base_stage, osv.osv): def create(self, cr, uid, vals, context=None): obj_id = super(project_issue, self).create(cr, uid, vals, context=context) + project_id = self.browse(cr, uid, obj_id, context=context).project_id + if project_id: + followers = [follower.id for follower in project_id.message_follower_ids] + self.message_subscribe(cr, uid, [obj_id], followers, context=context) self.create_send_note(cr, uid, [obj_id], context=context) return obj_id diff --git a/addons/sale_crm/sale_crm.py b/addons/sale_crm/sale_crm.py index b6d5ec25ce1..80e9f3b4f42 100644 --- a/addons/sale_crm/sale_crm.py +++ b/addons/sale_crm/sale_crm.py @@ -23,13 +23,27 @@ from osv import osv,fields class sale_order(osv.osv): _inherit = 'sale.order' - _columns = { 'section_id': fields.many2one('crm.case.section', 'Sales Team'), 'categ_ids': fields.many2many('crm.case.categ', 'sale_order_category_rel', 'order_id', 'category_id', 'Categories', \ domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]") } + def create(self, cr, uid, vals, context=None): + order = super(sale_order, self).create(cr, uid, vals, context=context) + section_id = self.browse(cr, uid, order, context=context).section_id + if section_id: + followers = [follow.id for follow in section_id.message_follower_ids] + self.message_subscribe(cr, uid, [order], followers, context=context) + return order + + def write(self, cr, uid, ids, vals, context=None): + if vals.get('section_id'): + section_id = self.pool.get('crm.case.section').browse(cr, uid, vals.get('section_id'), context=context) + if section_id: + vals['message_follower_ids'] = [(4, follower.id) for follower in section_id.message_follower_ids] + return super(sale_order, self).write(cr, uid, ids, vals, context=context) + sale_order() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: