public static void GenerateDataIfRequired()
        {
            var weekOfYear = new WeekOfYear()
            {
                Week = TimeEntry.GetIso8601WeekOfYear(DateTime.Now),
                Year = DateTime.Now.Year
            };

            var firstDayOfCurrentWeek = TimeEntry.GetIso8601FirstDateOfWeek(weekOfYear.Year, weekOfYear.Week);
            var previousWeekStart     = firstDayOfCurrentWeek - TimeSpan.FromDays(7);

            weekOfYear = new WeekOfYear()
            {
                Week = TimeEntry.GetIso8601WeekOfYear(previousWeekStart),
                Year = previousWeekStart.Year
            };

            using (var instance = new GenerateTimeEntryData())
            {
                if (instance.IsThereDataForWeek(weekOfYear))
                {
                    return;
                }

                instance.GenerateData(weekOfYear);
            }
        }
예제 #2
0
 public override string GetCacheKey()
 {
     return(string.Format("TrainingDayCriteria_{0}_{1}_{2}_{3}_{4}",
                          UserId == null ? "null" : UserId.GetCacheKey(),
                          Year == null ? "null" : Year.GetCacheKey(),
                          WeekOfYear == null ? "null" : WeekOfYear.GetCacheKey(),
                          DayOfWeek == null ? "null" : DayOfWeek.GetCacheKey(),
                          TrainingDayId == null ? "null" : TrainingDayId.GetCacheKey()));
 }
        private void GenerateData(WeekOfYear weekOfYear)
        {
            var projects = _context.Projects.ToList();
            var users    = _context.TimeEntryUsers.ToList();
            var weekDate = TimeEntry.GetIso8601FirstDateOfWeek(weekOfYear.Year, weekOfYear.Week);

            for (int week = 0; week < 104; week++)
            {
                if (weekDate >= DateTime.Now)
                {
                    weekDate -= TimeSpan.FromDays(7);
                    // don't enter future data
                    continue;
                }

                foreach (var user in users)
                {
                    var userProjects = new List <Project>();
                    for (int i = 0; i < _random.Next(3) + 1; i++)
                    {
                        userProjects.Add(projects[_random.Next(projects.Count)]);
                    }

                    for (int day = 0; day < 5; day++)
                    {
                        var currentDate = weekDate + TimeSpan.FromDays(day);

                        var totalTime = 0.0;

                        while (totalTime < 8.0)
                        {
                            var time = Math.Round(_random.NextDouble() * 4.0, 1);
                            if (totalTime + time > 8.0)
                            {
                                time = 8.0 - totalTime;
                            }

                            totalTime += time;

                            var project   = userProjects[_random.Next(userProjects.Count)];
                            var timeEntry = new TimeEntry()
                            {
                                Date    = currentDate,
                                Hours   = time,
                                Project = project,
                                UserId  = user.Id
                            };
                            _context.TimeEntries.AddObject(timeEntry);
                        }
                    }

                    _context.SaveChanges();
                }

                weekDate -= TimeSpan.FromDays(7);
            }
        }
        private bool IsThereDataForWeek(WeekOfYear weekOfYear)
        {
            var mondayDate = TimeEntry.GetIso8601FirstDateOfWeek(weekOfYear.Year, weekOfYear.Week);

            // comparing day, month and year instead of .Date as mondayDate.Date is not supported
            if (_context.TimeEntries.Any(te => te.Date.Day == mondayDate.Day &&
                                         te.Date.Month == mondayDate.Month &&
                                         te.Date.Year == mondayDate.Year))
            {
                return(true);
            }

            return(false);
        }
예제 #5
0
        public Table Get(DateTime date)
        {
            var week = new WeekOfYear();

            var diff = week.GetNumber(date) - week.GetNumber(_startDate);

            if (IsOdd(diff))
            {
                return(_alternateTable);
            }
            else
            {
                return(_startTable);
            }
        }
예제 #6
0
        /// <summary>
        /// Returns true if OutputDateInfo instances are equal
        /// </summary>
        /// <param name="other">Instance of OutputDateInfo to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(OutputDateInfo other)
        {
            if (other is null)
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return
                ((
                     DayOfYear == other.DayOfYear ||

                     DayOfYear.Equals(other.DayOfYear)
                     ) &&
                 (
                     DayOfWeek == other.DayOfWeek ||

                     DayOfWeek.Equals(other.DayOfWeek)
                 ) &&
                 (
                     WeekOfYear == other.WeekOfYear ||

                     WeekOfYear.Equals(other.WeekOfYear)
                 ) &&
                 (
                     SecondsInDay == other.SecondsInDay ||

                     SecondsInDay.Equals(other.SecondsInDay)
                 ) &&
                 (
                     MinutesInDay == other.MinutesInDay ||

                     MinutesInDay.Equals(other.MinutesInDay)
                 ) &&
                 (
                     Ticks == other.Ticks ||

                     Ticks.Equals(other.Ticks)
                 ));
        }
예제 #7
0
        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                var hashCode = 41;
                // Suitable nullity checks etc, of course :)

                hashCode = hashCode * 59 + DayOfYear.GetHashCode();

                hashCode = hashCode * 59 + DayOfWeek.GetHashCode();

                hashCode = hashCode * 59 + WeekOfYear.GetHashCode();

                hashCode = hashCode * 59 + SecondsInDay.GetHashCode();

                hashCode = hashCode * 59 + MinutesInDay.GetHashCode();

                hashCode = hashCode * 59 + Ticks.GetHashCode();
                return(hashCode);
            }
        }
예제 #8
0
 public override string GetCacheKey()
 {
     return(string.Format("TrainingDayKey_{0}_{1}_{2}_{3}_{4}",
                          UserId, Year.ToString(), WeekOfYear.ToString(), DayOfWeek.ToString(), TrainingDayId.ToString()));
 }
예제 #9
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                 JsonSerializer serializer)
 {
     return(WeekOfYear.TryConvert(reader.Value));
 }