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);
        }
}) 



V30701A - 訉息- mysuccessalert - myconfirmalert -mywarmalert – 按[確定]鈕後,再繼續往下執行(關閉子視窗)

 目的: V30701A – 回覆訊息,[確定]鈕後,再繼續往下執行(關閉子視窗 & 主畫面重新顯示)

處理說明:  1> Ext.MessageBox.alert(par_title, par_msg, par_fn())
                       Ext.MessageBox.alert("訊息", rtn_Str, function () {
                            Ext.getCmp("btn_Show").fireHandler();
                            Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
                          });
                   2> mysuccessalert(rtn_Str, function () {
                             Ext.getCmp("btn_Show").fireHandler();
                             Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
                         });    
         
                  3> 詢問[確定][取消] 鈕 - Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc); 
                        var Tmp_msg = "確定執行[申請單送出]嗎 ? (派遣申請單號:" 
                                               + cur_rec.data['TASKNO'].toString() + ")";
                        Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc); 
                        function callBackFunc(id) {
                               if (id == 'yes') {
       




1>V30702A.js
    var Tmp_DataString = JSON.stringify(Tmp_DataAry);
    var np = {}; 
    np["sub_TASKNO"] = Ext.getCmp("sub_TASKNO").getValue();
    np["sub_DataString"] = Tmp_DataString;
    //np["DataAry_JSON"] = JSON.stringify(par_DataAry);
    var Tmp_url = "../../api/V30702AAPI/INSERT_AMM_DSPHCARD";  //
    var rtn_Str = getUrlStr(Tmp_url, np, "收單執行");
    console.log("rtn_Str:", rtn_Str);
    if (checkRtnOK(rtn_Str))         
        //顯示訊息&使用者按確定後,才往下執行
        Ext.MessageBox.alert("訊息", rtn_Str, function () {
            Ext.getCmp("btn_Show").fireHandler();
            Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
        })

   -->精簡寫法
       mysuccessalert(rtn_Str, function () {
        Ext.getCmp("btn_Show").fireHandler();
        Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
    });    
    
     mywarnalert(rtn_Str, function () {
        Ext.getCmp("btn_Show").fireHandler();
        Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
    });    


2>V30701A.js
    cur_rec = cur_recs[0];
        var Tmp_msg = "確定執行[申請單送出]嗎 ? (派遣申請單號:" 
                               + cur_rec.data['TASKNO'].toString() + ")";
        //Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc);
        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/V30701AAPI/UPDATE_STA',
                var rtn_Str = getUrlStr(Tmp_url, np, "申請單送出");
                console.log("rtn_Str:", rtn_Str);
                if (checkRtnOK(rtn_Str))                    
                    mysuccessalert(rtn_Str, function () {
                        Ext.getCmp("btn_Show").fireHandler();
                        Ext.getCmp("sub_V30701A_CancelBtn").fireHandler();
                    });
                else
                    mywarnalert(rtn_Str);
            }    // end of   if (id == 'yes') {            

2023年12月20日 星期三

V30702A/E – 子畫面 – Grid & Form & - 識別證刷卡

 目的: V30702A – 子畫面 – 含 Grid    &  V30702E – 一般Form

處理說明:  1>產生一般Form欄位:  - 刷[識別證]  - 粗體字體
                        var cmp_TAMAN_lbl = get_cmp_lbl0("(請刷識別證)", 130);    
                        cmp_TAMAN_lbl.style = "font-size: 12pt; color: blue; ";
                        cmp_TAMAN_lbl.margin = "0 0 0 10";

                 2>刷[識別證] 處理 *.cs   - 將[識別證卡號] 轉成 [員工編號]
                       string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);

                       - *.js  Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {  .. }

                 3>呼叫 Button.click -  .fireEvent('click');
                     Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料
                     Ext.getCmp('sub_V30702E_CancelBtn').fireEvent('click');  //關閉子視窗
  

    




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/V30702AAPI/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 sub_Store_np = {
                TAMAN: Tmp_EMPLYID,
                TAMAN_: Tmp_EMPLYNM,
            }
            Ext.getCmp('sub_Grid').store.add(sub_Store_np);
            Ext.getCmp("sub_TAMAN").setValue("");
            Ext.getCmp("sub_TAMAN_").setValue("");


