From 1fd78523092eb609c85f447441dcc8049e0ff064 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 30 Apr 2016 20:24:47 +0200 Subject: [PATCH] Fix query thing. --- app/Models/TransactionJournal.php | 2 + database/seeds/SplitDataSeeder.php | 159 +++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 91adf1e9a3..b6ed728650 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -325,6 +325,7 @@ class TransactionJournal extends TransactionJournalSupport */ public function scopeExpanded(EloquentBuilder $query) { + $query->distinct(); // left join transaction type: if (!self::isJoined($query, 'transaction_types')) { $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); @@ -363,6 +364,7 @@ class TransactionJournal extends TransactionJournalSupport // group: $query->groupBy('transaction_journals.id'); + $query->groupBy('source.id'); $query->with(['categories', 'budgets', 'attachments', 'bill']); diff --git a/database/seeds/SplitDataSeeder.php b/database/seeds/SplitDataSeeder.php index 43a5a7af72..45e1999fca 100644 --- a/database/seeds/SplitDataSeeder.php +++ b/database/seeds/SplitDataSeeder.php @@ -16,6 +16,9 @@ declare(strict_types = 1); * of the MIT license. See the LICENSE file for details. */ +use Carbon\Carbon; +use FireflyIII\Models\Transaction; +use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\Migration\TestData; use Illuminate\Database\Seeder; @@ -52,5 +55,161 @@ class SplitDataSeeder extends Seeder TestData::createExpenseAccounts($user); TestData::createRevenueAccounts($user); TestData::createPiggybanks($user); + + /* + * Create splitted expense of 66,- + */ + $today = new Carbon; + $today->subDays(6); + + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, // withdrawal + 'transaction_currency_id' => 1, + 'description' => 'Split Expense (journal)', + 'completed' => 1, + 'date' => $today->format('Y-m-d'), + ] + ); + + // split in 6 transactions (multiple destinations). 22,- each + // source is TestData Checking Account. + // also attach some budgets and stuff. + $destinations = ['Albert Heijn', 'PLUS', 'Apple']; + $budgets = ['Groceries', 'Groceries', 'Car']; + $categories = ['Bills', 'Bills', 'Car']; + $source = TestData::findAccount($user, 'TestData Checking Account'); + foreach ($destinations as $index => $dest) { + $bud = $budgets[$index]; + $cat = $categories[$index]; + $destination = TestData::findAccount($user, $dest); + + $one = Transaction::create( + [ + 'account_id' => $source->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '-22', + + ] + ); + + $two = Transaction::create( + [ + 'account_id' => $destination->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '22', + + ] + ); + + $one->budgets()->save(TestData::findBudget($user, $bud)); + $two->budgets()->save(TestData::findBudget($user, $bud)); + + $one->categories()->save(TestData::findCategory($user, $cat)); + $two->categories()->save(TestData::findCategory($user, $cat)); + } + + // create splitted income of 99,- + $today->addDay(); + + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 2, // expense + 'transaction_currency_id' => 1, + 'description' => 'Split Income (journal)', + 'completed' => 1, + 'date' => $today->format('Y-m-d'), + ] + ); + + // split in 6 transactions (multiple destinations). 22,- each + // source is TestData Checking Account. + // also attach some budgets and stuff. + $destinations = ['TestData Checking Account', 'TestData Savings', 'TestData Shared']; + $source = TestData::findAccount($user, 'Belastingdienst'); + $budgets = ['Groceries', 'Groceries', 'Car']; + $categories = ['Bills', 'Bills', 'Car']; + foreach ($destinations as $index => $dest) { + $bud = $budgets[$index]; + $cat = $categories[$index]; + $destination = TestData::findAccount($user, $dest); + + $one = Transaction::create( + [ + 'account_id' => $source->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '-33', + + ] + ); + + $two = Transaction::create( + [ + 'account_id' => $destination->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '33', + + ] + ); + + $one->budgets()->save(TestData::findBudget($user, $bud)); + $two->budgets()->save(TestData::findBudget($user, $bud)); + + $one->categories()->save(TestData::findCategory($user, $cat)); + $two->categories()->save(TestData::findCategory($user, $cat)); + } + + // create a splitted transfer of 57,- (19) + $today->addDay(); + + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 3, // transfer + 'transaction_currency_id' => 1, + 'description' => 'Split Transfer (journal)', + 'completed' => 1, + 'date' => $today->format('Y-m-d'), + ] + ); + + + $source = TestData::findAccount($user, 'Emergencies'); + $destinations = ['TestData Checking Account', 'TestData Savings', 'TestData Shared']; + $budgets = ['Groceries', 'Groceries', 'Car']; + $categories = ['Bills', 'Bills', 'Car']; + foreach ($destinations as $index => $dest) { + $bud = $budgets[$index]; + $cat = $categories[$index]; + $destination = TestData::findAccount($user, $dest); + + $one = Transaction::create( + [ + 'account_id' => $source->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '-19', + + ] + ); + + $two = Transaction::create( + [ + 'account_id' => $destination->id, + 'transaction_journal_id' => $journal->id, + 'amount' => '19', + + ] + ); + + $one->budgets()->save(TestData::findBudget($user, $bud)); + $two->budgets()->save(TestData::findBudget($user, $bud)); + + $one->categories()->save(TestData::findCategory($user, $cat)); + $two->categories()->save(TestData::findCategory($user, $cat)); + } + + } }