代码拉取完成,页面将自动刷新
主要字段有
排班用户Id(UnitUserId)
ObjectId 里面有排班数据Id(PlanItemId),目前有Overtime${OvertimeId}和PlanItem${PlanItemId}两种格式
类型(Category)
加扣班时长(OvertimeHours)
核算成加班的时长(ActualHours)
核算成存假的时长(StoredVacationHours)
是否有效(Effective)
审批状态(Status)
注:核算成加班的时长&核算成存假的时长 都是排班用户实际从此班次获得的,两者没有冲突,可以同时不为0,但不能同时为0(没有意义)
核算成加班的时长--一般会变成用户的薪资, 核算成存假的时长--一般会变成用户的存假
唯一约束:PlanItemId(实际在ObjectId里面)-Category-Effective=true
产生和删除的时机:排班数据的保存时产生,排班数据的删除时删除
数据特征:ObjectId = PlanItem${PlanItemId}, Category = 1, OvertimeHours = 0, ActualHours = shift.Overtime, StoredVacationHours = shift.StoredVacation, Effective = 1, Status = 审批通过
状态变更:随班表(PlanItem)变更,PlanItem是草稿->Effective = 0,PlanItem不是草稿->->Effective = 1
产生和删除的时机:排班人加扣班保存时产生;加扣班撤销时删除,排班数据的删除时删除
数据特征:ObjectId = PlanItem${PlanItemId}, Category = 0, OvertimeHours = [加扣班时长], ActualHours = [核算成加班的时长], StoredVacationHours = [核算成存假的时长], Effective = 1(如果当前PlanItem状态为草稿时,则为0), Status = 审批通过
状态变更:随班表(PlanItem)变更,PlanItem是草稿->Effective = 0,PlanItem不是草稿->->Effective = 1
注:加扣班时长为用户当天上班时实际加扣班时长,比如早退2小时,加班2小时;现在核算成0.5小时加班和1小时存假。(
注意此公式不成立 OvertimeHours = ActualHours + StoredVacationHours
)
产生和删除的时机:流程保存加扣班申请时产生;流程物理删除时删除
数据特征:ObjectId = Overtime${OvertimeId}, Category = 0, OvertimeHours = [申请人填写], ActualHours = [审批人换算], StoredVacationHours = [审批人换算], Effective = 0, Status = [流程是否执行审批通过]
状态变更:流程方面:审批通过后Effective = 1,Status=[审批通过],流程拒绝、终止、标记删除等Effective=0, Status=[撤销];排班数据方面:排班数据的删除、加扣班撤销Effective=0, Status=[撤销]。撤回班表,Effective=0。发布班表,Effective=1
注1:关于唯一约束,主要针对排班人点击加扣班与用户申请加扣班的冲突校验,规定对于一个PlanItem而言,审批中和审批通过的Overtime的Record只有一个。即提交了申请后排班人不能再加扣班,排班人加扣班后不能再提交申请
注2:只有Effective = 1的加扣班Record才会加算加扣班时长,并且显示在班表
注3:实际判断加扣班是否生效还是看Effective,那么Status的作用是什么?只有1个作用,就是准备把Effective设成1时,必须检查Status的状态为[审批通过]。
产生和删除的时机:编辑“排班月统计”后,归档后生效。当ActualHours=0且StoredVacationHours=0时,删除
数据特征:ObjectId = MonthlyResult, Category = 0, OvertimeHours = [本月工作时长 - 本月应工作时长], ActualHours = [操作人换算], StoredVacationHours = [操作人换算], Effective = 1, Status = [审批通过]
状态变更:无
产生和删除的时机:时间流逝或人为因素导致积存假过期
数据特征:ObjectId = Expiration, Category = 1, OvertimeHours = 0, ActualHours = 0, StoredVacationHours = -x(x为过期小时数), Effective = 1, Status = [审批通过]
状态变更:无
主要字段有
排班用户Id(UnitUserId)
年份(Year)
积存假余额(Balance)
积存假余额(单位:小时)(BalanceHours)
结转的天数,含小数部分(CarryOverDays)
结转的小时数(CarryOverHours)
本年可用积存假小时数[虚拟字段NotMapped](TotalHours)
该年已同步到请假模块的总天数的整0.5部分(SyncDays)
注:每日工作时长不一定是8小时(可能7.5),换算BalanceHours到Balance时会存在多位小数的情况,最终跑回界面上的数据是保留小数点后两位
唯一约束:Year-UnitUserId
产生的时机:产生了相应年份的Record,且Record的StoredVacationHours ≠ 0
数据特征:BalanceHours = [实时统计Record表中本年的数据],CarryOverHours = [ISNULL(上一年的StoredVacation.BalanceHours, 0)]
状态变更:无
decimal days = [Sum(Record) + CarryOverDays] - SyncDays; //Sum(Record)是本年的所有产生积存假记录的和,CarryOverDays在下面会讲,固定值,SyncDays是已同步请假的整数部分,可正负
bool res = 请假同步("存休假编码", days);
if(res)
{
storeVacation.SyncDays += days;
}
else
{
//请假模块的可用天数不能为负,所以可能失败,比如用户把获得的存假用光了,此时发现他之前没上哪几天班(Sum(Record)减小),要扣回去(days为负),却没得扣了(res为false)
//此时应该等此用户下次产生存假(Sum(Record)增大) ,days增加,同步就可能成功了
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。