mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-11-17 07:08:19 +00:00
Migrated all code to group collector.
This commit is contained in:
@@ -23,12 +23,11 @@ declare(strict_types=1);
|
||||
namespace FireflyIII\TransactionRules;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use FireflyIII\Helpers\Collector\TransactionCollectorInterface;
|
||||
use FireflyIII\Helpers\Filter\InternalTransferFilter;
|
||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||
use FireflyIII\Models\Rule;
|
||||
use FireflyIII\Models\RuleTrigger;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionType;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Support\Collection;
|
||||
use Log;
|
||||
|
||||
@@ -78,16 +77,16 @@ class TransactionMatcher
|
||||
* transaction journals matching the given rule. This is accomplished by trying to fire these
|
||||
* triggers onto each transaction journal until enough matches are found ($limit).
|
||||
*
|
||||
* @return Collection
|
||||
* @return array
|
||||
* @throws \FireflyIII\Exceptions\FireflyException
|
||||
*/
|
||||
public function findTransactionsByRule(): Collection
|
||||
public function findTransactionsByRule(): array
|
||||
{
|
||||
Log::debug('Now in findTransactionsByRule()');
|
||||
if (0 === count($this->rule->ruleTriggers)) {
|
||||
Log::error('Rule has no triggers!');
|
||||
|
||||
return new Collection;
|
||||
return [];
|
||||
}
|
||||
|
||||
// Variables used within the loop.
|
||||
@@ -98,7 +97,7 @@ class TransactionMatcher
|
||||
|
||||
// If the list of matchingTransactions is larger than the maximum number of results
|
||||
// (e.g. if a large percentage of the transactions match), truncate the list
|
||||
$result = $result->slice(0, $this->searchLimit);
|
||||
$result = array_slice($result, 0, $this->searchLimit);
|
||||
|
||||
return $result;
|
||||
}
|
||||
@@ -254,7 +253,7 @@ class TransactionMatcher
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
private function runProcessor(Processor $processor): Collection
|
||||
private function runProcessor(Processor $processor): array
|
||||
{
|
||||
Log::debug('Now in runprocessor()');
|
||||
// since we have a rule in $this->rule, we can add some of the triggers
|
||||
@@ -269,22 +268,23 @@ class TransactionMatcher
|
||||
$pageSize = min($this->searchLimit, min($this->triggeredLimit, 50));
|
||||
$processed = 0;
|
||||
$page = 1;
|
||||
$result = new Collection;
|
||||
$result = [];
|
||||
|
||||
Log::debug(sprintf('Search limit is %d, triggered limit is %d, so page size is %d', $this->searchLimit, $this->triggeredLimit, $pageSize));
|
||||
|
||||
do {
|
||||
Log::debug('Start of do-loop');
|
||||
// Fetch a batch of transactions from the database
|
||||
/** @var TransactionCollectorInterface $collector */
|
||||
$collector = app(TransactionCollectorInterface::class);
|
||||
$collector->setUser(auth()->user());
|
||||
$collector->withOpposingAccount();
|
||||
|
||||
/** @var GroupCollectorInterface $collector */
|
||||
$collector = app(GroupCollectorInterface::class);
|
||||
|
||||
/** @var User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
$collector->setUser($user);
|
||||
|
||||
// limit asset accounts:
|
||||
if (0 === $this->accounts->count()) {
|
||||
$collector->setAllAssetAccounts();
|
||||
}
|
||||
if ($this->accounts->count() > 0) {
|
||||
$collector->setAccounts($this->accounts);
|
||||
}
|
||||
@@ -305,36 +305,35 @@ class TransactionMatcher
|
||||
Log::debug(sprintf('Amount must be exactly %s', $this->exactAmount));
|
||||
$collector->amountIs($this->exactAmount);
|
||||
}
|
||||
$collector->removeFilter(InternalTransferFilter::class);
|
||||
|
||||
$set = $collector->getPaginatedTransactions();
|
||||
Log::debug(sprintf('Found %d journals to check. ', $set->count()));
|
||||
$journals = $collector->getExtractedJournals();
|
||||
Log::debug(sprintf('Found %d transaction journals to check. ', count($journals)));
|
||||
|
||||
// Filter transactions that match the given triggers.
|
||||
$filtered = $set->filter(
|
||||
function (Transaction $transaction) use ($processor) {
|
||||
Log::debug(sprintf('Test the triggers on journal #%d (transaction #%d)', $transaction->transaction_journal_id, $transaction->id));
|
||||
|
||||
return $processor->handleTransaction($transaction);
|
||||
$filtered = [];
|
||||
/** @var array $journal */
|
||||
foreach ($journals as $journal) {
|
||||
$result = $processor->handleJournalArray($journal);
|
||||
if ($result) {
|
||||
$filtered[] = $journal;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Log::debug(sprintf('Found %d journals that match.', $filtered->count()));
|
||||
Log::debug(sprintf('Found %d journals that match.', count($filtered)));
|
||||
|
||||
// merge:
|
||||
/** @var Collection $result */
|
||||
$result = $result->merge($filtered);
|
||||
Log::debug(sprintf('Total count is now %d', $result->count()));
|
||||
$result = $result + $filtered;
|
||||
Log::debug(sprintf('Total count is now %d', count($result)));
|
||||
|
||||
// Update counters
|
||||
++$page;
|
||||
$processed += count($set);
|
||||
$processed += count($journals);
|
||||
|
||||
Log::debug(sprintf('Page is now %d, processed is %d', $page, $processed));
|
||||
|
||||
// Check for conditions to finish the loop
|
||||
$reachedEndOfList = $set->count() < 1;
|
||||
$foundEnough = $result->count() >= $this->triggeredLimit;
|
||||
$reachedEndOfList = count($journals) < 1;
|
||||
$foundEnough = count($result) >= $this->triggeredLimit;
|
||||
$searchedEnough = ($processed >= $this->searchLimit);
|
||||
|
||||
Log::debug(sprintf('reachedEndOfList: %s', var_export($reachedEndOfList, true)));
|
||||
|
||||
Reference in New Issue
Block a user