- 新增 BpabDAC(SelectPage/SelectCount,mode 區分 科目/大類/小類) - 三檔 dsBPABGrid 改 ObjectDataSource(EnablePaging) - Search/Selected 調整 - 計畫文檔更新
503 lines
17 KiB
C#
503 lines
17 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 年度科目設定(科目)
|
|
/// </summary>
|
|
public partial class forms_customer_fmBpab : Wellan.Web.UI.WUserControlBase
|
|
{
|
|
protected string _BPNUM = "";
|
|
protected string _BPPYN = "";
|
|
private string _OLD_BPACC = "";
|
|
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;
|
|
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()
|
|
{
|
|
dsBPABGrid.SelectParameters["BPPYN"].DefaultValue = _BPPYN;
|
|
}
|
|
|
|
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, ObjectDataSourceStatusEventArgs e)
|
|
{
|
|
if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 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}\" 的科目對應因科目刪除而清除<br/>", 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
|
|
}
|