2023年3月14日 星期二

V80204C - XLS2XLS – 依讀取的 XLS 檔案,匯出相關XLS檔案

 目的:  V80204C – [確定匯入]- 依讀取 XLS 檔案,匯出相關XLS檔案

處理說明: 1>後端.[讀取檔案] -   Request.Files  
                                                     - foreach (string cur_FName in Request.Files)
                                                        Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
                                                        wk.LoadFromStream(Tmp_in_Stream);
                  2>後端.[匯出檔案] 
                                    -  wk2.SaveToStream(Tmp_out_Stream, FileFormat.Version2010);
                                       HttpContext.Current.Response.BinaryWrite(Tmp_out_Stream.ToArray());

                  1>[匯出檔案]至前端 Browser, 必需使用 Cookie 顯示訊息,
                      --> 不可使用 response.Content
                      --> *.cs.匯出函式 傳回 voild , 非 HttpResponseMessage, 不可使用 successful/failure ,

                2>若同時[匯入檔案] &[匯出檔案], 不可使用 f_downloadFile(若只匯出檔案才可用之)
                          -->  因 f_downloadFile 會自行產生 Form & submit , 非使用者自定的畫面.submit(包含[檔案]欄位)



1>*.js  - V80204C.js
   {
            xtype: 'button', text: '確定匯入', id: 'OkBtn_Sub3',
            listeners: {
                click: function (me, e, eOpts) {                    
                    var Tmp_Str = "";
                    if (checkisnull(Ext.getCmp("sub3_FName").getValue())) {
                        Tmp_Str = "[檔案來源]欄位不可空白<br>"
                            + " 敬請檢核 !!";
                        mywarnalert(Tmp_Str);
                        return;
                    }              
                    Ok_process(me, e, eOpts);       
                } // end of click
            }  // end of listener
        },

