From 96740aaac42c61dce1a8fa8c7c3cbe789d5216b0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 9 Oct 2016 17:06:52 +0200 Subject: [PATCH] Extend transaction model for #351 --- app/Crud/Split/Journal.php | 10 +++--- app/Support/Migration/TestData.php | 19 +++++++--- ...10_09_150037_expand_transactions_table.php | 35 +++++++++++++++++++ 3 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 database/migrations/2016_10_09_150037_expand_transactions_table.php diff --git a/app/Crud/Split/Journal.php b/app/Crud/Split/Journal.php index b87600ea44..f07d684fa4 100644 --- a/app/Crud/Split/Journal.php +++ b/app/Crud/Split/Journal.php @@ -64,7 +64,7 @@ class Journal implements JournalInterface * * @return Collection */ - public function storeTransaction(TransactionJournal $journal, array $transaction): Collection + public function storeTransaction(TransactionJournal $journal, array $transaction, int $identifier): Collection { // store accounts (depends on type) list($sourceAccount, $destinationAccount) = $this->storeAccounts($journal->transactionType->type, $transaction); @@ -73,11 +73,11 @@ class Journal implements JournalInterface /** @var Transaction $one */ $one = Transaction::create( ['account_id' => $sourceAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $transaction['amount'] * -1, - 'description' => $transaction['description']] + 'description' => $transaction['description'], 'identifier' => $identifier] ); $two = Transaction::create( ['account_id' => $destinationAccount->id, 'transaction_journal_id' => $journal->id, 'amount' => $transaction['amount'], - 'description' => $transaction['description']] + 'description' => $transaction['description'], 'identifier' => $identifier] ); if (strlen($transaction['category']) > 0) { @@ -118,8 +118,10 @@ class Journal implements JournalInterface // delete original transactions, and recreate them. $journal->transactions()->delete(); + $identifier = 0; foreach ($data['transactions'] as $transaction) { - $this->storeTransaction($journal, $transaction); + $this->storeTransaction($journal, $transaction, $identifier); + $identifier++; } $journal->completed = true; diff --git a/app/Support/Migration/TestData.php b/app/Support/Migration/TestData.php index b0e2748c66..97c46c98d0 100644 --- a/app/Support/Migration/TestData.php +++ b/app/Support/Migration/TestData.php @@ -467,7 +467,7 @@ class TestData private function createMultiDeposits() { foreach ($this->data['multi-deposits'] as $deposit) { - $journalId = DB::table('transaction_journals')->insertGetId( + $journalId = DB::table('transaction_journals')->insertGetId( [ 'created_at' => $this->time, 'updated_at' => $this->time, @@ -485,6 +485,7 @@ class TestData 'tag_count' => 0, ] ); + $identifier = 0; foreach ($deposit['source_ids'] as $index => $source) { $description = $deposit['description'] . ' (#' . ($index + 1) . ')'; $amount = $deposit['amounts'][$index]; @@ -496,6 +497,7 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount, + 'identifier' => $identifier, ] ); $second = DB::table('transactions')->insertGetId( @@ -506,8 +508,10 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount * -1, + 'identifier' => $identifier, ] ); + $identifier++; // link first and second to budget and category, if present. if (isset($deposit['category_ids'][$index])) { @@ -531,7 +535,7 @@ class TestData private function createMultiTransfers() { foreach ($this->data['multi-transfers'] as $transfer) { - $journalId = DB::table('transaction_journals')->insertGetId( + $journalId = DB::table('transaction_journals')->insertGetId( [ 'created_at' => $this->time, 'updated_at' => $this->time, @@ -549,6 +553,7 @@ class TestData 'tag_count' => 0, ] ); + $identifier = 0; foreach ($transfer['destination_ids'] as $index => $destination) { $description = $transfer['description'] . ' (#' . ($index + 1) . ')'; $amount = $transfer['amounts'][$index]; @@ -561,6 +566,7 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount * -1, + 'identifier' => $identifier, ] ); $second = DB::table('transactions')->insertGetId( @@ -571,9 +577,10 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount, + 'identifier' => $identifier, ] ); - + $identifier++; if (isset($transfer['category_ids'][$index])) { DB::table('category_transaction')->insert( [ @@ -598,7 +605,7 @@ class TestData private function createMultiWithdrawals() { foreach ($this->data['multi-withdrawals'] as $withdrawal) { - $journalId = DB::table('transaction_journals')->insertGetId( + $journalId = DB::table('transaction_journals')->insertGetId( [ 'created_at' => $this->time, 'updated_at' => $this->time, @@ -616,6 +623,7 @@ class TestData 'tag_count' => 0, ] ); + $identifier = 0; foreach ($withdrawal['destination_ids'] as $index => $destination) { $description = $withdrawal['description'] . ' (#' . ($index + 1) . ')'; $amount = $withdrawal['amounts'][$index]; @@ -627,6 +635,7 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount * -1, + 'identifier' => $identifier, ] ); $second = DB::table('transactions')->insertGetId( @@ -637,8 +646,10 @@ class TestData 'transaction_journal_id' => $journalId, 'description' => $description, 'amount' => $amount, + 'identifier' => $identifier, ] ); + $identifier++; // link first and second to budget and category, if present. if (isset($withdrawal['budget_ids'][$index])) { DB::table('budget_transaction')->insert( diff --git a/database/migrations/2016_10_09_150037_expand_transactions_table.php b/database/migrations/2016_10_09_150037_expand_transactions_table.php new file mode 100644 index 0000000000..96f7c30d1e --- /dev/null +++ b/database/migrations/2016_10_09_150037_expand_transactions_table.php @@ -0,0 +1,35 @@ +smallInteger('identifier', false, false)->default(0); + } + ); + } +}