Files
thinkyu/Web/forms/flow/fmSign.ascx.cs
T
sryang b61b8281c8 feat: fmSign GridView 改用 ObjectDataSource
- RpabDAC 新增 SelectRPAB

- dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件
2026-09-10 10:48:40 +08:00

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;
}
}