|
@@ -208,8 +208,6 @@ namespace OASystem.API.OAMethodLib
|
|
|
List<CheckInDataInfo> checkInData2 = new List<CheckInDataInfo>();
|
|
|
checkInData2 = checkInDatas.Where(it => it.exception_type.Equals("未打卡")).ToList();
|
|
|
|
|
|
-
|
|
|
-
|
|
|
#region 迟到 早退 旷工
|
|
|
|
|
|
int user_cd_zt_num = 0;
|
|
@@ -296,7 +294,7 @@ namespace OASystem.API.OAMethodLib
|
|
|
day_deduction = ConvertToDecimal(day_miner_unit * 6);
|
|
|
meal_deduction += 10.00M;
|
|
|
absenteeism_deduction += day_deduction;
|
|
|
- beLate_belate_ex.Reason = thisDtStr + " 上午(09:00)缺卡/未打卡视为下午旷工(3小时)";
|
|
|
+ beLate_belate_ex.Reason = thisDtStr + " 上午(09:00)缺卡/未打卡视为上午旷工(3小时)";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -541,11 +539,11 @@ namespace OASystem.API.OAMethodLib
|
|
|
Date_range date_Range = attendance.date_range;
|
|
|
|
|
|
|
|
|
- if (startDt >= date_Range.new_begin_dt || Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
|
|
|
+ if ( Convert.ToDateTime(date_Range.new_begin_dt) < startDt || Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
|
|
|
string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
|
|
|
|
|
@@ -560,47 +558,141 @@ namespace OASystem.API.OAMethodLib
|
|
|
string endTime = string.Empty;
|
|
|
string startTime1 = string.Empty;
|
|
|
string endTime1 = string.Empty;
|
|
|
+ Slice_info slice_info = new Slice_info();
|
|
|
+
|
|
|
+ if (leaveTypeId == 2 || leaveTypeId ==3)
|
|
|
+ {
|
|
|
+ slice_info = vacation.attendance.slice_info;
|
|
|
+ }
|
|
|
+
|
|
|
+ DateTime date_Range_new_begin_dt = date_Range.new_begin_dt;
|
|
|
+ DateTime date_Range_new_end_dt = date_Range.new_end_dt;
|
|
|
+
|
|
|
|
|
|
decimal new_duration = 0.00M;
|
|
|
if (date_Range.type == "halfday")
|
|
|
{
|
|
|
new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400.00M;
|
|
|
unit = "天";
|
|
|
- startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
|
|
|
- endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
|
|
|
- if (new_duration == 1)
|
|
|
+ startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
|
|
|
+ endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd") + " 18:00";
|
|
|
+
|
|
|
+ if (new_duration >= 0.50M)
|
|
|
{
|
|
|
- startTime1 = "09:00:00";
|
|
|
- endTime1 = "18:00:00";
|
|
|
+ if (slice_info != null)
|
|
|
+ {
|
|
|
+ if (slice_info.day_items != null)
|
|
|
+ {
|
|
|
+ if (slice_info.day_items.Count > 1)
|
|
|
+ {
|
|
|
+
|
|
|
+ date_Range_new_begin_dt = slice_info.day_items[0].daytimeDt;
|
|
|
+ date_Range_new_end_dt = slice_info.day_items[slice_info.day_items.Count - 1].daytimeDt;
|
|
|
+
|
|
|
+ decimal startTime11 = slice_info.day_items[0].duration;
|
|
|
+ decimal startTime11_11 = startTime11 / 3600.00M;
|
|
|
+ decimal endTime11 = slice_info.day_items[slice_info.day_items.Count - 1].duration;
|
|
|
+ decimal endTime11_11 = endTime11 / 3600.00M;
|
|
|
+ if (startTime11_11 == 3.00M)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ }
|
|
|
+ else if (startTime11_11 == 4.50M)
|
|
|
+ {
|
|
|
+ startTime1 = "12:00";
|
|
|
+ }
|
|
|
+ else if (startTime11_11 == 7.50M)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (endTime11_11 == 3.00M)
|
|
|
+ {
|
|
|
+ endTime1 = "12:00";
|
|
|
+ }
|
|
|
+ else if (endTime11_11 == 4.50M)
|
|
|
+ {
|
|
|
+ endTime1 = "18:00";
|
|
|
+ }
|
|
|
+ else if (endTime11_11 == 7.50M)
|
|
|
+ {
|
|
|
+ endTime1 = "18:00";
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ decimal qjLongTime = slice_info.duration / 3600.00M;
|
|
|
+ if (qjLongTime == 4.50M)
|
|
|
+ {
|
|
|
+ startTime1 = "12:00";
|
|
|
+ endTime1 = "18:00:00";
|
|
|
+ }
|
|
|
+ else if (qjLongTime == 3.00M)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ endTime1 = "12:00:00";
|
|
|
+ }
|
|
|
+ else if (qjLongTime % 7.50M == 0)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ endTime1 = "18:00:00";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (new_duration % 1 == 0)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ endTime1 = "18:00";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (new_duration % 1 == 0)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ endTime1 = "18:00";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
|
|
|
- endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
|
|
|
+ if (new_duration % 1 == 0)
|
|
|
+ {
|
|
|
+ startTime1 = "09:00";
|
|
|
+ endTime1 = "18:00";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
|
|
|
+ endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
else if (date_Range.type == "hour")
|
|
|
{
|
|
|
new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600.00M;
|
|
|
unit = "小时";
|
|
|
- startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
- endTime = date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
- startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
|
|
|
- endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
|
|
|
+ startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+ startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
|
|
|
+ endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
|
|
|
}
|
|
|
|
|
|
LeaveDetails leaveDetails1 = new LeaveDetails()
|
|
|
{
|
|
|
TypeId = leaveType,
|
|
|
TypeName = typeName,
|
|
|
- StartDt = Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
|
|
|
- EndDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
|
|
|
+ StartDt = Convert.ToDateTime(date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
|
|
|
+ EndDt = Convert.ToDateTime(date_Range_new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
|
|
|
DtType = date_Range.type,
|
|
|
Unit = unit,
|
|
|
New_Duration = new_duration,
|
|
|
- ApplyDt = Convert.ToDateTime(sp_item.apply_time_dt.ToString("yyyy-MM-dd HH:mm:ss"))
|
|
|
+ SliceInfo = slice_info
|
|
|
};
|
|
|
leaveDetails.Add(leaveDetails1);
|
|
|
}
|
|
@@ -634,6 +726,8 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
if (leaveDetails.Count > 0)
|
|
|
{
|
|
|
+ leaveDetails = leaveDetails.OrderBy(it => it.StartDt).OrderBy(it => it.EndDt).ToList();
|
|
|
+
|
|
|
foreach (LeaveDetails leave_item in leaveDetails)
|
|
|
{
|
|
|
decimal leave_meals = 0.00M;
|
|
@@ -642,19 +736,24 @@ namespace OASystem.API.OAMethodLib
|
|
|
int leaveType = leave_item.TypeId;
|
|
|
decimal new_duration = leave_item.New_Duration;
|
|
|
|
|
|
- CalculateTypeFee(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
|
|
|
+ CalculateTypeFee1(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
|
|
|
new_duration,out leave_meals, out thisTypeDeduction);
|
|
|
+ if (leave_meals != 0)
|
|
|
+ {
|
|
|
+ leave_item.IsDeduction = true;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
#region 累计类型扣款
|
|
|
|
|
|
|
|
|
- if (leaveType == 2)
|
|
|
+ if (leaveType == 2)
|
|
|
{
|
|
|
personalLeaveTotal += thisTypeDeduction;
|
|
|
}
|
|
|
else if (leaveType == 3)
|
|
|
{
|
|
|
- sickLeaveTotal = thisTypeDeduction;
|
|
|
+ sickLeaveTotal += thisTypeDeduction;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
@@ -916,12 +1015,11 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
decimal cckk = 0.00M;
|
|
|
|
|
|
- int days = (int)(Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) -
|
|
|
- Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd"))).TotalDays;
|
|
|
+ int days = (int)(Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) -
|
|
|
+ Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd"))).TotalDays + 1;
|
|
|
|
|
|
|
|
|
-
|
|
|
- for (int i = 0; i <= days; i++)
|
|
|
+ for (int i = 0; i < days; i++)
|
|
|
{
|
|
|
DateTime thisDt = date_Range.new_begin_dt.AddDays(i);
|
|
|
|
|
@@ -936,7 +1034,6 @@ namespace OASystem.API.OAMethodLib
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
if (i == days - 1)
|
|
|
{
|
|
|
string ccStartTime = date_Range.new_end_dt.ToString("HH:mm:ss");
|
|
@@ -1179,6 +1276,264 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static void CalculateTypeFee1(List<LeaveDetails> leaveDetails, int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
|
|
|
+ decimal amountPayable, int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
|
|
|
+ {
|
|
|
+ typeDeduction = 0;
|
|
|
+ mealDeduction = 0;
|
|
|
+ decimal personalkLeave_dailywage_day = amountPayable / work_days;
|
|
|
+
|
|
|
+
|
|
|
+ decimal halfHour = 7.50M / 0.50M;
|
|
|
+
|
|
|
+ switch (leaveType)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+
|
|
|
+ if (date_Range_type == "halfday")
|
|
|
+ {
|
|
|
+ if (duration >= 0.5M && duration <= 1M)
|
|
|
+ {
|
|
|
+ var njItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd") &&
|
|
|
+ it.EndDt.ToString("yyyy-MM-dd") == endTime.ToString("yyyy-MM-dd")).ToList();
|
|
|
+ if (njItem.Count > 1)
|
|
|
+ {
|
|
|
+ if (njItem[0].StartDt == startTime)
|
|
|
+ {
|
|
|
+ mealDeduction = 10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mealDeduction = 10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var njManyDaysItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd")).ToList();
|
|
|
+ if (njManyDaysItem.Count > 1)
|
|
|
+ {
|
|
|
+ var njManyDaysItem1 = njManyDaysItem.Where(it => it.StartDt != startTime).ToList();
|
|
|
+ if (njManyDaysItem1.Count > 0)
|
|
|
+ {
|
|
|
+ if (njManyDaysItem1[0].Unit.Equals("天"))
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Floor(duration);
|
|
|
+ }
|
|
|
+ else if (njManyDaysItem1[0].Unit.Equals("小时") && njManyDaysItem1[0].New_Duration >= 3)
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Floor(duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Ceiling(duration);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Ceiling(duration);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+
|
|
|
+ decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / 7.50M;
|
|
|
+
|
|
|
+ if (date_Range_type == "halfday")
|
|
|
+ {
|
|
|
+ #region 处理当天是否扣除餐补
|
|
|
+ string formatDt_begin = startTime.ToString("yyyy-MM-dd");
|
|
|
+ List<LeaveDetails> leaveDetails1 = leaveDetails.Where(it => it.IsDeduction && it.EndDt.ToString("yyyy-MM-dd") == formatDt_begin).ToList();
|
|
|
+ if (leaveDetails1.Count > 0) mealDeduction = 10.00M * Math.Floor(duration);
|
|
|
+ else mealDeduction = 10.00M * Math.Ceiling(duration);
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ if (duration % 1 == 0)
|
|
|
+ {
|
|
|
+ typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ decimal sj_wholeDay = Math.Floor(duration);
|
|
|
+ decimal sj_halfDay = duration % 1;
|
|
|
+
|
|
|
+ if (duration % 1 > 0)
|
|
|
+ {
|
|
|
+ typeDeduction = (personalkLeave_dailywage_day / 2.00M) * (duration / 0.50M);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ typeDeduction = (personalkLeave_dailywage_day / 2.00M);
|
|
|
+ }
|
|
|
+ typeDeduction = ConvertToDecimal(typeDeduction);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (date_Range_type == "hour")
|
|
|
+ {
|
|
|
+ decimal leave_halfHour = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
|
|
|
+ typeDeduction = ConvertToDecimal(personalkLeave_dailywage_halfhour * leave_halfHour);
|
|
|
+
|
|
|
+ if (duration >= 3 && duration < 7.5M)
|
|
|
+ {
|
|
|
+ mealDeduction = 10;
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (duration >= 7.5M)
|
|
|
+ {
|
|
|
+ decimal leave_halfHour1 = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
|
|
|
+
|
|
|
+
|
|
|
+ decimal leaveDays = duration / 7.5M;
|
|
|
+ if (leaveDays % 1 == 0)
|
|
|
+ {
|
|
|
+ typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * leaveDays);
|
|
|
+ mealDeduction = 10 * leaveDays;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ typeDeduction = personalkLeave_dailywage_day * Convert.ToInt32(leaveDays);
|
|
|
+ decimal sy_shijiaunit = leave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
|
|
|
+ if (sy_shijiaunit > 0)
|
|
|
+ {
|
|
|
+ typeDeduction += ConvertToDecimal(personalkLeave_dailywage_halfhour * sy_shijiaunit);
|
|
|
+ }
|
|
|
+ mealDeduction = 10 * Convert.ToInt32(leaveDays);
|
|
|
+
|
|
|
+
|
|
|
+ int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
|
|
|
+ if (lastHours >= 3)
|
|
|
+ {
|
|
|
+ mealDeduction += 10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+
|
|
|
+ decimal chengDuMinimumWage_Day = _chengDuMinimumWage / work_days;
|
|
|
+ decimal chengDuMinimumWage_halrHour = chengDuMinimumWage_Day / 7.50M;
|
|
|
+ decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / 7.50M) - chengDuMinimumWage_halrHour;
|
|
|
+
|
|
|
+ if (date_Range_type == "halfday")
|
|
|
+ {
|
|
|
+ mealDeduction = 10.00M * Math.Ceiling(duration);
|
|
|
+
|
|
|
+ decimal pl_dailywage_day = personalkLeave_dailywage_day - chengDuMinimumWage_Day;
|
|
|
+ if (duration % 1 == 0)
|
|
|
+ {
|
|
|
+ typeDeduction = ConvertToDecimal(pl_dailywage_day * duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ #region 处理当天是否扣除餐补
|
|
|
+ string formatDt_begin = startTime.ToString("yyyy-MM-dd");
|
|
|
+ List<LeaveDetails> leaveDetails1 = leaveDetails.Where(it => it.IsDeduction && it.EndDt.ToString("yyyy-MM-dd") == formatDt_begin).ToList();
|
|
|
+ if (leaveDetails1.Count > 0) mealDeduction = 10.00M * Math.Floor(duration);
|
|
|
+ else mealDeduction = 10.00M * Math.Ceiling(duration);
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ if (duration % 1 > 0)
|
|
|
+ {
|
|
|
+ typeDeduction = (pl_dailywage_day / 2.00M) * (duration / 0.50M); ;
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ typeDeduction = (pl_dailywage_day / 2.00M);
|
|
|
+ }
|
|
|
+
|
|
|
+ typeDeduction = ConvertToDecimal(typeDeduction);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (date_Range_type == "hour")
|
|
|
+ {
|
|
|
+ decimal sickLeave_halfHour = duration / 0.5M;
|
|
|
+ typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour);
|
|
|
+
|
|
|
+ if (duration >= 3 && duration < 7.5M)
|
|
|
+ {
|
|
|
+ mealDeduction = 10;
|
|
|
+ }
|
|
|
+ else if (duration >= 7.5M)
|
|
|
+ {
|
|
|
+ decimal sickLeave_halfHour1 = duration / 0.5M;
|
|
|
+
|
|
|
+ decimal leaveDays = Convert.ToDecimal(duration / 7.5M);
|
|
|
+
|
|
|
+ typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour1);
|
|
|
+ if (leaveDays % 1 == 0)
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * leaveDays;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Convert.ToInt32(leaveDays);
|
|
|
+
|
|
|
+ typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * Convert.ToInt32(leaveDays));
|
|
|
+
|
|
|
+ decimal sy_bingjiaunit = sickLeave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
|
|
|
+ if (sy_bingjiaunit > 0)
|
|
|
+ {
|
|
|
+ typeDeduction += ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sy_bingjiaunit);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
|
|
|
+ if (lastHours >= 3)
|
|
|
+ {
|
|
|
+ mealDeduction += 10;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -1192,7 +1547,7 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
|
|
|
|
|
|
- public static void CalculateTypeFee(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
|
|
|
+ public static void CalculateTypeFee2(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
|
|
|
decimal amountPayable,int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
|
|
|
{
|
|
|
typeDeduction = 0;
|
|
@@ -1200,8 +1555,6 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
string am_starttime = "08:59";
|
|
|
string am_endtime = "13:01";
|
|
|
-
|
|
|
-
|
|
|
|
|
|
decimal personalkLeave_dailywage_day = amountPayable / work_days;
|
|
|
|
|
@@ -1235,7 +1588,22 @@ namespace OASystem.API.OAMethodLib
|
|
|
var njManyDaysItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd")).ToList();
|
|
|
if (njManyDaysItem.Count > 1)
|
|
|
{
|
|
|
- mealDeduction = 10 * Math.Floor(duration);
|
|
|
+ var njManyDaysItem1 = njManyDaysItem.Where(it => it.StartDt != startTime).ToList();
|
|
|
+ if (njManyDaysItem1.Count > 0)
|
|
|
+ {
|
|
|
+ if (njManyDaysItem1[0].Unit.Equals("天"))
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Floor(duration);
|
|
|
+ }
|
|
|
+ else if (njManyDaysItem1[0].Unit.Equals("小时") && njManyDaysItem1[0].New_Duration >= 3)
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Floor(duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ mealDeduction = 10 * Math.Ceiling(duration);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -1247,12 +1615,46 @@ namespace OASystem.API.OAMethodLib
|
|
|
break;
|
|
|
case 2:
|
|
|
|
|
|
- decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / halfHour;
|
|
|
+ decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / 7.50M;
|
|
|
|
|
|
if (date_Range_type == "halfday")
|
|
|
{
|
|
|
- mealDeduction = 10;
|
|
|
- typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day);
|
|
|
+ mealDeduction = 10.00M * Math.Floor(duration);
|
|
|
+ if (duration % 1 == 0)
|
|
|
+ {
|
|
|
+ typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ decimal sj_wholeDay = Math.Floor(duration);
|
|
|
+ decimal sj_halfDay = duration % 1;
|
|
|
+
|
|
|
+ if (sj_halfDay > 0)
|
|
|
+ {
|
|
|
+ LeaveDetails sjDetails = leaveDetails.Where(it => it.StartDt == startTime && it.EndDt == endTime).FirstOrDefault();
|
|
|
+ decimal sjPrice = 0.00M;
|
|
|
+ if (sjDetails != null)
|
|
|
+ {
|
|
|
+ Slice_info sj_slice_Info = sjDetails.SliceInfo;
|
|
|
+ if (sj_slice_Info != null)
|
|
|
+ {
|
|
|
+ decimal sjLongTime = (sj_slice_Info.duration / 3600.00M);
|
|
|
+ typeDeduction = (personalkLeave_dailywage_day / 7.50M) * sjLongTime;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ LeaveDetails sjDetailsMeal = leaveDetails.Where(it => it.EndDt == startTime ).FirstOrDefault();
|
|
|
+ if (sjDetailsMeal == null)
|
|
|
+ {
|
|
|
+ mealDeduction += 10.00M;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ typeDeduction = personalkLeave_dailywage_day* sj_wholeDay;
|
|
|
+ }
|
|
|
+ typeDeduction = ConvertToDecimal(typeDeduction);
|
|
|
+ }
|
|
|
}
|
|
|
else if (date_Range_type == "hour")
|
|
|
{
|
|
@@ -1298,15 +1700,48 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
break;
|
|
|
case 3:
|
|
|
-
|
|
|
-
|
|
|
- decimal chengDuMinimumWage_halrHour = _chengDuMinimumWage / work_days / halfHour;
|
|
|
- decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / halfHour) - chengDuMinimumWage_halrHour;
|
|
|
+
|
|
|
+ decimal chengDuMinimumWage_Day = _chengDuMinimumWage / work_days;
|
|
|
+ decimal chengDuMinimumWage_halrHour = chengDuMinimumWage_Day / 7.50M;
|
|
|
+ decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / 7.50M) - chengDuMinimumWage_halrHour;
|
|
|
|
|
|
if (date_Range_type == "halfday")
|
|
|
{
|
|
|
- mealDeduction = 10;
|
|
|
- typeDeduction = ConvertToDecimal( sickLeave_dailywage_halfhour_deduction1 * halfHour);
|
|
|
+ mealDeduction = 10.00M * Math.Ceiling(duration);
|
|
|
+
|
|
|
+ decimal pl_dailywage_day = personalkLeave_dailywage_day - chengDuMinimumWage_Day;
|
|
|
+ if (duration % 1 == 0)
|
|
|
+ {
|
|
|
+ typeDeduction = ConvertToDecimal(pl_dailywage_day * duration);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ decimal bj_wholeDay = Math.Floor(duration);
|
|
|
+ decimal bj_halfDay = duration % 1;
|
|
|
+ decimal bj_wholeDayWage = pl_dailywage_day * bj_wholeDay;
|
|
|
+ decimal bj_halfDayWage = 0.00M;
|
|
|
+ if (bj_halfDay > 0)
|
|
|
+ {
|
|
|
+ LeaveDetails bjDetails = leaveDetails.Where(it => it.StartDt == startTime && it.EndDt == endTime).FirstOrDefault();
|
|
|
+
|
|
|
+ decimal bjPrice = 0.00M;
|
|
|
+ if (bjDetails != null)
|
|
|
+ {
|
|
|
+ Slice_info bj_slice_Info = bjDetails.SliceInfo;
|
|
|
+ decimal bjLongTime = bj_slice_Info.duration / 3600.00M;
|
|
|
+ if (bjLongTime == 3.00M)
|
|
|
+ {
|
|
|
+ bj_halfDayWage = (pl_dailywage_day / 7.50M) * 3.00M;
|
|
|
+ }
|
|
|
+ else if (bjLongTime == 4.50M)
|
|
|
+ {
|
|
|
+ bj_halfDayWage = (pl_dailywage_day / 7.50M) * 4.50M;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ typeDeduction = ConvertToDecimal(bj_wholeDayWage + bj_halfDayWage);
|
|
|
+ }
|
|
|
}
|
|
|
else if (date_Range_type == "hour")
|
|
|
{
|
|
@@ -1344,9 +1779,7 @@ namespace OASystem.API.OAMethodLib
|
|
|
int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
|
|
|
if (lastHours >= 3)
|
|
|
{
|
|
|
-
|
|
|
mealDeduction += 10;
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1453,8 +1886,6 @@ namespace OASystem.API.OAMethodLib
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|