プロジェクト

全般

プロフィール

QA #823

未完了

チケット作成時に工数も登録できるようにしたい。

poy poypoy さんがほぼ6年前に追加. 約5年前に更新.

ステータス:
回答済
優先度:
通常
担当者:
-
カテゴリ:
-
対象バージョン:
開始日:
2018/06/08
期日:
進捗率:

0%

予定工数:

説明

Redmine3.3.3 使用

いつも参考にさせていただいております。

チケット作成時に工数登録を行いたいのですが、仕組として可能でしょうか。
イメージとしてはチケット作成画面にて、作業活動別のプルダウンと工数入力用のテキストボックスがある、です。

奈良 裕記 さんがほぼ6年前に更新

(現状確認)
チケット作成画面。予定工数設定のみ可能
チケット編集画面、作業工数実績を入力可能

チケット作成画面にて、予定工数と合わせて作業実績も入力したいということでしょうか?

予定工数は、チケット本体(issuesテーブル)のカラムとして登録されていますが、
作業工数実績は、Redmine内部ではチケット番号付で別のテーブルに格納されています。

チケット作成画面では、チケット番号が決定していませんので、
一時的に情報保持する仕組みが必要になるかと思います。

問い合わせ対応記録などの用途で、起票時に、内容と所要時間を入力したいだけということでしたら、
別途カスタムフィールドを追加し、そちらに入力する方法もありますね。

poy poypoy さんがほぼ6年前に更新

>予定工数は、チケット本体(issuesテーブル)のカラムとして登録されていますが、
 作業工数実績は、Redmine内部ではチケット番号付で別のテーブルに格納されています。

 チケット作成画面では、チケット番号が決定していませんので、
 一時的に情報保持する仕組みが必要になるかと思います。

一時的に情報をもたせておく仕組みが必要とのこと、理解しました。ありがとうございました。

Kawai takashi さんが5年以上前に更新

チケット新規作成完了後に、作成されたチケット番号が入力された状態で「作業時間」登録画面を自動で開けば、要件としては満たせるのかなと思いますがどうでしょうか(チケット詳細画面で「時間を記録」を押下したのと同じ動き)。

View Customize Pluginで実現してみました。

//-----------------------------
//新規登録時に工数も登録したい
//パスのパターン:/issues/(new|[0-9]+)
//-----------------------------

$(function(){
  var windowshref = location.href
  if (windowshref.indexOf('/new') !== -1) {//チケット新規作成画面ならば以下の処理をを実行
    $('input[type="submit"]').on('click', function() {
      var to_issues = $('#issue_status_id').val(); //ダミーデータなので何でも良い
      localStorage.setItem('key', to_issues);// ローカルストレージにダミーデータを書き込み
    });
  }
});

$(function(){ 
   var from_new = localStorage.getItem('key');
   var windowshref = location.href
   if (from_new == "1" && windowshref.indexOf('/new') == -1 ){
     // チケット編集画面表示時に、ローカルストレージに値が保存されていたら(新規登録画面から遷移してきたと見なして)以下の処理を実行
     var issueId = ViewCustomize.context.issue.id;//新規登録されたチケットIDを取得
     //取得したチケットIDで作業時間登録画面を別タブで開く
     //var newWindow = window.open("/issues/" + issueId + "/time_entries/new");
     //ポップアップで開く
     var newWindow = window.open("/issues/" + issueId + "/time_entries/new","worktime",'width=800,scrollbars=yes');
     // ローカルストレージのクリア
     $(window).load(function() {
       setTimeout(function(){
         localStorage.clear();
       }, 3000);
     });     
   }else{
   //ローカルストレージに値が保存されていない場合は何もしない
   }
});

奈良 裕記 さんが約5年前に更新

Kawai takashi さん、対応ありがとうございます。

2件引っ掛かったので報告します。

1. ポップアップブロックの対応

ポップアップブロックの対応を行わないと作業時間の入力画面が表示されませんでした(Chromeの場合)

2.Redmine をサブディレクトリにインストールした場合の対応

サーバ/redmine/ で運用している場合に、作業時間入力画面のURLが正しく呼び出されない場合があります。
手元の環境では、下記の様に、/redmine/issues に変更して動作しました。

