public async Task <IActionResult> Post([FromBody] TodaysHabits todaysHabits) { var complete = todaysHabits.IsComplete; if (todaysHabits.IsComplete == false && todaysHabits.IsMeasurable) { if (todaysHabits.NumberOfBlocksCompleted == todaysHabits.NumberOfBlocks) { complete = true; } } HabitComplete completeHabit = new HabitComplete { Id = 0, HabitId = todaysHabits.Id, Date = dateTimeService.GetCurrentDateTime(), IsComplete = complete, CompleteBlocks = todaysHabits.NumberOfBlocksCompleted }; return(CreatedAtAction("Get", new { id = completeHabit.Id }, habitService.UpdateHabitComplete(completeHabit))); }
public IEnumerable <TodaysHabits> GetTodaysHabits(DateTime current) { var todaysHabits = new List <TodaysHabits>(); var habits = _context.Habits.ToList(); foreach (Habit habit in habits) { var completed = _context.HabitCompletes.ToList(); var isComplete = completed .Where(x => x.HabitId == habit.Id) .Where(x => x.Date.Year == current.Year && x.Date.Month == current.Month && x.Date.Day == current.Day)? .LastOrDefault()?.IsComplete; var completedBlocks = completed .Where(x => x.HabitId == habit.Id) .Where(x => x.Date.Year == current.Year && x.Date.Month == current.Month && x.Date.Day == current.Day)? .LastOrDefault()?.CompleteBlocks; if (habit.NumberOfBlocks < completedBlocks) { completedBlocks = habit.NumberOfBlocks; } if (isComplete != null) { if (habit.NumberOfBlocks == completedBlocks) { isComplete = true; } else if (habit.Mesurable) { isComplete = false; } } else { isComplete = false; } var todayHabit = new TodaysHabits { Id = habit.Id, Name = habit.Name, Colour = habit.Colour, IsComplete = (bool)isComplete, IsMeasurable = habit.Mesurable, NumberOfBlocks = habit.NumberOfBlocks, NumberOfBlocksCompleted = completedBlocks }; if (CompareDateLessThanOrEqual(habit.StartDate, current)) { //if the habit is weekly and todays DAY is the same as one of the days of the habit //if habit is yearly and the day and montha re the same then we good // if (habit.EndDate == null || CompareDateGreaterThanOrEqual(habit.EndDate, current)) { if (habit.Repeat == Repeat.NoRepeat) { if (CompareDateEquals(habit.StartDate, current)) { todaysHabits.Add(todayHabit); } } else if (habit.Repeat == Repeat.Weekly) { var todaysDay = current.DayOfWeek.ToString(); if (habit.RepeatDays != null) { foreach (var repeatDay in GetFlags(habit.RepeatDays)) { if (repeatDay.ToString().Equals(todaysDay)) { todaysHabits.Add(todayHabit); } } } } else if (habit.Repeat == Repeat.Yearly) { if (CompareDateYearly(habit.StartDate, current)) { todaysHabits.Add(todayHabit); } } else if (habit.Repeat == Repeat.Everyday) { todaysHabits.Add(todayHabit); } } } } return(todaysHabits); }