2024年10月16日 星期三

V80202 – checkbox 含輸入值

 目的: V80202 – checkbox 含輸入值

處理說明: 1>以 Panel 當 Container 方式 : 
                      加入  checkbox & 輸入欄位 & Label


1>*.js

//[ ] 超過xx
    var cmp_chk_SAPDT5 = get_cmp_panel1(120);
    var cmp_chk_SAPDT51 = get_cmp_chk1('超過', 's_chk_SAPDT51', 70, '5','0 5 0 0');
    var cmp_chk_SAPDT52 = get_cmp_txt0('s_chk_SAPDT52', 30);
    var cmp_chk_SAPDT53 = get_cmp_lbl0('', 30);
    cmp_chk_SAPDT5.items.push(cmp_chk_SAPDT51, cmp_chk_SAPDT52, cmp_chk_SAPDT53);   

2024年10月10日 星期四

V80403 – 領班專案系統件查詢 – 加入 TabSheet - TabPanel

 目的: V80403 – 領班專案系統件查詢 加入 TabSheet - TabPanel

處理說明:





2024年10月6日 星期日

V80202M – [Finding處置匯入]鈕 – 匯入資料,並回傳處理結果檔 - 回傳檔案 - 處理結果 - Files

 目的: V80202M – [Finding處置匯入] 匯入資料,並回傳處理結果檔

處理說明:  1>匯入檔案 :
                                               foreach (string cur_FName in Request.Files)
                                               {
                                                    Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
                                              }
                                             wk = new Workbook();
                                    wk.LoadFromStream(Tmp_in_Stream);

                              2>回傳結果檔案:
                                       wk.SaveToStream(stream, FileFormat.Version2007);
                                       HttpContext.Current.Response.BinaryWrite(stream.ToArray());




