QA #823
未完了チケット作成時に工数も登録できるようにしたい。
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{
//ローカルストレージに値が保存されていない場合は何もしない
}
});
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{
//ローカルストレージに値が保存されていない場合は何もしない
}
});
ですが、新規登録された結果を見られないまま作業時間のページに遷移してしまう動作が、質問された方の運用上で許されるのか判断できないです。