カスタムフィールドをより便利に使いたい

6,530 views
Skip to first unread message

junki

unread,
Apr 11, 2012, 3:28:16 AM4/11/12
to redmine-...@googlegroups.com
前回の質問から連投となり申し訳ありません。よろしくお願いします。

現在、RedMineで課題管理を行おうと考えております。
下記のようなことをしたいのですが、行き詰っております。
先日の質問に引き続いて申し訳ないのですが、どなたか助言をいただきたく思います。

1.カスタムフィールドの単位で集計したい

レポート内に、カスタムフィールドで追加した項目単位の集計結果を作成したいと思っています。
方法として検討しているのは、MySQLに集計したいカスタムフィールドのビューを作って、
/app/model/issue.rbにそのビューを見て集計するメソッド追加。
/app/view/ewports/issue_report.html.erbのHookに結果を表示するという方法です。

/app/view/reports/issue_report.html.erb の ":data => @issues_by_XXX"を見る
=> /app/controllers/reports_controller.rb の "@issues_by_XXX = Issue.by_XXX(@project)"を見る
=> /app/model/issue.rb の"def self.by_XXX"を見る
=> チケットの数をカウントするSQLを発見
上記の通り調査をしましたが、ここからどうクエリを作るかで四苦八苦しています。
できればSQLを教えていただきたいです。

2.特定のカスタムフィールドの入力欄を大きくしたい

進捗状況という長いテキスト形式で作成したフィールドの入力欄を、注記並に大きく表示したいと思っています。
(rows=10 width=98%くらいで)
下記の質問とも重複していますが、具体的な解決手順がわかりませんでした。

目的のカスタムフィールド(cf_XXX)を判別して、それだけ<div class="splitcontentleft">の外に表示しようと考えましたが、
@issue.custom_field_values.each do |value| の中からcf_XXXだけ抜くことができませんでした。
抜き出す方法がわかれば教えていただきたいです。

・チケット一覧を2軸で色分けしたい

優先度ともうひとつの指標(カスタムフィールド)の2軸でチケット一覧を色分けすることを考えています。
色分けはapplication.css内でtr.priority-X { }によって可能とわかっており、
classの記述は/app/view/_list.html.erb内のclass="hascontextmenu <%=cycle('odd', 'even') %> <%= issue.css_classes %>より
/app/model/issue.rb内のdef css_classesのs = "issue status-#{status.position} priority-#{priority.position}"にて定義されていることもわかりました。

カスタムフィールドには段階わけをするためのpositionがないため、別途カラムを追加する必要があるのでしょうか。


すみません、並行して試行錯誤しておりますが、解決の方針だけでも教えていただけると幸いです。

nobu_toyofuku

unread,
Apr 11, 2012, 8:32:34 AM4/11/12
to redmine-...@googlegroups.com
豊福です。

すぐに反応できそうなとこから。

> 2.特定のカスタムフィールドの入力欄を大きくしたい
...


> @issue.custom_field_values.each do |value| の中からcf_XXXだけ抜くことができませんでした。
> 抜き出す方法がわかれば教えていただきたいです。

value.custom_filed でカスタムフィールドのテンプレート(?)が取れるので
if value.custom_filed.id == XXX とか
if value.custom_filed.name == '進捗状況' とか
if value.custom_filed.field_format == 'text' # 長いテキストか、とか
で判断できると思います。

> ・チケット一覧を2軸で色分けしたい
> 優先度ともうひとつの指標(カスタムフィールド)の2軸でチケット一覧を色分けすることを考えています。

指標のカスタムフィールドはどんな型(整数?文字列?リスト?)で例えば
どんな内容でどんな風に段階分けするのですか。

> カスタムフィールドには段階わけをするためのpositionがないため、別途カラムを追加する必要があるのでしょうか。

「別途カラムを追加する」とは例えばどんな風にすることですか。
---

junki

unread,
Apr 11, 2012, 1:11:40 PM4/11/12
to redmine-...@googlegroups.com
豊福さん

ご返信ありがとうございます。

>指標のカスタムフィールドはどんな型(整数?文字列?リスト?)で例えば
>どんな内容でどんな風に段階分けするのですか。 

