物品貸出プロセス,貸出リスト閲覧 20220812
物品貸出申請を受け付けるワークフローです。貸出申請時、検索ボタン押下で、指定した物品の貸出状況がリスト表示されます。貸出状況は、貸出中/予約中の申請から期間・利用者が取得され、記載されます。(物品貸出プロセス,QRコード利用 https://support.questetra.com/ja/templates/items-lending-management-by-qrcode-20220711/ をベースに作成されています)
作業担当者 (スイムレーンの数:3)
  • 申請者
  • 総務部 物品貸出担当
  • 上長
仕事の流れ (ワークフロー図の複雑度:23)
  • 1 1.貸出申請
    • 社員は、物品の貸出を申請します。
  • 4 1x.再申請
    • 社員は、物品の貸出を却下理由を元に再申請します。却下理由に依っては、申請を取下げます。
  • 2 2.承認
    • 申請者の上長は、貸出申請を承認します。
  • 8 3.貸出受付
    • 総務部 貸出担当は、QRコードから申請内容を確認し、物品貸出日時を登録します。
  • 12 4.返却受付
    • 総務部 貸出担当は、QRコードから申請内容を確認し、物品返却日時を登録します。
  • 5 x1.件名セット
    • ワークフロー基盤は、件名をセットします。
  • 6 x2.受付証QRコード発行
    • ワークフロー基盤は、貸出・返却受付用の QR コード(PNG画像)を生成します。
  • 18 x3.件名セット
    • ワークフロー基盤は、件名をセットします。
  • 22 督促日時 更新
    • ワークフロー基盤は、督促日時を2時間後に更新します。
  • 23 貸出Status キャンセル
    • ワークフロー基盤は、貸出ステータスを”キャンセル”に変更します。
  • 21 貸出Status 予約済
    • ワークフロー基盤は、貸出ステータスを”予約済”に変更します。
  • 19 貸出Status 貸出中
    • ワークフロー基盤は、貸出ステータスを”貸出中”に変更します。
  • 20 貸出Status 返却済
    • ワークフロー基盤は、貸出ステータスを”返却済”に変更します。
ワークフロー図 (クリックして開く)
受け渡しされるビジネスプロセス変数 (データ項目の数:19)
  • ◆申請 10
  • 貸出物品カテゴリ q_item_category 4 *
    • 貸出物品のカテゴリが格納されます。
  • 貸出物品 q_item 5 *
    • 貸出物品が格納されます。
  • ◆貸出物品状況の確認 17
    • 指定された貸出物品の貸出/予約状況を検索し、動的に表示します。
  • 貸出予定日時 q_lending_schedule_datetime 0 *
    • 申請時、貸出予定日時が格納されます。
  • 返却予定日時 q_return_schedule_datetime 1 *
    • 申請時、返却予定日時が格納されます。
  • 貸出目的 q_description 6
    • 申請時、物品の貸出理由が格納されます。
  • ◆貸出/返却 11
  • 貸出管理番号 q_management_number 15
    • 貸出案件毎にユニークな管理番号が格納されます。
    • L#{#sformat(‘%06d’, processInstanceId)}
  • 物品利用者 q_quser 7
    • 貸出申請者が格納されます。
    • ${processInstance.initQuserId}
  • 物品利用承認者 q_leader 8
    • 貸出申請の承認者が格納されます。
    • ${processInstance.initQuserId}
  • 貸出完了日時 q_lending_datetime 2 *
    • 物品を貸出した日時が格納されます。
  • 返却完了日時 q_return_datetime 3 *
    • 物品を返却された日時が格納されます。
  • 貸出時:メモ q_lending_note 12
    • 貸出時の注意事項(物品の取扱・状態等)が格納されます。
  • 返却時:メモ q_return_note 13
    • 返却時の物品の状態等が格納されます。
  • 通信欄 q_communication 9
    • 申請時の注意事項、承認時のコメント等が格納されます。
  • QRコード画像ファイル q_QRCode_file 16
    • 本案件のプロセス詳細 URL を示すQRコードの画像ファイルが格納されます。
  • 貸出ステータス q_status 14
    • 物品の貸出ステータスが格納されます。
    • applying
  • 督促日時 q_remind_datetime 19
    • 返却督促日時が格納されます。

    フィールド名, Num, 初期値

    Download

    This archive contains the BPMN icon, which is only available in the Professional edition.

    Notes

    • インポート時に組織構造に合わせて、処理担当者設定の関連付けを行います
    • “申請者”スイムレーンの割当ユーザの権限
      • アプリ設定 > アプリ詳細 > 権限の編集 ”データ閲覧権限”を付与してください。
    • 予約キャンセルの運用
      • 貸出申請後、貸出不要となった場合、総務担当者に”予約キャンセル”の操作を依頼してください。

    Arrangement Tips

    「1.貸出申請」工程 貸出状況検索 デコレーション Script (click to open)
    <button onclick="user_getHistory()" type="button" class="user_Search">貸出中/予約中 確認</button>
    <br>貸出中/予約中の場合は、利用者と相談の上、申請してください。
    <div style="padding: 0.5em 1em; margin: 2em 0; font-weight: bold; color: #6091d3; background: #FFFFF; border: solid 3px #6091d3;  border-radius: 10px; width:80%;">
    <div id="user_Result"></div>
    </div>
    
    <script type="text/javascript">
    document.addEventListener("click", function (e) {
      console.log( " DocumentElement clicked: " + e.target.textContent );
      if (e.target.classList.contains("user_Appender")) {
        qbpms.form.set( "q_Transaction_Title", e.target.value );   ///EDIT///
      }
    });
    
    function user_getHistory() {
      let numTARGET_ITEM_ID          = 5;     ///No Need Editing///
      let numTARGET_STATUS_ID        = 14;    ///No Need Editing///
      let numTARGET_STARTDATETIME_ID = 0;     ///No Need Editing///
      let numTARGET_ENDDATETIME_ID    = 1;    ///No Need Editing///
      let numLIMITSIZE     = 10;              ///Need Editing (According to frequency of use)///
      let numWORKFLOWAPPID = ***;            ///Need Editing(This WorkFlow Application ID)///
      let strSearchItemId = "";
      let strSearchItemName = "";
      let array = qbpms.form.get( "q_item" );
      let elResultDiv     = document.querySelector("#user_Result");    ///EDIT///
      console.log("array: " + array.length);
      if (array.length !== 0){
        console.log( "q_item is not empty or null.");
        strSearchItemName = array[0].display;
        strSearchItemId = array[0].value;
      }else{
        elResultDiv.innerHTML = ""; // clear
        return;
      }
    
      let objCriteria = {}; // JSON criteria: (BPMS v13.3~)
          // https://questetra.zendesk.com/hc/ja/articles/4415341995289
          // https://questetra.zendesk.com/hc/en-us/articles/4415341995289
          objCriteria.processModelInfoId = numWORKFLOWAPPID;
          objCriteria.processInstanceState = [];
          objCriteria.processInstanceState[0] = "STARTED";
          objCriteria.data = [];
          objCriteria.data[0] = {};
          objCriteria.data[0].type   = "select";
          objCriteria.data[0].number = numTARGET_ITEM_ID;
          objCriteria.data[0].method = "selected";
          objCriteria.data[0].value  = strSearchItemId;
          objCriteria.fields = [];
          objCriteria.fields[0] = {};
          objCriteria.fields[0].type   = "select";
          objCriteria.fields[0].number = numTARGET_ITEM_ID;
          objCriteria.fields[1] = {};
          objCriteria.fields[1].type   = "datetime";
          objCriteria.fields[1].number = numTARGET_STARTDATETIME_ID;
          objCriteria.fields[2] = {};
          objCriteria.fields[2].type   = "datetime";
          objCriteria.fields[2].number = numTARGET_ENDDATETIME_ID;
          objCriteria.fields[3] = {};
          objCriteria.fields[3].type   = "select";
          objCriteria.fields[3].number = numTARGET_STATUS_ID;
      let xhr = new XMLHttpRequest();
          xhr.open( "GET", "/API/OR/ProcessInstance/list?limit=" + numLIMITSIZE +
                           "&criteria=" + encodeURIComponent(JSON.stringify(objCriteria)) );
          xhr.responseType = 'json';
          xhr.send();
          xhr.onload = function() {
            if (xhr.status != 200) {
              console.error(`Error ${xhr.status}: ${xhr.statusText}`); // e.g. "404: Not Found"
            } else { // show the result
              let objResponse = xhr.response;
              if (objResponse.count === 0){
                elResultDiv.innerHTML = "いつでも貸出可能"; // clear
                return;
              }
              console.log( " Decoration XHR: Found PastData " + objResponse.processInstances.length +
                           "/" + objResponse.count  );
              elResultDiv.innerHTML = ""; // clear
              let list = Array.from(new Array(objResponse.processInstances.length), () => new Array(6).fill(""));
              for (let i=0; i < objResponse.processInstances.length; i++){
                console.log("STATUS:" + objResponse.processInstances[i].data[numTARGET_STATUS_ID].value[0].value);
                list[i][1] = "【" + objResponse.processInstances[i].data[numTARGET_STATUS_ID].value[0].display +"】" + " ";
                list[i][2] = "/OR/ProcessInstance/view?processInstanceId=" + objResponse.processInstances[i].processInstanceId;
                list[i][3] = "_blank";
                if (objResponse.processInstances[i].data[numTARGET_STARTDATETIME_ID].value !== null){
                  list[i][0] = objResponse.processInstances[i].data[numTARGET_STARTDATETIME_ID].value;
                  list[i][4] = objResponse.processInstances[i].data[numTARGET_STARTDATETIME_ID].value + " - ";
                }else{
                  list[i][4] = "未定 - ";
                }
                if (objResponse.processInstances[i].data[numTARGET_ENDDATETIME_ID].value !== null){
                  list[i][5] = objResponse.processInstances[i].data[numTARGET_ENDDATETIME_ID].value + " ";
                }else{
                  list[i][5] = "未定 ";
                }
                list[i][6] = objResponse.processInstances[i].processInstanceInitQuserName;
              }
              console.log(JSON.stringify(list));
              createHtml(list,elResultDiv);
            }
            console.log( " Decoration XHR: finished " );
          };
          xhr.onerror = function() {
            alert("Request failed");
          };
      function createHtml(list,elResultDiv){
        list.sort(function(a, b){
    	return (a > b ? 1 : -1);
        });
        console.log("sorted: " + JSON.stringify(list));
        for (let i=0; i < list.length; i++){
    console.log(list[i][1]);
          let elNewAnchor = document.createElement("a");
              elNewAnchor.href = list[i][2];
              elNewAnchor.target = list[i][3];
              elNewAnchor.innerText += list[i][4];
              elNewAnchor.innerText += list[i][5];
              elNewAnchor.innerText += list[i][6];
          elResultDiv.append( list[i][1], elNewAnchor );
          elResultDiv.innerHTML += "<br>";
        }
      }
    }
    </script>

    Capture

    See also

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    %d人のブロガーが「いいね」をつけました。