Ejemplo n.º 1
0
        public ActionResult EditLeaveData(
            Guid billId,
            string leaveType,
            DateTime leaveStart,
            bool amStart,
            DateTime leaveEnd,
            bool amEnd,
            string leaveReason)
        {
            RequestLeaveLogic leaveLogic = new RequestLeaveLogic();

            RequestLeaveBill leaveData = new RequestLeaveBill();

            leaveData.Id          = billId;
            leaveData.LeaveType   = leaveType;
            leaveData.LeaveStart  = leaveStart;
            leaveData.LeaveEnd    = leaveEnd;
            leaveData.LeaveReason = leaveReason;

            IUserData user = UserContext.CurrentUser;

            bool result = leaveLogic.UpdateRequestLeaveBill(leaveData, user, amStart, amEnd);

            return(Json(new { Result = result, Data = leaveData }));
        }
Ejemplo n.º 2
0
        public bool UpdateRequestLeaveBill(RequestLeaveBill bill, IUserData user, bool amStart, bool amEnd)
        {
            Guard.ArgumentNotNull(bill, "bill");

            using (TeamDBContext context = new TeamDBContext())
            {
                bill.WorkDayCount = CalculatetWorkdayCount(context, bill, amStart, amEnd);
                if (bill.WorkDayCount == 0)
                {
                    throw new ModuleLogicException("请假的工作日为0天,请检查请假的开始结束时间是否填写正确");
                }

                RequestLeaveBill old = context.RequestLeaveBills
                                       .Where(p => p.Id == bill.Id)
                                       .Single();

                old.LeaveStart   = bill.LeaveStart;
                old.LeaveEnd     = bill.LeaveEnd;
                old.LeaveType    = bill.LeaveType;
                old.WorkDayCount = bill.WorkDayCount;
                old.LeaveReason  = bill.LeaveReason;
                old.PMSign       = bill.PMSign;
                old.PMSignDate   = bill.PMSignDate;
                old.DLSign       = bill.DLSign;
                old.DLSignDate   = bill.DLSignDate;
                old.CEOSign      = bill.CEOSign;
                old.CEOSignDate  = bill.CEOSignDate;

                return(context.SaveChanges() > 0);
            }
        }
Ejemplo n.º 3
0
        public bool InsertRequestLeaveBill(RequestLeaveBill bill, IUserData user, bool amStart, bool amEnd)
        {
            Guard.ArgumentNotNull(bill, "bill");

            bill.Id = Guid.NewGuid();
            using (TeamDBContext context = new TeamDBContext())
            {
                bill.WorkDayCount = CalculatetWorkdayCount(context, bill, amStart, amEnd);
                if (bill.WorkDayCount == 0)
                {
                    throw new ModuleLogicException("请假的工作日为0天,请检查请假的开始结束时间是否填写正确");
                }
                bill.CreateTime = DateTime.Now;
                bill.Employee   = context.Employees.Where(p => p.EmployeeId == user.UserId).Single();

                context.RequestLeaveBills.Add(bill);
                int affectRows = context.SaveChanges();
                return(affectRows > 0);
            }
        }
Ejemplo n.º 4
0
        private decimal CalculatetWorkdayCount(TeamDBContext context, RequestLeaveBill bill, bool amStart, bool amEnd)
        {
            //获取假期
            DateTime         startTime = QueryParameterUtility.DateTimeStart(bill.LeaveStart);
            DateTime         endTime   = QueryParameterUtility.DateTimeEnd(bill.LeaveEnd);
            DatabaseAccess   dba       = context.DatabaseAccess();
            HashSet <string> holidays  = dba.ExecuteReader <HashSet <string> >(
                "SELECT CONVERT(varchar, HolidayDate, 120) AS HolidayDate FROM HolidaySettings WHERE HolidayDate >= @p0 AND HolidayDate <= @p1",
                new object[] { startTime, endTime },
                (d, r) => {
                d.Add(r.GetString(0));
            }
                );
            //获取工作时间
            WorkTimeSetting setting = context.WorkTimeSettings
                                      .Where(s => s.Enabled)
                                      .Single();

            //设置时间
            if (amStart)
            {
                bill.LeaveStart = SetTime(bill.LeaveStart, setting.AMStartTime.Value);
            }
            else
            {
                bill.LeaveStart = SetTime(bill.LeaveStart, setting.PMStartTime.Value);
            }
            if (amEnd)
            {
                bill.LeaveEnd = SetTime(bill.LeaveEnd, setting.AMEndTime.Value);
            }
            else
            {
                bill.LeaveEnd = SetTime(bill.LeaveEnd, setting.PMEndTime.Value);
            }

            decimal  workDayCount = 0;
            TimeSpan time         = bill.LeaveEnd - bill.LeaveStart;
            string   formatter    = "yyyy-MM-dd";

            if (time.Days == 0)
            {
                if (!holidays.Contains(bill.LeaveStart.ToString(formatter)))
                {
                    //当天请假,只计算小时
                    workDayCount = CalculatetByDay(bill.LeaveStart, bill.LeaveEnd, setting);
                }
            }
            else if (time.Days >= 1)
            {
                if (time.Days > 1)
                {
                    //跨多天请假,中间按自然天,头尾按小时
                    //计算中间的工作日(除去请假开始的那天和请假结束的那天)
                    DateTime middleStart = QueryParameterUtility.DateTimeStart(bill.LeaveStart.AddDays(1));
                    DateTime middleEnd   = QueryParameterUtility.DateTimeStart(bill.LeaveEnd);
                    if (middleStart < middleEnd)
                    {
                        middleEnd = middleEnd.AddDays(-1);
                    }
                    int middleDays = (middleEnd - middleStart).Days + 1;
                    //移除休息日
                    for (int i = 0; i < middleDays; i++)
                    {
                        if (!holidays.Contains(middleStart.AddDays(i).ToString(formatter)))
                        {
                            workDayCount++;
                        }
                    }
                }

                //跨天请假,分别计算小时
                DateTime begin, end;
                if (!holidays.Contains(bill.LeaveStart.ToString(formatter)))
                {
                    begin         = bill.LeaveStart;
                    end           = SetTime(bill.LeaveStart, setting.PMEndTime.Value);
                    workDayCount += CalculatetByDay(begin, end, setting);
                }

                if (!holidays.Contains(bill.LeaveEnd.ToString(formatter)))
                {
                    begin         = SetTime(bill.LeaveEnd, setting.AMStartTime.Value);
                    end           = bill.LeaveEnd;
                    workDayCount += CalculatetByDay(begin, end, setting);
                }
            }

            return(workDayCount);
        }