Skip to content

Commit

Permalink
Merge pull request #7 from danielh-official/6-represent-subtransactions
Browse files Browse the repository at this point in the history
6 represent subtransactions
  • Loading branch information
danielh-official committed Dec 20, 2023
2 parents 77fd0a9 + 75949dd commit 88a0fc2
Show file tree
Hide file tree
Showing 3 changed files with 191 additions and 13 deletions.
7 changes: 7 additions & 0 deletions app/Exports/RepeatingTransactionExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,22 @@ 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'),
'frequency' => $frequency->value,
'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,
Expand Down Expand Up @@ -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',
Expand Down
59 changes: 46 additions & 13 deletions app/Services/YnabScheduledTransactionService.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
138 changes: 138 additions & 0 deletions tests/Feature/Exports/RepeatingTransactionExportTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,148 @@
'amount_per_week' => 0.25,
'amount_per_month' => 1.0,
'amount_per_year' => 12.0,
'parent_memo' => null,
'parent_payee_name' => null,
],
];

expect($result)->toBeInstanceOf(Collection::class)
->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);
});

0 comments on commit 88a0fc2

Please sign in to comment.