var newWindow = window.open("/redmine/issues/" + issueId + "/time_entries/new","worktime",'width=800,scrollbars=yes');

対策としては、上記の様に直書きするか、
location.pathnameの最初が /redmine/の場合に追加ですかね、

インストール環境の問題かもしれません。
https://github.com/y503unavailable/redmine-centos-ansible
RackBaseURI /redmine を設定しています。

Kawai takashi さんが約5年前に更新

ご指摘の通りですね。
1.ポップアップブロックの対応を行わないで済む方法は見つからないですね。

*私もChromeで試してみたのですが、SSLで自己署名認証の環境だとポップアップブロックされましたが、正式に認証された環境だとポップアップブロックされませんでした。

2.Redmine をサブディレクトリにインストールした場合の対応

以下のように修正しました。

$(function(){ 
   var from_new = localStorage.getItem('key');
   var windowshref = location.href;
    if (from_new == "1" && windowshref.indexOf('/new') == -1 ){
     // チケット編集画面表示時に、ローカルストレージに値が保存されていたら(新規登録画面から遷移してきたと見なして)以下の処理を実行
     //登録されたチケットのURLで作業時間登録画面を別タブで開く
     //var newWindow = window.open(windowshref + "/time_entries/new");
     //ポップアップで開く
     var newWindow = window.open(windowshref + "/time_entries/new","worktime",'width=800,scrollbars=yes');
     // ローカルストレージのクリア
     $(window).load(function() {
       setTimeout(function(){
         localStorage.clear();
       }, 3000);
     });     
   }else{
   //ローカルストレージに値が保存されていない場合は何もしない
   }
});

奈良 裕記 さんが約5年前に更新

  • ステータス新規 から 回答済 に変更

対応ありがとうございます。

サブディレクトリ使用の手元の環境で動作確認しました。

ポップアップブロックの件は、動作環境により発生する事で、利用上の注意点ですね。

Kawai takashi さんが約5年前に更新

以下のようにすると、ポップアップブロックに引っかかりません。

//-----------------------------
//新規登録時に工数も登録したい
//パスのパターン:/issues/(new|[0-9]+)|/time_entries/new
//-----------------------------

$(function(){
  var windowshref = location.href;
  if (windowshref.indexOf('/new') !== -1) {//チケット新規作成画面ならば以下の処理をを実行
    $('input[type="submit"]').on('click', function() {
      var to_issues = $('#issue_status_id').val(); //ダミーデータなので何でも良い
      localStorage.setItem('key', to_issues);// ローカルストレージにダミーデータを書き込み
    });
  }
});

$(function(){ 
   var from_new = localStorage.getItem('key');
   var windowshref = location.href;
    if (from_new == "1" && windowshref.indexOf('/new') == -1 ){
     // チケット編集画面表示時に、ローカルストレージに値が保存されていたら(新規登録画面から遷移してきたと見なして)以下の処理を実行
     //取得したURLで作業時間登録画面を別タブで開く
     var newWindow = window.open(windowshref + "/time_entries/new", target="_self");
   }
});

$(function(){ 
   var windowshref = location.href;
    if (windowshref.indexOf('/time_entries/new') !== -1 ){
     localStorage.clear();
    }else{
    //ローカルストレージに値が保存されていない場合は何もしない
    }
});

ですが、新規登録された結果を見られないまま作業時間のページに遷移してしまう動作が、質問された方の運用上で許されるのか判断できないです。

奈良 裕記 さんが約5年前に更新

新規登録された結果を見られないまま作業時間のページに遷移してしまう動作が、
質問された方の運用上で許されるのか判断できないです。

動作確認しました。
これはこれで悪くないので、エンドユーザ含めた判断かと思います。

ViewCustomizeで、新規チケット入力画面の下に時間入力項目を追加し、
localstorageで引き渡す事も考えられますが、
作業時間/作業分類のカスタムフィールドを追加していたら対応困難ですし、
現状で十分だと思います。

(黒魔術の対応も見たことはありますが、道具には適切な利用範囲というものがあるでしょう)

奈良 裕記 さんが約5年前に更新

  • 対象バージョン設定変更対応 にセット

他の形式にエクスポート: Atom PDF