List IEnumerable

    //按部门汇总
    IEnumerable<WeekReportWithDepartmentInfo> report = summary
    .GroupBy(x => new
    {
        x.DeptID,
        x.DeptName
    }).Select(g => new WeekReportWithDepartmentInfo
    {
        DeptID = g.Key.DeptID,
        DeptName = g.Key.DeptName,
        TotalNumber = g.Count(),
        WorkOvertime = g.Sum(a => a.WorkOverHours),
        WorkLeave = g.Where(a => a.IsNeedAttendance == true).Sum(a => a.WorkHours),
        PersonalLeave = g.Where(a => a.IsNeedAttendance == true).Sum(a => a.PersonalLeave),
        PaidLeave = g.Where(a => a.IsNeedAttendance == true).Sum(a => a.PaidLeave),
        LateAndLeavingEarly = g.Where(a => a.IsNeedAttendance == true).Sum(a => a.LateAndLeavingEarly)
    }).Skip(PageSize * (CurrentPage - 1)).Take(PageSize);

    //总行数
    int rows = summary
    .GroupBy(x => new
    {
        x.DeptID,
        x.DeptName
    }).Count();

    List<WeekReportWithDepartmentInfo> reportlist = new List<WeekReportWithDepartmentInfo>();
    IEnumerable<string> tempEmail;
    foreach (WeekReportWithDepartmentInfo item in report)
    {
        //找到当前部门的所有人
        tempEmail = employees.Where(e => e.DeptID == item.DeptID).Select(s => s.Email);
        item.TotalNumber = summary.Where(e => e.DeptID == item.DeptID).GroupBy(x => new {x.EmpID}).Count();
        ////汇总所有人的事假
        //item.PersonalLeave = personalLeave.Where(p => tempEmail.Contains(p.Key)).Sum(s => s.Value);

        ////汇总所有人的带薪假总工时
        //item.PaidLeave = paidLeave.Where(p => tempEmail.Contains(p.Key)).Sum(s => s.Value);

        //double jialeave=JiaLeave.Where(p => tempEmail.Contains(p.Key)).Sum(s => s.Value);
        ////迟到早退工时
        //item.LateAndLeavingEarly = item.LateAndLeavingEarly - jialeave;
        //item.LateAndLeavingEarly = item.LateAndLeavingEarly < 0 ? 0 : item.LateAndLeavingEarly;

        //汇总所有人的加班总工时
        //item.WorkOvertime = workOvertime.Where(p => tempEmail.Contains(p.Key)).Sum(s => s.Value);

        //全勤人数
        item.QqingNumber = item.TotalNumber - summary.Where(s => s.IsNeedAttendance && s.DeptID == item.DeptID && s.AttendanceState != 9).Select(s => s.EmpID).Distinct().Count();//去重复
        //正常考勤时 item.WorkLeave

        //缺勤率
        item.BsenteeismRatio = (item.LateAndLeavingEarly + item.PersonalLeave + item.PaidLeave) / item.WorkLeave * 100;
        //加班率
        item.OvertimeRatio = item.WorkOvertime / item.WorkLeave * 100;

        reportlist.Add(item);
    }



    //IEnumerable<KeyValue<string, double>> JiaLeave = leaveWithWeek.Where(l => l.TypeName != LeaveType.加班
    //                                                               && l.TypeName != LeaveType.补打卡)
    //                                                    .GroupBy(x => new { x.Email })
    //                                                    .Select(g => new KeyValue<string, double>
    //                                                    {
    //                                                        Key = g.Key.Email,
    //                                                        Value = g.Sum(a => (a.AskLeaveHour))
    //                                                    });


    //签到(9:00-12:00)
    tempAtdRec = attendances.Where(a => a.EmpID == emp.EmpID && a.RecDateTime > workDay.GetInTime().AddHours(-4) && a.RecDateTime < workDay.GetOutTime()).OrderBy(a => a.RecDateTime);
    if (tempAtdRec.Count() > 0)
    {
        info.SigninTime = tempAtdRec.First().RecTime;
        info.SigninDateTime = tempAtdRec.First().RecDateTime;
    }
    //签退(13:30-18:00)
    tempAtdRec = attendances.Where(a => a.EmpID == emp.EmpID && a.RecDateTime > workDay.GetInTime() && a.RecDateTime < workDay.GetInTime().AddDays(1).AddHours(-4)).OrderByDescending(a => a.RecDateTime);
    if (tempAtdRec.Count() > 0)
    {
        info.SignoutTime = tempAtdRec.First().RecTime;
        info.SignoutDateTime = tempAtdRec.First().RecDateTime;
    }

                         

 

posted @ 2016-07-22 12:45  cclon  阅读(405)  评论(0编辑  收藏  举报