- RpabDAC 新增 SelectRPAB - dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件
2214 lines
82 KiB
C#
2214 lines
82 KiB
C#
using NPOI.HSSF.UserModel;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net.Mail;
|
|
using System.Text;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using Wellan.Common;
|
|
using Wellan.Data;
|
|
|
|
|
|
public partial class forms_flow_fmSign : Wellan.Web.UI.WUserControlBase
|
|
{
|
|
private RparDAC rparDao;
|
|
private RpabDAC rpabDao;
|
|
private BsgpDAC bsgpDao;
|
|
private RyerDAC ryerDao;
|
|
private RpadDAC rpadDao;
|
|
private BpsnDAC bpsnDao;
|
|
private DbConnection conn;
|
|
private BtmeDAC btmeDao;
|
|
private RtmeDAC rtmeDao;
|
|
private BhrdDAC bhrdDao;
|
|
private List<BtmeItem> BtmeList;
|
|
private List<RtmeItem> RtmeList;
|
|
private string monthBhrd;
|
|
private string[] holidayData = null;
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
btnPage4.Visible = bsgpDao.是否是主要簽核(UserId);
|
|
// btnPage5.Visible = btnPage4.Visible;
|
|
|
|
AddTabButton(MV主要, 0, btnPage1);
|
|
AddTabButton(MV主要, 1, btnPage2);
|
|
AddTabButton(MV主要, 2, btnPage3);
|
|
AddTabButton(MV主要, 3, btnPage4);
|
|
AddTabButton(MV主要, 4, btnPage5);
|
|
AddTabButton(MV主要, 5, btnPage6);
|
|
|
|
if (txtDATE1.Text.Length == 0)
|
|
txtDATE1.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 1).ToString("yyyyMMdd");
|
|
if (txtDATE2.Text.Length == 0)
|
|
txtDATE2.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 31).ToString("yyyyMMdd");
|
|
if (txtDATE3.Text.Length == 0)
|
|
txtDATE3.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 1).ToString("yyyyMMdd");
|
|
if (txtDATE4.Text.Length == 0)
|
|
txtDATE4.Text = WGuard1.WDAYTRAN(DateTime.UtcNow.AddHours(8).Date, 31).ToString("yyyyMMdd");
|
|
if (txtYear.Text.Length == 0)
|
|
txtYear.Text = DateTime.UtcNow.AddHours(8).Date.ToString("yyyy");
|
|
|
|
btmeDao = new BtmeDAC(Query);
|
|
rtmeDao = new RtmeDAC(Query);
|
|
bhrdDao = new BhrdDAC(Query);
|
|
|
|
if (txtCalendarYear.Text == "")
|
|
{
|
|
txtCalendarYear.Text = DateTime.UtcNow.AddHours(8).ToString("yyyy");
|
|
ddlCalendarMonth.SelectedValue = DateTime.UtcNow.AddHours(8).ToString("MM");
|
|
Calendar1.VisibleDate = DateTime.UtcNow.AddHours(8).Date;
|
|
StoreYYMM();
|
|
}
|
|
|
|
if (!IsPostBack)
|
|
{
|
|
cb不分頁.Checked = WGuard1.WSetR(Query, string.Format("SIGN_NP_1_{0}", UserId), 1) == "Y";
|
|
cb過濾篩選.Checked = WGuard1.WSetR(Query, string.Format("SIGN_FT_1_{0}", UserId), 1) == "Y";
|
|
|
|
if (cb不分頁.Checked)
|
|
{
|
|
cb不分頁_CheckedChanged(sender, e);
|
|
}
|
|
if (cb過濾篩選.Checked)
|
|
{
|
|
cb過濾篩選_CheckedChanged(sender, e);
|
|
}
|
|
|
|
rblRPTYP2_SelectedIndexChanged(sender, e);
|
|
}
|
|
}
|
|
|
|
protected override void OnInit(EventArgs e)
|
|
{
|
|
base.OnInit(e);
|
|
dsRPARForm.ConnectionString = ConnectionString;
|
|
dsRPAR_RPTYP.ConnectionString = ConnectionString;
|
|
rparDao = new RparDAC(Query);
|
|
rpabDao = new RpabDAC(Query);
|
|
bsgpDao = new BsgpDAC(Query);
|
|
ryerDao = new RyerDAC(Query);
|
|
rpadDao = new RpadDAC(Query);
|
|
bpsnDao = new BpsnDAC(Query);
|
|
RegisterLookupEvent(this, "btnCalendarUser", "txtCalendarUser", "txtCalendarUser,lbCalendarUserName", "BPSN1", "");
|
|
}
|
|
|
|
protected void dsRPARGrid_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
|
|
{
|
|
e.Command.Parameters["@RPAPU"].Value = UserId;
|
|
}
|
|
|
|
protected void RPARGrid_PageIndexChanged(object sender, EventArgs e)
|
|
{
|
|
(sender as GridView).SelectedIndex = 0;
|
|
(sender as GridView).DataBind();
|
|
OpenSignForm();
|
|
}
|
|
|
|
protected void RPARGrid_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
foreach (GridViewRow row in (sender as GridView).Rows)
|
|
SetGridViewMouseBehavier((sender as GridView), row);
|
|
|
|
OpenSignForm();
|
|
}
|
|
|
|
protected void RPARGrid_DataBound(object sender, EventArgs e)
|
|
{
|
|
GridView GV = sender as GridView;
|
|
|
|
gvRPAB2.Visible = GV.Rows.Count > 0;
|
|
|
|
if (GV.Rows.Count == 0)
|
|
{
|
|
GV.SelectedIndex = -1;
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
if (GV.Rows.Count > 0 && GV.SelectedIndex == -1)
|
|
{
|
|
GV.SelectedIndex = 0;
|
|
}
|
|
else if (GV.Rows.Count > 0 && GV.Rows.Count - 1 < GV.SelectedIndex)
|
|
{
|
|
GV.SelectedIndex = GV.Rows.Count - 1;
|
|
}
|
|
OpenSignForm();
|
|
}
|
|
}
|
|
|
|
protected override void BindTabContent()
|
|
{
|
|
base.BindTabContent();
|
|
OpenSignForm();
|
|
}
|
|
|
|
private void OpenSignForm()
|
|
{
|
|
if (MV主要.ActiveViewIndex == 0 && RPARGrid.SelectedIndex == -1)
|
|
{
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
return;
|
|
}
|
|
|
|
if (MV主要.ActiveViewIndex == 3 && RPARGrid2.SelectedIndex == -1)
|
|
{
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
return;
|
|
}
|
|
|
|
string rpren = "";
|
|
if (MV主要.ActiveViewIndex == 0)
|
|
rpren = WDAC.GetStringValue(RPARGrid.SelectedValue);
|
|
else if (MV主要.ActiveViewIndex == 3)
|
|
rpren = WDAC.GetStringValue(RPARGrid2.SelectedValue);
|
|
else
|
|
{
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
return;
|
|
}
|
|
|
|
RPARList t = rparDao.SelectOne(rpren);
|
|
if (t.Count == 0)
|
|
{
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
return;
|
|
}
|
|
|
|
// RPAPN 應簽關卡數 RPANO 本關關卡 應撈第幾關簽核人
|
|
// ============== ============= ==============
|
|
// 3 1 2
|
|
// 3 2 3
|
|
// 3 3 -
|
|
// 2 1 3
|
|
// 2 2 -
|
|
|
|
string rpapn = WDAC.GetStringValue(t[0].RPAPN);
|
|
string rpano = WDAC.GetStringValue(t[0].RPANO);
|
|
string rppyn = WDAC.GetStringValue(t[0].RPPYN);
|
|
string rptyp = WDAC.GetStringValue(t[0].RPTYP);
|
|
string bslvl = "";
|
|
|
|
switch (rptyp.Substring(0, 1))
|
|
{
|
|
case RPAR_TYPE.T0_請假:
|
|
dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "0%";
|
|
MultiView1.SetActiveView(View請假);
|
|
RPARForm01.ChangeMode(FormViewMode.ReadOnly);
|
|
RPARForm01.DataBind();
|
|
break;
|
|
case RPAR_TYPE.T1_加班:
|
|
dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "1%";
|
|
MultiView1.SetActiveView(View加班);
|
|
RPARForm02.ChangeMode(FormViewMode.ReadOnly);
|
|
RPARForm02.DataBind();
|
|
break;
|
|
case RPAR_TYPE.T3_出差:
|
|
dsRPAR_RPTYP.SelectParameters["BSCLS"].DefaultValue = "3%";
|
|
MultiView1.SetActiveView(View差勤);
|
|
RPARForm03.ChangeMode(FormViewMode.ReadOnly);
|
|
RPARForm03.DataBind();
|
|
break;
|
|
default:
|
|
pnlSheet.Visible = false;
|
|
pnlSign.Visible = false;
|
|
return;
|
|
}
|
|
|
|
hfRPREN.Value = rpren;
|
|
hfRPAPN.Value = rpapn;
|
|
hfRPANO.Value = rpano;
|
|
|
|
if (rpapn == "3" && rpano == "1")
|
|
bslvl = "2";
|
|
if (rpapn == "3" && rpano == "2")
|
|
bslvl = "3";
|
|
if (rpapn == "2" && rpano == "1")
|
|
bslvl = "3";
|
|
|
|
if (bslvl == "")
|
|
{
|
|
pnlNext.Visible = false;
|
|
}
|
|
else
|
|
{
|
|
pnlNext.Visible = true;
|
|
dsBSGP.SelectParameters["BSPYN"].DefaultValue = rppyn;
|
|
dsBSGP.SelectParameters["BSLVL"].DefaultValue = bslvl;
|
|
ddlNext.DataSource = dsBSGP;
|
|
ddlNext.DataBind();
|
|
}
|
|
|
|
pnlSheet.Visible = (MV主要.ActiveViewIndex == 0) || (MV主要.ActiveViewIndex == 3);
|
|
pnlSign.Visible = MV主要.ActiveViewIndex == 0;
|
|
|
|
if (pnlSheet.Visible)
|
|
gvRPAD.DataBind();
|
|
|
|
if (MV主要.ActiveViewIndex == 3)
|
|
gvRPAB2.DataBind();
|
|
}
|
|
|
|
protected void RPARGrid_RowDataBound(object sender, GridViewRowEventArgs e)
|
|
{
|
|
SetGridViewMouseBehavier(sender as GridView, e.Row);
|
|
//GridView_RowDataBound_Shrink_ViewState(sender, e);
|
|
}
|
|
|
|
// 簽核確定
|
|
protected void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
string rpapn = hfRPAPN.Value;
|
|
string rpano = hfRPANO.Value;
|
|
|
|
conn = Query.NewConnection(Query.ConnectionString);
|
|
conn.Open();
|
|
tran = conn.BeginTransaction();
|
|
try
|
|
{
|
|
// 核准
|
|
if (rblApprove.SelectedValue == "Y")
|
|
{
|
|
// 本關簽核確定
|
|
rpabDao.核准(tran, hfRPREN.Value, rpano, DateTime.UtcNow.AddHours(8), txtComment.Text, UserId);
|
|
|
|
// 若有下關,送簽
|
|
if (rpapn.CompareTo(rpano) > 0)
|
|
{
|
|
string 下一關 = Convert.ToString(Convert.ToInt32(rpano) + 1);
|
|
rpabDao.送簽(tran, hfRPREN.Value, rpapn, 下一關, ddlNext.SelectedValue, UserId);
|
|
rparDao.送簽(tran, hfRPREN.Value, 下一關, ddlNext.SelectedValue);
|
|
}
|
|
// 若無則更新簽核狀況
|
|
else
|
|
{
|
|
rparDao.簽核(tran, hfRPREN.Value, "Y", DateTime.UtcNow.AddHours(8));
|
|
}
|
|
}
|
|
// 不核准
|
|
else
|
|
{
|
|
rpabDao.不核准(tran, hfRPREN.Value, rpano, DateTime.UtcNow.AddHours(8), txtComment.Text, UserId);
|
|
rparDao.簽核(tran, hfRPREN.Value, "N", DateTime.UtcNow.AddHours(8));
|
|
}
|
|
|
|
tran.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
tran.Rollback();
|
|
cvMessage.IsValid = false;
|
|
cvMessage.ErrorMessage = "更新資料過程中發生錯誤:\"" + ex.Message + "\"";
|
|
}
|
|
finally
|
|
{
|
|
if (tran != null)
|
|
{
|
|
tran.Dispose();
|
|
tran = null;
|
|
}
|
|
if (conn != null && conn.State == ConnectionState.Open)
|
|
{
|
|
conn.Close();
|
|
conn.Dispose();
|
|
conn = null;
|
|
}
|
|
}
|
|
|
|
if (txtComment.Text.Trim().Length > 0)
|
|
{
|
|
string name = GetLookup("BPSN", UserId, "BPNME");
|
|
發簽核有意見郵件(hfRPREN.Value,
|
|
name,
|
|
rblApprove.SelectedValue == "Y" ? "核准" : "不核准",
|
|
txtComment.Text);
|
|
}
|
|
|
|
txtComment.Text = "";
|
|
rblApprove.SelectedValue = "Y";
|
|
|
|
RPARGrid.DataBind();
|
|
RPARGrid0.DataBind();
|
|
}
|
|
|
|
protected void RPARGrid0_RowCommand(object sender, GridViewCommandEventArgs e)
|
|
{
|
|
if (e.CommandName == "CancelSign")
|
|
{
|
|
string[] args = e.CommandArgument.ToString().Split('|');
|
|
if (args.Length > 4)
|
|
{
|
|
string rpren = args[0];
|
|
string 本關 = Convert.ToString(args[1]);
|
|
string 總關 = Convert.ToString(args[2]);
|
|
string rpapd = args[3];
|
|
string rpapp = args[4];
|
|
|
|
conn = Query.NewConnection(Query.ConnectionString);
|
|
conn.Open();
|
|
tran = conn.BeginTransaction();
|
|
try
|
|
{
|
|
// 不核准的取消 = 取消本關
|
|
if (rpapp == "N")
|
|
{
|
|
rpabDao.取消本關(tran, rpren, 本關, UserId);
|
|
rparDao.取消本關(tran, rpren);
|
|
}
|
|
// 不是最後一關
|
|
else if (總關.CompareTo(本關) > 0)
|
|
{
|
|
string 上一關簽核人 = rpabDao.退回上一關(tran, rpren, 本關, UserId);
|
|
if (上一關簽核人.Length > 0)
|
|
rparDao.退回上一關(tran, rpren, 上一關簽核人);
|
|
}
|
|
// 已經送到最後一關,但是最後一關還沒簽
|
|
else if (總關 == 本關 && rpapd == "")
|
|
{
|
|
string 上一關簽核人 = rpabDao.退回上一關(tran, rpren, 本關, UserId);
|
|
if (上一關簽核人.Length > 0)
|
|
rparDao.退回上一關(tran, rpren, 上一關簽核人);
|
|
}
|
|
// 已經送到最後一關,而且最後一關已簽
|
|
else if (總關 == 本關 && rpapd != "")
|
|
{
|
|
rpabDao.取消本關(tran, rpren, 本關, UserId);
|
|
rparDao.取消本關(tran, rpren);
|
|
}
|
|
|
|
tran.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
tran.Rollback();
|
|
cvMessage.IsValid = false;
|
|
cvMessage.ErrorMessage = "更新資料過程中發生錯誤:\"" + ex.Message + "\"";
|
|
}
|
|
finally
|
|
{
|
|
if (tran != null)
|
|
{
|
|
tran.Dispose();
|
|
tran = null;
|
|
}
|
|
if (conn != null)
|
|
{
|
|
if (conn.State == ConnectionState.Open)
|
|
conn.Close();
|
|
conn.Dispose();
|
|
conn = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
RPARGrid.DataBind();
|
|
RPARGrid0.DataBind();
|
|
}
|
|
|
|
/*
|
|
protected override string GetBPNME(object RPENO)
|
|
{
|
|
return base.GetBPNME(RPENO);
|
|
}
|
|
*/
|
|
|
|
protected string Get單據種類(object RPTYP, object RPAPN)
|
|
{
|
|
string rptyp = WDAC.GetStringValue(RPTYP) + " ";
|
|
string rpapn = WDAC.GetStringValue(RPAPN) + " ";
|
|
string s1, s2;
|
|
|
|
switch (rptyp[0].ToString())
|
|
{
|
|
case RPAR_TYPE.T0_請假:
|
|
s1 = "[請假單]";
|
|
break;
|
|
case RPAR_TYPE.T1_加班:
|
|
s1 = "[加班單]";
|
|
break;
|
|
case RPAR_TYPE.T3_出差:
|
|
s1 = "[差旅單]";
|
|
break;
|
|
default:
|
|
s1 = "";
|
|
break;
|
|
}
|
|
|
|
switch (rpapn[0])
|
|
{
|
|
case 'D':
|
|
s2 = "(抽單)";
|
|
break;
|
|
default:
|
|
s2 = "";
|
|
break;
|
|
}
|
|
|
|
return s1 + s2;
|
|
}
|
|
|
|
protected System.Drawing.Color Get單據類別顏色(object RPAPN, object RPAPP)
|
|
{
|
|
string rpapn = WDAC.GetStringValue(RPAPN).Trim();
|
|
string rpapp = WDAC.GetStringValue(RPAPP).Trim();
|
|
|
|
if (rpapn == "D" || rpapp == "N")
|
|
return System.Drawing.Color.Red;
|
|
else
|
|
return System.Drawing.Color.Blue;
|
|
}
|
|
|
|
//protected void btnChangePage_Click(object sender, EventArgs e)
|
|
//{
|
|
// switch ((sender as Control).ID)
|
|
// {
|
|
// case "btnPage1":
|
|
// MV主要.SetActiveView(View1);
|
|
// break;
|
|
// case "btnPage2":
|
|
// MV主要.SetActiveView(View2);
|
|
// break;
|
|
// case "btnPage3":
|
|
// MV主要.SetActiveView(View3);
|
|
// break;
|
|
// }
|
|
//}
|
|
|
|
protected void dsRPAR我的_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
DateTime dt;
|
|
e.Cancel = !CheckDate(txtDATE1.Text, out dt);
|
|
e.InputParameters["Date1"] = dt;
|
|
e.Cancel = !CheckDate(txtDATE2.Text, out dt);
|
|
e.InputParameters["Date2"] = dt;
|
|
}
|
|
|
|
protected void dsRPAR我的督導_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
DateTime dt;
|
|
e.Cancel = !CheckDate(txtDATE3.Text, out dt);
|
|
e.InputParameters["Date1"] = dt;
|
|
e.Cancel = !CheckDate(txtDATE4.Text, out dt);
|
|
e.InputParameters["Date2"] = dt;
|
|
|
|
List<string> RPNUMs = new List<string>();
|
|
foreach (ListItem item in cblRPNUM4.Items)
|
|
{
|
|
if (item.Selected)
|
|
RPNUMs.Add(item.Value);
|
|
}
|
|
|
|
cblRPNUM4.DataBind();
|
|
foreach (string rpnum in RPNUMs)
|
|
{
|
|
if (cblRPNUM4.Items.FindByValue(rpnum) != null)
|
|
{
|
|
cblRPNUM4.Items.FindByValue(rpnum).Selected = true;
|
|
}
|
|
}
|
|
|
|
RPNUMs.Clear();
|
|
foreach (ListItem item in cblRPNUM4.Items)
|
|
{
|
|
if (item.Selected)
|
|
RPNUMs.Add(item.Value);
|
|
}
|
|
|
|
e.InputParameters["RPNUM"] = RPNUMs;
|
|
|
|
var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\'');
|
|
e.InputParameters["RPTYP"] = string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp;
|
|
e.InputParameters["RPPYN"] = GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\'');
|
|
}
|
|
|
|
protected void btnSearch我的_Click(object sender, EventArgs e)
|
|
{
|
|
RPARGrid1.DataBind();
|
|
if (RPARGrid1.PageCount > 0)
|
|
RPARGrid1.PageIndex = 0;
|
|
}
|
|
|
|
protected void btnSearch我的督導_Click(object sender, EventArgs e)
|
|
{
|
|
string 表單 = rblRPTYP2.SelectedValue.ToString().ToUpper();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
|
|
protected void btnExport我的督導_Click(object sender, EventArgs e)
|
|
{
|
|
DateTime date1, date2;
|
|
CheckDate(txtDATE3.Text, out date1);
|
|
CheckDate(txtDATE4.Text, out date2);
|
|
|
|
List<string> RPNUMs = new List<string>();
|
|
foreach (ListItem item in cblRPNUM4.Items)
|
|
{
|
|
if (item.Selected)
|
|
RPNUMs.Add(item.Value);
|
|
}
|
|
|
|
cblRPNUM4.DataBind();
|
|
foreach (string rpnum in RPNUMs)
|
|
{
|
|
if (cblRPNUM4.Items.FindByValue(rpnum) != null)
|
|
{
|
|
cblRPNUM4.Items.FindByValue(rpnum).Selected = true;
|
|
}
|
|
}
|
|
|
|
RPNUMs.Clear();
|
|
foreach (ListItem item in cblRPNUM4.Items)
|
|
{
|
|
if (item.Selected)
|
|
RPNUMs.Add(item.Value);
|
|
}
|
|
|
|
var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\'');
|
|
|
|
if ("|明細|統計|".IndexOf("|" + rblExportType.SelectedValue + "|") < 0)
|
|
{
|
|
cvMessage.IsValid = false;
|
|
cvMessage.ErrorMessage = "請選擇匯出格式";
|
|
return;
|
|
}
|
|
|
|
DataTable t = rparDao.Select我的督導專案(
|
|
UserId
|
|
, date1
|
|
, date2
|
|
, (string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp)
|
|
, GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\'')
|
|
, RPNUMs
|
|
, false);
|
|
List<DataRow> rows = t.Select().ToList();
|
|
|
|
if (t.Rows.Count == 0)
|
|
{
|
|
cvMessage.IsValid = false;
|
|
cvMessage.ErrorMessage = "沒有合乎條件的資料";
|
|
return;
|
|
}
|
|
|
|
switch (rblExportType.SelectedValue)
|
|
{
|
|
case "明細":
|
|
Do明細表(rows);
|
|
break;
|
|
case "統計":
|
|
Do統計表(rows);
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void Do明細表(List<DataRow> rows)
|
|
{
|
|
MemoryStream ms;
|
|
switch (rblRPTYP2.SelectedValue)
|
|
{
|
|
case "0%":
|
|
ms = Do請假明細(rows);
|
|
ResponseWriteFile(ms, String.Format("請假明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
case "1%":
|
|
ms = Do加班明細(rows);
|
|
ResponseWriteFile(ms, String.Format("加班明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
case "3%":
|
|
ms = Do差旅明細(rows);
|
|
ResponseWriteFile(ms, String.Format("差旅明細匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
}
|
|
}
|
|
|
|
private MemoryStream Do差旅明細(List<DataRow> rows)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("差旅單明細") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "單號");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "開始日期");
|
|
excel.SetCellValue(row, col++, "結束日期");
|
|
excel.SetCellValue(row, col++, "開始時間");
|
|
excel.SetCellValue(row, col++, "結束時間");
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "汽車"); // F01
|
|
excel.SetCellValue(row, col++, "火車"); // F02
|
|
excel.SetCellValue(row, col++, "捷運"); // F03
|
|
excel.SetCellValue(row, col++, "高鐵"); // F04
|
|
excel.SetCellValue(row, col++, "飛機"); // F07
|
|
excel.SetCellValue(row, col++, "住宿費"); // F05
|
|
excel.SetCellValue(row, col++, "雜費"); // F06
|
|
excel.SetCellValue(row, col++, "過路費"); // F08
|
|
excel.SetCellValue(row, col++, "差旅費合計");
|
|
excel.SetCellValue(row, col++, "事由");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 內容
|
|
int totalRPF01 = 0;
|
|
int totalRPF02 = 0;
|
|
int totalRPF03 = 0;
|
|
int totalRPF04 = 0;
|
|
int totalRPF05 = 0;
|
|
int totalRPF06 = 0;
|
|
int totalRPF07 = 0;
|
|
int totalRPF08 = 0;
|
|
foreach (DataRow r in rows)
|
|
{
|
|
// 從 RPAD 取出差旅費明細
|
|
DataTable detail = rpadDao.SelectRpar(r["RPREN"].ToString());
|
|
// 加總各類費用
|
|
int sumRPF01 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF01"]));
|
|
int sumRPF02 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF02"]));
|
|
int sumRPF03 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF03"]));
|
|
int sumRPF04 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF04"]));
|
|
int sumRPF05 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF05"]));
|
|
int sumRPF06 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF06"]));
|
|
int sumRPF07 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF07"]));
|
|
int sumRPF08 = detail.Select().Sum((x) => WDAC.GetInt32Value(x["RPF08"]));
|
|
|
|
totalRPF01 += sumRPF01;
|
|
totalRPF02 += sumRPF02;
|
|
totalRPF03 += sumRPF03;
|
|
totalRPF04 += sumRPF04;
|
|
totalRPF05 += sumRPF05;
|
|
totalRPF06 += sumRPF06;
|
|
totalRPF07 += sumRPF07;
|
|
totalRPF08 += sumRPF08;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPNUM"])
|
|
, GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPEDT"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPTYP"])
|
|
, GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTCT"])
|
|
, WDAC.GetInt32Value(r["RPTMT"])));
|
|
excel.SetCellValue(row, col++, sumRPF01);
|
|
excel.SetCellValue(row, col++, sumRPF02);
|
|
excel.SetCellValue(row, col++, sumRPF03);
|
|
excel.SetCellValue(row, col++, sumRPF04);
|
|
excel.SetCellValue(row, col++, sumRPF07);
|
|
excel.SetCellValue(row, col++, sumRPF05);
|
|
excel.SetCellValue(row, col++, sumRPF06);
|
|
excel.SetCellValue(row, col++, sumRPF08);
|
|
excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"]));
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
var totalRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var totalRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var totalRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
|
|
totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60);
|
|
totalRPTMT = totalRPTMT % 60;
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:####0}:{1:00}", totalRPTCT, totalRPTMT));
|
|
excel.SetCellValue(row, col++, totalRPF01);
|
|
excel.SetCellValue(row, col++, totalRPF02);
|
|
excel.SetCellValue(row, col++, totalRPF03);
|
|
excel.SetCellValue(row, col++, totalRPF04);
|
|
excel.SetCellValue(row, col++, totalRPF07);
|
|
excel.SetCellValue(row, col++, totalRPF05);
|
|
excel.SetCellValue(row, col++, totalRPF06);
|
|
excel.SetCellValue(row, col++, totalRPF08);
|
|
excel.SetCellValue(row, col++, totalRPFTR);
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 40);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
private MemoryStream Do加班明細(List<DataRow> rows)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("加班單明細") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "單號");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "日期");
|
|
excel.SetCellValue(row, col++, "開始時間");
|
|
excel.SetCellValue(row, col++, "結束時間");
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "加班費");
|
|
excel.SetCellValue(row, col++, "1又1/3時數");
|
|
excel.SetCellValue(row, col++, "1又2/3時數");
|
|
excel.SetCellValue(row, col++, "1倍時數");
|
|
excel.SetCellValue(row, col++, "休息日再延長時數");
|
|
excel.SetCellValue(row, col++, "例假日再延長時數");
|
|
excel.SetCellValue(row, col++, "事由");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 內容
|
|
foreach (DataRow r in rows)
|
|
{
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPNUM"])
|
|
, GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPTYP"])
|
|
, GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTCT"])
|
|
, WDAC.GetInt32Value(r["RPTMT"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTC1"])
|
|
, WDAC.GetInt32Value(r["RPTM1"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTC2"])
|
|
, WDAC.GetInt32Value(r["RPTM2"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTC3"])
|
|
, WDAC.GetInt32Value(r["RPTM3"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTC4"])
|
|
, WDAC.GetInt32Value(r["RPTM4"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTC5"])
|
|
, WDAC.GetInt32Value(r["RPTM5"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"]));
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
var sumRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var sumRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var sumRPTC1 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC1"])).Sum();
|
|
var sumRPTM1 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM1"])).Sum();
|
|
var sumRPTC2 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC2"])).Sum();
|
|
var sumRPTM2 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM2"])).Sum();
|
|
var sumRPTC3 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC3"])).Sum();
|
|
var sumRPTM3 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM3"])).Sum();
|
|
var sumRPTC4 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC4"])).Sum();
|
|
var sumRPTM4 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM4"])).Sum();
|
|
var sumRPTC5 = rows.Select((x) => WDAC.GetInt32Value(x["RPTC5"])).Sum();
|
|
var sumRPTM5 = rows.Select((x) => WDAC.GetInt32Value(x["RPTM5"])).Sum();
|
|
var sumRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60);
|
|
sumRPTMT = sumRPTMT % 60;
|
|
sumRPTC1 += (int)Math.Truncate((double)sumRPTM1 / (double)60);
|
|
sumRPTM1 = sumRPTM1 % 60;
|
|
sumRPTC2 += (int)Math.Truncate((double)sumRPTM2 / (double)60);
|
|
sumRPTM2 = sumRPTM2 % 60;
|
|
sumRPTC3 += (int)Math.Truncate((double)sumRPTM3 / (double)60);
|
|
sumRPTM3 = sumRPTM3 % 60;
|
|
sumRPTC4 += (int)Math.Truncate((double)sumRPTM4 / (double)60);
|
|
sumRPTM4 = sumRPTM4 % 60;
|
|
sumRPTC5 += (int)Math.Truncate((double)sumRPTM5 / (double)60);
|
|
sumRPTM5 = sumRPTM5 % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTCT, sumRPTMT));
|
|
excel.SetCellValue(row, col++, sumRPFTR);
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC1, sumRPTM1));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC2, sumRPTM2));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC3, sumRPTM3));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC4, sumRPTM4));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTC5, sumRPTM5));
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 24);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 18);
|
|
excel.SetColumnWidth(col++, 18);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 40);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
private MemoryStream Do請假明細(List<DataRow> rows)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("請假單明細") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "單號");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "開始日期");
|
|
excel.SetCellValue(row, col++, "結束日期");
|
|
excel.SetCellValue(row, col++, "開始時間");
|
|
excel.SetCellValue(row, col++, "結束時間");
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "扣薪金額");
|
|
excel.SetCellValue(row, col++, "事由");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 內容
|
|
foreach (DataRow r in rows)
|
|
{
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPREN"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPNUM"])
|
|
, GetLookup("BPSN", WDAC.GetStringValue(r["RPNUM"]), "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPRDT"])));
|
|
excel.SetCellValue(row, col++, string.Format("{0:yyyyMMdd}", WDAC.GetDateTimeValue(r["RPEDT"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRTM"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPETM"]));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, WDAC.GetStringValue(r["RPTYP"])
|
|
, GetLookup("BCLS", WDAC.GetStringValue(r["RPTYP"]), "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, WDAC.GetInt32Value(r["RPTCT"])
|
|
, WDAC.GetInt32Value(r["RPTMT"])));
|
|
excel.SetCellValue(row, col++, WDAC.GetInt32Value(r["RPFTR"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPRSN"]));
|
|
excel.SetCellValue(row, col++, WDAC.GetStringValue(r["RPDOC"]));
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
var sumRPTCT = rows.Select((x) => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var sumRPTMT = rows.Select((x) => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var sumRPFTR = rows.Select((x) => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60);
|
|
sumRPTMT = sumRPTMT % 60;
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", sumRPTCT, sumRPTMT));
|
|
excel.SetCellValue(row, col++, sumRPFTR);
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 20);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 40);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
private void Do統計表(List<DataRow> rows)
|
|
{
|
|
var c = new RPARGroupComparer();
|
|
var groups = rows.OrderBy(o => WDAC.GetStringValue(o["RPTYP"]))
|
|
.ThenBy(o => WDAC.GetStringValue(o["RPPYN"]))
|
|
.ThenBy(o => WDAC.GetStringValue(o["RPNUM"]))
|
|
.GroupBy(r => new RPARGroup()
|
|
{
|
|
RPPYN = WDAC.GetStringValue(r["RPPYN"]),
|
|
RPNUM = WDAC.GetStringValue(r["RPNUM"]),
|
|
RPTYP = WDAC.GetStringValue(r["RPTYP"])
|
|
}, c);
|
|
|
|
MemoryStream ms;
|
|
switch (rblRPTYP2.SelectedValue)
|
|
{
|
|
case "0%":
|
|
ms = Do請假統計(rows, groups);
|
|
ResponseWriteFile(ms, String.Format("請假統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
case "1%":
|
|
ms = Do加班統計(rows, groups);
|
|
ResponseWriteFile(ms, String.Format("加班統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
case "3%":
|
|
ms = Do差旅統計(rows, groups);
|
|
ResponseWriteFile(ms, String.Format("差旅統計匯出_{0:yyyyMMddHHmmss}.xls", DateTime.UtcNow.AddHours(8)));
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
private MemoryStream Do差旅統計(List<DataRow> rows, IEnumerable<IGrouping<RPARGroup, DataRow>> groups)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("差旅單統計") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "差旅費");
|
|
excel.SetCellValue(row, col++, "專案名稱");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 明細
|
|
var totalRPTCT = 0;
|
|
var totalRPTMT = 0;
|
|
var totalRPFTR = 0;
|
|
foreach (var g in groups)
|
|
{
|
|
var k = g.Key;
|
|
|
|
var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray());
|
|
|
|
totalRPTCT += sumRPTCT;
|
|
totalRPTMT += sumRPTMT;
|
|
totalRPFTR += sumRPFTR;
|
|
|
|
sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60);
|
|
sumRPTMT = sumRPTMT % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPTYP
|
|
, GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPNUM
|
|
, GetLookup("BPSN", k.RPNUM, "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTCT
|
|
, sumRPTMT));
|
|
excel.SetCellValue(row, col++, sumRPFTR);
|
|
excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", ""));
|
|
excel.SetCellValue(row, col++, sumRPDOC);
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60);
|
|
totalRPTMT = totalRPTMT % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT));
|
|
excel.SetCellValue(row, col++, totalRPFTR);
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 25);
|
|
excel.SetColumnWidth(col++, 15);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 100);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
private MemoryStream Do加班統計(List<DataRow> rows, IEnumerable<IGrouping<RPARGroup, DataRow>> groups)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("加班單統計") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "加班費");
|
|
excel.SetCellValue(row, col++, "1又1/3時數");
|
|
excel.SetCellValue(row, col++, "1又2/3時數");
|
|
excel.SetCellValue(row, col++, "1倍時數");
|
|
excel.SetCellValue(row, col++, "休息日再延長時數");
|
|
excel.SetCellValue(row, col++, "例假日再延長時數");
|
|
excel.SetCellValue(row, col++, "專案名稱");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 明細
|
|
var totalRPTCT = 0;
|
|
var totalRPTMT = 0;
|
|
var totalRPFTR = 0;
|
|
foreach (var g in groups)
|
|
{
|
|
var k = g.Key;
|
|
|
|
var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var sumRPTC1 = g.Select(x => WDAC.GetInt32Value(x["RPTC1"])).Sum();
|
|
var sumRPTM1 = g.Select(x => WDAC.GetInt32Value(x["RPTM1"])).Sum();
|
|
var sumRPTC2 = g.Select(x => WDAC.GetInt32Value(x["RPTC2"])).Sum();
|
|
var sumRPTM2 = g.Select(x => WDAC.GetInt32Value(x["RPTM2"])).Sum();
|
|
var sumRPTC3 = g.Select(x => WDAC.GetInt32Value(x["RPTC3"])).Sum();
|
|
var sumRPTM3 = g.Select(x => WDAC.GetInt32Value(x["RPTM3"])).Sum();
|
|
var sumRPTC4 = g.Select(x => WDAC.GetInt32Value(x["RPTC4"])).Sum();
|
|
var sumRPTM4 = g.Select(x => WDAC.GetInt32Value(x["RPTM4"])).Sum();
|
|
var sumRPTC5 = g.Select(x => WDAC.GetInt32Value(x["RPTC5"])).Sum();
|
|
var sumRPTM5 = g.Select(x => WDAC.GetInt32Value(x["RPTM5"])).Sum();
|
|
|
|
var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray());
|
|
|
|
totalRPTCT += sumRPTCT;
|
|
totalRPTMT += sumRPTMT;
|
|
totalRPFTR += sumRPFTR;
|
|
|
|
sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60);
|
|
sumRPTMT = sumRPTMT % 60;
|
|
sumRPTC1 += (int)Math.Truncate((double)sumRPTM1 / (double)60);
|
|
sumRPTM1 = sumRPTM1 % 60;
|
|
sumRPTC2 += (int)Math.Truncate((double)sumRPTM2 / (double)60);
|
|
sumRPTM2 = sumRPTM2 % 60;
|
|
sumRPTC3 += (int)Math.Truncate((double)sumRPTM3 / (double)60);
|
|
sumRPTM3 = sumRPTM3 % 60;
|
|
sumRPTC4 += (int)Math.Truncate((double)sumRPTM4 / (double)60);
|
|
sumRPTM4 = sumRPTM4 % 60;
|
|
sumRPTC5 += (int)Math.Truncate((double)sumRPTM5 / (double)60);
|
|
sumRPTM5 = sumRPTM5 % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPTYP
|
|
, GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPNUM
|
|
, GetLookup("BPSN", k.RPNUM, "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTCT
|
|
, sumRPTMT));
|
|
excel.SetCellValue(row, col++, sumRPFTR);
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTC1
|
|
, sumRPTM1));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTC2
|
|
, sumRPTM2));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTC3
|
|
, sumRPTM3));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTC4
|
|
, sumRPTM4));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTC5
|
|
, sumRPTM5));
|
|
excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", ""));
|
|
excel.SetCellValue(row, col++, sumRPDOC);
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60);
|
|
totalRPTMT = totalRPTMT % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT));
|
|
excel.SetCellValue(row, col++, totalRPFTR);
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 25);
|
|
excel.SetColumnWidth(col++, 15);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 15);
|
|
excel.SetColumnWidth(col++, 15);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 100);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
private MemoryStream Do請假統計(List<DataRow> rows, IEnumerable<IGrouping<RPARGroup, DataRow>> groups)
|
|
{
|
|
HSSFWorkbook workbook = new HSSFWorkbook();
|
|
HSSFSheet sheet = workbook.CreateSheet("請假單統計") as HSSFSheet;
|
|
sheet.ForceFormulaRecalculation = true;
|
|
Excel excel = new Excel();
|
|
excel.WorkBook = workbook;
|
|
excel.Sheet = sheet;
|
|
int row = 0;
|
|
int col = 0;
|
|
|
|
// 標題
|
|
excel.SetCellValue(row, col++, "類別");
|
|
excel.SetCellValue(row, col++, "人員編號");
|
|
excel.SetCellValue(row, col++, "時數");
|
|
excel.SetCellValue(row, col++, "扣薪金額");
|
|
excel.SetCellValue(row, col++, "專案名稱");
|
|
excel.SetCellValue(row, col++, "備註");
|
|
row++;
|
|
|
|
// 明細
|
|
var totalRPTCT = 0;
|
|
var totalRPTMT = 0;
|
|
var totalRPFTR = 0;
|
|
foreach (var g in groups)
|
|
{
|
|
var k = g.Key;
|
|
|
|
var sumRPTCT = g.Select(x => WDAC.GetInt32Value(x["RPTCT"])).Sum();
|
|
var sumRPTMT = g.Select(x => WDAC.GetInt32Value(x["RPTMT"])).Sum();
|
|
var sumRPFTR = g.Select(x => WDAC.GetInt32Value(x["RPFTR"])).Sum();
|
|
var sumRPDOC = string.Join("/", g.Select(x => WDAC.GetStringValue(x["RPDOC"])).ToArray());
|
|
sumRPTCT += (int)Math.Truncate((double)sumRPTMT / (double)60);
|
|
sumRPTMT = sumRPTMT % 60;
|
|
|
|
totalRPTCT += sumRPTCT;
|
|
totalRPTMT += sumRPTMT;
|
|
totalRPFTR += sumRPFTR;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPTYP
|
|
, GetLookup("BCLS", k.RPTYP, "BSSCR", "BSPAR=`RPARTYP` ")));
|
|
excel.SetCellValue(row, col++, string.Format("{0} {1}"
|
|
, k.RPNUM
|
|
, GetLookup("BPSN", k.RPNUM, "BPNME", "")));
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}"
|
|
, sumRPTCT
|
|
, sumRPTMT));
|
|
excel.SetCellValue(row, col++, sumRPFTR);
|
|
excel.SetCellValue(row, col++, GetLookup("BPAA", k.RPPYN, "BPPYM", ""));
|
|
excel.SetCellValue(row, col++, sumRPDOC);
|
|
row++;
|
|
}
|
|
|
|
// 合計
|
|
totalRPTCT += (int)Math.Truncate((double)totalRPTMT / (double)60);
|
|
totalRPTMT = totalRPTMT % 60;
|
|
|
|
col = 0;
|
|
excel.SetCellValue(row, col++, "合計");
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, string.Format("{0:###0}:{1:00}", totalRPTCT, totalRPTMT));
|
|
excel.SetCellValue(row, col++, totalRPFTR);
|
|
excel.SetCellValue(row, col++, "");
|
|
excel.SetCellValue(row, col++, "");
|
|
|
|
// 寬度
|
|
col = 0;
|
|
excel.SetColumnWidth(col++, 25);
|
|
excel.SetColumnWidth(col++, 15);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 12);
|
|
excel.SetColumnWidth(col++, 40);
|
|
excel.SetColumnWidth(col++, 100);
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
workbook.Write(ms);
|
|
return ms;
|
|
}
|
|
|
|
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 == "2" && rpapn == "3")
|
|
return "長官關";
|
|
else if (rpano == "D")
|
|
return "抽單";
|
|
else
|
|
return rpano;
|
|
}
|
|
|
|
private new void CalcFields(SqlDataSourceCommandEventArgs e)
|
|
{
|
|
// 取出計算需要的資料
|
|
string rppyn = e.Command.Parameters["@RPPYN"].Value.ToString();
|
|
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);
|
|
TimeCalc timeCalc = new TimeCalc();
|
|
|
|
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);
|
|
|
|
string 起時;
|
|
string 迄時;
|
|
switch (MultiView1.ActiveViewIndex)
|
|
{
|
|
case 0: // 請假,要計算缺勤扣款與請假時數
|
|
// 計算請假時數
|
|
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");
|
|
|
|
break;
|
|
case 1: // 加班,要計算加班費與前二、後二、假日加班時數
|
|
// 計算加班時數
|
|
起時 = 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 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM1"].Value) : 0);
|
|
int RPTC2 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC2"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM2"].Value) : 0);
|
|
int RPTC3 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC3"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM3"].Value) : 0);
|
|
int RPTC4 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC4"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM4"].Value) : 0);
|
|
int RPTC5 = WDAC.GetInt32Value(e.Command.Parameters["@RPTC5"].Value) * 60 + (bpott == "2" ? WDAC.GetInt32Value(e.Command.Parameters["@RPTM5"].Value) : 0);
|
|
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;
|
|
|
|
break;
|
|
case 2:
|
|
起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
|
|
迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
|
|
rptct = timeCalc.計算加班時數(rpnum, rprdt, 起時, 迄時, "13,14".Contains(rptyp));
|
|
e.Command.Parameters["@RPTCT"].Value = rptct;
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected void dsRpad_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
if (MV主要.ActiveViewIndex == 0)
|
|
e.InputParameters["rpren"] = RPARGrid.SelectedValue;
|
|
else if (MV主要.ActiveViewIndex == 3)
|
|
e.InputParameters["rpren"] = RPARGrid2.SelectedValue;
|
|
}
|
|
|
|
protected void dsRPARForm_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
|
|
{
|
|
if (MV主要.ActiveViewIndex == 0)
|
|
e.Command.Parameters["@RPREN"].Value = RPARGrid.SelectedValue;
|
|
else if (MV主要.ActiveViewIndex == 3)
|
|
e.Command.Parameters["@RPREN"].Value = RPARGrid2.SelectedValue;
|
|
}
|
|
|
|
protected void dsRPARForm_Updating(object sender, SqlDataSourceCommandEventArgs e)
|
|
{
|
|
bool result = true;
|
|
e.Command.Parameters["@RPRDT"].Value = CheckDate(e.Command.Parameters["@RPRDT"].Value, "請輸入正確的開始日期", ref result, cvMessage);
|
|
if (MultiView1.ActiveViewIndex == 0 || MultiView1.ActiveViewIndex == 2)
|
|
e.Command.Parameters["@RPEDT"].Value = CheckDate(e.Command.Parameters["@RPEDT"].Value, "請輸入正確的結束日期", ref result, cvMessage);
|
|
|
|
e.Cancel = !result;
|
|
CalcFields(e);
|
|
if (e.Cancel)
|
|
return;
|
|
|
|
TimeCalc timeCalc = new TimeCalc();
|
|
conn = Query.NewConnection(Query.ConnectionString);
|
|
conn.Open();
|
|
tran = conn.BeginTransaction();
|
|
try
|
|
{
|
|
e.Command.Connection = conn;
|
|
e.Command.Transaction = tran;
|
|
|
|
string rpnum = WDAC.GetStringValue(e.Command.Parameters["@RPNUM"].Value);
|
|
string 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);
|
|
string rppyn = WDAC.GetStringValue(e.Command.Parameters["@RPPYN"].Value);
|
|
string bpott = new BpaaDAC(Query).GetOverTimeType(rppyn);
|
|
|
|
string oldRPTYP = WDAC.GetStringValue(Query.ExecuteScalar("SELECT RPTYP FROM RPAR WHERE RPREN='" + rpren + "'", tran));
|
|
|
|
// 如果是請假
|
|
if (MultiView1.ActiveViewIndex == 0)
|
|
{
|
|
// 舊資料如果是補休,要取消沖補休
|
|
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, rpnum, 新日期, 新時數);
|
|
}
|
|
|
|
// 新資料如果是特休,要沖特休
|
|
if (新類別 == RPAR_TYPE.T01_特休)
|
|
{
|
|
ryerDao.沖特休(rpnum, 新日期.Year, 新時數, tran);
|
|
}
|
|
|
|
// 新資料如果是事假或家庭照顧假,要檢查可用事假時數
|
|
if (新類別 == RPAR_TYPE.T02_事假 || 新類別 == RPAR_TYPE.T0B_家庭照顧假)
|
|
{
|
|
int 年度事假;
|
|
if (int.TryParse(WGuard1.WSetR("UNRPARTIME", 5), out 年度事假))
|
|
年度事假 = 年度事假 * 60;
|
|
else
|
|
年度事假 = 112 * 60;
|
|
|
|
if (年度事假 - rparDao.Get已請事假(UserId, 新日期, rpren) - 新時數 < 0)
|
|
e.Command.Parameters["@RPALT"].Value = "可用事假時數不足";
|
|
else
|
|
e.Command.Parameters["@RPALT"].Value = "";
|
|
}
|
|
|
|
// 新資料如果是病假,要檢查可用病假時數
|
|
if (新類別 == RPAR_TYPE.T03_病假)
|
|
{
|
|
int 年度病假;
|
|
if (int.TryParse(WGuard1.WSetR("UNRPARTIME", 6), out 年度病假))
|
|
年度病假 = 年度病假 * 60;
|
|
else
|
|
年度病假 = 240 * 60;
|
|
|
|
if (年度病假 - rparDao.Get已請病假(UserId, 新日期, rpren) - 新時數 < 0)
|
|
e.Command.Parameters["@RPALT"].Value = "可用病假時數不足";
|
|
else
|
|
e.Command.Parameters["@RPALT"].Value = "";
|
|
}
|
|
}
|
|
// 加班
|
|
else if (MultiView1.ActiveViewIndex == 1)
|
|
{
|
|
string 起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
|
|
string 迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
|
|
新時數 = timeCalc.計算加班時數(rpnum, 新日期, 起時, 迄時, "13,14".Contains(新類別));
|
|
e.Command.Parameters["@RPTCT"].Value = 新時數;
|
|
}
|
|
// 差旅
|
|
else if (MultiView1.ActiveViewIndex == 2)
|
|
{
|
|
DateTime 起日 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPRDT"].Value);
|
|
DateTime 迄日 = WDAC.GetDateTimeValue(e.Command.Parameters["@RPEDT"].Value);
|
|
string 起時 = e.Command.Parameters["@RPRTM"].Value.ToString();
|
|
string 迄時 = e.Command.Parameters["@RPETM"].Value.ToString();
|
|
新時數 = timeCalc.計算差旅時數(rpnum, 起日, 迄日, 起時, 迄時);
|
|
e.Command.Parameters["@RPTCT"].Value = 新時數;
|
|
}
|
|
}
|
|
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_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
|
|
{
|
|
if (MV主要.ActiveViewIndex == 3)
|
|
{
|
|
RPARGrid2.DataBind();
|
|
}
|
|
}
|
|
|
|
protected void btnUpdate_Click(object sender, EventArgs e)
|
|
{
|
|
switch (MultiView1.ActiveViewIndex)
|
|
{
|
|
case 0:
|
|
RPARForm01.ChangeMode(FormViewMode.Edit);
|
|
break;
|
|
case 1:
|
|
RPARForm02.ChangeMode(FormViewMode.Edit);
|
|
break;
|
|
case 2:
|
|
RPARForm03.ChangeMode(FormViewMode.Edit);
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected string GetPhraseClientClick(string rparType, object BPCNT)
|
|
{
|
|
string CID = "";
|
|
switch (rparType)
|
|
{
|
|
case "1":
|
|
CID = (RPARForm02.FindControl("txtRPAR_RPDOC") as Control).ClientID;
|
|
break;
|
|
case "3":
|
|
CID = (RPARForm03.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 void btnInsertRPAD_Click(object sender, EventArgs e)
|
|
{
|
|
string _RPREN = WDAC.GetStringValue(RPARForm03.SelectedValue);
|
|
//_RPSTP = WDAC.GetStringValue(ViewState["RPSTP"]);
|
|
//_RPEDP = WDAC.GetStringValue(ViewState["RPEDP"]);
|
|
|
|
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();
|
|
RPARForm03.DataBind();
|
|
|
|
RPARGrid2.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_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 dsRpad_Updated(object sender, ObjectDataSourceStatusEventArgs e)
|
|
{
|
|
if (MV主要.ActiveViewIndex == 3)
|
|
{
|
|
RPARForm03.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
}
|
|
|
|
protected void dsRpad_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
|
|
{
|
|
if (MV主要.ActiveViewIndex == 3)
|
|
{
|
|
RPARForm03.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
}
|
|
protected void gvRPAD_DataBound(object sender, EventArgs e)
|
|
{
|
|
//gvRPAD.Columns[14].Visible = MV主要.ActiveViewIndex == 3;
|
|
pnlRpadInsert.Visible = MV主要.ActiveViewIndex == 3;
|
|
}
|
|
|
|
protected void RPARForm_DataBound(object sender, EventArgs e)
|
|
{
|
|
if ((sender as FormView).CurrentMode == FormViewMode.Edit)
|
|
{
|
|
FormView fv = sender as FormView;
|
|
|
|
RegisterLookupEvent(fv, "btnRPAR_RPAGT_WQRY", "txtRPAR_RPAGT",
|
|
"txtRPAR_RPAGT,txtRPAR_RPAGM", "BPSNEML",
|
|
"EXISTS (SELECT RANUM FROM RASN WHERE RAPYN='" + (fv.FindControl("hfRPAR_RPPYN") as HiddenField).Value + "' AND RANUM=BPENO)",
|
|
false);
|
|
}
|
|
}
|
|
|
|
protected void ds我督導專案的人員_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
DateTime dt;
|
|
e.Cancel = !CheckDate(txtDATE3.Text, out dt);
|
|
e.InputParameters["Date1"] = dt;
|
|
e.Cancel = !CheckDate(txtDATE4.Text, out dt);
|
|
e.InputParameters["Date2"] = dt;
|
|
|
|
var rptyp = GetListItemCollectionSelectedValue(cblRPTYP_DETAIL.Items, ",", '\'');
|
|
e.InputParameters["RPTYP"] = string.IsNullOrEmpty(rptyp) ? rblRPTYP2.SelectedValue : rptyp;
|
|
e.InputParameters["RPPYN"] = GetListItemCollectionSelectedValue(cbl我督導的專案.Items, ",", '\'');
|
|
}
|
|
|
|
protected void RPARGrid1_DataBound(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
protected void btnYearOK_Click(object sender, EventArgs e)
|
|
{
|
|
// ddl我督導的專案.DataBind();
|
|
cbl我督導的專案.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
|
|
protected void dsRPAB2_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
if (RPARGrid2.SelectedValue != null)
|
|
e.InputParameters["RPREN"] = RPARGrid2.SelectedValue;
|
|
}
|
|
|
|
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 "無附件";
|
|
}
|
|
|
|
private void 發簽核有意見郵件(string _RPREN, string 簽核人員, string 簽核結果, string 簽核意見)
|
|
{
|
|
RPARList t = rparDao.SelectOne(_RPREN);
|
|
if (t.Count > 0)
|
|
{
|
|
string 員工號 = GetLookup("BPSN", t[0].RPNUM, "BPNME");
|
|
string 員工電郵 = bpsnDao.GetEmail(t[0].RPNUM);
|
|
string 類別 = t[0].RPTYP;
|
|
|
|
switch (類別.Substring(0, 1))
|
|
{
|
|
case RPAR_TYPE.T0_請假:
|
|
類別 = "請假";
|
|
break;
|
|
case RPAR_TYPE.T1_加班:
|
|
類別 = "加班";
|
|
break;
|
|
case RPAR_TYPE.T3_出差:
|
|
類別 = "差旅";
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
// 發送郵件
|
|
try
|
|
{
|
|
MailMessage mm = new MailMessage();
|
|
mm.Subject = String.Format("{1}簽核意見通知 [單號:{0}]", _RPREN, 類別);
|
|
mm.To.Add(new MailAddress(員工電郵));
|
|
mm.BodyEncoding = Encoding.UTF8;
|
|
mm.IsBodyHtml = true;
|
|
mm.Body = File.ReadAllText(Server.MapPath("~/Template/簽核意見通知.html"))
|
|
.Replace("{類別}", 類別)
|
|
.Replace("{單號}", _RPREN)
|
|
.Replace("{簽核人員}", 簽核人員)
|
|
.Replace("{簽核結果}", 簽核結果)
|
|
.Replace("{簽核意見}", 簽核意見)
|
|
;
|
|
|
|
Wellan.Service.WMailSender.GetInstance().Send(mm, string.Format("簽核意見通知 單號:{0}", _RPREN));
|
|
}
|
|
catch
|
|
{ }
|
|
}
|
|
}
|
|
|
|
protected void RPARGrid0_RowDataBound(object sender, GridViewRowEventArgs e)
|
|
{
|
|
//GridView_RowDataBound_Shrink_ViewState(sender, e);
|
|
}
|
|
|
|
protected void RPARGrid1_RowDataBound(object sender, GridViewRowEventArgs e)
|
|
{
|
|
//GridView_RowDataBound_Shrink_ViewState(sender, e);
|
|
}
|
|
|
|
protected void gvRPAD_RowDataBound(object sender, GridViewRowEventArgs e)
|
|
{
|
|
//GridView_RowDataBound_Shrink_ViewState(sender, e);
|
|
}
|
|
|
|
private void StoreYYMM()
|
|
{
|
|
hfCalendarYear.Value = Calendar1.VisibleDate.ToString("yyyy", WGuard1.InvariantCulture);
|
|
hfCalendarMonth.Value = Calendar1.VisibleDate.ToString("MM");
|
|
}
|
|
|
|
protected void btnCalendarGoto_Click(object sender, EventArgs e)
|
|
{
|
|
Calendar1.VisibleDate = Convert.ToDateTime(txtCalendarYear.Text + "/" + ddlCalendarMonth.SelectedValue + "/01");
|
|
StoreYYMM();
|
|
}
|
|
|
|
protected void btnCalendarSave_Click(object sender, EventArgs e)
|
|
{
|
|
if (string.IsNullOrEmpty(txtCalendarUser.Text))
|
|
{
|
|
return;
|
|
}
|
|
|
|
for (int i = 1; i <= 31; i++)
|
|
{
|
|
if (Request[String.Format("BTME{0:00}", i)] != null)
|
|
{
|
|
var rttid = WDAC.GetStringValue(Request[String.Format("BTME{0:00}", i)]);
|
|
|
|
rtmeDao.SetDay(txtCalendarUser.Text, new DateTime(Convert.ToInt32(hfCalendarYear.Value), Convert.ToInt32(hfCalendarMonth.Value), i),
|
|
rttid, txtCalendarUser.Text);
|
|
}
|
|
}
|
|
|
|
Calendar1.VisibleDate = Convert.ToDateTime(hfCalendarYear.Value + "/" + hfCalendarMonth.Value + "/01", WGuard1.InvariantCulture);
|
|
}
|
|
|
|
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
|
|
{
|
|
e.Cell.Style["padding"] = "3px";
|
|
e.Cell.Style["border"] = "2px solid white";
|
|
|
|
// 非本月,結束處理
|
|
if (e.Day.IsOtherMonth)
|
|
return;
|
|
|
|
// 本月,清除重畫
|
|
e.Cell.Controls.Clear();
|
|
Label aLabel = new Label();
|
|
aLabel.Text = e.Day.Date.Day.ToString();
|
|
aLabel.Font.Name = "Tahoma";
|
|
aLabel.Font.Size = new FontUnit("16pt");
|
|
aLabel.Font.Bold = true;
|
|
aLabel.ForeColor = System.Drawing.Color.Black;
|
|
e.Cell.Controls.Add(aLabel);
|
|
|
|
// 加入換行的 Literal
|
|
Literal aBR = new Literal();
|
|
aBR.Text = "<br/>";
|
|
e.Cell.Controls.Add(aBR);
|
|
|
|
//加入 DropDownList 用以挑選假日型態
|
|
DropDownList aDDL = new DropDownList();
|
|
aDDL.ID = String.Format("BTME{0:00}", e.Day.Date.Day);
|
|
aDDL.Style.Add("width", "95%");
|
|
aDDL.Style.Add("top", "2px");
|
|
aDDL.Style.Add("font-size", "9pt");
|
|
// aDDL.Enabled = false;
|
|
|
|
if (monthBhrd == null)
|
|
{
|
|
if (!e.Day.IsWeekend)
|
|
aDDL.CssClass = "NORMAL";
|
|
}
|
|
else
|
|
{
|
|
var d = monthBhrd.Substring(e.Day.Date.Day - 1, 1);
|
|
if (d == "-" || d == "B")
|
|
aDDL.CssClass = "NORMAL";
|
|
}
|
|
|
|
BtmeList.ForEach(btmeItem =>
|
|
{
|
|
aDDL.Items.Add(new ListItem(btmeItem.BTTID, btmeItem.BTTID));
|
|
});
|
|
|
|
var rtmeItem = RtmeList.FirstOrDefault(p => p.RTDAT == e.Day.Date);
|
|
if (rtmeItem != null)
|
|
{
|
|
aDDL.SelectedValue = rtmeItem.RTTID;
|
|
}
|
|
else
|
|
{
|
|
aDDL.SelectedValue = "";
|
|
}
|
|
e.Cell.Controls.Add(aDDL);
|
|
|
|
var dayType = "-";
|
|
if (holidayData == null)
|
|
{
|
|
if (e.Day.IsWeekend)
|
|
dayType = "H";
|
|
else
|
|
dayType = "-";
|
|
}
|
|
else
|
|
{
|
|
dayType = holidayData[e.Day.Date.Month - 1].Substring(e.Day.Date.Day - 1, 1);
|
|
}
|
|
|
|
switch (dayType)
|
|
{
|
|
case "-":
|
|
e.Cell.BackColor = System.Drawing.Color.White;
|
|
break;
|
|
case "H":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFF99CC);
|
|
break;
|
|
case "B":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFFFF99);
|
|
break;
|
|
case "N":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0x0099FF);
|
|
break;
|
|
case "V":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0xFF9900);
|
|
break;
|
|
case "O":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0x99CC00);
|
|
break;
|
|
case "T":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0x999999);
|
|
break;
|
|
case "E":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0xCC7FFF);
|
|
break;
|
|
case "A":
|
|
e.Cell.BackColor = System.Drawing.Color.FromArgb(0x7FCCFF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
protected void Calendar1_PreRender(object sender, EventArgs e)
|
|
{
|
|
// 取得班表資料
|
|
BtmeList = btmeDao.SelectAll();
|
|
BtmeList.Insert(0, new BtmeItem()
|
|
{
|
|
BTTID = "",
|
|
BTNME = "預設班表",
|
|
BTSTM = WGuard1.WSetR("UNRPARTIME", 1),
|
|
BTETM = WGuard1.WSetR("UNRPARTIME", 2),
|
|
BTRST = WGuard1.WSetR("UNRPARTIME", 3),
|
|
BTRED = WGuard1.WSetR("UNRPARTIME", 4)
|
|
});
|
|
gvBTME.DataSource = BtmeList;
|
|
gvBTME.DataBind();
|
|
|
|
ddBhrd.DataSource = BtmeList;
|
|
ddBhrd.DataTextField = "BTTID";
|
|
ddBhrd.DataValueField = "BTTID";
|
|
ddBhrd.DataBind();
|
|
|
|
// 取得員工班表資料
|
|
Calendar1.VisibleDate = Convert.ToDateTime(txtCalendarYear.Text + "/" + ddlCalendarMonth.SelectedValue + "/01");
|
|
RtmeList = rtmeDao.SelectMonth(txtCalendarUser.Text, Calendar1.VisibleDate);
|
|
monthBhrd = bhrdDao.GetMonth(Calendar1.VisibleDate.Year, Calendar1.VisibleDate.Month);
|
|
|
|
// 取得節假日資料
|
|
holidayData = new BhrdDAC().GetYear(Calendar1.VisibleDate.Year);
|
|
}
|
|
|
|
protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
|
|
{
|
|
txtCalendarYear.Text = Calendar1.VisibleDate.ToString("yyyy");
|
|
ddlCalendarMonth.SelectedValue = Calendar1.VisibleDate.ToString("MM");
|
|
StoreYYMM();
|
|
}
|
|
|
|
protected void cbCalendarUser_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
// DO NOTHING
|
|
}
|
|
|
|
protected void btnCalendarUserOK_Click(object sender, EventArgs e)
|
|
{
|
|
lbCalendarUserName.DataBind();
|
|
}
|
|
|
|
protected void dsRPAR未簽_Selected(object sender, ObjectDataSourceStatusEventArgs e)
|
|
{
|
|
if (e.ReturnValue is DataTable)
|
|
{
|
|
// 從中取得人員與單據類別
|
|
}
|
|
}
|
|
|
|
protected void cb不分頁_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
RPARGrid.AllowPaging = !cb不分頁.Checked;
|
|
WGuard1.WSetW(Query, string.Format("SIGN_NP_1_{0}", UserId), 1, cb不分頁.Checked ? "Y" : "N", UserId);
|
|
}
|
|
|
|
protected void cb過濾篩選_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
pnl過濾篩選.Visible = cb過濾篩選.Checked;
|
|
cblRPNUMFilter.Items.Clear();
|
|
cblRPNUMFilter.DataBind();
|
|
RPARGrid.DataBind();
|
|
WGuard1.WSetW(Query, string.Format("SIGN_FT_1_{0}", UserId), 1, cb過濾篩選.Checked ? "Y" : "N", UserId);
|
|
}
|
|
|
|
protected void cblRPNUMFilter_DataBinding(object sender, EventArgs e)
|
|
{
|
|
var rows = rparDao.Select未簽核ByUser(UserId, "", "");
|
|
var rpnums = new List<string>();
|
|
foreach (DataRow row in rows.Rows)
|
|
{
|
|
var v = row["RPNUM"].ToString();
|
|
if (!rpnums.Contains(v))
|
|
{
|
|
rpnums.Add(v);
|
|
}
|
|
}
|
|
|
|
rpnums.Sort();
|
|
foreach (var rpnum in rpnums)
|
|
{
|
|
var bpnme = GetLookup("BPSN", rpnum, "BPNME", "");
|
|
cblRPNUMFilter.Items.Add(new ListItem(string.Format("{0} {1}", rpnum, bpnme), rpnum));
|
|
}
|
|
}
|
|
|
|
protected void dsRPAR未簽_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
|
|
{
|
|
e.InputParameters["RPTYP"] = string.Join(",",
|
|
cblRPTYPFilter.Items.Cast<ListItem>()
|
|
.Where(p => p.Selected)
|
|
.Select(p => p.Value)
|
|
.ToArray());
|
|
|
|
e.InputParameters["RPNUM"] = string.Join(",",
|
|
cblRPNUMFilter.Items.Cast<ListItem>()
|
|
.Where(p => p.Selected)
|
|
.Select(p => p.Value)
|
|
.ToArray());
|
|
}
|
|
|
|
protected void cblRPTYPFilter_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
var b = PostBackControlId.Split('$');
|
|
if (b.Length > 2)
|
|
{
|
|
if (cbRPTYPFilterOne.Checked)
|
|
{
|
|
for (var i = 0; i < cblRPTYPFilter.Items.Count; i++)
|
|
{
|
|
if (i.ToString() != b[2])
|
|
cblRPTYPFilter.Items[i].Selected = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
RPARGrid.DataBind();
|
|
}
|
|
|
|
protected void cblRPNUMFilter_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
var b = PostBackControlId.Split('$');
|
|
if (b.Length > 2)
|
|
{
|
|
if (cbRPNUMFilterOne.Checked)
|
|
{
|
|
for (var i = 0; i < cblRPNUMFilter.Items.Count; i++)
|
|
{
|
|
if (i.ToString() != b[2])
|
|
cblRPNUMFilter.Items[i].Selected = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
RPARGrid.DataBind();
|
|
}
|
|
|
|
protected void btnRPTYPFilterNone_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListItem i in cblRPTYPFilter.Items)
|
|
{
|
|
i.Selected = false;
|
|
}
|
|
RPARGrid.DataBind();
|
|
}
|
|
|
|
protected void btnRPNUMFilterNone_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (ListItem i in cblRPNUMFilter.Items)
|
|
{
|
|
i.Selected = false;
|
|
}
|
|
RPARGrid.DataBind();
|
|
}
|
|
|
|
|
|
protected void cbRPTYPFilterOne_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (cbRPTYPFilterOne.Checked)
|
|
{
|
|
foreach (ListItem i in cblRPTYPFilter.Items)
|
|
{
|
|
if (i.Value != cblRPTYPFilter.SelectedValue)
|
|
i.Selected = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void cbRPNUMFilterOne_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (cbRPNUMFilterOne.Checked)
|
|
{
|
|
foreach (ListItem i in cblRPNUMFilter.Items)
|
|
{
|
|
if (i.Value != cblRPNUMFilter.SelectedValue)
|
|
i.Selected = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void rblRPTYP2_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
cblRPTYP_DETAIL.DataSource = Query.Select(string.Format("SELECT BSCLS, BSSCR FROM BCLS WHERE BSPAR = 'RPARTYP' AND BSCLS LIKE '{0}' AND BLOCK='Y'", rblRPTYP2.SelectedValue));
|
|
cblRPTYP_DETAIL.DataTextField = "BSSCR";
|
|
cblRPTYP_DETAIL.DataValueField = "BSCLS";
|
|
|
|
switch (rblRPTYP2.SelectedValue)
|
|
{
|
|
case "0%":
|
|
cblRPTYP_DETAIL.RepeatColumns = 7;
|
|
break;
|
|
case "1%":
|
|
cblRPTYP_DETAIL.RepeatColumns = 3;
|
|
break;
|
|
case "3%":
|
|
cblRPTYP_DETAIL.RepeatColumns = 5;
|
|
break;
|
|
}
|
|
cblRPTYP_DETAIL.DataBind();
|
|
cblRPNUM4.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
|
|
//protected void ddl我督導的專案_SelectedIndexChanged(object sender, EventArgs e)
|
|
//{
|
|
// cblRPNUM4.DataBind();
|
|
//}
|
|
|
|
protected void cbl我督導的專案_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
cblRPNUM4.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
|
|
protected void cblRPTYP_DETAIL_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
cblRPNUM4.DataBind();
|
|
RPARGrid2.DataBind();
|
|
}
|
|
|
|
protected void btnDateOK_Click(object sender, EventArgs e)
|
|
{
|
|
RPARGrid2.DataBind();
|
|
}
|
|
}
|
|
|
|
internal class RPARGroup
|
|
{
|
|
public string RPPYN;
|
|
public string RPNUM;
|
|
public string RPTYP;
|
|
}
|
|
|
|
internal class RPARGroupComparer : IEqualityComparer<RPARGroup>
|
|
{
|
|
public bool Equals(RPARGroup x, RPARGroup y)
|
|
{
|
|
return string.Format("{0}{1}{2}", x.RPNUM, x.RPNUM, x.RPTYP) == string.Format("{0}{1}{2}", y.RPNUM, y.RPNUM, y.RPTYP);
|
|
}
|
|
|
|
public int GetHashCode(RPARGroup obj)
|
|
{
|
|
return 0;
|
|
}
|
|
} |