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; using CRAX; /// /// 專案憑證處理 /// public partial class forms_customer_fmRpfe : Wellan.Web.UI.WUserControlBase { private string _RPPYN = ""; private int _YY = 0; private TextBox[] RPDATs = new TextBox[10]; private DropDownList[] RPACCs = new DropDownList[10]; private TextBox[] RPAMTs = new TextBox[10]; private TextBox[] RPDOCs = new TextBox[10]; private DateTime[] RPDATValues = new DateTime[10]; private int[] RPAMTValues = new int[10]; DataTable reportData; protected void Page_Load(object sender, EventArgs e) { //ddlBPPNM.DataSource = new BpaaDAC().GetBpaa(); //ddlBPPNM.DataBind(); //if (IsPostBack) // RPFEGrid.DataBind(); } protected override void OnInit(EventArgs e) { base.OnInit(e); dsRPFEForm.ConnectionString = ConnectionString; dsRPFE_RPACC.ConnectionString = ConnectionString; dsRPFE_RPENO.ConnectionString = ConnectionString; _RPPYN = GetStringParam("RPPYN"); _YY = GetIntParam("YY"); if (_YY > 0) { txtYY.Text = _YY.ToString(); ddlBPPNM.DataSource = new BpaaDAC().GetBpaa(_YY + WGuard1.CY11); ddlBPPNM.DataBind(); ListItem item = ddlBPPNM.Items.FindByValue(_RPPYN); if (item != null) item.Selected = true; } else { txtYY.Focus(); } MultiView1.Visible = _RPPYN != ""; dsRPFE_RPACC.SelectParameters["RPPYN"].DefaultValue = _RPPYN; dsRPFE_RPENO.SelectParameters["RPPYN"].DefaultValue = _RPPYN; RPDATs[0] = txtRPFE_RPDAT_01; RPDATs[1] = txtRPFE_RPDAT_02; RPDATs[2] = txtRPFE_RPDAT_03; RPDATs[3] = txtRPFE_RPDAT_04; RPDATs[4] = txtRPFE_RPDAT_05; RPDATs[5] = txtRPFE_RPDAT_06; RPDATs[6] = txtRPFE_RPDAT_07; RPDATs[7] = txtRPFE_RPDAT_08; RPDATs[8] = txtRPFE_RPDAT_09; RPDATs[9] = txtRPFE_RPDAT_10; RPACCs[0] = ddlRPFE_RPACC_01; RPACCs[1] = ddlRPFE_RPACC_02; RPACCs[2] = ddlRPFE_RPACC_03; RPACCs[3] = ddlRPFE_RPACC_04; RPACCs[4] = ddlRPFE_RPACC_05; RPACCs[5] = ddlRPFE_RPACC_06; RPACCs[6] = ddlRPFE_RPACC_07; RPACCs[7] = ddlRPFE_RPACC_08; RPACCs[8] = ddlRPFE_RPACC_09; RPACCs[9] = ddlRPFE_RPACC_10; RPAMTs[0] = txtRPFE_RPAMT_01; RPAMTs[1] = txtRPFE_RPAMT_02; RPAMTs[2] = txtRPFE_RPAMT_03; RPAMTs[3] = txtRPFE_RPAMT_04; RPAMTs[4] = txtRPFE_RPAMT_05; RPAMTs[5] = txtRPFE_RPAMT_06; RPAMTs[6] = txtRPFE_RPAMT_07; RPAMTs[7] = txtRPFE_RPAMT_08; RPAMTs[8] = txtRPFE_RPAMT_09; RPAMTs[9] = txtRPFE_RPAMT_10; RPDOCs[0] = txtRPFE_RPDOC_01; RPDOCs[1] = txtRPFE_RPDOC_02; RPDOCs[2] = txtRPFE_RPDOC_03; RPDOCs[3] = txtRPFE_RPDOC_04; RPDOCs[4] = txtRPFE_RPDOC_05; RPDOCs[5] = txtRPFE_RPDOC_06; RPDOCs[6] = txtRPFE_RPDOC_07; RPDOCs[7] = txtRPFE_RPDOC_08; RPDOCs[8] = txtRPFE_RPDOC_09; RPDOCs[9] = txtRPFE_RPDOC_10; //_RPPYN = ViewState["RPNUM"] != null ? ViewState["RPNUM"].ToString() : ""; //_RPRDT1 = ViewState["RPRDT1"] != null ? ViewState["RPRDT1"].ToString() : ""; //_RPRDT2 = ViewState["RPRDT2"] != null ? ViewState["RPRDT2"].ToString() : ""; StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); StringBuilder sb3 = new StringBuilder(); for (int i = 0; i < 10; i++) { sb1.Append(String.Format("\"{0}\"", RPDATs[i].ClientID) + (i < 9 ? "," : "")); sb2.Append(String.Format("\"{0}\"", RPAMTs[i].ClientID) + (i < 9 ? "," : "")); sb3.Append(String.Format("\"{0}\"", RPDOCs[i].ClientID) + (i < 9 ? "," : "")); } Page.ClientScript.RegisterArrayDeclaration("RPDATIds", sb1.ToString()); Page.ClientScript.RegisterArrayDeclaration("RPAMTIds", sb2.ToString()); Page.ClientScript.RegisterArrayDeclaration("RPDOCIds", sb3.ToString()); GetGridViewRowColor(RPFEGrid); reportData = new DataTable(); reportData.Columns.Add("RPREN", typeof(String)); reportData.Columns.Add("RPPYN", typeof(String)); reportData.Columns.Add("ProjectName", typeof(String)); reportData.Columns.Add("Amount", typeof(Int32)); reportData.Columns.Add("Document", typeof(String)); if (MultiView1.ActiveViewIndex == 0) SetClientFocus(txtRPFE_RPDAT_01); Search(); } // 查詢動作 private new void Search() { dsRPFEGrid.SelectParameters["RPPYN"].DefaultValue = _RPPYN; } private int CheckInsertInput(int index) { RPDATs[index].Text = RPDATs[index].Text.Trim(); RPAMTs[index].Text = RPAMTs[index].Text.Trim(); RPDOCs[index].Text = RPDOCs[index].Text.Trim(); // 有輸入的條件為:日期有輸入且合理,金額大於0,備註無所謂 bool rpdatValid = false; bool rpamtValid = false; rpdatValid = CheckDate(RPDATs[index].Text + "01", out RPDATValues[index]); rpamtValid = Int32.TryParse(RPAMTs[index].Text, out RPAMTValues[index]); if (RPDATs[index].Text != "" && rpdatValid && RPAMTs[index].Text != "" && rpamtValid && RPAMTValues[index] > 0) { return 0; } if (RPDATs[index].Text == "" && RPAMTs[index].Text == "") { return 1; } int returnValue = 0; if (RPDATs[index].Text != "" && !rpdatValid) { returnValue -= 1; } if (RPAMTs[index].Text != "" && !rpamtValid) { returnValue -= 2; } return returnValue; } private new void CalcFields(SqlDataSourceCommandEventArgs e) { } protected void dsRPFEForm_Inserting(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); } protected void dsRPFEForm_Updating(object sender, SqlDataSourceCommandEventArgs e) { CalcFields(e); } protected void RPFEGrid_DataBound(object sender, EventArgs e) { GridView_DataBound(sender, e); if (RPFEGrid.Rows.Count > 0) { if (RPFEGrid.SelectedIndex == -1) RPFEGrid.SelectedIndex = 0; if (RPFEGrid.SelectedIndex > RPFEGrid.Rows.Count - 1) RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1; RPFEForm.DataBind(); } } protected void RPFEGrid_PageIndexChanged(object sender, EventArgs e) { Search(); RPFEGrid.SelectedIndex = 0; RPFEGrid.DataBind(); } protected void dsRPFEGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e) { if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0) { //RPFEForm.ChangeMode(FormViewMode.Insert); //RPFEForm_ModeChanged(sender, e); } } protected void RPFEForm_ItemCommand(object sender, FormViewCommandEventArgs e) { switch (e.CommandName) { case "APPEND": MultiView1.ActiveViewIndex = 0; break; case "Print": RPFEForm.DataBind(); if (RPFEForm.DataItem != null) { DataRowView rv = RPFEForm.DataItem as DataRowView; AddReportData(rv["RPREN"].ToString(), rv["RPPYN"].ToString(), GetLookup("BPAA", rv["RPPYN"].ToString(), "BPPYM", ""), Convert.ToInt32(rv["RPAMT"]), rv["RPACC"].ToString(), Convert.ToDateTime(rv["RPDAT"]), rv["RPDOC"].ToString()); PrintReport(); } break; case "Cancel": Search(); RPFEForm.ChangeMode(FormViewMode.ReadOnly); RPFEForm_ModeChanged(sender, e); break; } } protected void RPFEForm_ItemDeleted(object sender, FormViewDeletedEventArgs e) { Search(); RPFEGrid.DataBind(); if (RPFEGrid.SelectedIndex > RPFEGrid.Rows.Count - 1) { RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1; RPFEGrid.DataBind(); } RPFEForm.DataBind(); } protected void RPFEForm_ItemInserted(object sender, FormViewInsertedEventArgs e) { Search(); } protected void RPFEForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e) { Search(); } protected void RPFEForm_ModeChanged(object sender, EventArgs e) { switch (RPFEForm.CurrentMode) { case FormViewMode.ReadOnly: RPFEGrid.Visible = true; RPFEGrid.DataBind(); if (RPFEGrid.Rows.Count > 0) { if (RPFEGrid.SelectedIndex == -1) { RPFEGrid.SelectedIndex = 0; } if (OldMode == FormViewMode.Insert) { RPFEGrid.PageIndex = RPFEGrid.PageCount - 1; RPFEGrid.DataBind(); RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1; } RPFEGrid.DataBind(); RPFEForm.DataBind(); } break; case FormViewMode.Edit: RPFEGrid.Visible = false; break; case FormViewMode.Insert: RPFEGrid.Visible = false; break; } } protected void RPFEForm_ModeChanging(object sender, FormViewModeEventArgs e) { OldMode = (sender as FormView).CurrentMode; } protected void RPFEForm_DataBound(object sender, EventArgs e) { switch (RPFEForm.CurrentMode) { case FormViewMode.Edit: SetClientFocus(RPFEForm, "txtRPFE_RPDAT"); break; } } protected void RPFEGrid_RowDataBound(object sender, GridViewRowEventArgs e) { SetGridViewMouseBehavier(RPFEGrid, e.Row); //GridView_RowDataBound_Shrink_ViewState(sender, e); } protected void RPFEGrid_SelectedIndexChanged(object sender, EventArgs e) { foreach (GridViewRow row in RPFEGrid.Rows) SetGridViewMouseBehavier(RPFEGrid, row); } protected void RPFEForm_ItemDeleting(object sender, FormViewDeleteEventArgs e) { // 刪除前檢查 // TODO: 檢查關帳日 } protected new bool CheckInput(System.Collections.Specialized.IOrderedDictionary values) { cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; bool result = true; values["RPDAT"] = CheckDate(values["RPDAT"].ToString() + "01", "請輸入正確的日期", ref result, cvMessage); ProcessCustomValidatorMessage(cvMessage); return result; } protected void RPFEForm_ItemInserting(object sender, FormViewInsertEventArgs e) { //e.Values["RPTYP"] = (RPFEForm.FindControl("ddlRPFE_RPTYP") as DropDownList).SelectedValue; //e.Cancel = !CheckInput(e.Values); } protected void RPFEForm_ItemUpdating(object sender, FormViewUpdateEventArgs e) { e.Cancel = !CheckInput(e.NewValues); } protected void cvRPTCT_ServerValidate(object source, ServerValidateEventArgs args) { int i; args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i); } // 新增畫面之存檔按鈕 protected void btnSave1_Click(object sender, EventArgs e) { // 存檔 // 1. 檢查各組輸入 int[] hasInput = new int[10]; bool valid = true; bool saveOk = false; bool needSave = false; cvMessage.ErrorMessage = ""; cvMessage.IsValid = true; for (int i = 0; i < RPACCs.Length; i++) { hasInput[i] = CheckInsertInput(i); switch (hasInput[i]) { case 0: needSave = true; break; case -1: valid = false; cvMessage.ErrorMessage += String.Format("第{0}組輸入月份不合理
", i + 1); break; case -2: valid = false; cvMessage.ErrorMessage += String.Format("第{0}組輸入金額不合理
", i + 1); break; case -3: valid = false; cvMessage.ErrorMessage += String.Format("第{0}組輸入月份與金額不合理
", i + 1); break; } } if (!valid) { cvMessage.IsValid = false; ProcessCustomValidatorMessage(cvMessage); return; } if (!needSave) return; // 2. 各組輸入存檔 DbCommand cmd1 = Query.NewCommand( @"INSERT INTO RPFE (RPREN, RPPYN, RPDAT, RPACC, RPAMT, RPDOC, APPNO, TRDAT, TRMOD, TRUSR) VALUES (@RPREN, @RPPYN, @RPDAT, @RPACC, @RPAMT, @RPDOC, 1, GETDATE(), 'INSERT', @TRUSR)"); cmd1.Parameters.Add(Query.NewParameter("RPREN", DbType.String)); cmd1.Parameters.Add(Query.NewParameter("RPPYN", _RPPYN)); cmd1.Parameters.Add(Query.NewParameter("RPDAT", DbType.DateTime)); cmd1.Parameters.Add(Query.NewParameter("RPACC", DbType.String)); cmd1.Parameters.Add(Query.NewParameter("RPAMT", DbType.Int32)); cmd1.Parameters.Add(Query.NewParameter("RPDOC", DbType.String)); cmd1.Parameters.Add(Query.NewParameter("TRUSR", UserId)); // 取得專案年度名稱 string bppym = GetLookup("BPAA", _RPPYN, "BPPYM", ""); if (bppym == "") { string[] tmp = ddlBPPNM.SelectedItem.Text.Split('】'); bppym = tmp.Length > 1 ? tmp[1] : ddlBPPNM.SelectedItem.Text; } DbConnection conn = Query.NewConnection(ConnectionString); cmd1.Connection = conn; conn.Open(); DbTransaction tran = conn.BeginTransaction(); cmd1.Transaction = tran; try { for (int i = 0; i < RPACCs.Length; i++) { if (hasInput[i] == 0) { string rpren = WGuard1.WNextRen(RPDATValues[i], "RPFE", "RPREN", "YYYYMM<999999>", "", tran); cmd1.Parameters["RPREN"].Value = rpren; cmd1.Parameters["RPDAT"].Value = RPDATValues[i]; cmd1.Parameters["RPACC"].Value = RPACCs[i].SelectedValue; cmd1.Parameters["RPAMT"].Value = RPAMTValues[i]; cmd1.Parameters["RPDOC"].Value = RPDOCs[i].Text; cmd1.ExecuteNonQuery(); // 將資料放進報表要用的 DataTable AddReportData(rpren, _RPPYN, bppym, RPAMTValues[i], RPACCs[i].Text, RPDATValues[i], RPDOCs[i].Text); } } tran.Commit(); saveOk = true; // 清除畫面資料 for (int i = 0; i < RPDATs.Length; i++) { RPDATs[i].Text = ""; RPAMTs[i].Text = ""; RPDOCs[i].Text = ""; } } catch (Exception ex) { tran.Rollback(); cvMessage.ErrorMessage = ex.Message; cvMessage.IsValid = false; } finally { conn.Close(); } // 3. 是否要列印單據黏貼條 if (saveOk && cbWantPrint.Checked) { PrintReport(); } } // 將資料加入報表資料中 protected void AddReportData(string rpren, string rppyn, string projectName, int amount, string rpacc, DateTime rpdat, string rpdoc) { reportData.Rows.Add(rpren, rppyn, projectName, amount, rpdat.ToString("yyyy\"年\"MM\"月\"") + GetBPACC(rpacc) + (rpdoc != "" ? "(" + rpdoc + ")" : "")); } // 列印報表 protected void PrintReport() { WTableTr tableTr = new WTableTr(); string realFileName = tableTr.ExportToMDB(reportData, ReportDataPath + "RPFE_01.mdb", "RPFE_01", true, true, false); realFileName = "reportData/" + Path.GetFileName(realFileName); reportData.Dispose(); tableTr = null; //WCrExport crex = new WCrExport(); //crex.LoadReport(ReportDataPath + "RPFE_01.rpt", realFileName); //crex.WebExportAsPdf(Response); //crex.CloseReport(); //RegisterStartupScript("REPORT_OBJECT", CRAXHelper.GetCRAXViewerDeclaration()); ReportParameter rp = new ReportParameter(); rp.Add("公司名稱", GetString("COMPANY.NAME")); string realParamFileName = "reportData/" + Path.GetFileName(rp.Save(ReportDataPath + "RPFE_01.rpp", true)); RegisterStartupScript("REPORT_JS", CRAXHelper.GetReportScript(Context, GetWebRootUrl() + "CRAX/", "../report/RPFE_01.rpt", "../" + realFileName, "../" + realParamFileName, "", "RPFE_01.rpt", "RPFE_01.mdb", "RPFE_01.rpp", "", "", "", "", "", 0, 0)); } // 新增畫面之取消按鈕 protected void btnCancel1_Click(object sender, EventArgs e) { // 回到處理畫面 MultiView1.ActiveViewIndex = 1; } 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", _RPPYN)); cmd.Parameters.Add(Query.NewParameter("BPACC", bpacc)); object o = Query.ExecuteScalar(cmd); if (o == null || o == DBNull.Value) return ""; else return o.ToString(); } protected void cvRPAMT_ServerValidate(object source, ServerValidateEventArgs args) { int i; args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i) && i > 0; } protected void Next_Click(object sender, EventArgs e) { string rppyn = ddlBPPNM.SelectedValue; // 檢查此使用者是否有權限處理這個專案 BprmDAC bprm = new BprmDAC(Query); if (!bprm.GetRight(rppyn, UserId)) { MultiView1.Visible = false; cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!"; cvMessage.IsValid = false; return; } // 檢查科目是否有設定 dsRPFE_RPACC.SelectParameters["RPPYN"].DefaultValue = rppyn; DataView dv = dsRPFE_RPACC.Select(new DataSourceSelectArguments()) as DataView; if (dv.Count == 0) { MultiView1.Visible = false; cvMessage.ErrorMessage = "此專案年度接單尚未設定科目"; cvMessage.IsValid = false; return; } ParamList["RPPYN"] = rppyn; DoAfterCommand("RPFE"); } protected void btnYY_Click(object sender, EventArgs e) { int year; if (!Int32.TryParse(txtYY.Text.Trim(), out year)) { cvMessage.IsValid = false; cvMessage.ErrorMessage = "請輸入正確的年度"; return; } MultiView1.Visible = false; ParamList["YY"] = year; ParamList["RPPYN"] = ""; DoAfterCommand("RPFE"); } }