//[確認匯入]鈕 , 處理
function Ok_process(me, e, eOpts) {
    console.log(" 1 inside Ok_process");
    console.log(" me: ", me);
    //取得 [檔案上傳].檔名
    var Tmp_FileObj = Ext.getCmp('sub3_FName');
    np["in_FName"] = Ext.getDom(Tmp_FileObj.inputId).value    
    console.log("Tmp_FileObj :", Tmp_FileObj);
    var Tmp_Str = "";
    var np = {};
    np["sub3_PROJID"] = Ext.getCmp("sub3_PROJID").getValue();
    np["out_FName"] = "V80204_件號報工統計.xlsx";
    np["headers"] = { 'Content-type': 'multipart/form-data' },

    me.up("form").submit({
        url: '../api/V80204CAPI/XLSIN2XLSOUT',
        method: 'POST',
        headers: { 'Content-type': 'multipart/form-data' },
        params: np,        
    });  // end of  me.up("form").submit({

    //隔兩秒才顯示完成訊息
    var timer = setInterval(function () {
        var cookie_token = Ext.util.Cookies.get("EX_DFile");
        if (cookie_token != null) {
            clearInterval(timer);
            timer = null;
            //mask.hide();            
            var rtn_msg=r_cookies('EX_DFile');
            mysuccessalert(rtn_msg);
            me.up("window").close();
            me.up("window").destroy();
        }
    }, 2000);  //等待 2000ms =1sec    
};  // end of Ok_process() {  //批次新增

     
2>*.cs   V80204C*.cs  XLSIN2XLSOUT
 // [件號報工統計] - [確定匯入] 鈕 , 匯入 件號XLS 檔案後,產出該[件號報工資料]
        [HttpPost]
        public void XLSIN2XLSOUT()
        {

            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_in_FName = nvc["in_FName"];
            //取得匯出檔案名稱   of   filefield
            string Tmp_out_FName = nvc["out_FName"];
            string Tmp_sub3_PROJID = nvc["sub3_PROJID"];
            Workbook wk = null;
            Workbook wk2 = null;
            MemoryStream Tmp_out_Stream = new MemoryStream();

            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;
            //HttpCookie MyCookie = new HttpCookie("Rtn_Msg");
            HttpCookie MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            int row2 = 0;
            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);
                    int fileSize = Request.Files[cur_FName].ContentLength;
                    byte[] fileRcrd = new byte[fileSize];
                    //更新資料庫欄位值                                                
                    //匯入的 xls
                    wk = new Workbook();
                    wk.LoadFromStream(Tmp_in_Stream);
                    Worksheet sheet1 = wk.Worksheets[0];

                    //匯出的 xls
                    wk2 = new Workbook();
                    Worksheet sheet2 = wk2.Worksheets[0];//獲取第一個工作表
                    string[] outFieldArray = { "AMM單號", "工號", "版本", "件號", "件號名稱",
                                                           "製程", "製程資料內容", "WBS", "工單類型",  "數量", "單位",
                                                          "EOECN", "專案","機號","起始值(STARTVAL)", "情況處理碼",
                                                           "工單報工統計(小時)", "工作中心", "工作中心報工統計(小時)"
                                                                };
                    for (int i = 0; i < outFieldArray.Length; i++)
                    {
                        sheet2.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
                    }

                    int RowsCount = sheet1.LastRow;
                    string Tmp_AMMNO, Tmp_SAPNO, Tmp_ED, Tmp_PN, Tmp_PNNAME;
                string Tmp_MKNO, Tmp_MKDESCPT, Tmp_WBS, Tmp_SROTP, Tmp_QTY, Tmp_UNIT;
              string Tmp_ECNO, Tmp_PROJID, Tmp_ACNO, Tmp_STARTVAL, Tmp_CNDPROCCODE;
                    string Tmp_ALS_HR_, Tmp_WC_, Tmp_WCHR_;

                    //STEP1 檢核  XLS 欄位名稱資料是否正確  -取得 標題 of  件號                                          
                    Tmp_PN = sheet1.Range[myfunc.GetExcelPos(0, 0)].Value;

                    //xls 欄位名稱有問題
                    if ((Tmp_PN != "件號"))
                    {
                        Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>";
                        //(Tmp_DTSOR != "資料來源") || (Tmp_OGONOAF != "拆檢提領編號") || (Tmp_NGONOAF != "維修提領編號") || (Tmp_RPNOAF != "拆檢交修單號") || (Tmp_MRPNOAF != "維修約交修單號") ||
                        if (Tmp_PN != "件號")
                            Tmp_RtnMsg = Tmp_RtnMsg + "第1欄欄位名稱:  [件號];";
                        //Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>"
                        //                         + "\件號"
                        //                         + " 敬請檢核";
                        //Tmp_Str = "{success: false,FName:" + myfunc.AA(FName) + ",Rtn_Msg:" + myfunc.AA(Tmp_RtnMsg) + "}";
                        //response.Content = new StringContent(Tmp_Str);    // 回應內容
                        //return response;
                        //以 Cookie 方式傳回訊息 , 因為要下載[匯出檔案],無傳回值 所以利用 Cookie 傳回訊息 -,f_downloadFile('EX_DFile', '../api/V80C03API/DB2XLS', np, 'POST', function () {
                        MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                    };
                    //STEP2 取得xls.[目前件號].報工資料                    
                    for (int i = 0; i < RowsCount; i++)
                    {
                        Tmp_PN = sheet1.Range[myfunc.GetExcelPos(0, i + 1)].Value;
                        if (myfunc.checkisnull(Tmp_PN))
                        { break; }
                        Tmp_Sql = "SELECT   AMMNO,SAPNO, "
                                                      + " ( SELECT  ED  "
                                                      + "   FROM  AMM_EDLST b "
                                     + "   WHERE  (AMMNO, ITM) in (   select AMMNO, max(to_number(ITM)) "
                                                                                          + " from AMM_EDLST group by AMMNO)  "
                                     + "  AND        a.AMMNO = b.AMMNO) ED,  "
                                    + "  PN,PNNAME,MKNO,MKDESCPT,WBS,SROTP,QTY,UNIT ,ECNO,PROJID,ACNO,STARTVAL,CNDPROCCODE  "
                                       + "   FROM    AMM_SRO a  "
                                       + "   WHERE  LENGTH(SAPNO)> 7  ";
                        if (!myfunc.checkisnull(Tmp_sub3_PROJID))
                            Tmp_Sql = Tmp_Sql + "    AND       PROJID = " + myfunc.AA(Tmp_sub3_PROJID);
                        Tmp_Sql = Tmp_Sql + "     AND       PN = " + myfunc.AA(Tmp_PN)
                                                         + "     ORDER   BY   ACNO,PN  ";
                        cmd.CommandText = Tmp_Sql;
                        reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            Tmp_AMMNO = reader["AMMNO"].ToString();
                            Tmp_SAPNO = reader["SAPNO"].ToString();
                            Tmp_ED = reader["ED"].ToString();
                            Tmp_PN = reader["PN"].ToString();
                            Tmp_PNNAME = reader["PNNAME"].ToString();
                            Tmp_MKNO = reader["MKNO"].ToString();
                            Tmp_MKDESCPT = reader["MKDESCPT"].ToString();
                            Tmp_WBS = reader["WBS"].ToString();
                            Tmp_SROTP = reader["SROTP"].ToString();
                            Tmp_QTY = reader["QTY"].ToString();
                            Tmp_UNIT = reader["UNIT"].ToString();
                            Tmp_ECNO = reader["ECNO"].ToString();
                            Tmp_PROJID = reader["PROJID"].ToString();
                            Tmp_ACNO = reader["ACNO"].ToString();
                            Tmp_STARTVAL = reader["STARTVAL"].ToString();
                            Tmp_CNDPROCCODE = reader["CNDPROCCODE"].ToString();
                            //取得[工單報工工時]
                            Tmp_Sql = " SELECT   round((sum(HOUR_WORK)+sum(HOUR_OT))/60,2)  HR  "
                                            + "  FROM  "
                                            + "    (  "
                            + " SELECT  JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                            + " union all  "
                                            + "  select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                            + "   )  "
                                            + "   group by JCN ";
                            Tmp_ALS_HR_ = myfunc.SqlValue(Tmp_Sql);
              Tmp_Sql = "   SELECT  WC,round((sum(HOUR_WORK)+sum(HOUR_OT))/60,2)  WCHR  "
                                           + "   FROM  "
                                           + "  (  "
                                           + "   select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                           + "   union all  "
                                           + "   select JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT from HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR where JCN = '0000' || " + myfunc.AA(Tmp_SAPNO)
                                           + "  )  "
                                           + "  group by JCN,WC  ";
                            Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                            Tmp_WC_ = myfunc.StrExtract(Tmp_Str, 1);
                            Tmp_WCHR_ = myfunc.StrExtract(Tmp_Str, 2);
                            //匯出至  wk2.Sheet2
                            /*
                             { AMM單號, 工號, 版本, 件號, 件號名稱,
                                                                製程, 製程資料內容, WBS, 工單類型,  數量, 單位,
                                                                EOECN, 專案,機號,起始值(STARTVAL), 情況處理碼,
                                                                工單報工統計(小時), 工作中心, 工作中心報工統計(小時)
                                                               ];
                            */
                            //- 匯出  { AMM單號, 工號, 版本, 件號, 件號名稱,
                            row2 = row2 + 1;
                            sheet2.Range[myfunc.GetExcelPos(0, row2)].Text = Tmp_AMMNO;
                            sheet2.Range[myfunc.GetExcelPos(1, row2)].Text = Tmp_SAPNO;
                            sheet2.Range[myfunc.GetExcelPos(2, row2)].Text = Tmp_ED;
                            sheet2.Range[myfunc.GetExcelPos(3, row2)].Text = Tmp_PN;
                            sheet2.Range[myfunc.GetExcelPos(4, row2)].Text = Tmp_PNNAME;
                            //製程, 製程資料內容, WBS, 工單類型,  數量, 單位,
                            sheet2.Range[myfunc.GetExcelPos(5, row2)].Text = Tmp_MKNO;
                            sheet2.Range[myfunc.GetExcelPos(6, row2)].Text = Tmp_MKDESCPT;
                            sheet2.Range[myfunc.GetExcelPos(7, row2)].Text = Tmp_WBS;
                            sheet2.Range[myfunc.GetExcelPos(8, row2)].Text = Tmp_SROTP;
                            sheet2.Range[myfunc.GetExcelPos(9, row2)].Text = Tmp_QTY;
                            sheet2.Range[myfunc.GetExcelPos(10, row2)].Text = Tmp_UNIT;
                            //EOECN, 專案,機號,起始值(STARTVAL), 情況處理碼,
                            sheet2.Range[myfunc.GetExcelPos(11, row2)].Text = Tmp_ECNO;
                            sheet2.Range[myfunc.GetExcelPos(12, row2)].Text = Tmp_PROJID;
                            sheet2.Range[myfunc.GetExcelPos(13, row2)].Text = Tmp_ACNO;
                            sheet2.Range[myfunc.GetExcelPos(14, row2)].Text = Tmp_STARTVAL;
                            sheet2.Range[myfunc.GetExcelPos(15, row2)].Text = Tmp_CNDPROCCODE;
                            // 工單報工統計(小時), 工作中心, 工作中心報工統計(小時)
                            sheet2.Range[myfunc.GetExcelPos(16, row2)].Text = Tmp_ALS_HR_;
                            sheet2.Range[myfunc.GetExcelPos(17, row2)].Text = Tmp_WC_;
                            sheet2.Range[myfunc.GetExcelPos(18, row2)].Text = Tmp_WCHR_;
                        } // end of while reader.read()
                    }  // end of for (int i = 0; i < RowsCount; i++)
                    sheet2.AllocatedRange.AutoFitColumns();
                    wk2.SaveToStream(Tmp_out_Stream, FileFormat.Version2010);
                }  //end of foreach (string cur_FName in Request.Files)
            } // 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();
                wk2.Dispose();
                conn.Close();
            }
            //return response;
            //Tmp_Cnt = 6;
            Tmp_Str = "已匯出完成!!  (" + row2.ToString() + "筆) <br>"
                            + "檔案名稱(" + Tmp_out_FName + ")";
            //MyCookie = new HttpCookie("EX_DFile", 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(Tmp_out_Stream.ToArray());
            HttpContext.Current.Response.End();
        }  //  end of  XLSIN2XLSOUT()







