2024年9月30日 星期一

V80202E – 工單附檔瀏覽 – 唯讀 – 底色:灰色 - 下載檔案 - - 清除 cookie - cookie -timer - loadMask - 顯示稍候訊息,Async不可設為false

 目的: V80202E – 工單附檔瀏覽 唯讀 底色:灰色
           - loadMask  - 顯示稍候訊息,Async不可設為false

處理說明:    1>欄位設為唯讀 , 底色設為灰色
                                     Ext.getCmp("sub_AMMNO").setReadOnly(true);    
                                    Ext.getCmp("sub_AMMNO").inputEl.addCls('readonly');
                               2>inputEI 必需在 已顯示畫面(win.show()),才可設定
                               3>清除 cookie
                                    //Ext.util.Cookies.clear("Rtn_Msg"); 
                        //先清除 cookies 欄位值 
                        Ext.util.Cookies.set("Rtn_Msg", "");


1>*.js
  var Tmp_AMMNO, Tmp_SAPNO, Tmp_PN;
    Tmp_AMMNO = nulltoStr(par_rec.data['AMMNO']).toString();    
    Tmp_SAPNO = nulltoStr(par_rec.data['SAPNO']).toString();    
    Tmp_PN = nulltoStr(par_rec.data['PN']).toString();            
        Ext.getCmp("sub_AMMNO").setValue(Tmp_AMMNO);
        Ext.getCmp("sub_SAPNO").setValue(Tmp_SAPNO);
    Ext.getCmp("sub_PN").setValue(Tmp_PN);              
    Ext.getCmp("sub_AMMNO").setReadOnly(true);    
    Ext.getCmp("sub_SAPNO").setReadOnly(true);
    Ext.getCmp("sub_PN").setReadOnly(true);    
    win1.show();
    Ext.getCmp("sub_AMMNO").inputEl.addCls('readonly');
    Ext.getCmp("sub_SAPNO").inputEl.addCls('readonly');
    Ext.getCmp("sub_PN").inputEl.addCls('readonly');

    //檔案下載
 try {            
            var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
            document.location = Tmp_url;        
            var mask = new Ext.LoadMask(Ext.getBody(), {
                msg: '檔案下載中, 請稍待...'
            });
            mask.show();//使用 mask 需手動呼叫show() 方法下        
            var timer = setInterval(function () {
                //timer = null;     
                //若資料庫已更新完成, 則 Email 委約==6  &  Email 委約<>6
                var Tmp_Str = r_cookies('Rtn_Msg');
                console.log("cookies Rtn_Msg =", Tmp_Str);
                if (!checkisnull(Tmp_Str)) {
                    mask.hide();
                    mysuccessalert(Tmp_Str);
                    clearInterval(timer);  //不再重覆執行                                     
                }
            }, 1000)  // end of timer                    
        }  // end of try
        catch (e) {
            var Tmp_Str = "下載檔案失敗!!<br>"
                + "AMM單號(" + cur_rec.data["AMMNO"] + ")<br>"
                +"錯誤訊息:"+ e.message;
            mywarnalert(Tmp_Str);        
        }   //檔案無法讀取,仍會下載 byte=0

//若下載完成,則不再顯示 LoadMark
   Ext.getCmp('grid_Single').store.on("load", 
                                  function (me, records, successful, eOpts) {
                                      Proc_Msg.hide();  //若顯示完成,則不再顯示訊息
                                });

V80202D – 下載撤銷附加檔 - downloadFile2 – Cookie - 清除並顯示訊息 - loadMask - cookie - timer - Ajas.async必需為 true

 目的: V80202D – 下載撤銷附加檔 - downloadFile2 – Cookie  - 並顯示下載完成/失敗訊息

處理說明: 0>先清除 cookies 欄位值 

                       Ext.util.Cookies.set("Rtn_Msg", "");

                 1>下載檔案(AMM_DFILES.DBLOB) 

