private void ValidateRecurrenceDay(RecurringTransfer recurringTransfer) { //TODO: (3/1) Inform user how recurrence day works. if (recurringTransfer.RecurrenceType == RecurrenceType.Daily) { if (recurringTransfer.RecurrenceDay != 1) { ModelState.AddModelError("", "Day for daily recurrence must be 1."); } } else if (recurringTransfer.RecurrenceType == RecurrenceType.Weekly) { if (!Enumerable.Range(1, 7).Contains(recurringTransfer.RecurrenceDay)) { ModelState.AddModelError("", "Day for weekly recurrence must be between 1 and 7."); } } else if (recurringTransfer.RecurrenceType == RecurrenceType.Monthly) { if (!Enumerable.Range(1, 31).Contains(recurringTransfer.RecurrenceDay)) { ModelState.AddModelError("", "Day for monthly recurrence must be between 1 and 31 and can't be 0."); } } }
private void ValidateStartDate(RecurringTransfer recurringTransfer) { if (recurringTransfer.StartDate < DateTime.Today) { ModelState.AddModelError("StartDate", "StartDate can't be in the past."); } }
public IActionResult DeleteRecurringTransfer(int key) { RecurringTransfer recurringTransfer = GetRecurringTransfers().FirstOrDefault(x => x.RecurringTransferId == key); ApplicationDb.RecurringTransfers.Remove(recurringTransfer); ApplicationDb.SaveChanges(); return(Ok()); }
public IActionResult CreateRecurringTransfer(string values) { RecurringTransfer recurringTransfer = new RecurringTransfer(); JsonConvert.PopulateObject(values, recurringTransfer); ValidateStartDate(recurringTransfer); ValidateRecurrenceDay(recurringTransfer); if (TryValidateModel(recurringTransfer)) { recurringTransfer.UserId = UserId; ApplicationDb.RecurringTransfers.Add(recurringTransfer); ApplicationDb.SaveChanges(); return(Ok()); } else { return(BadRequest(ModelState)); } }
public IActionResult UpdateRecurringTransfer(int key, string values) { RecurringTransfer recurringTransfer = GetRecurringTransfers().FirstOrDefault(x => x.RecurringTransferId == key); int id = recurringTransfer.RecurringTransferId; string userId = recurringTransfer.UserId; JsonConvert.PopulateObject(values, recurringTransfer); ValidateStartDate(recurringTransfer); ValidateRecurrenceDay(recurringTransfer); if (TryValidateModel(recurringTransfer)) { recurringTransfer.CategoryId = id; recurringTransfer.UserId = userId; ApplicationDb.RecurringTransfers.Update(recurringTransfer); ApplicationDb.SaveChanges(); return(Ok()); } else { return(BadRequest(ModelState)); } }
/// <summary> /// Gets dates between a given range filtered by the conditions in recurringTransfer. /// </summary> private static List <DateTime> GetRecurringDates(DateTime startDate, DateTime endDate, RecurringTransfer recurringTransfer) { List <DateTime> dates = new List <DateTime>(); if (recurringTransfer.RecurrenceType == RecurrenceType.Daily) { for (DateTime date = startDate; date.Date <= endDate; date = date.AddDays(recurringTransfer.SkippedDays + 1)) { dates.Add(date); } } else if (recurringTransfer.RecurrenceType == RecurrenceType.Weekly) { int daysUntilMonday = ((int)DayOfWeek.Monday - (int)startDate.DayOfWeek + 7) % 7; DateTime firstRecurrence = startDate.AddDays(daysUntilMonday); for (DateTime date = firstRecurrence; date.Date <= endDate; date = date.AddDays(7 * (recurringTransfer.SkippedDays + 1))) { dates.Add(date); } } else if (recurringTransfer.RecurrenceType == RecurrenceType.Monthly) { int recurrenceDay = recurringTransfer.RecurrenceDay; DateTime temp = recurrenceDay > startDate.Day ? startDate : startDate.AddMonths(1); DateTime firstRecurrence = GetNextDate(temp, recurrenceDay); for (DateTime date = firstRecurrence; date.Date <= endDate; date = GetNextDate(date.AddMonths(recurringTransfer.SkippedDays + 1), recurrenceDay)) { dates.Add(date); } } return(dates); }