2024年1月10日 星期三

V30701A – 顯示[確認]訊息,使用者按確認後,才往下執行 -confirm - 確認訊息

 目的: V30701A – 顯示[確認]訊息,使用者按確認後,才往下執行 -confirm

處理說明: 1> 使用者按[確認]後, 才往下執行
                        --> Confirm(Tmp_msg);  
                        --> 同步式 , 會等使用者按確定鈕後,才繼續往下執行
                  2> myconfirmalert(Tmp_Str, callBackFunc);
                       --> 非同步式  , 不等使用者按確定鈕,繼續往下執行



1>*.js
//若工號(25155234) 承修工廠 不為7100,則顯示警示訊息
        //=> ’ 該工號非7100工單,是否確認 ?’,確認才繼續往下執行
        var Tmp_url = "../../api/V30701API/check_is_7100";
        var rtn = getUrlStr(Tmp_url, np, "檢核[輸入工單]承修工廠是否7100");
        if (!checkRtnOK(rtn)) {
            var Tmp_Str = "工號(" + Tmp_SAPNO + ")\n"
                                   + "承修工廠不為 7100\n"
                                   + "是否繼續執行?\n";
            var id = confirm(Tmp_Str);
            if (id) 
                return true;     
            else 
                return false;           
            //var Tmp_Str = "工號(" + Tmp_SAPNO + ")<br>"
            //                       +"承修工廠不為 7100<br>"
            //                       + "是否繼續執行?<br>";
            //非同步式,不等使用者按鈕,繼續往下執行, 所以資料庫不會新增
            //myconfirmalert(Tmp_Str, callBackFunc);  
            //function callBackFunc(id) {
            //    if (id == 'yes') 
            //        return true;
            //    else
            //        return false;
        }  // end of  if (!checkRtnOK(rtn)) {           

2024年1月4日 星期四

V30702F : 設定日期格式化: YYYY/MM/DD HH/MM & 欄位 readonly , renderer: 不可加 " "

目的: V30702F : 1>設定日期格式: YYYY/MM/DD HH/MM 

                             2>欄位 readonly

                            3> renderer:  不可加 "" , 否則Template[xls匯出]時, 會一直轉圈圈

{header:"數量",dataIndex:"QTY",width:30,align:"right",TMType:"float",renderer:Ext.util.Format.numberRenderer('000,000.00')}, 

