public List<IDayViewModel> GetDays(DateTime month) { var startOfMonth = month.BeginOfMonth(); var endOfMonth = month.EndOfMonth(); var days = new List<IDayViewModel>(); int firstDayOfMonthIndex = (int)startOfMonth.DayOfWeek - 1; int currentMonthDay = 1; if (startOfMonth.DayOfWeek == DayOfWeek.Sunday) { currentMonthDay++; firstDayOfMonthIndex = 0; } else if (startOfMonth.DayOfWeek == DayOfWeek.Saturday) { currentMonthDay += 2; firstDayOfMonthIndex = 0; } for (int dayIndexInTable = 0; dayIndexInTable < TotalDaysInATable; dayIndexInTable++) { if (dayIndexInTable >= firstDayOfMonthIndex) { if (currentMonthDay > endOfMonth.Day) { days.Add(DayViewModel.DayFromOtherMonth(zohoClient)); } else { days.Add(DayViewModel.DayFromThisMonth(currentMonthDay, month, zohoClient)); if (IsWeekEnded(dayIndexInTable)) { currentMonthDay += 3; } else { currentMonthDay++; } } } else { days.Add(DayViewModel.DayFromOtherMonth(zohoClient)); } } return days; }
private async Task FillTimeLogs(List<IDayViewModel> days, DateTime month) { var timeLogs = await zohoClient.TimeTracker.TimeLog.GetAsync( auth.GetAuthenticationData().Id, month.BeginOfMonth(), month.EndOfMonth()); if (timeLogs == null || !timeLogs.Any()) { return; } var groupedByDate = timeLogs.GroupBy(x => x.WorkDate); foreach (var itemsInLog in groupedByDate) { var dayToFill = days.FirstOrDefault(x => x.Day == itemsInLog.Key.Day); if (dayToFill != null) { dayToFill.FillLogs(itemsInLog.ToList()); } } }
/// <summary> /// Get the first day of the month /// </summary> /// <param name="date">The date.</param> /// <returns></returns> public static DateTime?BeginOfMonth(this DateTime?date) { return(date?.BeginOfMonth()); }