2>*.cs
//由識別證號碼取得員工ID        
        [HttpPost]
        public string get_EMPLYID_EMPLYNM()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_Str;
            string Tmp_CARDNO = nvc["CARDNO"];
            string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);
            string Tmp_Sql = " SELECT  EMPLYNM "
                                      + " FROM    HR_EMPLYM "
                                      + " WHERE  EMPLYID=" + myfunc.AA(Tmp_EMPLYID);
            string Tmp_EMPLYNM = myfunc.SqlValue(Tmp_Sql);
            Tmp_Str = Tmp_EMPLYID + ";" + Tmp_EMPLYNM;
            return Tmp_Str;
        }  // end of get_EMPLYID

} // end of function(me,eOpts)



); // end of blur function)


2023年12月14日 星期四

V30702A - 由識別證卡號取得員工編號 - cardno

目的: V30702A -  由識別證卡號取得員工編號

處理說明: 1>連接資料庫主機 SMS_AIDC (web.config 定義)
<add name="SMS_AIDC" connectionString="Data Source=192.168.99.79; Initial Catalog=SMS_AIDC; User=A856;Password=xHMQ2uQpTz5G;Max Pool Size=5;Connect Timeout=10;" />

                  2>下 SQL :
                                         SELECT    TOP 1 PSNNO 
                                         FROM        SMS_AIDC.dbo.V_CARD 
                                         WHERE     CARDNO=: 識別證卡號






1>*.js
{
     xtype: "fieldcontainer", fieldLabel: "執行人員", labelWidth: 80, flex: 5, border: 2,
     layout: 'hbox',
     items: [
                 {
                id: "sub_TAMAN", name: "sub_TAMAN", xtype: "textfield", width: 120, padding: "0 4 0 0",
                 listeners: {
                                  blur: function (me, eOpts) {
                                            var Tmp_CARDNO = me.getValue();
                                            console.log("卡號:", Tmp_CARDNO);
                                            var Tmp_EMPLYID = "";  //所有資料 PK 字串, 以 , 分隔
                                            var Tmp_EMPLYNM = "";
                                            var Tmp_url = "../../api/V30702AAPI/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);
                                            }
                                        }  // end of blur
                                    },         // end of blur function
                                },// end of listeners                                                    


2>*.cs
//由識別證號碼取得員工ID        
        [HttpPost]
        public string get_EMPLYID_EMPLYNM()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_Str;
            string Tmp_CARDNO = nvc["CARDNO"];
            string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);
            string Tmp_Sql = " SELECT  EMPLYNM "
                                      + " FROM    HR_EMPLYM "
                                      + " WHERE  EMPLYID=" + myfunc.AA(Tmp_EMPLYID);
            string Tmp_EMPLYNM = myfunc.SqlValue(Tmp_Sql);
            Tmp_Str = Tmp_EMPLYID + ";" + Tmp_EMPLYNM;
            return Tmp_Str;
        }  // end of get_EMPLYID

3>myfunc.cs
//由員工識別證卡號取得員工ID
        /*
         *  連接至 AES   SMS_AIDC  主機(資料庫)
         *  由員工識別證卡號(CARDNO)取得員工ID(EMPLYID)
         */
        public static string get_CARDNO2EMPLYID(string par_CARDNO)
        {
            string Tmp_CARDNO = par_CARDNO;
            string Tmp_EMPLYID = "";
            BaseAPIController Tmp_BaseController = new BaseAPIController();
            try
            {
                string Tmp_Sql = "  SELECT  TOP 1 PSNNO  "
                                       + "  FROM    SMS_AIDC.dbo.V_CARD "
                                       + " WHERE   CARDNO=" + myfunc.AA(Tmp_CARDNO);
                DataSet ds = Tmp_BaseController.getDataTable_MSSQL("SMS_AIDC", Tmp_Sql);
                int Tmp_cnt = ds.Tables[0].Rows.Count;
                if (Tmp_cnt > 0)
                {
                    string Tmp_PSNNO = ds.Tables[0].Rows[0]["PSNNO"].ToString();                 
                    Tmp_EMPLYID = Tmp_PSNNO;                    
                }
                return Tmp_EMPLYID;
            }  // end of try 
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return Tmp_EMPLYID;
        }  // end of         public string get_CARDNO2EMPLYID(string par_CARDNO)