處理說明: 1>設定日期格式: YYYY/MM/DD HH/MM -> 2024/01/05 11:05
{ header: "執行時間", dataIndex: "TATM", width: 150, sortable: false, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d H:i') },
                  2>設定欄位 readOnly
                      setFieldsCls('mySubFormA',[], //required
['sub_TASKNO', 'sub_RQMAN', 'sub_RQDT', 'sub_RQDEP', 'sub_STLC', 'sub_EDLC', 'sub_TASKREMARK'], //readonly
[]);


1>*.js
var sub_Columns = [     
        { header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
   // { header: "派遣申請單號", dataIndex: "TASKNO", width: 130, sortable: false, TMType: "string" },
      { header: "項次", dataIndex: "ITM", width: 30, sortable: false },
      { header: "執行人員", dataIndex: "TAMAN", width: 100, sortable: false, TMType: "string" },
      { header: "執行人員姓名", dataIndex: "TAMAN_", width: 100, sortable: false, TMType: "string" },
        { header: "執行時間", dataIndex: "TATM", width: 150, sortable: false, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d H:i') },
        { header: "現況", dataIndex: "TP", width: 30, sortable: false, TMType: "string" },
        { header: "現況說明", dataIndex: "TP_" }    
    ];



 //欄位設為 ReadOnly 
    setFieldsCls('mySubFormA',
        [],                          //required
    ['sub_TASKNO', 'sub_RQMAN', 'sub_RQDT', 'sub_RQDEP', 'sub_STLC', 'sub_EDLC', 'sub_TASKREMARK'],  //readonly
        []);    
   

2024年1月3日 星期三

V30701 – Delay –新增&存檔後,延遲1秒(待資料重新顯示), 才Locate至該筆資料 - DelayedTask

 目的: V30701 – Delay –新增&存檔後,延遲1秒(待資料重新顯示), 才Locate至該筆資料

處理說明: 1>[存檔]鈕, 按存檔時,延遲1秒(待寫入資料庫),才重新顯示資料
                       Ext.getCmp('btn_save').on('click', function () { ...},
                                                                               this,
                                                                             { delay: 1000 }
                                                                   );
                 2>重新顯示資料時,Delay 1 秒, 才 Locate 新增的資料                  
                     Ext.getCmp('btn_Show').fireHandler();
                     var task = new Ext.util.DelayedTask(function () {
                     var Tmp_cnt = Ext.getCmp("grid_Single").store.getCount();                                
                     Ext.getCmp("grid_Single").getSelectionModel().select(Tmp_cnt-1);                              
                     Ext.getCmp("grid_Single").getView().focusRow(Tmp_cnt-1);        });                          
                     task.delay(1000);


1>*.js
//存檔後,重新顯示資料
    Ext.getCmp('btn_save').on('click', function () {      
        //按[存檔]鈕, 不需重新顯示 ,
        //否則原本無資料, 第一筆新增存檔時, 會顯示無資料
        Ext.getCmp('btn_Show').fireHandler();
        //Ext.getCmp("grid_Single").getSelectionModel().selectRow(7);
        var task = new Ext.util.DelayedTask(function () {
            var Tmp_cnt = Ext.getCmp("grid_Single").store.getCount();
            Ext.getCmp("grid_Single").getSelectionModel().select(Tmp_cnt-1);
            Ext.getCmp("grid_Single").getView().focusRow(Tmp_cnt-1);
        });
        task.delay(1000);        
    },
        this,
        { delay: 1000 }
    );



2023年12月26日 星期二

V30702B –mysuccessalert – firehandle -getUrlStr -顯示訊息,使用者按[確認]鈕後,才重顯示資料

 目的: V30702B –mysuccessalert – firehandle -顯示訊息,使用者按[確認]鈕後,才重顯示資料

處理說明: 1>顯示[確認]訊息,且使用者按[確認]鈕,才重新顯示資料
                       var np = {}
                       np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                       var Tmp_url = '../../api/V30702BAPI/UPDATE_STA';
                       var Tmp_RtnStr = getUrlStr(Tmp_url, np, "結案處理 - 單況更新");
                       if (checkRtnOK(Tmp_RtnStr)) {
                           mysuccessalert(Tmp_RtnStr, function () {
                                          Ext.getCmp('btn_Show').fireHandler(); //重新顯示 Master資料
                                         })
                           }



1>*.js
//[結案]鈕 -  - 只更新資料,無子畫面
function Call_V30702B() {
    var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
    var cur_rec;
    if (cur_recs.length == 0) {
        buttonModel.modelType = 0;
        mywarnalert('請先挑選[結案]的地裝派遣資料!!');
    }
    else {
        cur_rec = cur_recs[0];
        var Tmp_msg = "結案後<br>"
                                 +"目前簽入中的派遣單單況將自動簽出<br>"
                                 +"確定執行[結案]嗎 ?<br>"
                                 +"(地裝派遣單號: " + cur_rec.data['TASKNO'].toString() + ")<br>";
        myconfirmalert(Tmp_msg, callBackFunc);
        function callBackFunc(id) {
            if (id == 'yes') {
                console.log("cur_recs.length:", cur_recs.length);                
                var np = {}
                np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                var Tmp_url = '../../api/V30702BAPI/UPDATE_STA';
                var Tmp_RtnStr = getUrlStr(Tmp_url, np, "結案處理 - 單況更新");
                if (checkRtnOK(Tmp_RtnStr)) {
                    mysuccessalert(Tmp_RtnStr, function () {
                        Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料
                    })                    
                }


V30702C – -focus - blur -識別證刷卡後,加入store 且 輸入欄位,重新FOCUS - blur - store - 新增資料

目的: V30702C – 識別證刷卡後,加入store 輸入欄位,重新FOCUS

處理說明: 1> ( [boolean], [delay] ) : Ext.ComponentCHAINABLE

                         Try to focus this component.                            

                       Ext.getCmp("sub_TAMAN").focus(false, 20);
                           --> true to also select the text in this component
                           -->Delay the focus this number of milliseconds (true for 10 milliseconds).  
                  2> on blue event
                       Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {
                     


1>*.js
    Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {
        //STEP1 將[識別證卡號] 轉成 [員工編號]
        var Tmp_CARDNO = me.getValue();
        console.log("卡號:", Tmp_CARDNO);
        var Tmp_EMPLYID = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_EMPLYNM = "";
        var Tmp_url = "../../api/V30702CAPI/get_EMPLYID_EMPLYNM";
        var np = {};
        np["CARDNO"] = Tmp_CARDNO;
        var Tmp_Str = getUrlStr(Tmp_url, np, "識別證編號2員工編號");
        Tmp_EMPLYID = StrExtract(Tmp_Str, 1);
        Tmp_EMPLYNM = StrExtract(Tmp_Str, 2);
        if (checkRtnOK(Tmp_EMPLYID)) {
            me.setValue(Tmp_EMPLYID);
            Ext.getCmp("sub_TAMAN_").setValue(Tmp_EMPLYNM);
        }
        if (Tmp_EMPLYID.length == 0)
            return;
        //STEP2 將[執行人員] [執行人員姓名 ]- 寫入  sub_Grid
        var Tmp_TASKNO = Ext.getCmp('sub_TASKNO').getValue();
        var sub_Store_np = {
            TAMAN: Tmp_EMPLYID,
            TAMAN_: Tmp_EMPLYNM,            
        }
        //Ext.getCmp('sub_Grid').store.add(sub_Store_np);
        var find_rec = Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
        //若目前資料不存在 store , 才加入  store
        if (checkisnull(find_rec)) {            
            //檢查目前使用者是否已在目前派遣單中(TASKNO)簽入
            var Tmp_url = "../../api/V30702CAPI/is_EMPLYID_checkined";
            var np = {};
            np["EMPLYID"] = Tmp_EMPLYID;
            np["TASKNO"] = Tmp_TASKNO;
            var Tmp_YN = getUrlStr(Tmp_url, np, "檢查人員是否已在派遣單checked");            
            if (Tmp_YN == "Y") {
                var Tmp_Str = "員工編號(" + Tmp_EMPLYID + ")<br>"
                    + "員工姓名(" + Tmp_EMPLYNM + ")<br>"
                    + "已在派遣單單號(" + Tmp_TASKNO + ")簽入<br>"
                    + "不可重複簽入<br>"
                    + "敬請檢核!!<br>";
                mywarnalert(Tmp_Str);
            }
            else {
                Ext.getCmp('sub_Grid').store.add(sub_Store_np);
            }                
        }
        else {
            var Tmp_Str = "員工編號(" + Tmp_EMPLYID + ")<br>"
                + "員工姓名(" + Tmp_EMPLYNM + ")<br>"
                + "已挑選<br>"
                + "不可重複挑選<br>"
                + "敬請檢核!!<br>";
            mywarnalert(Tmp_Str);
        }
        Ext.getCmp("sub_TAMAN").setValue("");
        Ext.getCmp("sub_TAMAN_").setValue("");
        Ext.getCmp("sub_TAMAN").focus(false, 20);
    }  // end of function(me,eOpts)
    );        // end of blur function)


2023年12月25日 星期一

V30702A – [收單執行]鈕 – 刷識別證 – store 資料重複,則不允許加入 store

 目的: V30702A – [收單執行]鈕 – 刷識別證 – store 資料重複,則不允許加入 store



處理說明: 1>Ext.getCmp('sub_Grid').store.findRecord(欄位名稱, 欄位值);
                      Ex:
                           var find_rec= Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
                           if (checkisnull(find_rec)) { } else 



1>*.js
//STEP2 將[執行人員] [執行人員姓名 ]- 寫入  sub_Grid
        var sub_Store_np = {
            TAMAN: Tmp_EMPLYID,
            TAMAN_: Tmp_EMPLYNM,            
        }
        var find_rec = Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
        //若目前資料不存在 store , 才加入  store
        if (checkisnull(find_rec)) {
            //var Tmp_find_EMPLYID = find_rec.get("TAMAN");
            Ext.getCmp('sub_Grid').store.add(sub_Store_np);
        }
        else {
            var Tmp_Str = "員工編號(" + find_rec.data["TAMAN"].toString() + ")<br>"
                + "姓名(" + find_rec.data["TAMAN_"].toString() + ")<br>"
                + "已存在<br>"
                +"不可重複挑選<br>"
                + "敬請檢核!!<br>";
            mywarnalert(Tmp_Str);
        }
        Ext.getCmp("sub_TAMAN").setValue("");
        Ext.getCmp("sub_TAMAN_").setValue("");
    }  // end of function(me,eOpts)


2023年12月21日 星期四

V30701A –selectionchange 依目前資料.單況 控制按鈕 - Enabled/Disabled -datachange 時 - 按鈕.Enabled - selectionchange

目的: V30701A –selectionchange 依目前資料.單況 控制按鈕  - Enabled/Disabled 
處理說明:  1>grid.selectionchange Event 
                       Ext.getCmp("grid_Single").on('selectionchange', function (me, eOpts) {
                           var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
                           if (cur_recs.length == 0) {
                                Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
                                Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單


1>*.js
 Ext.getCmp("grid_Single").on('selectionchange', function (me, eOpts) {
        var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
        if (cur_recs.length == 0) {
            Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
            Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單
            Ext.getCmp('Btn_V30702C').setDisabled(true);  // C: 派遣單簽入
            Ext.getCmp('Btn_V30702D').setDisabled(true);  // D: 派遣單簽出
        }
        else {
            Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
            Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單
            Ext.getCmp('Btn_V30702C').setDisabled(true);  // C: 派遣單簽入
            Ext.getCmp('Btn_V30702D').setDisabled(true);  // D: 派遣單簽出
            var cur_rec = cur_recs[0];
            var Tmp_STA = cur_rec.data['STA'].toString();
            switch (Tmp_STA) {            
                case "B": {
                    Ext.getCmp('Btn_V30702A').setDisabled(false);  // A:收單執行
                    break;
                }
                case "C": {
                    Ext.getCmp('Btn_V30702B').setDisabled(false);  // B: 結單
                    Ext.getCmp('Btn_V30702C').setDisabled(false);  // C: 派遣單簽入
                    Ext.getCmp('Btn_V30702D').setDisabled(false);  // D: 派遣單簽出
                    break;
                }   
                default: {
                    if ((Tmp_STA != "A") && (Tmp_STA != "Z") && (Tmp_STA != "X") )
                       Ext.getCmp('Btn_V30702E').setDisabled(false);  // E: 撤銷
                }
            } //  end of switch            

        }
    }); //  // end of datachanged


2>V20305E.js

 Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞
        //console.log("Ext.getCmp('s_STAT') : ", Ext.getCmp('s_STAT'));
        var gridstore = Ext.getCmp('grid_D').store;        
        var cur_recs = Ext.getCmp('grid_M').selModel.getSelection();
        if (cur_recs.length == 0) {
            //Tmp_Str = "請先選擇要查詢的資料<br>";
            //mywarnalert(Tmp_Str);
            return;
        }
        var Tmp_REQMAF = nulltoStr(cur_rec.data["REQMAF"]).toString();
        if (Tmp_REQMAF == 'Y') {
            Ext.getCmp("btn_V20305E").setDisabled(false);
        }
        else {
            Ext.getCmp("btn_V20305E").setDisabled(true);
        }
})