指標値は意思決定度といって、上流工程での判断が必要か、チーム内の判断でも良いかの値となります。
リストから選択で、3段階で評価します。(仮に上中下とします。)

この意思決定度と優先度(高中低)によって9段階の色分けを行いたいと思っています。
具体的には、意思決定度で色傾向、優先度で色の濃淡を決定します。
例えば、意思決定度【高】は赤系。下図の2が【高・上】、3が【高・中】、4が【高・下】のようなイメージです。
同様に、【中・上】が6、【中・中】が7、【中・下】が8、【低・上】が10、【低・中】が11、【低・下】が12 といったように色分けをしたいと考えています。

>「別途カラムを追加する」とは例えばどんな風にすることですか。 
/app/models/issues.rb内のcss_classes内で、#{priority.position}を指定しているように、カスタムフィールドの値を指定しようと考え、カスタムフィールドの値を表現する数値を入れるカラムを追加しようと考えましたが、そのままcf_XXXのカスタムフィールドの値を出力すればよいような気がしています。
css_classesに下記を追加
@custom_values.each {|c| 
s << ' #{custom_value.}' if c.value.custom_filed.name == '進捗状況'
}
などでしょうか。まだ、custom_valuesとか、valueとか、custom_fieldの構造よくわかっていません。


if value.custom_filed.id == XXX について、ありがとうございます!明日試してみます。

2012年4月11日水曜日 21時32分34秒 UTC+9 nobu_toyofuku:ofuku

junki

unread,
Apr 11, 2012, 10:34:47 PM4/11/12
to redmine-...@googlegroups.com
豊福さん

2.特定のカスタムフィールドの入力欄を大きくしたい、
について下記の修正で対応できました!ありがとうございます。

--- app/views/issues/_form_custom_fields.html.erb.org
+++ app/views/issues/_form_custom_fields.html.erb
@@ -?,? +?,? @@ 
 <div class="splitcontentleft">
 <% i = 0 %>
 <% split_on = (@issue.custom_field_values.size / 2.0).ceil - 2 %>
 <% @issue.custom_field_values.each do |value| %>
+   <% if value.custom_field.name != '進捗状況' -%>
     <p><%= custom_field_tag_with_label :issue, value %></p>
+   <% else %>
+     <% @val = capture do %>
+     <%= custom_field_tag_with_label :issue, value %>
+     <% end %>
+   <% end -%>
 <% if i == split_on -%>
 </div><div class="splitcontentright">
 <% end -%>
 <% i += 1 -%>
 <% end -%>
 </div>
 <div style="clear:both;"> </div>
+ <div class="undercontents"><p><%= @val %></p></div>

上記に加えてapp/public/stylesheets/application.cssを編集して、回り込みや幅を調整しました。
.undercontents{float:none; width:98%;}

また、縦幅については、/app/helper/custom_fields_helper.rbのL47を下記のように修正しました。
    when "text"
      text_area_tag(field_name, custom_value.value, :id => field_id, :rows => 7, :style => 'width:90%')

ちなみに、前回豊福さんが書いてらっしゃった、
@@ -?,? +?,? @@ 
って、修正した行を表しているんでしょうか?
ちょっと記入法則がわからなかったのですが、どういう値を入れるのでしょう。


2012年4月11日水曜日 16時28分16秒 UTC+9 junki:

nobu_toyofuku

unread,
Apr 12, 2012, 6:47:50 AM4/12/12
to redmine-...@googlegroups.com
豊福です。

> 2.特定のカスタムフィールドの入力欄を大きくしたい、
...


> <% split_on = (@issue.custom_field_values.size / 2.0).ceil - 2 %>

「進捗状況」カラムが必ず一つ外れることがわかっているなら
@issue.custom_field_values.size のところは1減らしといた方がいいですかね。

> ちなみに、前回豊福さんが書いてらっしゃった、
> @@ -?,? +?,? @@
> って、修正した行を表しているんでしょうか?
> ちょっと記入法則がわからなかったのですが、どういう値を入れるのでしょう。

特別なことをしてない diff -u の出力結果を貼っただけなんですが・・・
「@@ -3,6 +3,10 @@」だと修正した部分だけでなくその前後近辺の行も含めて
表示されている範囲が変更前だと3行目から6行分、変更後だと3行目から10行分、
という意味のようです。


