示例#1
0
        public void ImportData(IEnumerable <OverWork> ows)
        {
            var ist = HrManagerContext.GetInstance();

            ist.OverWorks.AddRange(ows);
            ist.SaveChanges();
        }
示例#2
0
 public List <Employee> GetLastMonthLeaveEmployees()
 {
     return
         (HrManagerContext.GetInstance()
          .Employees.Where(e => DateTime.Parse(e.ExpireDate).Month < DateTime.Now.Month)
          .ToList());
 }
示例#3
0
        public static void UpdateData()
        {
            //using (var dbContext = new HrManagerContext()) {
            //    dbContext.Database.CreateIfNotExists();
            //}

            Employees           = new EntityCollection <Employee>(new EmployeeControl());
            Departments         = new EntityCollection <Department>(new DepartmentControl());
            OperatingPosts      = new EntityCollection <OperatingPost>(new OperatingPostControl());
            Dormitories         = new EntityCollection <Dormitory>(new DormitoryControl());
            EmployeePostAdjusts = new EntityCollection <EmployeePostAdjust>(new EmployeePostAdjustControl());


            ArrangeWorks        = new EntityCollection <ArrangeWork>(new ArrangeWorkControl());
            AsignedArrangeWorks = new EntityCollection <ArrangeWork>(new ArrangeWorkControl(), w => !w.IsCommonDefine);
            DefinedArrangeWorks = new EntityCollection <ArrangeWork>(new ArrangeWorkControl(), w => w.IsCommonDefine);

            VacationPlans        = new EntityCollection <VacationPlan>(new VacationPlanControl());
            AsignedVacationPlans = new EntityCollection <VacationPlan>(new VacationPlanControl(), w => !w.IsCommonDefine);
            DefVacationPlans     = new EntityCollection <VacationPlan>(new VacationPlanControl(), w => w.IsCommonDefine);

            AskLeaves     = new EntityCollection <AskLeave>(new AskLeaveControl());
            BusinessTrips = new EntityCollection <BusinessTrip>(new BusinessTripControl());
            ReSignIns     = new EntityCollection <ReSignIn>(new ReSignInControl());
            OverWorks     = new EntityCollection <OverWork>(new OverWorkControl());

            SystemArguments   = new EntityCollection <SystemArgument>(new SystemArgumentControl());
            AskLeaveTypes     = new EntityCollection <AskLeaveType>(new AskLeaveTypeControl());
            CardFillRecords   = new EntityCollection <CardFillRecord>(new CardFillRecordControl());
            Attendances       = new ObservableCollection <Attendance>(HrManagerContext.GetInstance().Attendances.ToList());
            AttendanceResults = new EntityCollection <AttendanceResult>(new AttendanceResultControl());
            TiaoXius          = new EntityCollection <TiaoXiu>(new TiaoXiuControl());
            SalaryDetails     = new EntityCollection <WageDetail>(new WageDetailControl());

            AttArgControl     = new AttendanceArguControl();
            BaseSalaryControl = new BaseSalaryControl();
            TaxControl        = new TaxControl();

            SystemRoles = new EntityCollection <SystemRole>(new SystemRoleControl());
            if (!SystemRoles.ToList().Exists(s => s.IsDefaultRole))
            {
                SystemRoles.AddWithEntity(SystemRole.Default);
            }

            SystemUsers = new EntityCollection <SystemUser>(new SystemUserControl());
            if (!SystemUsers.ToList().Exists(s => s.IsDefaultUser))
            {
                SystemUsers.AddWithEntity(SystemUser.DefaultAdmin);
            }

            Couples = new EntityCollection <Couple>(new CoupleControl());

            WorkAreaHeight  = System.Windows.SystemParameters.WorkArea.Height;
            WorkAreaWidth   = System.Windows.SystemParameters.WorkArea.Width;
            TipWidth        = 300;
            TipHeight       = 200;
            ExpectedTipLeft = WorkAreaWidth - TipWidth;
            ExpectedTipTop  = WorkAreaHeight - TipHeight;
        }
示例#4
0
 public static List <string> GetArguments(ArguType type)
 {
     return
         (HrManagerContext.GetInstance()
          .SystemArguments.Where(a => a.ArguType == type)
          .ToList()
          .ConvertAll(s => s.ArguValue));
 }
 public static List <string> GetLeaveTypeNames()
 {
     return
         (HrManagerContext.GetInstance()
          .AskLeaveTypes
          .ToList()
          .ConvertAll(s => s.LeaveName));
 }
