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());
                }
            }
        }
Exemple #3
0
 /// <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());
 }