2024年4月2日 星期二

V20304 – 拆檢結果登錄 – [全部選取][全部取消]鈕 - New

 目的: V20304 – 拆檢結果登錄 – [全部選取][全部取消]鈕 - New

處理說明: 1> 利用  PK_LIST & ALL_LIST 儲存選取的 PK & 所有欄位值
             PK_LIST: [], //儲存選項's的 PK欄位值
       ALL_LIST: [], //儲存選項's的所有欄位值                    
                  2> 按[全部選取]鈕
                        1>>將目前頁面的資料設為[V]  勾選
                             Ext.getCmp('grid_M').store.each(function (rec) {
                                    rec.set('CHECK', true);
                            });
                        2>>將所有資料的 PK 存入  PK_LIST[ ] , & 所有欄位值存入  ALL_LIST[ ]
                             --> getGridData_M?par_paging 設為 false;
                 3> column["CHECK"] - 勾選/不勾選時(renderer時), 判斷要加入or移除 PK_LIST 
                 4>*.cs - getGridData_M 新增 par_paging 參數
                       public dynamic getGridData_M(bool par_paging = true)


1>*.js
    1>> 利用  PK_LIST & ALL_LIST 儲存選取的 PK & 所有欄位值
           Ext.define('CHK_PK_OBJ', {
PK_LIST: [], //儲存選項's的  PK欄位值
ALL_LIST: [], //儲存選項's的 所有欄位值
           });
           var CHK_PK_OBJ = Ext.create('CHK_PK_OBJ');


   2>>勾選時, 判斷要加入/移除 PK_LIST[]
    var J_columns = [
{ header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
{
//2023/07/14 microed , 將 V120201 改成 雅嵐版本 - 分頁勾選
header: "勾選",
dataIndex: "CHECK", width: 40, xtype: 'checkcolumn', menuDisabled: true, sortable: false,
//rec : 目前資料欄位值
renderer: function (value, metadata, rec, rowIndex, colIndex, store) {
var Tmp_PK = rec.get('FMNO');
var chkd = '';
if (rec.get('CHECK') === true) {
if (CHK_PK_OBJ.PK_LIST.indexOf(Tmp_PK) == -1) {
CHK_PK_OBJ.PK_LIST.push(Tmp_PK);
CHK_PK_OBJ.ALL_LIST.push(rec.data);
}
chkd = 'checked';
rec.set('CHECK', true);
}
else if (rec.get('CHECK') === false) {
rec.set('CHECK', false);
//將本Tmp_PK ,由 Array 中移除 , 所以不會有 空字串, 空 Object
CHK_PK_OBJ.PK_LIST = jQuery.grep(CHK_PK_OBJ.PK_LIST, function (item) {
return item != Tmp_PK;
});
       CHK_PK_OBJ.ALL_LIST = jQuery.grep(CHK_PK_OBJ.ALL_LIST, function (item) {
return item.FMNO != Tmp_PK;
});
}
else if (typeof rec.get('CHECK') === "undefined") { //往上或下一頁
if (CHK_PK_OBJ.PK_LIST.indexOf(Tmp_PK) > -1) {
chkd = 'checked';
if (CHK_PK_OBJ.PK_LIST.indexOf(Tmp_PK) == -1) {
CHK_PK_OBJ.PK_LIST.push(Tmp_PK);
CHK_PK_OBJ.ALL_LIST.push(rec.data);
}
rec.set('CHECK', true);
} else {
rec.set('CHECK', false);
}
}
var cbx = "<input  type='checkbox'  "
+ chkd + " > ";
return cbx;
},
},
{ header: "系統件單號", dataIndex: "FMNO", width: 130, sortable: false, TMType: "string" },

    3>>  按[全部選取]鈕
        function btn_SelAll_click() {
            //1>>目前頁面的資料  [勾選]
            Ext.getCmp('grid_M').store.each(function (rec) {
                rec.set('CHECK', true);
            });
            //2>>將 所有資料.PK 加入 PK_LIST[]
            Ext.Ajax.request({
                url: '../api/V20304API/getGridData_M?par_paging=false',
                method: 'POST',
                params: { all: 1 },
                async: false, //將非同步功能關閉
                failure: function (response, opts) {
                },
                success: function (response, opts) {
                    CHK_PK_OBJ.PK_LIST = [];
                    var obj = Ext.decode(response.responseText);
                    obj.T1.forEach(function (item, i) {
                        CHK_PK_OBJ.PK_LIST.push(item['FMNO']);
                        CHK_PK_OBJ.ALL_LIST.push(item);
                    });
                }
            });
        }


2>*.cs
    [HttpPost]
        public dynamic getGridData_M(bool par_paging = true)
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

            //Panel11            
            string Tmp_FMNO = nvc["s_FMNO"];
            string Tmp_AMMNO = nvc["s_AMMNO"];
            string Tmp_OGONOAF = nvc["s_OGONOAF"];
            string Tmp_NGONOAF = nvc["s_NGONOAF"];
            string Tmp_RPNOAF = nvc["s_RPNOAF"];
            string Tmp_MRPNOAF = nvc["s_MRPNOAF"];
            //Panel12
            string Tmp_WBSNO = nvc["s_WBSNO"];
            string Tmp_PN = nvc["s_PN"];
            string Tmp_SAPNO = nvc["s_SAPNO"];
            string Tmp_FACWC = nvc["s_FACWC"];

            //發工日期起~迄
            string Tmp_SAPDT1 = "";
            string Tmp_Str = "";
            if (!myfunc.checkisnull(nvc["s_SAPDT1"]))
            {
                Tmp_SAPDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT1"]));
            };

            string Tmp_SAPDT2 = "";
            if (!myfunc.checkisnull(nvc["s_SAPDT2"]))
            {
                Tmp_SAPDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_SAPDT2"]));
            };

            //Panel14 - 登錄否
            string Tmp_OPHR = nvc["s_OPHR"];  //異動原因
            ////將 A,C,B,D,ALL 字串加入 ""  --> "A","B","C","D" , 不含 ALL 傳回
            //if (!myfunc.checkisnull(Tmp_OPHR))
            //{
            //    Tmp_OPHR = myfunc.AddQuoteStr(Tmp_OPHR);
            //}

            //Panel14             - 子工單 Checked - SUB_SAPNO
            string Tmp_SUB_SAPNO = nvc["s_SUB_SAPNO"];  //子工單
            //Panel15            - 異常處理中 Checked - STATAF
            string Tmp_STATAF = nvc["s_STATAF"];  //異常處理中            


            OracleCommand cmd = new OracleCommand();            
            string Tmp_Sql = "  SELECT  RNK,FMNO,AMMNO ,CST_NO ,DTSOR ,OGONOAF ,NGONOAF ,RPNOAF ,MRPNOAF ,WBSNO ,RQTYAF ,C_NM ,ES_NM ,NSN ,PN ,SEQOAF ,EIAC ,WC ,CSTNM ,TYPEAF ,RBTHAF ,FACTAB ,PRNRAF ,CRNRAF ,RSNSAF ,FREDTAF ,OSM ,EONO ,CDCODE ,FRTP ,FRNOAF ,DLEMPLYID ,CREMPLYID ,MTEMPLYID ,PRNRCLAF ,NRCLAF ,QDRNO ,REMARK ,STATFM ,REDTAF ,JCNOAF ,FD350 ,RBNOAF ,NPN ,NNSN ,REFRNOAF ,MB1A ,MB1ADT ,PROID ,LWCNT ,BTDT ,MDDT ,SAPREMARK ,FACWC  ,ISSUB ,ISCK ,NEMPID ,MEMPID ,PMNFAF ,RMNFAF ,FRCLDT ,CMNRAF ,DLVDT ,NRCLFM ,CLS ,CSDTFM ,PSREMARK ,FILEBODY ,FILEDATE ,FILENAME ,FILESIZE ,SCHER ,LGROUP ,PM17MT ,ISSN ,REQMAF ,PJOPHR ,EIAC_CUS ,OPHR ,RSRT ,SRU_PARTS ,PDMBOMIN ,FCMPDT ,TEST_CAUSE ,MAINT_STA ,MCODE ,CRNO ,MAINTDT ,ENGP ,PJDT "
                                        + "  FROM   ( SELECT  dense_rank()  over(order by  FMNO) as RNK,"
                                                                      + "    FMNO,AMMNO ,CST_NO ,DTSOR ,OGONOAF ,NGONOAF ,RPNOAF ,MRPNOAF ,WBSNO ,RQTYAF ,C_NM ,ES_NM ,NSN ,PN ,SEQOAF ,EIAC ,WC ,CSTNM ,TYPEAF ,RBTHAF ,FACTAB ,PRNRAF ,CRNRAF ,RSNSAF ,FREDTAF ,OSM ,EONO ,CDCODE ,FRTP ,FRNOAF ,DLEMPLYID ,CREMPLYID ,MTEMPLYID ,PRNRCLAF ,NRCLAF ,QDRNO ,REMARK ,STATFM ,REDTAF ,JCNOAF ,FD350 ,RBNOAF ,NPN ,NNSN ,REFRNOAF ,MB1A ,MB1ADT ,PROID ,LWCNT ,BTDT ,MDDT ,SAPREMARK ,FACWC ,PAMMNO ,ISSUB ,ISCK ,NEMPID ,MEMPID ,PMNFAF ,RMNFAF ,FRCLDT ,CMNRAF ,DLVDT ,NRCLFM ,CLS ,CSDTFM ,PSREMARK ,FILEBODY ,FILEDATE ,FILENAME ,FILESIZE ,SCHER ,LGROUP ,PM17MT ,ISSN ,REQMAF ,PJOPHR ,EIAC_CUS ,OPHR ,RSRT ,SRU_PARTS ,PDMBOMIN ,FCMPDT ,TEST_CAUSE ,MAINT_STA ,MCODE ,CRNO ,MAINTDT ,ENGP ,PJDT  "
                                                        + "   FROM     AMM_FM "
                                                       + "   WHERE  1=1 ";
            //panel11
            //系統件單號    s_FMNO
            if (!myfunc.checkisnull(Tmp_FMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   FMNO= " + myfunc.AA(Tmp_FMNO);
            };
            //AMM單號    s_AMMNO
            if (!myfunc.checkisnull(Tmp_AMMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   AMMNO= " + myfunc.AA(Tmp_AMMNO);
            };
            //拆檢提領單號    s_OGONOAF
            if (!myfunc.checkisnull(Tmp_OGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   OGONOAF= " + myfunc.AA(Tmp_OGONOAF);
            };
            //維修提領單號    s_NGONOAF
            if (!myfunc.checkisnull(Tmp_NGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   NGONOAF= " + myfunc.AA(Tmp_NGONOAF);
            };
            //拆檢交修單號    s_RPNOAF
            if (!myfunc.checkisnull(Tmp_RPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   RPNOAF= " + myfunc.AA(Tmp_RPNOAF);
            };
            //維修交修單號    s_MRPNOAF
            if (!myfunc.checkisnull(Tmp_MRPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   MRPNOAF= " + myfunc.AA(Tmp_MRPNOAF);
            };
            //WBS號碼    s_WBSNO
            if (!myfunc.checkisnull(Tmp_WBSNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   WBSNO= " + myfunc.AA(Tmp_WBSNO);
            };
            //承修工場    s_FACWC
            if (!myfunc.checkisnull(Tmp_FACWC))
            {
                Tmp_Sql = Tmp_Sql + " AND   FACWC= " + myfunc.AA(Tmp_FACWC);
            };
            //工單號碼    s_SAPNO
            if (!myfunc.checkisnull(Tmp_SAPNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   AMMNO  IN ( SELECT AMMNO   "
                                                                                         +" FROM   AMM_SRO  "
                                                                                         +" WHERE SAPNO LIKE  " + myfunc.AA(Tmp_SAPNO+"%")
                                                                                         +")";
            };
            //件號    s_PN
            if (!myfunc.checkisnull(Tmp_PN))
            {
                Tmp_Sql = Tmp_Sql + " AND   AMMNO  IN (  SELECT AMMNO "
                                                                                         +"  FROM   AMM_SRO  "
                                                                                         +" WHERE PN LIKE  " + myfunc.AA(Tmp_PN + "%")
                                                                                         +")";
            };
            

            //發工日期  SAPDT
            if (!(myfunc.checkisnull(Tmp_SAPDT1) && myfunc.checkisnull(Tmp_SAPDT2)))
            {
                Tmp_Sql = Tmp_Sql + " AND    AMMNO IN ( SELECT AMMNO  "
                                                                                  + "   FROM  AMM_SRO "
                                                                                  + "   WHERE  1=1 ";                                                                                  
                if (!myfunc.checkisnull(Tmp_SAPDT1))
                {
                    Tmp_Sql = Tmp_Sql + " AND   trunc(SAPDT)>= " + myfunc.AA(Tmp_SAPDT1) ;                    
                };
                if (!myfunc.checkisnull(Tmp_SAPDT2))
                {
                    Tmp_Sql = Tmp_Sql + " AND   trunc(SAPDT)<= " + myfunc.AA(Tmp_SAPDT2);                    
                };
                Tmp_Sql = Tmp_Sql + ")";                
            };  //  if (!(myfunc.checkisnull(Tmp_UPDDT1) || myfunc.checkisnull(Tmp_UPDDT2)))            
            
            
            //子工單
            if (!myfunc.checkisnull(Tmp_SUB_SAPNO))
            {
                if (Tmp_SUB_SAPNO != "true")
                    Tmp_Sql = Tmp_Sql + " AND  AMMNO NOT LIKE '%-%'   ";                
            };  //end of 管制有效項
            //異常處理中
            if (!myfunc.checkisnull(Tmp_STATAF))
            {
                if (Tmp_STATAF == "true")
                    Tmp_Sql = Tmp_Sql + " AND  FMNO  IN  ( SELECT FMNO "
                                                                                            + " FROM    AMM_SRO  "
                                                                                            + " WHERE  FIXNO IN (   SELECT RPNOAF "
                                                                                                                                 + " FROM     CSM_AF@TLS_245 "
                                                                                                                                 + " WHERE  STATAF=" + myfunc.AA("D")
                                                                                                                                 + ")"
                                                                                          + ")";
            };  //end of //異常處理中

            //登錄
            /*
                     未登錄: Y1
                品保登錄: Y2
                     已登錄: N
                          全部: ALL                 
             */
            if (!myfunc.checkisnull(Tmp_OPHR))
            {
                switch (Tmp_OPHR)
                {
                    case "Y1":   //未登錄
                        Tmp_Sql = Tmp_Sql + " AND   OPHR='Y'  AND   PM17MT  IS NULL  ";
                        break;
                    case "Y2":  //品保登錄中
                        Tmp_Sql = Tmp_Sql + " AND  OPHR='Y'  AND   PM17MT ='Y'  ";
                        break;
                    case "N":   //已登錄
                        Tmp_Sql = Tmp_Sql + " AND   OPHR='N'  ";
                        break;
                    case "ALL":
                        break;
                };
            };
                
            Tmp_Sql = Tmp_Sql + ")";
            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            
            //DataSet ds = getDataTable(cmd, countSql); //原本的程式
            DataSet ds = getDataTable(cmd, countSql, par_paging, true);

            //若按[全部選取]鈕(par_paging==false), 則不取計算欄位
            if (par_paging == false)
            {
                return ds;
            }


            //新增  CaluField 欄位  - [單況][約別] [送修原因說明]
            getKeyCode("STATFM", ref ds);
            getKeyCode("TYPEAF", ref ds);
            getKeyCode("RSNSAF", ref ds);
            getKeyCode("DTSOR", ref ds);  //資料來源


            ds.Tables["T1"].Columns.Add("SAPNO_", typeof(object));           //SAP工號
            ds.Tables["T1"].Columns.Add("PN_", typeof(object));           //件號
            ds.Tables["T1"].Columns.Add("SAPDT_", typeof(object));           //發工日期
            ds.Tables["T1"].Columns.Add("DLEMPLYID_", typeof(object));           //發工人員
            ds.Tables["T1"].Columns.Add("CREMPLYID_", typeof(object));           //管制人員
            ds.Tables["T1"].Columns.Add("MTEMPLYID_", typeof(object));           //維修人員


            string Tmp_DLEMPLYID, Tmp_DLEMPLYID_;
            string Tmp_CREMPLYID, Tmp_CREMPLYID_;
            string Tmp_MTEMPLYID, Tmp_MTEMPLYID_;
            string Tmp_SAPNO_, Tmp_PN_, Tmp_SAPDT_ ;

            foreach (DataRow row in ds.Tables["T1"].Rows)
            {
                Tmp_DLEMPLYID = row["DLEMPLYID"].ToString();
                Tmp_CREMPLYID = row["CREMPLYID"].ToString();
                Tmp_MTEMPLYID = row["MTEMPLYID"].ToString();
                Tmp_AMMNO = row["AMMNO"].ToString();
                //新增  CaluField 欄位  - [人員姓名]
                Tmp_Sql = " SELECT   EMPLYNM  "
                            + "  FROM    HR_EMPLYM "
                            + "  WHERE   EMPLYID=" + myfunc.AA(Tmp_DLEMPLYID);
                Tmp_DLEMPLYID_ = myfunc.SqlValue(Tmp_Sql);
                Tmp_Sql = " SELECT   EMPLYNM  "
                                + "  FROM    HR_EMPLYM "
                                + "  WHERE   EMPLYID=" + myfunc.AA(Tmp_CREMPLYID);
                Tmp_CREMPLYID_ = myfunc.SqlValue(Tmp_Sql);
                Tmp_Sql = " SELECT   EMPLYNM  "
                                + "  FROM    HR_EMPLYM "
                                + "  WHERE   EMPLYID=" + myfunc.AA(Tmp_MTEMPLYID);
                Tmp_MTEMPLYID_ = myfunc.SqlValue(Tmp_Sql);

                //新增  CaluField 欄位  - [件號][工單號碼]
                Tmp_Sql = " SELECT   SAPNO,PN,SAPDT  "
                                + "  FROM    AMM_SRO "
                                + "  WHERE   AMMNO=" + myfunc.AA(Tmp_AMMNO);
                Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                Tmp_SAPNO_ = myfunc.StrExtract(Tmp_Str, 1);
                Tmp_PN_ = myfunc.StrExtract(Tmp_Str, 2);
                Tmp_SAPDT_ = myfunc.Date2Str(myfunc.StrExtract(Tmp_Str,3));
                row["DLEMPLYID_"] = Tmp_DLEMPLYID_;
                row["CREMPLYID_"] = Tmp_CREMPLYID_;
                row["MTEMPLYID_"] = Tmp_MTEMPLYID_;
                row["SAPNO_"] = Tmp_SAPNO_;
                row["PN_"] = Tmp_PN_;
                row["SAPDT_"] = Tmp_SAPDT_;
            }

            return ds;
        }


PS:   jQuery.grep() 用法
        處理說明:1>grep可以在陣列中逐一尋找並篩選出符合條件的內容,
                                該方法會返回一個新的陣列。

範例1:從陣列中移除 9 的 item
           var arr = [ 1, 9, 4, 7, 3, 8, 6, 9, 1 ]; //找出數值不等於9的資料 
           arr = jQuery.grep(arr, function( item ) 
                    { return item !== 9; });
           結果  :
                        [1, 4, 7, 3, 8, 6, 1]

範例2: 從陣列中移除 PK 的 item
            CHK_PK_OBJ.PK_LIST = jQuery.grep(CHK_PK_OBJ.PK_LIST, function (item) {
return item != Tmp_PK;
});




沒有留言:

張貼留言