示例#6
0
        private void DetachMonthForWork(List <DateTimeExtend> workDays, List <DateTimeExtend> LeaveDays, DateTime now, Employee employee)
        {
            var      vacation    = GetVactionPlans(employee);
            int      daycount    = DateTime.DaysInMonth(now.Year, now.Month);
            DateTime begDateTime = new DateTime(now.Year, now.Month, 1);
            DateTime endDateTime = new DateTime(now.Year, now.Month, daycount);

            while (begDateTime <= endDateTime)
            {
                if (vacation.VacationDays.Contains(begDateTime))
                {
                    LeaveDays.Add(new DateTimeExtend()
                    {
                        DateTime = begDateTime,
                        type     = DateTimeExtendtype.Holiday
                    });
                }
                else if (vacation.Saturdays.Contains(begDateTime) ||
                         vacation.Sundays.Contains(begDateTime))
                {
                    LeaveDays.Add(new DateTimeExtend()
                    {
                        DateTime = begDateTime,
                        type     = DateTimeExtendtype.WeeKendDay,
                    });
                }
                else
                {
                    workDays.Add(new DateTimeExtend()
                    {
                        DateTime = begDateTime,
                        type     = DateTimeExtendtype.WorkDay,
                    });
                }
                begDateTime = begDateTime.AddDays(1);
            }

            var tiaoxius =
                HrManagerContext.GetInstance()
                .TiaoXius.Where(t => t.EmployeeId == employee.EmployeeId).ToList().Where(t => t.CurDateTime.Month == now.Month).ToList();

            foreach (var tiaoxiu in tiaoxius)
            {
                var theholiDay = LeaveDays.Single(w => w.DateTime.Day == tiaoxiu.TiaoXiuDateTime.Day);
                var theDay     = workDays.Single(w => w.DateTime.Day == tiaoxiu.CurDateTime.Day);
                if (!tiaoxiu.IsHalfDay)
                {
                    workDays.Remove(theDay);
                    workDays.Add(theholiDay);
                    LeaveDays.Remove(theholiDay);
                    theDay.type = theholiDay.type;
                    LeaveDays.Add(theDay);
                }
            }
        }
示例#7
0
        /// <summary>
        /// 处理出差时间 请假时间
        /// </summary>
        /// <param name="attendanceToday"></param>
        /// <param name="aResult"></param>
        private void processUnnormal(AttendanceToday attendanceToday, AttendanceResult aResult)
        {
            var groups = attendanceToday.AskleavesToDay.GroupBy(a => a.AskLeaveType.AskLeaveTypeId);

            foreach (var group in groups)
            {
                AskLeaveTypeForAttendance atfa = new AskLeaveTypeForAttendance();

                var askLeaveType = HrManagerContext.GetInstance().AskLeaveTypes.Find(group.Key);
                atfa.AskLeaveType = askLeaveType;
                foreach (var item in group)
                {
                    atfa.TimeCount += item.EndDateToDateTime.Subtract(item.BeginDateToDateTime).TotalHours;
                }
                aResult.AskLeaveTypeForAttendances.Add(atfa);
            }

            foreach (BusinessTrip tmp_bust in attendanceToday.BusinessTripsToDay)
            {
                aResult.BusTrip += tmp_bust.EndDateToDateTime.Subtract(tmp_bust.BeginDateToDateTime).TotalHours;
            }

            var tiaoxius =
                HrManagerContext.GetInstance()
                .TiaoXius.Where(t => t.EmployeeId == attendanceToday.Employee.EmployeeId)
                .ToList()
                .Where(t => t.CurDateTime.Day == attendanceToday.Day)
                .ToList();

            if (tiaoxius.Count != 0)
            {
                if (tiaoxius[0].IsHalfDay)
                {
                    aResult.TiaoXiu = "0.5";
                }
                else
                {
                    aResult.TiaoXiu = "1";
                }
            }
            else
            {
                aResult.TiaoXiu = "0";
            }


            //foreach (OverWork tmp_over in attendanceToday.OverWorksToday)
            //{
            //    aResult.OverWork_normal += double.Parse(tmp_over.ApplyTime);
            //}

            aResult.ReSignIn = attendanceToday.ReSiginToday.Count;
        }
 public void Analysis(DateTime now)
 {
     try
     {
         CalculateWage wage  = new CalculateWage();
         var           wages = wage.getWages(now);
         HrManagerContext.GetInstance().WageDetails.AddRange(wages);
         HrManagerContext.GetInstance().SaveChanges();
     }
     catch (Exception e)
     {
         Console.WriteLine(e.StackTrace);
     }
 }
