view customize pluginで「トラッカー」毎に選択可能な「活動」を変更する(Redmine)

view customize pluginで「トラッカー」毎に選択可能な「活動」を変更する(Redmine)
                 
最終更新日から90日以上経過しています。

はじめに

Redmineでは「トラッカー」でタスクの種類(バグ,雑務,etc…)を指定して、
作業時間を記録する為に「活動」として実際の作業内容(設計,開発,etc…)を
指定します。
しかし、例えば「トラッカー」で”雑務”を選択したのに「活動」で”開発”は選択して
欲しくないのです。
つまりは、「トラッカー」の値により、選択する必要の無い「活動」はプルダウンに
表示しないようにしたい。

環境

各バージョン等は下記の通り。

Redmine

3.0.0.stable

view customize plugin

1.2.2

 

準備

トラッカーのIDを確認する

トラッカーにはIDが採番されており、後述のJavaScriptでどのトラッカーか判定する為に使用する。
トラッカーのIDは下記から確認できる。

ヘッダの”管理” > トラッカーを選択…

現在作成されているトラッカーの一覧が表示されるので、任意のトラッカーを選択…

画面遷移後のURLの trackers/○/edit   の”○”部分がトラッカーID。

活動のIDを取得する

トラッカーと同様に、活動にもIDが採番されている。
こちらも後述のJavaScriptで使用する為、下記から確認しておく。

ヘッダの”管理” > 列挙項目を選択…

現在作成されている作業の一覧が表示されるので、任意の作業を選択…

画面遷移後のURLの enumerations/○/edit   の”○”部分が作業のID。

設定内容

設定は下記の通りです。

Path pattern

/issues/[0-9]+

Type

JavaScript

Code

$(function() {
    // 「トラッカー」ID毎に、有効にする「活動」IDを配列で設定
    const workMap = {
        '1':[       // トラッカーID:1(バグ)は、
            '8',    // 活動ID:8(設計)と
            '9'     // 活動ID:9(開発)を有効にする
        ],
        '3': [      // トラッカーID:3(雑務)は、
            '10'    // 活動ID:10(打ち合わせ)を有効にする
        ]
        // それ以外のトラッカーの時は何もしない。
    };

    const setWorksEnabled = function() {
        // 「活動」の選択状態をクリア
        $('#time_entry_activity_id').val("");

        // 全選択肢の disabled をクリア
        const activities = $('#time_entry_activity_id option');
        $(activities).each(function(index) {
            $(activities[index]).prop('disabled', false);
        });

        // 選択中の「トラッカー」毎に「活動」の有効/無効を設定
        const enabledWorks = workMap [$('#issue_tracker_id option:selected').val()];
        if(enabledWorks) {
            $(activities).each(function(index) {
                if($(activities[index]).val() === '') return;
                if(enabledWorks.indexOf($(activities[index]).val()) === -1) {
                    $(activities[index]).prop('disabled', true);
                }
            });
        }
    };

    // 初期表示時の設定処理呼び出し
    setWorksEnabled();
    $(document).ajaxComplete(function(){
        // トラッカー変更時の設定処理呼び出し
        setWorksEnabled();
    });
});

結果

トラッカーが”バグ”の時は、”設計”、”開発”が有効になっている。

トラッカーが”雑務”の時は、”打ち合わせ”が有効になっている。

それ以外の時は何もしない(有効/無効の制御をしない)

おわりに

恥ずかしながらoptionにdisabledが設定できる事を始めて知った。。。
トラッカーを変更する度に有効にする選択肢を残してoptionをremove()しないといけないかと
思っていたが、嬉しい誤算だった。
また、大抵の事はWeb上で見つかるが、この件については見つからなかった。
そういう時は大抵自分の認識が誤っているので、「トラッカー」毎に選択可能な「活動」を変更する、という使い方はRedmineが想定しているものではないのか・・・?
とりあえずview customize pluginによる魔改造で実現できたので満足。

Redmineカテゴリの最新記事