From bb2ac02b3f7c55ee254483d1d1f26e5f26099d97 Mon Sep 17 00:00:00 2001 From: Daniel Haven <49914607+danielh-official@users.noreply.github.com> Date: Tue, 19 Dec 2023 18:58:53 -0500 Subject: [PATCH 1/4] Update RepeatingTransactionExportTest.php - Add new test for tracking whether subtransactions are converted to transactions when exported --- .../RepeatingTransactionExportTest.php | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/tests/Feature/Exports/RepeatingTransactionExportTest.php b/tests/Feature/Exports/RepeatingTransactionExportTest.php index 561373d..78b12ae 100644 --- a/tests/Feature/Exports/RepeatingTransactionExportTest.php +++ b/tests/Feature/Exports/RepeatingTransactionExportTest.php @@ -81,3 +81,139 @@ ->and($result->toArray())->toEqual($expected); }); + +test('convert subtransactions into collection', function () { + $data = [ + 'id' => 1, + 'account_id' => 1, + 'payee_id' => 1, + 'category_id' => 1, + 'transfer_account_id' => null, + 'deleted' => false, + 'frequency' => 'monthly', + 'date_first' => '2021-01-01', + 'date_next' => '2021-01-01', + 'amount' => -1000, + 'memo' => 'Parent Memo Test', + 'flag_color' => 'red', + 'subtransactions' => [ + [ + 'id' => 1, + 'scheduled_transaction_id' => 1, + 'amount' => -500, + 'memo' => 'Test', + 'payee_id' => 1, + 'category_id' => 1, + 'transfer_account_id' => null, + 'deleted' => false, + ], + [ + 'id' => 2, + 'scheduled_transaction_id' => 1, + 'amount' => -500, + 'memo' => 'Test', + 'payee_id' => 2, + 'category_id' => 2, + 'transfer_account_id' => null, + 'deleted' => false, + ] + ], + ]; + + $categories = collect([ + [ + 'id' => '1', + 'name' => 'Test', + 'category_group_name' => 'Test Group', + 'deleted' => false, + ], + [ + 'id' => '2', + 'name' => 'Test 2', + 'category_group_name' => 'Test Group 2', + 'deleted' => false, + ] + ]); + + $payees = collect([ + [ + 'id' => '1', + 'name' => 'Test', + 'deleted' => false, + ], + [ + 'id' => '2', + 'name' => 'Test 2', + 'deleted' => false, + ] + ]); + + $accounts = collect([ + [ + 'id' => '1', + 'name' => 'Test', + 'deleted' => false, + ], + ]); + + $repeatingTransactionExport = resolve(RepeatingTransactionExport::class, [ + 'scheduledTransactions' => collect([$data]), + 'categories' => $categories, + 'payees' => $payees, + 'accounts' => $accounts, + ]); + + $result = $repeatingTransactionExport->collection(); + + $expected = [ + [ + 'frequency' => 'monthly', + 'date_first' => '2021-01-01', + 'date_next' => '2021-01-01', + 'amount' => .5, + 'memo' => 'Test', + 'flag_color' => 'red', + 'account_name' => 'Test', + 'payee_name' => 'Test', + 'category_name' => 'Test', + 'category_group_name' => 'Test Group', + 'transfer_account_name' => null, + 'raw_amount' => -.5, + 'inflow_outflow' => 'outflow', + 'raw_amount_per_week' => -0.13, + 'raw_amount_per_month' => -0.5, + 'raw_amount_per_year' => -6.0, + 'amount_per_week' => 0.13, + 'amount_per_month' => 0.5, + 'amount_per_year' => 6.0, + 'parent_memo' => 'Parent Memo Test', + 'parent_payee_name' => 'Test', + ], + [ + 'frequency' => 'monthly', + 'date_first' => '2021-01-01', + 'date_next' => '2021-01-01', + 'amount' => .5, + 'memo' => 'Test', + 'flag_color' => 'red', + 'account_name' => 'Test', + 'payee_name' => 'Test 2', + 'category_name' => 'Test 2', + 'category_group_name' => 'Test Group 2', + 'transfer_account_name' => null, + 'raw_amount' => -.5, + 'inflow_outflow' => 'outflow', + 'raw_amount_per_week' => -0.13, + 'raw_amount_per_month' => -0.5, + 'raw_amount_per_year' => -6.0, + 'amount_per_week' => 0.13, + 'amount_per_month' => 0.5, + 'amount_per_year' => 6.0, + 'parent_memo' => 'Parent Memo Test', + 'parent_payee_name' => 'Test', + ], + ]; + + expect($result)->toBeInstanceOf(Collection::class) + ->and($result->toArray())->toEqual($expected); +}); From c3d245ae8b747d75a76dc81debec129c4d300941 Mon Sep 17 00:00:00 2001 From: Daniel Haven <49914607+danielh-official@users.noreply.github.com> Date: Tue, 19 Dec 2023 18:59:04 -0500 Subject: [PATCH 2/4] Update YnabScheduledTransactionService.php --- .../YnabScheduledTransactionService.php | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/app/Services/YnabScheduledTransactionService.php b/app/Services/YnabScheduledTransactionService.php index 1c46bd1..e222d44 100644 --- a/app/Services/YnabScheduledTransactionService.php +++ b/app/Services/YnabScheduledTransactionService.php @@ -35,19 +35,52 @@ public function merge(): \Illuminate\Support\Collection $transferAccountId = data_get($scheduledTransaction, 'transfer_account_id'); $transferAccount = $this->accounts->firstWhere('id', $transferAccountId); - $data->push([ - 'deleted' => data_get($scheduledTransaction, 'deleted'), - 'frequency' => data_get($scheduledTransaction, 'frequency'), - 'date_first' => data_get($scheduledTransaction, 'date_first'), - 'date_next' => data_get($scheduledTransaction, 'date_next'), - 'amount' => data_get($scheduledTransaction, 'amount'), - 'memo' => data_get($scheduledTransaction, 'memo'), - 'flag_color' => data_get($scheduledTransaction, 'flag_color'), - 'account' => $account, - 'payee' => $payee, - 'category' => $category, - 'transfer_account' => $transferAccount, - ]); + $subtransactions = data_get($scheduledTransaction, 'subtransactions'); + + if ($subtransactions) { + foreach ($subtransactions as $subtransaction) { + $subtransactionCategoryId = data_get($subtransaction, 'category_id'); + $subtransactionCategory = $this->categories->firstWhere('id', $subtransactionCategoryId); + + $subtransactionTransferAccountId = data_get($subtransaction, 'transfer_account_id'); + $subtransactionTransferAccount = $this->accounts->firstWhere('id', $subtransactionTransferAccountId); + + $subtransactionPayeeId = data_get($subtransaction, 'payee_id'); + $subtransactionPayee = $this->payees->firstWhere('id', $subtransactionPayeeId); + + $data->push([ + 'deleted' => data_get($scheduledTransaction, 'deleted'), + 'frequency' => data_get($scheduledTransaction, 'frequency'), + 'date_first' => data_get($scheduledTransaction, 'date_first'), + 'date_next' => data_get($scheduledTransaction, 'date_next'), + 'amount' => data_get($subtransaction, 'amount'), + 'parent_memo' => data_get($scheduledTransaction, 'memo'), + 'memo' => data_get($subtransaction, 'memo'), + 'flag_color' => data_get($scheduledTransaction, 'flag_color'), + 'account' => $account, + 'payee' => $subtransactionPayee, + 'category' => $subtransactionCategory, + 'transfer_account' => $subtransactionTransferAccount, + 'parent_payee' => $payee, + ]); + } + } else { + $data->push([ + 'deleted' => data_get($scheduledTransaction, 'deleted'), + 'frequency' => data_get($scheduledTransaction, 'frequency'), + 'date_first' => data_get($scheduledTransaction, 'date_first'), + 'date_next' => data_get($scheduledTransaction, 'date_next'), + 'amount' => data_get($scheduledTransaction, 'amount'), + 'parent_memo' => null, + 'memo' => data_get($scheduledTransaction, 'memo'), + 'flag_color' => data_get($scheduledTransaction, 'flag_color'), + 'account' => $account, + 'payee' => $payee, + 'category' => $category, + 'transfer_account' => $transferAccount, + 'parent_payee' => null, + ]); + } } return $data; From fc2b89c96d95f13dd88246378d555d62eea74151 Mon Sep 17 00:00:00 2001 From: Daniel Haven <49914607+danielh-official@users.noreply.github.com> Date: Tue, 19 Dec 2023 18:59:08 -0500 Subject: [PATCH 3/4] Update RepeatingTransactionExport.php --- app/Exports/RepeatingTransactionExport.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/Exports/RepeatingTransactionExport.php b/app/Exports/RepeatingTransactionExport.php index 300de7a..97ab3bd 100644 --- a/app/Exports/RepeatingTransactionExport.php +++ b/app/Exports/RepeatingTransactionExport.php @@ -85,6 +85,9 @@ private function parseLiveData(): Collection $categoryName = data_get($transaction, 'category.name'); $categoryGroupName = data_get($transaction, 'category.category_group_name'); + $parentMemo = data_get($transaction, 'parent_memo'); + $parentPayeeName = data_get($transaction, 'parent_payee.name'); + $data->push([ 'date_first' => $dateFirst->format('Y-m-d'), 'date_next' => $dateNext->format('Y-m-d'), @@ -92,10 +95,12 @@ private function parseLiveData(): Collection 'raw_amount' => $amount, 'amount' => abs($amount), 'inflow_outflow' => $amount < 0 ? 'outflow' : 'inflow', + 'parent_memo' => $parentMemo, 'memo' => $memo, 'flag_color' => $flagColor, 'account_name' => $accountName, 'payee_name' => $payeeName, + 'parent_payee_name' => $parentPayeeName, 'category_name' => $categoryName, 'category_group_name' => $categoryGroupName, 'transfer_account_name' => $transferAccountName, @@ -132,10 +137,12 @@ public function headings(): array 'Raw Amount', 'Amount', 'Inflow/Outflow', + 'Parent Memo', 'Memo', 'Flag Color', 'Account Name', 'Payee Name', + 'Parent Payee Name', 'Category Name', 'Category Group Name', 'Transfer Account Name', From 75949dd550ecb2e3505037dc51453cd9d8fabe3d Mon Sep 17 00:00:00 2001 From: Daniel Haven <49914607+danielh-official@users.noreply.github.com> Date: Tue, 19 Dec 2023 18:59:42 -0500 Subject: [PATCH 4/4] Update RepeatingTransactionExportTest.php --- tests/Feature/Exports/RepeatingTransactionExportTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Feature/Exports/RepeatingTransactionExportTest.php b/tests/Feature/Exports/RepeatingTransactionExportTest.php index 78b12ae..161580a 100644 --- a/tests/Feature/Exports/RepeatingTransactionExportTest.php +++ b/tests/Feature/Exports/RepeatingTransactionExportTest.php @@ -74,6 +74,8 @@ 'amount_per_week' => 0.25, 'amount_per_month' => 1.0, 'amount_per_year' => 12.0, + 'parent_memo' => null, + 'parent_payee_name' => null, ], ];