public List <AnnualModel> AnnualReport(int year) { if (year == 0) { year = Convert.ToInt32(ConfigurationManager.AppSettings["currentYear"]); } var query = TimeKeeperUnit.Projects.Get() .OrderBy(x => x.Name) .Select(x => new { project = x.Name, details = x.Details.Where(d => d.Day.Date.Year == year) .GroupBy(d => d.Day.Date.Month) .Select(w => new { month = w.Key, hours = w.Sum(d => d.Hours) }) .ToList() }).ToList(); List <AnnualModel> list = new List <AnnualModel>(); AnnualModel total = new AnnualModel { ProjectName = "T O T A L" }; foreach (var q in query) { AnnualModel item = new AnnualModel { ProjectName = q.project }; foreach (var w in q.details) { item.TotalHours += w.hours; total.TotalHours += w.hours; item.MonthlyHours[w.month - 1] = w.hours; total.MonthlyHours[w.month - 1] += w.hours; } if (item.TotalHours > 0) { list.Add(item); } } list.Add(total); return(list); }
/* * public List<MissingEntriesModel> GetMissingEntries(int year, int month) * { * List<MissingEntriesModel> missingEntriesList = new List<MissingEntriesModel>(); * var employees = TimeUnit.Days.GetList(x => x.Date.Month == month && x.Date.Year == year) * .Select(x => x.Employee).ToList(); * * foreach(var employee in employees) * { * List<int> workingDays = DateTimeHelper.ListOfWorkingDays(year, month, employee.BeginDate.Day).ToList(); * var employeeDays = employee.Days.Where(y => y.Date.Month == month && y.Date.Year == year && y.Type == DAL.Entities.DayType.WorkingDay) * .Select(x => x.Date.Day).ToList(); * * var missing = workingDays.Except(employeeDays).ToList(); * * * MissingEntriesModel emp = new MissingEntriesModel() * { * Employee = employee.FirstName + " " + employee.LastName, * MissingDayCount = Math.Abs(TimeUnit.Days.Get().Where(x => x.Employee.Id == employee.Id && x.Date.Year == year && x.Date.Month == month).Count() - workingDays.Count()), * MissingDays = missing * }; * * missingEntriesList.Add(emp); * } * * return missingEntriesList; * } */ public List <AnnualModel> AnnualReport(int year) { var query = TimeUnit.Projects.Get() .OrderBy(x => x.Name) .Select(x => new { project = x.Name, description = x.Description, count = x.Tasks.Count(t => t.Project.Name == x.Name), details = x.Tasks.Where(d => d.Day.Date.Year == year) .GroupBy(d => d.Day.Date.Month) .Select(w => new { month = w.Key, hours = w.Sum(d => d.Hours) }).ToList(), }).ToList(); List <AnnualModel> list = new List <AnnualModel>(); AnnualModel total = new AnnualModel() { ProjectName = "TOTAL" }; foreach (var q in query) { AnnualModel item = new AnnualModel() { ProjectName = q.project, ProjectDescription = q.description, TasksCount = q.count }; foreach (var w in q.details) { item.TotalHours += w.hours; total.TotalHours += w.hours; item.MonthlyHours[w.month - 1] = w.hours; total.MonthlyHours[w.month - 1] += w.hours; } if (item.TotalHours > 0) { list.Add(item); } } list.Add(total); return(list); }