Redmineプラグイン開発 – 史上最高のチームプラグインリリース

Screen shot 2011-04-29 at 7.41.50 PM

自分のチケットの動きはマイページや活動でみれるんだけど、メンバー全員の今を表示するプラグインが欲しかったので作ってみる。とかいってますが、結局さぼっている人をみつけて、それをさらすためのプラグインでもある。Redmineを使ってくれない人に対するいやがらせでもある。

史上最高のチームプラグイン

より詳細はgithubをご確認ください。(You would like to get more information, please check github.)

Download

  • github (Recent version is here.)

Product Backlog

  • Roadmapsプラグインと同じくデータが増えると重くなる
  • 大豆プラグインの統計情報表示を加えたい

Redmineプラグイン開発 – 史上最高のチームプラグインリリース」への20件のフィードバック

  1. 使わせていただいております。
    一個良くわからない現象が発生しています。
    “最近の動き”の部分で、開発者の状況に
    「S78」
    とだけ表示されるメンバが数名います。
    これは何でしょうか。。
    十数名での開発プロジェクトです。

  2. すみません。
    S78と表示される原因がわかりました。
    プロジェクトの設定で「時間トラッキング」を有効にしていない場合、表示されますね。
    (時間トラッキングしない人がこのプラグインを使うことはないので、問題ではないですね。。)
    失礼しました。

  3. こんばんは。情報ありがとうございます!
    まだまだできることがありそうですねぇ。。。上司がRedmineを使わないので、「じゃーどんな画面がいいのさ!」ということで作ったプラグインです。
    現場の意見などがありましたらぜひFBくださいませー。

  4. DBにPostgreSQLを使っていると、いくつかエラーが起きましたので、一部ソースを変更してエラーが起きないようにしました。
    変更したのは、以下の3ファイルです。
    lib/common_logic.rb
    lib/overwork_ranking_logic.rb
    lib/passed_hours_logic.rb
    以下、ずらずらと長くなってしまいましたが、差分です。
    *** ./lib/common_logic.rb.org 2009-05-23 17:31:18.000000000 +0900
    — ./lib/common_logic.rb 2009-10-06 14:01:08.000000000 +0900
    ***************
    *** 3,14 ****
    class CommonLogic
    def self.get_members(project_id)
    return Member.find_by_sql(
    ! [“select members.user_id, users.lastname from members, users
    where
    members.user_id = users.id and
    (members.project_id = :project_id or
    members.project_id in (select id from projects where parent_id = :project_id))
    ! group by user_id”,
    {:project_id => project_id}])
    end
    — 3,14 —-
    class CommonLogic
    def self.get_members(project_id)
    return Member.find_by_sql(
    ! [“select members.user_id, users.firstname as lastname from members, users
    where
    members.user_id = users.id and
    (members.project_id = :project_id or
    members.project_id in (select id from projects where parent_id = :project_id))
    ! group by members.user_id, users.firstname”,
    {:project_id => project_id}])
    end
    ***************
    *** 24,38 ****
    num = 0
    unless statuses.nil?
    statuses.each do |status|
    ! num += Issue.count(:all, :conditions => [“fixed_version_id = ? and status_id =?”, version_id, status.id])
    end
    end
    return num
    end
    def self.is_valid_version(version_id, effective_date)
    ! finish_num = get_closed_num(version_id, 1)
    ! unfinish_num = get_closed_num(version_id, 0)
    RAILS_DEFAULT_LOGGER.debug “finish_num = #{finish_num}”
    RAILS_DEFAULT_LOGGER.debug “unfinish_num = #{unfinish_num}”
    — 24,38 —-
    num = 0
    unless statuses.nil?
    statuses.each do |status|
    ! num += Issue.count(:all, :conditions => [“fixed_version_id = ? and status_id = ?”, version_id, status.id])
    end
    end
    return num
    end
    def self.is_valid_version(version_id, effective_date)
    ! finish_num = get_closed_num(version_id, “true”)
    ! unfinish_num = get_closed_num(version_id, “false”)
    RAILS_DEFAULT_LOGGER.debug “finish_num = #{finish_num}”
    RAILS_DEFAULT_LOGGER.debug “unfinish_num = #{unfinish_num}”
    *** ./lib/overwork_ranking_logic.rb.org 2009-05-23 18:13:46.000000000 +0900
    — ./lib/overwork_ranking_logic.rb 2009-10-06 13:53:13.000000000 +0900
    ***************
    *** 49,61 ****
    def self.get_users(project_id, avg)
    results =
    TimeEntry.find_by_sql(
    ! [“select users.id, users.lastname as name, sum(time_entries.hours) as hours from time_entries, users
    where time_entries.user_id = users.id and
    (time_entries.project_id = :project_id or
    time_entries.project_id in (select id from projects where parent_id = :project_id)) and
    time_entries.user_id in (select user_id from members where project_id = :project_id) and
    time_entries.spent_on between :start_date and :end_date
    ! group by users.lastname
    order by hours desc”,
    {:project_id => project_id, :start_date => get_limit_date.to_s, :end_date => (Date.today – 1).to_s}])
    — 49,61 —-
    def self.get_users(project_id, avg)
    results =
    TimeEntry.find_by_sql(
    ! [“select users.id, users.firstname as name, sum(time_entries.hours) as hours from time_entries, users
    where time_entries.user_id = users.id and
    (time_entries.project_id = :project_id or
    time_entries.project_id in (select id from projects where parent_id = :project_id)) and
    time_entries.user_id in (select user_id from members where project_id = :project_id) and
    time_entries.spent_on between :start_date and :end_date
    ! group by users.id, users.firstname
    order by hours desc”,
    {:project_id => project_id, :start_date => get_limit_date.to_s, :end_date => (Date.today – 1).to_s}])
    *** ./lib/passed_hours_logic.rb.org 2009-05-23 17:56:42.000000000 +0900
    — ./lib/passed_hours_logic.rb 2009-10-06 14:04:19.000000000 +0900
    ***************
    *** 36,42 ****
    where
    project_id = :project_id or
    project_id in (select id from projects where parent_id = :project_id)
    ! group by versions.name
    order by name asc”,
    {:project_id => project_id}])
    if results.nil?
    — 36,42 —-
    where
    project_id = :project_id or
    project_id in (select id from projects where parent_id = :project_id)
    ! group by id, name, effective_date
    order by name asc”,
    {:project_id => project_id}])
    if results.nil?
    ***************
    *** 84,90 ****
    issues.id = time_entries.issue_id and
    issues.assigned_to_id = users.id and
    issues.fixed_version_id = :version_id
    ! group by users.id”,
    {:version_id => version_id}])
    if users.nil?
    — 84,90 —-
    issues.id = time_entries.issue_id and
    issues.assigned_to_id = users.id and
    issues.fixed_version_id = :version_id
    ! group by users.id, users.lastname”,
    {:version_id => version_id}])
    if users.nil?

  5. 追記。
    こちらで使用しているアカウント情報では、表示する名前は users.firstname に入れているので、users.lastname から変更した部分も含んでいます。
    #理想は、Redmineの「ユーザ名の表示書式」の通りになることですかね。

  6. ご連絡ありがとうございます。
    DBに依存した書き方をしてごめんなさい。力技でつくったのでご苦労をおかけしたと思います。
    情報ありがとうございました。こちらでも確認して反映させようと思います。

  7. 初めまして!
    こちらのプラグインと大豆プラグインのバグ分析機能を
    使いたいと思っています。
    機能移行予定とありましたが、まだですよね?
    大豆プラグインをダウンロードしようとしたら、
    できれば、こちらを使ってねと記載があったので。
    確認させていただければ、幸いです。

  8. こんばんわ!
    なるほど。バグ分析ですね。
    時間分析はredmine_charts(https://daipresents.com/2010/redmine090redmine_charts/)のほうがいいなーとおもって作らないでいいかーと思ってましたが、バグ分析はまだいいのがなさそうですね。
    私も必要になってきたので、ちょっと時間見つけてつくってみようと思います。
    大豆は、初Rubyで動かすことだけしか考えてないので、更新する予定はないです。ただ、Redmine0.8.xでは動くと思うので、おためしで導入して、FBいただければ、次の開発で参考にさせていただきます!
    アイデアメモ
    ・バグのバーンダウンチャートとか
    ・割合をしるための原因別円グラフとか
    あとSIerではどんなことやってたけなー。

  9. 初めまして。
    Redmine 0.9.1で「史上最高のチームプラグイン」を動かしてみたところ、以下の現象が起きました。
    作成済みチケットのステータスまたは進捗%を編集して「史上最高のチーム」を表示しようとすると、エラーが発生して表示できません。
    編集したチケットを削除すると回復します。
    ふじはらさんは0.9.0で動作しているようですが、0.9.1には対応しきれていないのでしょうか?

  10. こにしさんこんばんは。
    おお、進捗をかえると「Translation string with multiple values」ってたしかにおかしいですね。どうも言語ファイルの置き方がRailsのバージョンアップ(2.2から?)でかわったみたいなので、これから修正して、コミットしておきます。

  11. 遅くなりましたが、0.3.0を試してみました。
    前回報告した現象は改善していました。ありがとうございます。
    追加の報告があります。
    ・ユーザーのリンクのURLが間違っています。おそらく0.9系でURLが変わったのだと思います。
    ・「最近の動き」に「グループ」が表示されます。
    ・「最近の作業時間」に親プロジェクトで共有設定されている「バージョン」が表示されません。
    ご対応いただければ幸いです。

  12. こにしさんこんにちは。
    ユーザリンク、グループの排除に対応してみました。共有バージョンについてですが、このプラグインは親から子への一方通行で考えているので、ちょっと対応を考えさせてください。

  13. ふじはらさん、ご対応ありがとうございます。
    「グループ」が表示される件は解決していました。
    ・ユーザーのリンク
    「最近の動き」は直っていましたが、「働き過ぎランキング」と「最近の作業時間」は直っていませんでした。「最近の動き」を参考に残りは自分で直せました。
    ・バージョン
    簡単には対応できないのですね。
    一応困っていることの詳細を説明しておきたいと思います。必須というわけではないのですが、ご検討頂けると幸いです。
    プロジェクトA
    ├プロジェクトB
    │├プロジェクトC
    │└プロジェクトD
    ├プロジェクトE
    │├・・・
    上記のようなプロジェクト構成でBやEにバージョンを定義し、共有設定を「プロジェクトツリー単位」にしています。
    各バージョンのチケットはCやDに登録されていますが、プロジェクト間で移動することがあるため、このようなバージョンの設定にしてあります。
    現状の史上最高のチームプラグインでは、AやBで配下のプロジェクトの総合実績を確認することはできますが、CやD個別の実績はバージョンが認識されないため確認できません。
    ・追加報告
    Roadmapsプラグインを使用していると「最近の作業時間」が「経過時間」と表示されます。(このページの画面イメージでも)
    リソース名(?)passed_hoursが競合しているためと思われます。

  14. ふじはらさん、はじめまして。
    つい最近Redmineをプロジェクトで使用し始めました。
    そこでRedmineの史上最高のチームプラグインを使用したくて
    Redmine 0.9.4 にインストールしてみました。
    しかし、あきらさんが以前に記述しているのと同様
    作業時間を記録したチケットが存在すると
    エラーが出てしまい、何も表示されません。
    「An error occurred on the page you were trying to access.
    If you continue to experience problems please contact your redMine administrator for assistance.」
    これからぜひ使用させていただきたいので
    原因究明をお願いいたします!

  15. 追記:
    作業時間に関係なく、ユーザを追加したりサブプロジェクトを削除したりしても同様の現象になりました。

  16. こんにちは。
    申し訳ないです。手をつけれてないですが、がんばって対応してみます。

  17. 何かエラー部分を見つけるためのログなど記録されていないでしょうか?
    もしどこかに記録されているのであれば教えていただきたいです。
    ※初心者なもので、もし訳のわからないことを聞いていたら申し訳ないです。
    よろしくお願いします。

  18. こんばんは。
    developmentモードで動かせば、logsフォルダにdevelopment.logがでます。詳細にでるので、原因ぐらいはネットで調べればわかるかと。
    こちらでも時間のある時に調べてみます。
    ソースは http://github.com/daipresents にコミットしていきますのでしばしおまちを。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中