chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore - 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Configuration;
|
||||
using System.Data.Common;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Wellan.Data;
|
||||
using Wellan.Common;
|
||||
using System.Linq;
|
||||
|
||||
/// <summary>
|
||||
/// 節假日設定檔
|
||||
/// </summary>
|
||||
public class BhrdDAC : Wellan.Data.WDAC
|
||||
{
|
||||
private Hashtable bhrdData = new Hashtable();
|
||||
private string nationalHolidays = "0101,0228,0501,1010";
|
||||
|
||||
public const string 排休 = "排休";
|
||||
public const string 例假日 = "例假日";
|
||||
public const string 休假日 = "休假日";
|
||||
public const string 國定假日 = "國定假日";
|
||||
public static readonly List<string> 休假日班表 = new List<string> { 排休, 例假日, 休假日, 國定假日 };
|
||||
|
||||
public BhrdDAC()
|
||||
{
|
||||
}
|
||||
|
||||
public BhrdDAC(string connectionConfig, string connectionConfigName)
|
||||
: this()
|
||||
{
|
||||
this._connectionConfig = connectionConfig;
|
||||
this._connectionConfigName = connectionConfigName;
|
||||
}
|
||||
|
||||
public BhrdDAC(WQuery query)
|
||||
{
|
||||
this._query = query;
|
||||
}
|
||||
|
||||
public DataTable GetAll()
|
||||
{
|
||||
return Query.Select("SELECT BHYER, BHHRD FROM BHRD ORDER BY BHYER");
|
||||
}
|
||||
|
||||
public string[] GetYear(int Year)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT BHYER, BHHRD FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", Year));
|
||||
DataTable bhrd = Query.Select(cmd);
|
||||
string yearData;
|
||||
|
||||
// 有資料,取出該年資料
|
||||
if (bhrd.Rows.Count != 0)
|
||||
{
|
||||
yearData = bhrd.Rows[0]["BHHRD"].ToString();
|
||||
}
|
||||
// 無資料,回傳預設資料
|
||||
else
|
||||
{
|
||||
char[] tmp = new char[366];
|
||||
for (int i = 0; i < tmp.Length; i++)
|
||||
{
|
||||
tmp[i] = ' ';
|
||||
}
|
||||
|
||||
DateTime aDate = new DateTime(Year, 1, 1);
|
||||
for (int i = 0; i < tmp.Length; i++)
|
||||
{
|
||||
if (aDate.DayOfWeek == DayOfWeek.Sunday || aDate.DayOfWeek == DayOfWeek.Saturday)
|
||||
tmp[i] = (char)HolidayType.Holiday;
|
||||
else if (nationalHolidays.Contains(String.Format("{0:00}{1:00}", aDate.Month, aDate.Day)))
|
||||
tmp[i] = (char)HolidayType.NationalHoliday;
|
||||
else
|
||||
tmp[i] = (char)HolidayType.WorkDay;
|
||||
|
||||
aDate = aDate.AddDays(1);
|
||||
if (aDate.Year != Year)
|
||||
break;
|
||||
}
|
||||
|
||||
yearData = new String(tmp);
|
||||
}
|
||||
|
||||
string[] result = new string[12];
|
||||
for (int m = 1; m <= 12; m++)
|
||||
{
|
||||
DateTime aDate = new DateTime(Year, m, 1);
|
||||
result[m - 1] = yearData.Substring(aDate.DayOfYear - 1, WGuard1.GetMonthEnd(aDate, 0).Day);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void SetYear(int Year, string[] YearData)
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT COUNT(1) FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", Year));
|
||||
int count;
|
||||
ExecuteScalar(cmd, out count);
|
||||
if (count == 0)
|
||||
{
|
||||
cmd.CommandText = "INSERT INTO BHRD (BHYER, BHHRD, TRDAT, TRMOD, TRUSR) VALUES (@BHYER, @BHHRD, GETDATE(), 'INSERT', 'X001')";
|
||||
}
|
||||
else
|
||||
{
|
||||
cmd.CommandText = "UPDATE BHRD SET BHHRD=@BHHRD, TRDAT=GETDATE(), TRMOD='MODIFY', TRUSR='X001' WHERE BHYER=@BHYER";
|
||||
}
|
||||
cmd.Parameters.Add(Query.NewParameter("BHHRD", String.Concat(YearData)));
|
||||
Query.ExecuteNonQuery(cmd);
|
||||
}
|
||||
|
||||
public string GetMonth(int Year, int Month)
|
||||
{
|
||||
string[] YearData = GetYear(Year);
|
||||
return YearData[Month - 1];
|
||||
}
|
||||
|
||||
public void SetMonth(int Year, int Month, string Value)
|
||||
{
|
||||
string[] YearData = GetYear(Year);
|
||||
YearData[Month - 1] = Value;
|
||||
SetYear(Year, YearData);
|
||||
}
|
||||
|
||||
public HolidayType GetDayHolidayType(DateTime aDateTime)
|
||||
{
|
||||
string bhhrd = "";
|
||||
if (!bhrdData.Contains(aDateTime.Year))
|
||||
{
|
||||
DbCommand cmd = Query.NewCommand("SELECT BHHRD FROM BHRD WHERE BHYER=@BHYER");
|
||||
cmd.Parameters.Add(Query.NewParameter("BHYER", aDateTime.Year));
|
||||
if (ExecuteScalar(cmd, out bhhrd))
|
||||
bhrdData.Add(aDateTime.Year, bhhrd);
|
||||
}
|
||||
else
|
||||
{
|
||||
bhhrd = bhrdData[aDateTime.Year].ToString();
|
||||
}
|
||||
|
||||
if (bhhrd != "")
|
||||
{
|
||||
// 有節假日資料,找出該日之節假日資料
|
||||
char theDay;
|
||||
try
|
||||
{
|
||||
theDay = bhhrd[aDateTime.DayOfYear - 1];
|
||||
}
|
||||
catch
|
||||
{
|
||||
theDay = ' ';
|
||||
}
|
||||
|
||||
switch ((HolidayType)theDay)
|
||||
{
|
||||
case HolidayType.WorkDay: // 上班日
|
||||
case HolidayType.CompensatoryWorkDay: // 補班
|
||||
case HolidayType.NationalHoliday: // 國定假日或民俗假
|
||||
case HolidayType.Holiday: // 例假日
|
||||
case HolidayType.ElasticRest: // 彈性休假
|
||||
case HolidayType.TyphoonRest: // 颱風假
|
||||
case HolidayType.VoteRest: // 選舉假
|
||||
case HolidayType.CompanyActivity: // 公司活動
|
||||
return (HolidayType)theDay;
|
||||
default:
|
||||
if (nationalHolidays.Contains(aDateTime.ToString("MMdd")))
|
||||
return HolidayType.NationalHoliday;
|
||||
else if (aDateTime.DayOfWeek == DayOfWeek.Sunday || aDateTime.DayOfWeek == DayOfWeek.Saturday)
|
||||
return HolidayType.Holiday;
|
||||
else
|
||||
return HolidayType.WorkDay;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 若無節假日資料,則週六、週日為假日
|
||||
if (nationalHolidays.Contains(aDateTime.ToString("MMdd")))
|
||||
return HolidayType.NationalHoliday;
|
||||
else if (aDateTime.DayOfWeek == DayOfWeek.Sunday || aDateTime.DayOfWeek == DayOfWeek.Saturday)
|
||||
return HolidayType.Holiday;
|
||||
else
|
||||
return HolidayType.WorkDay;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsHoliday(string bpeno, DateTime aDateTime)
|
||||
{
|
||||
// 先看班表有沒有資料
|
||||
RtmeDAC rtmeDao = new RtmeDAC();
|
||||
var rtme = rtmeDao.SelectDay(bpeno, aDateTime).FirstOrDefault();
|
||||
if (rtme != null && !string.IsNullOrEmpty(rtme.RTTID.Trim()))
|
||||
{
|
||||
return ItemIsHoliday(rtme.RTTID.Trim());
|
||||
}
|
||||
|
||||
// 若沒有班表資料,用行事曆資料判斷是否需要上班
|
||||
HolidayType theDay = GetDayHolidayType(aDateTime);
|
||||
|
||||
switch (theDay)
|
||||
{
|
||||
case HolidayType.WorkDay: // 上班日
|
||||
case HolidayType.CompensatoryWorkDay: // 補班
|
||||
return false;
|
||||
case HolidayType.NationalHoliday: // 國定假日或民俗假
|
||||
case HolidayType.Holiday: // 例假日
|
||||
case HolidayType.ElasticRest: // 彈性休假
|
||||
case HolidayType.TyphoonRest: // 颱風假
|
||||
case HolidayType.VoteRest: // 選舉假
|
||||
case HolidayType.CompanyActivity: // 公司活動
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool ItemIsHoliday(string item)
|
||||
{
|
||||
return 休假日班表.IndexOf(item.Trim()) >= 0;
|
||||
}
|
||||
}
|
||||
|
||||
public enum HolidayType
|
||||
{
|
||||
/// <summary>
|
||||
/// 無資料
|
||||
/// </summary>
|
||||
Null = ' ',
|
||||
/// <summary>
|
||||
/// 上班日
|
||||
/// </summary>
|
||||
WorkDay = '-',
|
||||
/// <summary>
|
||||
/// 補班
|
||||
/// </summary>
|
||||
CompensatoryWorkDay = 'B',
|
||||
/// <summary>
|
||||
/// 國定假日或民俗假
|
||||
/// </summary>
|
||||
NationalHoliday = 'N',
|
||||
/// <summary>
|
||||
/// 例假日
|
||||
/// </summary>
|
||||
Holiday = 'H',
|
||||
/// <summary>
|
||||
/// 彈性休假
|
||||
/// </summary>
|
||||
ElasticRest = 'V',
|
||||
/// <summary>
|
||||
/// 颱風假
|
||||
/// </summary>
|
||||
TyphoonRest = 'T',
|
||||
/// <summary>
|
||||
/// 選舉假
|
||||
/// </summary>
|
||||
VoteRest = 'E',
|
||||
/// <summary>
|
||||
/// 公司活動
|
||||
/// </summary>
|
||||
CompanyActivity = 'A'
|
||||
}
|
||||
Reference in New Issue
Block a user