|
@@ -1,5 +1,6 @@
|
|
|
using Google.Protobuf.WellKnownTypes;
|
|
|
using NPOI.HPSF;
|
|
|
+using NPOI.OpenXmlFormats.Dml.Diagram;
|
|
|
using NPOI.OpenXmlFormats.Spreadsheet;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
using NPOI.Util;
|
|
@@ -75,8 +76,21 @@ namespace OASystem.API.OAMethodLib
|
|
|
_result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡】【Msg】" + checkInDayDataView.errmsg;
|
|
|
return _result;
|
|
|
}
|
|
|
+
|
|
|
+ //获取所有打卡记录 外出
|
|
|
+ CheckInDataView checkInDataView = new CheckInDataView();
|
|
|
+ checkInDataView = await _qiYeWeChatApiService.GetCheckinDataAsync(qyWhchatIdList, 2,startDt, endDt);
|
|
|
+ if (checkInDataView.errcode != 0)
|
|
|
+ {
|
|
|
+ _result.Msg = "【企业微信】【打卡】【获取时间段内所有日打卡记录】【Msg】" + checkInDataView.errmsg;
|
|
|
+ return _result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//筛选出工作日日报
|
|
|
- List<Root> workday_userRoots = checkInDayDataView.datas.Where(it => it.base_info.day_type == 0 && it.base_info.record_type == 1).ToList(); //工作日日报
|
|
|
+ List<Root> workday_userRoots = checkInDayDataView.datas.Where(it => it.base_info.day_type == 0 && it.base_info.record_type == 1).ToList();
|
|
|
+
|
|
|
+ //工作日日报
|
|
|
workday_userRoots = workday_userRoots.OrderBy(it => it.base_info.date).ToList();
|
|
|
|
|
|
//获取 请假类型 Sp_Detail.template_id
|
|
@@ -93,7 +107,7 @@ namespace OASystem.API.OAMethodLib
|
|
|
foreach (var pm_wsInfo in pm_WageSheetDattaSources)
|
|
|
{
|
|
|
string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
|
|
|
-
|
|
|
+
|
|
|
|
|
|
//补贴 金额
|
|
|
decimal meal_subsidy = 0.00M; // 午餐(午餐10元/天) 补贴 * 计算方式:单日上午请假时长(小时)大于或者等于三小时 没有餐补
|
|
@@ -152,7 +166,6 @@ namespace OASystem.API.OAMethodLib
|
|
|
//userRoots = userRoots.Distinct().ToList();
|
|
|
userRoots = userRoots.OrderBy(it => it.base_info.date).ToList();
|
|
|
|
|
|
-
|
|
|
int dk_work_days = userRoots.Count; //应出勤天数
|
|
|
|
|
|
if (dk_work_days > work_days)
|
|
@@ -176,9 +189,14 @@ namespace OASystem.API.OAMethodLib
|
|
|
|
|
|
int user_probationary_bk_num = 0;
|
|
|
|
|
|
-
|
|
|
decimal user_probationary_bk_decimal = pm_wsInfo.Floats; //绩效工资为0 则为试用员工
|
|
|
|
|
|
+ //处理外出打卡记录
|
|
|
+ List<CheckInDataInfo> checkInData1 = new List<CheckInDataInfo>();
|
|
|
+ checkInData1 = checkInDataView.checkindata;
|
|
|
+ List<CheckInDataInfo> checkInDatas = new List<CheckInDataInfo>();
|
|
|
+ checkInDatas = checkInData1.Where(it => it.userid == acctid).ToList();
|
|
|
+
|
|
|
#region 迟到 早退 旷工
|
|
|
|
|
|
int user_cd_zt_num = 0; //早退/迟到 次数 10分钟内 2次以内不记处罚 三次及以上50一次
|
|
@@ -408,6 +426,36 @@ namespace OASystem.API.OAMethodLib
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //外出打卡 计算旷工迟到
|
|
|
+ foreach (var checkInData in checkInDatas)
|
|
|
+ {
|
|
|
+ //当前时间是上午还是下午
|
|
|
+ int timeLong = 0;
|
|
|
+ string thisTime = string.Format(@"12:00:00");
|
|
|
+ string wcdkTime = checkInData.checkin_time_dt.ToString("HH:mm:ss");
|
|
|
+ DateTime wcdkDt = Convert.ToDateTime(wcdkTime);
|
|
|
+
|
|
|
+ if (Convert.ToDateTime(thisTime) > wcdkDt) //上午
|
|
|
+ {
|
|
|
+ DateTime amDt = Convert.ToDateTime("09:00:00");
|
|
|
+ if (wcdkDt <= amDt)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DateTime pmDt = Convert.ToDateTime("18:00:00");
|
|
|
+ if (wcdkDt >= pmDt)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 假勤/补卡次数 审批
|