Expand use of journal collector.

This commit is contained in:
James Cole
2016-11-05 08:46:55 +01:00
parent 9c5d192d90
commit 98160e9b63
8 changed files with 74 additions and 168 deletions

View File

@@ -7,6 +7,7 @@ namespace FireflyIII\Helpers\Collector;
use Carbon\Carbon;
use Crypt;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Category;
use FireflyIII\Models\Transaction;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
@@ -51,6 +52,8 @@ class JournalCollector
'account_types.type as account_type',
];
/** @var bool */
private $joinedCategory = false;
/** @var int */
private $limit;
/** @var int */
@@ -220,6 +223,46 @@ class JournalCollector
return $this;
}
/**
* @param Category $category
*
* @return JournalCollector
*/
public function setCategory(Category $category): JournalCollector
{
if (!$this->joinedCategory) {
// join some extra tables:
$this->joinedCategory = true;
$this->query->leftJoin('category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id');
$this->query->leftJoin('category_transaction', 'category_transaction.transaction_id', '=', 'transactions.id');
}
$this->query->where(
function (EloquentBuilder $q) use ($category) {
$q->where('category_transaction.category_id', $category->id);
$q->orWhere('category_transaction_journal.category_id', $category->id);
}
);
return $this;
}
/**
* @param Collection $accounts
*
* @return JournalCollector
*/
public function setDestinationAccounts(Collection $accounts): JournalCollector
{
if ($accounts->count() > 0) {
$accountIds = $accounts->pluck('id')->toArray();
$this->query->whereIn('transactions.account_id', $accountIds);
$this->query->where('transactions.amount', '>', 0);
}
return $this;
}
/**
* @param int $limit
*
@@ -287,22 +330,6 @@ class JournalCollector
return $this;
}
/**
* @param Collection $accounts
*
* @return JournalCollector
*/
public function setDestinationAccounts(Collection $accounts): JournalCollector
{
if ($accounts->count() > 0) {
$accountIds = $accounts->pluck('id')->toArray();
$this->query->whereIn('transactions.account_id', $accountIds);
$this->query->where('transactions.amount', '>', 0);
}
return $this;
}
/**
* @param Collection $accounts
*