/*****************************************************************************/
/* ワークフロー分岐処理プログラム */
/*****************************************************************************/
// 登録
Module.workflow.setProcess("juncSmp01", "条件分岐for勤怠テストルート2", junctionOfFlow, "junction");
//第四引数は変更不可
//=============================================================================
// 勤怠アプリケーション(kintai) のサンプル
// ルート名:勤怠テストルート2(ルートコード:test002) 用 条件分岐処理
// 【 入力 】oCurrent: 現在作業対象のブロックオブジェクト
// aBefore : 前ブロックオブジェクト群
// aNext : 次ブロックオブジェクト群
// 【返却値】真値:正常終了
// 偽値:エラー発生
// 【 作成 】1999/03/10 NTT DATA INTRAMART
// 【 更新 】
// 【 概要 】分岐処理を行います。
// 前ブロックオブジェクト群(aBefore)は、現在作業対象の
// ブロックと同列(同レベル)のブロックです。
//=============================================================================
function junctionOfFlow(oCurrent, aBefore, aNext) {
//Debug.browse("oCurrent",oCurrent,"aBefore",aBefore,"aNext",aNext);
//Debug.browse("aNext",aNext);
//Debug.browse("oCurrent",oCurrent.data);
//Debug.browse("aNext",aNext);
var aMail, aName;
var oUser;
var oBlock;
var strSql;
var objDatas;
var numWkTime;
// 通常処理を記述します。
switch(oCurrent.getOperation()){
case "ok": // 承認処理
if(! oCurrent.approve()){
// エラーが発生
return false;
}
// エラー無しの場合には、以下の処理を行う
case "apply": // 申請処理
case "retry": // 再申請処理
// 次の承認者の承認待ちスタート
aMail = new Array();
aName = new Array();
//=========================================================
//条件設定
// 一月の実動時間が160時間を越えていたら上のルート
// 一月の実動時間が160時間以内なら下のルート
//=========================================================
//oCurrent.data.key[0] == "ユーザコード";
//oCurrent.data.key[1] == "申請年月(YYYY/MM)";
var strSTDate = oCurrent.data.key[1] + "/01|00:00:00";
var strEDDate = oCurrent.data.key[1] + "/31|23:59:59";
// 勤怠時間の合計を取得
strSql = "SELECT ";
strSql += " sum(wk_time) sum_wk_time";
strSql += " FROM t_stf_attend";
strSql += " where user_cd = '" + oCurrent.data.key[0] + "'";
strSql += " and attend_date >= '" + strSTDate + "'";
strSql += " and attend_date <= '" + strEDDate + "'";
objDatas = Module.database.select(strSql);
numWkTime = parseFloat(objDatas.data[0].sum_wk_time);
//申請処理
//フロー図において、ブロック位置が下より上、
//右より左の方がブロックコードが若い
if(numWkTime > 160){
if(! aNext[0].enforce()){
// エラー発生
return false;
}
// 承認者の代理状況の確認
if(! Procedure.workflow.chkAgency(aNext[0])){
// エラー発生
return false;
}
// メール送信用データの作成
aMail[0] = aNext[0].user.mail;
aName[0] = aNext[0].user.name;
}else{
if(! aNext[1].enforce()){
// エラー発生
return false;
}
// 承認者の代理状況の確認
if(! Procedure.workflow.chkAgency(aNext[1])){
// エラー発生
return false;
}
// メール送信用データの作成
aMail[1] = aNext[1].user.mail;
aName[1] = aNext[1].user.name;
}
//============
//条件分岐終了
//============
// メールの配信
oCurrent.sendMail(aMail.join(","), aName.join(","));
oCurrent.sendNegoMail();
// 正常終了
return true;
case "ng": // 否認処理
// 進捗&最終結果ともに承認結果を設定
if(! oCurrent.approve()){
// エラー発生
return false;
}
// フローの終了処理
if(oCurrent.isEndOfFlow()){
if(! oCurrent.decision(Module.old_classify.getCode("im_wf_st", "endofflow"))){
// エラー発生
return false;
}
}
// メールの配信
oUser = oCurrent.getApplicant();
oCurrent.sendMail(oUser.user[0].mail, oUser.user[0].name);
//根回しメール
oCurrent.sendNegoMail();
// 正常終了
return true;
case "sendback": // 差し戻し処理
// 差し戻し先インスタンスの取得
oBlock = oCurrent.sendback();
if(oBlock == false){
// 差し戻し先が適切ではない
return false;
}
// 差し戻し先のスタート
if(! oBlock.enforce()){
// エラー発生
return false;
}
// 承認者の代理状況の確認
if(! Procedure.workflow.chkAgency(oBlock)){
// エラー発生
return false;
}
// メールの配信
oCurrent.sendMail(oBlock.user.mail, oBlock.user.name);
oCurrent.sendNegoMail();
return true;
case "hold": // 保留処理
if(oCurrent.approve()){
// 保留処理の成功
return true;
}
else{
// エラーが発生
return false;
}
}
return false;
}
/* End of File */