public override void Update([NotNull] params object[] input)
{
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
if (!ValidateUpdateInput(input))
{
Enabled = false;
return;
}
Budget = (IBudgetCurrencyContext) input[0];
Statement = (StatementModel) input[1];
Filter = (GlobalFilterCriteria) input[2];
this.bucketRepository = (IBudgetBucketRepository) input[3];
LedgerBook = (LedgerBook) input[4];
LedgerCalculation = (LedgerCalculation) input[5];
SetAdditionalDependencies(input);
if (Statement == null || Budget == null || Filter == null || Filter.Cleared || Filter.BeginDate == null ||
Filter.EndDate == null || LedgerCalculation == null || LedgerBook == null || this.bucketRepository == null)
{
Enabled = false;
return;
}
if (!this.bucketRepository.IsValidCode(BucketCode))
{
Enabled = false;
return;
}
if (Filter.BeginDate.Value.DurationInMonths(Filter.EndDate.Value) != 1)
{
Enabled = false;
ToolTip = DesignedForOneMonthOnly;
return;
}
Enabled = true;
var totalBudget = MonthlyBudgetAmount();
Maximum = Convert.ToDouble(totalBudget);
var totalSpend = LedgerCalculation.CalculateCurrentMonthBucketSpend(LedgerBook, Filter, Statement,
BucketCode);
var remainingBalance = totalBudget + totalSpend;
if (remainingBalance < 0)
{
remainingBalance = 0;
}
Value = Convert.ToDouble(remainingBalance);
ToolTip = string.Format(CultureInfo.CurrentCulture, RemainingBudgetToolTip, remainingBalance);
if (remainingBalance < 0.2M * totalBudget)
{
ColourStyleName = WidgetWarningStyle;
}
else
{
ColourStyleName = this.standardStyle;
}
}