2024年10月31日 星期四

V20304A – 拆檢結果登錄 - 按鈕呼叫函式的方式 ,最後才宣告 / 必需先宣告 - function

 目的: V20304A – 拆檢結果登錄  - 按鈕呼叫函式的方式 ,最後才宣告 / 必需先宣告 - function

處理說明: 1>Ext.getCmp("sub_TALHR_CAL").handler = function () {
                           CALL_TALHR_CAL();
                      }
                       --> CALL_TALHR_CAL 函式可以在最後才宣告,

                  2>Ext.getCmp("sub_TALHR_CAL").handler = CALL_TALHR_CAL;
                 -->  CALL_TALHR_CAL 函式必需先宣告,   
                        否則    CALL_TALHR_CAL= undefined


1>*.js
Ext.getCmp("sub_TALHR_CAL").handler = function () {
        CALL_TALHR_CAL();
    }
    
    win1.show();
    win1.maximize();

var sub_V20304A_Btns = [
            //sub_V20304A_TALHR,
            cmp_sub_RPNOAF_TALHR, cmp_sub_MRPNOAF_TALHR, cmp_sub_TALHR_CAL_btn, '-', cmp_sub_TMP1, cmp_sub_TMP2,
            {
                xtype: 'button', text: '確認', id: 'sub_V20304A_OkBtn', flex: 5,
                listeners: {
                    click: function () {
                        //mysuccessalert("mysub2_確定 ");
                        //檢核 AMM項次的需求工時正確, 若有問題,則 Tmp_isOk=false, 若沒問題, Tmp_isOk=true, 才執行[確認]的處理
                        V20304A_OK();
                    }
                }
            },



//工時合計函式
    var CALL_TALHR_CAL = function () {
        var Tmp_isOk = true;
        //myalert(" click 工時合計");
        //1>判斷主步序(1.xx) 的工時>0 時, 不可以有明細步序(1.xx.xx)        
        var mysubstore = Ext.getCmp('sub_Grid').store;
        var Tmp_cnt = mysubstore.data.length;
        console.log("mysubstore.count : ", Tmp_cnt);
        console.log("mysubstore.data.items : ", mysubstore.data.items);
        var i;
        var Tmp_Str;
        var Tmp_AMINO, Tmp_ITMNO, Tmp_RQHR, Tmp_ITMNO_NEXT;
        var Tmp_ITMNO_dot_cnt, Tmp_ITMNO_NEXT_dot_cnt;
        var Tmp_rec, Tmp_rec_NEXT;
        for (i = 0; i < Tmp_cnt; i++) {
            if (i == Tmp_cnt - 1)  //若為最後一筆資料,則離開 , 不需再檢查
                break;
            Tmp_rec = mysubstore.getAt(i);
            Tmp_AMINO = nulltoStr(Tmp_rec.data["AMINO"]);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            //Tmp_ITMNO = nulltoStr(mysubstore.data.items[i].data["ITMNO"]);
            console.log("i: ", i);
            console.log("Tmp_ITMNO: ", Tmp_ITMNO);
            Tmp_ITMNO_dot_cnt = Tmp_ITMNO.split(".").length - 1;
            console.log("Tmp_ITMNO_dot_cnt: ", Tmp_ITMNO_dot_cnt);
            if (checkisnull(Tmp_rec.data["RQHR"])) {
                Tmp_Str = "AMM項次(" + Tmp_AMINO + ")的需求工時不可為空白<br>"
                    + "敬請檢核 !!";
                mywarnalert(Tmp_Str);
                Tmp_isOk = false;
                return Tmp_isOk;
            }
            //1>>若為主步序(1.xx)且需求工時>0  ,且有子步序,則顯示訊息, 主步序工時>0 , 不可有子步序           
            if (Tmp_ITMNO_dot_cnt == 1) {  //為主步序
                Tmp_RQHR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
                //Tmp_RQHR = Number(nulltoStr(mysubstore.data.items[i].data["RQHR"]));
                console.log("Tmp_RQHR : ", Tmp_RQHR);
                if (Tmp_RQHR > 0) {   //為主步序,且[需求時數]>0, 判斷是否有明細步序
                    Tmp_rec_NEXT = mysubstore.getAt(i + 1);
                    Tmp_ITMNO_NEXT = nulltoStr(Tmp_rec_NEXT.data["ITMNO"]);
                    //Tmp_ITMNO_NEXT = nulltoStr(mysubstore.data.items[i + 1].data["ITMNO"]);
                    console.log("Tmp_ITMNO_NEXT : ", Tmp_ITMNO_NEXT);
                    Tmp_ITMNO_NEXT_dot_cnt = Tmp_ITMNO_NEXT.split(".").length - 1;
                    console.log("Tmp_ITMNO_NEXT_dot_cnt: ", Tmp_ITMNO_NEXT_dot_cnt);
                    if (Tmp_ITMNO_NEXT_dot_cnt >= 2) { //有明細步序
                        Tmp_Str = "目前主步序(項次:" + Tmp_ITMNO + ")的需求工時(" + Tmp_RQHR.toString() + ")<br>"
                            + "因本主步序有子步序(項次:" + Tmp_ITMNO + ".xx)<br> "
                            + "則本主步序的需求工時必需為 0 或 空白 <br>"
                            + "敬請檢核 !!<br>";
                        mywarnalert(Tmp_Str);
                        Tmp_isOk = false;
                        return Tmp_isOk;
                    }
                }
            }
        }        // end of for (i=0)        
        //2>檢核 [需求工時] 不可大於 [標準工時] , 若大於,則[備註]欄位不可空白
        //var mysubstore = Ext.getCmp('sub_Grid').store;
        //var Tmp_cnt = mysubstore.data.length;
        var Tmp_REMARK;
        var Tmp_RQ_HR = 0, Tmp_STD_HR = 0;
        for (i = 0; i < Tmp_cnt; i++) {
            Tmp_rec = mysubstore.getAt(i);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            Tmp_RQ_HR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
            Tmp_STD_HR = Number(nulltoStr(Tmp_rec.data["STDHR"]));
            Tmp_REMARK = nulltoStr(Tmp_rec.data["REMARK"]);
            if (Tmp_ITMNO == "1.04.04")
                mywarnalert("項次:1.04.04");
            if (Tmp_RQ_HR > Tmp_STD_HR) {
                if (checkisnull(Tmp_REMARK)) {
                    Tmp_Str = "步序(項次:" + Tmp_ITMNO + ")的[需求工時(" + Tmp_RQ_HR + ")]<br>"
                        + "大於[標準工時(" + Tmp_STD_HR + ")]<br>"
                        + "[備註]欄位必需說明原因<br>"
                        + "不可空白 !!";
                    mywarnalert(Tmp_Str);
                    Tmp_isOk = false;
                    return Tmp_isOk;
                }
            } // end of  if (Tmp_RQ_HR > Tmp_STD_HR) {
        }  // end of  for (i = 0; i < Tmp_cnt; i++) {


        //2>>累加拆解工時 & 維修工時(因尚未存入資料庫,所以必需在前端小計時數)
        var Tmp_ITMNO_14;
        var Tmp_TAL_RPNOAF_HR = 0, Tmp_TAL_MRPNOAF_HR = 0;
        for (i = 0; i < Tmp_cnt; i++) {
            Tmp_rec = mysubstore.getAt(i);
            Tmp_ITMNO = nulltoStr(Tmp_rec.data["ITMNO"]);
            Tmp_ITMNO_14 = Tmp_ITMNO.substr(0, 4);
            Tmp_RQHR = Number(nulltoStr(Tmp_rec.data["RQHR"]));
            switch (Tmp_ITMNO_14) {
                case '1.01': case '1.02': case '1.03': case '1.04': case '1.05':
                case '1.06': case '1.07': case '1.08': case '1.09': case '1.10':
                case '3.01':
                    Tmp_TAL_RPNOAF_HR = Tmp_TAL_RPNOAF_HR + Tmp_RQHR;
                    break;
                case '2.01': case '2.02': case '2.03': case '2.04': case '2.05':
                case '2.06': case '2.07': case '2.08': case '2.09': case '2.10':
                    Tmp_TAL_MRPNOAF_HR = Tmp_TAL_MRPNOAF_HR + Tmp_RQHR;
                    break;
                default:
                    Tmp_TAL_MRPNOAF_HR = Tmp_TAL_MRPNOAF_HR + Tmp_RQHR;
                    break;
            }
        }  // end of for (i=0,)
        Ext.getCmp("sub_RPNOAF_TALHR").setValue(Tmp_TAL_RPNOAF_HR);
        Ext.getCmp("sub_MRPNOAF_TALHR").setValue(Tmp_TAL_MRPNOAF_HR);
        mysuccessalert("工時合計完成 !!");
        return Tmp_isOk;  //return true
    };  // end of CALL_TALHR_CAL


        //[工時提列].[確認]鈕 
        function V20304A_OK() {
            //1>檢核欄位是否有輸入        
            var Tmp_sub_RPNOAF = Ext.getCmp("sub_RPNOAF").getValue();
            var Tmp_sub_RRNRAR = Ext.getCmp("sub_RRNRAR").getValue();
            var Tmp_sub_QDEP = Ext.getCmp("sub_QDEP").getValue();
            var Tmp_sub_IRESAK = Ext.getCmp("sub_IRESAK").getValue();
            var Tmp_sub_NOTEAR = Ext.getCmp("sub_NOTEAR").getValue();
            var Tmp_Str;
            if (checkisnull(Tmp_sub_RRNRAR)) {
                Tmp_Str = "TLS實際拆檢完工日不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }
            if (checkisnull(Tmp_sub_QDEP)) {
                Tmp_Str = "品保單位不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }
            if (checkisnull(Tmp_sub_NOTEAR)) {
                Tmp_Str = "檢測結果說明不可空白<br>"
                    + "敬請檢核<br>";
                mywarnalert(Tmp_Str);
                return false;
            }

            //直接呼叫[合計]鈕函式,  - 檢核 主步序&子步序是否有問題, 若有問題,則顯示訊息,不寫入 AMM_TLSAR & AMM_AR
            //[確認]時, 不重複寫檢核程式
            if (CALL_TALHR_CAL()==false) {
                return;
            }
            ////1>判斷主步序(1.xx) 的工時>0 時, 不可以有明細步序(1.xx.xx)        
            var mysubstore = Ext.getCmp('sub_Grid').store;
            var Tmp_cnt = mysubstore.data.length;            

            //3>> 寫入  AMM_AR(寫入明細步序所有工時)  &  AMM_TLSAR(只寫主步序 & 拆檢小計工時 &  維修小計工時)
            //將子畫面資料寫入 np , 以便新增 AMM_AR  &  AMM_TLSAR
            let Tmp_DataAry1 = [];
            for (var i = 0; i < Tmp_cnt; i++) {
                Tmp_rec = mysubstore.getAt(i);
                Tmp_DataAry1.push(Tmp_rec.data);
            }
            // 將目前子畫面的資料(Table)轉成 JSON字串
            let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
            var np = {};
            np = {
                FMNO: Tmp_FMNO,
                RPNOAF: Tmp_sub_RPNOAF,
                IRESAK: Tmp_sub_IRESAK,
                RRNRAR: Tmp_sub_RRNRAR,
                QDEP: Tmp_sub_QDEP,
                NOTEAR: Tmp_sub_NOTEAR,
                DataString1: Tmp_DataString1,  //目前子畫面的資料
            };
            var Tmp_url = "../../api/V20304AAPI/UPDATE_AMM_AR_TLSAR";
            //取得挑選資料的 dt2JSON 字串 
            //getUrlStr : 必需傳回字串( dt.JSON字串) , 非 ds
            var rtn_Str = getUrlStr(Tmp_url, np, "工時提列");
            console.log("rtn_Str:", rtn_Str);
            if (checkRtnOK(rtn_Str)) {
                mysuccessalert(rtn_Str);                
                console.log("win1.closeAction:", win1.closeAction);
                win1.close();
                win1.destroy();   //必需寫 destroy() , 不然畫面會亂掉
            }
            else
                mywarnalert(rtn_Str);
        }  // end of  function V20304A_OK() {
    // }  // end of abc()

};  // end of function Call_V20304A() {

沒有留言:

張貼留言