2023年3月12日 星期日

V101 – FILEFIELD -檔案元件, [選擇檔案]鈕未顯示 - 上傳檔案

 目的: V101 – FILEFIELD –[選擇檔案]鈕未顯示

處理說明: 設定 [filefield] 元件的 width 即可



2023年3月10日 星期五

V80204A: - 匯出時,不分頁,資料全取 ,[工作中心報工匯出]鈕 – c# 子視窗呼叫 Master的函式(*.cs)

 目的: V80204: [工作中心報工匯出] – c# 子視窗呼叫 Master的函式(*.cs)

處理說明: 1>*.cs 
          //匯出時, 不分頁(par_paging=false), 資料全取 
            V80204APIController V80204 = new V80204APIController();
            DataSet ds = V80204.getGridData_M(false);



1>*.cs
 [HttpPost]
        public void WC_ALS_OutFile()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

            //匯出時, 不分頁(par_paging=false), 資料全取 
            V80204APIController V80204 = new V80204APIController();
            DataSet ds = V80204.getGridData_M(false);
            //DataSet ds = null;

            string Tmp_FName = nvc["FName"];   //含 *.xls
            string Tmp_sub1_WC = nvc["sub1_WC"];
            //string fName = Tmp_FNAME + ".xlsx";
            string fName = Tmp_FName;
            Workbook wk = null;
            MemoryStream stream = new MemoryStream();
            string Tmp_Str = "";
            string Tmp_Sql = "";
            int Tmp_Cnt = 0;
            try
            {
                wk = new Workbook();
                Worksheet sheet1 = wk.Worksheets[0];//獲取第一個工作表
                //共 9 欄
                //AMM單號 工號  件號 件號名稱    製程 製程資料內容  WBS 工單類型    數量 單位  EOECN 專案  機號 起始值 情況處理碼 工單報工統計(小時)  工作中心 工作中心報工統計(小時)    版本
                string[] outFieldArray = { "項次","AMM單號","工號", "件號", "件號名稱", "製程",
                                                             "製程資料內容", " WBS", "工單類型", "數量", "單位",
                                                             "EOECN", "專案","機號","起始值","情況處理碼",
                                          "工單報工統計(小時)","工作中心","工作中心報工統計(小時)"," 版本" };
                for (int i = 0; i < outFieldArray.Length; i++)
                {
                    sheet1.Range[myfunc.GetExcelPos(i, 0)].Text = outFieldArray[i];
                }
                DataTable dt = ds.Tables[1];
                Tmp_Cnt = dt.Rows.Count;
                //Tmp_Str = "已匯出完成!!  ("+Tmp_Cnt.ToString() +"筆) ";
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    sheet1.Range[myfunc.GetExcelPos(0, i + 1)].Text = String.Format("{0:d}", i + 1);
                    //sheet1.Range[myfunc.GetExcelPos(1, i + 1)].Text = String.Format("{0:yyyy/MM/dd}", DateTime.Parse(dt.Rows[i]["DT"].ToString())); };
                    // "AMM單號","工號", "件號", "件號名稱", "製程",
                    sheet1.Range[myfunc.GetExcelPos(1, i + 1)].Text = dt.Rows[i]["AMMNO"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(2, i + 1)].Text = dt.Rows[i]["SAPNO"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(3, i + 1)].Text = dt.Rows[i]["PN"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(4, i + 1)].Text = dt.Rows[i]["PNNAME"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(5, i + 1)].Text = dt.Rows[i]["MKNO"].ToString();
                    //"製程資料內容", " WBS", "工單類型", "數量", "單位",
                    sheet1.Range[myfunc.GetExcelPos(6, i + 1)].Text = dt.Rows[i]["MKDESCPT"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(7, i + 1)].Text = dt.Rows[i]["WBS"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(8, i + 1)].Text = dt.Rows[i]["SROTP"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(9, i + 1)].Text = dt.Rows[i]["QTY"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(10, i + 1)].Text = dt.Rows[i]["UNIT"].ToString();
                    //"EOECN", "專案","機號","起始值","情況處理碼",
                    sheet1.Range[myfunc.GetExcelPos(11, i + 1)].Text = dt.Rows[i]["ECNO"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(12, i + 1)].Text = dt.Rows[i]["PROJID"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(13, i + 1)].Text = dt.Rows[i]["ACNO_"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(14, i + 1)].Text = dt.Rows[i]["STARTVAL"].ToString();
                    sheet1.Range[myfunc.GetExcelPos(15, i + 1)].Text = dt.Rows[i]["CNDPROCCODE"].ToString();
                    // "工單報工統計(小時)","工作中心","工作中心報工統計(小時)"," 版本" 
                    sheet1.Range[myfunc.GetExcelPos(16, i + 1)].Text = dt.Rows[i]["ALS_HR_"].ToString();
                    //sheet1.Range[myfunc.GetExcelPos(17, i + 1)].Text = dt.Rows[i]["CURR_ARBPL_"].ToString(); //目前工作中心
                    sheet1.Range[myfunc.GetExcelPos(17, i + 1)].Text = Tmp_sub1_WC; //子視窗.工作中心                    
                    //工作中心報工統計(小時)
                    Tmp_Sql = "  SELECT round((sum(HOUR_WORK)+sum(HOUR_OT))/60,2)  WCHR  "
                                     + "  FROM   "
                                     + "  (  "
                                     + "    SELECT  JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT FROM  HOUR.ALS_HOUR_COMP@ALS_HOUR WHERE WC = " + myfunc.AA(Tmp_sub1_WC) + "   AND JCN = '0000' || " + myfunc.AA(dt.Rows[i]["SAPNO"].ToString())
                                     + "    union all   "
                                    + "     SELECT  JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT FROM HOUR.ALS_HOUR_COMP_HISTORY@ALS_HOUR WHERE WC = " + myfunc.AA(Tmp_sub1_WC) + "   AND JCN = '0000' || " + myfunc.AA(dt.Rows[i]["SAPNO"].ToString())
                                    + "   )   "
                                    + "  GROUP BY JCN,WC   ";
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    sheet1.Range[myfunc.GetExcelPos(18, i + 1)].Text = Tmp_Str; //工作中心報工統計(小時)                   
                    //版本
                    Tmp_Sql = "  SELECT  ED   "
                                   + "   FROM    AMM_EDLST  "
                                   + "   WHERE (AMMNO, ITM) in (select AMMNO, max(to_number(ITM)) from AMM_EDLST group by AMMNO )  "
                                   + "   AND AMMNO = " + myfunc.AA(dt.Rows[i]["AMMNO"].ToString());
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    sheet1.Range[myfunc.GetExcelPos(19, i + 1)].Text = Tmp_Str; //版本


                    // end of for 
                }  // end of   for (int i = 0; i < dt.Rows.Count; i++)
                sheet1.AllocatedRange.AutoFitColumns();
                wk.SaveToStream(stream, FileFormat.Version2007);
            } //end of try
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            finally
            {
                wk.Dispose();
            }

            //Tmp_Cnt = 6;
            Tmp_Str = "已匯出完成!!  (" + Tmp_Cnt.ToString() + "筆) <br>"
                            + "檔案名稱(" + Tmp_FName + ")";
            HttpCookie MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            HttpContext.Current.Response.Cookies.Add(MyCookie);
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fName, System.Text.Encoding.UTF8) + "\"");
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.BinaryWrite(stream.ToArray());
            HttpContext.Current.Response.End();
        }    // end of ExportdFile


