protected void Btn_Save_Click(object sender, EventArgs e) { try { STMModel.MaintainRoute BCO = new STMModel.MaintainRoute(ConnectionDB); DataTable MasterExistNewDt = null; DataTable MasterExistOldDt = null; string newEffEndDate = ""; if (this.gv_Detail.EditIndex != -1) { ShowErrorMessage("請將編輯的資料列做更新,再按[儲存]"); } else { DataTable DetailNewDt = (DataTable)Session["STM23_DTL_" + PageTimeStamp.Value]; if (DetailNewDt == null) { ShowErrorMessage("無明細資料,請確認"); return; } else { #region 重新檢查新增的資料列中,是否有store空白的,如果有則刪除不處理 DataRow[] drNULL = (DataRow[])DetailNewDt.Select(" store is null"); foreach (DataRow dr in drNULL) { dr.Delete(); } #endregion Session["STM23_DTL_" + PageTimeStamp.Value] = DetailNewDt; //重新計算每一筆的到店時間 CalculateData(); DetailNewDt = (DataTable)Session["STM23_DTL_" + PageTimeStamp.Value]; } switch (this.hid_PageStatus.Value) { case "INSERT": if (DetailNewDt.Rows.Count > 0) { //將已存在的舊路線,路線停用日 設定為此筆新路線[路線啟用日]-1天 //將啟用日是否>=SYSDATE ParameterList.Clear(); ParameterList.Add(this.Route.Text); ParameterList.Add(this.EFF_START.Text); MasterExistOldDt = BCO.QueryVaildByEffDate(ParameterList); MasterExistNewDt = MasterExistOldDt.Copy(); newEffEndDate = DateTime.Parse(this.EFF_START.Text).AddDays(-1).ToString("yyyy/MM/dd"); if (MasterExistNewDt != null && MasterExistNewDt.Rows.Count > 0) { MasterExistNewDt.Rows[0]["EFF_END"] = newEffEndDate; } #region 儲存新增資料 // 做資料儲存的動作 int vPID = BCO.CreateMasterAndDetail(this.getMasterParameterList(), DetailNewDt, MasterExistNewDt, MasterExistOldDt, null); this.hiddenID.Value = Convert.ToString(vPID); #endregion } ScriptManager.RegisterStartupScript(up_Middle, this.GetType(), "ClientScript", "alert('新增完成');", true); break; case "EDIT": #region 使用XML轉回DataSet DataTable MasterOldDt = null; if (MasterOLDData.InnerHtml != "" && MasterOLDData.InnerHtml != "<NewDataSet />") { DataSet Ds = new DataSet(); System.IO.StringReader sr = new System.IO.StringReader(MasterOLDData.InnerHtml); Ds.ReadXml(sr); MasterOldDt = Ds.Tables[0]; } DataTable DetailOldDt = null; if (DetailOLDData.InnerHtml != "" && DetailOLDData.InnerHtml != "<NewDataSet />") { DataSet Ds = new DataSet(); System.IO.StringReader sr = new System.IO.StringReader(DetailOLDData.InnerHtml); Ds.ReadXml(sr); DetailOldDt = Ds.Tables[0]; } #endregion //20110707 rika 改為不需要判斷 //將已存在的舊路線,路線停用日 設定為此筆新路線[路線啟用日]-1天 //將啟用日是否>=SYSDATE //ParameterList.Clear(); //ParameterList.Add(this.hiddenID.Value); //ParameterList.Add(this.Route.Text); //MasterExistOldDt = BCO.QueryVaildByEffDateForUpdate(ParameterList); //MasterExistNewDt = MasterExistOldDt.Copy(); //newEffEndDate = DateTime.Parse(this.EFF_START.Text).AddDays(-1).ToString("yyyy/MM/dd"); //if (MasterExistNewDt != null && MasterExistNewDt.Rows.Count > 0) //{ // MasterExistNewDt.Rows[0]["EFF_END"] = newEffEndDate; //} //if (MasterExistData.InnerHtml != "" && MasterExistData.InnerHtml != "<NewDataSet />") //{ // DataSet Ds = new DataSet(); // System.IO.StringReader sr = new System.IO.StringReader(MasterExistData.InnerHtml); // Ds.ReadXml(sr); // MasterExistOldDt = Ds.Tables[0]; // MasterExistNewDt = MasterExistOldDt.Copy(); // string newEffEndDate = DateTime.Parse(this.EFF_START.Text).AddDays(-1).ToString("yyy/MM/dd"); // MasterExistNewDt.Rows[0]["EFF_END"] = newEffEndDate; //} // 做資料儲存的動作 BCO.UpdateMasterAndDetail(this.getMasterParameterList(), MasterOldDt.Rows[0], DetailNewDt, DetailOldDt, MasterExistNewDt, MasterExistOldDt, null); ScriptManager.RegisterStartupScript(up_Middle, this.GetType(), "ClientScript", "alert('修改完成');", true); break; } #region 存檔後資料重新讀取 this.hiddenROUTE.Value = this.Route.Text; this.hiddenEFF_START.Value = this.EFF_START.Text; databind(); #endregion #region 存檔後狀態設定 this.hid_PageStatus.Value = "VIEW"; this.txt_PageStatus.Text = "VIEW"; #endregion } } catch (Exception ex) { if (ex.Message.IndexOf("資料已被異動") != -1) { this.ErrorMsgLabel.Text = "資料已被異動,請重新查詢"; } else { this.ErrorMsgLabel.Text = ex.Message.Split(Environment.NewLine.Replace(Environment.NewLine, "~").ToCharArray())[0]; //直接取第一個 } } finally { SetPageStatus(); SetDefaultValue(); } }
public static string checkEffDate(string ROUTE, string Eff_Start, string Eff_End, string ID,string Status) { STMModel.MaintainRoute BCO = new STMModel.MaintainRoute(ConnectionDB); string returnValue = ""; //新增 if (Status == "INSERT") { //將啟用日是否>SYSDATE if (Convert.ToDateTime(Eff_Start) <= DateTime.Today) { string msg = "[路線啟用日]不可小於等於系統日"; returnValue = "double|" + msg; } else { //檢查是否相同pk已存在 ParameterList.Clear(); ParameterList.Add(ROUTE); ParameterList.Add(Eff_Start); DataTable Dt = BCO.QueryRouteByPK(ParameterList); if (Dt.Rows.Count > 0) { string msg = "已存在相同[路線啟用日]" + (Dt.Rows[0]["EFF_START"]).ToString() + "的資料"; returnValue = "double|" + msg; } else { //2011070 rika insert 修改為需要判斷啟用日是否>=sysdate及大於最大啟用日,及是否有重複的區間 DataTable MasterExistDt = null; string IsMax = string.Empty; IsMax = BCO.QueryMaxEffDate(ParameterList).ToString(); //啟用日是否小於最大路線啟用日 if (IsMax == "1") { string msg = "[路線啟用日]小於最大路線啟用日"; returnValue = "double|" + msg; } else if (IsMax == "0") { MasterExistDt = BCO.QueryVaildByEffDate(ParameterList); if (MasterExistDt != null && MasterExistDt.Rows.Count > 0) { string msg = ""; string newEffEndDate = DateTime.Parse(Eff_Start).AddDays(-1).ToString("yyy/MM/dd"); string oldEffEndDate = (MasterExistDt.Rows[0]["EFF_END"]).ToString().Trim(); if (oldEffEndDate == "" || oldEffEndDate == null) { msg = "已存在路線目前無設定結束日"; } else { msg = "已存在路線目前結束日為" + oldEffEndDate; } msg = msg + ",目前設定的路線起始日為" + Eff_Start; msg = msg + ",是否確定將舊路線結束日更改為" + newEffEndDate; returnValue = "exist|" + msg; } else { returnValue = "ok|ok"; } } //若找不到最大路線則表示為新路線 else { returnValue = "ok|ok"; } } } } //編輯 20110707 rika 修改判斷 else { ParameterList.Clear(); ParameterList.Add(ID); ParameterList.Add(ROUTE); ParameterList.Add(Eff_End); if (Convert.ToDateTime(Eff_End) <= DateTime.Today) { string msg = "[路線停用日]不可小於等於系統日"; returnValue = "double|" + msg; } else { DataTable Dt = BCO.QueryVaildByEffDateForUpdate(ParameterList); if (Dt.Rows.Count > 0 && Dt != null) { string msg = "路線與路線起始日為[" + Dt.Rows[0]["Eff_Start"].ToString() + "]之資料日期區間重疊!"; returnValue = "double|" + msg; } else { returnValue = "ok|ok"; } } } return returnValue; }