Files
thinkyu/Web/App_Code/Calculate/LaborAndHealthFee.cs
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

128 lines
3.2 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Common;
using Wellan.Data;
using Wellan.Common;
using System.Collections.Generic;
/// <summary>
/// 計算勞健保費基礎類別
/// </summary>
public class LaborAndHealthFee
{
protected WQuery _query;
protected DateTime _baseDate;
protected Dictionary<DateTime, List<LHFClass>> _amtData;
protected int _bftyp;
protected string _tableName;
/// <param name="aDate">計算日期</param>
public LaborAndHealthFee(DateTime baseDate)
{
WConnectionString.ConnectionConfigFile = WConfig.GetConnectionConfig();
WConnectionString.ConnectionConfigName = WConfig.GetConnectionConfigName();
_query = new WQuery(WConnectionString.GetConnectionType(), WConnectionString.GetConnectionString());
_baseDate = baseDate;
}
/// <summary>
/// 取得特定日期的級距表
/// </summary>
/// <param name="aDate"></param>
protected void GetData(DateTime aDate)
{
if (_amtData == null)
_amtData = new Dictionary<DateTime,List<LHFClass>>();
if (!_amtData.ContainsKey(aDate))
{
List<LHFClass> _newAmtDataItem = new List<LHFClass>();
// 取得適用級距表版本
DataTable _verData = _query.Select(String.Format("SELECT * FROM BFDT WHERE BFTYP={0} ORDER BY BFVER", _bftyp));
int version = 0;
foreach (System.Data.DataRow row in _verData.Rows)
{
if (aDate.CompareTo(row["BFSDT"]) >= 0 && (row["BFEDT"] == DBNull.Value || aDate.CompareTo(row["BFEDT"]) <= 0))
{
version = Convert.ToInt32(row["BFVER"]);
break;
}
}
// 取得該版本的級距表
DataTable data = _query.Select(String.Format("SELECT * FROM {1} WHERE BSVER={0} ORDER BY BSLVL", version, _tableName));
for (int i = 0; i < data.Rows.Count; i++)
{
_newAmtDataItem.Add(new LHFClass(Convert.ToInt32(data.Rows[i]["BSLOW"]),
Convert.ToInt32(data.Rows[i]["BSHIH"]),
Convert.ToInt32(data.Rows[i]["BSAMT"])));
}
_amtData.Add(aDate, _newAmtDataItem);
}
}
// 取得目前級距表
protected void GetData()
{
GetData(_baseDate);
}
/// <summary>
/// 以特定日期適用的級距表,取得特定日期適用的投保薪資
/// </summary>
/// <param name="aDate"></param>
/// <param name="salary"></param>
/// <returns></returns>
protected double GetAmont(DateTime aDate, int salary)
{
GetData(aDate);
double bsamt = 0;
for (int i = 0; i < _amtData[aDate].Count; i++)
{
if (salary >= _amtData[aDate][i].Low && salary <= _amtData[aDate][i].High)
{
bsamt = _amtData[aDate][i].Amt;
break;
}
}
return bsamt;
}
/// <summary>
/// 以目前級距表,取得投保薪資
/// </summary>
/// <param name="salary"></param>
/// <returns></returns>
protected double GetAmont(int salary)
{
return GetAmont(_baseDate, salary);
}
protected struct LHFClass
{
public int Low;
public int High;
public int Amt;
public LHFClass(int aLow, int aHigh, int aAmt)
{
Low = aLow;
High = aHigh;
Amt = aAmt;
}
}
}