var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;

            document.location = Tmp_url;        

                2> 下載完成,顯示訊息  -   - Ajas.async必需為 true , 才會顯示 LoadMask訊息
                        var mask = new Ext.LoadMask(Ext.getBody(), {
                             msg: '檔案下載中, 請稍待...'
                         });
                       -  var Tmp_Str = r_cookies('Rtn_Msg');



1>*.js
    /*
     *SELECT   AMMNO,DFNAME,DBLOB
       FROM   AMM_DFILES
       WHERE  1=1;
     */
    var Tmp_TblNM = "AMM_DFILES";
    var Tmp_Flds = "DFNAME,DBLOB"
    var Tmp_Cnd = "  AND       AMMNO=" + AA(cur_rec.data["AMMNO"]);
    try {
        var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
        document.location = Tmp_url;
        var mask = new Ext.LoadMask(Ext.getBody(), {
            msg: '檔案下載中, 請稍待...'
        });
        mask.show();//使用 mask 需手動呼叫show() 方法下        
        var timer = setInterval(function () {
            //timer = null;     
            //若資料庫已更新完成, 則 Email 委約==6  &  Email 委約<>6
            var Tmp_Str = r_cookies('Rtn_Msg');
            console.log("cookies Rtn_Msg =", Tmp_Str);
            if (!checkisnull(Tmp_Str)) {
                mask.hide();
                mysuccessalert(Tmp_Str);
                clearInterval(timer);  //不再重覆執行                                     
            }
        }, 1000)  // end of timer                    
    }  // end of try
    catch (e)
    {
        var Tmp_Str = "下載檔案失敗!!<br>"
            + "AMM單號(" + cur_rec.data["AMMNO"] + ")<br>";     
        throw  Tmp_Str; 
    }   //檔案無法讀取,仍會下載 byte=0


2>*.cs

//取得  Table 的 FILEBODY 欄位值  - 不含 SQL
        [HttpGet]
        public void downloadFile2(string aTbl, string Flds, string aCnd)
        {
            string[] Ary = Flds.Split(',');
            string fnm = Ary[0];   //檔案名 稱
            string fbdy = Ary[1];  //檔案內容

            string cnd = Repltag_vch(aCnd);
            string Strsql = "select " + Flds + "  from " + aTbl + " where 1=1 " + cnd;
            string Tmp_CntSql = "select count(*)  from " + aTbl + " where 1=1 " + cnd;
            string Tmp_Str;
            int Tmp_cnt;
            HttpCookie MyCookie;
            try
            {
                Tmp_cnt = int.Parse(myfunc.SqlValue(Tmp_CntSql));
                if (Tmp_cnt>=0)
                {
                    //必需先加入 Cookie , 再 downloadFile 
                    //--> 因 downloadFile 會 HttpContext.Current.Response.End(); , 
                    //所以 要先加 Cookie , 再 downloadFile
                    Tmp_Str = "檔案下載完成!!<br>";
                    MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
                    HttpContext.Current.Response.Cookies.Add(MyCookie);
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                    downloadFile(Strsql, fnm, fbdy);
                }
                else
                {
                    Tmp_Str = "檔案不存在,請檢核!!<br>";
                    MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
                    HttpContext.Current.Response.Cookies.Add(MyCookie);
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                } 
            }
            catch (Exception ex)
            {
                Tmp_Str = ex.Message;
                if (Tmp_Str.IndexOf("DBNull") > -1)
                    Tmp_Str = "檔案內容為空白,敬請檢核!!<br>";
                MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
              //  throw ex; 
            }   //檔案無法讀取,仍會下載 byte=0
            finally
            { }
        }

2024年9月27日 星期五

V80202 – 工單物料查詢 – 勾選[V]專案報價,則 專案別=’F16V’ 唯讀, 工單類別=’DTXX’ 唯讀

 目的: V80202 – 工單物料查詢 勾選[V]專案報價, 專案別=’F16V’ 唯讀(底色: 灰色)

