public override void Update([NotNull] params object[] input)
{
if (input == null)
{
throw new ArgumentNullException(nameof(input));
}
if (!ValidateUpdateInput(input))
{
ToolTip = this.disabledToolTip;
Enabled = false;
return;
}
Statement = (StatementModel) input[0];
this.bucketRepository = (IBudgetBucketRepository) input[1];
if (!this.bucketRepository.IsValidCode(BucketCode))
{
ToolTip = this.disabledToolTip;
Enabled = false;
return;
}
if (Statement == null)
{
ToolTip = this.disabledToolTip;
Enabled = false;
return;
}
Enabled = true;
var bucket = (FixedBudgetProjectBucket) this.bucketRepository.GetByCode(BucketCode);
var totalBudget = bucket.FixedBudgetAmount;
Maximum = Convert.ToDouble(totalBudget);
// Debit transactions are negative so normally the total spend will be a negative number.
var totalSpend =
Statement.AllTransactions.Where(t => t.BudgetBucket != null && t.BudgetBucket.Code == BucketCode)
.Sum(t => t.Amount);
var remainingBudget = totalBudget + totalSpend;
Value = Convert.ToDouble(remainingBudget);
ToolTip = string.Format(CultureInfo.CurrentCulture, this.remainingBudgetToolTip, bucket.Description,
remainingBudget, totalSpend);
DetailedText = string.Format(CultureInfo.CurrentCulture, "{0} Project", bucket.SubCode);
if (remainingBudget < 0.1M * totalBudget)
{
ColourStyleName = WidgetWarningStyle;
}
else
{
ColourStyleName = this.standardStyle;
}
}
}