示例#9
0
        private VacationPlan GetVactionPlans(Employee employee)
        {
            var vactionPlans = HrManagerContext.GetInstance().VacationPlans;

            if (vactionPlans.Any(v => v.EmployeeId == employee.Id))
            {
                return(vactionPlans.Where(v => v.EmployeeId == employee.Id).ToList()[0]);
            }
            if (vactionPlans.Any(v => v.OperatingPostId == employee.OperatingPostId))
            {
                return(vactionPlans.Where(v => v.DepartmentId == employee.DepartmentId).ToList()[0]);
            }
            if (vactionPlans.Any(v => v.DepartmentId == employee.DepartmentId))
            {
                return(vactionPlans.Where(v => v.DepartmentId == employee.DepartmentId).ToList()[0]);
            }
            return(vactionPlans.ToList().Where(a => a.IsCommonDefine).ToList()[0]);
        }
示例#10
0
        private List <ArrangeWork> GetArrangeWorks(Employee employee)
        {
            var arrangeWorks    = HrManagerContext.GetInstance().ArrangeWorks.ToList();
            var emparrangeWorks = arrangeWorks.Where(a => a.Employee == employee).ToList();

            if (emparrangeWorks.Count != 0)
            {
                return(emparrangeWorks);
            }
            var operatarrangeWorks = arrangeWorks.Where(a => a.OperatingPost == employee.OperatingPost).ToList();

            if (operatarrangeWorks.Count != 0)
            {
                return(operatarrangeWorks);
            }
            var departarrangeWorks = arrangeWorks.Where(a => a.Department == employee.Department).ToList();

            if (departarrangeWorks.Count != 0)
            {
                return(departarrangeWorks);
            }
            return(arrangeWorks.Where(a => a.IsCommonDefine).ToList());
        }
示例#11
0
 public bool Analysis(DateTime nowDateTime)
 {
     try
     {
         var employees = HrManagerContext.GetInstance().Employees.ToList();
         foreach (var employee in employees)
         {
             var deleterange = HrManagerContext.GetInstance().AttendanceResults.Where(a => a.EmployeeNo == employee.EmployeeNO).ToList().Where(a => a.AttendanceDateMonth == nowDateTime.Month.ToString());
             HrManagerContext.GetInstance().AttendanceResults.RemoveRange(deleterange);
             var results = CalculateTime(employee, nowDateTime);
             HrManagerContext.GetInstance().AttendanceResults.AddRange(results);
             HrManagerContext.GetInstance().SaveChanges();
         }
         WageDetailControl wageDetail = new WageDetailControl();
         wageDetail.Analysis(nowDateTime);
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.StackTrace);
         return(false);
     }
 }
示例#12
0
 public EntityControl()
 {
     Factory = new EntityDataFactory <T>(HrManagerContext.GetDbSetInstance <T>());
 }
示例#13
0
        protected override bool DeleteProtected(Employee t)
        {
            var attendances = HrManagerContext.GetInstance().Attendances.ToList().Any(a => a.EmployeeNo == t.EmployeeNO && a.RecordTimeToDateTime.Month == DateTime.Now.Month);

            return(!attendances);
        }
