顯示具有 NEXT 標籤的文章。 顯示所有文章
顯示具有 NEXT 標籤的文章。 顯示所有文章

2022年10月12日 星期三

V20107 - Master-Detail-Detail - MDD編輯 - 取得store 欄位值 - 取得 MAX+1

 目的: V20107 - Master-Detail-Detail(MDD)  - Detail欄位新增

處理說明: 0>Master & Detail  Table設定
                       var MD_DB = Ext.create('MD_DB', {
                                                                   apiName: 'V20107',
                                                                   table_M: 'AMM_WKSTP',
                                                                   aKey_M: ['MITM'],
                                                                   table_D: ['AMM_WKSTPD', 'AMM_WKSTPDD'],  
                                                                    });
                 --> table_D 的順序需和 tab_D的資料順序相配合
                 1>開啟 Detail &  Detail-Detail
     //開啟 Detail
           Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
                      MD_DB.reloadDetailStore(selections[0]);        
           }    
      //開啟 Detail-Detail
          Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {
              MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']); 
          }
 
                  2> Detail 編輯 - Ext.getCmp('grid_D').beforeShowForm() 設定 PK 欄位值 
                       取得 Master.PK  &  Detail 新增 - 最大值+1  
                  3> Detail 設定 PK
                           Ext.getCmp('grid_D').beforeShowForm = function () {
                                     設定 Detail.MAX(WITM)+1
                           }
                      取得 store 欄位值 :  Tmp_WITM=Tmp_d_store.data.items[i].data["WITM"] ; 

                4>Detail-Detail 編輯 - Ext.getCmp('grid_D1').beforeShowForm() 設定 PK 欄位值 
                       取得 Master.PK  &  Detail.PK & Detail.Detail 新增 - 最大值+1  

                5>設定Detail-Detail編輯欄位 ReadOnly
    Ext.getCmp('grid_D').setFieldsCls = function () {
        setFieldsCls('myform_D', ['d_MITM', 'd_WITM',], ['d_MITM',],['d_MITM','d_WITM','d_STP','d_DWC','d_AQTY','d_PQTY','d_WHR','d_WDT','d_ENER','d_ENDT']);
    };

Ext.getCmp('grid_D1').setFieldsCls = function() {
        setFieldsCls('myform_D1', ['d1_MITM', 'd1_WITM', 'd1_DDITM',], ['d1_MITM', 'd1_WITM', 'd1_DDITM',],['d1_MITM','d1_WITM','d1_DDITM','d1_STP','d1_WC','d1_NOTE','d1_CLASS','d1_WHR']);
};


 


0> *.js  Master-Detail-Detail 的 Table 設定
 var MD_DB = Ext.create('MD_DB', {
        apiName: 'V20107',
        table_M: 'AMM_WKSTP',
        aKey_M: ['MITM'],
        table_D: ['AMM_WKSTPD', 'AMM_WKSTPDD'],                
      });

1> *.js  Detail  &  Detail-Detail 的資料顯示
      grid_D = Ext.getCmp('grid_D');
      grid_D.setTitle("工作步序說明");

      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); 
        //開啟 Detail 
        Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
           MD_DB.reloadDetailStore(selections[0]);        
        });

       //開啟 Detail-Detail  
      Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {
  MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']);
    });




