private void ResetCategoriesLinkPercentages(Transaction entity) { double totalPercentage = entity.CategoryLinks.Sum(b => b.Percentage); if (totalPercentage < 100) { CategoryTransactionLink categoryTransactionLink = new CategoryTransactionLink(); categoryTransactionLink.Percentage = 100 - totalPercentage; categoryTransactionLink.Transaction = entity; categoryTransactionLink.TransactionID = entity.ID; categoryTransactionLink.UserId = ServiceResolver.GetService <IUserProvider>().GetUserId(); entity.CategoryLinks.Add(categoryTransactionLink); } else if (totalPercentage > 100) { double hasToBeLess = totalPercentage - 100; var link = entity.CategoryLinks.Last(); while (link != null && entity.CategoryLinks.Sum(b => b.Percentage) > 100) { if (hasToBeLess > link.Percentage) { hasToBeLess -= link.Percentage; link.Percentage = 0; } else { link.Percentage -= hasToBeLess; } link = entity.CategoryLinks.Skip(entity.CategoryLinks.IndexOf(link) - 1).FirstOrDefault(); } } }
public CategoryTransactionLinkWrapper(Transaction transaction, CategoryTransactionLink link, double percentage, double maxPercentage, ObservableCollection <CategoryTransactionLinkWrapper> wrappers, ObservableCollection <CategoryTransactionLink> links) { _percentage = percentage; Link = link; _transaction = transaction; _links = links; _wrappers = wrappers; _selectedCategory = link.Category; if (_selectedCategory == null) { CanBeDeleted = false; } else { CanBeDeleted = true; } DeleteCommand = new RelayCommand((obj) => { _links.Remove(link); wrappers.Remove(this); CalculateNewPercentages(true); CalculateCategories(true); }); }
public void InitializeLinkWrapperIfNonExists(ObservableCollection <CategoryTransactionLinkWrapper> linkWrappers) { if (linkWrappers.Count == 0) { Transaction transaction = EditingItem.Result; CategoryTransactionLink link = new CategoryTransactionLink(); link.Transaction = transaction; link.TransactionID = transaction.ID; link.Category = null; link.CategoryID = null; linkWrappers.Add(new CategoryTransactionLinkWrapper(transaction: transaction, link: link, percentage: 100, maxPercentage: 100, wrappers: linkWrappers, links: EditingItem.Result.CategoryLinks)); } }
private void AddCategoryToTransaction(object obj) { Transaction transaction = EditingItem.Result as Transaction; CategoryTransactionLink link = new CategoryTransactionLink(); link.TransactionID = transaction.ID; link.Transaction = transaction; link.CategoryID = SelectedCategory.ID; link.Category = SelectedCategory; link.UserId = ServiceResolver.GetService <IUserProvider>().GetUserId(); transaction.CategoryLinks.Add(link); LinkWrappers.Add(new CategoryTransactionLinkWrapper(transaction, link: link, percentage: 0, maxPercentage: 100 - EditingItem.Result.CategoryLinks.Where(c => c != link).Sum(c => c.Percentage), wrappers: LinkWrappers, links: transaction.CategoryLinks)); }
private void CalculateCategories(bool dontIgnoreSelf = false) { if (_wrappers.Where(b => b.SelectedCategory == null).Count() == 0) { Transaction transaction = _transaction; CategoryTransactionLink link = new CategoryTransactionLink(); link.TransactionID = transaction.ID; link.Transaction = transaction; link.UserId = ServiceResolver.GetService <IUserProvider>().GetUserId(); link.Category = null; link.CategoryID = null; _links.Add(link); _wrappers.Add(new CategoryTransactionLinkWrapper(_transaction, link: link, percentage: 0, maxPercentage: 100 - _links.Where(c => c != link || dontIgnoreSelf).Sum(c => c.Percentage), wrappers: _wrappers, links: _links)); } }