1>*.cs
[HttpPost]
        public void UPDATE_QDRWKTP()
        {
            HttpContext c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //OracleConnection conn = new OracleConnection(DBService.ConnectionString(("AMMEU"));//
            OracleConnection conn = new OracleConnection(DBService.ConnectionString((DBLINK)));//
            OracleCommand cmd = new OracleCommand();
            OracleDataReader reader;
            DataSet ds = null;
            //取得匯入檔案名稱   of   filefield            
            string Tmp_FName = nvc["sub_FName"];
            string Tmp_in_FName="", Tmp_out_FName="";
            Workbook wk = null;
            MemoryStream stream = new MemoryStream();
            Worksheet ws=null;
           HttpRequest Request = HttpContext.Current.Request;
            var response = this.Request.CreateResponse();
            //string file_Name = Tmp_in_FName;
            string FILEDT = DateTime.Now.ToString("yyyy/MM/dd");
            string Tmp_RtnMsg = "";
            string Tmp_RtnMsg1 = "";
            string Tmp_Sql = "", Tmp_Str = "";
            int Tmp_cnt = 0;
            int Tmp_rowcnt = 0;
            HttpCookie MyCookie = new HttpCookie("Rtn_Msg");
            //HttpCookie MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));            
            conn.Open();
            cmd.Connection = conn;
            try
            {
                foreach (string cur_FName in Request.Files)
                {
                    string fileType = Request.Files[cur_FName].ContentType;
                    Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
                    Tmp_in_FName = Path.GetFileName(Request.Files[cur_FName].FileName);
                    Tmp_out_FName = "Log_" + Tmp_in_FName;
                    int fileSize = Request.Files[cur_FName].ContentLength;
                    byte[] fileRcrd = new byte[fileSize];
                    //更新資料庫欄位值                                                
                    //匯入的 xls
                    wk = new Workbook();
                    wk.LoadFromStream(Tmp_in_Stream);
                    ws = wk.Worksheets[0];                    
                    string Tmp_SAPNO, Tmp_QDRWKTP;
                    
                    //STEP1 檢核  XLS 欄位名稱資料是否正確  -取得 標題 of  工號,處置說明                                          
                    Tmp_SAPNO = ws.Range[myfunc.GetExcelPos(0, 0)].Value;
                    Tmp_QDRWKTP = ws.Range[myfunc.GetExcelPos(1, 0)].Value;
                    //xls 欄位名稱有問題
                    if ((Tmp_SAPNO != "工號") || (Tmp_QDRWKTP  != "處置說明"))
                    {
                        Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>";
                        //(Tmp_DTSOR != "資料來源") || (Tmp_OGONOAF != "拆檢提領編號") || (Tmp_NGONOAF != "維修提領編號") || (Tmp_RPNOAF != "拆檢交修單號") || (Tmp_MRPNOAF != "維修約交修單號") ||
                        if (Tmp_SAPNO != "工號")
                            Tmp_RtnMsg = Tmp_RtnMsg + "第1欄欄位名稱:  [工號];";
                        if (Tmp_QDRWKTP != "處置說明")
                            Tmp_RtnMsg = Tmp_RtnMsg + "第2欄欄位名稱:  [處置說明];";
                        MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                        return;
                    };
                    ws.Range[myfunc.GetExcelPos(2, 0)].Value = "匯入結果說明";
                    //STEP2 取得xls.[目前件號].報工資料                    
                    // Transaction SQL List - 存放  Transaction 的 SQL 
                    List<string> SQL_List_A = new List<string>();
                    int RowsCount = ws.LastRow;
                    //int Tmp_cnt;
                    for (int i = 0; i < RowsCount; i++)
                    {                        
                        Tmp_SAPNO = ws.Range[myfunc.GetExcelPos(0, i + 1)].Value;
                        Tmp_QDRWKTP = ws.Range[myfunc.GetExcelPos(1, i + 1)].Value;
                        if (myfunc.checkisnull(Tmp_SAPNO))
                        { break; }
                        Tmp_Sql=" SELECT   COUNT(*)  "
                                       +"  FROM    AMM_SRO  "
                                       +"  WHERE  SAPNO=" + myfunc.AA(Tmp_SAPNO.Trim());
                        Tmp_cnt = int.Parse(myfunc.SqlValue(Tmp_Sql));
                        if (Tmp_cnt == 0)
                        {
                            ws.Range[myfunc.GetExcelPos(2, i + 1)].Value = "工號不存在AMM系統";
                        }
                        else
                        {
                            Tmp_Sql = " UPDATE   AMM_SRO  "
                                           + "  SET          QDRWKTP=" + myfunc.AA(Tmp_QDRWKTP.Trim())
                                           + "  WHERE   SAPNO=" + myfunc.AA(Tmp_SAPNO.Trim());
                            //SQL_List_A.Add(Tmp_Sql);
                            myfunc.SqlExec(Tmp_Sql);                            
                            ws.Range[myfunc.GetExcelPos(2, i + 1)].Value = "更新完成";
                        }
                        Tmp_rowcnt = Tmp_rowcnt + 1;
                    }  // end of for (int i = 0; i < RowsCount; i++)                    
                    //excuteSQLTran(SQL_List_A);
                }  //end of foreach (string cur_FName in Request.Files)
                ws.AllocatedRange.AutoFitColumns();
                wk.SaveToStream(stream, FileFormat.Version2007);
                Tmp_Str = "Finding處置完成!!(" + Tmp_rowcnt.ToString() + "筆)<br>"
                            + "匯入檔案名稱(" + Tmp_FName + ")";
                MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
                //MyCookie.Value = HttpUtility.UrlEncode(Tmp_Str);
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(Tmp_out_FName, System.Text.Encoding.UTF8) + "\"");
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                HttpContext.Current.Response.BinaryWrite(stream.ToArray());
                HttpContext.Current.Response.End();                
            } // end fo try{             
            catch (Exception e)
            {
                //Console.WriteLine(e);
                Tmp_RtnMsg = "錯誤訊息如下:"
                                         + e.Message;
                MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.Response.End();
                //throw;
            }
            finally
            {
                wk.Dispose();                
                conn.Close();
            }
            //return response;
            //Tmp_Cnt = 6;            
        }  //  end of  UPDATE_QDRWKTP()


2024年10月3日 星期四

V80202L – 工單資料查詢 – [SAP單況比對] – 依[工號]排序 - Sort - datatable - 且相同工號不重複列出明細

 目的:V80202L – 工單資料查詢 – [SAP單況比對] – [工號]排序 ,- Sort - datatable

處理說明: 1>datatable 依 [工號]排序
                       dt1.DefaultView.Sort = "SAPNO";
                       dt1 = dt1.DefaultView.ToTable();
                       for (var i = 0; i < dt1.Rows.Count; i++)
         




