担当者と進捗率を自動で設定したり、ヘルプを表示したりViewCustomizeでやってみる

# 担当者と進捗率を自動で設定したり、ヘルプを表示したりViewCustomizeでやってみる
をあるトラッカーに対して、強引に実施しています。
(いろいろ手抜きですが、すみません。。。)

- 担当者と進捗率を自動で設定

- Topメニューに「このステータスでやる事」をポップアップするリンクを表示

- チケットの最初にも「このステータスでやる事」を表示

![help.PNG](https://qiita-image-store.s3.amazonaws.com/0/150778/7dbe4135-88d9-b885-4a1a-c46f0610b7db.png)

- 次の担当者に向けたコメントを自動入力するポップアップを表示

![input.PNG](https://qiita-image-store.s3.amazonaws.com/0/150778/7f1770b6-21c5-e793-3664-0b0a3c9ad812.png)


- あるステータスでは、編集ボタンを自動クリック（カスタムフィールドに記入してほしい為）

- あるステータスでは、記入箇所の背景色をハイライト表示

![hilight.PNG](https://qiita-image-store.s3.amazonaws.com/0/150778/8b9c7229-f4de-39aa-0af2-1672610ec28b.png)


# ソース
## Path pattern:
```
/issues/new$|/issues/[0-9]+
```
## Type:
```
JavaScript 
```
## Code:
```js
/* 機能導入チケット */
$(function()
{
  var nowStatusId = $('#issue_status_id').val();
  var trackerId = $('#issue_tracker_id').val();
  var autoSetDone = 0;

  /* このステータスでやる事 (概略) */
  switch(trackerId)
  {
  case '2'://機能
    /* ステータスとコメントの組み合わせ */
    var statusToExplainComment = {
    '1' : "★このステータスでやる事<br>" +
          "1) 依頼者と事前打ち合わせする<br>" +
          "2) タイトルを記入する<br>" + 
          "3) ステータスを**に変更する",
    '2' : "★このステータスでやる事<br>" +
          "1) 担当者を設定する<br>" +
          "2) ステータスを**に変更する",  /* 進行中 */
    '3' : "33333333333",  /* 解決 */
    '4' : "44444444444",  /* フィードバック */
    '5' : "55555555555",  /* 終了 */
    '6' : "66666666666",  /* 却下 */
    };
    break;
  default:
    /* DO NOTHING */
    break;
  }

  /* このステータスでやる事 （詳細説明）*/
  var funcTodoDisp = function ()
  {
    var dispOn = 0;
    trackerId = $('#issue_tracker_id').val();
    switch(trackerId)
    {
    case '2'://機能
      /* ステータスとコメントの組み合わせ */
      var statusToComment = {
      '1' : "【新規】\n" + 
            "・事前打ち合わせ後、ステータスを変更して下さい\n" +
            "\n" + 
            "<このステータスの対象者>\n依頼を受けた者 or 作業担当者",
      '2' : "22222222222",  /* 進行中 */
      '3' : "33333333333",  /* 解決 */
      '4' : "44444444444",  /* フィードバック */
      '5' : "55555555555",  /* 終了 */
      '6' : "66666666666",  /* 却下 */
      };
      dispOn = 1;
      break;
    default:
      dispOn = 0;
      break;
    }
    
    if (dispOn)
    {
      var comment = statusToComment [nowStatusId];
      if (comment)
      {
        alert(comment);
      }
      else
      {
        alert('コメントなし');
      }
    }
    else
    {
      alert('コメントなし');
    }
    return false;
  }
  
  /* ステータス毎に背景変えたい */
  function funcAutoColorSet(sts)
  {
    switch(sts)
    {
    case '2'://進行中
      /* このステータスでは編集ボタンを押してあげる */
      $("div.contextual a.icon.icon-edit").click();
      
      /* 記入エリアに色を付けてあげる */
      $('#issue_custom_field_values_10').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_7').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_6').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_5').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_4').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_3').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_2').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_1').css({'background-color': 'lavenderblush'}); //背景色
      break;
    case '3'://解決      
      /* 記入エリアに色を付けてあげる */
      $('#issue_custom_field_values_11').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_9').css({'background-color': 'lavenderblush'}); //背景色
      $('#issue_custom_field_values_8').css({'background-color': 'lavenderblush'}); //背景色
      break;
    default:
      /* DO NOTHING */
      break;
    }
  }  

  /* ステータス変更で担当者と進捗率を自動設定 */
  var funcAutoSet = function()
  {
    /* ajax更新後にステータス変更をチェック開始 */
    $(document).ajaxComplete(function()
    {
  	  /* ステータス毎に背景変えたい部分（編集ボタン押したら色付けたい） */
  	  funcAutoColorSet(nowStatusId);
      
      /* ステータス変更された時だけ自動設定処理を実行する */
      $('#issue_status_id').change(function(){
        autoSetDone = 0;
        return false;
      });
      
      if (autoSetDone == 0)
      {
        autoSetDone = 1;
        var notes = "";
        var addComment = "";
        var commentTo = "";

        if (document.getElementById("issue_notes") != null)
        {
          notes = $('#issue_notes').val(); //記入済み注記をバックアップ
        }
        else
        {
          /* DO NOTHING */
        }
        
        var selectStatusId = $('#issue_status_id option:selected').val();
        switch(selectStatusId)
        {
        case '1': /* 新規 */
          $('#issue_assigned_to_id').val(1);
          $('#issue_done_ratio').val(0);
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        case '2': /* 進行中 */
          $('#issue_assigned_to_id').val($('#issue_custom_field_values_3').val());
          $('#issue_done_ratio').val(30);
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        case '3': /* 解決 */
          $('#issue_assigned_to_id').val($('#issue_custom_field_values_4').val());
          $('#issue_done_ratio').val(50);
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        case '4': /* フォードバック */
          $('#issue_assigned_to_id').val($('#issue_custom_field_values_1').val());
          $('#issue_done_ratio').val(70);
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        case '5': /* 終了 */
          $('#issue_assigned_to_id').val($('#issue_custom_field_values_2').val());
          $('#issue_done_ratio').val(100);
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        case '6': /* 却下 */
          /* 進捗率を変更しない */
          commentTo = $('#issue_assigned_to_id option:selected').text();
          addComment = "★" + commentTo + "さん、記入をお願いします。";
          break;
        default:
          alert("default default");
          /* DO NOTHING */
          break;
        }

        if (document.getElementById("issue_notes") != null)
        {//注記あり
          /* 注記にコメント追加 */
          var inputComment = prompt(commentTo + "さんへのコメント----------------------------",addComment);
          if ((inputComment == "") || (inputComment == null))
          {
            // DO NOTHING
          }
          else
          {
            if(notes > "")
            {
              notes = inputComment + "\n" + notes; //記入ありは改行追加後
            }
            else
            {
              notes = inputComment;
            }
          }
        
          $('#issue_notes').blur().focus().val(notes);
        }
        else
        {//注記なし
          /* DO NOTHING */
        }
        return false;
      }
      else
      {// 自動設定しないケース
        /* DO NOTHING */
      }
    })//$(document).ajaxComplete(function()
    return false;
  }
  
  /* MAIN部 */
  var $todo = $('#top-menu > #loggedas'); //リンク表示場所

	/* やる事リンクボタン表示 */
	$('<a href="#" >このステータスでやる事</a>').prependTo($todo).click(funcTodoDisp);

	if (trackerId == '2') //機能
	{
    /* やる事概略を表示 */
    var explainComment = statusToExplainComment [nowStatusId];
    var $myExplain = $("<p id='myexplain'>" + explainComment + "</p>"); 
    $('#content .issue:first').before($myExplain); //説明文
    $('#myexplain').css({'background-color': 'lavenderblush'}); //背景色

	  /* ステータス毎に背景変えたい部分 */
	  funcAutoColorSet(nowStatusId);
	  
    /* ステータス変更時のみ自動設定開始する */
    $('#issue_status_id').change(function(){
      autoSetDone = 0;

      /* 担当と進捗 自動設定 */
      funcAutoSet();
      return false;
    });
  }
  else
  {
    /* DO NOTHING */
  }
});
```

# ※参考記事
↓ Enjoy*Study (onozatyさん) ↓ 
[View customize plugin](http://blog.enjoyxstudy.com/archive/category/Redmine)