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 System.ComponentModel; using Wellan.Common; /// /// 獎金輸入用控制項 /// public partial class forms_worker_ucBonusInput : Wellan.Web.UI.WUserControlBase { private bool _isHeader = true; private DbCommand cmdReadRasn; protected void Page_Load(object sender, EventArgs e) { } public bool IsHeader { get { return _isHeader; } set { _isHeader = value; if (_isHeader) MultiView1.ActiveViewIndex = 1; else MultiView1.ActiveViewIndex = 0; } } /// /// 員工編號 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string Sseno { get { return lbSSENO.Text; } set { lbSSENO.Text = value; } } /// /// 員工姓名 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string SsenoName { get { return lbSSENOX.Text; } set { lbSSENOX.Text = value; } } /// /// 獎金年月 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string Yymm { get { return hfYymm.Value; } set { hfYymm.Value = value; } } /// /// 年度專案編號 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string Sspyn { get { return hfSspyn.Value; } set { hfSspyn.Value = value; } } /// /// 稅率 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string TaxRate { get { return hfTaxRate.Value; } set { hfTaxRate.Value = value; } } /// /// 獎金次數 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string BonusTimes { get { return hfBonusTimes.Value; } set { hfBonusTimes.Value = value; } } /// /// 備註 /// [Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] public string Memo { get { return txtSSC07.Text; } set { txtSSC07.Text = value; } } private DateTime YyMm { get { return Convert.ToDateTime(hfYymm.Value).AddDays(Convert.ToInt32(hfBonusTimes.Value)); } } public void Read(WQuery query) { this.Query = query; SsmsDAC ssmsDao = new SsmsDAC(Query); SsmsRecord ssmsRec = ssmsDao.SelectOne(null, YyMm, lbSSENO.Text, hfSspyn.Value, "001"); if (ssmsRec != null) { txtSSP13.Text = ssmsRec.SSP13.ToString("#########0"); lbSSS03.Text = ssmsRec.SSS03.ToString("#########0"); lbSSTOT.Text = (ssmsRec.SSP13 - ssmsRec.SSS03).ToString("#########0"); string[] values = ssmsRec.SSC07.Split('|'); if (values.Length > 1) txtSSC07.Text = values[1]; else txtSSC07.Text = ""; hfOldSSP13.Value = ssmsRec.SSP13.ToString("#########0"); } else { txtSSP13.Text = ""; lbSSS03.Text = ""; lbSSTOT.Text = ""; txtSSC07.Text = ""; hfOldSSP13.Value = ""; } } protected void GetRasnData(DbTransaction tran, string sseno, out string ssjno, out string sscno, out string ssbrh) { if (cmdReadRasn == null) { cmdReadRasn = Query.NewCommand( @"SELECT A.RANUM, A.RAJNO, A.RACNO, A.RABRH FROM RASN A INNER JOIN BPJB B ON A.RAPYN=B.BPPYN AND A.RAJNO=B.BPJNO AND A.RACNO=B.BPCNO WHERE A.RAPYN = @BPPYN AND A.RANUM=@RANUM AND ((A.RASDT <= @YYMM1 AND A.RAEDT >= @YYMM2) OR (A.RASDT <= @YYMM1 AND A.RAEDT IS NULL) OR (A.RASDT <= @YYMM1 AND A.RAEDT >= @YYMM1 AND A.RAEDT <= @YYMM2) OR (A.RASDT >= @YYMM1 AND A.RASDT <= @YYMM2 AND A.RAEDT >= @YYMM2) OR (A.RASDT >= @YYMM1 AND A.RASDT <= @YYMM2 AND A.RAEDT IS NULL) OR (A.RASDT >= @YYMM1 AND A.RASDT <= @YYMM2 AND A.RAEDT >= @YYMM1 AND A.RAEDT <= @YYMM2)) ORDER BY A.RANUM"); cmdReadRasn.Parameters.Add(Query.NewParameter("BPPYN", hfSspyn.Value)); cmdReadRasn.Parameters.Add(Query.NewParameter("RANUM", DbType.String)); cmdReadRasn.Parameters.Add(Query.NewParameter("YYMM1", WGuard1.GetMonthBegin(Convert.ToDateTime(hfYymm.Value), 0))); cmdReadRasn.Parameters.Add(Query.NewParameter("YYMM2", WGuard1.GetMonthEnd(Convert.ToDateTime(hfYymm.Value), 0))); } cmdReadRasn.Parameters["RANUM"].Value = sseno; DataTable rasn; if (tran != null) { cmdReadRasn.Connection = tran.Connection; cmdReadRasn.Transaction = tran; rasn = Query.Select(tran.Connection, cmdReadRasn); } else { rasn = Query.Select(cmdReadRasn); } if (rasn.Rows.Count > 0) { ssjno = rasn.Rows[0]["RAJNO"].ToString(); sscno = rasn.Rows[0]["RACNO"].ToString(); ssbrh = rasn.Rows[0]["RABRH"].ToString(); } else { ssjno = ""; sscno = ""; ssbrh = ""; } } // 計算所得稅,若小於 WSetR(Query, "UNBONUSTAXFREE", 1) 的設定,則免稅 private int CalculateTax(int amt) { double taxRate = Convert.ToDouble(hfTaxRate.Value); string s = WGuard1.WSetR(Query, "UNBONUSTAXFREE", 1).Trim(); int taxFreeBoundry; if (s.Length == 0) taxFreeBoundry = 2000; else taxFreeBoundry = Convert.ToInt32(s); /* 原先使用稅額小於 taxFreeBoundry 才免稅,改成金額小於 taxFreeBoundry 免稅 int tax = Convert.ToInt32(Math.Round(amt * taxRate, 0, MidpointRounding.AwayFromZero)); if (tax < taxFreeBoundry) return 0; else return tax; */ if (amt <= taxFreeBoundry) return 0; else return Convert.ToInt32(Math.Round(amt * taxRate, 0, MidpointRounding.AwayFromZero)); } public void Save(DbTransaction tran, WQuery query) { this.Query = query; DateTime aYymm = YyMm; SsmsDAC ssmsDao = new SsmsDAC(Query); SsmsRecord ssmsRec; // 新增 if (hfOldSSP13.Value.Length == 0 && txtSSP13.Text.Trim().Length > 0) { ssmsRec = new SsmsRecord(); ssmsRec.SSPYN = hfSspyn.Value; ssmsRec.SSENO = lbSSENO.Text; ssmsRec.SSYMM = aYymm; ssmsRec.SSP13 = Convert.ToInt32(txtSSP13.Text.Trim()); ssmsRec.SSS03 = CalculateTax(ssmsRec.SSP13); ssmsRec.SSC07 = hfTaxRate.Value + "|" + txtSSC07.Text; ssmsDao.InsertOne(tran, ssmsRec); } // 更正 else if (hfOldSSP13.Value.Length > 0 && txtSSP13.Text.Trim().Length > 0) { ssmsRec = new SsmsRecord(); ssmsRec.SSPYN = hfSspyn.Value; ssmsRec.SSENO = lbSSENO.Text; ssmsRec.SSYMM = aYymm; ssmsRec.SSITM = "001"; ssmsRec.SSP13 = Convert.ToInt32(txtSSP13.Text.Trim()); ssmsRec.SSS03 = CalculateTax(ssmsRec.SSP13); ssmsRec.SSC07 = hfTaxRate.Value + "|" + txtSSC07.Text; ssmsDao.UpdateOne(tran, ssmsRec); } // 刪除 else if (hfOldSSP13.Value.Length > 0 && txtSSP13.Text.Trim().Length == 0) { ssmsDao.DeleteOne(tran, aYymm, lbSSENO.Text, hfSspyn.Value, "001"); } } public bool CheckInput() { lbMessage.Visible = false; lbMessage.Text = ""; if (txtSSP13.Text.Trim().Length > 0) { int i; if (!int.TryParse(txtSSP13.Text.Trim(), out i)) { lbMessage.Visible = true; lbMessage.Text = "請輸入正確的金額"; return false; } return true; } else { return true; } } }