Esempio n. 1
0
        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));
            }
        }