diff --git a/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php b/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php index 42c0e9bf5895..48966aa20382 100644 --- a/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php +++ b/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php @@ -127,9 +127,12 @@ class IncomeTransformer implements BankRevenueInterface foreach ($transaction->transaction as $transaction) { //do not store duplicate / pending transactions - if (property_exists($transaction, 'status') && $transaction->status == 'PENDING') { + if (property_exists($transaction, 'status') && $transaction->status == 'PENDING') + continue; + + //some object do no store amounts ignore these + if(!property_exists($transaction, 'amount')) continue; - } $data[] = $this->transformTransaction($transaction); } @@ -148,7 +151,7 @@ class IncomeTransformer implements BankRevenueInterface 'category_type' => $transaction->categoryType, 'date' => $transaction->date, 'bank_account_id' => $transaction->accountId, - 'description' => $transaction->description->original, + 'description' => $transaction?->description?->original ?? '', 'base_type' => property_exists($transaction, 'baseType') ? $transaction->baseType : $this->calculateBaseType($transaction), ]; } diff --git a/app/Jobs/Bank/ProcessBankTransactions.php b/app/Jobs/Bank/ProcessBankTransactions.php index 9cd35817a17b..019f93dc333b 100644 --- a/app/Jobs/Bank/ProcessBankTransactions.php +++ b/app/Jobs/Bank/ProcessBankTransactions.php @@ -11,17 +11,19 @@ namespace App\Jobs\Bank; -use App\Helpers\Bank\Yodlee\Yodlee; +use App\Models\Company; use App\Libraries\MultiDB; +use Illuminate\Bus\Queueable; use App\Models\BankIntegration; use App\Models\BankTransaction; -use App\Models\Company; +use App\Helpers\Bank\Yodlee\Yodlee; +use Illuminate\Queue\SerializesModels; +use Illuminate\Queue\InteractsWithQueue; use App\Services\Bank\BankMatchingService; -use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Events\Dispatchable; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Queue\SerializesModels; +use Illuminate\Queue\Middleware\WithoutOverlapping; +use App\Notifications\Ninja\GenericNinjaAdminNotification; class ProcessBankTransactions implements ShouldQueue { @@ -70,6 +72,14 @@ class ProcessBankTransactions implements ShouldQueue $this->processTransactions(); } catch(\Exception $e) { nlog("{$this->bank_integration_account_id} - exited abnormally => ". $e->getMessage()); + + $content = [ + "Processing transactions for account: {$this->bank_integration->account->key} failed", + "Exception Details => ", + $e->getMessage(), + ]; + + $this->bank_integration->account->company->notification(new GenericNinjaAdminNotification($content))->ninja(); return; } } while ($this->stop_loop); @@ -152,4 +162,15 @@ class ProcessBankTransactions implements ShouldQueue $this->bank_integration->save(); } } + + + public function middleware() + { + return [new WithoutOverlapping($this->bank_integration_account_id)]; + } + + public function backoff() + { + return [rand(10, 15), rand(30, 40), rand(60, 79), rand(160, 200), rand(3000, 5000)]; + } } diff --git a/app/Notifications/Ninja/GenericNinjaAdminNotification.php b/app/Notifications/Ninja/GenericNinjaAdminNotification.php new file mode 100644 index 000000000000..7b40141aa22a --- /dev/null +++ b/app/Notifications/Ninja/GenericNinjaAdminNotification.php @@ -0,0 +1,71 @@ +message_array as $message) { + $content .= $message . "\n"; + } + + return (new SlackMessage) + ->success() + ->from(ctrans('texts.notification_bot')) + ->image('https://app.invoiceninja.com/favicon.png') + ->content($content); + } +}