Exemplo n.º 1
0
    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));
    }
Exemplo n.º 2
0
    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());
    }
Exemplo n.º 3
0
    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());
    }
Exemplo n.º 4
0
    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));
    }
Exemplo n.º 5
0
 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());
    }
Exemplo n.º 7
0
    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();
    }