Sort and cleanup code.

This commit is contained in:
James Cole
2022-09-25 15:31:58 +02:00
parent 3c33ea959e
commit 6eaed9829b
7 changed files with 614 additions and 623 deletions

View File

@@ -133,35 +133,6 @@ class GroupCollector implements GroupCollectorInterface
];
}
/**
* @inheritDoc
*/
public function descriptionEnds(array $array): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s', $word);
$q1->where('transaction_journals.description', 'LIKE', $keyword);
}
}
);
$q->orWhere(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s', $word);
$q2->where('transaction_groups.title', 'LIKE', $keyword);
}
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
@@ -192,6 +163,65 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @inheritDoc
*/
public function descriptionDoesNotStart(array $array): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%s%%', $word);
$q1->where('transaction_journals.description', 'NOT LIKE', $keyword);
}
}
);
$q->where(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%s%%', $word);
$q2->where('transaction_groups.title', 'NOT LIKE', $keyword);
$q2->orWhereNull('transaction_groups.title');
}
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
public function descriptionEnds(array $array): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s', $word);
$q1->where('transaction_journals.description', 'LIKE', $keyword);
}
}
);
$q->orWhere(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s', $word);
$q2->where('transaction_groups.title', 'LIKE', $keyword);
}
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
@@ -256,36 +286,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @inheritDoc
*/
public function descriptionDoesNotStart(array $array): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%s%%', $word);
$q1->where('transaction_journals.description', 'NOT LIKE', $keyword);
}
}
);
$q->where(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%s%%', $word);
$q2->where('transaction_groups.title', 'NOT LIKE', $keyword);
$q2->orWhereNull('transaction_groups.title');
}
}
);
}
);
return $this;
}
/**
*
*/
@@ -306,6 +306,134 @@ class GroupCollector implements GroupCollectorInterface
Log::debug('Bindings', $this->query->getBindings());
}
/**
* Limit results to NOT a specific currency, either foreign or normal one.
*
* @param TransactionCurrency $currency
*
* @return GroupCollectorInterface
*/
public function excludeCurrency(TransactionCurrency $currency): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($currency) {
$q->where('source.transaction_currency_id', '!=', $currency->id);
$q->where(
static function (EloquentBuilder $q2) use ($currency) {
$q2->where('source.foreign_currency_id', '!=', $currency->id);
$q2->orWhereNull('source.foreign_currency_id');
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
public function excludeForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface
{
$this->query->where(static function (EloquentBuilder $q2) use ($currency) {
$q2->where('source.foreign_currency_id', '!=', $currency->id);
$q2->orWhereNull('source.foreign_currency_id');
});
return $this;
}
/**
* Limit the result to NOT a set of specific transaction groups.
*
* @param array $groupIds
*
* @return GroupCollectorInterface
*/
public function excludeIds(array $groupIds): GroupCollectorInterface
{
$this->query->whereNotIn('transaction_groups.id', $groupIds);
return $this;
}
/**
* Limit the result to NOT a set of specific journals.
*
* @param array $journalIds
*
* @return GroupCollectorInterface
*/
public function excludeJournalIds(array $journalIds): GroupCollectorInterface
{
if (!empty($journalIds)) {
// make all integers.
$integerIDs = array_map('intval', $journalIds);
$this->query->whereNotIn('transaction_journals.id', $integerIDs);
}
return $this;
}
/**
* Search for words in descriptions.
*
* @param array $array
*
* @return GroupCollectorInterface
*/
public function excludeSearchWords(array $array): GroupCollectorInterface
{
if (0 === count($array)) {
return $this;
}
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s%%', $word);
$q1->where('transaction_journals.description', 'NOT LIKE', $keyword);
}
}
);
$q->where(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s%%', $word);
$q2->where('transaction_groups.title', 'NOT LIKE', $keyword);
$q2->orWhereNull('transaction_groups.title');
}
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
public function excludeTypes(array $types): GroupCollectorInterface
{
$this->query->whereNotIn('transaction_types.type', $types);
return $this;
}
/**
* @inheritDoc
*/
public function exists(): GroupCollectorInterface
{
$this->query->whereNull('transaction_groups.deleted_at');
return $this;
}
/**
* @inheritDoc
*/
@@ -516,6 +644,19 @@ class GroupCollector implements GroupCollectorInterface
return $array;
}
/**
* @param array $array
* @return array
*/
private function convertToStrings(array $array): array
{
foreach ($this->stringFields as $field) {
$array[$field] = array_key_exists($field, $array) && null !== $array[$field] ? (string) $array[$field] : null;
}
return $array;
}
/**
* @param array $existingJournal
* @param TransactionJournal $newJournal
@@ -677,6 +818,23 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @inheritDoc
*/
public function isNotReconciled(): GroupCollectorInterface
{
$this->query->where('source.reconciled', 0)->where('destination.reconciled', 0);
return $this;
}
/**
* @inheritDoc
*/
public function isReconciled(): GroupCollectorInterface
{
$this->query->where('source.reconciled', 1)->where('destination.reconciled', 1);
return $this;
}
/**
* Limit results to a specific currency, either foreign or normal one.
@@ -697,30 +855,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* Limit results to NOT a specific currency, either foreign or normal one.
*
* @param TransactionCurrency $currency
*
* @return GroupCollectorInterface
*/
public function excludeCurrency(TransactionCurrency $currency): GroupCollectorInterface
{
$this->query->where(
static function (EloquentBuilder $q) use ($currency) {
$q->where('source.transaction_currency_id','!=', $currency->id);
$q->where(
static function (EloquentBuilder $q2) use ($currency) {
$q2->where('source.foreign_currency_id','!=', $currency->id);
$q2->orWhereNull('source.foreign_currency_id');
}
);
}
);
return $this;
}
/**
* @inheritDoc
*/
@@ -731,19 +865,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @inheritDoc
*/
public function excludeForeignCurrency(TransactionCurrency $currency): GroupCollectorInterface
{
$this->query->where(static function(EloquentBuilder $q2) use ($currency) {
$q2->where('source.foreign_currency_id','!=', $currency->id);
$q2->orWhereNull('source.foreign_currency_id');
});
return $this;
}
/**
* Limit the result to a set of specific transaction groups.
*
@@ -759,21 +880,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* Limit the result to NOT a set of specific transaction groups.
*
* @param array $groupIds
*
* @return GroupCollectorInterface
*/
public function excludeIds(array $groupIds): GroupCollectorInterface
{
$this->query->whereNotIn('transaction_groups.id', $groupIds);
return $this;
}
/**
* Limit the result to a set of specific journals.
*
@@ -794,26 +900,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* Limit the result to NOT a set of specific journals.
*
* @param array $journalIds
*
* @return GroupCollectorInterface
*/
public function excludeJournalIds(array $journalIds): GroupCollectorInterface
{
if (!empty($journalIds)) {
// make all integers.
$integerIDs = array_map('intval', $journalIds);
$this->query->whereNotIn('transaction_journals.id', $integerIDs);
}
return $this;
}
/**
* Set the page to get.
*
@@ -866,43 +952,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* Search for words in descriptions.
*
* @param array $array
*
* @return GroupCollectorInterface
*/
public function excludeSearchWords(array $array): GroupCollectorInterface
{
if (0 === count($array)) {
return $this;
}
$this->query->where(
static function (EloquentBuilder $q) use ($array) {
$q->where(
static function (EloquentBuilder $q1) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s%%', $word);
$q1->where('transaction_journals.description', 'NOT LIKE', $keyword);
}
}
);
$q->where(
static function (EloquentBuilder $q2) use ($array) {
foreach ($array as $word) {
$keyword = sprintf('%%%s%%', $word);
$q2->where('transaction_groups.title', 'NOT LIKE', $keyword);
$q2->orWhereNull('transaction_groups.title');
}
}
);
}
);
return $this;
}
/**
* Limit the search to one specific transaction group.
*
@@ -931,16 +980,6 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @inheritDoc
*/
public function excludeTypes(array $types): GroupCollectorInterface
{
$this->query->whereNotIn('transaction_types.type', $types);
return $this;
}
/**
* Set the user object and start the query.
*
@@ -1020,44 +1059,4 @@ class GroupCollector implements GroupCollectorInterface
return $this;
}
/**
* @param array $array
* @return array
*/
private function convertToStrings(array $array): array
{
foreach ($this->stringFields as $field) {
$array[$field] = array_key_exists($field, $array) && null !== $array[$field] ? (string) $array[$field] : null;
}
return $array;
}
/**
* @inheritDoc
*/
public function isReconciled(): GroupCollectorInterface
{
$this->query->where('source.reconciled', 1)->where('destination.reconciled', 1);
return $this;
}
/**
* @inheritDoc
*/
public function isNotReconciled(): GroupCollectorInterface
{
$this->query->where('source.reconciled', 0)->where('destination.reconciled', 0);
return $this;
}
/**
* @inheritDoc
*/
public function exists(): GroupCollectorInterface
{
$this->query->whereNull('transaction_groups.deleted_at');
return $this;
}
}