Example #1
0
    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();
        }
    }
Example #2
0
    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;

    }