1>*.js

                dt1.DefaultView.Sort = "SAPNO";
                dt1 = dt1.DefaultView.ToTable();

                string Tmp_old_SAPNO="";
                int Tmp_row = 0;
                for (var i = 0; i < dt1.Rows.Count; i++)
                {
                    Tmp_SAPNO = dt1.Rows[i]["SAPNO"].ToString();                    
                    if (Tmp_SAPNO == "TEST")
                        Tmp_SAPNO = "TEST";
                    if (Tmp_old_SAPNO == Tmp_SAPNO)
                        continue;
                    Tmp_SAPNO1 = myfunc.get_SAPNO(Tmp_SAPNO);
                    Tmp_Sql =" SELECT b.AUFNR,UDATE ,UTIME,USNAM,STAT  "
                                +" FROM SAPR3.JCDS@SAP a,SAPR3.AUFK@SAP b  "
                                +" WHERE  a.MANDT = '999'   "
                                +"  AND b.MANDT = '999'  "
                                +"  AND a.INACT = ' '  "
                                +"  AND a.OBJNR = b.OBJNR  "
                                +" AND b.AUFNR ="+ myfunc.AA(Tmp_SAPNO1)
                                +" ORDER BY  AUFNR,UDATE ,UTIME ,STAT  ";                
                dt2 = myfunc.SqlOpen(dt2, Tmp_Sql);
                for (var j = 0; j < dt2.Rows.Count; j++)
                {
                        Tmp_row = Tmp_row + 1;
                        //string  Tmp_SAPNO,Tmp_UDATE,Tmp_UTIME,Tmp_UDID,Tmp_STAT;
                        Tmp_UDATE = dt2.Rows[j]["UDATE"].ToString();
                        Tmp_UTIME = dt2.Rows[j]["UTIME"].ToString();
                        Tmp_UDID = dt2.Rows[j]["USNAM"].ToString();
                        Tmp_SAPSTAT = dt2.Rows[j]["STAT"].ToString();
                        //單況說明
                        Tmp_Sql = "  SELECT TXT04, TXT30  "
                                       + "  FROM    SAPR3.TJ02T @SAP d  "
                                       + "  WHERE   1 = 1  "
                                       + "   AND       SPRAS = 'M'   "
                                       + "   AND       ISTAT =" + myfunc.AA(Tmp_SAPSTAT);
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        Tmp_TXT04 = myfunc.StrExtract(Tmp_Str, 1, ";");
                        Tmp_TXT30 = myfunc.StrExtract(Tmp_Str, 2, ";");
                        ws1.Range[myfunc.GetExcelPos(0, Tmp_row)].Text = Tmp_SAPNO;
                        ws1.Range[myfunc.GetExcelPos(1, Tmp_row)].Text = Tmp_UDATE;
                        ws1.Range[myfunc.GetExcelPos(2, Tmp_row)].Text = Tmp_UTIME;
                        ws1.Range[myfunc.GetExcelPos(3, Tmp_row)].Text = Tmp_UDID;
                        ws1.Range[myfunc.GetExcelPos(4, Tmp_row)].Text = Tmp_SAPSTAT;
                        ws1.Range[myfunc.GetExcelPos(5, Tmp_row)].Text = Tmp_TXT04;
                        ws1.Range[myfunc.GetExcelPos(6, Tmp_row)].Text = Tmp_TXT30;
                    };  //end of for (var j = 0; j < dt2.Rows.Count; i++)                    
                    Tmp_old_SAPNO = Tmp_SAPNO;
                } //end of for (var i = 0; i < dt1.Rows.Count; j++)                    
                wk.ActiveSheetIndex = 0;
                wk.SaveToStream(mstream, FileFormat.Version2007);
                wk.SaveToFile(FileName1, FileFormat.Version2007);

2024年9月30日 星期一

V80202E – 工單附檔瀏覽 – 唯讀 – 底色:灰色 - 下載檔案 - - 清除 cookie - loadMask - cookie -timer

 目的: V80202E – 工單附檔瀏覽 唯讀 底色:灰色

處理說明:    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

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

處理說明: 1>下載檔案(AMM_DFILES.DBLOB) 

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

            document.location = Tmp_url;        

                2> 下載完成,顯示訊息 
                        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');
}