示例#14
0
        public List <AttendanceResult> CalculateTime(Employee employee, DateTime now)
        {
            int i = 0;

            var attendanceResults = new List <AttendanceResult>();
            var arrageworks       = GetArrangeWorks(employee).ToList();

            #region 获取一个月的数据

            var attendanceForMonth =
                HrManagerContext.GetInstance()
                .Attendances.Where(a => a.EmployeeNo == employee.EmployeeNO)
                .ToList()
                .FindAll(a => a.RecordTimeToDateTime.Month == now.Month)
                .ToList();


            var overWorkForMonth =
                HrManagerContext.GetInstance()
                .OverWorks.Where(o => o.EmployeeId == employee.EmployeeId)
                .ToList().FindAll(a => a.BeginDateTimeToDateTime.Month == now.Month).ToList();

            var businessTripsForMonth =
                HrManagerContext.GetInstance()
                .BusinessTrips.Where(b => b.EmployeeId == employee.EmployeeId).ToList()
                .FindAll(a => a.BeginDateToDateTime.Month == now.Month).ToList();

            var reSignInForMonth =
                HrManagerContext.GetInstance()
                .ReSignIns.Where(r => r.EmployeeId == employee.EmployeeId)
                .ToList()
                .FindAll(a => a.ReSignInDateToDateTime.Month == now.Month)
                .ToList();

            var askLeaveForMonth =
                HrManagerContext.GetInstance()
                .AskLeaves.Where(a => a.EmployeeId == employee.EmployeeId)
                .ToList()
                .FindAll(a => a.BeginDateToDateTime.Month == now.Month)
                .ToList();

            #endregion
            var WorkDays  = new List <DateTimeExtend>();
            var LeaveDays = new List <DateTimeExtend>();
            var analysis  = new AttendanceAnalysis();


            DetachMonthForWork(WorkDays, LeaveDays, now, employee);

            foreach (var workDay in WorkDays)
            {
                // Console.WriteLine("workday: " + i);
                i++;

                var attendanceToday = analysis.GetAttendanceToday(attendanceForMonth, overWorkForMonth,
                                                                  businessTripsForMonth, reSignInForMonth, askLeaveForMonth, workDay.DateTime.Day);
                attendanceToday.Employee = employee;
                var aResult = new AttendanceResult();
                attendanceResults.Add(aResult);
                aResult.EmployeeName   = employee.EmployeeBaseInfo.EmployName;
                aResult.EmployeeNo     = employee.EmployeeNO;
                aResult.AttendanceDate = workDay.DateTime.ToString("d");

                var result = attendanceToday.AskleavesToDay.Count > 0 || attendanceToday.BusinessTripsToDay.Count > 0 || attendanceToday.OverWorksToday.Count > 0 || attendanceToday.AttendancesForDay.Count > 0;

                if (result)
                {
                    //处理出差、加班、请假,
                    processUnnormal(attendanceToday, aResult);
                    if (attendanceToday.AttendancesForDay.Count != 0)
                    {
                        var workListDate = new List <NearByDateTimeClass>();
                        attendanceToday = analysis.AnalysisForPresonByDay(attendanceToday, arrageworks);
                        var curArrageworks =
                            arrageworks.Where(a => a.ArrangeWorkNo == attendanceToday.ArrangeWorkNo).ToList();

                        if (curArrageworks.Count != 0)
                        {
                            aResult.BanCi = curArrageworks.First().WorkName;
                        }

                        //foreach (var work in curArrageworks)
                        //{
                        //    if (attendanceToday.AskleavesToDay.Exists(a => a.BeginDateToDateTime.Hour < work.OnDutyTimeToDateTime.Hour))
                        //        attendanceToday.VirAttendanceDateTimes.Add(new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OnDutyTimeToDateTime.Hour, work.OnDutyTimeToDateTime.Minute, 0));
                        //    if (attendanceToday.AskleavesToDay.Exists(a => a.BeginDateToDateTime.Hour < work.OffDutyTimeToDateTime.Hour))
                        //        attendanceToday.VirAttendanceDateTimes.Add(new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OffDutyTimeToDateTime.Hour, work.OffDutyTimeToDateTime.Minute, 0));
                        //    if (attendanceToday.BusinessTripsToDay.Exists(a => a.BeginDateToDateTime.Hour < work.OnDutyTimeToDateTime.Hour))
                        //        attendanceToday.VirAttendanceDateTimes.Add(new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OnDutyTimeToDateTime.Hour, work.OnDutyTimeToDateTime.Minute, 0));
                        //    if (attendanceToday.BusinessTripsToDay.Exists(a => a.BeginDateToDateTime.Hour < work.OffDutyTimeToDateTime.Hour))
                        //        attendanceToday.VirAttendanceDateTimes.Add(new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OffDutyTimeToDateTime.Hour, work.OffDutyTimeToDateTime.Minute, 0));
                        //}

                        workListDate = GetCorrectWorkList(attendanceToday.VirAttendanceDateTimes, curArrageworks);
                        var workList = workListDate.ConvertAll(w => !w.IsDispalyRecord() ? "" :w.Datetime.ToString("T"));
                        aResult.OnDutyMorning  = workList[0];
                        aResult.OffDutyMorning = workList[1];
                        aResult.OnDutyNoon     = workList[2];
                        aResult.OffDutyNoon    = workList[3];
                        aResult.OnDutyNight    = workList[4];
                        aResult.OffDutyNight   = workList[5];

                        Action <NearByDateTimeClass, int> setAResult = delegate(NearByDateTimeClass duty, int worktype)
                        {
                            var resultint = duty.IsValidRecord(worktype);
                            if (resultint == 1)
                            {
                                aResult.KuanGongTimes += duty.Span;
                            }
                            if (resultint == 2)
                            {
                                aResult.ChiDaoTimes.Add(duty.Span);
                            }
                            if (resultint == 2)
                            {
                                aResult.ZaoTuiTimes.Add(duty.Span);
                            }
                        };

                        Action <NearByDateTimeClass, NearByDateTimeClass, ArrangeWork> Action1 = delegate(NearByDateTimeClass w1, NearByDateTimeClass w2, ArrangeWork work)
                        {
                            DateTime realonduty;
                            DateTime realOffduty;
                            if (w1.IsDispalyRecord())
                            {
                                realonduty = w1.Datetime;
                                setAResult(w1, 1);
                            }
                            else
                            {
                                realonduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OnDutyTimeToDateTime.Hour, work.OnDutyTimeToDateTime.Minute, 0);
                            }
                            if (w2.IsDispalyRecord())
                            {
                                realOffduty = w2.Datetime;
                                setAResult(w2, 2);
                            }
                            else
                            {
                                realOffduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OffDutyTimeToDateTime.Hour, work.OffDutyTimeToDateTime.Minute, 0);
                                if (work.IsPassDayWork)
                                {
                                    realonduty = realonduty.AddDays(1);
                                }
                            }
                            aResult.normalWorkTime += realOffduty.Subtract(realonduty).TotalMinutes;
                        };


                        foreach (var work in curArrageworks)
                        {
                            if (work.SpanType == ArrangeWorkTimeSpanType.Moning)
                            {
                                //if (workListDate[0].IsDispalyRecord())
                                //{
                                //    realonduty = workListDate[0].Datetime;
                                //    setAResult(workListDate[0], 1);
                                //}
                                //else
                                //{
                                //    realonduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OnDutyTimeToDateTime.Hour, work.OnDutyTimeToDateTime.Minute, 0);
                                //}
                                //if (workListDate[1].IsDispalyRecord())
                                //{
                                //    realOffduty = workListDate[1].Datetime;
                                //    setAResult(workListDate[1], 2);
                                //}
                                //else
                                //{
                                //    realOffduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OffDutyTimeToDateTime.Hour, work.OffDutyTimeToDateTime.Minute, 0);
                                //    if (work.IsPassDayWork)
                                //        realonduty = realonduty.AddDays(1);
                                //}
                                //aResult.normalWorkTime += realOffduty.Subtract(realonduty).TotalMinutes;
                                Action1(workListDate[0], workListDate[1], work);
                            }
                            else if (work.SpanType == ArrangeWorkTimeSpanType.Afternoon)
                            {
                                //if (workListDate[2].IsDispalyRecord())
                                //    setAResult(workListDate[2], 1);
                                //if (workListDate[3].IsDispalyRecord())
                                //    setAResult(workListDate[3], 2);
                                Action1(workListDate[2], workListDate[3], work);
                            }
                            else
                            {
                                //setAResult(workListDate[4], 1);
                                //if (workListDate[4].IsDispalyRecord())
                                //    setAResult(workListDate[5], 2);
                                //if (workListDate[5].IsDispalyRecord())
                                Action1(workListDate[4], workListDate[5], work);
                                //添加夜班次数
                                aResult.IsNightDuty = true;
                            }
                        }
                    }
                }
                else
                {
                    // 旷工一天
                    aResult.KuanGongTimes = 8;
                }
            }
            foreach (var workDay in LeaveDays)
            {
                //var attendanceToday = analysis.GetAttendanceToday(attendanceForMonth, overWorkForMonth,
                //    businessTripsForMonth, reSignInForMonth, askLeaveForMonth, leaveDay.DateTime.Day);
                //attendanceToday.Employee = employee;
                //var aResult = new AttendanceResult();
                //attendanceResults.Add(aResult);
                //aResult.EmployeeName = employee.EmployeeBaseInfo.EmployName;
                //aResult.EmployeeNo = employee.EmployeeNO;
                //aResult.AttendanceDate = leaveDay.DateTime.ToString("d");

                //var result = attendanceToday.AskleavesToDay.Count > 0 || attendanceToday.BusinessTripsToDay.Count > 0 || attendanceToday.OverWorksToday.Count > 0 || attendanceToday.AttendancesForDay.Count > 0;

                //if (result)
                //{
                //    if(leaveDay.type == DateTimeExtendtype.Holiday)
                //    {
                //        aResult.OverWork_voc = GetOverWork(attendanceToday);
                //    }
                //    else if(leaveDay.type == DateTimeExtendtype.WeeKendDay)
                //    {
                //        aResult.OverWork_weekend = GetOverWork(attendanceToday);
                //    }
                //    else
                //    {
                //        aResult.OverWork_normal = GetOverWork(attendanceToday);
                //    }
                //}


                var attendanceToday = analysis.GetAttendanceToday(attendanceForMonth, overWorkForMonth,
                                                                  businessTripsForMonth, reSignInForMonth, askLeaveForMonth, workDay.DateTime.Day);
                attendanceToday.Employee = employee;
                var aResult = new AttendanceResult();
                attendanceResults.Add(aResult);
                aResult.EmployeeName   = employee.EmployeeBaseInfo.EmployName;
                aResult.EmployeeNo     = employee.EmployeeNO;
                aResult.AttendanceDate = workDay.DateTime.ToString("d");

                var result = attendanceToday.AskleavesToDay.Count > 0 || attendanceToday.BusinessTripsToDay.Count > 0 || attendanceToday.OverWorksToday.Count > 0 || attendanceToday.AttendancesForDay.Count > 0;

                if (result)
                {
                    //处理出差、加班、请假,
                    processUnnormal(attendanceToday, aResult);

                    if (workDay.type == DateTimeExtendtype.Holiday)
                    {
                        aResult.OverWork_voc = GetOverWork(attendanceToday);
                    }
                    else if (workDay.type == DateTimeExtendtype.WeeKendDay)
                    {
                        aResult.OverWork_weekend = GetOverWork(attendanceToday);
                    }
                    else
                    {
                        aResult.OverWork_normal = GetOverWork(attendanceToday);
                    }


                    if (attendanceToday.AttendancesForDay.Count != 0)
                    {
                        var workListDate = new List <NearByDateTimeClass>();
                        attendanceToday = analysis.AnalysisForPresonByDay(attendanceToday, arrageworks);
                        var curArrageworks =
                            arrageworks.Where(a => a.ArrangeWorkNo == attendanceToday.ArrangeWorkNo).ToList();
                        if (curArrageworks.Count != 0)
                        {
                            aResult.BanCi = curArrageworks.First().WorkName;
                        }



                        workListDate = GetCorrectWorkList(attendanceToday.VirAttendanceDateTimes, curArrageworks);
                        var workList = workListDate.ConvertAll(w => !w.IsDispalyRecord() ? "" : w.Datetime.ToString("T"));
                        aResult.OnDutyMorning  = workList[0];
                        aResult.OffDutyMorning = workList[1];
                        aResult.OnDutyNoon     = workList[2];
                        aResult.OffDutyNoon    = workList[3];
                        aResult.OnDutyNight    = workList[4];
                        aResult.OffDutyNight   = workList[5];

                        Action <NearByDateTimeClass, int> setAResult = delegate(NearByDateTimeClass duty, int worktype)
                        {
                            var resultint = duty.IsValidRecord(worktype);
                            if (resultint == 1)
                            {
                                aResult.KuanGongTimes += duty.Span;
                            }
                            if (resultint == 2)
                            {
                                aResult.ChiDaoTimes.Add(duty.Span);
                            }
                            if (resultint == 2)
                            {
                                aResult.ZaoTuiTimes.Add(duty.Span);
                            }
                        };

                        Action <NearByDateTimeClass, NearByDateTimeClass, ArrangeWork> Action1 = delegate(NearByDateTimeClass w1, NearByDateTimeClass w2, ArrangeWork work)
                        {
                            DateTime realonduty;
                            DateTime realOffduty;
                            if (w1.IsDispalyRecord())
                            {
                                realonduty = w1.Datetime;
                                setAResult(w1, 1);
                            }
                            else
                            {
                                realonduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OnDutyTimeToDateTime.Hour, work.OnDutyTimeToDateTime.Minute, 0);
                            }
                            if (w2.IsDispalyRecord())
                            {
                                realOffduty = w2.Datetime;
                                setAResult(w2, 2);
                            }
                            else
                            {
                                realOffduty = new DateTime(workDay.DateTime.Year, workDay.DateTime.Month, workDay.DateTime.Day, work.OffDutyTimeToDateTime.Hour, work.OffDutyTimeToDateTime.Minute, 0);
                                if (work.IsPassDayWork)
                                {
                                    realonduty = realonduty.AddDays(1);
                                }
                            }
                            aResult.normalWorkTime += realOffduty.Subtract(realonduty).TotalMinutes;
                        };


                        foreach (var work in curArrageworks)
                        {
                            if (work.SpanType == ArrangeWorkTimeSpanType.Moning)
                            {
                                Action1(workListDate[0], workListDate[1], work);
                            }
                            else if (work.SpanType == ArrangeWorkTimeSpanType.Afternoon)
                            {
                                Action1(workListDate[2], workListDate[3], work);
                            }
                            else
                            {
                                Action1(workListDate[4], workListDate[5], work);
                                //添加夜班次数
                                aResult.IsNightDuty = true;
                            }
                        }

                        //   Console.WriteLine("levavDay " + i);
                        i++;
                    }
                }
            }
            return(attendanceResults);
        }