2>*.js
//工作中心報工匯出
function WC_ALS_OutFile() {
    var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞
    np["FName"] = "V80204_工作中心報表匯出.xlsx";
    np["sub1_WC"] = Ext.getCmp("sub1_WC").getValue();
    console.log("np:", np);
    console.log("FName: ", np.FName);
    f_downloadFile('EX_DFile', '../api/V80204AAPI/WC_ALS_OutFile', np, 'POST', function () {
        var r = r_cookies('EX_DFile');
        mysuccessalert(r);
    });
};

2023年3月7日 星期二

V80204 – Detail *2 -[工作中心報工工時] [報工明細]頁 - 工時格式化 - WebService - Tab

 目的: V80204 –  Detail *2  -[工作中心報工工時] [報工明細]頁     -  .工時格式化:   小數2位

處理說明: 1>Master       -   selectionchange event
                                               Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
                                                         if (selections.length == 0) {
                                                                 return;
                                                              }
                                                     //1>>開啟  grid_D
                                                       var Tmp_store = Ext.getCmp('grid_D').store;
                                                       Tmp_store.getProxy().extraParams = np;
                                                      Tmp_store.getProxy().url = "../api/V80204API/getGridData_D";
                                                      Tmp_store.loadPage(1);

                                          2>格式化: 工時小數位2位     -    後端處理[HOUR_WK_][HOUR_OT_]
                                                         DataRow dr = ds.Tables["T1"].Rows[i];
                                                        Tmp_HOUR_WORK = double.Parse(dr["HOUR_WORK"].ToString());
                                                        Tmp_HOUR_OT = double.Parse(dr["HOUR_OT"].ToString());
                                                        dr["HOUR_WORK_"] = Tmp_HOUR_WORK.ToString("0.00");
                                                       dr["HOUR_OT_"] = Tmp_HOUR_OT.ToString("0.00");





