0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Redmineプラグイン開発の備忘

Last updated at Posted at 2020-03-12

Redmineのプラグイン開発をしているときに、忘れてしまいそうな事、すぐに忘れてしまうことを備忘として残している、個人的なメモ。
作成したプラグイン
https://github.com/momibun926/redmine_issue_evm

日付関連

日付、時間の表示形式はRedmineで使われている形式に合わせる。

  • format_date
<%= format_date(baseline.minimum_start_date) %>
  • format_time
<%= format_time(baseline.updated_on) %>

Ruby Holidays Gemを使って祝日を把握。事前に読み込んでおかないと使えなかった。

init.rb
  Holidays.load_all

検索、活動関連

しばらく実現できなくて悩んだ挙句、なんとか実装できているっぽい。正直ちゃんと理解できていない。

  # for activity page.
  acts_as_event title: Proc.new { |o| "タイトルに表示したい文言"},
                description: :description, <-モデルのカラムを指定
                datetime: :updated_on, <-モデルの更新日
                type: Proc.new { |o| "evmbaseline-" + (o.created_on < o.updated_on ? "edit" : "new") },
                url: Proc.new { |o| { controller: "evmbaselines", action: :show, project_id: o.project, id: o.id } } <-モデルのVIEWに飛ばしたいときに指定

  acts_as_activity_provider scope: joins(:project),
                            permission: :view_evmbaselines, <-プラグインのパーミッションを指定
                            type: "evmbaseline",
                            author_key: :author_id

  # for search.
  acts_as_searchable columns: ["#{table_name}.subject", "#{table_name}.description"], <-検索対象にしたいカラム
                     preload: :project,
                     date_column: :updated_on

チケット関連

直近の進捗率を変更した日付が欲しくてジャーナルを検索して取るようにした。

Journal.where(journalized_id: ”知りたいチケットのIDを指定”, journal_details: { prop_key: "done_ratio" }).
        joins(:details).
        maximum(:created_on)

子、孫、、プロジェクトすべてのチケットを検索する。

@project = Project.find(params[:project_id])
Issue.cross_project_scope(@project, "descendants")

上記の検索に対して、条件(Where)を可変にしたいとき、こんな感じのメソッド作って、条件をHashで渡す。条件が指定されていなければ、ALLで検索する。

def evm_issues(proj, condition = " 1 = 1 ")
  Issue.cross_project_scope(proj, "descendants").
    where(SQL_COM.to_s).
    where(condition)
end

使い方。子孫プロジェクトすべてから指定したTrackerのチケット取得する

@project = Project.find(params[:project_id])
condition = { tracker_id: 取得しいTrackerのID }
tracker_issues = evm_issues @project, condition
0
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?