mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-02 02:18:20 +00:00
Fixed a bug mentioned by @vissert and added some logging for @sandermulders
Signed-off-by: James Cole <thegrumpydictator@gmail.com>
This commit is contained in:
@@ -16,6 +16,7 @@ use FireflyIII\Models\RuleTrigger;
|
|||||||
use FireflyIII\Rules\Triggers\AbstractTrigger;
|
use FireflyIII\Rules\Triggers\AbstractTrigger;
|
||||||
use FireflyIII\Rules\Triggers\TriggerInterface;
|
use FireflyIII\Rules\Triggers\TriggerInterface;
|
||||||
use FireflyIII\Support\Domain;
|
use FireflyIII\Support\Domain;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface TriggerInterface
|
* Interface TriggerInterface
|
||||||
@@ -68,6 +69,7 @@ class TriggerFactory
|
|||||||
/** @var AbstractTrigger $class */
|
/** @var AbstractTrigger $class */
|
||||||
$class = self::getTriggerClass($triggerType);
|
$class = self::getTriggerClass($triggerType);
|
||||||
$obj = $class::makeFromStrings($triggerValue, $stopProcessing);
|
$obj = $class::makeFromStrings($triggerValue, $stopProcessing);
|
||||||
|
Log::debug('Created trigger from string', ['type' => $triggerType, 'value' => $triggerValue, 'stopProcessing' => $stopProcessing, 'class' => $class]);
|
||||||
|
|
||||||
return $obj;
|
return $obj;
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@ use FireflyIII\Rules\Factory\ActionFactory;
|
|||||||
use FireflyIII\Rules\Factory\TriggerFactory;
|
use FireflyIII\Rules\Factory\TriggerFactory;
|
||||||
use FireflyIII\Rules\Triggers\AbstractTrigger;
|
use FireflyIII\Rules\Triggers\AbstractTrigger;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Processor
|
* Class Processor
|
||||||
@@ -37,6 +38,8 @@ final class Processor
|
|||||||
/** @var Collection */
|
/** @var Collection */
|
||||||
public $triggers;
|
public $triggers;
|
||||||
|
|
||||||
|
protected $foundTriggers = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processor constructor.
|
* Processor constructor.
|
||||||
*
|
*
|
||||||
@@ -57,9 +60,17 @@ final class Processor
|
|||||||
*/
|
*/
|
||||||
public static function make(Rule $rule)
|
public static function make(Rule $rule)
|
||||||
{
|
{
|
||||||
|
Log::debug(sprintf('Making new rule from Rule %d', $rule->id));
|
||||||
$self = new self;
|
$self = new self;
|
||||||
$self->rule = $rule;
|
$self->rule = $rule;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The number of "found triggers" must start at -1, because the first
|
||||||
|
* trigger is "create-journal" or "update-journal" when this Processor
|
||||||
|
* is called from a Rule.
|
||||||
|
*/
|
||||||
|
$self->setFoundTriggers(-1);
|
||||||
|
|
||||||
$triggerSet = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
|
$triggerSet = $rule->ruleTriggers()->orderBy('order', 'ASC')->get();
|
||||||
/** @var RuleTrigger $trigger */
|
/** @var RuleTrigger $trigger */
|
||||||
foreach ($triggerSet as $trigger) {
|
foreach ($triggerSet as $trigger) {
|
||||||
@@ -113,6 +124,22 @@ final class Processor
|
|||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getFoundTriggers(): int
|
||||||
|
{
|
||||||
|
return $this->foundTriggers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $foundTriggers
|
||||||
|
*/
|
||||||
|
public function setFoundTriggers(int $foundTriggers)
|
||||||
|
{
|
||||||
|
$this->foundTriggers = $foundTriggers;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return \FireflyIII\Models\Rule
|
* @return \FireflyIII\Models\Rule
|
||||||
@@ -176,25 +203,30 @@ final class Processor
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function triggered()
|
private function triggered(): bool
|
||||||
{
|
{
|
||||||
$foundTriggers = 0;
|
Log::debug('start of Processor::triggered()');
|
||||||
|
$foundTriggers = $this->getFoundTriggers();
|
||||||
$hitTriggers = 0;
|
$hitTriggers = 0;
|
||||||
/** @var RuleTrigger $trigger */
|
/** @var AbstractTrigger $trigger */
|
||||||
foreach ($this->triggers as $trigger) {
|
foreach ($this->triggers as $trigger) {
|
||||||
$foundTriggers++;
|
$foundTriggers++;
|
||||||
|
Log::debug(sprintf('Now checking trigger %s with value %s', get_class($trigger), $trigger->getTriggerValue()));
|
||||||
/** @var AbstractTrigger $trigger */
|
/** @var AbstractTrigger $trigger */
|
||||||
if ($trigger->triggered($this->journal)) {
|
if ($trigger->triggered($this->journal)) {
|
||||||
|
Log::debug('Is a match!');
|
||||||
$hitTriggers++;
|
$hitTriggers++;
|
||||||
}
|
}
|
||||||
if ($trigger->stopProcessing) {
|
if ($trigger->stopProcessing) {
|
||||||
|
Log::debug('Stop processing this trigger and break.');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$result = ($hitTriggers == $foundTriggers && $foundTriggers > 0);
|
||||||
|
Log::debug('Result of triggered()', ['hitTriggers' => $hitTriggers, 'foundTriggers' => $foundTriggers, 'result' => $result]);
|
||||||
|
|
||||||
return ($hitTriggers == $foundTriggers && $foundTriggers > 0);
|
return $result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@ use FireflyIII\Models\TransactionJournal;
|
|||||||
use FireflyIII\Models\TransactionType;
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TransactionMatcher is used to find a list of
|
* Class TransactionMatcher is used to find a list of
|
||||||
@@ -80,6 +81,8 @@ class TransactionMatcher
|
|||||||
// Filter transactions that match the given triggers.
|
// Filter transactions that match the given triggers.
|
||||||
$filtered = $set->filter(
|
$filtered = $set->filter(
|
||||||
function (TransactionJournal $journal) use ($processor) {
|
function (TransactionJournal $journal) use ($processor) {
|
||||||
|
Log::debug(sprintf('Test these triggers on #%d', $journal->id));
|
||||||
|
|
||||||
return $processor->handleTransactionJournal($journal);
|
return $processor->handleTransactionJournal($journal);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -98,5 +98,23 @@ class AbstractTrigger
|
|||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return RuleTrigger
|
||||||
|
*/
|
||||||
|
public function getTrigger(): RuleTrigger
|
||||||
|
{
|
||||||
|
return $this->trigger;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTriggerValue(): string
|
||||||
|
{
|
||||||
|
return $this->triggerValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user