1895 lines
85 KiB
C#
1895 lines
85 KiB
C#
using Mono.Security.Cryptography;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.Common;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using System.Web.UI;
|
||
using System.Web.UI.WebControls;
|
||
using Wellan.Data;
|
||
|
||
/// <summary>
|
||
/// 每月出勤薪資匯總計算
|
||
/// </summary>
|
||
public partial class forms_summary_fmSalaryCalc : Wellan.Web.UI.WUserControlBase
|
||
{
|
||
/// <summary>
|
||
/// 計算年月
|
||
/// </summary>
|
||
private DateTime aYYMM;
|
||
private DbConnection conn;
|
||
private DbCommand cmdInsertSACD;
|
||
private DbCommand cmdDeleteSACD;
|
||
private DbCommand cmdDeleteAllSACD;
|
||
private DbCommand cmdSelectSACD;
|
||
private DbCommand cmdUpdateSACD;
|
||
private DbCommand cmdCloseBPAA;
|
||
private string _BPPYN;
|
||
protected string _BPYMM;
|
||
private GetData _getData;
|
||
private Bhif bhif;
|
||
private Blif blif;
|
||
private Blra blra;
|
||
private SsmsDAC ssmsDao;
|
||
private RcrdDAC rcrdDao;
|
||
private RparDAC rparDao;
|
||
|
||
protected void Page_Load(object sender, EventArgs e)
|
||
{
|
||
}
|
||
|
||
protected override void OnInit(EventArgs e)
|
||
{
|
||
base.OnInit(e);
|
||
_getData = new GetData();
|
||
_getData.Query = Query;
|
||
conn = Query.NewConnection();
|
||
ssmsDao = new SsmsDAC(Query);
|
||
ssmsDao.TRUSR = UserId;
|
||
|
||
#region INIT SQLCOMMAND
|
||
cmdInsertSACD = Query.NewCommand(
|
||
@"INSERT INTO SACD
|
||
(SAPYN, SAYMM, SAACC, SAAMT, SADOC, TRDAT, TRMOD, TRUSR)
|
||
VALUES
|
||
(@SAPYN, @SAYMM, @SAACC, @SAAMT, @SADOC, GETDATE(), 'INSERT', 'X001')");
|
||
cmdInsertSACD.Parameters.Add(Query.NewParameter("SAPYN", DbType.String));
|
||
cmdInsertSACD.Parameters.Add(Query.NewParameter("SAYMM", DbType.DateTime));
|
||
cmdInsertSACD.Parameters.Add(Query.NewParameter("SAACC", DbType.String));
|
||
cmdInsertSACD.Parameters.Add(Query.NewParameter("SAAMT", DbType.Int32));
|
||
cmdInsertSACD.Parameters.Add(Query.NewParameter("SADOC", DbType.String));
|
||
cmdInsertSACD.Connection = conn;
|
||
|
||
cmdDeleteSACD = Query.NewCommand(
|
||
@"DELETE FROM SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM AND SAACC=@SAACC");
|
||
cmdDeleteSACD.Parameters.Add(Query.NewParameter("SAPYN", DbType.String));
|
||
cmdDeleteSACD.Parameters.Add(Query.NewParameter("SAYMM", DbType.DateTime));
|
||
cmdDeleteSACD.Parameters.Add(Query.NewParameter("SAACC", DbType.String));
|
||
cmdDeleteSACD.Connection = conn;
|
||
|
||
cmdDeleteAllSACD = Query.NewCommand(
|
||
@"DELETE FROM SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM");
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("SAPYN", DbType.String));
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("SAYMM", DbType.DateTime));
|
||
cmdDeleteAllSACD.Connection = conn;
|
||
|
||
cmdSelectSACD = Query.NewCommand(
|
||
@"SELECT COUNT(1) FROM SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM AND SAACC=@SAACC");
|
||
cmdSelectSACD.Parameters.Add(Query.NewParameter("SAPYN", DbType.String));
|
||
cmdSelectSACD.Parameters.Add(Query.NewParameter("SAYMM", DbType.DateTime));
|
||
cmdSelectSACD.Parameters.Add(Query.NewParameter("SAACC", DbType.String));
|
||
cmdSelectSACD.Connection = conn;
|
||
|
||
cmdUpdateSACD = Query.NewCommand(
|
||
@"UPDATE SACD SET
|
||
SAAMT=@SAAMT
|
||
WHERE
|
||
SAPYN=@SAPYN AND SAYMM=@SAYMM AND SAACC=@SAACC");
|
||
cmdUpdateSACD.Parameters.Add(Query.NewParameter("SAAMT", DbType.Int32));
|
||
cmdUpdateSACD.Parameters.Add(Query.NewParameter("SAPYN", DbType.String));
|
||
cmdUpdateSACD.Parameters.Add(Query.NewParameter("SAYMM", DbType.DateTime));
|
||
cmdUpdateSACD.Parameters.Add(Query.NewParameter("SAACC", DbType.String));
|
||
cmdUpdateSACD.Connection = conn;
|
||
|
||
cmdCloseBPAA = Query.NewCommand("UPDATE BPAA SET BPMSD=@BPMSD WHERE BPPYN=@BPPYN");
|
||
cmdCloseBPAA.Parameters.Add(Query.NewParameter("BPMSD", DbType.DateTime));
|
||
cmdCloseBPAA.Parameters.Add(Query.NewParameter("BPPYN", DbType.String));
|
||
cmdCloseBPAA.Connection = conn;
|
||
|
||
#endregion
|
||
|
||
_BPPYN = GetStringParam("BPPYN");
|
||
_BPYMM = GetStringParam("BPYMM");
|
||
|
||
if (_BPPYN != "" && _BPYMM != "")
|
||
{
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
MultiView1.ActiveViewIndex = 1;
|
||
pnBPSXX.Visible = true;
|
||
|
||
bool result = true;
|
||
aYYMM = CheckDate(_BPYMM + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
|
||
if (!result)
|
||
return;
|
||
|
||
ddlRSPYN.DataSource = new BpaaDAC().GetBpaaWithTY(aYYMM.Year);
|
||
ddlRSPYN.DataBind();
|
||
//ddlRSPYN.SQL = "SELECT BPPYN, BPPYM FROM BPAA WHERE BPYER=" + (aYYMM.Year - WGuard1.CY11).ToString() + " ORDER BY BPPYN";
|
||
ddlRSPYN.SelectedValue = _BPPYN;
|
||
lbYYMM.Text = _BPYMM;
|
||
}
|
||
else
|
||
{
|
||
SetClientFocus(txtYYMM);
|
||
}
|
||
}
|
||
|
||
protected bool CheckProjectRight()
|
||
{
|
||
// 檢查此使用者是否有權限處理這個專案
|
||
BprmDAC bprm = new BprmDAC(Query);
|
||
if (!bprm.GetRight(ddlRSPYN.SelectedValue, UserId))
|
||
{
|
||
//MultiView1.Visible = false;
|
||
cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
|
||
cvMessage.IsValid = false;
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算薪資
|
||
/// </summary>
|
||
/// <param name="startDate">起始日期</param>
|
||
/// <param name="endDate">結束日期</param>
|
||
/// <param name="bpsrm">月薪</param>
|
||
/// <param name="bpp02">伙食津貼</param>
|
||
/// <param name="monthEndDay">本月天數</param>
|
||
/// <param name="thisMonthStartDay">本月月初日</param>
|
||
/// <param name="thisMonthEndDay">本月月底日</param>
|
||
/// <param name="thisMonthDays">到職天數</param>
|
||
/// <param name="monthSalary">本月薪資</param>
|
||
/// <param name="foodBonus">本月伙食津貼</param>
|
||
/// <param name="bpsal">薪資破月計算方式(1=除以30, 2=除以實際日數)</param>
|
||
protected void CalcSalary(DateTime startDate, DateTime endDate, int bpsrm, int bpp02,
|
||
int monthEndDay, ref DateTime thisMonthStartDay, ref DateTime thisMonthEndDay,
|
||
ref int thisMonthDays, ref int monthSalary, ref int foodBonus, string bpsal)
|
||
{
|
||
int startDay = startDate <= aYYMM ? 1 : startDate.Day;
|
||
int endDay = (endDate.Ticks == 0) ||
|
||
(aYYMM.Year != endDate.Year || aYYMM.Month != endDate.Month)
|
||
? monthEndDay : endDate.Day;
|
||
if (thisMonthStartDay.Ticks == 0)
|
||
thisMonthStartDay = aYYMM.AddDays(startDay - 1);
|
||
thisMonthEndDay = aYYMM.AddDays(endDay - 1);
|
||
|
||
// 決定月天數 (1=30日, 2=該月實際日數)
|
||
int calcMonthDays = 30;
|
||
if (bpsal == "2") {
|
||
calcMonthDays = monthEndDay;
|
||
}
|
||
|
||
// 若破月,則以 (月薪 / 月天數) * 天數 來計算
|
||
if (startDay != 1 || endDay != monthEndDay)
|
||
{
|
||
int thisPartDays = endDay - startDay + 1;
|
||
thisMonthDays += thisPartDays;
|
||
|
||
// 本月開始日是月初,且本月結束日是月底的話,修正天數
|
||
if (thisMonthStartDay == aYYMM && thisMonthEndDay == aYYMM.AddMonths(1).AddDays(-1))
|
||
{
|
||
thisMonthDays -= thisPartDays;
|
||
thisPartDays = calcMonthDays - thisMonthDays;
|
||
thisMonthDays = calcMonthDays;
|
||
}
|
||
|
||
// 若累積起來的天數超過月天數,修正這部份的天數
|
||
if (thisMonthDays > calcMonthDays)
|
||
{
|
||
thisPartDays -= thisMonthDays - calcMonthDays;
|
||
}
|
||
|
||
foodBonus += Convert.ToInt32(Math.Round(Convert.ToDecimal(bpp02) / Convert.ToDecimal(calcMonthDays) * Convert.ToDecimal(thisPartDays),
|
||
MidpointRounding.AwayFromZero));
|
||
monthSalary += Convert.ToInt32(Math.Round(Convert.ToDecimal(bpsrm - bpp02) / Convert.ToDecimal(calcMonthDays) * Convert.ToDecimal(thisPartDays),
|
||
MidpointRounding.AwayFromZero));
|
||
}
|
||
else
|
||
{
|
||
thisMonthDays += monthEndDay;
|
||
foodBonus += bpp02;
|
||
monthSalary += bpsrm - bpp02;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算出勤紀錄與加班費,包括單筆輸入的以及匯總輸入的
|
||
/// </summary>
|
||
/// <param name="startDay">計算起始日</param>
|
||
/// <param name="endDay">計算結束日</param>
|
||
/// <param name="rapyn">專案年度編號</param>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="bpfed">差勤結算日</param>
|
||
/// <param name="bpsrm">月薪</param>
|
||
/// <param name="bpp02">伙食津貼</param>
|
||
/// <param name="bpbft">前二比例</param>
|
||
/// <param name="bpaft">後二比例</param>
|
||
/// <param name="bphol">假日比例</param>
|
||
/// <param name="formula">計算公式</param>
|
||
/// <param name="bpott">加班時數計算方式</param>
|
||
/// <param name="rasdt">專案派遣起始日</param>
|
||
/// <param name="raedt">專案派遣結束日</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="extraWork">加班費計算物件</param>
|
||
/// <param name="SSC02">加班備註</param>
|
||
protected void CalcWork(DateTime startDay, DateTime endDay,
|
||
string rapyn, string bpeno, int bpfed, int bpsrm, int bpp02, double bpbft,
|
||
double bpaft, double bphol, string formula, string bpott,
|
||
DateTime rasdt, DateTime raedt,
|
||
DbTransaction tran, ref ExtraWork extraWork, ref string SSC02)
|
||
{
|
||
// 出勤紀錄
|
||
//DataTable rcrd = rcrdDao.SelectPeriod(bpeno, startDay, endDay);
|
||
|
||
BhrdDAC bhrdDao = new BhrdDAC();
|
||
|
||
RPARRecord rparRecord = new RPARRecord();
|
||
|
||
// 加班單筆輸入
|
||
DataTable rpar1 = _getData.GetRPAR1X(aYYMM, rapyn, startDay, endDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
StringBuilder sb1 = new StringBuilder();
|
||
|
||
foreach (DataRow rparRow in rpar1.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
ExtraWorkData extraData;
|
||
|
||
extraData = extraWork.Add(rparRecord.RPTYP, rparRecord.RPRDT, rparRecord.RPTCT, bpsrm, bpp02, bpbft, bpaft, bphol,
|
||
formula, bpott, rparRecord.RPTC1, rparRecord.RPTC2, rparRecord.RPTC3, rparRecord.RPTC4, rparRecord.RPTC5);
|
||
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb1.Append(rparRecord.RPDOC + "/");
|
||
|
||
rparDao.回填加班費(rparRecord.RPREN,
|
||
WDAC.GetInt32Value(extraData.RPTA1),
|
||
WDAC.GetInt32Value(extraData.RPTA2),
|
||
WDAC.GetInt32Value(extraData.RPTA3),
|
||
WDAC.GetInt32Value(extraData.RPTA4),
|
||
WDAC.GetInt32Value(extraData.RPTA5),
|
||
tran);
|
||
}
|
||
SSC02 += sb1.Length > 0 ? sb1.ToString(0, sb1.Length - 1) : "";
|
||
|
||
// 加班匯總輸入
|
||
DataTable rowk = _getData.GetROWK(aYYMM, rapyn, bpeno, tran);
|
||
ROWKRecord rowkRecord = new ROWKRecord();
|
||
|
||
foreach (DataRow rowkRow in rowk.Rows)
|
||
{
|
||
rowkRecord.FillRecord(rowkRow);
|
||
extraWork.Add(rowkRecord);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算缺勤扣款
|
||
/// </summary>
|
||
/// <param name="startDay">計算起始日</param>
|
||
/// <param name="endDay">計算結束日</param>
|
||
/// <param name="rapyn">專案年度編號</param>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="bpfed">差勤結算日</param>
|
||
/// <param name="bpsrm">月薪</param>
|
||
/// <param name="bpp02">伙食津貼</param>
|
||
/// <param name="formula">計算公式</param>
|
||
/// <param name="absent">缺勤扣款計算物件</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="SSC01">缺勤備註</param>
|
||
protected void CalcAbsent(DateTime startDay, DateTime endDay,
|
||
string rapyn, string bpeno, int bpfed, int bpsrm, int bpp02, string formula,
|
||
DateTime rasdt, DateTime raedt,
|
||
ref Absent absent, DbTransaction tran, ref string SSC01)
|
||
{
|
||
var bp = bpeno == "01698";
|
||
DataTable rpar = _getData.GetRPAR0X(aYYMM, rapyn, startDay, endDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
absent.bpsrm = bpsrm;
|
||
absent.bpp02 = bpp02;
|
||
absent.Formula = formula;
|
||
StringBuilder sb1 = new StringBuilder();
|
||
RPARRecord rparRecord = new RPARRecord();
|
||
|
||
foreach (DataRow rparRow in rpar.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
int rpftr = absent.Add(rparRecord, startDay, endDay, true);
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb1.Append(rparRecord.RPDOC + "/");
|
||
|
||
rparDao.回填缺勤扣款(rparRecord.RPREN, rpftr, tran);
|
||
}
|
||
SSC01 += sb1.Length > 0 ? sb1.ToString(0, sb1.Length - 1) : "";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算差旅費
|
||
/// </summary>
|
||
/// <param name="rapyn">專案年度編號</param>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="bpfed">差勤結算日</param>
|
||
/// <param name="otherFee">差旅費計算物件</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="SSC05">差旅費備註</param>
|
||
/// <param name="SSC07">差旅事由</param>
|
||
protected void CalcOutFee(DateTime startDay, DateTime endDay, string rapyn, string bpeno, int bpfed,
|
||
DateTime rasdt, DateTime raedt,
|
||
ref OtherFee otherFee, DbTransaction tran, ref string SSC05, ref string SSC07)
|
||
{
|
||
DataTable rpar3 = _getData.GetRPAR3X(aYYMM, rapyn, startDay, endDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
List<string> sb1 = new List<string>();
|
||
List<string> sb2 = new List<string>();
|
||
RPARRecord rparRecord = new RPARRecord();
|
||
|
||
foreach (DataRow rparRow in rpar3.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
otherFee.Add(rparRecord);
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb1.Add(rparRecord.RPDOC);
|
||
if (rparRecord.RPRSN.Length > 0)
|
||
sb2.Add(rparRecord.RPRSN);
|
||
}
|
||
|
||
SSC05 += String.Join("/", sb1.ToArray());
|
||
SSC07 += String.Join("/", sb2.ToArray());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算電話費、油料費
|
||
/// </summary>
|
||
/// <param name="rapyn">專案年度編號</param>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="bpfed">差勤結算日</param>
|
||
/// <param name="otherFee">差旅費計算物件</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="SSC03">電話費備註</param>
|
||
/// <param name="SSC04">油料費備註</param>
|
||
protected void CalcPhoneAndFuelFee(DateTime startDay, DateTime endDay, string rapyn, string bpeno, int bpfed,
|
||
DateTime rasdt, DateTime raedt,
|
||
ref OtherFee otherFee, DbTransaction tran, ref string SSC03, ref string SSC04)
|
||
{
|
||
DataTable rpar2 = _getData.GetRPAR2X(aYYMM, rapyn, startDay, endDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
StringBuilder sb1 = new StringBuilder();
|
||
StringBuilder sb2 = new StringBuilder();
|
||
RPARRecord rparRecord = new RPARRecord();
|
||
|
||
foreach (DataRow rparRow in rpar2.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
otherFee.Add(rparRecord);
|
||
switch (rparRecord.RPTYP)
|
||
{
|
||
case RPAR_TYPE.T21_電話費:
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb1.Append(rparRecord.RPDOC + "/");
|
||
break;
|
||
case RPAR_TYPE.T22_油料費:
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb2.Append(rparRecord.RPDOC + "/");
|
||
break;
|
||
}
|
||
}
|
||
SSC03 += sb1.Length > 0 ? sb1.ToString(0, sb1.Length - 1) : "";
|
||
SSC04 += sb2.Length > 0 ? sb2.ToString(0, sb2.Length - 1) : "";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算勞健保費
|
||
/// </summary>
|
||
/// <param name="calcStartDay">計算起始日</param>
|
||
/// <param name="calcEndDay">計算結束日</param>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="monthEndDay">本月月底日</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="bhifFee">健保費</param>
|
||
/// <param name="blifFee">勞保費</param>
|
||
/// <param name="blraFee">勞退金</param>
|
||
/// <param name="thisMonthDays">本月到職天數</param>
|
||
/// <param name="company">公司別</param>
|
||
/// <param name="thisMonthLaborDays">本月勞保天數</param>
|
||
/// <param name="rasnEndDate">派遣結束日</param>
|
||
protected void CalcLaborAndHealth(DateTime calcStartDay, DateTime calcEndDay,
|
||
string bpeno, int monthEndDay, DbTransaction tran, ref HealthInsuranceFee bhifFee,
|
||
ref LaborInsuranceFee blifFee, ref LaborRetireAnnuity blraFee, int thisMonthDays,
|
||
string company, ref int thisMonthLaborDays, DateTime rasnEndDate)
|
||
{
|
||
var bp = bpeno == "02181";
|
||
DataTable rpir勞保 = _getData.GetRPIR(calcStartDay, calcEndDay, bpeno, tran, true);
|
||
|
||
DateTime 本月月初 = new DateTime(calcStartDay.Year, calcStartDay.Month, 1);
|
||
DateTime 本月月底 = 本月月初.AddMonths(1).AddDays(-1);
|
||
|
||
DataTable rpir健保 = _getData.GetRPIR(本月月初, 本月月底, bpeno, tran, false);
|
||
RPIRRecord rpirRecord = new RPIRRecord();
|
||
|
||
#region 1. 計算健保費
|
||
if (rpir健保.Rows.Count > 0)
|
||
{
|
||
// 先以最後一筆來判斷
|
||
rpirRecord.FillRecord(rpir健保.Rows[rpir健保.Rows.Count - 1]);
|
||
|
||
// for debug
|
||
//WGuard1.WLogFile("D:\\TEMP\\CALC", WGuard1.WLogType.Day,
|
||
// bpeno + " 加保日 " + rpirRecord.RPSDT.ToString("yyyy-MM-dd") + " 退保日 " + rpirRecord.RPEDT.ToString("yyyy-MM-dd"));
|
||
|
||
// 要計算健保的狀況
|
||
// 1. 非當月退保
|
||
// 2. 當月月底日退保 而且 當月只有一筆加退保資料
|
||
// 3. 當月月底日結束此專案 或 當月月底日仍處於此專案
|
||
bool BhifFlag = false;
|
||
BhifFlag = (company == "" || rpirRecord.RPCPY == company)
|
||
&& rpirRecord.RPEDT.CompareTo(本月月底) >= 0
|
||
&& (rasnEndDate.Ticks == 0 || rasnEndDate.CompareTo(本月月底) >= 0);
|
||
|
||
if (BhifFlag)
|
||
{
|
||
// 取最後一筆來計算
|
||
rpirRecord.FillRecord(rpir健保.Rows[rpir健保.Rows.Count - 1]);
|
||
|
||
bhifFee.Assign(bhif.GetFee(rpirRecord.RPAM2,
|
||
rpirRecord.RPFMY,
|
||
rpirRecord.RPFM1,
|
||
rpirRecord.RPFM2,
|
||
rpirRecord.RPDIH,
|
||
rpirRecord.RPHIS,
|
||
rpirRecord.RPPTP));
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 2. 計算勞保、勞退金、勞退自提、工資墊償
|
||
foreach (DataRow rpirRow in rpir勞保.Rows)
|
||
{
|
||
rpirRecord.FillRecord(rpirRow);
|
||
DateTime startDay1 = rpirRecord.RPBDT < calcStartDay ? calcStartDay : rpirRecord.RPBDT;
|
||
DateTime endDay1 = (rpirRecord.RPXDT.Ticks == 0) ||
|
||
(aYYMM.Year != rpirRecord.RPXDT.Year || aYYMM.Month != rpirRecord.RPXDT.Month)
|
||
? calcEndDay : rpirRecord.RPXDT;
|
||
|
||
// 勞保費
|
||
blif.Add(rpirRecord.RPAMT, startDay1, endDay1, rpirRecord.GoOut, rpirRecord.RPDIS,
|
||
rpirRecord.RPLIS, rpirRecord.RPOLD, rpirRecord.RPOVR, rpirRecord.RPPTP,
|
||
rpirRecord.RPNAT, ref thisMonthLaborDays);
|
||
|
||
// 勞退提撥
|
||
blra.Add(rpirRecord.RPAM3, startDay1, endDay1, rpirRecord.RPSLA, rpirRecord.RPPTP, thisMonthDays, rpirRecord.RPNAT);
|
||
}
|
||
|
||
// 二月、勞保多筆,整月,要補足 30 天
|
||
if (aYYMM.Month == 2 && rpir勞保.Rows.Count > 1)
|
||
{
|
||
rpirRecord.FillRecord(rpir勞保.Rows[rpir勞保.Rows.Count - 1]);
|
||
if (thisMonthLaborDays == monthEndDay)
|
||
{
|
||
DateTime startDay1 = new DateTime(aYYMM.Year, aYYMM.Month, monthEndDay == 28 ? 27 : 29);
|
||
DateTime endDay1 = new DateTime(aYYMM.Year, aYYMM.Month, monthEndDay == 28 ? 28 : 29);
|
||
|
||
bool goOut = rpirRecord.TRTYPE == 2;
|
||
|
||
// 勞保費
|
||
blif.Add(rpirRecord.RPAMT, startDay1, endDay1, goOut, rpirRecord.RPDIS,
|
||
rpirRecord.RPLIS, rpirRecord.RPOLD, rpirRecord.RPOVR, rpirRecord.RPPTP,
|
||
rpirRecord.RPNAT, ref thisMonthLaborDays);
|
||
|
||
// 勞退提撥
|
||
blra.Add(rpirRecord.RPAM3, startDay1, endDay1, rpirRecord.RPSLA, rpirRecord.RPPTP, thisMonthDays, rpirRecord.RPNAT);
|
||
}
|
||
}
|
||
|
||
blifFee.Add(blif.GetFee());
|
||
blraFee.Add(blra.GetFee());
|
||
#endregion
|
||
}
|
||
|
||
/// <summary>
|
||
/// 計算薪資調整加減項
|
||
/// </summary>
|
||
/// <param name="bpeno">人員編號</param>
|
||
/// <param name="tran">要加入的交易</param>
|
||
/// <param name="SSP99">其他加項</param>
|
||
/// <param name="SSS99">其他減項</param>
|
||
/// <param name="SSC06">加減項備註</param>
|
||
protected void CalcOthers(string rspyn, string bpeno, DbTransaction tran, ref int SSP99,
|
||
ref int SSS99, ref string SSC06)
|
||
{
|
||
DataTable rsaj = new RsajDAC(_getData.Query).GetRSAJ(aYYMM, bpeno, rspyn, tran);
|
||
StringBuilder sb1 = new StringBuilder();
|
||
foreach (DataRow rsajRow in rsaj.Rows)
|
||
{
|
||
int rsamt = Convert.ToInt32(rsajRow["RSAMT"]);
|
||
string rsdoc = rsajRow["RSDOC"].ToString().Trim();
|
||
if (rsamt > 0)
|
||
SSP99 += rsamt;
|
||
else
|
||
SSS99 -= rsamt;
|
||
if (rsdoc.Length > 0)
|
||
sb1.Append(rsdoc + "/");
|
||
}
|
||
SSC06 += sb1.Length > 0 ? sb1.ToString(0, sb1.Length - 1) : "";
|
||
}
|
||
|
||
// 重新計算
|
||
protected void btnOk_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.ErrorMessage = "";
|
||
cvMessage.IsValid = true;
|
||
|
||
// 檢查年月是否正確
|
||
bool result = true;
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
|
||
BPAARecord bpaaRecord = new BPAARecord();
|
||
RASNRecord rasnRecord = new RASNRecord();
|
||
ExtraWork extraWork = new ExtraWork();
|
||
Absent absent = new Absent();
|
||
OtherFee otherFee = new OtherFee();
|
||
bhif = new Bhif(aYYMM);
|
||
blif = new Blif(aYYMM);
|
||
blra = new Blra(aYYMM);
|
||
HealthInsuranceFee bhifFee = new HealthInsuranceFee();
|
||
LaborInsuranceFee blifFee = new LaborInsuranceFee();
|
||
LaborRetireAnnuity blraFee = new LaborRetireAnnuity();
|
||
StringBuilder sb = new StringBuilder();
|
||
rcrdDao = new RcrdDAC();
|
||
rparDao = new RparDAC();
|
||
|
||
// 取得專案年度接單資料
|
||
DataTable bpaa = _getData.GetBPAA_BPPYN(ddlRSPYN.SelectedValue);
|
||
if (bpaa.Rows.Count == 0)
|
||
{
|
||
cvMessage.IsValid = false;
|
||
cvMessage.ErrorMessage = "無此專案";
|
||
return;
|
||
}
|
||
bpaaRecord.FillRecord(bpaa.Rows[0]);
|
||
|
||
// 檢查月關帳日
|
||
if (bpaaRecord.BPMSD > aYYMM)
|
||
{
|
||
cvMessage.IsValid = false;
|
||
cvMessage.ErrorMessage = "此專案此月份已關帳";
|
||
return;
|
||
}
|
||
|
||
// 取出福利金比率
|
||
double fortuneRate = _getData.GetFeeRate("福利金", aYYMM, null);
|
||
|
||
// 取出勞保各項保費比率
|
||
blif.NormalFeeRate = _getData.GetFeeRate("勞保普通傷病", aYYMM, null);
|
||
blif.LostJobFeeRate = _getData.GetFeeRate("勞保就業保險", aYYMM, null);
|
||
if (bpaaRecord.BPCPY == "TY")
|
||
blif.InjuryFeeRate = _getData.GetFeeRate("勞保職業災害(新譽)", aYYMM, null);
|
||
else if (bpaaRecord.BPCPY == "JY")
|
||
blif.InjuryFeeRate = _getData.GetFeeRate("勞保職業災害(展譽)", aYYMM, null);
|
||
else
|
||
blif.InjuryFeeRate = _getData.GetFeeRate("勞保職業災害", aYYMM, null);
|
||
blif.SalaryReverseFundRate = _getData.GetFeeRate("勞保工資墊償", aYYMM, null);
|
||
|
||
// 取出健保費比率
|
||
bhif.HealthInsuranceFeeRate = _getData.GetFeeRate("健保", aYYMM, null);
|
||
bhif.HealthInsuranceAverageFamily = _getData.GetFeeRate("健保平均眷口數", aYYMM, null);
|
||
|
||
// 準備資料存取物件
|
||
conn.Open();
|
||
DbTransaction tran = conn.BeginTransaction();
|
||
cmdInsertSACD.Transaction = tran;
|
||
cmdDeleteSACD.Transaction = tran;
|
||
cmdDeleteAllSACD.Transaction = tran;
|
||
cmdSelectSACD.Transaction = tran;
|
||
cmdUpdateSACD.Transaction = tran;
|
||
|
||
try
|
||
{
|
||
// 刪除月薪資匯總資料
|
||
ssmsDao.Delete(tran, aYYMM, ddlRSPYN.SelectedValue);
|
||
|
||
int monthEndDay = aYYMM.AddMonths(1).AddDays(-1).Day; // 月底日
|
||
int bpfed = bpaaRecord.BPFED; // 差勤結算日
|
||
|
||
#region 專案計算
|
||
if (ddlRSPYN.SelectedValue != "000000001")
|
||
{
|
||
// 取出此年月此專案派遣的人員
|
||
DataTable rasn = _getData.GetRASN_YYMM_BPPYN(aYYMM, bpaaRecord.BPPYN, tran);
|
||
|
||
#region 以派遣紀錄計算員工薪資及勞健保
|
||
|
||
string bpeno = "";
|
||
int thisMonthDays = 0;
|
||
int thisMonthLaborDays = 0;
|
||
int monthSalary = 0;
|
||
int foodBonus = 0;
|
||
string SSC01 = "";
|
||
string SSC02 = "";
|
||
string SSC03 = "";
|
||
string SSC04 = "";
|
||
string SSC05 = "";
|
||
string SSC06 = "";
|
||
string SSC07 = "";
|
||
int SSP99 = 0;
|
||
int SSS99 = 0;
|
||
DateTime calcStartDay = new DateTime(); // 本人本月計算起始日 (本人本月在職第一天)
|
||
DateTime calcEndDay = new DateTime(); // 本人本月計算結束日 (本人本月在職最後一天)
|
||
|
||
for (int i = 0; i < rasn.Rows.Count; i++)
|
||
{
|
||
DataRow rasnRow = rasn.Rows[i];
|
||
rasnRecord.FillRecord(rasnRow);
|
||
|
||
blif.Clear();
|
||
blra.Clear();
|
||
|
||
// 清除累加用變數
|
||
// 下一筆資料與上一筆資料不同人,金額要清除
|
||
// (一個人一個月之內多次派遣同一專案,金額要累加)
|
||
if (bpeno.CompareTo(rasnRecord.RANUM) != 0)
|
||
{
|
||
thisMonthDays = 0;
|
||
thisMonthLaborDays = 0;
|
||
monthSalary = 0;
|
||
foodBonus = 0;
|
||
SSC01 = "";
|
||
SSC02 = "";
|
||
SSC03 = "";
|
||
SSC04 = "";
|
||
SSC05 = "";
|
||
SSC07 = "";
|
||
//SSC06 = "";
|
||
//SSP99 = 0;
|
||
//SSS99 = 0;
|
||
extraWork.Clear();
|
||
absent.Clear();
|
||
otherFee.Clear();
|
||
bhifFee.Init();
|
||
blifFee.Init();
|
||
blraFee.Init();
|
||
|
||
bpeno = rasnRecord.RANUM;
|
||
}
|
||
// "其他加減項" 一律清除 (但同一個人同一個月派遣同一專案多次時,只能計算一次)
|
||
SSC06 = "";
|
||
SSP99 = 0;
|
||
SSS99 = 0;
|
||
|
||
calcStartDay = new DateTime();
|
||
calcEndDay = new DateTime();
|
||
|
||
// 1. 計算薪資,伙食津貼
|
||
CalcSalary(rasnRecord.RASDT, rasnRecord.RAEDT, rasnRecord.BPSRM, rasnRecord.BPP02,
|
||
monthEndDay, ref calcStartDay, ref calcEndDay, ref thisMonthDays,
|
||
ref monthSalary, ref foodBonus, bpaaRecord.BPSAL);
|
||
|
||
// 2. 計算出勤紀錄與加班費
|
||
CalcWork(calcStartDay, calcEndDay, rasnRecord.RAPYN,
|
||
rasnRecord.RANUM, bpfed, rasnRecord.BPSRM, rasnRecord.BPP02,
|
||
rasnRecord.BPBFT, rasnRecord.BPAFT, rasnRecord.BPHOL, rasnRecord.BPOVR,
|
||
bpaaRecord.BPOTT, rasnRecord.RASDT, rasnRecord.RAEDT,
|
||
tran, ref extraWork, ref SSC02);
|
||
|
||
// 3. 計算缺勤扣款
|
||
CalcAbsent(calcStartDay, calcEndDay, rasnRecord.RAPYN,
|
||
rasnRecord.RANUM, bpfed, rasnRecord.BPSRM, rasnRecord.BPP02,
|
||
rasnRecord.BPLVE, rasnRecord.RASDT, rasnRecord.RAEDT,
|
||
ref absent, tran, ref SSC01);
|
||
|
||
// 4. 計算差旅費
|
||
CalcOutFee(calcStartDay, calcEndDay, rasnRecord.RAPYN, rasnRecord.RANUM, bpfed, rasnRecord.RASDT, rasnRecord.RAEDT, ref otherFee, tran,
|
||
ref SSC05, ref SSC07);
|
||
|
||
// 5. 計算電話費、油料費
|
||
CalcPhoneAndFuelFee(calcStartDay, calcEndDay, rasnRecord.RAPYN, rasnRecord.RANUM, bpfed, rasnRecord.RASDT, rasnRecord.RAEDT, ref otherFee,
|
||
tran, ref SSC03, ref SSC04);
|
||
|
||
// 6. 計算勞保、健保、勞退金、勞退自提、工資墊償
|
||
CalcLaborAndHealth(calcStartDay, calcEndDay, rasnRecord.RANUM,
|
||
monthEndDay, tran, ref bhifFee, ref blifFee, ref blraFee, thisMonthDays, bpaaRecord.BPCPY,
|
||
ref thisMonthLaborDays, rasnRecord.RAEDT);
|
||
|
||
// 7. 計算其他加減項
|
||
CalcOthers(rasnRecord.RAPYN, rasnRecord.RANUM, tran, ref SSP99, ref SSS99,
|
||
ref SSC06);
|
||
|
||
// 下一筆是同一個人,
|
||
if (i < rasn.Rows.Count - 1 && rasnRecord.RANUM.CompareTo(rasn.Rows[i + 1]["RANUM"]) == 0)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
// 寫入月薪資匯總
|
||
#region 寫入月薪資匯總
|
||
|
||
SsmsRecord ssmsRec = new SsmsRecord();
|
||
ssmsRec.SSYMM = aYYMM; // 薪資月份
|
||
ssmsRec.SSENO = rasnRecord.RANUM; // 人員編號
|
||
ssmsRec.SSNUM = rasnRecord.RACNM; // 客戶編號
|
||
ssmsRec.SSPYN = rasnRecord.RAPYN; // 專案年度編號
|
||
ssmsRec.SSJNO = rasnRecord.RAJNO; // 職稱
|
||
ssmsRec.SSCNO = rasnRecord.RACNO; // 等級
|
||
ssmsRec.SSBRH = rasnRecord.RABRH; // 站別
|
||
ssmsRec.SSD01 = thisMonthDays; // 到職天數
|
||
ssmsRec.SSD02 = blifFee.InWorkDays; // 勞保到職天數
|
||
ssmsRec.SSSRD = rasnRecord.BPSRD; // 時薪
|
||
ssmsRec.SSP00 = monthSalary; // 本薪
|
||
ssmsRec.SSP01 =
|
||
(absent.AllPresent ? rasnRecord.BPP01 : 0); // 全勤獎金
|
||
ssmsRec.SSP02 = foodBonus; // 伙食津貼
|
||
ssmsRec.SSP03 = rasnRecord.BPP03; // 職務加給
|
||
ssmsRec.SSP04 = rasnRecord.BPP04; // 派駐津貼
|
||
ssmsRec.SSP05 = rasnRecord.BPP05; // 其他津貼
|
||
ssmsRec.SSP06 = extraWork.RPTA1; // 前二加班
|
||
ssmsRec.SSP07 = extraWork.RPTA2; // 後二加班
|
||
ssmsRec.SSP08 = extraWork.RPTA3; // 假日加班
|
||
ssmsRec.SSP09 = otherFee.ShortTrip; // 短差
|
||
ssmsRec.SSP10 = otherFee.LongTrip; // 長差
|
||
ssmsRec.SSP11 = otherFee.TelephoneFee; // 電話費
|
||
ssmsRec.SSP12 = otherFee.FuelFee; // 油料費
|
||
ssmsRec.SSP13 = extraWork.RPTA4; // 加班費2.67
|
||
ssmsRec.SSP14 = extraWork.RPTA5; // 加班費2.00
|
||
ssmsRec.SSP15 = 0; // 加項15
|
||
ssmsRec.SSP99 = SSP99; // 其他加項
|
||
ssmsRec.SSS01 = absent.SSS01; // 病假扣款
|
||
ssmsRec.SSS02 = absent.SSS02; // 事假扣款
|
||
ssmsRec.SSS03 = 0; // 所得稅
|
||
ssmsRec.SSS04 = blifFee.TotalPersonalFee; // 勞保費
|
||
ssmsRec.SSS05 = bhifFee.PersonalFee; // 健保費
|
||
ssmsRec.SSS06 = blraFee.PersonalFee; // 勞退自提
|
||
ssmsRec.SSS07 =
|
||
Convert.ToInt32(Math.Round(Convert.ToDouble(monthSalary + foodBonus) * fortuneRate,
|
||
MidpointRounding.AwayFromZero)); // 福利金
|
||
ssmsRec.SSS08 = 0; // 健保補充保費
|
||
ssmsRec.SSS09 = absent.SSS09; // 無薪假扣款
|
||
ssmsRec.SSS10 = 0; // 減項10
|
||
ssmsRec.SSS11 = 0; // 減項11
|
||
ssmsRec.SSS12 = 0; // 減項12
|
||
ssmsRec.SSS13 = 0; // 減項13
|
||
ssmsRec.SSS14 = 0; // 減項14
|
||
ssmsRec.SSS15 = 0; // 減項15
|
||
ssmsRec.SSS99 = SSS99; // 其他減項
|
||
ssmsRec.SSH01 = Convert.ToInt32(Math.Round(blifFee.NormalCompanyFee, MidpointRounding.AwayFromZero)); // 雇主勞保費
|
||
ssmsRec.SSH02 = Convert.ToInt32(Math.Round(blifFee.InjuryCompanyFee, MidpointRounding.AwayFromZero)); // 職災保險
|
||
ssmsRec.SSH03 = Convert.ToInt32(Math.Round(blifFee.LostJobCompanyFee, MidpointRounding.AwayFromZero)); // 就業保險
|
||
ssmsRec.SSH04 = Convert.ToInt32(Math.Round(blifFee.SalaryReverseFund, MidpointRounding.AwayFromZero)); // 工資墊償
|
||
ssmsRec.SSH05 = bhifFee.CompanyFee; // 雇主健保費
|
||
ssmsRec.SSH06 = blraFee.CompanyFee; // 勞退提撥
|
||
ssmsRec.SSH07 = 0; // 雇主07
|
||
ssmsRec.SSH08 = 0; // 雇主08
|
||
ssmsRec.SSH09 = 0; // 雇主09
|
||
ssmsRec.SSH10 = 0; // 雇主10
|
||
ssmsRec.SST01 = extraWork.RPTC1; // 加班1.34時數
|
||
ssmsRec.SST02 = extraWork.RPTC2; // 加班1.67時數
|
||
ssmsRec.SST03 = extraWork.RPTC3; // 加班1.00時數
|
||
ssmsRec.SST04 = extraWork.RelaxationAllowance; // 累積補休時數
|
||
ssmsRec.SST06 = absent.SST06; // 特休時數
|
||
ssmsRec.SST05 = absent.SST05; // 補休時數
|
||
ssmsRec.SST07 = absent.SST07; // 事假時數
|
||
ssmsRec.SST08 = absent.SST08; // 病假時數
|
||
ssmsRec.SST09 = absent.SST09; // 喪假時數
|
||
ssmsRec.SST10 = absent.SST10; // 產假時數
|
||
ssmsRec.SST11 = absent.SST11; // 婚假時數
|
||
ssmsRec.SST12 = absent.SST12; // 陪產假時數
|
||
ssmsRec.SST13 = absent.SST13; // 公假時數
|
||
ssmsRec.SST14 = absent.SST14; // 工傷假時數
|
||
ssmsRec.SST15 = absent.SST15; // 生理假時數
|
||
ssmsRec.SST16 = absent.SST16; // 家庭照顧假時數
|
||
ssmsRec.SST17 = absent.SST17; // 育嬰假時數
|
||
ssmsRec.SST18 = otherFee.FuelKm; // 油料補助公里數
|
||
ssmsRec.SST19 = absent.SST19; // 原民祭儀假時數
|
||
ssmsRec.SST20 = absent.SST20; // 產檢假時數時數
|
||
ssmsRec.SST21 = extraWork.RPTC4; // 加班2.67時數
|
||
ssmsRec.SST22 = extraWork.RPTC5; // 加班2.00時數
|
||
ssmsRec.SST23 = absent.SST23; // 無薪假時數
|
||
ssmsRec.SST24 = 0; // 時數 24
|
||
ssmsRec.SST25 = 0; // 時數 25
|
||
ssmsRec.SSL01 = blifFee.InsuranceSalary; // 勞保投保等級
|
||
ssmsRec.SSL02 = bhifFee.InsuranceSalary; // 健保投保等級
|
||
ssmsRec.SSL03 = blraFee.AnnuitySalary; // 勞退提撥等級
|
||
ssmsRec.SSL04 = blifFee.InjurySalary; // 職災投保等級
|
||
ssmsRec.SSL05 = 0; // 等級05
|
||
ssmsRec.SSC01 = SSC01; // 請假備註
|
||
ssmsRec.SSC02 = SSC02; // 加班備註
|
||
ssmsRec.SSC03 = SSC03; // 電話費備註
|
||
ssmsRec.SSC04 = SSC04; // 油料費備註
|
||
ssmsRec.SSC05 = SSC05; // 差勤備註
|
||
ssmsRec.SSC06 = SSC06; // 薪資加減備註
|
||
ssmsRec.SSC07 = SSC07; // 差旅事由
|
||
ssmsRec.SSC08 = ""; // 休息日加班超過8小時時數備註
|
||
ssmsRec.SSC09 = ""; // 備註09
|
||
ssmsRec.SSC10 = ""; // 備註10
|
||
|
||
ssmsDao.InsertOne(tran, ssmsRec);
|
||
|
||
#endregion
|
||
}
|
||
// 刪除從專案派遣中不存在的資料
|
||
|
||
#endregion
|
||
|
||
#region 以專案計算科目匯總
|
||
|
||
// 準備參數
|
||
cmdInsertSACD.Parameters["SAPYN"].Value = bpaaRecord.BPPYN;
|
||
cmdInsertSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
cmdSelectSACD.Parameters["SAPYN"].Value = bpaaRecord.BPPYN;
|
||
cmdSelectSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
cmdUpdateSACD.Parameters["SAPYN"].Value = bpaaRecord.BPPYN;
|
||
cmdUpdateSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
cmdDeleteSACD.Parameters["SAPYN"].Value = bpaaRecord.BPPYN;
|
||
cmdDeleteSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
|
||
// 1. 計算各科目匯總
|
||
DataTable ssms01 = _getData.GetSSMSSum01(aYYMM, bpaaRecord.BPPYN, tran);
|
||
|
||
List<string> bpsxx = new List<string>();
|
||
SortedDictionary<string, int> bpsxxAmt = new SortedDictionary<string, int>();
|
||
|
||
// 薪資科目
|
||
if (bpaaRecord.BPS01 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS01))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS01);
|
||
bpsxxAmt[bpaaRecord.BPS01] = Convert.ToInt32(ssms01.Rows[0]["BPS01"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS01] += Convert.ToInt32(ssms01.Rows[0]["BPS01"]);
|
||
}
|
||
|
||
// 勞保雇主部份負擔科目
|
||
if (bpaaRecord.BPS02 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS02))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS02);
|
||
bpsxxAmt[bpaaRecord.BPS02] = Convert.ToInt32(ssms01.Rows[0]["BPS02"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS02] += Convert.ToInt32(ssms01.Rows[0]["BPS02"]);
|
||
}
|
||
|
||
// 健保雇主部份負擔科目
|
||
if (bpaaRecord.BPS03 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS03))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS03);
|
||
bpsxxAmt[bpaaRecord.BPS03] = Convert.ToInt32(ssms01.Rows[0]["BPS03"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS03] += Convert.ToInt32(ssms01.Rows[0]["BPS03"]);
|
||
}
|
||
|
||
// 工資墊償基金科目
|
||
if (bpaaRecord.BPS04 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS04))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS04);
|
||
bpsxxAmt[bpaaRecord.BPS04] = Convert.ToInt32(ssms01.Rows[0]["BPS04"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS04] += Convert.ToInt32(ssms01.Rows[0]["BPS04"]);
|
||
}
|
||
|
||
// 勞退金提撥科目
|
||
if (bpaaRecord.BPS05 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS05))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS05);
|
||
bpsxxAmt[bpaaRecord.BPS05] = Convert.ToInt32(ssms01.Rows[0]["BPS05"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS05] += Convert.ToInt32(ssms01.Rows[0]["BPS05"]);
|
||
}
|
||
|
||
// 外勤作業費科目
|
||
if (bpaaRecord.BPS06 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS06))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS06);
|
||
bpsxxAmt[bpaaRecord.BPS06] = Convert.ToInt32(ssms01.Rows[0]["BPS06"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS06] += Convert.ToInt32(ssms01.Rows[0]["BPS06"]);
|
||
}
|
||
|
||
// 油料費科目
|
||
if (bpaaRecord.BPS07 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS07))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS07);
|
||
bpsxxAmt[bpaaRecord.BPS07] = Convert.ToInt32(ssms01.Rows[0]["BPS07"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS07] += Convert.ToInt32(ssms01.Rows[0]["BPS07"]);
|
||
}
|
||
|
||
// 加班費科目
|
||
if (bpaaRecord.BPS08 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS08))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS08);
|
||
bpsxxAmt[bpaaRecord.BPS08] = Convert.ToInt32(ssms01.Rows[0]["BPS08"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS08] += Convert.ToInt32(ssms01.Rows[0]["BPS08"]);
|
||
}
|
||
|
||
// 電話費科目
|
||
if (bpaaRecord.BPS09 != "")
|
||
{
|
||
if (!bpsxx.Contains(bpaaRecord.BPS09))
|
||
{
|
||
bpsxx.Add(bpaaRecord.BPS09);
|
||
bpsxxAmt[bpaaRecord.BPS09] = Convert.ToInt32(ssms01.Rows[0]["BPS09"]);
|
||
}
|
||
else
|
||
bpsxxAmt[bpaaRecord.BPS09] += Convert.ToInt32(ssms01.Rows[0]["BPS09"]);
|
||
}
|
||
|
||
// 清除科目匯總,除了有科目對應的之外,其他科目都清除
|
||
cmdDeleteAllSACD.CommandText =
|
||
@"DELETE FROM SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM ";
|
||
cmdDeleteAllSACD.Parameters.Clear();
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("SAPYN", bpaaRecord.BPPYN));
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("SAYMM", aYYMM));
|
||
|
||
// 管理費用項下之科目都不清除
|
||
if (bpaaRecord.BPS15 != "")
|
||
{
|
||
cmdDeleteAllSACD.CommandText += " AND (SUBSTRING(SAACC,1,4) <> @BPS15) ";
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("BPS15", (bpaaRecord.BPS15.Length < 4 ? bpaaRecord.BPS15 : bpaaRecord.BPS15.Substring(0, 4))));
|
||
}
|
||
|
||
// 公費科目不清除
|
||
if (bpaaRecord.BPS13 != "")
|
||
{
|
||
cmdDeleteAllSACD.CommandText += " AND (SAACC <> @BPS13) ";
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("BPS13", bpaaRecord.BPS13));
|
||
}
|
||
|
||
// 上面計算出來的科目不清除
|
||
for (int i = 0; i < bpsxx.Count; i++)
|
||
{
|
||
cmdDeleteAllSACD.CommandText += " AND (SAACC <> @SAACC_" + bpsxx[i] + ") ";
|
||
cmdDeleteAllSACD.Parameters.Add(Query.NewParameter("SAACC_" + bpsxx[i], bpsxx[i]));
|
||
}
|
||
|
||
cmdDeleteAllSACD.ExecuteNonQuery();
|
||
|
||
// 寫入科目匯總
|
||
for (int i = 0; i < bpsxx.Count; i++)
|
||
{
|
||
// 先看該科目匯總是否存在
|
||
cmdSelectSACD.Parameters["SAACC"].Value = bpsxx[i];
|
||
object o = cmdSelectSACD.ExecuteScalar();
|
||
|
||
// 不存在就新增,抓預設備註填入備註
|
||
if (o == null || Convert.ToInt32(o) == 0)
|
||
{
|
||
cmdInsertSACD.Parameters["SAACC"].Value = bpsxx[i];
|
||
cmdInsertSACD.Parameters["SAAMT"].Value = bpsxxAmt[bpsxx[i]];
|
||
cmdInsertSACD.Parameters["SADOC"].Value = _getData.GetBPAB_BPDOC(bpaaRecord.BPPYN, bpsxx[i], tran);
|
||
cmdInsertSACD.ExecuteNonQuery();
|
||
}
|
||
// 存在就直接更新金額,這樣可以保留備註
|
||
else
|
||
{
|
||
cmdUpdateSACD.Parameters["SAACC"].Value = bpsxx[i];
|
||
cmdUpdateSACD.Parameters["SAAMT"].Value = bpsxxAmt[bpsxx[i]];
|
||
cmdUpdateSACD.ExecuteNonQuery();
|
||
}
|
||
}
|
||
|
||
// 2. 計算各項憑證
|
||
/*
|
||
DataTable rpfe = clac.GetRPFESum(aYYMM, bpaaRecord.BPPYN, tran);
|
||
foreach (DataRow rpfeRow in rpfe.Rows)
|
||
{
|
||
cmdSelectSACD.Parameters["SAACC"].Value = rpfeRow["RPACC"];
|
||
object o = cmdSelectSACD.ExecuteScalar();
|
||
if (o == null || Convert.ToInt32(o) == 0)
|
||
{
|
||
cmdInsertSACD.Parameters["SAACC"].Value = rpfeRow["RPACC"];
|
||
cmdInsertSACD.Parameters["SAAMT"].Value = rpfeRow["RPAMT"];
|
||
cmdInsertSACD.ExecuteNonQuery();
|
||
}
|
||
else
|
||
{
|
||
cmdUpdateSACD.Parameters["SAACC"].Value = rpfeRow["RPACC"];
|
||
cmdUpdateSACD.Parameters["SAAMT"].Value = rpfeRow["RPAMT"];
|
||
cmdUpdateSACD.ExecuteNonQuery();
|
||
}
|
||
}
|
||
*/
|
||
|
||
// 寫入營業稅
|
||
WriteTax(aYYMM, bpaaRecord.BPPYN, tran);
|
||
|
||
#endregion
|
||
}
|
||
#endregion
|
||
|
||
#region 非專案計算
|
||
else
|
||
{
|
||
double bpbft;
|
||
double bpaft;
|
||
double bphol;
|
||
string bpovr;
|
||
string bplve;
|
||
DateTime rasdt = new DateTime(1900, 1, 1);
|
||
DateTime raedt = new DateTime(2999, 12, 31);
|
||
|
||
// 取得加班費比例與計算方式
|
||
BpslDAC bpslDAO = new BpslDAC(Query);
|
||
_getData.GetRASN_Overwork_Rate(ddlRSPYN.SelectedValue, out bpbft, out bpaft, out bphol, out bpovr, out bplve);
|
||
|
||
// 取得年月曾經在職的人員
|
||
DataTable bpsnInMonth = _getData.GetBPSNInMonth(aYYMM, tran);
|
||
|
||
foreach (DataRow bpsnRow in bpsnInMonth.Rows)
|
||
{
|
||
string bpeno = bpsnRow["BPENO"].ToString();
|
||
DateTime bpedy = bpsnRow["BPEDY"] != DBNull.Value ? Convert.ToDateTime(bpsnRow["BPEDY"]) : new DateTime(0);
|
||
|
||
// 取得年月人員未派遣出去的資料,以及薪資異動資料
|
||
DataTable bpsnNoCase = _getData.GetBPSNNoCase(aYYMM, bpeno, tran);
|
||
BPSNNoCaseRecord bpsnNoCaseRec = new BPSNNoCaseRecord();
|
||
|
||
// 變數初值
|
||
int thisMonthDays = 0;
|
||
int thisMonthLaborDays = 0;
|
||
int monthSalary = 0;
|
||
int foodBonus = 0;
|
||
string SSC01 = "";
|
||
string SSC02 = "";
|
||
string SSC03 = "";
|
||
string SSC04 = "";
|
||
string SSC05 = "";
|
||
string SSC06 = "";
|
||
string SSC07 = "";
|
||
int SSP99 = 0;
|
||
int SSS99 = 0;
|
||
int bpsrd = 0;
|
||
int bpsrd1 = 0;
|
||
int bpsrm1 = 0;
|
||
int bpp021 = 0;
|
||
DateTime calcStartDay = new DateTime(); // 本人本月計算起始日 (本人本月在職第一天)
|
||
DateTime calcEndDay = new DateTime(); // 本人本月計算結束日 (本人本月在職最後一天)
|
||
extraWork.Clear();
|
||
absent.Clear();
|
||
absent.Formula = GetData.defaultBPLVE;
|
||
otherFee.Clear();
|
||
blif.Clear();
|
||
blra.Clear();
|
||
bhifFee.Init();
|
||
blifFee.Init();
|
||
blraFee.Init();
|
||
|
||
// 1. 計算薪資,伙食津貼
|
||
if (bpsnNoCase.Rows.Count > 0)
|
||
{
|
||
foreach (DataRow noCaseRow in bpsnNoCase.Rows)
|
||
{
|
||
bpsnNoCaseRec.FillRecord(noCaseRow);
|
||
|
||
CalcSalary(bpsnNoCaseRec.STA_DATE, bpsnNoCaseRec.END_DATE, bpsnNoCaseRec.BPSRM, bpsnNoCaseRec.BPP02,
|
||
monthEndDay, ref calcStartDay, ref calcEndDay, ref thisMonthDays, ref monthSalary, ref foodBonus,
|
||
bpaaRecord.BPSAL);
|
||
}
|
||
|
||
// 取得最後一筆時薪資料
|
||
bpsrd = bpsnNoCaseRec.BPSRD;
|
||
}
|
||
else
|
||
{
|
||
calcStartDay = bpsnRow["BPSDY"] != DBNull.Value ? Convert.ToDateTime(bpsnRow["BPSDY"]) : aYYMM;
|
||
calcEndDay = bpsnRow["BPEDY"] != DBNull.Value ? Convert.ToDateTime(bpsnRow["BPEDY"]) : aYYMM.AddMonths(1).AddDays(-1);
|
||
}
|
||
|
||
// 2. 計算加班費
|
||
// 2.1. 單筆輸入的加班費
|
||
DataTable rpar1 = _getData.GetRPAR1X(aYYMM, ddlRSPYN.SelectedValue, calcStartDay, calcEndDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
sb.Length = 0;
|
||
RPARRecord rparRecord = new RPARRecord();
|
||
|
||
foreach (DataRow rparRow in rpar1.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
|
||
// 以員工編號及日期取得月薪資料、伙食津貼資料
|
||
DataTable bpslData = bpslDAO.SelectBPSLDateRange(bpeno, rparRecord.RPRDT, rparRecord.RPRDT, tran);
|
||
if (bpslData.Rows.Count > 0)
|
||
{
|
||
bpsrm1 = Convert.ToInt32(bpslData.Rows[0]["BPSRM"]);
|
||
bpp021 = Convert.ToInt32(bpslData.Rows[0]["BPP02"]);
|
||
}
|
||
|
||
ExtraWorkData extraData = extraWork.Add(rparRecord.RPTYP, rparRecord.RPRDT, rparRecord.RPTCT, bpsrm1, bpp021,
|
||
bpbft, bpaft, bphol, bpovr, bpaaRecord.BPOTT, rparRecord.RPTC1, rparRecord.RPTC2,
|
||
rparRecord.RPTC3, rparRecord.RPTC4, rparRecord.RPTC5);
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb.Append(rparRecord.RPDOC + "/");
|
||
|
||
rparDao.回填加班費(rparRecord.RPREN,
|
||
WDAC.GetInt32Value(extraData.RPTA1),
|
||
WDAC.GetInt32Value(extraData.RPTA2),
|
||
WDAC.GetInt32Value(extraData.RPTA3),
|
||
WDAC.GetInt32Value(extraData.RPTA4),
|
||
WDAC.GetInt32Value(extraData.RPTA5),
|
||
tran);
|
||
}
|
||
SSC02 += sb.Length > 0 ? sb.ToString(0, sb.Length - 1) : "";
|
||
|
||
// 2.2. 加班匯總輸入的加班費
|
||
DataTable rowk = _getData.GetROWK(aYYMM, ddlRSPYN.SelectedValue, bpeno, tran);
|
||
ROWKRecord rowkRecord = new ROWKRecord();
|
||
|
||
foreach (DataRow rowkRow in rowk.Rows)
|
||
{
|
||
rowkRecord.FillRecord(rowkRow);
|
||
extraWork.Add(rowkRecord);
|
||
}
|
||
|
||
// 3. 計算缺勤扣款
|
||
DataTable rpar = _getData.GetRPAR0X(aYYMM, ddlRSPYN.SelectedValue, calcStartDay, calcEndDay, rasdt, raedt, bpeno, bpfed, tran);
|
||
sb.Length = 0;
|
||
|
||
foreach (DataRow rparRow in rpar.Rows)
|
||
{
|
||
rparRecord.FillRecord(rparRow);
|
||
|
||
// 以員工編號及日期取得月薪資料、伙食津貼資料
|
||
DataTable bpslData = bpslDAO.SelectBPSLDateRange(bpeno, rparRecord.RPRDT, rparRecord.RPRDT, tran);
|
||
if (bpslData.Rows.Count > 0)
|
||
{
|
||
bpsrm1 = Convert.ToInt32(bpslData.Rows[0]["BPSRM"]);
|
||
bpp021 = Convert.ToInt32(bpslData.Rows[0]["BPP02"]);
|
||
}
|
||
|
||
absent.bpsrm = bpsrm1;
|
||
absent.bpp02 = bpp021;
|
||
absent.Formula = bplve;
|
||
int rpftr = absent.Add(rparRecord, calcStartDay, calcEndDay, true);
|
||
if (rparRecord.RPDOC.Length > 0)
|
||
sb.Append(rparRecord.RPDOC + "/");
|
||
|
||
rparDao.回填缺勤扣款(rparRecord.RPREN, rpftr, tran);
|
||
}
|
||
SSC01 += sb.Length > 0 ? sb.ToString(0, sb.Length - 1) : "";
|
||
|
||
// 4. 計算差旅費
|
||
CalcOutFee(calcStartDay, calcEndDay, ddlRSPYN.SelectedValue, bpeno, bpfed, rasdt, raedt, ref otherFee, tran, ref SSC05, ref SSC07);
|
||
|
||
// 5. 計算電話費、油料費
|
||
CalcPhoneAndFuelFee(calcStartDay, calcEndDay, ddlRSPYN.SelectedValue, bpeno, bpfed, rasdt, raedt, ref otherFee, tran,
|
||
ref SSC03, ref SSC04);
|
||
|
||
// 6. 計算勞保、健保、勞退金、勞退自提、工資墊償
|
||
if (bpsnNoCase.Rows.Count > 0)
|
||
CalcLaborAndHealth(calcStartDay, calcEndDay, bpeno, monthEndDay,
|
||
tran, ref bhifFee, ref blifFee, ref blraFee, thisMonthDays, "",
|
||
ref thisMonthLaborDays, bpedy);
|
||
|
||
// 7. 計算其他加減項
|
||
CalcOthers(ddlRSPYN.SelectedValue, bpeno, tran, ref SSP99, ref SSS99, ref SSC06);
|
||
|
||
// 若各項金額皆無資料,不寫檔
|
||
if (bpsnNoCase.Rows.Count == 0 &&
|
||
rpar1.Rows.Count == 0 &&
|
||
rpar.Rows.Count == 0 &&
|
||
otherFee.FuelKm == 0 &&
|
||
otherFee.LongTrip == 0 &&
|
||
otherFee.ShortTrip == 0 &&
|
||
otherFee.TelephoneFee == 0 &&
|
||
SSP99 == 0 &&
|
||
SSS99 == 0)
|
||
continue;
|
||
|
||
// 寫入薪資匯總檔
|
||
#region 寫入月薪資匯總
|
||
|
||
SsmsRecord ssmsRec = new SsmsRecord();
|
||
|
||
ssmsRec.SSYMM = aYYMM; // 薪資月份
|
||
ssmsRec.SSENO = bpeno; // 人員編號
|
||
ssmsRec.SSNUM = ""; // 客戶編號
|
||
ssmsRec.SSPYN = "000000001"; // 專案年度編號
|
||
ssmsRec.SSJNO = ""; // 職稱
|
||
ssmsRec.SSCNO = ""; // 等級
|
||
ssmsRec.SSBRH = ""; // 站別
|
||
ssmsRec.SSD01 = thisMonthDays; // 到職天數
|
||
ssmsRec.SSD02 = blifFee.InWorkDays; // 勞保到職天數
|
||
ssmsRec.SSSRD = bpsrd != 0 ? bpsrd : bpsrd1; // 時薪
|
||
ssmsRec.SSP00 = monthSalary; // 本薪
|
||
ssmsRec.SSP01 =
|
||
(absent.AllPresent ? rasnRecord.BPP01 : 0); // 全勤獎金
|
||
ssmsRec.SSP02 = foodBonus; // 伙食津貼
|
||
ssmsRec.SSP03 = bpsnNoCaseRec.BPP03; // 職務加給
|
||
ssmsRec.SSP04 = bpsnNoCaseRec.BPP04; // 派駐津貼
|
||
ssmsRec.SSP05 = bpsnNoCaseRec.BPP05; // 其他津貼
|
||
ssmsRec.SSP06 = extraWork.RPTA1; // 1.34加班費
|
||
ssmsRec.SSP07 = extraWork.RPTA2; // 1.67加班費
|
||
ssmsRec.SSP08 = extraWork.RPTA3; // 1.00加班費
|
||
ssmsRec.SSP09 = otherFee.ShortTrip; // 短差
|
||
ssmsRec.SSP10 = otherFee.LongTrip; // 長差
|
||
ssmsRec.SSP11 = otherFee.TelephoneFee; // 電話費
|
||
ssmsRec.SSP12 = otherFee.FuelFee; // 油料費
|
||
ssmsRec.SSP13 = extraWork.RPTA4; // 2.67加班費
|
||
ssmsRec.SSP14 = extraWork.RPTA5; // 2.00加班費
|
||
ssmsRec.SSP15 = 0; // 加項15
|
||
ssmsRec.SSP99 = SSP99; // 其他加項
|
||
ssmsRec.SSS01 = absent.SSS01; // 病假扣款
|
||
ssmsRec.SSS02 = absent.SSS02; // 事假扣款
|
||
ssmsRec.SSS03 = 0; // 所得稅
|
||
ssmsRec.SSS04 = blifFee.TotalPersonalFee; // 勞保費
|
||
ssmsRec.SSS05 = bhifFee.PersonalFee; // 健保費
|
||
ssmsRec.SSS06 = blraFee.PersonalFee; // 勞退自提
|
||
if (bpsnNoCase.Rows.Count > 0)
|
||
{
|
||
ssmsRec.SSS07 =
|
||
Convert.ToInt32(Math.Round(Convert.ToDouble(monthSalary + foodBonus) * fortuneRate,
|
||
MidpointRounding.AwayFromZero)); // 福利金
|
||
}
|
||
else
|
||
{
|
||
ssmsRec.SSS07 = 0;
|
||
}
|
||
ssmsRec.SSS08 = 0; // 健保補充保費
|
||
ssmsRec.SSS09 = absent.SSS09; // 無薪假扣款
|
||
ssmsRec.SSS10 = 0; // 減項10
|
||
ssmsRec.SSS11 = 0; // 減項11
|
||
ssmsRec.SSS12 = 0; // 減項12
|
||
ssmsRec.SSS13 = 0; // 減項13
|
||
ssmsRec.SSS14 = 0; // 減項14
|
||
ssmsRec.SSS15 = 0; // 減項15
|
||
ssmsRec.SSS99 = SSS99; // 其他減項
|
||
ssmsRec.SSH01 = Convert.ToInt32(Math.Round(blifFee.NormalCompanyFee, MidpointRounding.AwayFromZero)); // 雇主勞保費
|
||
ssmsRec.SSH02 = Convert.ToInt32(Math.Round(blifFee.InjuryCompanyFee, MidpointRounding.AwayFromZero)); // 職災保險
|
||
ssmsRec.SSH03 = Convert.ToInt32(Math.Round(blifFee.LostJobCompanyFee, MidpointRounding.AwayFromZero)); // 就業保險
|
||
ssmsRec.SSH04 = Convert.ToInt32(Math.Round(blifFee.SalaryReverseFund, MidpointRounding.AwayFromZero)); // 工資墊償
|
||
ssmsRec.SSH05 = bhifFee.CompanyFee; // 雇主健保費
|
||
ssmsRec.SSH06 = blraFee.CompanyFee; // 勞退提撥
|
||
ssmsRec.SSH07 = 0; // 雇主07
|
||
ssmsRec.SSH08 = 0; // 雇主08
|
||
ssmsRec.SSH09 = 0; // 雇主09
|
||
ssmsRec.SSH10 = 0; // 雇主10
|
||
ssmsRec.SST01 = extraWork.RPTC1; // 1.34加班時數
|
||
ssmsRec.SST02 = extraWork.RPTC2; // 1.67加班時數
|
||
ssmsRec.SST03 = extraWork.RPTC3; // 1.00加班時數
|
||
ssmsRec.SST04 = extraWork.RelaxationAllowance; // 累積補休時數
|
||
ssmsRec.SST05 = absent.SST05; // 補休時數
|
||
ssmsRec.SST06 = absent.SST06; // 特休時數
|
||
ssmsRec.SST07 = absent.SST07; // 事假時數
|
||
ssmsRec.SST08 = absent.SST08; // 病假時數
|
||
ssmsRec.SST09 = absent.SST09; // 喪假時數
|
||
ssmsRec.SST10 = absent.SST10; // 產假時數
|
||
ssmsRec.SST11 = absent.SST11; // 婚假時數
|
||
ssmsRec.SST12 = absent.SST12; // 陪產假時數
|
||
ssmsRec.SST13 = absent.SST13; // 公假時數
|
||
ssmsRec.SST14 = absent.SST14; // 公傷假時數
|
||
ssmsRec.SST15 = absent.SST15; // 生理假時數
|
||
ssmsRec.SST16 = absent.SST16; // 家庭照顧假時數
|
||
ssmsRec.SST17 = absent.SST17; // 育嬰假時數
|
||
ssmsRec.SST18 = otherFee.FuelKm; // 油料費補助公里數
|
||
ssmsRec.SST19 = absent.SST19; // 原民祭儀假時數
|
||
ssmsRec.SST20 = absent.SST20; // 產檢假時數
|
||
ssmsRec.SST21 = extraWork.RPTC4; // 2.67加班時數
|
||
ssmsRec.SST22 = extraWork.RPTC5; // 2.00加班時數
|
||
ssmsRec.SST23 = absent.SST23; // 無薪假時數
|
||
ssmsRec.SST24 = 0; // 時數 24
|
||
ssmsRec.SST25 = 0; // 時數 25
|
||
ssmsRec.SSL01 = blifFee.InsuranceSalary; // 勞保投保等級
|
||
ssmsRec.SSL02 = bhifFee.InsuranceSalary; // 健保投保等級
|
||
ssmsRec.SSL03 = blraFee.AnnuitySalary; // 勞退提撥等級
|
||
ssmsRec.SSL04 = blifFee.InjurySalary; // 職災投保等級
|
||
ssmsRec.SSL05 = 0; // 等級05
|
||
ssmsRec.SSC01 = SSC01; // 請假備註
|
||
ssmsRec.SSC02 = SSC02; // 加班備註
|
||
ssmsRec.SSC03 = SSC03; // 電話費備註
|
||
ssmsRec.SSC04 = SSC04; // 油料費備註
|
||
ssmsRec.SSC05 = SSC05; // 差勤備註
|
||
ssmsRec.SSC06 = SSC06; // 薪資加減備註
|
||
ssmsRec.SSC07 = SSC07; // 差旅事由
|
||
ssmsRec.SSC08 = ""; // 備註08
|
||
ssmsRec.SSC09 = ""; // 備註09
|
||
ssmsRec.SSC10 = ""; // 備註10
|
||
|
||
ssmsDao.InsertOne(tran, ssmsRec);
|
||
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
tran.Commit();
|
||
ClientShowMessage("計算完成!");
|
||
}
|
||
catch
|
||
{
|
||
tran.Rollback();
|
||
throw;
|
||
}
|
||
finally
|
||
{
|
||
conn.Close();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得月科目匯總金額 by 科目編號
|
||
/// </summary>
|
||
protected int GetSACD(string saacc)
|
||
{
|
||
DateTime aYYMM;
|
||
if (CheckDate(_BPYMM + "01", out aYYMM))
|
||
return GetSACD(aYYMM, _BPPYN, saacc);
|
||
else
|
||
return 0;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得月科目匯總金額 by 年月、專案、科目編號
|
||
/// </summary>
|
||
protected int GetSACD(DateTime yymm, string sapyn, string saacc)
|
||
{
|
||
DbCommand cmd = Query.NewCommand(
|
||
@"SELECT SAAMT FROM SACD WHERE SAYMM = @SAYMM AND SAPYN = @SAPYN AND SAACC=@SAACC");
|
||
cmd.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
cmd.Parameters.Add(Query.NewParameter("SAPYN", sapyn));
|
||
cmd.Parameters.Add(Query.NewParameter("SAACC", saacc));
|
||
object o = Query.ExecuteScalar(cmd);
|
||
if (o == null || o == DBNull.Value)
|
||
return 0;
|
||
else
|
||
return Convert.ToInt32(o);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 設定月科目匯總金額,總表科目輸入使用
|
||
/// </summary>
|
||
protected void SetSACD(string saacc, int saamt, DbTransaction tran)
|
||
{
|
||
DateTime aYYMM;
|
||
if (CheckDate(_BPYMM + "01", out aYYMM))
|
||
SetSACD(aYYMM, _BPPYN, saacc, saamt, tran);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 設定月科目匯總金額,總表科目輸入使用
|
||
/// </summary>
|
||
protected void SetSACD(DateTime yymm, string sapyn, string saacc, int saamt, DbTransaction tran)
|
||
{
|
||
DbCommand cmdSel = Query.NewCommand(
|
||
@"SELECT COUNT(1) FROM SACD WHERE SAYMM = @SAYMM AND SAPYN = @SAPYN AND SAACC=@SAACC");
|
||
cmdSel.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
cmdSel.Parameters.Add(Query.NewParameter("SAPYN", sapyn));
|
||
cmdSel.Parameters.Add(Query.NewParameter("SAACC", saacc));
|
||
cmdSel.Connection = tran.Connection;
|
||
cmdSel.Transaction = tran;
|
||
object o = cmdSel.ExecuteScalar();
|
||
if (o == null || o == DBNull.Value || Convert.ToInt32(o) == 0)
|
||
{
|
||
DbCommand cmdIns = Query.NewCommand(
|
||
@"INSERT INTO SACD
|
||
(SAPYN, SAYMM, SAACC, SAAMT, TRDAT, TRMOD, TRUSR)
|
||
VALUES
|
||
(@SAPYN, @SAYMM, @SAACC, @SAAMT, GETDATE(), 'INSERT', @TRUSR)");
|
||
cmdIns.Parameters.Add(Query.NewParameter("SAPYN", sapyn));
|
||
cmdIns.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
cmdIns.Parameters.Add(Query.NewParameter("SAACC", saacc));
|
||
cmdIns.Parameters.Add(Query.NewParameter("SAAMT", saamt));
|
||
cmdIns.Parameters.Add(Query.NewParameter("TRUSR", UserId));
|
||
cmdIns.Connection = tran.Connection;
|
||
cmdIns.Transaction = tran;
|
||
cmdIns.ExecuteNonQuery();
|
||
}
|
||
else
|
||
{
|
||
DbCommand cmdUpd = Query.NewCommand(
|
||
@"UPDATE SACD
|
||
SET SAAMT=@SAAMT,
|
||
TRDAT=GETDATE(),
|
||
TRMOD='UPDATE',
|
||
TRUSR=@TRUSR
|
||
WHERE SAYMM = @SAYMM
|
||
AND SAPYN = @SAPYN
|
||
AND SAACC = @SAACC");
|
||
cmdUpd.Parameters.Add(Query.NewParameter("SAAMT", saamt));
|
||
cmdUpd.Parameters.Add(Query.NewParameter("TRUSR", UserId));
|
||
cmdUpd.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
cmdUpd.Parameters.Add(Query.NewParameter("SAPYN", sapyn));
|
||
cmdUpd.Parameters.Add(Query.NewParameter("SAACC", saacc));
|
||
cmdUpd.Connection = tran.Connection;
|
||
cmdUpd.Transaction = tran;
|
||
cmdUpd.ExecuteNonQuery();
|
||
}
|
||
}
|
||
|
||
protected void btnSSMS_Click(object sender, EventArgs e)
|
||
{
|
||
bool result = true;
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
|
||
MultiView1.ActiveViewIndex = 1;
|
||
lbYYMM.Text = txtYYMM.Text;
|
||
//ddlRSPYN.SQL = "SELECT BPPYN, '【' + (SELECT TOP 1 BSSCR FROM BCLS WHERE BSPAR='BCUSZON' AND BSCLS=SUBSTRING(BPPYN,4,1)) + '】' + BPPYM BPPYM FROM BPAA WHERE BPYER=" + (aYYMM.Year - WGuard1.CY11).ToString() + " ORDER BY BPPYN";
|
||
ddlRSPYN.DataSource = new BpaaDAC().GetBpaaWithTY(aYYMM.Year);
|
||
ddlRSPYN.DataBind();
|
||
}
|
||
|
||
protected void cvBPS10_ServerValidate(object source, ServerValidateEventArgs args)
|
||
{
|
||
int i;
|
||
args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i) && i >= 0;
|
||
}
|
||
|
||
protected void btnCancel1_Click(object sender, EventArgs e)
|
||
{
|
||
pnBPSXX.Visible = false;
|
||
}
|
||
|
||
protected void Next_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
_BPPYN = ddlRSPYN.SelectedValue;
|
||
bool result = true;
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
|
||
if (!result)
|
||
return;
|
||
|
||
DataTable bpaa = _getData.GetBPAA_BPPYN(_BPPYN);
|
||
if (bpaa.Rows.Count == 0)
|
||
return;
|
||
BPAARecord bpaaRecord = new BPAARecord();
|
||
bpaaRecord.FillRecord(bpaa.Rows[0]);
|
||
|
||
if (bpaaRecord.BPS15 == "")
|
||
{
|
||
cvMessage.IsValid = false;
|
||
cvMessage.ErrorMessage += "請先設定「管理費用」之科目對應<br/>";
|
||
}
|
||
|
||
if (bpaaRecord.BPS13 == "")
|
||
{
|
||
cvMessage.IsValid = false;
|
||
cvMessage.ErrorMessage += "請先設定「公費」之科目對應<br/>";
|
||
}
|
||
|
||
if (!cvMessage.IsValid)
|
||
return;
|
||
|
||
StringBuilder sb = new StringBuilder();
|
||
sb.Append(
|
||
@"SELECT BPACC, BPCLS, BPAME,
|
||
ISNULL(SAAMT, 0) AMT
|
||
FROM BPAB A LEFT OUTER JOIN SACD B ON SAPYN=BPPYN AND SAACC=BPACC AND SAYMM=@SAYMM
|
||
WHERE BPPYN=@BPPYN AND SUBSTRING(BPACC,1,4)=@BPS15 AND SUBSTRING(BPACC, 5, 2)<>'00' ");
|
||
dsSubject.SelectParameters.Clear();
|
||
dsSubject.SelectParameters.Add("SAYMM", aYYMM.ToString(System.Globalization.CultureInfo.InvariantCulture));
|
||
dsSubject.SelectParameters.Add("BPPYN", _BPPYN);
|
||
dsSubject.SelectParameters.Add("BPS15", (bpaaRecord.BPS15.Length < 4 ? bpaaRecord.BPS15 : bpaaRecord.BPS15.Substring(0, 4)));
|
||
if (bpaaRecord.BPS13 != "")
|
||
{
|
||
sb.Append(
|
||
@" UNION SELECT BPACC, BPCLS, BPAME,
|
||
ISNULL(SAAMT, 0) AMT
|
||
FROM BPAB A LEFT OUTER JOIN SACD B ON SAPYN=BPPYN AND SAACC=BPACC AND SAYMM=@SAYMM
|
||
WHERE BPPYN=@BPPYN AND BPACC=@BPS13");
|
||
dsSubject.SelectParameters.Add("BPS13", bpaaRecord.BPS13);
|
||
}
|
||
|
||
sb.Append(" ORDER BY BPCLS ");
|
||
dsSubject.ConnectionString = ConnectionString;
|
||
dsSubject.SelectCommand = sb.ToString();
|
||
|
||
DataList1.DataSourceID = "dsSubject";
|
||
DataList1.DataBind();
|
||
|
||
if (DataList1.Items.Count > 0)
|
||
SetClientFocus(DataList1.Items[0].Controls[3]);
|
||
|
||
pnBPSXX.Visible = true;
|
||
pnSACD.Visible = false;
|
||
pnAccDoc.Visible = false;
|
||
}
|
||
|
||
protected void btnAccDoc_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
bool result = true;
|
||
aYYMM = CheckDate(lbYYMM.Text + "01", "", ref result, cvMessage);
|
||
|
||
dsSACDDoc.ConnectionString = ConnectionString;
|
||
dsSACDDoc.SelectParameters["SAPYN"].DefaultValue = ddlRSPYN.SelectedValue;
|
||
dsSACDDoc.SelectParameters["SAYMM"].DefaultValue = aYYMM.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||
dlSACDDoc.DataBind();
|
||
|
||
pnBPSXX.Visible = false;
|
||
pnSACD.Visible = false;
|
||
pnAccDoc.Visible = true;
|
||
}
|
||
|
||
protected void btnSACD_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
bool result = true;
|
||
aYYMM = CheckDate(lbYYMM.Text + "01", "", ref result, cvMessage);
|
||
|
||
dsSACD.ConnectionString = ConnectionString;
|
||
dsSACD.SelectParameters["BPPYN"].DefaultValue = ddlRSPYN.SelectedValue;
|
||
dsSACD.SelectParameters["SAYMM"].DefaultValue = aYYMM.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||
GridView1.DataBind();
|
||
|
||
DbCommand sumSacd = Query.NewCommand("SELECT SUM(SAAMT) FROM SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM");
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAPYN", ddlRSPYN.SelectedValue));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAYMM", aYYMM));
|
||
object o = Query.ExecuteScalar(sumSacd);
|
||
int i;
|
||
if (o != null && o != DBNull.Value)
|
||
i = Convert.ToInt32(o);
|
||
else
|
||
i = 0;
|
||
|
||
lbSumSacd.Text = i.ToString("###,###,###,##0");
|
||
|
||
pnBPSXX.Visible = false;
|
||
pnSACD.Visible = true;
|
||
pnAccDoc.Visible = false;
|
||
}
|
||
|
||
protected void WriteTax(DateTime yymm, string bppyn, DbTransaction tran)
|
||
{
|
||
DataTable bpaa = _getData.GetBPAA_BPPYN(bppyn);
|
||
if (bpaa.Rows.Count == 0)
|
||
return;
|
||
// 營業稅科目
|
||
string bps14 = bpaa.Rows[0]["BPS14"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS14"].ToString();
|
||
// 勞保雇主部份負擔科目
|
||
string bps02 = bpaa.Rows[0]["BPS02"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS02"].ToString();
|
||
// 健保雇主部份負擔科目
|
||
string bps03 = bpaa.Rows[0]["BPS03"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS03"].ToString();
|
||
// 工資墊償基金科目
|
||
string bps04 = bpaa.Rows[0]["BPS04"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS04"].ToString();
|
||
// 勞退金提撥科目
|
||
string bps05 = bpaa.Rows[0]["BPS05"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS05"].ToString();
|
||
// 行政督導保險及退休提撥科目
|
||
string bps11 = bpaa.Rows[0]["BPS11"] == DBNull.Value ? "" : bpaa.Rows[0]["BPS11"].ToString();
|
||
|
||
if (bps14 == "")
|
||
return;
|
||
|
||
// 取得營業稅、勞健保之外的科目總和
|
||
DbCommand sumSacd = Query.NewCommand(
|
||
@"SELECT SUM(SAAMT) FROM SACD
|
||
WHERE SAPYN=@SAPYN
|
||
AND SAYMM=@SAYMM
|
||
AND SAACC<>@SAACC02
|
||
AND SAACC<>@SAACC03
|
||
AND SAACC<>@SAACC04
|
||
AND SAACC<>@SAACC05
|
||
AND SAACC<>@SAACC11
|
||
AND SAACC<>@SAACC14");
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAPYN", bppyn));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAYMM", aYYMM));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC02", bps02));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC03", bps03));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC04", bps04));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC05", bps05));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC11", bps11));
|
||
sumSacd.Parameters.Add(Query.NewParameter("SAACC14", bps14));
|
||
|
||
// 取得上個月勞健保的科目總和
|
||
DbCommand sumSacd1 = Query.NewCommand(
|
||
@"SELECT SUM(SAAMT) FROM SACD
|
||
WHERE SAPYN=@SAPYN
|
||
AND SAYMM=@SAYMM
|
||
AND ( SAACC=@SAACC02
|
||
OR SAACC=@SAACC03
|
||
OR SAACC=@SAACC04
|
||
OR SAACC=@SAACC05
|
||
OR SAACC=@SAACC11 )");
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAPYN", bppyn));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAYMM", aYYMM.AddMonths(-1)));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAACC02", bps02));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAACC03", bps03));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAACC04", bps04));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAACC05", bps05));
|
||
sumSacd1.Parameters.Add(Query.NewParameter("SAACC11", bps11));
|
||
|
||
DbCommand deleteTax = Query.NewCommand("DELETE SACD WHERE SAPYN=@SAPYN AND SAYMM=@SAYMM AND SAACC=@SAACC14");
|
||
deleteTax.Parameters.Add(Query.NewParameter("SAPYN", bppyn));
|
||
deleteTax.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
deleteTax.Parameters.Add(Query.NewParameter("SAACC14", bps14));
|
||
|
||
DbCommand writeTax = Query.NewCommand(
|
||
@"INSERT SACD (SAPYN, SAYMM, SAACC, SAAMT, TRDAT, TRMOD, TRUSR)
|
||
VALUES (@SAPYN, @SAYMM, @SAACC14, @SAAMT, GETDATE(), 'INSERT', @TRUSR)");
|
||
writeTax.Parameters.Add(Query.NewParameter("SAPYN", bppyn));
|
||
writeTax.Parameters.Add(Query.NewParameter("SAYMM", yymm));
|
||
writeTax.Parameters.Add(Query.NewParameter("SAACC14", bps14));
|
||
writeTax.Parameters.Add(Query.NewParameter("SAAMT", DbType.Int32));
|
||
writeTax.Parameters.Add(Query.NewParameter("@TRUSR", UserId));
|
||
|
||
// 取得本月營業稅、勞健保除外的科目總和
|
||
sumSacd.Transaction = tran;
|
||
sumSacd.Connection = tran.Connection;
|
||
object o = sumSacd.ExecuteScalar();
|
||
int iSumSacd;
|
||
if (o != null && o != DBNull.Value)
|
||
iSumSacd = Convert.ToInt32(o);
|
||
else
|
||
iSumSacd = 0;
|
||
|
||
// 取得上月勞健保的科目總和
|
||
sumSacd1.Transaction = tran;
|
||
sumSacd1.Connection = tran.Connection;
|
||
o = sumSacd1.ExecuteScalar();
|
||
if (o != null && o != DBNull.Value)
|
||
iSumSacd += Convert.ToInt32(o);
|
||
else
|
||
iSumSacd += 0;
|
||
|
||
// 寫入營業稅
|
||
deleteTax.Transaction = tran;
|
||
deleteTax.Connection = tran.Connection;
|
||
deleteTax.ExecuteNonQuery();
|
||
|
||
writeTax.Transaction = tran;
|
||
writeTax.Connection = tran.Connection;
|
||
writeTax.Parameters["SAAMT"].Value = Convert.ToInt32(Math.Round(Convert.ToDouble(iSumSacd) * 0.05d, MidpointRounding.AwayFromZero));
|
||
writeTax.ExecuteNonQuery();
|
||
}
|
||
|
||
// 儲存總表輸入項目,以及計算營業稅
|
||
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
|
||
{
|
||
bool result = true;
|
||
cvMessage.ErrorMessage = "";
|
||
cvMessage.IsValid = true;
|
||
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
|
||
for (int i = 0; i < DataList1.Items.Count; i++)
|
||
{
|
||
int amt;
|
||
if (!Int32.TryParse((DataList1.Items[i].Controls[3] as TextBox).Text, out amt))
|
||
{
|
||
cvMessage.ErrorMessage += (DataList1.Items[i].Controls[1] as ITextControl).Text + " 請輸入數值";
|
||
cvMessage.IsValid = false;
|
||
}
|
||
if (amt < 0)
|
||
{
|
||
cvMessage.ErrorMessage += (DataList1.Items[i].Controls[1] as ITextControl).Text + " 請輸入大於零的數值";
|
||
cvMessage.IsValid = false;
|
||
}
|
||
}
|
||
if (!cvMessage.IsValid)
|
||
return;
|
||
|
||
_BPPYN = ddlRSPYN.SelectedValue;
|
||
|
||
DbConnection conn = Query.NewConnection();
|
||
conn.Open();
|
||
DbTransaction tran = conn.BeginTransaction();
|
||
try
|
||
{
|
||
// 寫入輸入的項目
|
||
for (int i = 0; i < DataList1.Items.Count; i++)
|
||
{
|
||
string saacc = (DataList1.Items[i].Controls[5] as HiddenField).Value;
|
||
string saamt = (DataList1.Items[i].Controls[3] as TextBox).Text;
|
||
int amt;
|
||
Int32.TryParse(saamt, out amt);
|
||
SetSACD(aYYMM, _BPPYN, saacc, amt, tran);
|
||
}
|
||
// 寫入營業稅
|
||
WriteTax(aYYMM, _BPPYN, tran);
|
||
|
||
tran.Commit();
|
||
RegisterStartupScript("OK", "alert('存檔完成!');");
|
||
}
|
||
catch
|
||
{
|
||
tran.Rollback();
|
||
throw;
|
||
}
|
||
finally
|
||
{
|
||
conn.Close();
|
||
}
|
||
}
|
||
|
||
protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
|
||
{
|
||
pnBPSXX.Visible = false;
|
||
pnSACD.Visible = false;
|
||
pnAccDoc.Visible = false;
|
||
}
|
||
|
||
// 輸入備註
|
||
protected void dlSACDDoc_UpdateCommand(object source, DataListCommandEventArgs e)
|
||
{
|
||
bool result = true;
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
_BPPYN = ddlRSPYN.SelectedValue;
|
||
|
||
DbCommand cmdUpdateSACDDoc = Query.NewCommand(
|
||
@"UPDATE SACD SET
|
||
SADOC = @SADOC
|
||
WHERE
|
||
SAPYN=@SAPYN AND SAYMM=@SAYMM AND SAACC=@SAACC");
|
||
cmdUpdateSACDDoc.Parameters.Add(Query.NewParameter("SADOC", DbType.String));
|
||
cmdUpdateSACDDoc.Parameters.Add(Query.NewParameter("SAPYN", _BPPYN));
|
||
cmdUpdateSACDDoc.Parameters.Add(Query.NewParameter("SAYMM", aYYMM));
|
||
cmdUpdateSACDDoc.Parameters.Add(Query.NewParameter("SAACC", DbType.String));
|
||
|
||
cmdSelectSACD.Parameters["SAPYN"].Value = _BPPYN;
|
||
cmdSelectSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
|
||
cmdInsertSACD.Parameters["SAPYN"].Value = _BPPYN;
|
||
cmdInsertSACD.Parameters["SAYMM"].Value = aYYMM;
|
||
cmdInsertSACD.Parameters["SAAMT"].Value = 0;
|
||
|
||
DbConnection conn = Query.NewConnection();
|
||
cmdUpdateSACDDoc.Connection = conn;
|
||
cmdSelectSACD.Connection = conn;
|
||
cmdInsertSACD.Connection = conn;
|
||
|
||
conn.Open();
|
||
DbTransaction tran = conn.BeginTransaction();
|
||
cmdUpdateSACDDoc.Transaction = tran;
|
||
cmdSelectSACD.Transaction = tran;
|
||
cmdInsertSACD.Transaction = tran;
|
||
|
||
try
|
||
{
|
||
// 寫入輸入的項目
|
||
for (int i = 0; i < dlSACDDoc.Items.Count; i++)
|
||
{
|
||
string saacc = (dlSACDDoc.Items[i].Controls[1] as ITextControl).Text;
|
||
string sadoc = (dlSACDDoc.Items[i].Controls[7] as TextBox).Text;
|
||
|
||
cmdSelectSACD.Parameters["SAACC"].Value = saacc;
|
||
object o = cmdSelectSACD.ExecuteScalar();
|
||
if (o != null && o != DBNull.Value && Convert.ToInt32(o) > 0)
|
||
{
|
||
cmdUpdateSACDDoc.Parameters["SAACC"].Value = saacc;
|
||
cmdUpdateSACDDoc.Parameters["SADOC"].Value = sadoc;
|
||
cmdUpdateSACDDoc.ExecuteNonQuery();
|
||
}
|
||
else
|
||
{
|
||
cmdInsertSACD.Parameters["SAACC"].Value = saacc;
|
||
cmdInsertSACD.Parameters["SADOC"].Value = sadoc;
|
||
cmdInsertSACD.ExecuteNonQuery();
|
||
}
|
||
}
|
||
|
||
tran.Commit();
|
||
RegisterStartupScript("OK", "alert('存檔完成!');");
|
||
}
|
||
catch
|
||
{
|
||
tran.Rollback();
|
||
throw;
|
||
}
|
||
finally
|
||
{
|
||
conn.Close();
|
||
}
|
||
}
|
||
|
||
protected void btnInputYYMM_Click(object sender, EventArgs e)
|
||
{
|
||
ParamList["BPPYN"] = "";
|
||
ParamList["BPPYM"] = "";
|
||
pnBPSXX.Visible = false;
|
||
pnSACD.Visible = false;
|
||
DoAfterCommand("SALERYCALC");
|
||
}
|
||
|
||
// 本月關帳,關帳日寫入本月月底
|
||
protected void btnCloseBPAA_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
bool result = true;
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
|
||
try
|
||
{
|
||
cmdCloseBPAA.Parameters["BPMSD"].Value = aYYMM.AddMonths(1).AddDays(-1);
|
||
cmdCloseBPAA.Parameters["BPPYN"].Value = ddlRSPYN.SelectedValue;
|
||
Query.ExecuteNonQuery(cmdCloseBPAA);
|
||
RegisterStartupScript("OK", "alert('本月關帳完成!');");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
cvMessage.ErrorMessage = ex.Message;
|
||
cvMessage.IsValid = false;
|
||
}
|
||
}
|
||
|
||
// 本月開帳,開帳日寫入上月月底
|
||
protected void btnOpenBPAA_Click(object sender, EventArgs e)
|
||
{
|
||
if (!CheckProjectRight())
|
||
return;
|
||
|
||
cvMessage.IsValid = true;
|
||
cvMessage.ErrorMessage = "";
|
||
|
||
bool result = true;
|
||
aYYMM = CheckDate(txtYYMM.Text + "01", "請輸入正確的年月", ref result, cvMessage);
|
||
if (!result)
|
||
return;
|
||
|
||
try
|
||
{
|
||
cmdCloseBPAA.Parameters["BPMSD"].Value = aYYMM.AddDays(-1);
|
||
cmdCloseBPAA.Parameters["BPPYN"].Value = ddlRSPYN.SelectedValue;
|
||
Query.ExecuteNonQuery(cmdCloseBPAA);
|
||
RegisterStartupScript("OK", "alert('本月開帳完成!');");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
cvMessage.ErrorMessage = ex.Message;
|
||
cvMessage.IsValid = false;
|
||
}
|
||
}
|
||
} |