Merge pull request #6873 from firefly-iii/main

Merge back into develop
This commit is contained in:
James Cole 2023-01-16 06:56:44 +01:00 committed by GitHub
commit 8cd13ba13b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 30 additions and 10 deletions

View File

@ -104,6 +104,7 @@ class DeleteController extends Controller
*/ */
public function destroy(TransactionGroup $group): RedirectResponse public function destroy(TransactionGroup $group): RedirectResponse
{ {
Log::debug(sprintf('Now in %s(#%d).', __METHOD__, $group->id));
if (!$this->isEditableGroup($group)) { if (!$this->isEditableGroup($group)) {
return $this->redirectGroupToAccount($group); return $this->redirectGroupToAccount($group);
} }

View File

@ -98,17 +98,23 @@ class MassController extends Controller
*/ */
public function destroy(MassDeleteJournalRequest $request) public function destroy(MassDeleteJournalRequest $request)
{ {
Log::debug(sprintf('Now in %s', __METHOD__));
$ids = $request->get('confirm_mass_delete'); $ids = $request->get('confirm_mass_delete');
$count = 0; $count = 0;
if (is_array($ids)) { if (is_array($ids)) {
Log::debug('Array of IDs', $ids);
/** @var string $journalId */ /** @var string $journalId */
foreach ($ids as $journalId) { foreach ($ids as $journalId) {
Log::debug(sprintf('Searching for ID #%d', $journalId));
/** @var TransactionJournal $journal */ /** @var TransactionJournal $journal */
$journal = $this->repository->find((int)$journalId); $journal = $this->repository->find((int)$journalId);
if (null !== $journal && (int)$journalId === $journal->id) { if (null !== $journal && (int)$journalId === (int) $journal->id) {
$this->repository->destroyJournal($journal); $this->repository->destroyJournal($journal);
++$count; ++$count;
Log::debug(sprintf('Deleted transaction journal #%d', $journalId));
continue;
} }
Log::debug(sprintf('Could not find transaction journal #%d', $journalId));
} }
} }
app('preferences')->mark(); app('preferences')->mark();

View File

@ -32,6 +32,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/** /**
@ -94,18 +95,22 @@ class TransactionGroup extends Model
*/ */
public static function routeBinder(string $value): TransactionGroup public static function routeBinder(string $value): TransactionGroup
{ {
Log::debug(sprintf('Now in %s("%s")', __METHOD__, $value));
if (auth()->check()) { if (auth()->check()) {
$groupId = (int)$value; $groupId = (int)$value;
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
Log::debug(sprintf('User authenticated as %s', $user->email));
/** @var TransactionGroup $group */ /** @var TransactionGroup $group */
$group = $user->transactionGroups() $group = $user->transactionGroups()
->with(['transactionJournals', 'transactionJournals.transactions']) ->with(['transactionJournals', 'transactionJournals.transactions'])
->where('transaction_groups.id', $groupId)->first(['transaction_groups.*']); ->where('transaction_groups.id', $groupId)->first(['transaction_groups.*']);
if (null !== $group) { if (null !== $group) {
Log::debug(sprintf('Found group #%d.', $group->id));
return $group; return $group;
} }
} }
Log::debug('Found no group.');
throw new NotFoundHttpException(); throw new NotFoundHttpException();
} }

View File

@ -46,5 +46,8 @@ class CategoryDestroyService
// also delete all relations between categories and transactions: // also delete all relations between categories and transactions:
DB::table('category_transaction')->where('category_id', (int)$category->id)->delete(); DB::table('category_transaction')->where('category_id', (int)$category->id)->delete();
// delete references to category from recurring transactions.
DB::table('rt_meta')->where('name', 'category_id')->where('value', $category->id)->delete();
} }
} }

View File