1>*.js - Detail 新增 - 畫面 PK 處理
 //Detail 存檔處理
    //存檔時,myform_D 自動設定欄位值 : PK,
    var D_buttonModel = Ext.create('G_D_buttonModel'); 

    var Tmp_grid_D = Ext.getCmp('grid_D');
    console.log(" Tmp_grid_D: ", Tmp_grid_D);
    if (!checkisnull(Tmp_grid_D)) {    
        console.log(" 2 Ext.getCmp(grid_D).beforeShowForm ");
        Ext.getCmp('grid_D').beforeShowForm = function () {
            //要判斷 buttonModel 的編輯模式時, 才即時去抓 modelType
            var D_modelType = D_buttonModel.getModelType();
            console.log("beforeShowForm D_modelType=", D_modelType);
            //若非[新增]模式,則不設定欄位值
            if (!(D_modelType == 1))
                return true;

            //設定 Master.MITM欄位值
            var Tmp_MITM = Ext.getCmp('MITM').getValue();
            Ext.getCmp('d_MITM').setValue(Tmp_MITM);

            console.log("1 MITM:", Tmp_MITM);
            var Tmp_WITM = get_NEXT_WITM(Tmp_MITM);
            Ext.getCmp('d_WITM').setValue(Tmp_WITM);

            return true;
        }
    }
    //取得   WITM 的下一編號 , 傳入 WITM
    // Master.[修改],  Detail 新增多筆時, 並未寫回資料庫 , 所以 MAX(WITM)不可取資料庫
    //直接由 前端取 MAX(WITM)

    function get_NEXT_WITM(par_MITM) {        
        var Tmp_MAX_WITM = 0;
        var Tmp_NEXT_WITM = 0;
        var Tmp_d_store = Ext.getCmp("grid_D").store;
        console.log("Tmp_d_store:", Tmp_d_store);
        console.log("Tmp_d_store.getCount():", Tmp_d_store.getCount());
        var Tmp_cur_WITM=0;
        for (let i = 0; i < Tmp_d_store.getCount(); i++) {
            console.log("Tmp_d_store.data.items[i].data[WITM]:", Tmp_d_store.data.items[i].data["WITM"]);
            Tmp_cur_WITM = Number(Tmp_d_store.data.items[i].data["WITM"]);
            console.log("Tmp_cur_WITM:", Tmp_cur_WITM);
            if (Tmp_cur_WITM > Tmp_MAX_WITM)
                Tmp_MAX_WITM = Tmp_cur_WITM;

            console.log("Tmp_MAX_WITM:", Tmp_MAX_WITM);
        }  // end of for 
        Tmp_NEXT_WITM = Tmp_MAX_WITM + 1;        
        return Tmp_NEXT_WITM;      

    }  // end of  function string  get_NEXT_WITM(Tmp_MITM)    


2>*.cs , Detail 寫入資料庫
[HttpPost]
        public void Insert_D()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //excuteInsert(nvc, "AMM_WKSTPD");
            NameValueCollection nvc1 = new NameValueCollection();
            foreach (string k in nvc.Keys)
            {
                nvc1[k] = nvc[k];
            }            
            nvc1["ENER"] = LoginUserModel.LoginUserId;
            nvc1["ENDT"] = DateTime.Now.ToString("yyyy/MM/dd"); 
            excuteInsert(nvc1, "AMM_WKSTPD");
        }


3>*.js  編輯畫面, 日期欄位值 - 不含時間


2022年9月20日 星期二

V20301 - [挎貝]鈕, 複製目前的資料, 並設定PK欄位值 - PK取得最大值+1

 目的:  [挎貝]鈕, 複製目前的資料, 並設定PK欄位值

處理說明:  1>將 Template 的[挎貝]鈕, 設為 [顯示], 文字改為 [複製]

                   2> PK 取得最大值+1 







1>*.js

      Ext.getCmp('btn_copy').setVisible(true);
      Ext.getCmp('btn_copy').setText("複製");

      //按[複製]鈕時, 會先執行 parent class 的處理,再呼叫目前 class 的處理 
      //所以  on('click' , 時, 編輯畫面 FMNO欄位已存在
     Ext.getCmp("btn_copy").on('click', function () {
        var Tmp_NEXT_FMNO = get_NEXT_FMNO();
        console.log("Tmp_NEXT_FMNO:", Tmp_NEXT_FMNO);
        Ext.getCmp("FMNO").setValue(Tmp_NEXT_FMNO);
    }
    );

    //取得   FMNO 的下一編號
    function get_NEXT_FMNO() {
        var isOk = true;
        var Tmp_NEXT_FMNO = "";        
        var np = {};
        Ext.Ajax.request({
            method: "POST",
            url: '../../api/V20301API/get_NEXT_FMNO',
            params: np,
            async: false,
            success: function (response, opts) {
                var Tmp_Obj = Ext.decode(response.responseText);
                //console.log("Tmp_Obj[success]=", Tmp_Obj["success"]);
                if (Tmp_Obj["success"]) {
                    Tmp_NEXT_FMNO = Tmp_Obj['NEXT_FMNO'].toString();
                    if (Tmp_NEXT_FMNO.length == 0)
                        Tmp_NEXT_FMNO = '001';
                    console.log("Tmp_NEXT_FMNO=", Tmp_NEXT_FMNO);
                    return Tmp_NEXT_FMNO;
                    //mywarnalert(Tmp_Str);
                    //console.log(" 1 success return false");                    
                }
                else {
                    mywarnalert("取得下一系統件單號(FMNO)失敗 !!");
                }
            }, // end of  success 
            failure: function (response, opts) {
                isOk = false;
            }
        });  // end of Ext.Ajax               
        return Tmp_NEXT_FMNO;
    }  // end of  function string  get_NEXT_FMNO(Tmp_FMNO)


