2009年10月12日月曜日

trac:ガントチャート/カレンダー プラグイン

trac にガントチャート/カレンダーのプラグイン (TracGanttCalendarPlugin) をインストールすることで、タスクの仕掛かり状況を俯瞰的に捉えることができます。

TracGanttCalendarPlugin のインストール

sourceforge.jp のプロジェクトページから、 tar ball をダウンロードするか、CVSリポジトリからソースコードをチェックアウトします。

プロジェクトページ:http://sourceforge.jp/projects/shibuya-trac/svn/view/plugins/ganttcalendarplugin/?root=shibuya-trac

ここでは wget で取得したところ、ファイル名に余計な引数がついてしまったので mv しています。インストールは setup.py が用意されていますので、お約束のインストールコマンドを実行するだけです。

$ wget http://sourceforge.jp/projects/shibuya-trac/svn/view/plugins/ganttcalendarplugin.tar.gz?root=shibuya-trac&view=tar
$ mv ganttcalendarplugin.tar.gz\?root\=shibuya-trac\&view\=tar ganttcalendarplugin.tar.gz
$ tar zxvf ganttcalendarplugin.tar.gz
$ cd ganttcalendarplugin/trunk/
$ python setup.py bdist_egg
# python setup.py install
httpdを再起動すると、プラグインが有効になりますので、管理画面よりチェックを入れて更新します。 これで、メニューに「カレンダー」と「ガントチャート」が表示されます。

カスタムフィールドの設定

TracGanttCalendarPlugin が使用するカスタムフィールドを設定します。README.ja に記載されているように、以下をtrac.iniに追記します。

[ticket-custom]
due_assign = text
due_assign.label = 開始日
due_assign.order = 1
due_close= text
due_close.label = 終了日
due_close.order = 2
complete= text
complete.label = 進捗率(%)
complete.order = 3
これで、TracGanttCalendarPlugin が使用できるようになりました。

非稼働日の設定

管理画面の「祝日設定」より、非稼働日を登録します。私の環境ではテーブル生成時に下記のエラーが発生しますが、その後は特に問題なく使用できています。

Oops…
Trac detected an internal error:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

ガントチャートのソート順でお悩みの貴兄へ

運用を始めると、ガントチャート画面のソート順が変だ、という状況が発生することがあります。ソースコードを見ると、

$ lv TracGanttCalendarPlugin-0.2-py2.4.egg/ganttcalendar/ticketgantt.py

(snip)
        sorted_field = req.args.get('sorted_field')
        if sorted_field == None:
            sorted_field = 'component'

(snip)

        sql = ("SELECT id, type, summary, owner, t.description, status, a.value, c.value, cmp.value, milestone, component "
                "FROM ticket t "
                "JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign' "
                "JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' "
                "JOIN ticket_custom cmp ON cmp.ticket = t.id AND cmp.name = 'complete' "
                "%sORDER by %s , a.value ") % (condition, sorted_field)
(snip)
と、ちゃんと order by で due_assign (=開始日) がはいってるのに、と。

そういうときは、due_assign のデータを見てみましょう。仮に開始日を 2009 年 10 月 8 日として、スタッフが思い思いの形式で入力して、2009/10/08 とか 2009-10-08 とか、どうかすると 2009/10/8 なんてのが混在しているのではないでしょうか(データ型が text なので、登録できてしまうのです)。

そんな貴兄へ、運用ルールを周知させるとともに TracDecoratorPlugin によるポップアップカレンダー入力の導入をお勧めします。

0 件のコメント:

コメントを投稿