예제 #1
0
 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.");
         }
     }
 }
예제 #2
0
 private void ValidateStartDate(RecurringTransfer recurringTransfer)
 {
     if (recurringTransfer.StartDate < DateTime.Today)
     {
         ModelState.AddModelError("StartDate", "StartDate can't be in the past.");
     }
 }
예제 #3
0
        public IActionResult DeleteRecurringTransfer(int key)
        {
            RecurringTransfer recurringTransfer = GetRecurringTransfers().FirstOrDefault(x => x.RecurringTransferId == key);

            ApplicationDb.RecurringTransfers.Remove(recurringTransfer);
            ApplicationDb.SaveChanges();
            return(Ok());
        }
예제 #4
0
        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));
            }
        }
예제 #5
0
        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));
            }
        }
예제 #6
0
        /// <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);
        }