1>*.js  - V80204
 //Detail    加入 [報工明細]頁
  var grid_D1 = Ext.create('grid_D', {
        grid_id: 'grid_D1',
        insert_btn_id: 'btn_add_D1',
        columns: J_columns_D1,
        title: '報工明細',
        store: Ext.create('gridstore_D', { model: J_gridmodel_D1 }),
        //form_items: J_formFields_D1,
        //form_id: 'myform_D1'
    });

    Ext.getCmp('tab_D').add(grid_D1); 

Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        //MD_DB.reloadDetailStore(selections[0]);
        console.log("selections.length: ", selections.length);
        if (selections.length == 0) {
            return;
        }
           
        var Tmp_rec = selections[0];
        console.log("Tmp_rec: ", Tmp_rec);
        var Tmp_SAPNO = Tmp_rec.data["SAPNO"];
        var Tmp_WC = Tmp_rec.data["CURR_ARBPL_"];        
        console.log("Tmp_SAPNO: ", Tmp_SAPNO);
        console.log("Tmp_WC: ", Tmp_WC);
        var np = {};
        np["SAPNO"] = Tmp_SAPNO;
        np["WC"] = Tmp_WC;        

        //2>開啟  grid_D
        var Tmp_store = Ext.getCmp('grid_D').store;
        Tmp_store.getProxy().extraParams = np;
        Tmp_store.getProxy().url = "../api/V80204API/getGridData_D";
        Tmp_store.loadPage(1);

        //2>開啟  grid_D1
        console.log("open grid_D1.. ");
        Tmp_store = Ext.getCmp('grid_D1').store;
        Tmp_store.getProxy().extraParams = np;
        Tmp_store.getProxy().url = "../api/V80204API/getGridData_D1";
        Tmp_store.loadPage(1);
    });



