diff --git a/greenmine/projects/issues/models.py b/greenmine/projects/issues/models.py index bd8139ff..7544c67d 100644 --- a/greenmine/projects/issues/models.py +++ b/greenmine/projects/issues/models.py @@ -52,17 +52,17 @@ class Issue(WatchedMixin): attachments = generic.GenericRelation("projects.Attachment") notifiable_fields = [ + "subject", + "milestone", "owner", + "assigned_to", + "finished_date", + "type", "status", "severity", "priority", - "type", - "milestone", - "finished_date", - "subject", - "description", - "assigned_to", "tags", + "description", ] class Meta: @@ -81,6 +81,16 @@ class Issue(WatchedMixin): def is_closed(self): return self.status.is_closed + def get_notifiable_assigned_to_display(self, value): + if not value: + return _("Unassigned") + return value.get_full_name() + + def get_notifiable_tags_display(self, value): + if type(value) is list: + return ", ".join(value) + return value + def _get_watchers_by_role(self): return { "owner": self.owner, diff --git a/greenmine/projects/issues/templates/emails/update_issue_notification-body-html.jinja b/greenmine/projects/issues/templates/emails/update_issue_notification-body-html.jinja index c11e700b..86fb2433 100644 --- a/greenmine/projects/issues/templates/emails/update_issue_notification-body-html.jinja +++ b/greenmine/projects/issues/templates/emails/update_issue_notification-body-html.jinja @@ -11,24 +11,23 @@

Issue #{{ object.ref }}: {{ object.subject }}

Updated by {{ changer.get_full_name() }}.

Updated fields: - {% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %},{% endif %} +

+ {% for field in changed_fields %} +
+ {{ field.verbose_name}} +
+ {% if field.new_value %} +
+ to: {{ field.new_value|linebreaksbr }} +
+ {% endif %} + {% if field.old_value %} +
+ from: {{ field.old_value|linebreaksbr }} +
+ {% endif %} {% endfor %} -

- - {# TODO: Improvemments in some methods to use that: #} - {# - WatchedMixin._get_changed_field_old_value() #} - {# - WatchedMixin._get_changed_field_new_value() #} - {# - - #} +
diff --git a/greenmine/projects/issues/templates/emails/update_issue_notification-body-text.jinja b/greenmine/projects/issues/templates/emails/update_issue_notification-body-text.jinja index 0155fdb9..5c1781bb 100644 --- a/greenmine/projects/issues/templates/emails/update_issue_notification-body-text.jinja +++ b/greenmine/projects/issues/templates/emails/update_issue_notification-body-text.jinja @@ -5,17 +5,8 @@ - Issue #{{ object.ref }}: {{ object.subject }} - Updated by {{ changer.get_full_name() }} - Updated fields: -{% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %}, {% endif %} -{% endfor %} - -{# TODO: Improvemments in some methods to use that: #} -{# - WatchedMixin._get_changed_field_old_value() #} -{# - WatchedMixin._get_changed_field_new_value() #} -{# -{% for field in changed_fields_dict.values() %} +{% for field in changed_fields %} * {{ field.verbose_name}}: from '{{ field.old_value}}' to '{{ field.new_value }}'. {% endfor %} -#} ** More info at {{ final_url_name }} ({{ final_url }}) ** diff --git a/greenmine/projects/milestones/models.py b/greenmine/projects/milestones/models.py index da2b16aa..65f52f32 100644 --- a/greenmine/projects/milestones/models.py +++ b/greenmine/projects/milestones/models.py @@ -42,10 +42,10 @@ class Milestone(WatchedMixin): notifiable_fields = [ "name", "owner", + "disponibility", + "closed", "estimated_start", "estimated_finish", - "closed", - "disponibility", ] class Meta: diff --git a/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-html.jinja b/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-html.jinja index 9e6f4ac2..f781b122 100644 --- a/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-html.jinja +++ b/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-html.jinja @@ -11,24 +11,23 @@

Milestone #{{ object.slug }}: {{ object.name }}

Updated by {{ changer.get_full_name() }}.

Updated fields: - {% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %},{% endif %} +

+ {% for field in changed_fields %} +
+ {{ field.verbose_name}} +
+ {% if field.new_value %} +
+ to: {{ field.new_value|linebreaksbr }} +
+ {% endif %} + {% if field.old_value %} +
+ from: {{ field.old_value|linebreaksbr }} +
+ {% endif %} {% endfor %} -

- - {# TODO: Improvemments in some methods to use that: #} - {# - WatchedMixin._get_changed_field_old_value() #} - {# - WatchedMixin._get_changed_field_new_value() #} - {# - - #} +
diff --git a/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-text.jinja b/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-text.jinja index 395b6cc3..4c437d3b 100644 --- a/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-text.jinja +++ b/greenmine/projects/milestones/templates/emails/update_milestone_notification-body-text.jinja @@ -5,17 +5,8 @@ - Milestone #{{ object.slug }}: {{ object.name }} - Updated by {{ changer.get_full_name() }} - Updated fields: -{% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %}, {% endif %} -{% endfor %} - -{# TODO: Improvemments in some methods to use that: #} -{# - WatchedMixin._get_changed_field_old_value() #} -{# - WatchedMixin._get_changed_field_new_value() #} -{# -{% for field in changed_fields_dict.values() %} +{% for field in changed_fields %} * {{ field.verbose_name}}: from '{{ field.old_value}}' to '{{ field.new_value }}'. {% endfor %} -#} ** More info at {{ final_url_name }} ({{ final_url }}) ** diff --git a/greenmine/projects/models.py b/greenmine/projects/models.py index 826f49ac..fbe20977 100644 --- a/greenmine/projects/models.py +++ b/greenmine/projects/models.py @@ -137,6 +137,21 @@ class Project(models.Model): verbose_name=_("default questions " "status")) + notifiable_fields = [ + "name", + "total_milestones", + "total_story_points", + "default_points", + "default_us_status", + "default_task_status", + "default_priority", + "default_severity", + "default_issue_status", + "default_issue_type", + "default_question_status", + "description" + ] + class Meta: verbose_name = "project" verbose_name_plural = "projects" diff --git a/greenmine/projects/tasks/models.py b/greenmine/projects/tasks/models.py index 55fb4aa3..bbfde09f 100644 --- a/greenmine/projects/tasks/models.py +++ b/greenmine/projects/tasks/models.py @@ -49,14 +49,14 @@ class Task(WatchedMixin): verbose_name=_("is iocaine")) notifiable_fields = [ - "owner", - "status", - "finished_date", "subject", - "description", + "owner", "assigned_to", - "tags", + "finished_date", "is_iocaine", + "status", + "description", + "tags", ] class Meta: @@ -71,6 +71,16 @@ class Task(WatchedMixin): def __str__(self): return "({1}) {0}".format(self.ref, self.subject) + def get_notifiable_assigned_to_display(self, value): + if not value: + return _("Unassigned") + return value.get_full_name() + + def get_notifiable_tags_display(self, value): + if type(value) is list: + return ", ".join(value) + return value + def _get_watchers_by_role(self): return { "owner": self.owner, diff --git a/greenmine/projects/tasks/templates/emails/update_task_notification-body-html.jinja b/greenmine/projects/tasks/templates/emails/update_task_notification-body-html.jinja index 5fc31aa2..53cb9849 100644 --- a/greenmine/projects/tasks/templates/emails/update_task_notification-body-html.jinja +++ b/greenmine/projects/tasks/templates/emails/update_task_notification-body-html.jinja @@ -11,24 +11,23 @@

Task #{{ object.ref }}: {{ object.subject }}

Updated by {{ changer.get_full_name() }}.

Updated fields: - {% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %},{% endif %} +

+ {% for field in changed_fields %} +
+ {{ field.verbose_name}} +
+ {% if field.new_value %} +
+ to: {{ field.new_value|linebreaksbr }} +
+ {% endif %} + {% if field.old_value %} +
+ from: {{ field.old_value|linebreaksbr }} +
+ {% endif %} {% endfor %} -

- - {# TODO: Improvemments in some methods to use that: #} - {# - WatchedMixin._get_changed_field_old_value() #} - {# - WatchedMixin._get_changed_field_new_value() #} - {# - - #} +
diff --git a/greenmine/projects/tasks/templates/emails/update_task_notification-body-text.jinja b/greenmine/projects/tasks/templates/emails/update_task_notification-body-text.jinja index e3ccac9d..158612b2 100644 --- a/greenmine/projects/tasks/templates/emails/update_task_notification-body-text.jinja +++ b/greenmine/projects/tasks/templates/emails/update_task_notification-body-text.jinja @@ -5,17 +5,8 @@ - Task #{{ object.ref }}: {{ object.subject }} - Updated by {{ changer.get_full_name() }} - Updated fields: -{% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %}, {% endif %} -{% endfor %} - -{# TODO: Improvemments in some methods to use that: #} -{# - WatchedMixin._get_changed_field_old_value() #} -{# - WatchedMixin._get_changed_field_new_value() #} -{# -{% for field in changed_fields_dict.values() %} +{% for field in changed_fields %} * {{ field.verbose_name}}: from '{{ field.old_value}}' to '{{ field.new_value }}'. {% endfor %} -#} ** More info at {{ final_url_name }} ({{ final_url }}) ** diff --git a/greenmine/projects/templates/emails/update_project_notification-body-html.jinja b/greenmine/projects/templates/emails/update_project_notification-body-html.jinja index 615ec30a..c0ced8cd 100644 --- a/greenmine/projects/templates/emails/update_project_notification-body-html.jinja +++ b/greenmine/projects/templates/emails/update_project_notification-body-html.jinja @@ -10,24 +10,23 @@

Project #{{ object.slug }}: {{ object.name }}

Updated by {{ changer.get_full_name() }}.

Updated fields: - {% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %},{% endif %} +

+ {% for field in changed_fields %} +
+ {{ field.verbose_name}} +
+ {% if field.new_value %} +
+ to: {{ field.new_value|linebreaksbr }} +
+ {% endif %} + {% if field.old_value %} +
+ from: {{ field.old_value|linebreaksbr }} +
+ {% endif %} {% endfor %} -

- - {# TODO: Improvemments in some methods to use that: #} - {# - WatchedMixin._get_changed_field_old_value() #} - {# - WatchedMixin._get_changed_field_new_value() #} - {# - - #} +
diff --git a/greenmine/projects/templates/emails/update_project_notification-body-text.jinja b/greenmine/projects/templates/emails/update_project_notification-body-text.jinja index 89fa5539..5e88c59b 100644 --- a/greenmine/projects/templates/emails/update_project_notification-body-text.jinja +++ b/greenmine/projects/templates/emails/update_project_notification-body-text.jinja @@ -4,17 +4,8 @@ - Project #{{ object.slug }}: {{ object.name }} - Updated by {{ changer.get_full_name() }} - Updated fields: -{% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %}, {% endif %} -{% endfor %} - -{# TODO: Improvemments in some methods to use that: #} -{# - WatchedMixin._get_changed_field_old_value() #} -{# - WatchedMixin._get_changed_field_new_value() #} -{# -{% for field in changed_fields_dict.values() %} +{% for field in changed_fields %} * {{ field.verbose_name}}: from '{{ field.old_value}}' to '{{ field.new_value }}'. {% endfor %} -#} ** More info at {{ final_url_name }} ({{ final_url }}) ** diff --git a/greenmine/projects/userstories/models.py b/greenmine/projects/userstories/models.py index f6db199f..c5aa8323 100644 --- a/greenmine/projects/userstories/models.py +++ b/greenmine/projects/userstories/models.py @@ -33,6 +33,8 @@ class RolePoints(models.Model): permissions = ( ("view_rolepoints", "Can view role points"), ) + def __str__(self): + return "{}: {}".format(role.name, point.name) class UserStory(WatchedMixin): @@ -74,16 +76,16 @@ class UserStory(WatchedMixin): attachments = generic.GenericRelation("projects.Attachment") notifiable_fields = [ + "subject", "milestone", "owner", - "status", - "points", "finish_date", - "subject", - "description", "client_requirement", "team_requirement", + "status", + "points", "tags", + "description", ] class Meta: @@ -116,6 +118,11 @@ class UserStory(WatchedMixin): return total + def get_notifiable_tags_display(self, value): + if type(value) is list: + return ", ".join(value) + return value + def _get_watchers_by_role(self): return { "owner": self.owner, diff --git a/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-html.jinja b/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-html.jinja index 58266ecb..ed0ab8f9 100644 --- a/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-html.jinja +++ b/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-html.jinja @@ -11,24 +11,23 @@

US #{{ object.ref }}: {{ object.subject }}

Updated by {{ changer.get_full_name() }}.

Updated fields: - {% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %},{% endif %} +

+ {% for field in changed_fields %} +
+ {{ field.verbose_name}} +
+ {% if field.new_value %} +
+ to: {{ field.new_value|linebreaksbr }} +
+ {% endif %} + {% if field.old_value %} +
+ from: {{ field.old_value|linebreaksbr }} +
+ {% endif %} {% endfor %} -

- - {# TODO: Improvemments in some methods to use that: #} - {# - WatchedMixin._get_changed_field_old_value() #} - {# - WatchedMixin._get_changed_field_new_value() #} - {# - - #} +
diff --git a/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-text.jinja b/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-text.jinja index 3ed0b918..3a444cc5 100644 --- a/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-text.jinja +++ b/greenmine/projects/userstories/templates/emails/update_userstory_notification-body-text.jinja @@ -5,17 +5,8 @@ - US #{{ object.ref }}: {{ object.subject }} - Updated by {{ changer.get_full_name() }} - Updated fields: -{% for field in changed_fields_dict.values() %} - {{ field.verbose_name }}{% if not loop.last %}, {% endif %} -{% endfor %} - -{# TODO: Improvemments in some methods to use that: #} -{# - WatchedMixin._get_changed_field_old_value() #} -{# - WatchedMixin._get_changed_field_new_value() #} -{# -{% for field in changed_fields_dict.values() %} +{% for field in changed_fields %} * {{ field.verbose_name}}: from '{{ field.old_value}}' to '{{ field.new_value }}'. {% endfor %} -#} ** More info at {{ final_url_name }} ({{ final_url }}) **