> 1.カスタムフィールドの単位で集計したい
> レポート内に、カスタムフィールドで追加した項目単位の集計結果を作成したいと思っています。
...
> できればSQLを教えていただきたいです。

例えば、
id番号が YYY のプロジェクトの中の、ユーザid番号が ZZZ の人が作成したチケットの
カスタムフィールドid番号が XXX に書かれた数値の総和を取るとしたら
select sum(value) from custom_values, issues where custom_field_id=XXX
and customized_type='Issue'
and customized_id=issues.id
and issues.project_id=YYY
and issues.author_id=ZZZ

になると思います。

段階分けの件に関してはもうちょっと調べてから書きます。
---

junki

unread,
Apr 12, 2012, 8:04:49 AM4/12/12
to redmine-...@googlegroups.com
豊福さん

いつもありがとうございます。
ようやく、RedMineの構造についてもちょっとわかってきました。
value.custom_filed.id などを駆使して、改良に四苦八苦しています。

>@issue.custom_field_values.size のところは1減らしといた方がいいですかね。 
これは、色々試していて変更していた点ですね。直すのを忘れていたようです。

>特別なことをしてない diff -u の出力結果を貼っただけなんですが・・・ 
diffですか!お恥ずかしながら使っていなかったもので。。。

>SQL
SQLを教えていただきありがとうございます!
まだHookは使ったことがないので、もう少し調べて実践してみます。


本日は、チケットリストをA3サイズのPDFで出力し、進捗状況カラムの幅の割合(ratio)を大きくするよう改良しました。
みなさまのおかげです。ありがとうございます。

2012年4月12日木曜日 19時47分50秒 UTC+9 nobu_toyofuku:

古美術

unread,
Apr 18, 2012, 1:13:42 AM4/18/12
to redmine-...@googlegroups.com
Junkiさんと同様に、進捗管理用に特定のカスタムフィールドの入力欄を
横に広げたたかったので、
Junkiさん、豊福さんの投稿を参考にして、
トライしてみましたが、うまくいきません。

実施した方法は、下記のとおりです。
 1.
app/views/issues/_form_custom_fields.html.erb を修正。
 2.
rake db:migrate_plugins RAILS_ENV=production を実施。
 3.Redmine再起動。
これでよいのでしょうか?ご教授いただけると幸いです。

2012年4月12日木曜日 11時34分47秒 UTC+9 junki:
2012年4月12日木曜日 11時34分47秒 UTC+9 junki:
2012年4月12日木曜日 11時34分47秒 UTC+9 junki:

古美術

unread,
Apr 18, 2012, 1:21:25 AM4/18/12
to redmine-...@googlegroups.com
Junkiさん、豊福さんへ

横やりで申し訳ありませんが、
Junkiさんと同様に、進捗管理ように「長いテキスト」の入力エリアを
広げようとしたのですが、うまくいきません。
実施した内容は、以下のとおりです。
 1.app/views/issues/_form_custom_fields.html.erb を修正。
 2.rake db:migrate_plugins RAILS_ENV=production を実施。
 3.Redmine再起動
この手順でよろしいのでしょうか?アドバイスをいただけると幸いです。

2012年4月12日木曜日 11時34分47秒 UTC+9 junki:

nobu_toyofuku

unread,
Apr 19, 2012, 4:23:41 AM4/19/12
to redmine-...@googlegroups.com
豊福です。

2012年4月18日14:21 古美術 <mhar...@gmail.com>:


> 実施した内容は、以下のとおりです。
>  1.app/views/issues/_form_custom_fields.html.erb を修正。
>  2.rake db:migrate_plugins RAILS_ENV=production を実施。
>  3.Redmine再起動。
> この手順でよろしいのでしょうか?アドバイスをいただけると幸いです。

junkiさんの投稿メールを見ると
app/public/stylesheets/application.css
app/helper/custom_fields_helper.rb
も修正しているようですよ。

「rake db:migrate_plugins RAILS_ENV=production」は
いらなそうですがどうなんでしょう。
---

Reply all
Reply to author
Forward
0 new messages