Feature #23778
closeddefault sort email reminders by due date (and list due date in email)
Description
I think this should be default behavior. I've already written the code to do this, but I'm not sure how to get the code to you since the [contribute](http://www.redmine.org/projects/redmine/wiki/Contribute) page says not to use pull requests. What is the preferred method of getting the code to you on github? I see the link to creating patches on git, but I didn't really follow it. Can someone give me a more detailed explanation?
I uploaded a file of what our email reminders look like now after the changes.
Files
Related issues
Updated by Moritz Koehler almost 10 years ago
would you mind to share the code here for now. Looks very good.
Updated by John Simmons almost 10 years ago
In app/helpers/application_helper.rb, in the link_to_issue function
def link_to_issue(issue, options={})
title = nil
subject = nil
text = options[:tracker] == false ? "##{issue.id}" : "#{issue.tracker} ##{issue.id}"
if options[:subject] == false
title = issue.subject.truncate(60)
else
subject = issue.subject
if truncate_length = options[:truncate]
subject = subject.truncate(truncate_length)
end
end
only_path = options[:only_path].nil? ? true : options[:only_path]
s = link_to(text, issue_url(issue, :only_path => only_path),
:class => issue.css_classes, :title => title)
s << h(": #{subject}") if subject
#This is the only line that changes here
s = h("Due date #{issue.due_date} : #{issue.project} - ") + s if options[:project]
s
end
The other change is in app/models/mailer.rb, in the reminders function
def self.reminders(options={})
days = options[:days] || 7
project = options[:project] ? Project.find(options[:project]) : nil
tracker = options[:tracker] ? Tracker.find(options[:tracker]) : nil
target_version_id = options[:version] ? Version.named(options[:version]).pluck(:id) : nil
if options[:version] && target_version_id.blank?
raise ActiveRecord::RecordNotFound.new("Couldn't find Version with named #{options[:version]}")
end
user_ids = options[:users]
scope = Issue.open.where("#{Issue.table_name}.assigned_to_id IS NOT NULL" +
" AND #{Project.table_name}.status = #{Project::STATUS_ACTIVE}" +
" AND #{Issue.table_name}.due_date <= ?", days.day.from_now.to_date
)
scope = scope.where(:assigned_to_id => user_ids) if user_ids.present?
scope = scope.where(:project_id => project.id) if project
scope = scope.where(:fixed_version_id => target_version_id) if target_version_id.present?
scope = scope.where(:tracker_id => tracker.id) if tracker
issues_by_assignee = scope.includes(:status, :assigned_to, :project, :tracker).
group_by(&:assigned_to)
issues_by_assignee.keys.each do |assignee|
if assignee.is_a?(Group)
assignee.users.each do |user|
issues_by_assignee[user] ||= []
issues_by_assignee[user] += issues_by_assignee[assignee]
end
end
end
issues_by_assignee.each do |assignee, issues|
#My changes start here
issues = issues.sort_by do |item|
item[:due_date]
end
#End of changes
reminder(assignee, issues, days).deliver if assignee.is_a?(User) && assignee.active?
end
end
I commented where the changes are.
Updated by John Simmons almost 10 years ago
It's barely anything, which is why I was a little shocked that it wasn't already sorted. But if accepted it will be my first contribution to redmine....so yay!
Also, this hasn't been fully tested. I've run it against everything I have right now, but I haven't run it through any official testing...so take it for what it's worth right now.
Updated by Marius BĂLTEANU almost 10 years ago
It'll be better to provide a patch. Check How_to_create_patch_series_on_Mercurial_and_Git or use the command git diff > path_to_patch
Updated by John Simmons almost 10 years ago
- File emailSortByDate.patch emailSortByDate.patch added
Here's the patch. If I'm supposed to put it somewhere else please let me know. Also, I won't have a chance to really test it for a few days probably, so if you see any errors please let me know.
Updated by Toshi MARUYAMA over 9 years ago
"link_to_issue" is used at many places.
So,
s = h("Due date #{issue.due_date} : #{issue.project} - ") + s if options[:project]
breaks many places.
Updated by Go MAEDA over 7 years ago
- Related to Patch #6357: Show and sort by due_date in reminders added
Updated by Go MAEDA over 7 years ago
Issues in reminders are now sorted by due date (#29771).
Updated by Go MAEDA about 7 years ago
- Related to Feature #31225: Show the number of days left until the due date in reminders added
Updated by Go MAEDA about 7 years ago
- Status changed from New to Closed
- Resolution set to Duplicate
The upcoming Redmine 4.1.0 shows the number of days left until the due date ("due in X days" / "X days late"). Please see #31225 for details.