diff --git a/addons/mail/static/src/xml/mail_followers.xml b/addons/mail/static/src/xml/mail_followers.xml index 3dec4ef1dd2..480001357a3 100644 --- a/addons/mail/static/src/xml/mail_followers.xml +++ b/addons/mail/static/src/xml/mail_followers.xml @@ -12,11 +12,12 @@ Unfollow Following + +
+
- -
-
+

Followers

Invite others diff --git a/addons/project/project.py b/addons/project/project.py index 68122d1a614..5741d32a820 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -311,7 +311,6 @@ class project(osv.osv): task_ids = task_obj.search(cr, uid, [('project_id', 'in', ids), ('state', '!=', 'done')]) task_obj.case_cancel(cr, uid, task_ids, context=context) self.write(cr, uid, ids, {'state':'cancelled'}, context=context) - self.set_cancel_send_note(cr, uid, ids, context=context) return True def set_pending(self, cr, uid, ids, context=None): @@ -556,9 +555,6 @@ def Project(): def set_pending_send_note(self, cr, uid, ids, context=None): return self.message_post(cr, uid, ids, body=_("Project is now pending."), context=context) - def set_cancel_send_note(self, cr, uid, ids, context=None): - return self.message_post(cr, uid, ids, body=_("Project has been canceled."), context=context) - def set_close_send_note(self, cr, uid, ids, context=None): return self.message_post(cr, uid, ids, body=_("Project has been closed."), context=context) @@ -1012,7 +1008,6 @@ class task(base_stage, osv.osv): self._check_child_task(cr, uid, ids, context=context) for task in tasks: self.case_set(cr, uid, [task.id], 'cancelled', {'remaining_hours': 0.0}, context=context) - self.case_cancel_send_note(cr, uid, [task.id], context=context) return True def do_open(self, cr, uid, ids, context=None): @@ -1105,11 +1100,13 @@ class task(base_stage, osv.osv): def set_kanban_state_blocked(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'kanban_state': 'blocked'}, context=context) - return False + self.case_block_send_note(cr, uid, ids, context=context) + return True def set_kanban_state_normal(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'kanban_state': 'normal'}, context=context) - return False + self.case_open_send_note(cr, uid, ids, context=context) + return True def set_kanban_state_done(self, cr, uid, ids, context=None): self.write(cr, uid, ids, {'kanban_state': 'done'}, context=context) @@ -1178,7 +1175,7 @@ class task(base_stage, osv.osv): #raise osv.except_osv(_('Warning!'), _('Stage is not defined in the project.')) write_vals = vals_reset_kstate if t.stage_id != new_stage else vals super(task, self).write(cr, uid, [t.id], write_vals, context=context) - self.stage_set_send_note(cr, uid, [t.id], new_stage, context=context) + self.stage_set_send_note(cr, uid, [t.id], new_stage, context=context) result = True else: result = super(task, self).write(cr, uid, ids, vals, context=context) @@ -1288,15 +1285,22 @@ class task(base_stage, osv.osv): res = super(task, self).message_get_monitored_follower_fields(cr, uid, ids, context=context) return res + ['user_id', 'manager_id'] + def create_send_note(self, cr, uid, ids, context=None): + return self.message_post(cr, uid, ids, body=_("Task has been created."), subtype="project.mt_task_new", context=context) def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1] return self.message_post(cr, uid, ids, body=_("Stage changed to %s.") % (stage_name), context=context) + def case_open_send_note(self, cr, uid, ids, context=None): + return self.message_post(cr, uid, ids, body=_("Task has been started."), subtype="project.mt_task_started", context=context) - def create_send_note(self, cr, uid, ids, context=None): - return self.message_post(cr, uid, ids, body=_("Task has been created."), context=context) + def case_close_send_note(self, cr, uid, ids, context=None): + return self.message_post(cr, uid, ids, body=_("Task has been done."), subtype="project.mt_task_closed", context=context) + def case_block_send_note(self, cr, uid, ids, context=None): + return self.message_post(cr, uid, ids, body=_("Task has been blocked."), subtype="project.mt_task_blocked", context=context) + def case_draft_send_note(self, cr, uid, ids, context=None): return self.message_post(cr, uid, ids, body=_('Task has been set as draft.'), context=context) diff --git a/addons/project/project_data.xml b/addons/project/project_data.xml index 08981bd126a..76c8c5341db 100644 --- a/addons/project/project_data.xml +++ b/addons/project/project_data.xml @@ -86,37 +86,35 @@ - New + Task Created project.project + + Task Started + project.project + - Closed + Task Done project.project - - Canceled - project.project - - - Stage Changed - project.project - - + - New + Task Created project.task + + + + Task Started + project.task + + + Tasks Blocked + project.task + - Closed - project.task - - - Canceled - project.task - - - Stage Changed + Task Done project.task diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index e7f12ff3797..a913ed22adc 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 90640363906..3de83e351e6 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -394,8 +394,10 @@ class project_issue(base_stage, osv.osv): if vals.get('project_id'): for id in ids: self._subscribe_project_followers_to_issue(cr, uid, id, context=context) - return super(project_issue, self).write(cr, uid, ids, vals, context) + + def issue_start_send_note(self, cr, uid, ids, context=None): + return self.message_post(cr, uid, ids, body=_("Issue has been started."), subtype="mt_issue_change", context=context) def onchange_task_id(self, cr, uid, ids, task_id, context=None): if not task_id: @@ -457,7 +459,6 @@ class project_issue(base_stage, osv.osv): def case_cancel(self, cr, uid, ids, context=None): """ Cancels case """ self.case_set(cr, uid, ids, 'cancelled', {'active': True}, context=context) - self.case_cancel_send_note(cr, uid, ids, context=context) return True def case_escalate(self, cr, uid, ids, context=None): @@ -535,12 +536,11 @@ class project_issue(base_stage, osv.osv): # ------------------------------------------------------- # OpenChatter methods and notifications # ------------------------------------------------------- - def stage_set_send_note(self, cr, uid, ids, stage_id, context=None): """ Override of the (void) default notification method. """ stage_name = self.pool.get('project.task.type').name_get(cr, uid, [stage_id], context=context)[0][1] return self.message_post(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), subtype="mt_issue_new", context=context) - + def case_get_note_msg_prefix(self, cr, uid, id, context=None): """ Override of default prefix for notifications. """ return 'Project issue' @@ -548,7 +548,7 @@ class project_issue(base_stage, osv.osv): def convert_to_task_send_note(self, cr, uid, ids, context=None): message = _("Project issue converted to task.") return self.message_post(cr, uid, ids, body=message, context=context) - + def create_send_note(self, cr, uid, ids, context=None): message = _("Project issue created.") return self.message_post(cr, uid, ids, body=message, subtype="mt_issue_new", context=context) diff --git a/addons/project_issue/project_issue_data.xml b/addons/project_issue/project_issue_data.xml index c1460167097..817a7c24fb2 100644 --- a/addons/project_issue/project_issue_data.xml +++ b/addons/project_issue/project_issue_data.xml @@ -45,21 +45,30 @@ Access all issues from the top Project menu, and access the issues of a specific - New - project.issue - - - Closed - project.issue - - - Canceled + Issue Created project.issue - Stage Changed + Issue Started + project.issue + + + Issue Closed project.issue + + Issue Created + project.project + + + Issue Started + project.project + + + Issue Closed + project.project + +