From 27d105d6ff7987e14764a28a6a2ec6fb74936ee6 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 14:20:56 +0100 Subject: [PATCH 1/6] fix: nordigen transaction id should be string --- .../Transformer/TransactionTransformer.php | 2 +- .../Bank/ProcessBankTransactionsNordigen.php | 3 +- app/Models/BankTransaction.php | 1 + ...55_add_bank_transaction_nordigen_field.php | 34 +++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php diff --git a/app/Helpers/Bank/Nordigen/Transformer/TransactionTransformer.php b/app/Helpers/Bank/Nordigen/Transformer/TransactionTransformer.php index 30e511d67aec..d7ac29889470 100644 --- a/app/Helpers/Bank/Nordigen/Transformer/TransactionTransformer.php +++ b/app/Helpers/Bank/Nordigen/Transformer/TransactionTransformer.php @@ -110,7 +110,7 @@ class TransactionTransformer implements BankRevenueInterface $transaction['creditorName'] : null); return [ - 'transaction_id' => $transaction["transactionId"], + 'nordigen_transaction_id' => $transaction["transactionId"], 'amount' => abs((int) $transaction["transactionAmount"]["amount"]), 'currency_id' => $this->convertCurrency($transaction["transactionAmount"]["currency"]), 'category_id' => null, // nordigen has no categories diff --git a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php index da9ac7f98571..640a525c34f3 100644 --- a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php +++ b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php @@ -155,12 +155,13 @@ class ProcessBankTransactionsNordigen implements ShouldQueue foreach ($transactions as $transaction) { - if (BankTransaction::where('transaction_id', $transaction['transaction_id'])->where('company_id', $this->company->id)->where('bank_integration_id', $this->bank_integration->id)->withTrashed()->exists()) + if (BankTransaction::where('nordigen_transaction_id', $transaction['nordigen_transaction_id'])->where('company_id', $this->company->id)->where('bank_integration_id', $this->bank_integration->id)->withTrashed()->exists()) continue; //this should be much faster to insert than using ::create() \DB::table('bank_transactions')->insert( array_merge($transaction, [ + 'transaction_id' => 0, 'company_id' => $this->company->id, 'user_id' => $user_id, 'bank_integration_id' => $this->bank_integration->id, diff --git a/app/Models/BankTransaction.php b/app/Models/BankTransaction.php index d39c83a62985..d9595cad319e 100644 --- a/app/Models/BankTransaction.php +++ b/app/Models/BankTransaction.php @@ -23,6 +23,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; * @property int $user_id * @property int $bank_integration_id * @property int $transaction_id + * @property string $nordigen_transaction_id * @property string $amount * @property string|null $currency_code * @property int|null $currency_id diff --git a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php new file mode 100644 index 000000000000..39e828c428ca --- /dev/null +++ b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php @@ -0,0 +1,34 @@ +string('nordigen_transaction_id')->nullable(); + }); + + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}; From 39cb03c8e2f4596943817edb3ff6ef043166d6b4 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 14:32:15 +0100 Subject: [PATCH 2/6] change columntype to text --- .../2024_01_10_155555_add_bank_transaction_nordigen_field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php index 39e828c428ca..24ad75b396a7 100644 --- a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php +++ b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php @@ -17,7 +17,7 @@ return new class extends Migration { // FIX: used column transaction_id was int and resulted in wrong value in field Schema::table('bank_transactions', function (Blueprint $table) { - $table->string('nordigen_transaction_id')->nullable(); + $table->text('nordigen_transaction_id')->nullable(); }); } From a8caaec7bb804fe49ed78deae87cd94bf5bd1361 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 15:00:25 +0100 Subject: [PATCH 3/6] migrate old transactions --- ...155555_add_bank_transaction_nordigen_field.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php index 24ad75b396a7..a928e9ee56e6 100644 --- a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php +++ b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php @@ -2,6 +2,8 @@ use App\Models\Account; use App\Models\BankIntegration; +use App\Models\BankTransaction; +use App\Repositories\BankTransactionRepository; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -20,6 +22,19 @@ return new class extends Migration { $table->text('nordigen_transaction_id')->nullable(); }); + // remove invalid transactions + BankIntegration::query()->where('bank_integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->cursor()->each(function ($bank_integration) { + $bank_integration->from_date = now()->subDays(90); + $bank_integration->save(); + + BankTransaction::query()->where('bank_integration_id', $bank_integration->id)->cursor()->each(function ($bank_transaction) { + if ($bank_transaction->invoiceIds != '' || $bank_transaction->expense_id != '') + return; + + $btrepo = new BankTransactionRepository(); + $btrepo->delete($bank_transaction); + }); + }); } /** From fd6217a48fd54ff1683be83dbe80ffed4271e028 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 15:04:36 +0100 Subject: [PATCH 4/6] fixes --- .../2024_01_10_155555_add_bank_transaction_nordigen_field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php index a928e9ee56e6..fca0b6307f98 100644 --- a/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php +++ b/database/migrations/2024_01_10_155555_add_bank_transaction_nordigen_field.php @@ -23,7 +23,7 @@ return new class extends Migration { }); // remove invalid transactions - BankIntegration::query()->where('bank_integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->cursor()->each(function ($bank_integration) { + BankIntegration::query()->where('integration_type', BankIntegration::INTEGRATION_TYPE_NORDIGEN)->cursor()->each(function ($bank_integration) { $bank_integration->from_date = now()->subDays(90); $bank_integration->save(); From a8b8680447384628960081b12e19a2c72c456047 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 15:34:25 +0100 Subject: [PATCH 5/6] fix related to not ractivating deleted bank_integrations --- app/Http/Controllers/Bank/NordigenController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Bank/NordigenController.php b/app/Http/Controllers/Bank/NordigenController.php index 47dd7013eb7b..858d18959bd7 100644 --- a/app/Http/Controllers/Bank/NordigenController.php +++ b/app/Http/Controllers/Bank/NordigenController.php @@ -206,7 +206,7 @@ class NordigenController extends BaseController $nordigen_account = $nordigen->getAccount($nordigenAccountId); - $existing_bank_integration = BankIntegration::withTrashed()->where('nordigen_account_id', $nordigen_account['id'])->where('company_id', $company->id)->first(); + $existing_bank_integration = BankIntegration::withTrashed()->where('nordigen_account_id', $nordigen_account['id'])->where('company_id', $company->id)->where('is_deleted', 0)->first(); if (!$existing_bank_integration) { From 356c591fe472354c574b929de06dddceba3e5dc9 Mon Sep 17 00:00:00 2001 From: paulwer Date: Wed, 10 Jan 2024 15:48:33 +0100 Subject: [PATCH 6/6] fix: same behavior for transactions --- app/Jobs/Bank/ProcessBankTransactionsNordigen.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php index 14a54f6a075a..5d17a8f5d32b 100644 --- a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php +++ b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php @@ -155,7 +155,7 @@ class ProcessBankTransactionsNordigen implements ShouldQueue foreach ($transactions as $transaction) { - if (BankTransaction::where('nordigen_transaction_id', $transaction['nordigen_transaction_id'])->where('company_id', $this->company->id)->where('bank_integration_id', $this->bank_integration->id)->withTrashed()->exists()) + if (BankTransaction::where('nordigen_transaction_id', $transaction['nordigen_transaction_id'])->where('company_id', $this->company->id)->where('bank_integration_id', $this->bank_integration->id)->where('is_deleted', 0)->withTrashed()->exists()) continue; //this should be much faster to insert than using ::create()