1007 lines
36 KiB
C#
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);
|
|
}
|
|
}
|