using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.Common; using Wellan.Data; using Wellan.Common; using System.Text; using System.IO; using System.Drawing; /// /// 年度科目設定(科目) /// public partial class forms_customer_fmBpab : Wellan.Web.UI.WUserControlBase { protected string _BPNUM = ""; protected string _BPPYN = ""; private string _OLD_BPACC = ""; private string select = "SELECT * "; private string from = " FROM BPAB "; private string where = " WHERE 1=1 "; private string order = " ORDER BY BPPYN, BPCLS"; private DbCommand cmdTree; protected void Page_Load(object sender, EventArgs e) { //if (IsPostBack) // gvBPAB.DataBind(); } protected override void OnInit(EventArgs e) { base.OnInit(e); Page.ClientScript.RegisterStartupScript(Page.GetType(), "RestoreDivPosition", "RestoreDivPosition();", true); dsBPABForm.ConnectionString = ConnectionString; dsBPABGrid.ConnectionString = ConnectionString; dsBPABBig.ConnectionString = ConnectionString; dsBPABSmall.ConnectionString = ConnectionString; _BPNUM = GetStringParam("BPNUM"); _BPPYN = GetStringParam("BPPYN"); dsBPABBig.SelectParameters["BPPYN"].DefaultValue = _BPPYN; dsBPABSmall.SelectParameters["BPPYN"].DefaultValue = _BPPYN; GetGridViewRowColor(gvBPAB); Search(); } // 查詢動作 private new void Search() { StringBuilder sql = new StringBuilder(); sql.Append(select); sql.Append(from); sql.Append(where); dsBPABGrid.SelectParameters.Clear(); AddSearch(sql, dsBPABGrid, "BPPYN", _BPPYN, "", true); sql.Append(" AND SUBSTRING(BPACC,3,2) <> '00' AND SUBSTRING(BPACC,5,2) <> '00' "); sql.Append(order); dsBPABGrid.SelectCommand = sql.ToString(); } private new void CalcFields(SqlDataSourceCommandEventArgs e) { Decimal bpbgt; if (Decimal.TryParse(e.Command.Parameters["@BPBGT"].Value.ToString(), out bpbgt)) e.Command.Parameters["@BPBGT"].Value = bpbgt; else e.Command.Parameters["@BPBGT"].Value = 0; } protected void dsBPABForm_Inserting(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); } protected void dsBPABForm_Updating(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); e.Command.Connection.Open(); e.Command.Transaction = e.Command.Connection.BeginTransaction(); } protected void dsBPABForm_Updated(object sender, SqlDataSourceStatusEventArgs e) { cvMessage.IsValid = true; cvMessage.ErrorMessage = ""; ChainUpdateBPAA(e.Command.Parameters["@OLD_BPACC"].Value.ToString(), e.Command.Parameters["@BPACC"].Value.ToString(), e.Command.Transaction); e.Command.Transaction.Commit(); e.Command.Connection.Close(); //cvMessage.IsValid = cvMessage.ErrorMessage == ""; } protected void gvBPAB_DataBound(object sender, EventArgs e) { GridView_DataBound(sender, e); if (gvBPAB.Rows.Count > 0) { if (gvBPAB.SelectedIndex == -1) gvBPAB.SelectedIndex = 0; fvBPAB.DataBind(); if (fvBPAB.DataItem != null) ViewState["OLD_BPACC"] = (fvBPAB.DataItem as DataRowView)["BPACC"]; } } protected void gvBPAB_PageIndexChanged(object sender, EventArgs e) { Search(); GridView gv = sender as GridView; gv.SelectedIndex = 0; gv.DataBind(); } protected void dsBPABGrid_Selected(object sender, SqlDataSourceStatusEventArgs e) { if (e.AffectedRows == 0) { gvBPAB.Visible = false; fvBPAB.ChangeMode(FormViewMode.Insert); fvBPAB_ModeChanged(sender, e); } } protected void fvBPAB_ItemCommand(object sender, FormViewCommandEventArgs e) { switch (e.CommandName) { case "Insert": break; case "Edit": break; case "Delete": break; case "Cancel": Search(); fvBPAB.ChangeMode(FormViewMode.ReadOnly); fvBPAB_ModeChanged(sender, e); if (gvBPAB.Rows.Count == 0) DoAfterCommand("SMALL"); break; case "Small": DoAfterCommand("SMALL"); break; case "Big": DoAfterCommand("BIG"); break; case "Return": DoAfterCommand("BPAA"); break; } } protected void fvBPAB_ItemDeleted(object sender, FormViewDeletedEventArgs e) { Search(); gvBPAB.DataBind(); if (gvBPAB.SelectedIndex > gvBPAB.Rows.Count - 1) { gvBPAB.SelectedIndex = gvBPAB.Rows.Count - 1; gvBPAB.DataBind(); } fvBPAB.DataBind(); } protected void fvBPAB_ItemInserted(object sender, FormViewInsertedEventArgs e) { Search(); } protected void fvBPAB_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { Search(); } protected void fvBPAB_ModeChanged(object sender, EventArgs e) { switch (fvBPAB.CurrentMode) { case FormViewMode.ReadOnly: gvBPAB.Visible = true; gvBPAB.DataBind(); if (gvBPAB.Rows.Count > 0) { if (gvBPAB.SelectedIndex == -1) { gvBPAB.SelectedIndex = 0; } if (OldMode == FormViewMode.Insert) { gvBPAB.PageIndex = gvBPAB.PageCount - 1; gvBPAB.DataBind(); gvBPAB.SelectedIndex = gvBPAB.Rows.Count - 1; } fvBPAB.DataBind(); } break; case FormViewMode.Edit: gvBPAB.Visible = false; break; case FormViewMode.Insert: gvBPAB.Visible = false; break; } } protected void fvBPAB_ModeChanging(object sender, FormViewModeEventArgs e) { OldMode = (sender as FormView).CurrentMode; } protected void RegisterJS(FormView fv) { HtmlSelect dlBig = fv.FindControl("dlBPAB_BPACCBig") as HtmlSelect; HtmlSelect dlSmall = fv.FindControl("dlBPAB_BPACCSmall") as HtmlSelect; HiddenField hfBig = fv.FindControl("hfBPACCBig") as HiddenField; HiddenField hfSmall = fv.FindControl("hfBPACCSmall") as HiddenField; dlBig.Attributes["onchange"] = String.Format("javascript:BPACCBigChange('{0:c}', '{1:c}', '{2:c}', '{3:c}');", dlBig.ClientID, dlSmall.ClientID, hfBig.ClientID, hfSmall.ClientID); dlSmall.Attributes["onchange"] = String.Format("javascript:BPACCSmallChange('{0:c}', '{1:c}');", dlSmall.ClientID, hfSmall.ClientID); StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); for (int i = 0; i < dlSmall.Items.Count; i++) { sb1.Append("\"" + dlSmall.Items[i].Value + "\","); sb2.Append("\"" + dlSmall.Items[i].Text + "\","); } Page.ClientScript.RegisterArrayDeclaration("smallValue", sb1.ToString().Remove(sb1.Length - 1)); Page.ClientScript.RegisterArrayDeclaration("smallText", sb2.ToString().Remove(sb2.Length - 1)); Button btnSave = fv.FindControl("btnSave") as Button; btnSave.OnClientClick = String.Format("javascript:CopyBPACCValue('{0:c}', '{1:c}', '{2:c}', '{3:c}');return confirm(msgConfirmSave);", dlBig.ClientID, dlSmall.ClientID, hfBig.ClientID, hfSmall.ClientID); if (fv.DataItem != null) { string bpacc = (fv.DataItem as DataRowView)["BPACC"].ToString(); dlBig.Value = bpacc.Substring(0, 2) + "0000"; for (int i = dlSmall.Items.Count - 1; i >= 0; i--) { if (dlSmall.Items[i].Value.Substring(0, 2) != bpacc.Substring(0, 2)) dlSmall.Items.Remove(dlSmall.Items[i]); } if (bpacc != "") dlSmall.Value = bpacc.Substring(0, 4) + "00"; } else { for (int i = dlSmall.Items.Count - 1; i >= 0; i--) { if (dlSmall.Items[i].Value.Substring(0, 2) != dlBig.Value.Substring(0, 2)) dlSmall.Items.Remove(dlSmall.Items[i]); } } } protected void fvBPAB_DataBound(object sender, EventArgs e) { FormView fv = sender as FormView; switch (fv.CurrentMode) { case FormViewMode.Edit: SetClientFocus(fv, "dlBPAB_BPACCBig"); RegisterJS(fv); break; case FormViewMode.Insert: SetClientFocus(fv, "dlBPAB_BPACCBig"); RegisterJS(fv); break; case FormViewMode.ReadOnly: break; } } protected void fvBPAB_ItemCreated(object sender, EventArgs e) { FormView fv = sender as FormView; switch (fv.CurrentMode) { case FormViewMode.Insert: (fv.FindControl("lbBPAB_BPNUM") as ITextControl).Text = _BPNUM; (fv.FindControl("lbBPAB_BPPYN") as ITextControl).Text = _BPPYN; break; } } protected void gvBPAB_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(sender as GridView, e.Row); //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void gvBPAB_SelectedIndexChanged(object sender, EventArgs e) { GridView gv = sender as GridView; foreach (GridViewRow row in gv.Rows) SetGridViewMouseBehavier(gv, row); } protected void fvBPAB_ItemInserting(object sender, FormViewInsertEventArgs e) { string bpaccSmall = (fvBPAB.FindControl("hfBPACCSmall") as HiddenField).Value; e.Values["BPACC"] = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8), "BPAB", "BPACC", String.Format("\"{0}\"<99>", bpaccSmall.Substring(0, 4)), String.Format(" BPPYN='{0}' ", _BPPYN)); // 取得小類的排序號 int newBpord = Convert.ToInt32(e.Values["BPORD"]); DbCommand cmd1 = Query.NewCommand("SELECT BPCLS FROM BPAB WHERE BPACC=@BPACC"); cmd1.Parameters.Add(Query.NewParameter("BPACC", bpaccSmall)); string bpclsSmall = Query.ExecuteScalar(cmd1).ToString(); e.Values["BPCLS"] = String.Format("{0}{1:00}", bpclsSmall.Substring(0, 4), newBpord); } protected void fvBPAB_ItemUpdating(object sender, FormViewUpdateEventArgs e) { _OLD_BPACC = ViewState["OLD_BPACC"] != null ? ViewState["OLD_BPACC"].ToString() : ""; string bpaccSmall = (fvBPAB.FindControl("hfBPACCSmall") as HiddenField).Value; if (_OLD_BPACC.Substring(0, 4) != bpaccSmall.Substring(0, 4)) e.NewValues["BPACC"] = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8), "BPAB", "BPACC", String.Format("\"{0}\"<99>", bpaccSmall.Substring(0, 4)), ""); // 取得小類的排序號 int newBpord = Convert.ToInt32(e.NewValues["BPORD"]); DbCommand cmd1 = Query.NewCommand("SELECT BPCLS FROM BPAB WHERE BPACC=@BPACC"); cmd1.Parameters.Add(Query.NewParameter("BPACC", bpaccSmall)); string bpclsSmall = Query.ExecuteScalar(cmd1).ToString(); e.NewValues["BPCLS"] = String.Format("{0}{1:00}", bpclsSmall.Substring(0, 4), newBpord); } protected string GetBPACC(string bpacc) { DbCommand cmd = Query.NewCommand("SELECT BPAME FROM BPAB WHERE BPPYN=@BPPYN AND BPACC=@BPACC"); cmd.Parameters.Add(Query.NewParameter("BPPYN", _BPPYN)); cmd.Parameters.Add(Query.NewParameter("BPACC", bpacc)); object o = Query.ExecuteScalar(cmd); if (o == null || o == DBNull.Value) return ""; else return o.ToString(); } protected string GetBPACCBig(string bpacc) { return GetBPACC(bpacc.Substring(0, 2) + "0000"); } protected string GetBPACCSmall(string bpacc) { return GetBPACC(bpacc.Substring(0, 4) + "00"); } protected void dsBPABForm_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { } protected void cvBPBGT_ServerValidate(object source, ServerValidateEventArgs args) { // 檢查預算是否輸入合理的數字 int i; args.IsValid = int.TryParse(args.Value, out i) && i >= 0; } protected void cvBPORD_ServerValidate(object source, ServerValidateEventArgs args) { int i; args.IsValid = int.TryParse(args.Value, out i) && i > 0 && i < 100; } protected void ChainUpdateBPAA(string old_bpacc, string new_bpacc, DbTransaction tran) { // 取得專案科目對應資料 GetData gd = new GetData(); gd.Query = Query; DataTable bpaa = gd.GetBPAA_BPPYN(_BPPYN); DataRow bpaaRow = bpaa.Rows[0]; DbCommand cmdUpdateBPAA = Query.NewCommand(); cmdUpdateBPAA.Connection = tran.Connection; cmdUpdateBPAA.Transaction = tran; cmdUpdateBPAA.Parameters.Add(Query.NewParameter("TRUSR", UserId)); cmdUpdateBPAA.Parameters.Add(Query.NewParameter("BPPYN", _BPPYN)); cmdUpdateBPAA.Parameters.Add(Query.NewParameter("BPSXX", new_bpacc)); // 核對科目對應資料,如果已有科目對應,則清除科目對應 string[] fieldNames = {"BPS01", "BPS02", "BPS03", "BPS04", "BPS05", "BPS06", "BPS07", "BPS08", "BPS09", "BPS10", "BPS11", "BPS12", "BPS13", "BPS14", "BPS15", "BPS16", "BPS17", "BPS18", "BPS19", "BPS20", "BPS21", "BPS22", "BPS23", "BPS24", "BPS25", "BPS26", "BPS27", "BPS28", "BPS29", "BPS30"}; for (int i = 0; i < fieldNames.Length; i++) { if (bpaaRow[fieldNames[i]] != DBNull.Value && bpaaRow[fieldNames[i]].ToString() == old_bpacc) { cvMessage.ErrorMessage += String.Format("\"{0}\" 的科目對應因科目刪除而清除
", GetString("BPAA." + fieldNames[i])); cmdUpdateBPAA.CommandText = String.Format("UPDATE BPAA SET {0}=@BPSXX, TRDAT=GETDATE(), TRMOD='UPDATE', TRUSR=@TRUSR WHERE BPPYN=@BPPYN", fieldNames[i]); cmdUpdateBPAA.ExecuteNonQuery(); } } } protected void dsBPABForm_Deleting(object sender, SqlDataSourceCommandEventArgs e) { e.Command.Connection.Open(); e.Command.Transaction = e.Command.Connection.BeginTransaction(); } protected void dsBPABForm_Deleted(object sender, SqlDataSourceStatusEventArgs e) { cvMessage.IsValid = true; cvMessage.ErrorMessage = ""; ChainUpdateBPAA(e.Command.Parameters["@OLD_BPACC"].Value.ToString(), "", e.Command.Transaction); e.Command.Transaction.Commit(); e.Command.Connection.Close(); cvMessage.IsValid = cvMessage.ErrorMessage == ""; } #region 新作法 protected void btnYY_Click(object sender, EventArgs e) { int year; if (!Int32.TryParse(txtYY.Text.Trim(), out year)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "請輸入正確的年度"; return; } ddlRPPYN.DataSource = new BpaaDAC().GetBpaaWithTY(year + WGuard1.CY11); ddlRPPYN.DataBind(); } protected void ddlRPPYN_SelectedIndexChanged(object sender, EventArgs e) { DrawTree("", tvBPAB.Nodes); } protected void DrawTree(string parent, TreeNodeCollection nodes) { if (cmdTree == null) cmdTree = Query.NewCommand(); string sql1 = "SELECT BPACC, BPAME, BPORD FROM BPAB WHERE BPPYN=@BPPYN"; switch (parent.Length) { case 0: cmdTree.CommandText = sql1 + " AND SUBSTRING(BPACC,3,4) = '0000'"; break; case 2: cmdTree.CommandText = sql1 + " AND SUBSTRING(BPACC,1,2) = @PARENT AND SUBSTRING(BPACC,3,2) <> '00' AND SUBSTRING(BPACC,5,2) = '00'"; break; case 4: cmdTree.CommandText = sql1 + " AND SUBSTRING(BPACC,1,4) = @PARENT AND SUBSTRING(BPACC,5,2) <> '00'"; break; } cmdTree.CommandText += " ORDER BY BPORD "; Query.AddParam(cmdTree, "BPPYN", ddlRPPYN.SelectedValue); Query.AddParam(cmdTree, "PARENT", parent); DataTable treeData = Query.Select(cmdTree); foreach (DataRow row in treeData.Rows) { string bpacc = WQuery.GetStringValue(row["BPACC"]); string bpame = WQuery.GetStringValue(row["BPAME"]); TreeNode newNode = new TreeNode("(" + bpacc + ") " + bpame, bpacc); newNode.Expanded = true; nodes.Add(newNode); // 第二層 if (bpacc.Substring(2, 4) == "0000") DrawTree(bpacc.Substring(0, 2), newNode.ChildNodes); // 第三層 if (bpacc.Substring(4, 2) == "00") DrawTree(bpacc.Substring(0, 4), newNode.ChildNodes); } } #endregion }