2022年8月30日 星期二

V20306 - RadioGroup 存回資料庫 - 欄位值取得MAX+1

 目的: 編輯畫面 RadioGroup 欄位存回資料庫, PK=MAX(PK)+1

處理說明:  1> PK=MAX(PK)+1
  1>>*.js   np["ASPNO"] = "ASP" + DatetoStr(now, "Ymd");
  2>>*.cs   Tmp_NEXT_ASPNO = Tmp_ASPNO + (int.Parse(Tmp_MAX_ASPNO.Substring(11, 3))+1).ToString("000");
  
                 2> RadioGroup欄位值
1>>每一Radio.id均不同, 傳回後端每一Radio均有一值(true/false)
2>>RadioGroup欄位值由 np["STAT"]=Ext.getCmp("name").getValue(); 取得送至後端



1>*.js  - 設定  PK=MAX(PK)+1

var buttonModel = Ext.create('G_buttonModel');        

//存檔時,自動設定欄位值 : PK,
Ext.getCmp('btn_save').setFormValue = function () {
       //1>取得 PK= MAX(PK)+1 , 新增時,才設定 PK 欄位值, 編輯時 , 不設定欄位值
        var modelType = buttonModel.getModelType();
         if (!(modelType == 1))
             return true;
        var Tmp_NEXT_ASPNO = get_NEXT_ASPNO();
        Ext.getCmp("ASPNO").setValue(Tmp_NEXT_ASPNO);

        //2>設定 RadioGroup 欄位值 , 由 S_DB.add_np 設定特別的欄位值
        S_DB.add_np = {};
        S_DB.add_np["WTLV"] = Ext.getCmp("WTLV").getValue();
        S_DB.add_np["ITPR"] = Ext.getCmp("ITPR").getValue();
return true;
}

var np=s_JSON('myform');
--> Template 先執行 setFormValue() , 再執行  np 取欄位值,
      所以  setFormValue() 的欄位值, 會存入 np 參數



2>*.cs

1>>取得 MAX(PK)+1
[HttpPost]
        public HttpResponseMessage GET_NEXT_ASPNO()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            var response = this.Request.CreateResponse();
            string Tmp_ASPNO = nvc["ASPNO"];
            string Tmp_Str = "";            

            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
            OracleCommand cmd = new OracleCommand();
            OracleDataReader reader;

            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;
            cmd.Connection = conn;
            string Tmp_MAX_ASPNO = "", Tmp_NEXT_ASPNO = "";
            try
            {
                string Tmp_Sql = "  SELECT MAX(ASPNO)  as MAX_ASPNO "
                                           + "  FROM   AMM_ASP "
                                           + "  WHERE ASPNO   LIKE  " + myfunc.AA(Tmp_ASPNO+"%");
                cmd.CommandText = Tmp_Sql;
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    Tmp_MAX_ASPNO = reader["MAX_ASPNO"].ToString();
                    if (myfunc.checkisnull(Tmp_MAX_ASPNO))
                        Tmp_NEXT_ASPNO = Tmp_ASPNO + "001";
                    else
                    {
                        Tmp_NEXT_ASPNO = Tmp_ASPNO + (int.Parse(Tmp_MAX_ASPNO.Substring(11, 3))+1).ToString("000");
                    }
                }
                Tmp_Str = "{success: true ,  NEXT_ASPNO:" + myfunc.AA(Tmp_NEXT_ASPNO) + ","
                                            + " }";

                response.Content = new StringContent(Tmp_Str);    // 回應內容
                return response;
            }// end of try
            catch (Exception e)
            {
                Tmp_Str = "{success: false ,  NEXT_ASPNO:" + myfunc.AA(Tmp_NEXT_ASPNO) + ","
                                            + " }";
                response.Content = new StringContent(Tmp_Str);    // 回應內容
                return response;
            }
            finally
            {
                conn.Close();
            }
        }  // end of get_NEXT_ASPNO


//移除 nvc 由 RadioGroup 的每一Radio欄位值(true/false)
2>>
[HttpPost]
        public void Insert()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            NameValueCollection nvc1= new NameValueCollection();
            //nvc 移除 radio開頭的 key , 以免加入 Insert Sql
            var Tmp_key = "";
            foreach(string key in nvc.Keys)
            {
                if (!key.Contains("radio"))
                    nvc1[key] = nvc[key];
            }
            excuteInsert(nvc1, DBTable);
        }

