private void OnSelectionChanged() { Money sumOfWhiteList = NonPrivatePockets .Where(pocket => pocket.Labels.All(pocketLabel => LabelsWhiteList.Any(labelViewModel => pocketLabel == labelViewModel.Value))) .Sum(x => x.Amount); if (sumOfWhiteList >= _targetAmount) { EnoughSelected = true; _includePrivatePocket = false; } else if (!LabelsBlackList.Any() && sumOfWhiteList + _privatePocket.Amount >= _targetAmount) { EnoughSelected = true; _includePrivatePocket = true; } else if (!LabelsWhiteList.Any() && _privatePocket.Amount >= _targetAmount) { EnoughSelected = true; _includePrivatePocket = true; } else { EnoughSelected = false; _includePrivatePocket = false; } this.RaisePropertyChanged(nameof(LabelsWhiteList)); this.RaisePropertyChanged(nameof(LabelsBlackList)); }
public Pocket[] AutoSelectPockets(SmartLabel recipient) { var knownPockets = NonPrivatePockets.Where(x => x.Labels != CoinPocketHelper.UnlabelledFundsText).ToArray(); var unknownPockets = NonPrivatePockets.Except(knownPockets).ToArray(); var privateAndUnknownPockets = _allPockets.Except(knownPockets).ToArray(); var privateAndKnownPockets = _allPockets.Except(unknownPockets).ToArray(); var knownByRecipientPockets = knownPockets.Where(pocket => pocket.Labels.Any(label => recipient.Contains(label, StringComparer.OrdinalIgnoreCase))).ToArray(); var onlyKnownByRecipientPockets = knownByRecipientPockets .Where(pocket => pocket.Labels.Count() == recipient.Count() && pocket.Labels.All(label => recipient.Contains(label, StringComparer.OrdinalIgnoreCase))) .ToArray(); if (onlyKnownByRecipientPockets.Sum(x => x.Amount) >= _targetAmount) { return(onlyKnownByRecipientPockets); } if (_privatePocket.Amount >= _targetAmount) { return(new[] { _privatePocket }); } if (TryGetBestKnownByRecipientPockets(knownByRecipientPockets, _targetAmount, recipient, out var pockets)) { return(pockets); } if (knownPockets.Sum(x => x.Amount) >= _targetAmount) { return(knownPockets); } if (unknownPockets.Sum(x => x.Amount) >= _targetAmount) { return(unknownPockets); } if (NonPrivatePockets.Sum(x => x.Amount) >= _targetAmount) { return(NonPrivatePockets); } if (privateAndKnownPockets.Sum(x => x.Amount) >= _targetAmount) { return(privateAndKnownPockets); } if (privateAndUnknownPockets.Sum(x => x.Amount) >= _targetAmount) { return(privateAndUnknownPockets); } return(_allPockets.ToArray()); }
public Pocket[] GetUsedPockets() { var pocketsToReturn = NonPrivatePockets.Where(x => x.Labels.All(label => LabelsWhiteList.Any(labelViewModel => labelViewModel.Value == label))).ToList(); if (_includePrivatePocket) { pocketsToReturn.Add(_privatePocket); } return(pocketsToReturn.ToArray()); }
private void OnSelectionChanged() { Money sumOfWhiteList = NonPrivatePockets .Where(pocket => pocket.Labels.All(pocketLabel => LabelsWhiteList.Any(labelViewModel => pocketLabel == labelViewModel.Value))) .Sum(x => x.Amount); _includePrivatePocket = NonPrivatePockets.Sum(x => x.Amount) < _targetAmount || (LabelsWhiteList.IsEmpty() && _privatePocket.Amount >= _targetAmount); var totalSelected = sumOfWhiteList + (_includePrivatePocket ? _privatePocket.Amount : Money.Zero); EnoughSelected = totalSelected >= _targetAmount; this.RaisePropertyChanged(nameof(LabelsWhiteList)); this.RaisePropertyChanged(nameof(LabelsBlackList)); }
public LabelViewModel[] GetAssociatedLabels(LabelViewModel labelViewModel) { if (labelViewModel.IsBlackListed) { var associatedPocketLabels = NonPrivatePockets.OrderBy(x => x.Labels.Count()).First(x => x.Labels.Contains(labelViewModel.Value)).Labels; return(LabelsBlackList.Where(x => associatedPocketLabels.Contains(x.Value)).ToArray()); } else { var associatedPockets = NonPrivatePockets.Where(x => x.Labels.Contains(labelViewModel.Value)); var notAssociatedPockets = NonPrivatePockets.Except(associatedPockets); var allNotAssociatedLabels = SmartLabel.Merge(notAssociatedPockets.Select(x => x.Labels)); return(LabelsWhiteList.Where(x => !allNotAssociatedLabels.Contains(x.Value)).ToArray()); } }
public Pocket[] AutoSelectPockets() { var knownPockets = NonPrivatePockets.Where(x => x.Labels != CoinPocketHelper.UnlabelledFundsText).ToArray(); var unknownPockets = NonPrivatePockets.Except(knownPockets).ToArray(); var privateAndUnknownPockets = _allPockets.Except(knownPockets).ToArray(); var privateAndKnownPockets = _allPockets.Except(unknownPockets).ToArray(); if (_privatePocket.Amount >= _targetAmount) { return(new[] { _privatePocket }); } if (knownPockets.Sum(x => x.Amount) >= _targetAmount) { return(knownPockets); } if (unknownPockets.Sum(x => x.Amount) >= _targetAmount) { return(unknownPockets); } if (NonPrivatePockets.Sum(x => x.Amount) >= _targetAmount) { return(NonPrivatePockets); } if (privateAndKnownPockets.Sum(x => x.Amount) >= _targetAmount) { return(privateAndKnownPockets); } if (privateAndUnknownPockets.Sum(x => x.Amount) >= _targetAmount) { return(privateAndUnknownPockets); } return(_allPockets.ToArray()); }
public void Reset(Pocket[] pockets) { _allPockets = pockets; if (pockets.FirstOrDefault(x => x.Labels == CoinPocketHelper.PrivateFundsText) is { } privatePocket) { _privatePocket = privatePocket; } NonPrivatePockets = pockets.Where(x => x != _privatePocket).ToArray(); var allLabels = SmartLabel.Merge(NonPrivatePockets.Select(x => x.Labels)); AllLabelsViewModel = allLabels.Select(x => new LabelViewModel(this, x)).ToArray(); if (AllLabelsViewModel.FirstOrDefault(x => x.Value == CoinPocketHelper.UnlabelledFundsText) is { } unlabelledViewModel) { unlabelledViewModel.IsDangerous = true; unlabelledViewModel.ToolTip = "There is no information about these people, only use it when necessary!"; } OnSelectionChanged(); }