492 lines
21 KiB
C#
492 lines
21 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Web;
|
||
using System.Data;
|
||
using System.Data.Common;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.HSSF.UserModel;
|
||
using NPOI.HSSF.Util;
|
||
using System.IO;
|
||
using NPOI.SS.Util;
|
||
using Wellan.Common;
|
||
using Wellan.Data;
|
||
using System.Linq;
|
||
using Microsoft.Win32;
|
||
|
||
/// <summary>
|
||
/// 加班費印領清冊 的摘要描述
|
||
/// </summary>
|
||
public class 加班費印領清冊 : ExcelReportBase
|
||
{
|
||
public 加班費印領清冊()
|
||
{
|
||
報表名稱 = "加班費明細表";
|
||
}
|
||
|
||
private int r = 2;
|
||
private DataRow[] data;
|
||
private int 加班費加總 = 0;
|
||
private int bodyBeginRow, dataBeginRow;
|
||
|
||
public override MemoryStream 產生報表()
|
||
{
|
||
// 只要領加班費的紀錄
|
||
data = 資料來源.Tables[0].Select(
|
||
string.Format("RPTYP = '{0}' OR RPTYP = '{1}' OR RPTYP = '{2}' OR RPTYP = '{3}'",
|
||
RPAR_TYPE.T12_非休息日請領加班費,
|
||
RPAR_TYPE.T14_休息日請領加班費,
|
||
RPAR_TYPE.T16_國定假日請領加班費,
|
||
RPAR_TYPE.T18_例假日請領加班費) ,
|
||
"RPRDT");
|
||
|
||
foreach (DataRow r in data)
|
||
{
|
||
加班費加總 += WDAC.GetInt32Value(r["RPAC1"])
|
||
+ WDAC.GetInt32Value(r["RPAC2"])
|
||
+ WDAC.GetInt32Value(r["RPAC3"])
|
||
+ WDAC.GetInt32Value(r["RPAC4"])
|
||
+ WDAC.GetInt32Value(r["RPAC5"]);
|
||
}
|
||
|
||
產生抬頭();
|
||
產生表身();
|
||
產生結尾();
|
||
設定欄寬及列印範圍();
|
||
|
||
MemoryStream ms = new MemoryStream();
|
||
workbook.Write(ms);
|
||
return ms;
|
||
}
|
||
|
||
private void 產生抬頭()
|
||
{
|
||
excel.MergeCell(r, 0, r, 13);
|
||
excel.SetCellValue(r, 0, 公司名稱, headerStyle);
|
||
excel.SetRowHeight(r, 30);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 13);
|
||
excel.SetCellValue(r, 0, 專案名稱, headerStyle);
|
||
excel.SetRowHeight(r, 30);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 13);
|
||
excel.SetCellValue(r, 0, 報表名稱, headerStyle);
|
||
excel.SetRowHeight(r, 30);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 13);
|
||
excel.SetCellValue(r, 0, "金額(此欄填寫數字)", bodyStyleCenter);
|
||
excel.SetRowHeight(r, 20);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 3);
|
||
excel.SetCellValue(r, 0, "萬", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 3, BorderStyle.Thin);
|
||
excel.MergeCell(r, 4, r, 6);
|
||
excel.SetCellValue(r, 4, "仟", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 4, r, 6, BorderStyle.Thin);
|
||
excel.MergeCell(r, 7, r, 7);
|
||
excel.SetCellValue(r, 7, "佰", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 7, r, 7, BorderStyle.Thin);
|
||
excel.MergeCell(r, 8, r, 10);
|
||
excel.SetCellValue(r, 8, "拾", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 8, r, 10, BorderStyle.Thin);
|
||
excel.MergeCell(r, 11, r, 13);
|
||
excel.SetCellValue(r, 11, "元", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 11, r, 13, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 30);
|
||
r++;
|
||
|
||
string s加班費加總 = String.Format("{0:00000}", 加班費加總) + "00000";
|
||
excel.MergeCell(r, 0, r, 3);
|
||
excel.SetCellValue(r, 0, s加班費加總[0].ToString(), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 3, BorderStyle.Thin);
|
||
excel.MergeCell(r, 4, r, 6);
|
||
excel.SetCellValue(r, 4, s加班費加總[1].ToString(), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 4, r, 6, BorderStyle.Thin);
|
||
excel.MergeCell(r, 7, r, 7);
|
||
excel.SetCellValue(r, 7, s加班費加總[2].ToString(), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 7, r, 7, BorderStyle.Thin);
|
||
excel.MergeCell(r, 8, r, 10);
|
||
excel.SetCellValue(r, 8, s加班費加總[3].ToString(), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 8, r, 10, BorderStyle.Thin);
|
||
excel.MergeCell(r, 11, r, 13);
|
||
excel.SetCellValue(r, 11, s加班費加總[4].ToString(), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 11, r, 13, BorderStyle.Thin);
|
||
excel.SetRangeOuterBorder(r - 2, 0, r, 13, BorderStyle.Thick);
|
||
excel.SetRowHeight(r, 25);
|
||
r++;
|
||
|
||
excel.SetCellValue(r, 11, String.Format("{0:yyyy}年度", 報表時間, WGuard1.TaiwanCulture), bodyStyleRightNoBorder);
|
||
excel.SetCellValue(r, 12, String.Format("{0:MM}", 報表時間), bodyStyleCenterNoBorder);
|
||
excel.SetCellValue(r, 13, "月", bodyStyleLeftNoBorder);
|
||
excel.SetRowHeight(r, 25);
|
||
r++;
|
||
|
||
bodyBeginRow = r;
|
||
excel.MergeCell(r, 0, r, 1);
|
||
excel.SetCellValue(r, 0, "姓名", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 1, BorderStyle.Thin);
|
||
excel.MergeCell(r, 2, r, 5);
|
||
excel.SetCellValue(r, 2, WDAC.GetStringValue(資料來源.Tables[0].Rows[0]["BPNME"]), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 2, r, 5, BorderStyle.Thin);
|
||
excel.SetCellValue(r, 6, "單位", bodyStyleCenter);
|
||
excel.MergeCell(r, 7, r, 10);
|
||
excel.SetCellValue(r, 7, WDAC.GetStringValue(資料來源.Tables[0].Rows[0]["站別"]), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 7, r, 10, BorderStyle.Thin);
|
||
excel.SetCellValue(r, 11, "職稱", bodyStyleCenter);
|
||
excel.MergeCell(r, 12, r, 13);
|
||
excel.SetCellValue(r, 12, WDAC.GetStringValue(資料來源.Tables[0].Rows[0]["職稱"]), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 12, r, 13, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 35);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 6);
|
||
excel.SetCellValue(r, 0, "加班日及起迄時間", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 6, BorderStyle.Thin);
|
||
excel.MergeCell(r, 7, r + 1, 8);
|
||
excel.SetCellValue(r, 7, "加班時數", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 7, r + 1, 8, BorderStyle.Thin);
|
||
excel.MergeCell(r, 9, r + 1, 10);
|
||
excel.SetCellValue(r, 9, "加班費\n金額", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 9, r + 1, 10, BorderStyle.Thin);
|
||
//excel.MergeCell(r, 11, r + 1, 11);
|
||
//excel.SetCellValue(r, 11, "蓋章", bodyStyleCenter);
|
||
//excel.SetRangeOuterBorder(r, 11, r + 1, 11, BorderStyle.Thin);
|
||
excel.MergeCell(r, 11, r + 1, 13);
|
||
excel.SetCellValue(r, 11, "備註", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 11, r + 1, 13, BorderStyle.Thin);
|
||
|
||
excel.SetCellValue(r + 1, 0, "月", bodyStyleCenter);
|
||
excel.SetCellValue(r + 1, 1, "日", bodyStyleCenter);
|
||
excel.MergeCell(r + 1, 2, r + 1, 3);
|
||
excel.SetCellValue(r + 1, 2, "起", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + 1, 2, r + 1, 3, BorderStyle.Thin);
|
||
excel.MergeCell(r + 1, 4, r + 1, 5);
|
||
excel.SetCellValue(r + 1, 4, "至", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + 1, 4, r + 1, 5, BorderStyle.Thin);
|
||
excel.SetCellValue(r + 1, 6, "迄", bodyStyleCenter);
|
||
|
||
// 畫雙線
|
||
excel.SetRangeOuterBorder(r - 1, 0, r - 1, 13, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Double, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 25);
|
||
excel.SetRowHeight(r + 1, 25);
|
||
r += 2;
|
||
dataBeginRow = r;
|
||
}
|
||
|
||
private void 產生表身()
|
||
{
|
||
List<OverTimeItem> oneDayItems = new List<OverTimeItem>();
|
||
|
||
TimeCalc timeCalc = new TimeCalc();
|
||
|
||
foreach (DataRow row in data)
|
||
{
|
||
timeCalc.Init(WDAC.GetStringValue(row["RPNUM"]), WDAC.GetDateTimeValue(row["RPRDT"]));
|
||
|
||
int rptc1, rptc2, rptc3, rptc4, rptc5, rpac1, rpac2, rpac3, rpac4, rpac5;
|
||
string rptyp;
|
||
rptc1 = WDAC.GetInt32Value(row["RPTC1"]);
|
||
rptc2 = WDAC.GetInt32Value(row["RPTC2"]);
|
||
rptc3 = WDAC.GetInt32Value(row["RPTC3"]);
|
||
rptc4 = WDAC.GetInt32Value(row["RPTC4"]);
|
||
rptc5 = WDAC.GetInt32Value(row["RPTC5"]);
|
||
rpac1 = WDAC.GetInt32Value(row["RPAC1"]);
|
||
rpac2 = WDAC.GetInt32Value(row["RPAC2"]);
|
||
rpac3 = WDAC.GetInt32Value(row["RPAC3"]);
|
||
rpac4 = WDAC.GetInt32Value(row["RPAC4"]);
|
||
rpac5 = WDAC.GetInt32Value(row["RPAC5"]);
|
||
rptyp = WDAC.GetStringValue(row["RPTYP"]);
|
||
|
||
oneDayItems.Clear();
|
||
string beginTime = WDAC.GetStringValue(row["RPRTM"]);
|
||
|
||
switch (rptyp)
|
||
{
|
||
case RPAR_TYPE.T12_非休息日請領加班費:
|
||
case RPAR_TYPE.T14_休息日請領加班費:
|
||
case RPAR_TYPE.T18_例假日請領加班費:
|
||
var skiprest = rptyp != RPAR_TYPE.T12_非休息日請領加班費;
|
||
if (rptc1 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc1, timeCalc.午休開始, timeCalc.午休結束, skiprest);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "一又三分之一",
|
||
Hours = (double)rptc1 / 60D,
|
||
Amount = rpac1
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc2 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc2, timeCalc.午休開始, timeCalc.午休結束, skiprest);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "一又三分之二",
|
||
Hours = (double)rptc2 / 60D,
|
||
Amount = rpac2
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc3 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc3, timeCalc.午休開始, timeCalc.午休結束, skiprest);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "國定假日",
|
||
Hours = (double)rptc3 / 60D,
|
||
Amount = rpac3
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc4 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc4, timeCalc.午休開始, timeCalc.午休結束, skiprest);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "休息日再延長",
|
||
Hours = (double)rptc4 / 60D,
|
||
Amount = rpac4
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc5 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc5, timeCalc.午休開始, timeCalc.午休結束, skiprest);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "例假日再延長",
|
||
Hours = (double)rptc5 / 60D,
|
||
Amount = rpac5
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
break;
|
||
case RPAR_TYPE.T16_國定假日請領加班費:
|
||
if (rptc3 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc3, timeCalc.午休開始, timeCalc.午休結束, false);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "國定假日",
|
||
Hours = (double)rptc3 / 60D,
|
||
Amount = rpac3
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc1 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc1, timeCalc.午休開始, timeCalc.午休結束, false);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "國定假日延長(9-10)",
|
||
Hours = (double)rptc1 / 60D,
|
||
Amount = rpac1
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
if (rptc2 > 0)
|
||
{
|
||
var endtime = TimeAddMinutes(beginTime, rptc2, timeCalc.午休開始, timeCalc.午休結束, false);
|
||
oneDayItems.Add(new OverTimeItem()
|
||
{
|
||
BeginTime = beginTime,
|
||
EndTime = endtime,
|
||
TimeName = "國定假日延長(11-12)",
|
||
Hours = (double)rptc2 / 60D,
|
||
Amount = rpac2
|
||
});
|
||
beginTime = endtime;
|
||
}
|
||
break;
|
||
}
|
||
|
||
for (int i = 0; i < oneDayItems.Count; i++)
|
||
{
|
||
OverTimeItem item = oneDayItems[i];
|
||
|
||
excel.SetCellValue(r + i, 0, String.Format("{0:MM}", row["RPRDT"]), bodyStyleCenter);
|
||
excel.SetCellValue(r + i, 1, String.Format("{0:dd}", row["RPRDT"]), bodyStyleCenter);
|
||
|
||
excel.MergeCell(r + i, 11, r + i, 13);
|
||
excel.SetCellValue(r + i, 11, String.Format("{0}", row["RPDOC"]), bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + i, 11, r + i, 13, BorderStyle.Thin);
|
||
|
||
excel.MergeCell(r + i, 2, r + i, 3);
|
||
excel.SetCellValue(r + i, 2, item.BeginTime, bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + i, 2, r + i, 3, BorderStyle.Thin);
|
||
|
||
excel.MergeCell(r + i, 4, r + i, 5);
|
||
excel.SetCellValue(r + i, 4, "~", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + i, 4, r + i, 5, BorderStyle.Thin);
|
||
|
||
excel.SetCellValue(r + i, 6, item.EndTime, bodyStyleCenter);
|
||
|
||
excel.SetCellValue(r + i, 7, item.TimeName, bodyStyleCenter);
|
||
|
||
excel.SetCellValue(r + i, 8, item.Hours, bodyStyleCenter);
|
||
|
||
excel.MergeCell(r + i, 9, r + i, 10);
|
||
excel.SetCellValue(r + i, 9, item.Amount, bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r + i, 9, r + i, 10, BorderStyle.Thin);
|
||
|
||
excel.SetRowHeight(r + i, 35);
|
||
}
|
||
|
||
r += oneDayItems.Count;
|
||
|
||
}
|
||
|
||
// 蓋章
|
||
//excel.MergeCell(dataBeginRow, 11, r - 1, 11);
|
||
//excel.SetCellValue(dataBeginRow, 11, "", bodyStyleCenter);
|
||
//excel.SetRangeOuterBorder(dataBeginRow, 11, r - 1, 11, BorderStyle.Thin);
|
||
|
||
// 合計
|
||
excel.SetCellValue(r, 6, "合計", bodyStyleCenter);
|
||
excel.SetCellFormula(r, 7, String.Format("SUM({0}:{1})", excel.RCtoA1(dataBeginRow, 8), excel.RCtoA1(r - 1, 8)), bodyStyleCenter);
|
||
excel.SetCellValue(r, 8, "小時", bodyStyleCenter);
|
||
excel.SetCellFormula(r, 9, String.Format("SUM({0}:{1})", excel.RCtoA1(dataBeginRow, 9), excel.RCtoA1(r - 1, 9)), bodyStyleCenter);
|
||
excel.SetCellValue(r, 10, "元", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 7, r, 7, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.None);
|
||
excel.SetRangeOuterBorder(r, 8, r, 8, BorderStyle.Thin, BorderStyle.None, BorderStyle.Thin, BorderStyle.Thin);
|
||
excel.SetRangeOuterBorder(r, 9, r, 9, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.None);
|
||
excel.SetRangeOuterBorder(r, 10, r, 10, BorderStyle.Thin, BorderStyle.None, BorderStyle.Thin, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 25);
|
||
r++;
|
||
}
|
||
|
||
private void 產生結尾()
|
||
{
|
||
excel.MergeCell(r, 0, r, 3);
|
||
excel.SetCellValue(r, 0, "茲收到加班費新台幣", bodyStyleCenter);
|
||
excel.MergeCell(r, 4, r, 9);
|
||
excel.SetCellValue(r, 4, WGuard1.WNTSA(加班費加總, "", true), bodyStyleRight);
|
||
excel.MergeCell(r, 10, r, 13);
|
||
excel.SetCellValue(r, 10, "此 據 (金額請大寫)", bodyStyleCenter);
|
||
excel.SetRowHeight(r, 30);
|
||
excel.SetRangeOuterBorder(r, 0, r, 3, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.None);
|
||
excel.SetRangeOuterBorder(r, 4, r, 9, BorderStyle.Thin, BorderStyle.None, BorderStyle.Thin, BorderStyle.None);
|
||
excel.SetRangeOuterBorder(r, 10, r, 13, BorderStyle.Thin, BorderStyle.None, BorderStyle.Thin, BorderStyle.Thin);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 5);
|
||
excel.SetCellValue(r, 0, "申請人", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 5, BorderStyle.Thin);
|
||
excel.MergeCell(r, 6, r, 9);
|
||
excel.SetCellValue(r, 6, "計劃督導", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 6, r, 9, BorderStyle.Thin);
|
||
excel.MergeCell(r, 10, r, 13);
|
||
excel.SetCellValue(r, 10, "計劃主持人", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 10, r, 13, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 30);
|
||
r++;
|
||
|
||
excel.MergeCell(r, 0, r, 5);
|
||
excel.SetCellValue(r, 0, "", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 0, r, 5, BorderStyle.Thin);
|
||
excel.MergeCell(r, 6, r, 9);
|
||
excel.SetCellValue(r, 6, "", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 6, r, 9, BorderStyle.Thin);
|
||
excel.MergeCell(r, 10, r, 13);
|
||
excel.SetCellValue(r, 10, "", bodyStyleCenter);
|
||
excel.SetRangeOuterBorder(r, 10, r, 13, BorderStyle.Thin);
|
||
excel.SetRowHeight(r, 50);
|
||
|
||
excel.SetRangeOuterBorder(bodyBeginRow, 0, r, 13, BorderStyle.Thick);
|
||
}
|
||
|
||
private void 設定欄寬及列印範圍()
|
||
{
|
||
excel.SetColumnWidth(0, 6);
|
||
excel.SetColumnWidth(1, 6);
|
||
excel.SetColumnWidth(2, 2);
|
||
excel.SetColumnWidth(3, 7);
|
||
excel.SetColumnWidth(4, 3);
|
||
excel.SetColumnWidth(5, 5);
|
||
excel.SetColumnWidth(6, 11);
|
||
excel.SetColumnWidth(7, 18);
|
||
excel.SetColumnWidth(8, 7);
|
||
excel.SetColumnWidth(9, 8);
|
||
excel.SetColumnWidth(10, 3);
|
||
excel.SetColumnWidth(11, 11);
|
||
excel.SetColumnWidth(12, 7);
|
||
excel.SetColumnWidth(13, 8);
|
||
}
|
||
|
||
private string TimeAddMinutes(string time, int addMinutes, string restBegin, string restEnd, bool skipRest)
|
||
{
|
||
int restBeginHour = 0;
|
||
int restBeginMin = 0;
|
||
int restEndHour = 0;
|
||
int restEndMin = 0;
|
||
int restBeginTime = 0;
|
||
int restEndTime = 0;
|
||
if (!string.IsNullOrEmpty(restBegin))
|
||
{
|
||
string[] tp1 = restBegin.Split(':');
|
||
if (int.TryParse(tp1[0], out restBeginHour) && int.TryParse(tp1[1], out restBeginMin))
|
||
restBeginTime = restBeginHour * 60 + restBeginMin;
|
||
}
|
||
if (!string.IsNullOrEmpty(restEnd))
|
||
{
|
||
string[] tp1 = restEnd.Split(':');
|
||
if (int.TryParse(tp1[0], out restEndHour) && int.TryParse(tp1[1], out restEndMin))
|
||
restEndTime = restEndHour * 60 + restEndMin;
|
||
}
|
||
|
||
string[] timepart = time.Split(':');
|
||
int hour, min;
|
||
if (int.TryParse(timepart[0], out hour) && int.TryParse(timepart[1], out min))
|
||
{
|
||
int beginTime = hour * 60 + min;
|
||
int extraAddMinutes = 0;
|
||
|
||
if (beginTime <= restBeginTime && beginTime + addMinutes >= restBeginTime)
|
||
{
|
||
int tempEndTime = beginTime + addMinutes;
|
||
// 跨越中午休息時間,要摳掉
|
||
if (tempEndTime >= restEndTime && skipRest)
|
||
extraAddMinutes = restEndTime - restBeginTime;
|
||
// 跨進,但未跨越,不要摳掉
|
||
if (tempEndTime < restEndTime)
|
||
// extraAddMinutes = (int)Math.Truncate((restEndTime - tempEndTime).TotalMinutes);
|
||
extraAddMinutes = 0;
|
||
}
|
||
|
||
var result = beginTime + addMinutes + extraAddMinutes;
|
||
return string.Format("{0:00}:{1:00}", (int)Math.Truncate((double)result / (double)60), result % 60);
|
||
}
|
||
else
|
||
{
|
||
return "";
|
||
}
|
||
}
|
||
}
|
||
|
||
class OverTimeItem
|
||
{
|
||
public string BeginTime { get; set; }
|
||
public string EndTime { get; set; }
|
||
public string TimeName { get; set; }
|
||
public double Hours { get; set; }
|
||
public double Amount { get; set; }
|
||
}
|