2> *.cs
//Detail - [工作中心報工工時]頁  - WebService 傳回資料  - WS_ALS_WS01
        [HttpPost]
        public dynamic getGridData_D()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            OracleCommand cmd = new OracleCommand();
            string Tmp_SAPNO = nvc["SAPNO"];
            string Tmp_WC = nvc["WC"];
            //string Tmp_SAPNO = "22569801";
            //string Tmp_WC = "";
            DataSet ds = myfunc.getWS_ALS_WS01(Tmp_SAPNO,Tmp_WC);

            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            double Tmp_MIN = 0;
            double Tmp_HOUR_ = 0;
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_", typeof(string)));
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                //施工人數/施工工時/施工步序                
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_MIN = double.Parse(dr["HOUR"].ToString());
                Tmp_HOUR_ = (Tmp_MIN / 60);
                dr["HOUR_"] = Tmp_HOUR_.ToString("0.00");                
            }  // end of  for (int i=0
            return ds;
        }


        //Detail1 - [報工明細]頁  - 工時.小數格式化
        [HttpPost]
        public dynamic getGridData_D1(bool par_paging = true)
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            OracleCommand cmd = new OracleCommand();
            string Tmp_SAPNO = nvc["SAPNO"];
            string Tmp_WC = nvc["WC"];            

            string Tmp_Sql = "SELECT RNK, JCN, ACT, WC, CAST(HOUR_WORK as decimal(3, 2)) HOUR_WORK,CAST(HOUR_OT as decimal(3, 2)) HOUR_OT, DATA_DATE, EMPLYNM "
                                       + "FROM   (SELECT  dense_rank()  over(order by  JCN,ACT) as RNK,"
                                                       + "    a.JCN,a.ACT,a.WC,round(a.HOUR_WORK/60,2) HOUR_WORK,  "
                                                       + "     round(a.HOUR_OT / 60, 2) HOUR_OT,a.DATA_DATE,b.EMPLYNM  "
                                                   + " FROM (   SELECT   JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT, DATA_DATE  "
                                                                     + "    FROM    HOUR.ALS_HOUR_COMP @ALS_HOUR  "
                                                                     + "    WHERE  JCN = LPAD(" + myfunc.AA(Tmp_SAPNO) + ", 12, 0)  "
                                                                     + "  union all   "
                                                                 + "   SELECT    JCN, ACT, WC, HOUR_WORK, work_ID, HOUR_OT, DATA_DATE  "
                                                                     + "   FROM     HOUR.ALS_HOUR_COMP_HISTORY @ALS_HOUR  "
                                                                     + "   WHERE   JCN = LPAD(" + myfunc.AA(Tmp_SAPNO) + ", 12, 0)  "
                                                                     + "    ORDER  BY   ACT, WC  "
                                                                     + " ) a, HR_EMPLYM b   "
                                                      + " WHERE   a.WORK_ID = b.EMPLYID(+)  "
                                                      + "  ORDER   BY  a.ACT  ";
            Tmp_Sql = Tmp_Sql + "   )   ";
            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =true            
            DataSet ds = getDataTable(cmd, countSql, par_paging);

            //將[工時] 轉換成小數2位
            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            double Tmp_HOUR_OT = 0;
            double Tmp_HOUR_WORK = 0;
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_WORK_", typeof(string)));
            ds.Tables["T1"].Columns.Add(new DataColumn("HOUR_OT_", typeof(string)));
            for (int i = 0; i < Tmp_Cnt; i++)
            {
                //施工人數/施工工時/施工步序                
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_HOUR_WORK = double.Parse(dr["HOUR_WORK"].ToString());
                Tmp_HOUR_OT = double.Parse(dr["HOUR_OT"].ToString());
                dr["HOUR_WORK_"] = Tmp_HOUR_WORK.ToString("0.00");
                dr["HOUR_OT_"] = Tmp_HOUR_OT.ToString("0.00");
            }  // end of  for (int i=0

            return ds;
        }




