diff --git a/app/Rules/Factory/TriggerFactory.php b/app/Rules/Factory/TriggerFactory.php index 6ada8ca347..65cbf1bcde 100644 --- a/app/Rules/Factory/TriggerFactory.php +++ b/app/Rules/Factory/TriggerFactory.php @@ -16,6 +16,7 @@ use FireflyIII\Models\RuleTrigger; use FireflyIII\Rules\Triggers\AbstractTrigger; use FireflyIII\Rules\Triggers\TriggerInterface; use FireflyIII\Support\Domain; +use Log; /** * Interface TriggerInterface @@ -68,6 +69,7 @@ class TriggerFactory /** @var AbstractTrigger $class */ $class = self::getTriggerClass($triggerType); $obj = $class::makeFromStrings($triggerValue, $stopProcessing); + Log::debug('Created trigger from string', ['type' => $triggerType, 'value' => $triggerValue, 'stopProcessing' => $stopProcessing, 'class' => $class]); return $obj; } diff --git a/app/Rules/Processor.php b/app/Rules/Processor.php index 25522aabf8..3d22ad7b05 100644 --- a/app/Rules/Processor.php +++ b/app/Rules/Processor.php @@ -20,6 +20,7 @@ use FireflyIII\Rules\Factory\ActionFactory; use FireflyIII\Rules\Factory\TriggerFactory; use FireflyIII\Rules\Triggers\AbstractTrigger; use Illuminate\Support\Collection; +use Log; /** * Class Processor @@ -37,6 +38,8 @@ final class Processor /** @var Collection */ public $triggers; + protected $foundTriggers = 0; + /** * Processor constructor. * @@ -57,9 +60,17 @@ final class Processor */ public static function make(Rule $rule) { + Log::debug(sprintf('Making new rule from Rule %d', $rule->id)); $self = new self; $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(); /** @var RuleTrigger $trigger */ foreach ($triggerSet as $trigger) { @@ -113,6 +124,22 @@ final class Processor 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 @@ -176,25 +203,30 @@ final class Processor * * @return bool */ - private function triggered() + private function triggered(): bool { - $foundTriggers = 0; + Log::debug('start of Processor::triggered()'); + $foundTriggers = $this->getFoundTriggers(); $hitTriggers = 0; - /** @var RuleTrigger $trigger */ + /** @var AbstractTrigger $trigger */ foreach ($this->triggers as $trigger) { $foundTriggers++; - + Log::debug(sprintf('Now checking trigger %s with value %s', get_class($trigger), $trigger->getTriggerValue())); /** @var AbstractTrigger $trigger */ if ($trigger->triggered($this->journal)) { + Log::debug('Is a match!'); $hitTriggers++; } if ($trigger->stopProcessing) { + Log::debug('Stop processing this trigger and 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; } diff --git a/app/Rules/TransactionMatcher.php b/app/Rules/TransactionMatcher.php index 599a0932ba..4a6e4f6085 100644 --- a/app/Rules/TransactionMatcher.php +++ b/app/Rules/TransactionMatcher.php @@ -15,6 +15,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Support\Collection; +use Log; /** * Class TransactionMatcher is used to find a list of @@ -80,6 +81,8 @@ class TransactionMatcher // Filter transactions that match the given triggers. $filtered = $set->filter( function (TransactionJournal $journal) use ($processor) { + Log::debug(sprintf('Test these triggers on #%d', $journal->id)); + return $processor->handleTransactionJournal($journal); } ); diff --git a/app/Rules/Triggers/AbstractTrigger.php b/app/Rules/Triggers/AbstractTrigger.php index 96422a4387..45234606c8 100644 --- a/app/Rules/Triggers/AbstractTrigger.php +++ b/app/Rules/Triggers/AbstractTrigger.php @@ -98,5 +98,23 @@ class AbstractTrigger return $self; } + /** + * @return RuleTrigger + */ + public function getTrigger(): RuleTrigger + { + return $this->trigger; + } + + /** + * @return string + */ + public function getTriggerValue(): string + { + return $this->triggerValue; + } + + + }