public NextOccurance NextMonth(int day) { var nextMonth = new NextOccurance { StartDate = StartDate.AddMonths(1), EndDate = EndDate.AddMonths(1) }; nextMonth.Tally(day); return(nextMonth); }
public NextOccurance NextMonth(int day) { var nextMonth = new NextOccurance { StartDate = StartDate.AddMonths(1), EndDate = EndDate.AddMonths(1) }; nextMonth.Tally(day); return nextMonth; }
public override void Update(params object[] input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (!ValidateUpdateInput(input)) { Enabled = false; return; } this.bucketRepository = (IBudgetBucketRepository) input[0]; this.filter = (GlobalFilterCriteria) input[1]; if (this.filter == null || this.filter.Cleared || this.filter.BeginDate == null || this.filter.BeginDate == DateTime.MinValue || this.filter.EndDate == null || this.filter.EndDate.Value == DateTime.MinValue || this.bucketRepository == null) { Enabled = false; return; } if (!this.bucketRepository.IsValidCode(BucketCode)) { Enabled = false; LargeNumber = string.Empty; ToolTip = string.Empty; DetailedText = string.Empty; return; } this.diagLogger.LogInfo(l => l.Format("{0} Calculating Payment Plan for {1}. From {2} to {3}", WidgetType.Name, Id, this.filter.BeginDate, this.filter.EndDate)); var currentDate = CalculateStartDate(StartPaymentDate, this.filter.BeginDate.Value); var content = new StringBuilder(); // Ignore start date in filter and force it to be one month prior to end date in filter. var currentMonthTally = new NextOccurance { StartDate = this.filter.EndDate.Value.AddDays(1).AddMonths(-1), EndDate = this.filter.EndDate.Value }; var alert = false; NextOccurance firstOccurance = null; do { if (currentDate.Date <= currentMonthTally.EndDate) { currentMonthTally.Tally(currentDate.Date.Day); } else { this.diagLogger.LogInfo( l => l.Format(" {0} {1}", currentMonthTally.StartDate.ToString("MMMM"), currentMonthTally.ConcatDates())); if (AbnormalNumberOfPayments(currentMonthTally.Dates.Count)) { if (firstOccurance == null) { firstOccurance = currentMonthTally; } content.AppendFormat(CultureInfo.CurrentCulture, "{0}, ", currentMonthTally.StartDate.ToString("MMMM")); if (currentMonthTally.EndDate == this.filter.EndDate.Value || currentMonthTally.EndDate == this.filter.EndDate.Value.AddMonths(1)) { // Is current or next month, so signal alert status alert = true; this.diagLogger.LogInfo(l => l.Format(" ***** ALERT *****")); } } currentMonthTally = currentMonthTally.NextMonth(currentDate.Date.Day); } currentDate = CalculateNextPaymentDate(currentDate); } while (currentDate.Date <= this.filter.EndDate.Value.AddYears(1)); ColourStyleName = alert ? WidgetWarningStyle : WidgetStandardStyle; DetailedText = string.Format(CultureInfo.CurrentCulture, "Monitoring {0} {1} bucket. {2}", Frequency, BucketCode, content); if (firstOccurance == null) { LargeNumber = string.Empty; ToolTip = ToolTipPrefix; } else { LargeNumber = firstOccurance.StartDate.ToString("MMMM"); ToolTip = ToolTipPrefix + string.Format( CultureInfo.InvariantCulture, "{0} to the {1} has payments on {2}", firstOccurance.StartDate.ToString("d-MMM"), firstOccurance.EndDate.ToString("d-MMM"), firstOccurance.ConcatDates()); } }
public override void Update(params object[] input) { if (input == null) { throw new ArgumentNullException(nameof(input)); } if (!ValidateUpdateInput(input)) { Enabled = false; return; } this.bucketRepository = (IBudgetBucketRepository)input[0]; this.filter = (GlobalFilterCriteria)input[1]; if (this.filter == null || this.filter.Cleared || this.filter.BeginDate == null || this.filter.BeginDate == DateTime.MinValue || this.filter.EndDate == null || this.filter.EndDate.Value == DateTime.MinValue || this.bucketRepository == null) { Enabled = false; return; } if (!this.bucketRepository.IsValidCode(BucketCode)) { Enabled = false; LargeNumber = string.Empty; ToolTip = string.Empty; DetailedText = string.Empty; return; } this.diagLogger.LogInfo(l => l.Format("{0} Calculating Payment Plan for {1}. From {2} to {3}", WidgetType.Name, Id, this.filter.BeginDate, this.filter.EndDate)); var currentDate = CalculateStartDate(StartPaymentDate, this.filter.BeginDate.Value); var content = new StringBuilder(); // Ignore start date in filter and force it to be one month prior to end date in filter. var currentMonthTally = new NextOccurance { StartDate = this.filter.EndDate.Value.AddDays(1).AddMonths(-1), EndDate = this.filter.EndDate.Value }; var alert = false; NextOccurance firstOccurance = null; do { if (currentDate.Date <= currentMonthTally.EndDate) { currentMonthTally.Tally(currentDate.Date.Day); } else { this.diagLogger.LogInfo( l => l.Format(" {0} {1}", currentMonthTally.StartDate.ToString("MMMM"), currentMonthTally.ConcatDates())); if (AbnormalNumberOfPayments(currentMonthTally.Dates.Count)) { if (firstOccurance == null) { firstOccurance = currentMonthTally; } content.AppendFormat(CultureInfo.CurrentCulture, "{0}, ", currentMonthTally.StartDate.ToString("MMMM")); if (currentMonthTally.EndDate == this.filter.EndDate.Value || currentMonthTally.EndDate == this.filter.EndDate.Value.AddMonths(1)) { // Is current or next month, so signal alert status alert = true; this.diagLogger.LogInfo(l => l.Format(" ***** ALERT *****")); } } currentMonthTally = currentMonthTally.NextMonth(currentDate.Date.Day); } currentDate = CalculateNextPaymentDate(currentDate); } while (currentDate.Date <= this.filter.EndDate.Value.AddYears(1)); ColourStyleName = alert ? WidgetWarningStyle : WidgetStandardStyle; DetailedText = string.Format(CultureInfo.CurrentCulture, "Monitoring {0} {1} bucket. {2}", Frequency, BucketCode, content); if (firstOccurance == null) { LargeNumber = string.Empty; ToolTip = ToolTipPrefix; } else { LargeNumber = firstOccurance.StartDate.ToString("MMMM"); ToolTip = ToolTipPrefix + string.Format( CultureInfo.InvariantCulture, "{0} to the {1} has payments on {2}", firstOccurance.StartDate.ToString("d-MMM"), firstOccurance.EndDate.ToString("d-MMM"), firstOccurance.ConcatDates()); } }