From ff6c0c26e05ec070fcd2502b6cc31d17f8363ec4 Mon Sep 17 00:00:00 2001 From: James Cole Date: Mon, 7 Sep 2020 13:03:10 +0200 Subject: [PATCH] Fix #3745 --- .../PiggyBank/PiggyBankRepository.php | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 65a5118419..9ae47b0caf 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -43,6 +43,7 @@ use Storage; class PiggyBankRepository implements PiggyBankRepositoryInterface { use ModifiesPiggyBanks; + /** @var User */ private $user; @@ -157,6 +158,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface Log::debug(sprintf('Now in getExactAmount(%d, %d, %d)', $piggyBank->id, $repetition->id, $journal->id)); $operator = null; + $currency = null; /** @var JournalRepositoryInterface $journalRepost */ $journalRepost = app(JournalRepositoryInterface::class); $journalRepost->setUser($this->user); @@ -165,15 +167,15 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $accountRepos = app(AccountRepositoryInterface::class); $accountRepos->setUser($this->user); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); + $defaultCurrency = app('amount')->getDefaultCurrencyByUser($this->user); $piggyBankCurrency = $accountRepos->getAccountCurrency($piggyBank->account) ?? $defaultCurrency; Log::debug(sprintf('Piggy bank #%d currency is %s', $piggyBank->id, $piggyBankCurrency->code)); /** @var Transaction $source */ - $source = $journal->transactions()->with(['Account'])->where('amount', '<', 0)->first(); + $source = $journal->transactions()->with(['account'])->where('amount', '<', 0)->first(); /** @var Transaction $destination */ - $destination = $journal->transactions()->with(['Account'])->where('amount', '>', 0)->first(); + $destination = $journal->transactions()->with(['account'])->where('amount', '>', 0)->first(); // matches source, which means amount will be removed from piggy: if ($source->account_id === $piggyBank->account_id) { @@ -189,28 +191,30 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface Log::debug(sprintf('Currency will add money to piggy bank. Destination currency is %s', $currency->code)); } if (null === $operator || null === $currency) { + Log::debug('Currency is NULL and operator is NULL, return "0".'); return '0'; } // currency of the account + the piggy bank currency are almost the same. // which amount from the transaction matches? // $currency->id === $piggyBankCurrency->id $amount = null; - if ($source->transaction_currency_id === $currency->id) { + if ((int)$source->transaction_currency_id === (int)$currency->id) { Log::debug('Use normal amount'); $amount = app('steam')->$operator($source->amount); } - if ($source->foreign_currency_id === $currency->id) { + if ((int)$source->foreign_currency_id === (int)$currency->id) { Log::debug('Use foreign amount'); $amount = app('steam')->$operator($source->foreign_amount); } if (null === $amount) { + Log::debug('No match on currency, so amount remains null, return "0".'); return '0'; } Log::debug(sprintf('The currency is %s and the amount is %s', $currency->code, $amount)); - $room = bcsub((string)$piggyBank->targetamount, (string)$repetition->currentamount); + $room = bcsub((string)$piggyBank->targetamount, (string)$repetition->currentamount); $compare = bcmul($repetition->currentamount, '-1'); Log::debug(sprintf('Will add/remove %f to piggy bank #%d ("%s")', $amount, $piggyBank->id, $piggyBank->name)); @@ -269,7 +273,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface } - /** * Also add amount in name. * @@ -285,7 +288,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** @var PiggyBank $piggy */ foreach ($set as $piggy) { $currentAmount = $this->getRepetition($piggy)->currentamount ?? '0'; - $piggy->name = $piggy->name . ' (' . app('amount')->formatAnything($currency, $currentAmount, false) . ')'; + $piggy->name = $piggy->name . ' (' . app('amount')->formatAnything($currency, $currentAmount, false) . ')'; } @@ -313,13 +316,13 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface public function getSuggestedMonthlyAmount(PiggyBank $piggyBank): string { $savePerMonth = '0'; - $repetition = $this->getRepetition($piggyBank); + $repetition = $this->getRepetition($piggyBank); if (null === $repetition) { return $savePerMonth; } if (null !== $piggyBank->targetdate && $repetition->currentamount < $piggyBank->targetamount) { - $now = Carbon::now(); - $diffInMonths = $now->diffInMonths($piggyBank->targetdate, false); + $now = Carbon::now(); + $diffInMonths = $now->diffInMonths($piggyBank->targetdate, false); $remainingAmount = bcsub($piggyBank->targetamount, $repetition->currentamount); // more than 1 month to go and still need money to save: @@ -384,9 +387,9 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $set = $set->each( static function (Attachment $attachment) use ($disk) { - $notes = $attachment->notes()->first(); + $notes = $attachment->notes()->first(); $attachment->file_exists = $disk->exists($attachment->fileName()); - $attachment->notes = $notes ? $notes->text : ''; + $attachment->notes = $notes ? $notes->text : ''; return $attachment; } @@ -414,7 +417,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface $search->where('piggy_banks.name', 'LIKE', sprintf('%%%s%%', $query)); } $search->orderBy('piggy_banks.order', 'ASC') - ->orderBy('piggy_banks.name', 'ASC'); + ->orderBy('piggy_banks.name', 'ASC'); return $search->take($limit)->get(); }