2022年8月3日 星期三

V120402 – [借閱登記] – 新增 – 取得ITM=最大值+1,

目的: V120402 – [借閱登記] – 新增 – 取得ITM=最大值+1, 

處理說明:  1>新增 - 取得 ITM最大值+1,



1>*.js  取得最大值 +1

Tmp_ITM = get_NEXT_ITM(Tmp_TMNO);

//取得   TMNO 的最大借閱記錄
    function string  get_NEXT_ITM(Tmp_TMNO)
    {
        var isOk = true;
        var Tmp_MAX_ITM = "";
        var  np = {};
        np["TMNO"] = Tmp_TMNO;
        Ext.Ajax.request({
            method: "POST",
            url: '../../api/V120402API/GET_MAXITM',
            params: np,
            async: false,
            success: function (response, opts) {
                var Tmp_Obj = Ext.decode(response.responseText);
                //console.log("Tmp_Obj[success]=", Tmp_Obj["success"]);
                if (Tmp_Obj["success"]) {
                    Tmp_MAX_ITM = Tmp_Obj['MAX_ITM'].toString();
                    if (Tmp_MAX_ITM.length == 0)
                        Tmp_MAX_ITM = '1';
                    console.log("Tmp_MAX_ITM=", Tmp_MAX_ITM);
                    return Tmp_MAX_ITM;
                    //mywarnalert(Tmp_Str);
                    //console.log(" 1 success return false");                    
                }
            }, // end of  success 
            failure: function (response, opts) {
                isOk = false;
            }
        });  // end of Ext.Ajax               
    }  // end of  function string  get_NEXT_ITM(Tmp_TMNO)


2>*.cs  - 
//以 TMNO  至 AMM_TMDWGD  取得  MAX(AMM_TMDWGD.ITM)+1 
        [HttpPost]
        public HttpResponseMessage GET_MAXITM()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_TMNO = nvc["TMNO"];

            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
            OracleCommand cmd = new OracleCommand();
            OracleDataReader reader;
            var response = this.Request.CreateResponse();

            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;
            cmd.Connection = conn;

            string Tmp_Str = "";
            string Tmp_Sql = "  SELECT MAX(ITM)+1  as MAX_ITM"
                                       + "  FROM   AMM_TMDWGD "
                                       + "  WHERE TMNO= " + myfunc.AA(Tmp_TMNO);
            cmd.CommandText = Tmp_Sql;
            reader = cmd.ExecuteReader();
            string Tmp_MAX_ITM = "";
            if (reader.Read())
            {
                Tmp_MAX_ITM = reader["MAX_ITM"].ToString();
            }
            Tmp_Str = "{success: true,MAX_ITM:" + myfunc.AA(Tmp_MAX_ITM) + ","
                                        + " }";

            response.Content = new StringContent(Tmp_Str);    // 回應內容
            return response;
            //return Tmp_MAX_ITM;
        }  // end of get_MAX_ITM


//V120201 , *.cs 直接取得最大值, 不傳回前端
//取得  AMM_COMQ.APNO  最大值
        [HttpPost]
public string GET_NEXT_APNO()
  {
          string Tmp_Sql;
          string Tmp_DStr = "Q" + DateTime.Now.ToString("yyyyMMdd"); ;
          string Tmp_MAX_APNO, Tmp_NEXT_APNO;
          Tmp_Sql="  SELECT   MAX(APNO) "
                        +"  FROM     AMM_COMQ "
                        +"  WHERE   APNO LIKE  "+myfunc.AA(Tmp_DStr+'%');      
          Tmp_MAX_APNO=myfunc.SqlValue(Tmp_Sql);
          if (myfunc.checkisnull(Tmp_MAX_APNO)){
             Tmp_NEXT_APNO=Tmp_DStr+"001";
          }
          else {
                    //取流水號(末3碼)+1  
       int Tmp_NextSerno = int.Parse(Tmp_MAX_APNO.Substring(Tmp_MAX_APNO.Length - 3, 3));
                   Tmp_NextSerno=Tmp_NextSerno+1;
                   Tmp_NEXT_APNO =Tmp_DStr+Tmp_NextSerno.ToString("000");
             }
        return Tmp_NEXT_APNO;
    }