Task #26 (id 77): Added to all updated emails the changes to the fields

remotes/origin/enhancement/email-actions
David Barragán Merino 2013-11-12 15:12:45 +01:00
parent 75af27e812
commit 79e6fd8ec0
15 changed files with 144 additions and 152 deletions

View File

@ -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,

View File

@ -11,24 +11,23 @@
<h2>Issue #{{ object.ref }}: {{ object.subject }}</h2>
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
<p>Updated fields:
{% for field in changed_fields_dict.values() %}
<b>{{ field.verbose_name }}</b>{% if not loop.last %},{% endif %}
<dl>
{% for field in changed_fields %}
<dt style="background: #669933; padding: 5px 15px; color: #fff">
<b>{{ field.verbose_name}}</b>
</dt>
{% if field.new_value %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ field.new_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% if field.old_value %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ field.old_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% endfor %}
</p>
{# TODO: Improvemments in some methods to use that: #}
{# - WatchedMixin._get_changed_field_old_value() #}
{# - WatchedMixin._get_changed_field_new_value() #}
{#
<ul>
{% for field in changed_fields_dict.values() %}
<li>
<b>{{ field.verbose_name}}</b>: from <i>{{ field.old_value}}</i>
to <i>{{ field.new_value}}</i>.
</li>
{% endfor %}
</ul>
#}
</dl>
</td>
</tr>
</table>

View File

@ -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}}</b>: from '{{ field.old_value}}' to '{{ field.new_value }}'.
{% endfor %}
#}
** More info at {{ final_url_name }} ({{ final_url }}) **

View File

@ -42,10 +42,10 @@ class Milestone(WatchedMixin):
notifiable_fields = [
"name",
"owner",
"disponibility",
"closed",
"estimated_start",
"estimated_finish",
"closed",
"disponibility",
]
class Meta:

View File

@ -11,24 +11,23 @@
<h2>Milestone #{{ object.slug }}: {{ object.name }}</h2>
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
<p>Updated fields:
{% for field in changed_fields_dict.values() %}
<b>{{ field.verbose_name }}</b>{% if not loop.last %},{% endif %}
<dl>
{% for field in changed_fields %}
<dt style="background: #669933; padding: 5px 15px; color: #fff">
<b>{{ field.verbose_name}}</b>
</dt>
{% if field.new_value %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ field.new_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% if field.old_value %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ field.old_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% endfor %}
</p>
{# TODO: Improvemments in some methods to use that: #}
{# - WatchedMixin._get_changed_field_old_value() #}
{# - WatchedMixin._get_changed_field_new_value() #}
{#
<ul>
{% for field in changed_fields_dict.values() %}
<li>
<b>{{ field.verbose_name}}</b>: from <i>{{ field.old_value}}</i>
to <i>{{ field.new_value}}</i>.
</li>
{% endfor %}
</ul>
#}
</dl>
</td>
</tr>
</table>

View File

@ -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}}</b>: from '{{ field.old_value}}' to '{{ field.new_value }}'.
{% endfor %}
#}
** More info at {{ final_url_name }} ({{ final_url }}) **

View File

@ -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"

View File

@ -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,

View File

@ -11,24 +11,23 @@
<h2>Task #{{ object.ref }}: {{ object.subject }}</h2>
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
<p>Updated fields:
{% for field in changed_fields_dict.values() %}
<b>{{ field.verbose_name }}</b>{% if not loop.last %},{% endif %}
<dl>
{% for field in changed_fields %}
<dt style="background: #669933; padding: 5px 15px; color: #fff">
<b>{{ field.verbose_name}}</b>
</dt>
{% if field.new_value %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ field.new_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% if field.old_value %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ field.old_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% endfor %}
</p>
{# TODO: Improvemments in some methods to use that: #}
{# - WatchedMixin._get_changed_field_old_value() #}
{# - WatchedMixin._get_changed_field_new_value() #}
{#
<ul>
{% for field in changed_fields_dict.values() %}
<li>
<b>{{ field.verbose_name}}</b>: from <i>{{ field.old_value}}</i>
to <i>{{ field.new_value}}</i>.
</li>
{% endfor %}
</ul>
#}
</dl>
</td>
</tr>
</table>

View File

@ -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}}</b>: from '{{ field.old_value}}' to '{{ field.new_value }}'.
{% endfor %}
#}
** More info at {{ final_url_name }} ({{ final_url }}) **

View File

@ -10,24 +10,23 @@
<h2>Project #{{ object.slug }}: {{ object.name }}</h2>
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
<p>Updated fields:
{% for field in changed_fields_dict.values() %}
<b>{{ field.verbose_name }}</b>{% if not loop.last %},{% endif %}
<dl>
{% for field in changed_fields %}
<dt style="background: #669933; padding: 5px 15px; color: #fff">
<b>{{ field.verbose_name}}</b>
</dt>
{% if field.new_value %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ field.new_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% if field.old_value %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ field.old_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% endfor %}
</p>
{# TODO: Improvemments in some methods to use that: #}
{# - WatchedMixin._get_changed_field_old_value() #}
{# - WatchedMixin._get_changed_field_new_value() #}
{#
<ul>
{% for field in changed_fields_dict.values() %}
<li>
<b>{{ field.verbose_name}}</b>: from <i>{{ field.old_value}}</i>
to <i>{{ field.new_value}}</i>.
</li>
{% endfor %}
</ul>
#}
</dl>
</td>
</tr>
</table>

View File

@ -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}}</b>: from '{{ field.old_value}}' to '{{ field.new_value }}'.
{% endfor %}
#}
** More info at {{ final_url_name }} ({{ final_url }}) **

View File

@ -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,

View File

@ -11,24 +11,23 @@
<h2>US #{{ object.ref }}: {{ object.subject }}</h2>
<p>Updated by <b>{{ changer.get_full_name() }}</b>.</p>
<p>Updated fields:
{% for field in changed_fields_dict.values() %}
<b>{{ field.verbose_name }}</b>{% if not loop.last %},{% endif %}
<dl>
{% for field in changed_fields %}
<dt style="background: #669933; padding: 5px 15px; color: #fff">
<b>{{ field.verbose_name}}</b>
</dt>
{% if field.new_value %}
<dd style="background: #eee; padding: 5px 15px; color: #444">
<b>to:</b> <i>{{ field.new_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% if field.old_value %}
<dd style="padding: 5px 15px; color: #bbb">
<b>from:</b> <i>{{ field.old_value|linebreaksbr }}</i>
</dd>
{% endif %}
{% endfor %}
</p>
{# TODO: Improvemments in some methods to use that: #}
{# - WatchedMixin._get_changed_field_old_value() #}
{# - WatchedMixin._get_changed_field_new_value() #}
{#
<ul>
{% for field in changed_fields_dict.values() %}
<li>
<b>{{ field.verbose_name}}</b>: from <i>{{ field.old_value}}</i>
to <i>{{ field.new_value}}</i>.
</li>
{% endfor %}
</ul>
#}
</dl>
</td>
</tr>
</table>

View File

@ -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}}</b>: from '{{ field.old_value}}' to '{{ field.new_value }}'.
{% endfor %}
#}
** More info at {{ final_url_name }} ({{ final_url }}) **