private void UpdatePayment(PaymentModel pm) { // payment date can't be edited, thus it is safe to delegate only to matching month; var key = PaymentTransformers.GetKey(pm); var matchingMonth = _collection.First(v => v.Key == key); SendMonthUpdate(matchingMonth); }
private void RemovePayment(PaymentModel paymentModel) { var key = PaymentTransformers.GetKey(paymentModel); var matchingMonth = _collection.First(v => v.Key == key); matchingMonth.RemovePayment(paymentModel); if (matchingMonth.Count > 0) { SendMonthUpdate(matchingMonth); } else { _collection.Remove(matchingMonth); } }
public MonthSummary ToMonthSummary() { var monthSummary = new MonthSummary { Id = Id.ToUUID(), When = When.ToTimestamp(), IsExpanded = IsExpanded, UncategorizedCount = _payments.Values.SelectMany(v => v.Payments).Count(v => v.CategoryId == null && v.DebtId == null), Summary = { _payments.Values.SelectMany(v => v.Payments).GroupBy(v => v.Ccy).Select(v => new CurrencySummary { Amount = v.Sum(t => t.Amount), Currency = v.Key }) } }; var visiblePayments = _payments.Values .OrderByDescending(v => v.GetVisiblePayments(ShowCategorized).Select(t => t.When).Concat(new[] { DateTime.MinValue }).Max()) .ToList(); if (IsExpanded) { foreach (var group in visiblePayments) { var matchingPayments = group.GetVisiblePayments(ShowCategorized); if (matchingPayments.Count == 0) { continue; } monthSummary.Payments.Add(matchingPayments.Count == 1 ? new PaymentView { Payment = PaymentTransformers.ToPaymentView(matchingPayments[0]) } : new PaymentView { Group = PaymentTransformers.ToPaymentGroup(group, ShowCategorized) }); } } return(monthSummary); }
private void AddPayment(PaymentModel paymentModel) { var key = PaymentTransformers.GetKey(paymentModel); var existing = _collection.FirstOrDefault(v => v.Key == key); if (existing == null) { existing = new PaymentsMonthViewModel(paymentModel.When.Date, key); int i; for (i = 0; i < _collection.Count; i++) { if (String.Compare(_collection[i].Key, key, StringComparison.Ordinal) < 0) { break; } } _collection.Insert(i, existing); } existing.AddPayment(paymentModel); SendMonthUpdate(existing); }