Redmineで冷蔵庫内食品賞味期限管理

Redmine Advent Calendar jp: 2011 の順番が明日来ますがしょぼい記事を補うための保険として別に一ネタ書いておきます。

最近自宅の Ubuntuマシンに Redmine を入れてスケジュールと冷蔵庫内の食品賞味期限管理に使っています。チケットには期日(賞味期限)を必ず入れることにしています。

スケジュール、賞味期限確認はカレンダー表示やチケット一覧で見ることができますが、カレンダーは1ヶ月以上の前後を見るのには適していませんし、チケット一覧は今日という期日がどこまで迫っているのかすぐにわかりません。

そこでチケット一覧表示に今日を境にして以前と以後がわかるように区切り線を入れるようにしています。
まずどう表示されるかご覧いただきましょう。

焼き魚やばっ!ということが一目でわかります。焼そばは炒めたら大丈夫でしょう。たくあんはあきらめ気味です。マヨネーズに至っては平常心で対応です。

使いそうにない項目の予定工数と進捗%を右側に表示しているのは題名と期日を左側に寄せて見やすくするためです。

区切り線を入れるのは期日でソートしているときだけです。

いじった差分は以下のとおりです。
(バージョン1.3 に対する差分ですが 1.2 でも同様です)

--- app/controllers/issues_controller.rb.org
+++ app/controllers/issues_controller.rb
@@ -64,7 +64,7 @@
 
   def index
     retrieve_query
-    sort_init(@query.sort_criteria.empty? ? [['id', 'desc']] : @query.sort_criteria)
+    sort_init(@query.sort_criteria.empty? ? ['due_date'] : @query.sort_criteria)
     sort_update(@query.sortable_columns)
 
     if @query.valid?

--- app/views/issues/_list.html.erb.org
+++ app/views/issues/_list.html.erb
@@ -1,3 +1,5 @@
+<% prev_due_date = nil; ncol = query.columns.size + 2; linedate = Date.today if session['issues_index_sort'] =~ /^due_date\b/ %>
+
 <% form_tag({}) do -%>
 <%= hidden_field_tag 'back_url', url_for(params) %>
 <div class="autoscroll">
@@ -25,6 +27,15 @@
     </tr>
     <% previous_group = group %>
   <% end %>
+
+  <% if linedate && prev_due_date && issue.due_date %>
+    <% if (prev_due_date <= linedate && linedate < issue.due_date) || (prev_due_date > linedate && linedate >= issue.due_date) %>
+      <tr><td colspan='<%= ncol %>'><hr></td></tr>
+      <% linedate = nil %>
+    <% end %>
+  <% end %>
+  <% prev_due_date = issue.due_date %>
+
   <tr id="issue-<%= issue.id %>" class="hascontextmenu <%= cycle('odd', 'even') %> <%= issue.css_classes %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
     <td class="checkbox hide-when-print"><%= check_box_tag("ids[]", issue.id, false, :id => nil) %></td>
     <td class="id"><%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %></td>

issues_controller.rb でチケットのデフォルトのソート順を期日昇順にし、_list.html.erb で期日ソート順のとき区切り線を入れています。

優先度に応じてチケットの背景色を変えると賞味期限の切迫度が増してよりグッドです。