Files
thinkyu/Web/forms/worker/fmRpar.ascx.cs
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

1007 lines
36 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_worker_fmRpar : Wellan.Web.UI.WUserControlBase
{
private string _RPPYN = "";
private string _RPNUM1 = "";
private string _RPNUM2 = "";
private string _RPRDT1 = "";
private string _RPRDT2 = "";
private int _YY = 0;
private string select =
@"SELECT TRDAT, TRMOD, TRUSR, RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP, FLOOR(RPTCT / 60) AS RPTCT, RPFTR, RPDOC,
APPNO, RPAPP, RPAPD, RPAPU, RPADT, RPAPN, RPANO, RPAGT, RPRTM, RPETM, RPUST, RPTC1, RPTC2, RPTC3,
RPRSN, RPAGM, ISNULL(RPTCT - FLOOR(RPTCT / 60) * 60, 0) AS RPTMT";
private string from = " FROM RPAR ";
private string where = " WHERE 1=1 ";
private string order = " ORDER BY RPREN";
private FormView RPARForm;
private Panel RPARPanel;
protected string rparType;
private BPSN_DAC bpsn;
private int 可用補休;
private int 可用特休;
private RparDAC rparDao;
private RyerDAC ryerDao;
private DbConnection conn;
private string _RPREN;
private string oldRPTYP;
private GetData _getData;
private DateTime 關帳日期;
protected bool OverTimeToMinute;
protected void Page_Load(object sender, EventArgs e)
{
_RPNUM1 = ViewState["RPNUM1"] != null ? ViewState["RPNUM1"].ToString() : "";
_RPNUM2 = ViewState["RPNUM2"] != null ? ViewState["RPNUM2"].ToString() : "";
_RPRDT1 = ViewState["RPRDT1"] != null ? ViewState["RPRDT1"].ToString() : "";
_RPRDT2 = ViewState["RPRDT2"] != null ? ViewState["RPRDT2"].ToString() : "";
//if (IsPostBack)
//{
// RPARGrid.DataBind();
//}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dsRPARForm.ConnectionString = ConnectionString;
dsRPARGrid.ConnectionString = ConnectionString;
dsRPAR_RPTYP.ConnectionString = ConnectionString;
rparDao = new RparDAC(Query);
ryerDao = new RyerDAC(Query);
_RPPYN = GetStringParam("RPPYN");
rparType = GetStringParam("type");
dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = rparType + "%";
_YY = GetIntParam("YY");
switch (rparType)
{
case RPAR_TYPE.T0_請假:
RPARForm = RPARForm0;
RPARPanel = Panel0;
break;
case RPAR_TYPE.T1_加班:
RPARForm = RPARForm1;
RPARPanel = Panel1;
break;
case RPAR_TYPE.T21_電話費:
RPARForm = RPARForm21;
RPARPanel = Panel21;
break;
case RPAR_TYPE.T22_油料費:
RPARForm = RPARForm22;
RPARPanel = Panel22;
break;
case RPAR_TYPE.T3_出差:
RPARForm = RPARForm3;
RPARPanel = Panel3;
break;
}
if (_YY > 0)
{
txtYY.Text = _YY.ToString();
ddlRPPYN.DataSource = new BpaaDAC().GetBpaaWithTY(_YY + WGuard1.CY11);
ddlRPPYN.DataBind();
ListItem item = ddlRPPYN.Items.FindByValue(_RPPYN);
if (item != null)
item.Selected = true;
}
else
{
txtYY.Focus();
}
GetGridViewRowColor(RPARGrid);
if (_RPPYN.CompareTo("000000001") == 0)
{
RegisterLookupEvent(this, "btnRPAR_RPNUM1_WQRY", "txtRPAR_RPNUM1", "txtRPAR_RPNUM1,lbRPAR_RPNUM1X", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)");
RegisterLookupEvent(this, "btnRPAR_RPNUM2_WQRY", "txtRPAR_RPNUM2", "txtRPAR_RPNUM2,lbRPAR_RPNUM2X", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)");
}
else
{
RegisterLookupEvent(this, "btnRPAR_RPNUM1_WQRY", "txtRPAR_RPNUM1", "txtRPAR_RPNUM1,lbRPAR_RPNUM1X", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)");
RegisterLookupEvent(this, "btnRPAR_RPNUM2_WQRY", "txtRPAR_RPNUM2", "txtRPAR_RPNUM2,lbRPAR_RPNUM2X", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)");
}
RegisterCalendarEvent(this, "btnRPAR_RPRDT1_DATE", "txtRPAR_RPRDT1");
RegisterCalendarEvent(this, "btnRPAR_RPRDT2_DATE", "txtRPAR_RPRDT2");
MultiView1.Visible = _RPPYN != "";
// 取得關帳日期
if (_RPPYN != "")
{
if (_RPPYN.CompareTo("000000001") != 0)
{
_getData = new GetData();
_getData.Query = Query;
BPAARecord bpaaRecord = new BPAARecord();
DataTable bpaa = _getData.GetBPAA_BPPYN(_RPPYN);
if (bpaa.Rows.Count == 0)
{
cvMessage.IsValid = false;
cvMessage.ErrorMessage = "無此專案";
return;
}
bpaaRecord.FillRecord(bpaa.Rows[0]);
// 關帳日期 = bpaaRecord.BPMSD.AddMonths(1).AddDays(-1);
關帳日期 = bpaaRecord.BPMSD;
OverTimeToMinute = bpaaRecord.BPOTT == "2";
}
}
Search();
}
// 查詢按鈕
protected void btnSearch_Click(object sender, EventArgs e)
{
ViewState["RPNUM1"] = txtRPAR_RPNUM1.Text;
ViewState["RPNUM2"] = txtRPAR_RPNUM2.Text;
ViewState["RPRDT1"] = txtRPAR_RPRDT1.Text;
ViewState["RPRDT2"] = txtRPAR_RPRDT2.Text;
_RPNUM1 = txtRPAR_RPNUM1.Text;
_RPNUM2 = txtRPAR_RPNUM2.Text;
_RPRDT1 = txtRPAR_RPRDT1.Text;
_RPRDT2 = txtRPAR_RPRDT2.Text;
if (_RPNUM1.Length == 0 &&
_RPNUM2.Length == 0 &&
_RPRDT1.Length == 0 &&
_RPRDT2.Length == 0)
{
lbMessage.Text = GetString("NOSRHCOND");
lbMessage.Visible = true;
}
else
{
MultiView1.ActiveViewIndex = 1;
Search();
RPARGrid.PageIndex = 0;
RPARGrid.SelectedIndex = 0;
RPARGrid.DataBind();
}
}
// 查詢取消按鈕
protected void btnCancel_Click(object sender, EventArgs e)
{
MultiView1.ActiveViewIndex = 1;
}
// 查詢動作
private new void Search()
{
if (MultiView1.ActiveViewIndex == 1)
{
where = " WHERE ((RPAPN IS NULL) OR ((RPAPN<>'D') AND (RPAPN=RPANO))) ";
// where = " WHERE 1=1 ";
switch (rparType)
{
case RPAR_TYPE.T0_請假:
WLabel1.Text = GetString("FMRPAR00.NAME");
where += " AND RPTYP LIKE '0%' ";
RPARForm = RPARForm0;
RPARPanel = Panel0;
RPARGrid.Columns[3].HeaderText = "開始日期";
(RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}";
RPARGrid.Columns[4].HeaderText = "結束日期";
RPARGrid.Columns[4].Visible = true;
RPARGrid.Columns[6].HeaderText = "時數";
RPARGrid.Columns[6].Visible = true;
RPARGrid.Columns[7].Visible = false;
break;
case RPAR_TYPE.T1_加班:
WLabel1.Text = GetString("FMRPAR01.NAME");
where += " AND RPTYP LIKE '1%' ";
RPARForm = RPARForm1;
RPARPanel = Panel1;
RPARGrid.Columns[3].HeaderText = "日期";
(RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}";
RPARGrid.Columns[4].HeaderText = "日期";
RPARGrid.Columns[4].Visible = false;
RPARGrid.Columns[6].HeaderText = "時數";
RPARGrid.Columns[6].Visible = true;
RPARGrid.Columns[7].HeaderText = "加班費";
RPARGrid.Columns[7].Visible = true;
break;
case RPAR_TYPE.T21_電話費:
WLabel1.Text = GetString("FMRPAR021.NAME");
where += " AND RPTYP = '21' ";
RPARForm = RPARForm21;
RPARPanel = Panel21;
RPARGrid.Columns[3].HeaderText = "年月";
(RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMM}";
RPARGrid.Columns[4].HeaderText = "年月";
RPARGrid.Columns[4].Visible = false;
RPARGrid.Columns[6].Visible = false;
RPARGrid.Columns[7].HeaderText = "電話費";
RPARGrid.Columns[7].Visible = true;
break;
case RPAR_TYPE.T22_油料費:
WLabel1.Text = GetString("FMRPAR022.NAME");
where += " AND RPTYP = '22' ";
RPARForm = RPARForm22;
RPARPanel = Panel22;
RPARGrid.Columns[3].HeaderText = "年月";
(RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMM}";
RPARGrid.Columns[4].HeaderText = "年月";
RPARGrid.Columns[4].Visible = false;
RPARGrid.Columns[6].HeaderText = "公里數";
RPARGrid.Columns[6].Visible = true;
RPARGrid.Columns[7].HeaderText = "費用";
RPARGrid.Columns[7].Visible = true;
break;
case RPAR_TYPE.T3_出差:
WLabel1.Text = GetString("FMRPAR03.NAME");
where += " AND RPTYP LIKE '3%' ";
RPARForm = RPARForm3;
RPARPanel = Panel3;
RPARGrid.Columns[3].HeaderText = "開始日期";
(RPARGrid.Columns[3] as BoundField).DataFormatString = "{0:yyyyMMdd}";
RPARGrid.Columns[4].HeaderText = "結束日期";
RPARGrid.Columns[4].Visible = true;
RPARGrid.Columns[6].Visible = false;
RPARGrid.Columns[7].HeaderText = "差旅費";
RPARGrid.Columns[7].Visible = true;
break;
}
RPARPanel.Visible = true;
// RPARForm.Visible = true;
}
StringBuilder sql = new StringBuilder();
sql.Append(select);
sql.Append(from);
sql.Append(where);
dsRPARGrid.SelectParameters.Clear();
DateTime RPRDT1, RPRDT2;
CheckDate(_RPRDT1, out RPRDT1);
CheckDate(_RPRDT2, out RPRDT2);
AddSearch(sql, dsRPARGrid, "RPPYN", _RPPYN, "", false);
AddSearch(sql, dsRPARGrid, "RPNUM", _RPNUM1, _RPNUM2, true);
AddSearch(sql, dsRPARGrid, "RPRDT", RPRDT1, RPRDT2, true);
sql.Append(order);
dsRPARGrid.SelectCommand = sql.ToString();
dsRPARForm.SelectCommand = select + from + " WHERE RPREN=@RPREN ";
}
private new void CalcFields(SqlDataSourceCommandEventArgs e)
{
/*
// 藉由人員編號以及日期,找出相應的派遣紀錄,填入相關欄位
DbCommand cmd = Query.NewCommand("SELECT TOP 1 RAITM, RACNM, RAPYN FROM RASN WHERE RANUM=@RPNUM AND ((RASDT <= @RPRDT AND RAEDT >= @RPRDT) OR (RASDT <= @RPRDT AND RAEDT IS NULL)) ORDER BY RAITM");
cmd.Parameters.Add(Query.NewParameter("RPNUM", e.Command.Parameters["@RPNUM"].Value));
cmd.Parameters.Add(Query.NewParameter("RPRDT", e.Command.Parameters["@RPRDT"].Value));
DataTable rasn = Query.Select(cmd);
if (rasn.Rows.Count > 0)
{
e.Command.Parameters["@RAITM"].Value = rasn.Rows[0]["RAITM"];
e.Command.Parameters["@RPCNM"].Value = rasn.Rows[0]["RACNM"];
e.Command.Parameters["@RPPYN"].Value = rasn.Rows[0]["RAPYN"];
}
*/
// 畫面上選哪一個專案,就填哪一個專案
e.Command.Parameters["@RPPYN"].Value = _RPPYN;
// 電話費、油料費,填入類別
if (rparType.StartsWith("2"))
e.Command.Parameters["@RPTYP"].Value = rparType;
// 取出計算需要的資料
string rpnum = e.Command.Parameters["@RPNUM"].Value.ToString();
string rptyp = e.Command.Parameters["@RPTYP"].Value.ToString();
// 時數存成分鐘,油料費除外
int rptct = 0;
if (rparType == RPAR_TYPE.T22_油料費)
{
rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value);
}
else if (rparType == RPAR_TYPE.T1_加班)
{
rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value) * 60 + Convert.ToInt32(e.Command.Parameters["@RPTMT"].Value);
}
else
{
rptct = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value) * 60;
}
e.Command.Parameters["@RPTCT"].Value = rptct;
int rpftr = Convert.ToInt32(e.Command.Parameters["@RPFTR"].Value);
DateTime rprdt = Convert.ToDateTime(e.Command.Parameters["@RPRDT"].Value);
GetData calc = new GetData();
calc.Query = Query;
int bpsrm;
int bpp02;
double bpbft;
double bpaft;
double bphol;
string bpovr;
string bplve;
string bpott;
calc.GetRASN_Date_Bppyn_Bpeno_Overwork_Rate(rprdt, _RPPYN, rpnum, out bpsrm, out bpp02, out bpbft, out bpaft, out bphol, out bpovr, out bplve, out bpott);
switch (rparType)
{
case RPAR_TYPE.T0_請假: // 請假,要計算缺勤扣款
Absent absent = new Absent();
absent.bpsrm = bpsrm;
absent.bpp02 = bpp02;
absent.Formula = bplve;
e.Command.Parameters["@RPFTR"].Value = absent.Add(rptyp, rptct);
break;
case RPAR_TYPE.T1_加班: // 加班,要計算加班費
ExtraWork extraWork = new ExtraWork();
// 區分前二加班、後二加班、假日加班
int rptc1;
int rptc2;
int rptc3;
int rptc4;
int rptc5;
extraWork.SplitOverTime(rptyp, rptct, 0, out rptc1, out rptc2, out rptc3, out rptc4, out rptc5);
extraWork.Add(rptyp, rprdt, rptct, bpsrm, bpp02, bpbft, bpaft, bphol, bpovr, bpott, rptc1, rptc2, rptc3, rptc4, rptc5);
e.Command.Parameters["@RPTC1"].Value = rptc1;
e.Command.Parameters["@RPTC2"].Value = rptc2;
e.Command.Parameters["@RPTC3"].Value = rptc3;
e.Command.Parameters["@RPTC4"].Value = rptc4;
e.Command.Parameters["@RPTC5"].Value = rptc5;
e.Command.Parameters["@RPFTR"].Value =
extraWork.RPTA1 + extraWork.RPTA2 + extraWork.RPTA3 + extraWork.RPTA4 + extraWork.RPTA5;
break;
case RPAR_TYPE.T22_油料費: // 油料費,要計算補助金額
OtherFee otherFee = new OtherFee();
otherFee.Add(rptyp, rptct, rpftr);
e.Command.Parameters["@RPFTR"].Value = otherFee.FuelFee;
break;
case RPAR_TYPE.T3_出差:
break;
}
}
protected void dsRPARForm_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
CalcFields(e);
if (e.Cancel)
{
return;
}
conn = Query.NewConnection(Query.ConnectionString);
conn.Open();
tran = conn.BeginTransaction();
try
{
e.Command.Connection = conn;
e.Command.Transaction = tran;
// 產生新的單號
// 產生新的單號
_RPREN = WGuard1.WNextRen(DateTime.UtcNow.AddHours(8), "RPAR", "RPREN", "YYYYMM<9999>", "");
string RPNUM = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value);
e.Command.Parameters["@RPREN"].Value = _RPREN;
// 如果是請假
/*
if (rparType == "0")
{
switch (WDAC.GetStringValue(e.Command.Parameters["@RPTYP"].Value))
{
// 補休
case "00":
e.Command.Parameters["@RPDOC"].Value =
rparDao.沖補休(tran,
_RPREN,
RPNUM,
WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value),
WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value));
break;
// 特休
case "01":
ryerDao.沖特休(RPNUM, WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value).Year,
WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value), tran);
break;
}
}
*/
}
catch
{
tran.Rollback();
tran = null;
e.Cancel = true;
throw;
}
}
protected void dsRPARForm_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
if (tran != null)
{
tran.Commit();
tran = null;
}
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
conn = null;
}
}
protected void dsRPARForm_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
CalcFields(e);
if (e.Cancel)
return;
conn = Query.NewConnection(Query.ConnectionString);
conn.Open();
tran = conn.BeginTransaction();
try
{
e.Command.Connection = conn;
e.Command.Transaction = tran;
_RPREN = WDAC.GetStringValue(e.Command.Parameters["@RPREN"].Value);
string 新類別 = WDAC.GetStringValue(e.Command.Parameters["@RPTYP"].Value);
DateTime 新日期 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value);
string User = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value);
int 新時數 = WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value);
// 如果是請假
/*
if (rparType == "0")
{
// 舊資料如果是補休,要取消沖補休
if (oldRPTYP == "00")
{
rparDao.取消沖補休(tran, _RPREN);
}
// 舊資料如果是特休,要取消沖特休
if (oldRPTYP == "01")
{
ryerDao.取消沖特休(tran, _RPREN);
}
// 新資料如果是補休,要沖補休
if (新類別 == "00")
{
e.Command.Parameters["@RPDOC"].Value =
rparDao.沖補休(tran, _RPREN, 新User, 新日期, 新時數);
}
// 新資料如果是特休,要沖特休
if (新類別 == "01")
{
ryerDao.沖特休(新User, 新日期.Year, 新時數, tran);
}
}
*/
}
catch
{
tran.Rollback();
tran = null;
e.Cancel = true;
throw;
}
}
protected void dsRPARForm_Updated(object sender, SqlDataSourceStatusEventArgs e)
{
if (tran != null)
{
tran.Commit();
tran = null;
}
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
conn = null;
}
}
protected void dsRPARForm_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
conn = Query.NewConnection(Query.ConnectionString);
conn.Open();
tran = conn.BeginTransaction();
try
{
e.Command.Connection = conn;
e.Command.Transaction = tran;
string oldrpren = WDAC.GetStringValue(e.Command.Parameters["@OLD_RPREN"].Value);
oldRPTYP = WDAC.GetStringValue(Query.ExecuteScalar("SELECT RPTYP FROM RPAR WHERE RPREN='" + oldrpren + "'", tran));
// 如果是請假
/*
if (rparType == "0")
{
// 舊資料如果是補休,要取消沖補休
if (oldRPTYP == "00")
{
rparDao.取消沖補休(tran, oldrpren);
}
// 舊資料如果是特休,要取消沖特休
if (oldRPTYP == "01")
{
ryerDao.取消沖特休(tran, oldrpren);
}
}
*/
}
catch
{
tran.Rollback();
tran = null;
e.Cancel = true;
throw;
}
}
protected void dsRPARForm_Deleted(object sender, SqlDataSourceStatusEventArgs e)
{
if (tran != null)
{
tran.Commit();
tran = null;
}
if (conn != null && conn.State == ConnectionState.Open)
{
conn.Close();
conn.Dispose();
conn = null;
}
}
protected void RPARGrid_DataBound(object sender, EventArgs e)
{
GridView_DataBound(sender, e);
if (RPARGrid.Rows.Count > 0)
{
if (RPARGrid.SelectedIndex == -1)
RPARGrid.SelectedIndex = 0;
if (RPARGrid.SelectedIndex > RPARGrid.Rows.Count - 1)
RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1;
RPARForm.DataBind();
}
}
protected void RPARGrid_PageIndexChanged(object sender, EventArgs e)
{
Search();
RPARGrid.SelectedIndex = 0;
RPARGrid.DataBind();
}
protected void dsRPARGrid_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
if (e.AffectedRows == 0)
{
switch (MultiView1.ActiveViewIndex)
{
case 0:
lbMessage.Text = GetString("NODATA");
lbMessage.Visible = true;
break;
case 1:
RPARForm.ChangeMode(FormViewMode.Insert);
RPARForm_ModeChanged(sender, e);
break;
}
}
}
protected void RPARForm_ItemCommand(object sender, FormViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Insert":
break;
case "Edit":
break;
case "Search":
MultiView1.ActiveViewIndex = 0;
break;
case "Cancel":
Search();
RPARForm.ChangeMode(FormViewMode.ReadOnly);
RPARForm_ModeChanged(sender, e);
break;
}
}
protected void RPARForm_ItemDeleted(object sender, FormViewDeletedEventArgs e)
{
Search();
RPARGrid.DataBind();
if (RPARGrid.SelectedIndex > RPARGrid.Rows.Count - 1)
{
RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1;
RPARGrid.DataBind();
}
RPARForm.DataBind();
}
protected void RPARForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
Search();
}
protected void RPARForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
Search();
}
protected void RPARForm_ModeChanged(object sender, EventArgs e)
{
switch (RPARForm.CurrentMode)
{
case FormViewMode.ReadOnly:
RPARGrid.Visible = true;
RPARGrid.DataBind();
if (RPARGrid.Rows.Count > 0)
{
if (RPARGrid.SelectedIndex == -1)
{
RPARGrid.SelectedIndex = 0;
}
if (OldMode == FormViewMode.Insert)
{
RPARGrid.PageIndex = RPARGrid.PageCount - 1;
RPARGrid.DataBind();
RPARGrid.SelectedIndex = RPARGrid.Rows.Count - 1;
}
RPARGrid.DataBind();
RPARForm.DataBind();
}
break;
case FormViewMode.Edit:
RPARGrid.Visible = false;
break;
case FormViewMode.Insert:
RPARGrid.Visible = false;
break;
}
}
protected void RPARForm_ModeChanging(object sender, FormViewModeEventArgs e)
{
OldMode = (sender as FormView).CurrentMode;
}
private void GetHours(string user, DateTime rprdt)
{
可用補休 = rparDao.Get可用補休(user, rprdt);
可用特休 = ryerDao.Get可用特休(user, rprdt.Year, rprdt.Month, rprdt.Day);
}
protected void RPARForm_DataBound(object sender, EventArgs e)
{
switch (RPARForm.CurrentMode)
{
case FormViewMode.Edit:
if (_RPPYN.CompareTo("000000001") == 0)
{
RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)");
}
else
{
RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)");
}
RegisterCalendarEvent(RPARForm, "btnRPAR_RPRDT_DATE", "txtRPAR_RPRDT");
RegisterCalendarEvent(RPARForm, "btnRPAR_RPEDT_DATE", "txtRPAR_RPEDT");
SetClientFocus(RPARForm, "txtRPAR_RPRDT");
break;
case FormViewMode.Insert:
if (_RPPYN.CompareTo("000000001") == 0)
{
RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "NOT EXISTS (SELECT RANUM FROM RASN WHERE RANUM=BPENO AND RAEDT IS NULL)");
}
else
{
RegisterLookupEvent(RPARForm, "btnRPAR_RPNUM_WQRY", "txtRPAR_RPNUM", "txtRPAR_RPNUM,lbRPAR_RPNUMX", "BPSN1", "EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)");
}
RegisterCalendarEvent(RPARForm, "btnRPAR_RPRDT_DATE", "txtRPAR_RPRDT");
RegisterCalendarEvent(RPARForm, "btnRPAR_RPEDT_DATE", "txtRPAR_RPEDT");
switch (rparType)
{
case RPAR_TYPE.T0_請假:
(RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0";
break;
case RPAR_TYPE.T1_加班:
(RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0";
(RPARForm.FindControl("txtRPAR_RPTMT") as ITextControl).Text = "0";
break;
case RPAR_TYPE.T21_電話費:
(RPARForm.FindControl("txtRPAR_RPFTR") as ITextControl).Text = "0";
break;
case RPAR_TYPE.T22_油料費:
(RPARForm.FindControl("txtRPAR_RPTCT") as ITextControl).Text = "0";
break;
case RPAR_TYPE.T3_出差:
(RPARForm.FindControl("txtRPAR_RPFTR") as ITextControl).Text = "0";
break;
}
SetClientFocus(RPARForm, "txtRPAR_RPNUM");
break;
}
}
protected void RPARGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
SetGridViewMouseBehavier(RPARGrid, e.Row);
//GridView_RowDataBound_Shrink_ViewState(sender, e);
}
protected void RPARGrid_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (GridViewRow row in RPARGrid.Rows)
SetGridViewMouseBehavier(RPARGrid, row);
}
protected void RPARForm_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
DateTime rprdt;
DateTime rpedt;
CheckDate(WDAC.GetStringValue(e.Values["RPRDT"]), out rprdt);
CheckDate(WDAC.GetStringValue(e.Values["RPEDT"]), out rpedt);
// 刪除前檢查
// 已關帳不可刪除
if (!CheckCloseAccount(rprdt, rpedt))
{
e.Cancel = true;
cvMessage.IsValid = false;
cvMessage.ErrorMessage = "已關帳,不可刪除";
}
}
protected override bool CheckInput(System.Collections.Specialized.IOrderedDictionary values)
{
cvMessage.ErrorMessage = "";
cvMessage.IsValid = true;
BhrdDAC bhrd = new BhrdDAC();
bool result = true;
string rptyp = WDAC.GetStringValue(values["RPTYP"]);
switch (rparType)
{
case RPAR_TYPE.T0_請假: // 請假
int rptct = WDAC.GetInt32Value(values["RPTCT"]);
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage);
values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage);
if (result && Convert.ToDateTime(values["RPRDT"]).CompareTo(values["RPEDT"]) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始日期 不可大於 結束日期";
cvMessage.IsValid = false;
}
if (rptyp != RPAR_TYPE.T05_產假 && bhrd.IsHoliday(UserId, Convert.ToDateTime(values["RPRDT"])))
{
result = false;
cvMessage.ErrorMessage += "開始日期是假日,不需請假";
cvMessage.IsValid = false;
}
if (rptyp != RPAR_TYPE.T05_產假 && bhrd.IsHoliday(UserId, Convert.ToDateTime(values["RPEDT"])))
{
result = false;
cvMessage.ErrorMessage += "結束日期是假日,不需請假";
cvMessage.IsValid = false;
}
GetHours(WDAC.GetStringValue(values["RPNUM"]), WDAC.GetDateTimeValue(values["RPRDT"]));
// 補休時數不足
/*
if (rptyp == "00" && 可用補休 < rptct)
{
result = false;
cvMessage.ErrorMessage += "補休時數不足!";
cvMessage.IsValid = false;
}
// 特休時數不足
if (rptyp == "01" && 可用特休 < rptct)
{
result = false;
cvMessage.ErrorMessage += "特休時數不足!";
cvMessage.IsValid = false;
}
*/
break;
case RPAR_TYPE.T1_加班: // 加班
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的日期", ref result, cvMessage);
// 檢查一週之內只能請一天休息日加班
if (string.Format("{0},{1}", RPAR_TYPE.T13_休息日累積補休時數, RPAR_TYPE.T14_休息日請領加班費).Contains(rptyp))
{
DateTime rprdt = Convert.ToDateTime(values["RPRDT"]);
string rpren = WDAC.GetStringValue(values["RPREN"]);
// 檢查休息日加班
string message;
if (!rparDao.檢查休息日加班(UserId, rprdt, rpren, out message))
{
result = false;
cvMessage.ErrorMessage = message;
cvMessage.IsValid = false;
}
}
/*
if (!bhrd.IsHoliday(Convert.ToDateTime(values["RPRDT"])))
{
if (Convert.ToInt32(values["RPTCT"]) > 4)
{
result = false;
cvMessage.ErrorMessage += "平日加班不可超過 4 小時";
cvMessage.IsValid = false;
}
}
else
{
if (Convert.ToInt32(values["RPTCT"]) > 8)
{
result = false;
cvMessage.ErrorMessage += "假日加班不可超過 8 小時";
cvMessage.IsValid = false;
}
}
*/
break;
case RPAR_TYPE.T21_電話費: // 電話費
case RPAR_TYPE.T22_油料費: // 油料費
values["RPRDT"] = CheckDate(values["RPRDT"].ToString() + "01", "請輸入正確的年月", ref result, cvMessage);
break;
case RPAR_TYPE.T3_出差: // 差旅
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage);
values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage);
if (result && Convert.ToDateTime(values["RPRDT"]).CompareTo(values["RPEDT"]) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始日期 不可大於 結束日期";
cvMessage.IsValid = false;
}
break;
}
ProcessCustomValidatorMessage(cvMessage);
return result;
}
protected void RPARForm_ItemInserting(object sender, FormViewInsertEventArgs e)
{
if (RPARForm.FindControl("ddlRPAR_RPTYP") != null)
e.Values["RPTYP"] = (RPARForm.FindControl("ddlRPAR_RPTYP") as DropDownList).SelectedValue;
e.Cancel = !CheckInput(e.Values);
}
protected void RPARForm_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
if (RPARForm.FindControl("ddlRPAR_RPTYP") != null)
e.NewValues["RPTYP"] = (RPARForm.FindControl("ddlRPAR_RPTYP") as DropDownList).SelectedValue;
e.Cancel = !CheckInput(e.NewValues);
// 記住舊類別,以便做請補休假的判斷
oldRPTYP = WDAC.GetStringValue(e.OldValues["RPTYP"]);
}
protected void cvRPTCT_ServerValidate(object source, ServerValidateEventArgs args)
{
int i;
args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i) && i > 0;
}
protected void cvRPNUM_ServerValidate(object source, ServerValidateEventArgs args)
{
if (bpsn == null)
bpsn = new BPSN_DAC(WConfig.GetConnectionConfig(), WConfig.GetConnectionConfigName());
args.IsValid = args.Value != "" && bpsn.IsExist(args.Value, true);
}
protected void Next_Click(object sender, EventArgs e)
{
// 檢查此使用者是否有權限處理這個專案
BprmDAC bprm = new BprmDAC(Query);
if (!bprm.GetRight(ddlRPPYN.SelectedValue, UserId))
{
MultiView1.Visible = false;
cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
cvMessage.IsValid = false;
return;
}
ParamList["RPPYN"] = ddlRPPYN.SelectedValue;
DoAfterCommand("RPAR");
}
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("RPAR");
}
/// <summary>
/// 關帳檢查
/// </summary>
/// <param name="rprdt">起始日</param>
/// <param name="rpedt">結束日</param>
/// <returns>True=通過檢查, False=不通過檢查</returns>
protected bool CheckCloseAccount(object rprdt, object rpedt)
{
DateTime rdt = WDAC.GetDateTimeValue(rprdt);
DateTime edt = WDAC.GetDateTimeValue(rpedt);
if (edt.Ticks != 0)
return (關帳日期 < rdt && 關帳日期 < edt);
else
return (關帳日期 < rdt);
}
}