2025年11月3日 星期一

V20108F – [匯出(人力資源)] – Excel檔案(含■ , □)

 目的: V20108F – [匯出(人力資源)] – Excel檔案(, )

處理說明:1>取得子畫面的輸入參數
                      Tmp_MITM = Ext.getCmp('sub_MITM').getValue();
                      Tmp_WC = Ext.getCmp('sub_WC').getValue();
                      Tmp_PN = Ext.getCmp('sub_PN').getValue();
                      var np = {};
                       //var np = s_JSON('mySubFormF'); 
                      np["sub_MITM"] = Tmp_MITM;
                      np["sub_WC"] = Tmp_WC;
                     np["sub_PN"] = Tmp_PN;
                     var Tmp_url = "../../api/V20108FAPI/AMM_WKSTPD2XLS";
                     Ext.util.Cookies.set("Rtn_Msg", "");
                     Ext.getCmp('s_form').submit({
                        url: Tmp_url,
                        method: 'POST',
                        async: false,
                        standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true   
                        params: np,
                   });

                 2>*.cs  - 寫入  *.xls  
                     string Tmp_FName = "V20108_匯出_人力資源設定.xlsx";      //套表的檔案名稱 
                     string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";
                string Tmp_FName1 = "V20108_匯出_人力資源設定" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
                   Tmp_FName1 = documentPath + Tmp_FName1;
                   FileStream fs = null;
                  Workbook wk = null;
                   fs = myfunc.get_SS_FILES(Tmp_FName);
                  wk = new Workbook();
                  wk.LoadFromStream(fs);
                 Worksheet ws = wk.Worksheets[0];//獲取第一個工作表       

                  ws.Range[myfunc.GetExcelPos(2, 0)].Text = Tmp_PN;  //件號
                  ws.Range[myfunc.GetExcelPos(0, cur_row)].Text = "□";  //EMPID     



1>*.js
        Tmp_MITM = Ext.getCmp('sub_MITM').getValue();
        Tmp_WC = Ext.getCmp('sub_WC').getValue();
        Tmp_PN = Ext.getCmp('sub_PN').getValue();

        var np = {};
        //var np = s_JSON('mySubFormF'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞    , type=2, 所有欄位值 , 均傳至後端(不排除_  CaluField)
        np["sub_MITM"] = Tmp_MITM;
        np["sub_WC"] = Tmp_WC;
        np["sub_PN"] = Tmp_PN;
        var Tmp_url = "../../api/V20108FAPI/AMM_WKSTPD2XLS";
        //getUrlStr : 必需傳回字串( dt.JSON字串) , 非 ds
        //var rtn_Str = getUrlStr(Tmp_url, np, "匯出[工作編號-人力資源](AMM_WKSTPD)");
        Ext.util.Cookies.set("Rtn_Msg", "");
        Ext.getCmp('s_form').submit({
            url: Tmp_url,
            method: 'POST',
            async: false,
            standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true  
            params: np,
        });
        var mask = new Ext.LoadMask(Ext.getBody(), {
            msg: '資料處理中, 請稍待...'
        });
        mask.show();//使用 mask 需手動呼叫show() 方法下        
        //隔兩秒才顯示完成訊息
        var timer = setInterval(function () {
            var cookie_token = Ext.util.Cookies.get("Rtn_Msg");
            var Tmp_Str;
            if (!checkisnull(cookie_token)) {
                clearInterval(timer);
                mask.hide();
                timer = null;
                var rtn_Msg = r_cookies("Rtn_Msg");
                if (checkRtnOK(rtn_Msg)) {
                    Tmp_Str = "匯出[工作編號-人力資源]成功!!";
                    mysuccessalert(Tmp_Str);
                }
                else {
                    Tmp_Str = "匯出[工作編號-人力資源]失敗!!<br>"
                        + rtn_Msg;
                    mywarnalert(Tmp_Str);
                }                
                me.up("window").close();
                me.up("window").destroy();
            }
        }, 2000);  //等待 2000ms =1sec    
    };  // end of Ok_process() {  //批次新增       
       
