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
+
+