コード例 #1
0
        /// <summary>
        /// 当撤销的假期被奇效或者拒绝后,恢复年假(还有调休).
        /// </summary>
        /// <returns>是否恢复成功</returns>
        public bool RecoverOrder(OrderModel order)
        {
            using (var dbContext = new MissionskyOAEntities())
            {
                //如果有reforder,说明是撤销的假单.所以对于这种取消的时候应该恢复假期.
                if (order.RefOrder == null)
                {
                    return(false);
                }

                var detail = order.OrderDets.FirstOrDefault(); //申请单详细
                var times  = detail.IOHours.Value + order.RefOrder.OrderDets.FirstOrDefault().IOHours.Value;

                //update
                order.OrderUsers.ToList().ForEach(user =>
                {
                    var summary = new UpdateAttendanceSummaryModel()
                    {
                        UserId      = user.Id,
                        SummaryYear = DateTime.Now.Year,
                        Times       = times,
                        Type        = order.OrderType
                    };

                    double beforeUpdated = 0.0;
                    double afterUpdated  = 0.0;
                    string auditMsg      = string.Empty;

                    this._attendanceSummaryService.UpdateAttendanceSummary(dbContext, summary, ref beforeUpdated,
                                                                           ref afterUpdated); //更新假期

                    #region 更新剩余结果

                    if (order.OrderType == OrderType.AnnualLeave)
                    {
                        auditMsg = string.Format("剩余年假: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }

                    else if (order.OrderType == OrderType.Overtime)
                    {
                        auditMsg = string.Format("累计加班: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }
                    else if (order.OrderType == OrderType.DaysOff)
                    {
                        auditMsg = string.Format("剩余调休: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }
                    else
                    {
                        auditMsg = string.Format("累计休假: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }

                    if (!string.IsNullOrEmpty(auditMsg))
                    {
                        detail.Audit = auditMsg;
                    }
                    #endregion
                });
            }
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// 更新用户考勤汇总信息
        /// </summary>
        /// <param name="dbContext">数据库上下文</param>
        /// <param name="model">考勤汇总更新信息</param>
        /// <param name="beforeUpdated">更新前的旧值</param>
        /// <param name="afterUpdated">更新后的新值</param>
        /// <returns></returns>
        public bool UpdateAttendanceSummary(MissionskyOAEntities dbContext, UpdateAttendanceSummaryModel model, ref double beforeUpdated, ref double afterUpdated)
        {
            if (model == null || model.UserId < 1 || Math.Abs(model.Times) < 0.0)
            {
                throw new KeyNotFoundException("更新假期异常。");
            }

            //CheckVacationBalance(model.ApplicantId, model.Type, model.Times); //验证余额是否充足

            #region 更新假期汇总信息
            var checkType = model.Type;
            if (checkType == OrderType.DaysOff) //调休,扣除加班
            {
                checkType = OrderType.Overtime;
            }

            //用户本年度相关类型 汇总结果
            var summary =
                dbContext.AttendanceSummaries.FirstOrDefault(
                    it =>
                    it.Year == DateTime.Now.Year && it.UserId == model.UserId &&
                    it.Type == (int)checkType);

            if (summary == null)
            {
                throw new NullReferenceException("更新假期异常。");
            }

            summary.RemainValue  = summary.RemainValue ?? 0.0;
            beforeUpdated        = summary.RemainValue.Value;   //更新前的值
            summary.RemainValue += model.Times;                 //计算已请多少事假
            afterUpdated         = beforeUpdated + model.Times; //更新后的值

            beforeUpdated = Math.Abs(beforeUpdated);            //更新前的值
            afterUpdated  = Math.Abs(afterUpdated);             //更新后的值
            #endregion

            return(true);
        }
コード例 #3
0
        /// <summary>
        /// 更新假期信息
        /// </summary>
        /// <param name="dbContext">数据库上下文</param>
        /// <param name="order">申请单</param>
        /// <param name="workflow">申请单流程</param>
        /// <param name="nextStep">流程下一步</param>
        /// <param name="nextStatus">申请单状态</param>
        private void UpdateAttendanceSummary(MissionskyOAEntities dbContext, OrderModel order, WorkflowModel workflow,
                                             WorkflowStepModel nextStep, OrderStatus nextStatus)
        {
            var detail = order.OrderDets.FirstOrDefault(); //申请单详细

            if (detail == null || detail.IOHours == null || Math.Abs(detail.IOHours.Value) <= 0.0)
            {
                Log.Error("申请单无效");
                throw new InvalidOperationException("申请单无效。");
            }

            var curStep = order.NextStep == Constant.WORKFLOW_DIRECT_SUPERVISOR_APPROVE_NODE
                ? workflow.GetDirectSupervisorApproveStep()
                : workflow.WorkflowSteps.FirstOrDefault(it => it.Id == order.NextStep); //当前步骤

            var isUpdated = false;
            var times     = detail.IOHours.Value;

            //1, 拒绝
            if (nextStatus == OrderStatus.Rejected)
            {
                if (curStep != null && curStep.IsFinanceReviewing()) //当前是[财务审阅]: [行政审批]完成,已经更新了假期,需要[财务审阅]时,取消扣除的假期
                {
                    isUpdated = true;
                    times     = -times;
                }
            }
            //2, 流程结束(只能在没有财务审批节点才更新,避免重复更新(原始需求:完成行政审批就已经更新假期))
            else if (!workflow.NeedFinanceApprove() && nextStep == null)
            {
                isUpdated = true;
            }
            //3, 流程未结束, 转到[财务审阅](完成行政审批就更新)
            else if (nextStep != null && nextStep.IsFinanceReviewing())
            {
                isUpdated = true;
            }

            if (isUpdated)
            {
                order.OrderUsers.ToList().ForEach(user =>
                {
                    var summary = new UpdateAttendanceSummaryModel()
                    {
                        UserId      = user.Id,
                        SummaryYear = DateTime.Now.Year,
                        Times       = times,
                        Type        = order.OrderType
                    };

                    double beforeUpdated = 0.0;
                    double afterUpdated  = 0.0;
                    string auditMsg      = string.Empty;

                    this._attendanceSummaryService.UpdateAttendanceSummary(dbContext, summary, ref beforeUpdated,
                                                                           ref afterUpdated); //更新假期

                    #region 更新剩余结果

                    if (order.OrderType == OrderType.AnnualLeave)
                    {
                        auditMsg = string.Format("剩余年假: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }

                    else if (order.OrderType == OrderType.Overtime)
                    {
                        auditMsg = string.Format("累计加班: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }
                    else if (order.OrderType == OrderType.DaysOff)
                    {
                        auditMsg = string.Format("剩余调休: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }
                    else
                    {
                        auditMsg = string.Format("累计休假: 申请前{0}小时,申请后{1}小时", beforeUpdated, afterUpdated);
                    }

                    if (!string.IsNullOrEmpty(auditMsg))
                    {
                        detail.Audit = auditMsg;
                    }

                    #endregion
                });
            }
        }