From e878d5ce07e11d4b58b4dbdcc73588f961ee5538 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 2 Jan 2025 04:54:29 +0100 Subject: [PATCH] Fix linking piggy banks to transactions. --- .../PiggyBank/PiggyBankRepository.php | 33 ++++++++++++------- app/Rules/BelongsUser.php | 19 ++++++++--- resources/views/list/piggy-bank-events.twig | 5 ++- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 4f62edcf48..abe19853ae 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -154,20 +154,31 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** @var Transaction $destination */ $destination = $journal->transactions()->with(['account'])->where('amount', '>', 0)->first(); + $hits = 0; + foreach($piggyBank->accounts as $account) { - // matches source, which means amount will be removed from piggy: - if ($source->account_id === $piggyBank->account_id) { - $operator = 'negative'; - $currency = $accountRepos->getAccountCurrency($source->account) ?? $defaultCurrency; - app('log')->debug(sprintf('Currency will draw money out of piggy bank. Source currency is %s', $currency->code)); + // matches source, which means amount will be removed from piggy: + if($account->id === $source->account_id) { + $operator = 'negative'; + $currency = $accountRepos->getAccountCurrency($source->account) ?? $defaultCurrency; + app('log')->debug(sprintf('Currency will draw money out of piggy bank. Source currency is %s', $currency->code)); + $hits++; + } + // matches destination, which means amount will be added to piggy. + if ($account->id === $destination->account_id) { + $operator = 'positive'; + $currency = $accountRepos->getAccountCurrency($destination->account) ?? $defaultCurrency; + app('log')->debug(sprintf('Currency will add money to piggy bank. Destination currency is %s', $currency->code)); + $hits++; + } + } + if ($hits > 1) { + app('log')->debug(sprintf('Transaction journal is related to %d of the accounts, cannot determine what to do. Return "0".', $hits)); + + return '0'; } - // matches destination, which means amount will be added to piggy. - if ($destination->account_id === $piggyBank->account_id) { - $operator = 'positive'; - $currency = $accountRepos->getAccountCurrency($destination->account) ?? $defaultCurrency; - app('log')->debug(sprintf('Currency will add money to piggy bank. Destination currency is %s', $currency->code)); - } + if (null === $operator || null === $currency) { app('log')->debug('Currency is NULL and operator is NULL, return "0".'); diff --git a/app/Rules/BelongsUser.php b/app/Rules/BelongsUser.php index b223de2165..4d5d21c35d 100644 --- a/app/Rules/BelongsUser.php +++ b/app/Rules/BelongsUser.php @@ -80,19 +80,30 @@ class BelongsUser implements ValidationRule private function validatePiggyBankId(int $value): bool { - $count = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id') + + + + + $count = PiggyBank + ::leftJoin('account_piggy_bank','account_piggy_bank.piggy_bank_id','=','piggy_banks.id') + ->leftJoin('accounts', 'accounts.id', '=', 'account_piggy_bank.account_id') ->where('piggy_banks.id', '=', $value) ->where('accounts.user_id', '=', auth()->user()->id)->count() ; - return 1 === $count; + return $count > 0; } private function validatePiggyBankName(string $value): bool { - $count = $this->countField(PiggyBank::class, 'name', $value); + $count = PiggyBank + ::leftJoin('account_piggy_bank','account_piggy_bank.piggy_bank_id','=','piggy_banks.id') + ->leftJoin('accounts', 'accounts.id', '=', 'account_piggy_bank.account_id') + ->where('piggy_banks.name', '=', $value) + ->where('accounts.user_id', '=', auth()->user()->id)->count() + ; - return 1 === $count; + return $count>0; } protected function countField(string $class, string $field, string $value): int diff --git a/resources/views/list/piggy-bank-events.twig b/resources/views/list/piggy-bank-events.twig index bc7eca413a..a1f36c50b5 100644 --- a/resources/views/list/piggy-bank-events.twig +++ b/resources/views/list/piggy-bank-events.twig @@ -23,11 +23,10 @@ - {% if event.amount < 0 %} - {{ trans('firefly.removed_amount', {amount: formatAmountBySymbol(event.amount,event.piggyBank.transactionCurrency.symbol, false)})|raw }} + {{ trans('firefly.removed_amount', {amount: formatAmountBySymbol(event.amount,event.piggyBank.transactionCurrency.symbol, event.piggyBank.transactionCurrency.decimal_places, false)})|raw }} {% else %} - {{ trans('firefly.added_amount', {amount: formatAmountBySymbol(event.amount, event.piggyBank.transactionCurrency.symbol, false)})|raw }} + {{ trans('firefly.added_amount', {amount: formatAmountBySymbol(event.amount, event.piggyBank.transactionCurrency.symbol, event.piggyBank.transactionCurrency.decimal_places, false)})|raw }} {% endif %}