@ -294,7 +294,7 @@ trait RecurringTransactionTrait
return; return;
} }
$transaction->recurrenceTransactionMeta()->where('name', 'category_name')->delete();
$meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first(); $meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first();
if (null === $meta) { if (null === $meta) {
$meta = new RecurrenceTransactionMeta(); $meta = new RecurrenceTransactionMeta();

View File

@ -224,9 +224,10 @@ class RecurrenceUpdateService
*/ */
private function updateTransactions(Recurrence $recurrence, array $transactions): void private function updateTransactions(Recurrence $recurrence, array $transactions): void
{ {
Log::debug('Now in updateTransactions()');
$originalCount = $recurrence->recurrenceTransactions()->count(); $originalCount = $recurrence->recurrenceTransactions()->count();
if (0 === count($transactions)) { if (0 === count($transactions)) {
// wont drop transactions, rather avoid. // won't drop transactions, rather avoid.
return; return;
} }
// user added or removed repetitions, delete all and recreate: // user added or removed repetitions, delete all and recreate:
@ -240,12 +241,13 @@ class RecurrenceUpdateService
$currencyFactory = app(TransactionCurrencyFactory::class); $currencyFactory = app(TransactionCurrencyFactory::class);
// loop all and try to match them: // loop all and try to match them:
if ($originalCount === count($transactions)) { if ($originalCount === count($transactions)) {
Log::debug('Loop and find'); Log::debug(sprintf('Count is equal (%d), update transactions.', $originalCount));
foreach ($transactions as $current) { foreach ($transactions as $current) {
$match = $this->matchTransaction($recurrence, $current); $match = $this->matchTransaction($recurrence, $current);
if (null === $match) { if (null === $match) {
throw new FireflyException('Cannot match recurring transaction to existing transaction. Not sure what to do. Break.'); throw new FireflyException('Cannot match recurring transaction to existing transaction. Not sure what to do. Break.');
} }
// complex loop to find currency:
$currency = null; $currency = null;
$foreignCurrency = null; $foreignCurrency = null;
if (array_key_exists('currency_id', $current) || array_key_exists('currency_code', $current)) { if (array_key_exists('currency_id', $current) || array_key_exists('currency_code', $current)) {
@ -267,7 +269,7 @@ class RecurrenceUpdateService
$current['foreign_currency_id'] = (int)$foreignCurrency->id; $current['foreign_currency_id'] = (int)$foreignCurrency->id;
} }
// update fields // update fields that are part of the recurring transaction itself.
$fields = [ $fields = [
'source_id' => 'source_id', 'source_id' => 'source_id',
'destination_id' => 'destination_id', 'destination_id' => 'destination_id',
@ -293,11 +295,13 @@ class RecurrenceUpdateService
// reset category if name is set but empty: // reset category if name is set but empty:
// can be removed when v1 is retired. // can be removed when v1 is retired.
if (array_key_exists('category_name', $current) && '' === (string)$current['category_name']) { if (array_key_exists('category_name', $current) && '' === (string)$current['category_name']) {
Log::debug('Category name is submitted but is empty. Set category to be empty.');
$current['category_name'] = null; $current['category_name'] = null;
$current['category_id'] = 0; $current['category_id'] = 0;
} }
if (array_key_exists('category_id', $current)) { if (array_key_exists('category_id', $current)) {
Log::debug(sprintf('Category ID is submitted, set category to be %d.', (int)$current['category_id']));
$this->setCategory($match, (int)$current['category_id']); $this->setCategory($match, (int)$current['category_id']);
} }
@ -319,9 +323,10 @@ class RecurrenceUpdateService
*/ */
private function matchTransaction(Recurrence $recurrence, array $data): ?RecurrenceTransaction private function matchTransaction(Recurrence $recurrence, array $data): ?RecurrenceTransaction
{ {
Log::debug('Now in matchTransaction()');
$originalCount = $recurrence->recurrenceTransactions()->count(); $originalCount = $recurrence->recurrenceTransactions()->count();
if (1 === $originalCount) { if (1 === $originalCount) {
Log::debug('Return the first one'); Log::debug('Return the first one.');
return $recurrence->recurrenceTransactions()->first(); return $recurrence->recurrenceTransactions()->first();
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long