處理說明:  1> 欄位設為唯讀:
                         Ext.getCmp("s_PROJID").setReadOnly(true);
                   2>欄位唯讀 , 底色: 灰色
                       Ext.getCmp("s_PROJID").inputEl.addCls('readonly');             
                       --> Ext.getCmp("s_PROJID").inputEl.addCls
                       --> 必需在畫面已顯示(win.show())後,才可設定 


1>*.js
// // 若勾選[v]專案報價-->則 [專案別]='F16V' & [工單類別]='DTXX' 唯讀 & 機號必填
Ext.getCmp("s_chk_OTHR").items.items[5].on('change', function (me, newValue, oldValue, eOpts) {
if (newValue) { //
     Ext.getCmp("s_PROJID").setValue("F16V"); 
     Ext.getCmp("s_PROJID").setReadOnly(true);
     Ext.getCmp("s_PROJID").inputEl.addCls('readonly');
     Ext.getCmp("s_SROTP").setValue("DTXX");
     Ext.getCmp("s_SROTP").setReadOnly(true);
     Ext.getCmp("s_SROTP").inputEl.addCls('readonly');
}
else {
     Ext.getCmp("s_PROJID").setValue("");
     Ext.getCmp("s_PROJID").setReadOnly(false);
     Ext.getCmp("s_PROJID").inputEl.removeCls('readonly');
     Ext.getCmp("s_SROTP").setValue("");
     Ext.getCmp("s_SROTP").setReadOnly(false);
     Ext.getCmp("s_SROTP").inputEl.removeCls('readonly');
}




2024年9月26日 星期四

V80202 -顯示工號 – [V]子件工單 - UNION 用法 - 日期起迄 - 分成2行 - 過濾條件

 目的: V80202 -顯示工號 – [V]子件工單  

處理說明: 1>子件工單的定義: 共3類
   1>>AMM單號含 -x : AMMNO 長度>13 且 SUBSTRING(AMMNO,1,13) IN (AMM單號)
   2>>QDR工單且 PSAPNO 符合條件的工單 : 為QDR工單,且 PSAPNO IN (工號)
   3>>TP工單且PSAPNO符合條件的QDR工單: 為 TP工單,且 PSAPNO IN ( 如上2>>的QDR工單)


1>*.cs
string Tmp_sWhere = "";  //過濾條件SQL - 不含 Select   from 
string Tmp_sFlds = "  AMMNO, PJER, PCODE, CST_NO, BM146NO, SAPNO,  TESTHR, OSM   ";
string Tmp_Sql = " SELECT  RNK,     "+ Tmp_sFlds                                                    
                          + "  FROM  ( "
                                  + "   SELECT   dense_rank()  over(order by  AMMNO) as RNK,  "+ Tmp_sFlds
                                  +"    FROM  ( "
                                                        + "  SELECT "+ Tmp_sFlds
                                                        + "  FROM      AMM_SRO  A "
                                                        + "    WHERE   1=1 ";
            if (!myfunc.checkisnull(Tmp_AMMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   AMMNO=" + myfunc.AA(Tmp_AMMNO);
                Tmp_sWhere = Tmp_sWhere + " AND   AMMNO=" + myfunc.AA(Tmp_AMMNO);
            }
            if (!myfunc.checkisnull(Tmp_SAPNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   SAPNO=" + myfunc.AA(Tmp_SAPNO);
                Tmp_sWhere = Tmp_sWhere + " AND   SAPNO=" + myfunc.AA(Tmp_SAPNO);
            }

//顯示: DISP    6 :  6子件工單
//顯示 [子件工單] 
1>AMM單號含 -x :AMMNO 長度>13 且 SUBSTRING(AMMNO,1,13) IN (符合條件的 AMM單號)
2>QDR工單且 PSAPNO 符合條件的工單  : 為QDR工單,且 PSAPNO  IN (符合條件的工號)
3>TP工單且PSAPNO符合條件的QDR工單: 為 TP工單,且 PSAPNO IN ( 如上2>的QDR工單)

  if (!myfunc.checkisnull(Tmp_chk_DISP))
  {
     if (Tmp_chk_DISP.IndexOf("6") > -1)   //顯示6子件工單 - 顯示目前工單的子件工單
     {
         Tmp_Sql = Tmp_Sql
                         + " UNION  "
                                           + " SELECT  " + Tmp_sFlds
                                           + " FROM     AMM_SRO "
                                           + " WHERE  1=1 "
                                           + "  AND      AMMNO IN (  SELECT  AMMNO FROM  AMM_SRO "
                                                                                     +" WHERE  LENGTH(AMMNO)>13  "
         +" AND SUBSTR(AMMNO,1,13) IN (SELECT AMMNO FROM AMM_SRO WHERE   1=1   " + Tmp_sWhere + " ) )"
                       + "   UNION  "
                                           + "  SELECT  " + Tmp_sFlds
                                           + "   FROM     AMM_SRO  "
                                           + "   WHERE   1=1 "
                                           + "  AND        ISQDR = 'Y'   "
                         + "  AND         PSAPNO IN  ( SELECT SAPNO FROM AMM_SRO  WHERE   1 = 1   " + Tmp_sWhere + ")"
                        + "   UNION  "
                                           + "  SELECT  " + Tmp_sFlds
                                           + "   FROM     AMM_SRO  "
                                           + "   WHERE   1=1 "
                                           + "  AND        ISTP = 'Y'   "
                                           + "  AND  PSAPNO IN ( SELECT SAPNO  FROM  AMM_SRO  WHERE  ISQDR='Y'   AND  PSAPNO IN ( SELECT SAPNO FROM AMM_SRO  WHERE   1=1  " + Tmp_sWhere + " )  )  ";
                    }
                }  //end of  if (!myfunc.checkisnull(Tmp_chk_DISP))

            Tmp_Sql = Tmp_Sql + "   )   ";   // UNION , 不含 RNK
            Tmp_Sql = Tmp_Sql + "   )   ";  //  RNK

2024年9月24日 星期二

V80202 - 工單資料查詢 - 依目前資料 , 設定 Grid 的字體顏色 - 設定 Grid.行字體顏色 - getRowClass - 載入css - head - style

 目的: V80202 - 工單資料查詢 - 依目前資料 , 設定 Grid 的字體顏色

處理說明: 1>設定 Cell 字體顏色依目前資料 , 設定 Grid 的字體顏色
{header:"是否曾展BOM",dataIndex:"ISBOMIN",width:100,sortable:false,TMType:"string"},
{header: "停工中", dataIndex: "ISSTOP", width: 60, sortable: false, TMType: "string",
  renderer: function (value) 
                      {
      if (value == "Y") { return "<span  style='color:red'>" + value + "</span>"; }
                            else  {  return value;            }
                      } },

                 2>設定 row 字體顏色 依目前資料 , 設定 Grid 的字體顏色  - getRowClass    Ext.getCmp('grid_Single').getView().getRowClass = function (record, rowIndex, rowParams, store) {   
if (record.data.ISSTOP == "Y") {
      return "my-red-color";
}






1>*.js
{header:"是否曾展BOM",dataIndex:"ISBOMIN",width:100,sortable:false,TMType:"string"},
{
header: "停工中", dataIndex: "ISSTOP", width: 60, sortable: false, TMType: "string",
renderer: function (value) {
if (value == "Y") {
    return "<span style='color:red'>" + value + "</span>";
}
else {
return value;
}}},
{header:"專案委託人",dataIndex:"PJER",width:100,sortable:false,TMType:"string"},





2>*.js
  2.1>>載入 mycss.css
             var Tmp_Str = "<link type='text/css' rel='stylesheet' href='../JsFunction/mycss.css'  >";
             $('head').append(Tmp_Str);

mycss.css 內容
.my-red-color {
    color: red;
}

.my-black-color {
    color: black;
}


 2.2>>設定 Grid.行字體顏色  - getRowClass
    Ext.getCmp('grid_Single').getView().getRowClass = function (record, rowIndex, rowParams, store) {
        if (record.data.ISSTOP == "Y") {
            return "my-red-color";
        }
        else
            return "my-black-color";
    }
         
 


2024年9月22日 星期日

V80202 – 工單資料查詢 –畫面開啟時, combo1 預設值 :生產工廠(PROCWC)

 目的: V80202 – 工單資料查詢 畫面開啟時, combo1 預設值 :生產工廠(PROCWC)

處理說明:  1> 畫面開啟時,  combo1 預設值 :"生產工廠"  , value="PROCWC"
                         Ext.getCmp("s_filter1").setValue("PROCWC");
                       selectedValues["s_filter1"] = "PROCWC";            
                       Ext.getCmp("s_filter1_txt").setValue("7100");
                  2> checkbox 預設值為  true, checked
                       var cmp_chk_TP5 = get_cmp_chk0('排除QDR工單', 's_chk_TP', 50, '5');
                       cmp_chk_TP5.checked = true;





1>*.js
    //combo:  s_filter1 預設為 '生產工廠'   過濾值='7100'
    Ext.getCmp("s_filter1").setValue("PROCWC");
    selectedValues["s_filter1"] = "PROCWC";            
    Ext.getCmp("s_filter1_txt").setValue("7100");

//工單:  1/2/3/4/5/6/ALL  : 1TP工單/2非TP工單/3子件工單/4機務工單/5排除QDR工單/6無PDM物料需求
    var cmp_chk_TP = get_cmp_chkgrp1('工單', 's_chk_TP', 30);
    var cmp_chk_TP1 = get_cmp_chk0('TP工單', 's_chk_TP', 50, '1');
    var cmp_chk_TP2 = get_cmp_chk0('非TP工單', 's_chk_TP', 50, '2');
    var cmp_chk_TP3 = get_cmp_chk0('子件工單', 's_chk_TP', 50, '3');
    var cmp_chk_TP4 = get_cmp_chk0('機務工單', 's_chk_TP', 50, '4');
    var cmp_chk_TP5 = get_cmp_chk0('排除QDR工單', 's_chk_TP', 50, '5');
    var cmp_chk_TP6 = get_cmp_chk0('無PDM物料需求', 's_chk_TP', 50, '6');
    var cmp_chk_TP7 = get_cmp_chk0('QDR完工&TP未完工', 's_chk_TP', 50, '7');    
    cmp_chk_TP.items.push(cmp_chk_TP1, cmp_chk_TP2, cmp_chk_TP3, cmp_chk_TP4, cmp_chk_TP5, cmp_chk_TP6,
        cmp_chk_TP7,
    );
    cmp_chk_TP5.checked = true;

    

V80202A – [顯示QDR明細資料]鈕 –工號(FAM0447) – 開啟QDR網址 - window.open(Tmp_webaddr)

 目的: V80202A – [顯示QDR明細資料] 工號(FAM0447) – 開啟QDR網址

處理說明: 1>工號(FAM0447)  -  [顯示QDR明細資料]  - 開啟如下  QDR網址    
                           https://aesweb/qdr/qdr_online/qdr_view.asp?qdr_id= 55808
                      2> window.open(Tmp_QDR_addr);                                      
                       Tmp_QDR_addr="https://aesweb/qdr/qdr_online/qdr_view.asp?qdr_id= 55808";



 2>顯示資料 - 聯結的網址如颪:   
https://aesweb/qdr/qdr_online/qdr_view.asp?qdr_id=55808