From d93efb434ddd63ced2ff10402692d2ff5f030710 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 15 Sep 2022 16:15:57 +1000 Subject: [PATCH] Expense categories --- .../Yodlee/Transformer/IncomeTransformer.php | 2 +- app/Jobs/Bank/MatchBankTransactions.php | 17 +++++++-------- .../2022_08_05_023357_bank_integration.php | 4 ++++ tests/Feature/Bank/YodleeApiTest.php | 21 +++++++++++++++++-- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php b/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php index 505f96eba1b2..b888eb28af69 100644 --- a/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php +++ b/app/Helpers/Bank/Yodlee/Transformer/IncomeTransformer.php @@ -138,7 +138,7 @@ class IncomeTransformer implements BankRevenueInterface 'amount' => $transaction->amount->amount, 'currency_code' => $transaction->amount->currency, 'account_type' => $transaction->CONTAINER, - 'category_id' => $transaction->categoryId, + 'category_id' => $transaction->highLevelCategoryId, 'category_type' => $transaction->categoryType, 'date' => $transaction->date, 'bank_account_id' => $transaction->accountId, diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php index 2e89bf0bd591..822a68ad26bd 100644 --- a/app/Jobs/Bank/MatchBankTransactions.php +++ b/app/Jobs/Bank/MatchBankTransactions.php @@ -49,6 +49,7 @@ class MatchBankTransactions implements ShouldQueue private BankTransaction $bt; + private $categories; /** * Create a new job instance. */ @@ -74,6 +75,10 @@ class MatchBankTransactions implements ShouldQueue $this->company = Company::find($this->company_id); + $yodlee = new Yodlee($this->company->account->bank_integration_account_id); + + $this->categories = collect($yodlee->getTransactionCategories()); + foreach($this->input as $match) { if(array_key_exists('invoice_id', $match) && strlen($match['invoice_id']) > 1) @@ -105,7 +110,7 @@ class MatchBankTransactions implements ShouldQueue private function matchExpense(array $match) :void { - + //if there is a category id, pull it from Yodlee and insert - or just reuse!! } private function createPayment(int $invoice_id, float $amount) :void @@ -135,13 +140,8 @@ class MatchBankTransactions implements ShouldQueue $payment->transaction_reference = $this->bt->transaction_id; $payment->currency_id = $this->harvestCurrencyId(); $payment->is_manual = false; - - if ($this->invoice->company->timezone()) { - $payment->date = now()->addSeconds($this->invoice->company->timezone()->utc_offset)->format('Y-m-d'); - } - else { - $payment->date = now(); - } + $payment->date = $this->bt->date ? Carbon::parse($this->bt->date) : now(); + /* Bank Transfer! */ $payment_type_id = 1; @@ -173,7 +173,6 @@ class MatchBankTransactions implements ShouldQueue $payment->ledger() ->updatePaymentBalance($this->payable_balance * -1); - //06-09-2022 $this->invoice ->client ->service() diff --git a/database/migrations/2022_08_05_023357_bank_integration.php b/database/migrations/2022_08_05_023357_bank_integration.php index 26112968a79c..99fba3eeef6a 100644 --- a/database/migrations/2022_08_05_023357_bank_integration.php +++ b/database/migrations/2022_08_05_023357_bank_integration.php @@ -79,6 +79,10 @@ return new class extends Migration }); + Schema::table('expense_categories', function (Blueprint $table) { + $table->unsignedInteger('bank_category_id')->nullable(); + }); + } /** diff --git a/tests/Feature/Bank/YodleeApiTest.php b/tests/Feature/Bank/YodleeApiTest.php index 195e71efd7ec..489f06742158 100644 --- a/tests/Feature/Bank/YodleeApiTest.php +++ b/tests/Feature/Bank/YodleeApiTest.php @@ -37,6 +37,24 @@ class YodleeApiTest extends TestCase } + public function testCategoryPropertyExists() + { + $yodlee = new Yodlee('sbMem62e1e69547bfb2'); + + $transactions = $yodlee->getTransactionCategories(); + + $this->assertTrue(property_exists($transactions,'transactionCategory')); + + $t = collect($transactions->transactionCategory); + + $x = $t->firstWhere('highLevelCategoryId', 10000003); + + var_dump($x); + + $this->assertNotNull($x); + + } + public function testFunctionalMatching() { @@ -342,12 +360,11 @@ class YodleeApiTest extends TestCase $transactions = $yodlee->getTransactionCategories(); -// nlog($transactions); - $this->assertIsArray($transactions->transactionCategory); } + /** [2022-08-05 01:29:45] local.INFO: stdClass Object (