2>*.cs
// AMM_WKSTPD2XLS() - 工作步序.人力資源(AMM_WKSTPD) 匯出 XLS
        //若成功,傳回 "[匯出]成功"
        //若失敗, 則傳回"錯誤: [匯出]失敗"
        [HttpPost]
        public dynamic AMM_WKSTPD2XLS()
        {
            //取得參數值
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_RtnMsg = "";
            string Tmp_MITM = nvc["sub_MITM"];
            string Tmp_WC = nvc["sub_WC"];
            string Tmp_PN = nvc["sub_PN"];


            HttpCookie MyCookie;
            int cur_row = 0;

            string Tmp_Str = "";
            string Tmp_FName = "V20108_匯出_人力資源設定.xlsx";      //套表的檔案名稱 
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";
            //string pathFName = documentPath + Tmp_FName;
            string Tmp_FName1 = "V20108_匯出_人力資源設定" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
            Tmp_FName1 = documentPath + Tmp_FName1;
            FileStream fs = null;
            Workbook wk = null;
            fs = myfunc.get_SS_FILES(Tmp_FName);
            wk = new Workbook();
            wk.LoadFromStream(fs);
            Worksheet ws = wk.Worksheets[0];//獲取第一個工作表            
            //件號/件號名稱
            DataTable Tmp_dt1 = new DataTable();
            DataTable Tmp_dt2 = new DataTable(); //機具財編/名稱
            DataTable Tmp_dt3 = new DataTable(); //支援工作中心.人員編號+人員姓名
            int Tmp_cnt1;
            int Tmp_cnt2;
            int Tmp_cnt3;
            MemoryStream mstream = new MemoryStream();
            string Tmp_CNM = "", Tmp_WITM = "", Tmp_WHR = "", Tmp_PQTY = "", Tmp_AQTY = "";
            string Tmp_EMPID = "", Tmp_EMPNM = "",Tmp_PV="";
            try
        {         
            string Tmp_Sql = " SELECT    A.MITM,A.WC,A.DEPID,A.PN,A.CNM,"
                                                      + "  B.WITM,B.WHR,B.PQTY,B.AQTY "
                                       + "  FROM    AMM_WKSTP A, AMM_WKSTPD B "
                                       + "  WHERE  A.MITM=B.MITM "
                                       + "  AND       A.MITM=" + myfunc.AA(Tmp_MITM)
                                       + " AND        A.WC=" + myfunc.AA(Tmp_WC)
                                       + "  AND        A.PN=" + myfunc.AA(Tmp_PN);
            Tmp_dt1 = myfunc.SqlOpen(Tmp_dt1, Tmp_Sql);
            Tmp_cnt1 = Tmp_dt1.Rows.Count;
                //進廠檢測
                ws.Range[myfunc.GetExcelPos(1, 3)].Text = "0";  //工時-進廠檢測
                ws.Range[myfunc.GetExcelPos(1, 5)].Text = "0"; //人數-熟手
                ws.Range[myfunc.GetExcelPos(3, 5)].Text = "0"; //人數-生手
                //拆檢
                ws.Range[myfunc.GetExcelPos(5, 3)].Text = "0";  //工時 - 拆檢
                ws.Range[myfunc.GetExcelPos(6, 5)].Text = "0"; //人數-熟手
                ws.Range[myfunc.GetExcelPos(9, 5)].Text = "0"; //人數-生手
                //組裝
                ws.Range[myfunc.GetExcelPos(12, 3)].Text = "0";  //工時 - 組裝
                ws.Range[myfunc.GetExcelPos(12, 5)].Text = "0"; //人數-熟手
                ws.Range[myfunc.GetExcelPos(15, 5)].Text = "0"; //人數-生手
                //完工測試
                ws.Range[myfunc.GetExcelPos(18, 3)].Text = "0";  //工時 - 完工測試
                ws.Range[myfunc.GetExcelPos(18, 5)].Text = "0"; //人數-熟手
                ws.Range[myfunc.GetExcelPos(21, 5)].Text = "0"; //人數-生手

                for (var i = 0; i < Tmp_cnt1; i++)
            {
                Tmp_CNM = Tmp_dt1.Rows[i]["CNM"].ToString();
                Tmp_WITM = Tmp_dt1.Rows[i]["WITM"].ToString();
                Tmp_WHR = Tmp_dt1.Rows[i]["WHR"].ToString();
                Tmp_PQTY = Tmp_dt1.Rows[i]["PQTY"].ToString();
                Tmp_AQTY = Tmp_dt1.Rows[i]["AQTY"].ToString();
                if (Tmp_WITM=="1")  //進廠檢測
                    {
                        ws.Range[myfunc.GetExcelPos(1, 3)].Text = Tmp_WHR;  //工時-進廠檢測
                        ws.Range[myfunc.GetExcelPos(1, 5)].Text = Tmp_PQTY; //人數-熟手
                        ws.Range[myfunc.GetExcelPos(3, 5)].Text = Tmp_AQTY; //人數-生手
                    }
                    if (Tmp_WITM == "2")  //拆檢
                    {
                        ws.Range[myfunc.GetExcelPos(5, 3)].Text = Tmp_WHR;  //工時 - 拆檢
                        ws.Range[myfunc.GetExcelPos(6, 5)].Text = Tmp_PQTY; //人數-熟手
                        ws.Range[myfunc.GetExcelPos(9, 5)].Text = Tmp_AQTY; //人數-生手
                    }
                    if (Tmp_WITM == "3")  //組裝
                    {
                        ws.Range[myfunc.GetExcelPos(12, 3)].Text = Tmp_WHR;  //工時 - 組裝
                        ws.Range[myfunc.GetExcelPos(12, 5)].Text = Tmp_PQTY; //人數-熟手
                        ws.Range[myfunc.GetExcelPos(15, 5)].Text = Tmp_AQTY; //人數-生手
                    }
                    if (Tmp_WITM == "4")  //完工測試
                    {
                        ws.Range[myfunc.GetExcelPos(18, 3)].Text = Tmp_WHR;  //工時 - 組裝
                        ws.Range[myfunc.GetExcelPos(18, 5)].Text = Tmp_PQTY; //人數-熟手
                        ws.Range[myfunc.GetExcelPos(21, 5)].Text = Tmp_AQTY; //人數-生手
                    }
                }
                string Tmp_WEANO="", Tmp_NM="";
                string Tmp_WEANO_Str="", Tmp_NM_Str="";

                Tmp_Sql = " SELECT   DISTINCT    WEANO,NM "
                               + "  FROM    AMM_DEVD  "
                               + "  WHERE  1=1 "
                               + "  AND        MITM=" + myfunc.AA(Tmp_MITM);
                Tmp_dt2 = myfunc.SqlOpen(Tmp_dt2, Tmp_Sql);
                Tmp_cnt2 = Tmp_dt2.Rows.Count;
                for (var i = 0; i < Tmp_cnt2; i++)
                {
                    Tmp_WEANO = Tmp_dt2.Rows[i]["WEANO"].ToString();
                    Tmp_NM = Tmp_dt2.Rows[i]["NM"].ToString();
                    Tmp_WEANO_Str = Tmp_WEANO_Str+Tmp_WEANO+"/";
                    Tmp_NM_Str = Tmp_NM_Str +Tmp_NM+"/";
                }
                ws.Range[myfunc.GetExcelPos(2, 0)].Text = Tmp_PN;  //件號
                ws.Range[myfunc.GetExcelPos(2, 1)].Text = Tmp_CNM;  //名稱
                ws.Range[myfunc.GetExcelPos(13, 0)].Text = Tmp_WEANO_Str;  //關鍵機具財編
                ws.Range[myfunc.GetExcelPos(13, 1)].Text = Tmp_NM_Str;//關鍵機具名稱
                Tmp_Sql = " SELECT   DISTINCT    EMPID,EMPNM "
                               + "  FROM    AMM_EMP  "
                               + "  WHERE  1=1 "
                               + "  AND        SUPWC=" + myfunc.AA(Tmp_WC)
                               +"   ORDER  BY EMPID ";
                Tmp_dt3 = myfunc.SqlOpen(Tmp_dt3, Tmp_Sql);
                Tmp_cnt3 = Tmp_dt3.Rows.Count;
                cur_row = 7;
                for (var i = 0; i < Tmp_cnt3; i++)
                {
                    Tmp_EMPID= Tmp_dt3.Rows[i]["EMPID"].ToString();
                    Tmp_EMPNM = Tmp_dt3.Rows[i]["EMPNM"].ToString();
                    ws.Range[myfunc.GetExcelPos(0, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(1, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(2, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(3, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(4, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(5, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(6, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(7, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(8, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(9, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(10, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(11, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(12, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(13, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(14, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(15, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(16, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(17, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(18, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(19, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(20, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    ws.Range[myfunc.GetExcelPos(21, cur_row)].Text = "□";  //EMPID
                    ws.Range[myfunc.GetExcelPos(22, cur_row)].Text = Tmp_EMPID;  //EMPID
                    ws.Range[myfunc.GetExcelPos(23, cur_row)].Text = Tmp_EMPNM;  //EMPNM
                    for (var j = 0; j <= 3; j++)
                    {
                        Tmp_Sql = " SELECT   DISTINCT    MITM,WITM,EMPID,EMPNM,PV"
                                   + "  FROM        AMM_EMPD  "
                                   + "  WHERE     1=1 "
                                   + "  AND        MITM=" + myfunc.AA(Tmp_MITM)
                                   + "  AND         EMPID=" + myfunc.AA(Tmp_EMPID)
                                   + "   AND        WITM=" + myfunc.AA((j+1).ToString());
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        Tmp_PV = myfunc.StrExtract(Tmp_Str, 5);
                        if (Tmp_PV == "2")  //熟手
                        {
                            ws.Range[myfunc.GetExcelPos(j*6+0, cur_row)].Text = "■";  //EMPID
                        }
                        if (Tmp_PV == "1") //生手
                        {
                            ws.Range[myfunc.GetExcelPos(j*6+3, cur_row)].Text = "■";  //EMPID
                        }
                    }  // end of  for (var j = 1; j <= 4; j++)
                    cur_row = cur_row + 1;
                }  // end of   for (var i = 0; i < Tmp_cnt3; i++)

                wk.SaveToStream(mstream, FileFormat.Version2007);
            wk.SaveToFile(Tmp_FName1, FileFormat.Version2007);

            string Tmp_Row = "5";
            Tmp_RtnMsg = "已匯出完成!!(" + Tmp_Row.ToString() + "筆)<br>"
                                     + "檔案名稱(" + Tmp_FName + ")";
            MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_RtnMsg));
            HttpContext.Current.Response.Cookies.Add(MyCookie);
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(Tmp_FName, System.Text.Encoding.UTF8) + "\"");
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            HttpContext.Current.Response.BinaryWrite(mstream.ToArray());
            HttpContext.Current.Response.End();
        }
        catch (Exception e)
            {
                Tmp_RtnMsg = myfunc.Get1ORA(e.Message);
                Tmp_RtnMsg = "錯誤:匯出(人力資源設定-AMM_WKSTPD)失敗!!<br>"
                                        + Tmp_RtnMsg;
                MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_RtnMsg));
                HttpContext.Current.Response.Cookies.Add(MyCookie);
            }
            finally
            {
                wk.Dispose();
                fs.Close();
                fs.Dispose();
            }


2025年10月28日 星期二

V20108GA:簡單子畫面- Grid – 含[V]勾選CheckBox & V20108G:簡單子畫面- Grid

 目的: V20108GA:簡單子畫面- Grid – 含[V]勾選CheckBox       
            V20108G:簡單子畫面- Grid     

處理說明:  1>V20108GA:簡單子畫面- Grid – 含[V]勾選CheckBox     - PK_LIST , ALL_LIST
                        Ext.define('CHK_PK_OBJ1', {
                                        PK_LIST: [], //儲存選項's的  PK欄位值
                                     ALL_LIST: [], //儲存選項's的 所有欄位值
                         });
                         var CHK_PK_OBJ1 = Ext.create('CHK_PK_OBJ1');

                  2>V20108GA:簡單子畫面- Grid - 加入[V]
                       var sub_Columns_V20108GA = [
                       {
                          //2023/07/14 microed , 將 V120201 改成 雅嵐版本 - 分頁勾選
                          header: "勾選",
                          dataIndex: "CHECK",
width: 40, xtype: 'checkcolumn', menuDisabled: true,
                         //rec : 目前資料欄位值
                         renderer: function (value, metadata, rec, rowIndex, colIndex, store) {
                         var Tmp_PK = rec.get('EMPLYID');
     var chkd = '';
  if (rec.get('CHECK') === true) {
if (CHK_PK_OBJ1.PK_LIST.indexOf(Tmp_PK) == -1) {
CHK_PK_OBJ1.PK_LIST.push(Tmp_PK);
CHK_PK_OBJ1.ALL_LIST.push(rec.data);
}
chkd = 'checked';
rec.set('CHECK', true);
}



1>V20108GA_JSON.js
var sub_Columns_V20108GA = [
    { header: "", xtype: "rownumberer", width: 40, 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 item = record.get('PROM_ID') + '&' + record.get('CR_NO') ;
console.log("renderer rec:", rec);
console.log("renderer rec.data:", rec.data);
var Tmp_PK = rec.get('EMPLYID');
var chkd = '';
if (rec.get('CHECK') === true) {
if (CHK_PK_OBJ1.PK_LIST.indexOf(Tmp_PK) == -1) {
CHK_PK_OBJ1.PK_LIST.push(Tmp_PK);
CHK_PK_OBJ1.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_OBJ1.PK_LIST = jQuery.grep(CHK_PK_OBJ1.PK_LIST, function (item) {
return item != Tmp_PK;
});
CHK_PK_OBJ1.ALL_LIST = jQuery.grep(CHK_PK_OBJ1.ALL_LIST, function (item) {
return item.EMPLYID != Tmp_PK;
});
console.log("unchecked  CHK_PK_OBJ1.PK_LIST:", CHK_PK_OBJ1.PK_LIST);
console.log("unchecked  CHK_PK_OBJ1.ALL_LIST:", CHK_PK_OBJ1.ALL_LIST);
}
else if (typeof rec.get('CHECK') === "undefined") { //往上或下一頁
if (CHK_PK_OBJ1.PK_LIST.indexOf(Tmp_PK) > -1) {
chkd = 'checked';
if (CHK_PK_OBJ1.PK_LIST.indexOf(Tmp_PK) == -1) {
CHK_PK_OBJ1.PK_LIST.push(Tmp_PK);
CHK_PK_OBJ1.ALL_LIST.push(rec.data);
console.log("undefined checked CHK_PK_OBJ1.PK_LIST:", CHK_PK_OBJ1.PK_LIST);
console.log("undefined checked CHK_PK_OBJ1.ALL_LIST:", CHK_PK_OBJ1.ALL_LIST);
}
rec.set('CHECK', true);
} else {
rec.set('CHECK', false);
}
}
var cbx = "<input  type='checkbox'  "
+ chkd + " > ";
return cbx;
},
},
    { header: "部門編號", dataIndex: "DEPID", width: 100, sortable: false, TMType: "string" },
    { header: "員工編號", dataIndex: "EMPLYID", width: 100, sortable: false, TMType: "string" },
    { header: "員工編號", dataIndex: "EMPLYNM", width: 100, sortable: false, TMType: "string" },
];


var Tmp_DataAry = [];
    var isOk = true;
    var np = {};
    var Tmp_Str = "";
    for (let i = 0; i <= CHK_PK_OBJ1.PK_LIST.length - 1; i++) {
        cur_rec = CHK_PK_OBJ1.ALL_LIST[i];
        Tmp_DataAry.push(cur_rec);
    } //  end of for (let i=0,)                
    // 將目前子畫面的資料(Table)轉成 JSON字串
    var Tmp_DataStr = JSON.stringify(Tmp_DataAry);
   var np = {};
    np = {
        DataStr: Tmp_DataStr,       
    };
    var Tmp_url = '../../api/V20201GAAPI/UPDATE_AMM_SCHEDULE';
    var Tmp_RtnStr = getUrlStr(Tmp_url, np, "取消待完工- AMM_SCHEDULE");
    if (checkRtnOK(Tmp_RtnStr)) {
        mysuccessalert(Tmp_RtnStr);
        Ext.getCmp("btn_sub_Show").fireHandler();        
        return;
    }
    else
        mywarnalert(Tmp_RtnStr);




2>*.cs
public dynamic UPDATE_AMM_SCHEDULE()
        {
            //取得參數值
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;

            string Tmp_DataStr = nvc["DataStr"];            
            string Tmp_RtnMsg = "";

            string n = funId + "_UPDATE_AMM_SCHEDULE";
            HttpCookie MyCookie;
            try
            {
                string Tmp_ITM;
                string Tmp_AMMNO, Tmp_WC;
                string Tmp_WBS, Tmp_TYPEAF;
                string Tmp_PN, Tmp_PNNAME, Tmp_SERNO;
                string Tmp_SDT, Tmp_PROJDT, Tmp_CSDTAF, Tmp_EDT;
                string Tmp_CONTAF, Tmp_PROJID, Tmp_SAPNO, Tmp_FIXNO;
                string Tmp_GONOAF, Tmp_EIAC, Tmp_ECNO, Tmp_CNDPROCCODE;
                string Tmp_RT, Tmp_WET, Tmp_RESCH, Tmp_PROCWC, Tmp_SCHER;
                string Tmp_DT, Tmp_STAT, Tmp_PECT, Tmp_FAVITEM;

                DataTable dt_np = myfunc.JSON2dt(Tmp_DataStr);
                for (var i = 0; i < dt_np.Rows.Count; i++)
                {
                    Tmp_AMMNO = dt_np.Rows[i]["AMMNO"].ToString();
                    Tmp_WC = dt_np.Rows[i]["WC"].ToString();
                    Tmp_WBS=dt_np.Rows[i]["WBS"].ToString(); 
                    Tmp_TYPEAF = dt_np.Rows[i]["TYPEAF"].ToString();


2025年10月8日 星期三

V20108E – [匯入人員清單] - SelectFile(Ok_process) ; - 挑選檔案 - XLS2XLS - 傳回匯入結果XLS,並顯示執行訊息 -New

 目的: V20108E – 工作程序資源設定 – [匯入人員清單] - SelectFile(Ok_process) ;  
           - 挑選檔案  - XLS2XLS - 傳回匯入結果XLS, 並顯示執行結果訊息
           - 傳送檔案至前端

處理說明: 1>*.js 挑選檔案子畫面 - SelectFile(Ok_process);  -Ok_process 挑選後執行func
                        1>>SelectFile [挑選檔案子畫面]確定後,會將檔案傳送至後端
                        2>>讀取檔案名稱(*.js)  
                               var Tmp_FileObj = Ext.getCmp('FName');
                               var Tmp_FName = Ext.getDom(Tmp_FileObj.inputId).value;
                 2>*.cs 檔案傳至後端  - Request.Files[0]   
                        Stream file_Strm = Request.Files[0].InputStream;
                        wk.LoadFromStream(file_Strm);
                        file_Name = Path.GetFileName(Request.Files[0].FileName);
                3>*.cs  wk 存至檔案  & Stream 
                    wk = new Workbook();
                    MemoryStream mstream = new MemoryStream();
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 實實路徑  
                    string FileName = "V20108_匯入人員清單_匯入結果說明.xlsx";
                    string FileName1 = documentPath + FileName;
                    wk.SaveToStream(mstream, FileFormat.Version2007);
                    wk.SaveToFile(FileName1, FileFormat.Version2007);
              4>  傳送結果檔案至前端
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName, System.Text.Encoding.UTF8) + "\"");
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.BinaryWrite(mstream.ToArray()); 
              5> 顯示執行結果 - 透過 Cookie
                   me.up("form").submit({
                         url: Tmp_url_Str,
                        method: 'POST',
                         headers: { 'Content-type': 'multipart/form-data' },
                         params: np,        
                 });
                 //顯示結果訊息..
                var mask = new Ext.LoadMask(Ext.getBody(), {
                      msg: '處理中,請稍待...'
                 });
                 mask.show();//使用 mask 需手動呼叫show() 方法下
                //若要傳送檔案到前端, 必需用 Cookie 判斷後端是否已完成
               //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
                var timer = setInterval(function () {
                var r = r_cookies('Rtn_Msg');
                 if (!checkisnull(r)) {
                     mysuccessalert(r);
                     clearInterval(timer);
                      mask.hide();
                      timer = null;
                     //將子畫面關閉- SelectFile
                     Ext.getCmp("SelectForm_cancelbtn").fireHandler();          
        }
    }, 1000);  //1000ms = 1sec  

        //*.cs - 加入 Cookie 訊息
            Tmp_RtnMsg = "人員清單匯入成功!!";                        
            MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_RtnMsg));
            HttpContext.Current.Response.Cookies.Add(MyCookie);            
            HttpContext.Current.Response.End();







1>*.js
var pub_MAIN_SUB1_Str = "";
function CALL_V20108E_OK() {
        var Tmp_MAIN_SUB1;
        Tmp_MAIN_SUB1 = Ext.getCmp('sub_MAIN_SUB1').getValue();
        pub_MAIN_SUB1_Str = Tmp_MAIN_SUB1["sub_MAIN_SUB1"];  //EMP/DEV
        console.log("pub_MAIN_SUB1_Str:", pub_MAIN_SUB1_Str);
        var Tmp_FName = "";
        SelectFile(Ok_process);
        console.log("Tmp_FName:", Tmp_FName);        
};

//[選擇檔案]子畫面. [確認匯入]鈕 , 處理
function Ok_process(me, e, eOpts) {
    //取得 [檔案上傳].檔名
    var Tmp_FileObj = Ext.getCmp('FName');
    var Tmp_FName = Ext.getDom(Tmp_FileObj.inputId).value;
    console.log("FName Obj:", Tmp_FileObj);
    var Tmp_Str = "";
    var Tmp_cur_recs = Ext.getCmp("grid_M").getSelectionModel().getSelection();
    var Tmp_cur_rec = Tmp_cur_recs[0];
    var Tmp_cur_MITM = Tmp_cur_rec.data["MITM"];
    var Tmp_cur_WITM = Tmp_cur_rec.data["WITM"];    
    console.log("Tmp_cur_MITM:", Tmp_cur_MITM);

    var np = {};
    np["MAIN_SUB"] = pub_MAIN_SUB1_Str;
    np["cur_MITM"] = Tmp_cur_MITM;
    np["cur_WITM"] = Tmp_cur_WITM;
    np["FName"] = Tmp_FName;
    
    console.log("np.FName: ", np.FName);
    console.log("np.MAIN_SUB: ", np.MAIN_SUB);
    if (pub_MAIN_SUB1_Str="EMP")
        Tmp_url_Str = '../api/V20108EAPI/uploadFileToDB_EMP';
    else
        Tmp_url_Str = '../api/V20108EAPI/uploadFileToDB_DEV';
    me.up("form").submit({
        //standardSubmit: false,    //default:false
        url: Tmp_url_Str,
        method: 'POST',
        headers: { 'Content-type': 'multipart/form-data' },
        params: np,        
    });

    //顯示結果訊息..
    var mask = new Ext.LoadMask(Ext.getBody(), {
        msg: '處理中,請稍待...'
    });

    mask.show();//使用 mask 需手動呼叫show() 方法下
    //若要傳送檔案到前端, 必需用 Cookie 判斷後端是否已完成
    //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
    var timer = setInterval(function () {

        var r = r_cookies('Rtn_Msg');
        //console.log("r_cookies=", r);
        if (!checkisnull(r)) {
            mysuccessalert(r);
            clearInterval(timer);
            mask.hide();
            timer = null;
            //將視窗關閉
            Ext.getCmp("SelectForm_cancelbtn").fireHandler();
            //this.up("window").close();
            //this.up("window").destroy();
        }
    }, 1000);  //1000ms = 1sec
};  // end of Ok_process() {  //批次新增


2>*.cs
 public void uploadFileToDB_EMP()
        {

            HttpContext c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_MAIN_SUB = nvc["MAIN_SUB"];
            string Tmp_MITM = nvc["cur_MITM"];
            string Tmp_WITM = nvc["cur_WITM"];            
            string FName = nvc["FName"];
            Workbook wk = null;
            MemoryStream mstream = new MemoryStream();

            HttpRequest Request = HttpContext.Current.Request;
            var response = this.Request.CreateResponse();
            string file_Name = FName;
            string FILEDT = DateTime.Now.ToString("yyyy/MM/dd");
            string Tmp_RtnMsg = "";
            string Tmp_RtnMsg1 = "";
            string Tmp_Sql = "", Tmp_Str = "";
            bool Tmp_isOk;
            int Tmp_cnt = 0;

          string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 實實路徑    
            string FileName = "V20108_匯入人員清單_匯入結果說明.xlsx";
            string FileName1 = documentPath + FileName;

            List<string> SQLStringList_A = new List<string>();
            HttpCookie MyCookie;  //將訊息傳至前端

            string fileType = Request.Files[0].ContentType;
            Stream file_Strm = Request.Files[0].InputStream;
            file_Name = Path.GetFileName(Request.Files[0].FileName);
            int fileSize = Request.Files[0].ContentLength;
                byte[] fileRcrd = new byte[fileSize];
                //更新資料庫欄位值                
                int Tmp_curpos = 0;
                try
                {

                    wk = new Workbook();
                    wk.LoadFromStream(file_Strm);
                    Worksheet sheet1 = wk.Worksheets[0];//獲取第一個工作表
                    //新增[匯入結果說明]欄位 - 於最後一欄位
                    sheet1.Range[myfunc.GetExcelPos(5, 0)].Value = "匯入結果說明";
                    Tmp_WC = sheet1.Range[myfunc.GetExcelPos(0, 0)].Value;
                     //若[欄位標題 ]有錯誤時,傳回錯誤訊息
                     MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_RtnMsg));
                     HttpContext.Current.Response.Cookies.Add(MyCookie);                    
                     HttpContext.Current.ApplicationInstance.CompleteRequest();
                         :
              }
                    wk.SaveToStream(mstream, FileFormat.Version2007);
                    wk.SaveToFile(FileName1, FileFormat.Version2007);
 HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName, System.Text.Encoding.UTF8) + "\"");
                    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    HttpContext.Current.Response.BinaryWrite(mstream.ToArray());
                    if (Tmp_isOk == false)
                    {
                        //匯入檔案失敗
                        Tmp_Str = "人員清單匯入失敗<br>"
                                        + "(" + FName + ")<br>";
                        MyCookie = new HttpCookie("Rtn_Msg", HttpUtility.UrlEncode(Tmp_Str));
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                        return;
                    }
                   

Tmp_RtnMsg = Tmp_RtnMsg.Replace("<br>", "\r\n");

2025年10月2日 星期四

V20108 – 工作程序資源設定 – Grid 上下移 - 上/下移 - 多Grid

 目的: V20108 – 工作程序資源設定 – Grid 上下移

處理說明: 1>par_dest_grid.store.add(Tmp_Add_rec); par_source_grid.store.remove(cur_rec);   
                        var cur_recs = par_source_grid.getSelectionModel().getSelection();
                        var cur_rec=cur_recs[0];
                        var Tmp_EMPID = nulltoStr(cur_rec.data['EMPID']).toString();
                        var Tmp_EMPNM = nulltoStr(cur_rec.data['EMPNM']).toString();
                        var Tmp_Add_rec = {
                              EMPID: Tmp_EMPID,
                              EMPNM: Tmp_EMPNM,
                        }
                         par_dest_grid.store.add(Tmp_Add_rec);
                         par_source_grid.store.remove(cur_rec);




1>*.js

//移動員工
    function MoveEMP(par_source_grid, par_dest_grid) {
        var cur_recs = par_source_grid.getSelectionModel().getSelection();
        if (cur_recs.length == 0) {
            myalert("請先選擇要移動的資料!!");
            return;
        }
            
        var cur_rec = cur_recs[0];
        var Tmp_EMPID = nulltoStr(cur_rec.data['EMPID']).toString();
        var Tmp_EMPNM = nulltoStr(cur_rec.data['EMPNM']).toString();
        var Tmp_Add_rec = {
            EMPID: Tmp_EMPID,
            EMPNM: Tmp_EMPNM,
        }
        //console.log("Ext.getCmp(grid_D11):", Ext.getCmp("grid_D11"));
        //若目前資料不存在,則加入 grid_D11
        if (par_dest_grid.store.find("EMPID", Tmp_EMPID) == -1) {
            par_dest_grid.store.add(Tmp_Add_rec);
            par_source_grid.store.remove(cur_rec);
        }
    }


V20108 – 人員挑選 – 按鈕水平置中(pack=’center’)

 目的: V20108 – 人員挑選 按鈕水平置中(pack=’center’)

處理說明:  1>按鈕於 Panel 的水平置中, pack='center'
                        cmp_Panel_D121.layout = { type: 'hbox', align: 'stretch', pack: 'center' };  // 水平置中
                        var cmp_btn_D1211 = get_cmp_btn1("      ", "btn_D1211", 10, "icon-up");
                        var cmp_btn_D1212 = get_cmp_btn1("      ", "btn_D1212", 10, "icon-down");
                        cmp_Panel_D121.items.push(cmp_btn_D1211, cmp_btn_D1212);  //熟手.上/下移按鈕


1>*.js
  //2025/09/24 隱藏原本 Detail  & 加入 [人員Panel) *3    
    var cmp_Panel_D = get_cmp_panel1(300, 100, "Panel_D");
    cmp_Panel_D.title = "Panel_D";
    var cmp_tabPanel_D1 = get_cmp_tabpanel1("人員挑選");    
    var cmp_tabPanel_D2 = get_cmp_tabpanel1("裝備挑選");    
    cmp_Panel_D.layout = { type: 'hbox', align: 'stretch' };
    cmp_Panel_D.items.push(cmp_tabPanel_D1, cmp_tabPanel_D2);
    cmp_tabPanel_D1.id = "tabPanel_D1";
    cmp_tabPanel_D2.id = "tabPanel_D2";

    //畫面版面 - 人員挑選
    var cmp_Panel_D1 = get_cmp_panel1(300, 100, "Panel_D1"); //人員挑選
    cmp_Panel_D1.layout = { type: 'vbox', align: 'stretch' };
    var cmp_Panel_D11 = get_cmp_panel1(300, 100, "Panel_D11");  //人員基本檔(AMM_EMP)    
    var cmp_Panel_D12 = get_cmp_panel1(300, 30, "Panel_D12");    //[往上],[往下]按鈕
    var cmp_Panel_D13 = get_cmp_panel1(300, 100, "Panel_D13");  //已挑選人員[熟手], [生手]人員
    cmp_Panel_D11.id = 'Panel_D11';
    cmp_Panel_D11.layout = 'fit';
    cmp_Panel_D121 = get_cmp_panel1(300, 30, "Panel_D121");
    cmp_Panel_D122 = get_cmp_panel1(300, 30, "Panel_D122");
    cmp_tabPanel_D1.items.push(cmp_Panel_D1);
    cmp_Panel_D1.items.push(cmp_Panel_D11, cmp_Panel_D12, cmp_Panel_D13);  
    cmp_Panel_D12.items.push(cmp_Panel_D121, cmp_Panel_D122);  //[熟手]人員.上/下移, [生手]人員.上/下移

    //往上往下按鈕
    //var cmp_btn_move_left=get_cmp_btn1("往右","btn_move1","","'icon-right'")
    cmp_Panel_D121.layout = { type: 'hbox', align: 'stretch', pack: 'center' };  // 水平置中
    var cmp_btn_D1211 = get_cmp_btn1("      ", "btn_D1211", 10, "icon-up");
    var cmp_btn_D1212 = get_cmp_btn1("      ", "btn_D1212", 10, "icon-down");
    cmp_Panel_D121.items.push(cmp_btn_D1211, cmp_btn_D1212);  //熟手.上/下移按鈕
    cmp_Panel_D122.layout = { type: 'hbox', align: 'stretch', pack: 'center' };  // 水平置中
    var cmp_btn_D1221 = get_cmp_btn1("      ", "btn_D1221", 10, "icon-up");
    var cmp_btn_D1222 = get_cmp_btn1("      ", "btn_D1222", 10, "icon-down");
    cmp_Panel_D122.items.push(cmp_btn_D1221, cmp_btn_D1222); //生手.上/下移按鈕


    //cmp_tabPanel_D1.items[0].items.push(cmp_Panel_D11, cmp_Panel_D12, cmp_Panel_D13);
    console.log("cmp_tabPanel_D1:", cmp_tabPanel_D1);
    console.log("cmp_tabPanel_D1.items[0]:", cmp_tabPanel_D1.items[0]);
    //cmp_tabPanel_D1.items[0].tabBar.height = 0;
    //cmp_tabPanel_D1.items[0].tabBar.hidden = true;
    console.log("Ext.getCmp(tab_D):", Ext.getCmp("tab_D"));
    console.log("Ext.getCmp(tabPanel_D1)_0:", Ext.getCmp("tabPanel_D1"));
    //Ext.getCmp("tabPanel_D1").setTabVisible(0, false);
    //Ext.getCmp("tabPanel_D2").setTabVisible(1, false);

    
    cmp_Panel_D.border = 1;
    cmp_Panel_D11.border = 1;
    cmp_Panel_D12.border = 1;
    cmp_Panel_D13.border = 1;
    //Ext.getCmp("tab_D").tabBar = { height: 0, hidden: true }; // 可選,直接隱藏 tabBar    
    Ext.getCmp("tab_D").tabBar.height = 0;
    Ext.getCmp("tab_D").tabBar.hidden = true;
    Ext.getCmp("tab_D").add(cmp_Panel_D);
    
    //Ext.getCmp("tab_D").hide();
    //2025/09/25 原本Detail 的Tab 設為隱藏
    Ext.getCmp("tab_D").setTabVisible(0, false);
    Ext.getCmp("tab_D").setTabVisible(1, false);
    Ext.getCmp("tab_D").setActiveTab(2);

2025年10月1日 星期三

V20108 – 工作程序資源設定 – 隱藏 tabBar

 目的: V20108 – 工作程序資源設定 隱藏 tabBar

處理說明: 1>Template tab_D 才有 setTabVisible 函式, 一般 tabTable 無 setTabVisible 函式
                       Ext.getCmp("tab_D").setTabVisible(0, false);
                       Ext.getCmp("tab_D").setTabVisible(1, false);
                       Ext.getCmp("tab_D").setActiveTab(1);
                  2>一般 tabPanel ,必需用.getTabBar().getComponent(0).hide();
                       Ext.getCmp("tabPanel_D1").getTabBar().getComponent(0).hide(); // tabbar 不顯示
                       Ext.getCmp("tabPanel_D2").getTabBar().getComponent(0).hide();


1>*.js
//Template tab_D 才有 setTabVisible 函式, 一般 tabTable setTabVisible 函式
          Ext.getCmp("tab_D").setTabVisible(0, false);       
          Ext.getCmp("tab_D").setTabVisible(1, false);
          Ext.getCmp("tab_D").setActiveTab(1);
       //一般 tabPanel ,必需用.getTabBar().getComponent(0).hide();
         Ext.getCmp("tabPanel_D1").getTabBar().getComponent(0).hide();  // tabbar 不顯示
         Ext.getCmp("tabPanel_D2").getTabBar().getComponent(0).hide();