はじめに
Redmineではチケットを親子関係で紐付けて、子チケットの工数を親チケット側に集計表示する事が
できます。
逆に言うと、子チケットの工数は親チケットに吸い上げるので、親チケット側では工数を入力したくない。
ので、view customize plugin で実現してみます。
完成イメージ
先に完成形。
親チケットに対して工数を入力するとアラートを表示して登録を中止します。
環境
各バージョン等は下記の通り。
Redmine
3.0.0.stable
view customize plugin
1.2.2
設定内容
設定は下記の通りです。
Path pattern
チケットの詳細画面を対象にするパターン
/issues/[0-9]+
Type
JavaScript
Code
$(function() { const URL = location.href; // チケット番号をURLから取得 const ISSUE_ID = URL.substr(URL.lastIndexOf("/")+1); $('#issue-form').submit(function() { // 作業実績を取得 const hours = $('#time_entry_hours').val(); // 作業実績が入力されている場合のみ if(hours !== "" && isFinite(hours)) { $.ajax({ type: 'GET', url: '/issues/' + ISSUE_ID + '.json?include=children', headers: { 'X-Redmine-API-Key': 'abcde.....................' }, dataType: 'json', contentType: 'application/json', }).done(function(resp) { console.log(resp); if(resp['issue']['children']) { alert('親チケットには工数を入力できません。'); }else{ $('#issue-form').off('submit'); $('#issue-form').submit(); } }).fail(function(error) { console.log(error); }); return false; } }); });
ポイント、というか詰まった所1:子チケットの取得
url: '/issues/' + ISSUE_ID + '.json?include=children',
Redmineには、こちらに記載されている内容のAPIが用意されています。
チケット情報はissuesで取得できますが、子チケットの情報を取得するには?include=childrenを
付与する必要があります。
これに気付けず絶望してました。リファレンスはちゃんと読もう、自分。
ポイント、というか詰まった所2:submitの中止と再実行
$('#issue-form').off('submit'); $('#issue-form').submit(); } }).fail(function(error) { console.log(error); }); return false;
submit()にイベントを付与しますが、非同期処理でチケット情報を取得する為、
return false; で中止します。
そしてチケット情報取得後に本来のsubmit()を実行したいので、再度同じ処理が実行されないよう、off(‘submit’)で付与したイベント外した後にsubmit()します。
おわりに
RedmineのAPIが思ったより充実していたので、色々実装できそうな気がした。
親チケットの予定工数は入力できないようにRedmine側で制御されているようなので、
今後のアップデートで実績工数も入力不可になるのかな?