示例#15
0
        public List <WageDetail> getWages(DateTime nowDateTime)
        {
            List <WageDetail> wages = new List <WageDetail>();
            //   AttendanceResultControl arc = new AttendanceResultControl();
            var employees = HrManagerContext.GetInstance().Employees.ToList();

            foreach (var employee in employees)
            {
                //这些加班的参数在 attendanceresult 里面就有
                OverWorkList owl              = new OverWorkList();
                int          yebanjintienum   = 0;
                int          gongLingJiShu    = 0;
                double       tiaoxu_time      = 0;
                double       normal_work_time = 0;
                double       askLeave_nopay   = 0;
                double       absenteeismTime  = 0;
                //夫妻取值
                var couple = HrManagerContext.GetInstance().Couples.ToList().Where(a => a.EmployeeNan.Id == employee.EmployeeId || a.EmployeeNv.Id == employee.EmployeeId).ToList();
                List <AttendanceResult> tmp_nanResult = new List <AttendanceResult>();
                List <AttendanceResult> tmp_nvResult  = new List <AttendanceResult>();
                if (couple.Count != 0)
                {
                    var no1 = couple[0].EmployeeNan.EmployeeNO;
                    var no2 = couple[0].EmployeeNv.EmployeeNO;
                    tmp_nanResult = HrManagerContext.GetInstance().AttendanceResults.Where(a => a.EmployeeNo == no1).ToList().Where(a => DateTime.Parse(a.AttendanceDate).Month == nowDateTime.Month).ToList();
                    tmp_nvResult  = HrManagerContext.GetInstance().AttendanceResults.Where(a => a.EmployeeNo == no2).ToList().Where(a => DateTime.Parse(a.AttendanceDate).Month == nowDateTime.Month).ToList();
                }
                int    ccount           = 0;
                double couple_work_time = 0;

                var    results         = HrManagerContext.GetInstance().AttendanceResults.Where(a => a.EmployeeNo == employee.EmployeeNO).ToList().Where(a => DateTime.Parse(a.AttendanceDate).Month == nowDateTime.Month).ToList();
                var    salay           = HrManagerContext.GetInstance().Salarys.Single(s => s.EmployeeId == employee.EmployeeId);
                var    base_salay      = BaseSalary.GetInstance();
                int    ChiDaoKouXin    = 0;
                double ZaoTuiTimeTotal = 0;
                foreach (var result in results)
                {
                    // 夫妻津贴处理
                    if (tmp_nanResult.Count > 0 && tmp_nvResult.Count > 0)
                    {
                        if (tmp_nanResult[ccount].normalWorkTime - tmp_nvResult[ccount].normalWorkTime >= 0)
                        {
                            couple_work_time += tmp_nvResult[ccount].normalWorkTime;
                        }
                        else
                        {
                            couple_work_time += tmp_nvResult[ccount].normalWorkTime;
                        }
                    }

                    foreach (double zaoTui in result.ZaoTuiTimes)
                    {
                        ZaoTuiTimeTotal += zaoTui / 60;
                    }

                    if (result.IsNightDuty)
                    {
                        if (result.normalWorkTime >= 8)
                        {
                            // 若为夜班且考勤满8小时,则夜班津贴次数加1
                            yebanjintienum++;
                        }
                    }

                    // 迟到处理
                    int tmp_cnt = 0;
                    tmp_cnt += result.ChiDaoTimesCount;
                    foreach (double times in result.ChiDaoTimes)
                    {
                        if (tmp_cnt <= 3)
                        {
                            if (times <= 15)
                            {
                                ChiDaoKouXin += 5;
                            }
                            else if (times > 15 && times <= 30)
                            {
                                ChiDaoKouXin += 10;
                            }
                            else
                            {
                            }
                        }
                        else
                        {
                            if (times <= 15)
                            {
                                ChiDaoKouXin += 10;
                            }
                            else if (times > 15 && times <= 30)
                            {
                                ChiDaoKouXin += 20;
                            }
                            else
                            {
                            }
                        }
                    }

                    // 计算工龄是6的几倍
                    int years  = result.AttendanceDateToDatetime.Year - DateTime.Parse(employee.HireDate).Year;
                    int months = years * 12 + result.AttendanceDateToDatetime.Month - DateTime.Parse(employee.HireDate).Month;
                    if (months % 6 == 0)
                    {
                        gongLingJiShu = months / 6;
                    }

                    // 加班特殊处理
                    if (employee.EmployeeBaseInfo.EmployName == "屈志勇" ||
                        employee.EmployeeBaseInfo.EmployName == "万正新" ||
                        employee.EmployeeBaseInfo.EmployName == "万松鹤")
                    {
                        if (result.OverWork_normal >= 120)
                        {
                            result.OverWork_normal = 120;
                        }
                        if (result.OverWork_weekend >= 600)
                        {
                            result.OverWork_weekend = 600;
                        }
                    }
                    owl.overwork_normal_month  += result.OverWork_normal / 60;
                    owl.overwork_weekend_month += result.OverWork_weekend / 60;
                    owl.overwork_voc_month     += result.OverWork_voc / 60;

                    tiaoxu_time += Convert.ToDouble(result.TiaoXiu) * 8;

                    // 满8小时为一个工日
                    normal_work_time += result.normalWorkTime / 60;

                    if (result.AskLeaveTypeForAttendances.Count > 0)
                    {
                        foreach (var tmp_res in result.AskLeaveTypeForAttendances)
                        {
                            if (!tmp_res.AskLeaveType.IsWithPay)
                            {
                                askLeave_nopay += tmp_res.TimeCount / 60;
                            }
                            else
                            {
                                normal_work_time += tmp_res.TimeCount / 60;
                            }
                        }
                    }

                    // 产假特殊处理

                    absenteeismTime += result.KuanGongTimes / 60;
                }
                if (salay.HaveOverWorkLimitForMonth)
                {
                    if (owl.overwork_normal_month >= 42)
                    {
                        owl.overwork_normal_month = 42;
                    }
                    if (owl.overwork_weekend_month >= 40)
                    {
                        owl.overwork_weekend_month = 40;
                    }
                    if (owl.overwork_voc_month >= 40)
                    {
                        owl.overwork_voc_month = 40;
                    }
                }
                wages.Add(CalculateWageForPerson(employee, owl, salay, base_salay, tiaoxu_time, normal_work_time, askLeave_nopay, absenteeismTime, yebanjintienum, gongLingJiShu, ChiDaoKouXin, ZaoTuiTimeTotal, couple_work_time));
                ccount++;
            }
            return(wages);
        }