第28回/チケットフィルタに「終了者」(closed_by)があると嬉しい。現在「最新更新者」はあるが、誤記修正する場合は終了者ではないため。
概要:
Redmine Verx.x.x 以降、チケット一覧に終了ステータスに更新された日付を「終了日」として表示できる。
同様に、チケット一覧に終了ステータスに更新されたユーザ名を「終了者」として表示したい。
「最新更新者」が既にあるが、チケット終了後に別のユーザが注記等を更新した場合、「最新更新者」がそのユーザ名に表示が切り替わってしまう。そのため「終了者」は「最新更新者」とは別に表示したい。
やること:
終了日と最終更新者(last_updated_by)のフィルタの条件をコード上でチェック
closed_on:
TODO: 後から確認
last_updated_by: app/models/issue.rb
code:rb
def last_updated_by
if @last_updated_by
@last_updated_by.presence
else
journals.reorder(:id => :desc).first.try(:user)
end
end
以下の app/models/issue_query.rb 辺りも参考になるかも
code:ruby
add_available_filter(
"closed_by",
:type => :list, :values => lambda {author_values}
)
author_valuesは app/models/query.rb で定義されている
code:ruby
def author_values
author_values = []
author_values +=
users.sort_by(&:status).
collect{|s| [s.name, s.id.to_s, l("status_#{User::LABEL_BY_STATUSs.status}")]} author_values
end
issue_query.rbのdef sql_for_last_updated_by_fieldで中身を確認
code:sql
SELECT 1 FROM journals sj
WHERE
sj.journalized_type='Issue' AND
sj.journalized_id=issues.id AND
(sj.user_id IN ('3')) AND
sj.id IN (SELECT MAX(journals.id)
FROM journals
WHERE
journals.journalized_type='Issue' AND
journals.journalized_id=issues.id AND
((journals.private_notes = FALSE OR journals.user_id = 1 OR (projects.status <> 9 AND projects.status <> 10))))
SELECT 1 FROM journals sj WHERE sj.journalized_type='Issue' AND sj.journalized_id=issues.id AND (sj.user_id IN ('3')) AND sj.id IN (SELECT MAX(journals.id) FROM journals WHERE journals.journalized_type='Issue' AND journals.journalized_id=issues.id AND ((journals.private_notes = FALSE OR journals.user_id = 1 OR (projects.status <> 9 AND projects.status <> 10))))
statusは、journal_detailsまで見ないといけなく、検索の度にJOINしたものを探すのはパフォーマンス上の懸念があるので、一旦ペンディングします...。