2023年2月16日 星期四

V120102 – Master[存檔]完成, 自動重新顯示 - Ext.getCmp('btn_Show').fireHandler(); - 新增模式

 目的: V120102 – Master[存檔]完成, 自動重新顯示

處理說明:  1>[存檔].onClick ,會先執行 [Template].[存檔].onClick , 再執行本畫面.[存檔].onClick

                   2>Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料


1>*.js  --> 只有目前在[新增]模式, 才重新顯示資料

var is_add=false;

Ext.getCmp('btn_add').on("click", function () {
 setFieldsCls('myform', ['TPCODE', 'DCODE', 'CODENOTE',], ['BITM', 'TPCODE_', 'MKER', 'MKER_', 'MKDT']);
        is_add = true;
    }
    );



//設定 [存檔]鈕, 會先執行 parent 的 onclick 再執行本程式 onclick -->重新開啟 datastore
Ext.getCmp('btn_save').on('click', function () {
       console.log(" 0 btn_save onclick - V120103.onclick");
       if ((is_add==true)) { //若為[新增]模式, 才重新顯示資料
           Ext.getCmp('btn_Show').fireHandler();
         }
         is_add = false;
});

Ext.getCmp('btn_cancel').on('click', function () {
is_add = false;
});

2>*.cs

[HttpPost]
        public void Insert()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //excuteInsert(nvc, DBTable);
            NameValueCollection nvc1 = new NameValueCollection();
            foreach (string k in nvc.Keys)
            {
                nvc1[k] = nvc[k];
            }            
               int Tmp_MAXITM = int.Parse(GET_MAX_BITM());
               nvc1["BITM"] = (Tmp_MAXITM + 1).ToString();
                nvc1["MKER"] = LoginUserModel.LoginUserId;
                nvc1["MKDT"] = DateTime.Now.ToString("yyyy/MM/dd");
            excuteInsert(nvc1, DBTable);
        }

        [HttpPost]
        public void Update()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            NameValueCollection nvc1 = new NameValueCollection();
            foreach (string k in nvc.Keys)
            {
                nvc1[k] = nvc[k];
            }
            nvc1["MKER"] = LoginUserModel.LoginUserId;
            nvc1["MKDT"] = DateTime.Now.ToString("yyyy/MM/dd");
            string[] arrCondition = getPK();            
            excuteUpdate(nvc1, DBTable, arrCondition);
        }