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:
James Cole
2016-09-12 18:43:10 +02:00
parent 5379e03447
commit a7351f348d
4 changed files with 60 additions and 5 deletions

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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);
} }
); );

View File

@@ -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;
}
} }