Files
thinkyu/Web/forms/flow/fmRparManager.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

914 lines
34 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;
using System.Net.Mail;
using System.Transactions;
/// <summary>
/// 人員出缺勤紀錄 (員工自行輸入)
/// 請假處理
/// 加班處理
/// 電話費處理
/// 油料費處理
/// 差勤處理
/// </summary>
public partial class forms_manager_fmRpar : Wellan.Web.UI.WUserControlBase
{
private string _RPPYN = "";
private int _YY = 0;
private string select =
@"SELECT TRDAT, TRMOD, TRUSR, RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP,
RPFTR, RPDOC, RPRSN, RPAGM, RPPLC, APPNO, RPAPP, RPAPD, RPAPU, RPADT, RPAPN,
RPANO, RPAGT, RPRTM, RPETM, RPUST, RPFPC, RPFAD, RPKMS,
FLOOR(RPTCT / 60) AS RPTCT, RPTCT - FLOOR(RPTCT / 60) * 60 AS RPTMT,
FLOOR(RPTC1 / 60) AS RPTC1, RPTC1 - FLOOR(RPTC1 / 60) * 60 AS RPTM1,
FLOOR(RPTC2 / 60) AS RPTC2, RPTC2 - FLOOR(RPTC2 / 60) * 60 AS RPTM2,
FLOOR(RPTC3 / 60) AS RPTC3, RPTC3 - FLOOR(RPTC3 / 60) * 60 AS RPTM3 ";
private string from = " FROM RPAR ";
private FormView RPARForm;
private Panel RPARPanel;
private string rparType;
private BpsnDAC bpsnDao;
private RparDAC rparDao;
private DbConnection conn;
private string oldRPTYP;
private BhrdDAC bhrdDao;
private RpadDAC rpadDao;
private RyerDAC ryerDao;
private string _RPREN;
private string _RPSTP;
private string _RPEDP;
private GetData _getData;
private DateTime 關帳日期;
private int 可用補休;
private int 可用特休;
private TimeCalc timeCalc = new TimeCalc();
private bool 時數計算至小時;
public bool 可編輯
{
get;
set;
}
public string 單號
{
get { return _RPREN; }
set { _RPREN = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
_RPREN = WDAC.GetStringValue(ViewState["RPREN"]);
_RPSTP = WDAC.GetStringValue(ViewState["RPSTP"]);
_RPEDP = WDAC.GetStringValue(ViewState["RPEDP"]);
//if (IsPostBack)
//{
// gvRPAD.DataBind();
//}
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dsRPARForm.ConnectionString = ConnectionString;
dsRPAR_RPTYP.ConnectionString = ConnectionString;
bpsnDao = new BpsnDAC(Query);
rparDao = new RparDAC(Query);
bhrdDao = new BhrdDAC(Query);
rpadDao = new RpadDAC(Query);
ryerDao = new RyerDAC(Query);
/*
_RPPYN = WDAC.GetStringValue(ViewState["RPPYN"]);
if (_RPPYN == null || _RPPYN.Length == 0)
{
_RPPYN = bpsnDao.GetCurrentProject(UserId);
if (_RPPYN == null || _RPPYN.Length == 0)
_RPPYN = "000000001";
ViewState["RPPYN"] = _RPPYN;
}
*/
rparType = GetStringParam("type");
dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = rparType + "%";
_YY = GetIntParam("YY");
// 取得時數計算至小時
_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.BPOTT == "1";
// 取得上下班時間、午休時間設定資料
//上班時間 = WGuard1.WSetR("UNRPARTIME", 1);
//下班時間 = WGuard1.WSetR("UNRPARTIME", 2);
//午休開始 = WGuard1.WSetR("UNRPARTIME", 3);
//午休結束 = WGuard1.WSetR("UNRPARTIME", 4);
//上班分鐘數 = TimeCalc.計算分鐘數(上班時間, 下班時間) - TimeCalc.計算分鐘數(午休開始, 午休結束);
//午休分鐘數 = TimeCalc.計算分鐘數(午休開始, 午休結束);
// 補休時數
GetHours(DateTime.UtcNow.AddHours(8).Date);
Search();
}
// 查詢動作
private new void Search()
{
switch (rparType)
{
case RPAR_TYPE.T0_請假:
RPARForm = RPARForm0;
RPARPanel = Panel1;
break;
case RPAR_TYPE.T1_加班:
RPARForm = RPARForm1;
RPARPanel = Panel2;
break;
case RPAR_TYPE.T3_出差:
RPARForm = RPARForm3;
RPARPanel = Panel3;
break;
}
RPARForm.Visible = true;
RPARPanel.Visible = true;
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", UserId));
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"];
}
*/
// 電話費、油料費,填入類別
/*
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 = Convert.ToInt32(e.Command.Parameters["@RPTCT"].Value);
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);
e.Command.Parameters["@RPADT"].Value = DateTime.UtcNow.AddHours(8).Date;
e.Command.Parameters["@RPAPN"].Value = "2";
string 起時;
string 迄時;
switch (rparType)
{
case RPAR_TYPE.T0_請假: // 請假,要計算缺勤扣款與請假時數
// 計算請假時數
DateTime rpedt = Convert.ToDateTime(e.Command.Parameters["@RPEDT"].Value);
起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
rptct = timeCalc.計算請假總時數(rpnum, rprdt, rpedt, 起時, 迄時, rptyp, bpott == "1");
e.Command.Parameters["@RPTCT"].Value = rptct;
// 計算請假扣款
Absent absent = new Absent();
absent.bpsrm = bpsrm;
absent.bpp02 = bpp02;
absent.Formula = bplve;
// e.Command.Parameters["@RPFTR"].Value = absent.Add(rptyp, rptct);
e.Command.Parameters["@RPFTR"].Value = absent.Add(rpnum, rptyp, rprdt, rpedt, 起時, 迄時, rprdt, rpedt, bpott == "1");
// 若請假 >= 3 天,要批三關
/*
if ((rpedt.Date - rprdt.Date).Days + 1 >= 3)
e.Command.Parameters["@RPAPN"].Value = "3";
*/
break;
case RPAR_TYPE.T1_加班: // 加班,要計算加班費與前二、後二、假日加班時數
// 計算加班時數
起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
rptct = timeCalc.計算加班時數(rpnum, rprdt, 起時, 迄時, RPAR_TYPE.休息日加班(rptyp));
e.Command.Parameters["@RPTCT"].Value = rptct;
// 計算加班費以及前二、後二、假日加班時數
int RPTC1 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC1"].Value) * 60;
int RPTC2 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC2"].Value) * 60;
int RPTC3 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC3"].Value) * 60;
int RPTC4 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC4"].Value) * 60;
int RPTC5 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC5"].Value) * 60;
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;
if (rptct < RPTC1 + RPTC2 + RPTC3 + RPTC4 + RPTC5)
{
cvMessage.IsValid = false;
cvMessage.ErrorMessage = "各項時數之和 不可大於 加班時數!";
e.Cancel = true;
}
ExtraWork extraWork = new ExtraWork();
extraWork.Add(rptyp, rprdt, rptct, bpsrm, bpp02, bpbft, bpaft, bphol, bpovr, bpott, RPTC1, RPTC2, RPTC3, RPTC4, RPTC5);
e.Command.Parameters["@RPFTR"].Value =
extraWork.RPTA1 + extraWork.RPTA2 + extraWork.RPTA3 + extraWork.RPTA4 + extraWork.RPTA5;
e.Command.Parameters["@RPTA1"].Value = extraWork.RPTA1;
e.Command.Parameters["@RPTA2"].Value = extraWork.RPTA2;
e.Command.Parameters["@RPTA3"].Value = extraWork.RPTA3;
e.Command.Parameters["@RPTA4"].Value = extraWork.RPTA4;
e.Command.Parameters["@RPTA5"].Value = extraWork.RPTA5;
e.Command.Parameters["@RPUST"].Value = 0;
break;
case RPAR_TYPE.T3_出差:
rpedt = Convert.ToDateTime(e.Command.Parameters["@RPEDT"].Value);
起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
rptct = timeCalc.計算差旅時數(rpnum, rprdt, rpedt, 起時, 迄時);
e.Command.Parameters["@RPTCT"].Value = rptct;
break;
}
}
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);
int 新時數 = WDAC.GetInt32Value(e.Command.Parameters["@RPTCT"].Value);
// 如果是請假
if (rparType == RPAR_TYPE.T0_請假)
{
// 舊資料如果是補休,要取消沖補休
if (oldRPTYP == RPAR_TYPE.T00_補休)
{
rparDao.取消沖補休(tran, _RPREN);
}
// 舊資料如果是特休,要取消沖特休
if (oldRPTYP == RPAR_TYPE.T01_特休)
{
ryerDao.取消沖特休(tran, _RPREN);
}
// 新資料如果是補休,要沖補休
if (新類別 == RPAR_TYPE.T00_補休)
{
e.Command.Parameters["@RPDOC"].Value =
rparDao.沖補休(tran, _RPREN, UserId, 新日期, 新時數);
}
// 新資料如果是特休,要沖特休
if (新類別 == RPAR_TYPE.T01_特休)
{
ryerDao.沖特休(UserId, 新日期.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 RPARForm_ItemCommand(object sender, FormViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Cancel":
Search();
RPARForm.ChangeMode(FormViewMode.ReadOnly);
RPARForm_ModeChanged(sender, e);
break;
case "Detail": // 差旅費
pnlRPAD.Visible = !pnlRPAD.Visible;
if (pnlRPAD.Visible)
{
_RPREN = WDAC.GetStringValue(e.CommandArgument);
ViewState["RPREN"] = _RPREN;
_RPSTP = bpsnDao.GetCurrentSite(UserId);
if (_RPSTP.EndsWith("站") || _RPSTP.EndsWith("台"))
_RPSTP = _RPSTP.Substring(0, _RPSTP.Length - 1);
ViewState["RPSTP"] = _RPSTP;
_RPEDP = (RPARForm.FindControl("lbRPAR_RPPLC") as ITextControl).Text;
ViewState["RPEDP"] = _RPEDP;
txtRPSTP.Text = _RPSTP;
txtRPEDP.Text = _RPEDP;
gvRPAD.DataBind();
}
break;
}
}
protected void RPARForm_ModeChanged(object sender, EventArgs e)
{
switch (RPARForm.CurrentMode)
{
case FormViewMode.Edit:
pnlRPAD.Visible = false;
break;
}
}
protected void RPARForm_ModeChanging(object sender, FormViewModeEventArgs e)
{
OldMode = (sender as FormView).CurrentMode;
}
private void GetHours(DateTime rprdt)
{
可用補休 = rparDao.Get可用補休(UserId, rprdt);
可用特休 = ryerDao.Get可用特休(UserId, rprdt.Year, rprdt.Month, rprdt.Day);
lb可用補休.Text = (可用補休 / 60).ToString();
lb可用特休.Text = (可用特休 / 60).ToString();
}
protected void RPARForm_DataBound(object sender, EventArgs e)
{
switch (RPARForm.CurrentMode)
{
case FormViewMode.Edit:
(RPARForm.FindControl("lbRPAR_RPNUM") as ITextControl).Text = UserId;
(RPARForm.FindControl("lbRPAR_RPNUMX") as ITextControl).Text = UserName;
RegisterCalendarEvent(RPARForm, "btnRPAR_RPRDT_DATE", "txtRPAR_RPRDT");
RegisterCalendarEvent(RPARForm, "btnRPAR_RPEDT_DATE", "txtRPAR_RPEDT");
RegisterLookupEvent(RPARForm, "btnRPAR_RPAGT_WQRY", "txtRPAR_RPAGT",
"txtRPAR_RPAGT,txtRPAR_RPAGM", "BPSNEML",
"EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + _RPPYN + "' AND RANUM=BPENO)",
false);
SetClientFocus(RPARForm, "txtRPAR_RPRDT");
break;
case FormViewMode.ReadOnly:
if (rparType == RPAR_TYPE.T3_出差 && pnlRPAD.Visible)
{
_RPEDP = (RPARForm.FindControl("lbRPAR_RPPLC") as ITextControl).Text;
ViewState["RPEDP"] = _RPEDP;
txtRPEDP.Text = _RPEDP;
}
break;
}
GetHours(DateTime.UtcNow.AddHours(8).Date);
}
protected new bool CheckInput(System.Collections.Specialized.IOrderedDictionary values)
{
cvMessage.ErrorMessage = "";
cvMessage.IsValid = true;
//BhrdDAC bhrd = new BhrdDAC();
string rptyp = WDAC.GetStringValue(values["RPTYP"]);
string rppyn = WDAC.GetStringValue(values["RPPYN"]);
string rpnum = WDAC.GetStringValue(values["RPNUM"]);
string rpren = WDAC.GetStringValue(values["RPREN"]);
bool result = true;
switch (rparType)
{
case RPAR_TYPE.T0_請假: // 請假
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage);
values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage);
DateTime sdt = WDAC.GetDateTimeValue(values["RPRDT"]);
DateTime edt = WDAC.GetDateTimeValue(values["RPEDT"]);
string stm = WDAC.GetStringValue(values["RPRTM"]);
string etm = WDAC.GetStringValue(values["RPETM"]);
// 關帳
if (!CheckCloseAccount(rppyn, sdt, edt))
{
result = false;
cvMessage.ErrorMessage += "此月份已關帳,不可輸入單據";
cvMessage.IsValid = false;
}
// 日期
if (result && sdt > edt)
{
result = false;
cvMessage.ErrorMessage += "開始日期 不可大於 結束日期";
cvMessage.IsValid = false;
}
// 時間必須輸入
if (stm == "")
{
result = false;
cvMessage.ErrorMessage += "開始時間必須輸入";
cvMessage.IsValid = false;
}
if (etm == "")
{
result = false;
cvMessage.ErrorMessage += "結束時間必須輸入";
cvMessage.IsValid = false;
}
if (sdt == edt && stm.CompareTo(etm) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始時間必須早於結束時間";
cvMessage.IsValid = false;
}
// 假日,檢查頭尾是否為假日,但是產假不用檢查
if (rptyp != RPAR_TYPE.T05_產假 && bhrdDao.IsHoliday(UserId, sdt))
{
result = false;
cvMessage.ErrorMessage += String.Format("{0:yyyy-MM-dd} 是假日,不需請假。", sdt);
cvMessage.IsValid = false;
}
if (rptyp != RPAR_TYPE.T05_產假 && bhrdDao.IsHoliday(UserId, edt))
{
result = false;
cvMessage.ErrorMessage += String.Format("{0:yyyy-MM-dd} 是假日,不需請假。", edt);
cvMessage.IsValid = false;
}
// 計算時數
int rptct = timeCalc.計算請假總時數(rpnum, sdt, edt, stm, etm, rptyp, 時數計算至小時);
// 補休時數不足
if (rptyp == RPAR_TYPE.T00_補休 && 可用補休 < rptct)
{
result = false;
cvMessage.ErrorMessage += "補休時數不足!";
cvMessage.IsValid = false;
}
// 特休時數不足
if (rptyp == RPAR_TYPE.T01_特休 && 可用特休 < rptct)
{
result = false;
cvMessage.ErrorMessage += "特休時數不足!";
cvMessage.IsValid = false;
}
break;
case RPAR_TYPE.T1_加班: // 加班
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的日期", ref result, cvMessage);
sdt = WDAC.GetDateTimeValue(values["RPRDT"]);
edt = WDAC.GetDateTimeValue(values["RPEDT"]);
stm = WDAC.GetStringValue(values["RPRTM"]);
etm = WDAC.GetStringValue(values["RPETM"]);
// 計算時數
rptct = timeCalc.計算加班時數(UserId, sdt, stm, etm, RPAR_TYPE.休息日加班(rparType));
// 關帳檢查
if (!CheckCloseAccount(rppyn, values["RPRDT"], new DateTime()))
{
result = false;
cvMessage.ErrorMessage += "此月份已關帳,不可輸入單據";
cvMessage.IsValid = false;
}
// 時間必須輸入
if (stm == "")
{
result = false;
cvMessage.ErrorMessage += "開始時間必須輸入";
cvMessage.IsValid = false;
}
if (etm == "")
{
result = false;
cvMessage.ErrorMessage += "結束時間必須輸入";
cvMessage.IsValid = false;
}
if (sdt == edt && stm.CompareTo(etm) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始時間必須早於結束時間";
cvMessage.IsValid = false;
}
// 檢查休息日加班
if (RPAR_TYPE.休息日加班(rptyp))
{
string message;
if (!rparDao.檢查休息日加班(rpnum, sdt, rpren, out message))
{
result = false;
cvMessage.ErrorMessage = message;
cvMessage.IsValid = false;
}
}
// 全月加班時數限制 46 小時
var ot_time = rparDao.Select當月加班時數(sdt, UserId, rpren) + rptct;
if (ot_time > 46 * 60)
{
result = false;
cvMessage.ErrorMessage = "加班日的同月加班時數已超過 46 小時";
cvMessage.IsValid = false;
}
// 計算加班時數
//rptct = timeCalc.計算加班時數(rpnum, WDAC.GetDateTimeValue(values["RPRDT"]), stm, etm, false);
//int 前二 = WDAC.GetInt32Value(values["RPTC1"]) * 60;
//int 後二 = WDAC.GetInt32Value(values["RPTC2"]) * 60;
//int 假日 = WDAC.GetInt32Value(values["RPTC3"]) * 60;
//if (rptct < 前二 + 後二 + 假日)
//{
// result = false;
// cvMessage.ErrorMessage = "前二時數 + 後二時數 + 假日時數 不可大於 加班時數!";
// cvMessage.IsValid = false;
//}
break;
case RPAR_TYPE.T3_出差: // 差旅
values["RPRDT"] = CheckDate(values["RPRDT"], "請輸入正確的開始日期", ref result, cvMessage);
values["RPEDT"] = CheckDate(values["RPEDT"], "請輸入正確的結束日期", ref result, cvMessage);
sdt = WDAC.GetDateTimeValue(values["RPRDT"]);
edt = WDAC.GetDateTimeValue(values["RPEDT"]);
stm = WDAC.GetStringValue(values["RPRTM"]);
etm = WDAC.GetStringValue(values["RPETM"]);
// 關帳檢查
if (!CheckCloseAccount(rppyn, values["RPRDT"], values["RPEDT"]))
{
result = false;
cvMessage.ErrorMessage += "此月份已關帳,不可輸入單據";
cvMessage.IsValid = false;
}
if (result && Convert.ToDateTime(values["RPRDT"]).CompareTo(values["RPEDT"]) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始日期 不可大於 結束日期";
cvMessage.IsValid = false;
}
// 時間必須輸入
if (stm == "")
{
result = false;
cvMessage.ErrorMessage += "開始時間必須輸入";
cvMessage.IsValid = false;
}
if (etm == "")
{
result = false;
cvMessage.ErrorMessage += "結束時間必須輸入";
cvMessage.IsValid = false;
}
if (sdt == edt && stm.CompareTo(etm) > 0)
{
result = false;
cvMessage.ErrorMessage += "開始時間必須早於結束時間";
cvMessage.IsValid = false;
}
if (WDAC.GetStringValue(values["RPPLC"]).Trim().Length == 0)
{
result = false;
cvMessage.ErrorMessage += "差旅地點必須輸入";
cvMessage.IsValid = false;
}
if (WDAC.GetStringValue(values["RPRSN"]).Trim().Length == 0)
{
result = false;
cvMessage.ErrorMessage += "差旅事由必須輸入";
cvMessage.IsValid = false;
}
break;
}
ProcessCustomValidatorMessage(cvMessage);
return result;
}
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 RPARForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
Search();
}
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)
{
args.IsValid = args.Value != "" && bpsnDao.IsExist(args.Value, true);
}
protected void btnInsertRPAD_Click(object sender, EventArgs e)
{
DateTime rpdat;
CheckDate(txtRPDAT.Text, out rpdat);
rpadDao.InsertOne(UserId, _RPREN, txtRPSTP.Text, txtRPEDP.Text,
WDAC.GetInt32Value(txtRPF01.Text),
WDAC.GetInt32Value(txtRPF02.Text),
WDAC.GetInt32Value(txtRPF03.Text),
WDAC.GetInt32Value(txtRPF04.Text),
WDAC.GetInt32Value(txtRPF05.Text),
WDAC.GetInt32Value(txtRPF06.Text),
WDAC.GetInt32Value(txtRPF07.Text),
WDAC.GetInt32Value(txtRPF08.Text),
0,
0,
rpdat,
txtRPVCH.Text,
txtRPDOC.Text);
gvRPAD.DataBind();
RPARForm.DataBind();
txtRPDAT.Text = "";
txtRPSTP.Text = _RPSTP;
txtRPEDP.Text = _RPEDP;
txtRPF01.Text = "";
txtRPF02.Text = "";
txtRPF03.Text = "";
txtRPF04.Text = "";
txtRPF05.Text = "";
txtRPF06.Text = "";
txtRPF07.Text = "";
txtRPF08.Text = "";
txtRPVCH.Text = "";
txtRPDOC.Text = "";
}
protected void dsRpad_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
e.ObjectInstance = rpadDao;
}
protected void dsRpad_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
//_RPREN = WDAC.GetStringValue(ViewState["RPREN"]);
e.InputParameters["rpren"] = _RPREN;
}
protected void dsRpad_Updated(object sender, ObjectDataSourceStatusEventArgs e)
{
RPARForm.DataBind();
}
protected void dsRpad_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
{
RPARForm.DataBind();
}
protected void btnHideRPAD_Click(object sender, EventArgs e)
{
pnlRPAD.Visible = false;
}
/// <summary>
/// 關帳檢查
/// </summary>
/// <param name="rprdt">起始日</param>
/// <param name="rpedt">結束日</param>
/// <returns>True=通過檢查, False=不通過檢查</returns>
protected bool CheckCloseAccount(object rppyn, object rprdt, object rpedt)
{
DateTime rdt = WDAC.GetDateTimeValue(rprdt);
DateTime edt = WDAC.GetDateTimeValue(rpedt);
_getData = new GetData();
_getData.Query = Query;
BPAARecord bpaaRecord = new BPAARecord();
DataTable bpaa = _getData.GetBPAA_BPPYN(WDAC.GetStringValue(rppyn));
if (bpaa.Rows.Count == 0)
{
return false;
}
bpaaRecord.FillRecord(bpaa.Rows[0]);
// 關帳日期 = bpaaRecord.BPMSD.AddMonths(1).AddDays(-1);
關帳日期 = bpaaRecord.BPMSD;
if (edt.Ticks != 0)
return (關帳日期 < rdt && 關帳日期 < edt);
else
return (關帳日期 < rdt);
}
/// <summary>
/// 是否可編輯
/// </summary>
/// <param name="rprdt">起始日</param>
/// <param name="rpedt">結束日</param>
/// <param name="rpano">已簽核次數</param>
/// <returns></returns>
protected bool CanEdit(object rppyn, object rprdt, object rpedt, object rpano, object rpapd)
{
string ano = WDAC.GetStringValue(rpano);
DateTime apd = WDAC.GetDateTimeValue(rpapd);
return CheckCloseAccount(rppyn, rprdt, rpedt) && (ano == "1") && (apd.Ticks == 0);
}
/// <summary>
/// 是否可編輯
/// </summary>
/// <param name="rpren">單號</param>
protected bool CanEdit(object rpren)
{
if (rpren == null)
return false;
RPARList d = rparDao.SelectOne(WDAC.GetStringValue(rpren));
if (d.Count > 0)
return CanEdit(d[0].RPPYN, d[0].RPRDT, d[0].RPEDT, d[0].RPANO, d[0].RPAPD);
else
return false;
}
protected void dsBSGP_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["BSPYN"] = _RPPYN;
}
protected new string GetBPNME(object RPENO)
{
string rpeno = WDAC.GetStringValue(RPENO);
if (rpeno.Length > 0 && rpeno.Substring(0, 1) == "Z")
{
return GetLookup("BPAP", rpeno, "BPNME", "");
}
else
{
return GetLookup("BPSN", rpeno, "BPNME", "");
}
}
protected void gvRPAD_DataBound(object sender, EventArgs e)
{
//btnInsertRPAD.Enabled = CanEdit(RPARGrid.SelectedValue);
}
protected void dsRpad_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
DateTime rpdat;
CheckDate(WDAC.GetStringValue(e.InputParameters["rpdat"]), out rpdat);
e.InputParameters["rpdat"] = rpdat;
e.InputParameters["rpf09"] = 0;
e.InputParameters["rpf10"] = 0;
}
protected void dsBPSE_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
switch (rparType)
{
case RPAR_TYPE.T1_加班:
e.InputParameters["BPTYP"] = "加班";
break;
case RPAR_TYPE.T3_出差:
e.InputParameters["BPTYP"] = "差旅";
break;
}
}
protected string GetPhraseClientClick(object BPCNT)
{
string CID = "";
switch (rparType)
{
case RPAR_TYPE.T1_加班:
CID = (RPARForm1.FindControl("txtRPAR_RPDOC") as Control).ClientID;
break;
case RPAR_TYPE.T3_出差:
CID = (RPARForm3.FindControl("txtRPAR_RPDOC") as Control).ClientID;
break;
}
if (CID.Length > 0)
return String.Format("javascript:FillMessage(\"{0}\", \"{1}\");return false;", CID, BPCNT);
else
return "javascript:return false;";
}
protected string Get關卡名稱(object RPANO, object RPAPN)
{
string rpano = WDAC.GetStringValue(RPANO);
string rpapn = WDAC.GetStringValue(RPAPN);
if (rpano == "1")
return "第 1 關";
else if ((rpano == "2" && rpapn == "2") || (rpano == "3" && rpapn == "3"))
return "第 2 關";
else if (rpano == "3" && rpapn == "2")
return "長官關";
else if (rpano == "D")
return "抽單";
else
return rpano;
}
protected void dsRPARForm_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["RPREN"].Value = _RPREN;
}
protected string GetAttachLink(string RPREN)
{
return RparDAC.GetAttachLink(RPREN, Page);
//string f = string.Format("{0}\\{1}.jpg", Server.MapPath("~/UploadedPicture/RPAR_ATTACHMENT"), RPREN);
//if (File.Exists(f))
// return string.Format("<a href='{0}{1}.jpg' target='_blank'>附件檢視</a>",
// ResolveClientUrl("~/UploadedPicture/RPAR_ATTACHMENT/"), RPREN);
//else
// return "無附件";
}
}