From 4ef840e210fae62f4420dbaa6b224dfcb3f59548 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 5 Feb 2016 15:20:44 +0100 Subject: [PATCH] More test data tweaks. --- app/Models/TransactionJournal.php | 2 +- app/Support/Migration/TestData.php | 469 +++++++++- app/Support/Steam.php | 2 +- database/seeds/OldTestDataSeeder.php | 68 -- database/seeds/TestDataSeeder.php | 17 +- database/seeds/VisualTestDataSeeder.php | 1043 ----------------------- 6 files changed, 439 insertions(+), 1162 deletions(-) delete mode 100644 database/seeds/OldTestDataSeeder.php delete mode 100644 database/seeds/VisualTestDataSeeder.php diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 25728ed5e3..f00bf0ea58 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -158,7 +158,7 @@ class TransactionJournal extends Model $transaction = $this->transactions->sortByDesc('amount')->first(); $amount = $transaction->amount; if ($this->isWithdrawal()) { - $amount = $amount * -1; + $amount = bcmul($amount, '-1'); } $cache->store($amount); diff --git a/app/Support/Migration/TestData.php b/app/Support/Migration/TestData.php index da34e4061c..7a8548faed 100644 --- a/app/Support/Migration/TestData.php +++ b/app/Support/Migration/TestData.php @@ -39,6 +39,8 @@ use Log; */ class TestData { + + /** * @param User $user */ @@ -99,7 +101,7 @@ class TestData [ 'account_id' => $fromAccount->id, 'transaction_journal_id' => $journal->id, - 'amount' => -100, + 'amount' => '-100', ] ); @@ -229,6 +231,88 @@ class TestData } } + /** + * @param User $user + * @param Carbon $date + * + * @return static + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + public static function createCar(User $user, Carbon $date) + { + // twice: + $date = new Carbon($date->format('Y-m') . '-10'); // paid on 10th + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'Shell'); + $category = Category::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $user->id]); + $amount = strval(rand(4000, 5000) / 100); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => 'Bought gas', + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + // and again! + $date = new Carbon($date->format('Y-m') . '-20'); // paid on 20th + $amount = rand(4000, 5000) / 100; + + + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => 'Gas for car', + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount * -1, + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + + // and again! + + return $journal; + } + /** * @param User $user */ @@ -238,6 +322,64 @@ class TestData Category::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $user->id]); } + /** + * @param Carbon $date + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + public static function createDrinksAndOthers(User $user, Carbon $date) + { + $start = clone $date; + $end = clone $date; + $today = new Carbon; + $start->startOfMonth(); + $end->endOfMonth(); + $current = clone $start; + while ($current < $end && $current < $today) { + + // weekly drink: + $thisDate = clone $current; + $thisDate->addDay(); + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'Cafe Central'); + $category = Category::firstOrCreateEncrypted(['name' => 'Drinks', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Going out', 'user_id' => $user->id]); + $amount = strval(rand(1500, 3600) / 100); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => 'Going out for drinks', + 'completed' => 1, + 'date' => $thisDate, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + // shopping at some (online) shop: + + + $current->addWeek(); + } + } + /** * @param User $user */ @@ -263,53 +405,61 @@ class TestData /** * @param User $user - * @param string $description * @param Carbon $date - * @param string $amount - * - * @return TransactionJournal + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - public static function createRent(User $user, string $description, Carbon $date, string $amount): TransactionJournal + public static function createGroceries(User $user, Carbon $date) { - $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($user, 'Land lord'); - $category = Category::firstOrCreateEncrypted(['name' => 'Rent', 'user_id' => $user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $user->id]); - $journal = TransactionJournal::create( - [ - 'user_id' => $user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'bill_id' => 1, - 'description' => $description, - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, + $start = clone $date; + $end = clone $date; + $today = new Carbon; + $start->startOfMonth(); + $end->endOfMonth(); - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $stores = ['Albert Heijn', 'PLUS', 'Bakker']; + $descriptions = ['Groceries', 'Bought some groceries', 'Got groceries']; + $category = Category::firstOrCreateEncrypted(['name' => 'Daily groceries', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Groceries', 'user_id' => $user->id]); - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); + $current = clone $start; + while ($current < $end && $current < $today) { + // daily groceries: + $amount = rand(1500, 2500) / 100; + $toAccount = TestData::findAccount($user, $stores[rand(0, count($stores) - 1)]); - return $journal; + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => $descriptions[rand(0, count($descriptions) - 1)], + 'completed' => 1, + 'date' => $current, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount * -1, + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + $current->addDay(); + } } - /** * @param User $user * @param string $description @@ -344,7 +494,7 @@ class TestData [ 'account_id' => $fromAccount->id, 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, + 'amount' => bcmul($amount, '-1'), ] ); @@ -500,6 +650,104 @@ class TestData } + /** + * @param $description + * @param Carbon $date + * @param $amount + * + * @return TransactionJournal + */ + public static function createPower(User $user, string $description, Carbon $date, string $amount) + { + $date = new Carbon($date->format('Y-m') . '-06'); // paid on 10th + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'Greenchoice'); + $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $user->id]); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => $description, + 'completed' => 1, + 'date' => $date, + ] + ); + if ($journal->getErrors()->count() > 0) { + echo $journal->getErrors()->first(); + } + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + return $journal; + + } + + /** + * @param User $user + * @param string $description + * @param Carbon $date + * @param string $amount + * + * @return TransactionJournal + */ + public static function createRent(User $user, string $description, Carbon $date, string $amount): TransactionJournal + { + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'Land lord'); + $category = Category::firstOrCreateEncrypted(['name' => 'Rent', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $user->id]); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'bill_id' => 1, + 'description' => $description, + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + return $journal; + + } + /** * @param User $user */ @@ -599,6 +847,99 @@ class TestData ); } + /** + * @param Carbon $date + * + * @return TransactionJournal + */ + public static function createSavings(User $user, Carbon $date): TransactionJournal + { + $date = new Carbon($date->format('Y-m') . '-24'); // paid on 24th. + $toAccount = TestData::findAccount($user, 'TestData Savings'); + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $category = Category::firstOrCreateEncrypted(['name' => 'Money management', 'user_id' => $user->id]); + // create journal: + + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 3, + 'transaction_currency_id' => 1, + 'description' => 'Save money', + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => -150, + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => 150, + + ] + ); + $journal->categories()->save($category); + + return $journal; + + } + + /** + * @param User $user + * @param string $description + * @param Carbon $date + * @param string $amount + * + * @return static + */ + public static function createTV(User $user, string $description, Carbon $date, string $amount) + { + $date = new Carbon($date->format('Y-m') . '-15'); // paid on 10th + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'XS4All'); + $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $user->id]); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => $description, + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + return $journal; + + } + /** * @param User $user * @param Carbon|null $date @@ -638,6 +979,54 @@ class TestData return $user; } + /** + * @param User $user + * @param string $description + * @param Carbon $date + * @param string $amount + * + * @return static + */ + public static function createWater(User $user, string $description, Carbon $date, string $amount): TransactionJournal + { + $date = new Carbon($date->format('Y-m') . '-10'); // paid on 10th + $fromAccount = TestData::findAccount($user, 'TestData Checking Account'); + $toAccount = TestData::findAccount($user, 'Vitens'); + $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $user->id]); + $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $user->id]); + $journal = TransactionJournal::create( + [ + 'user_id' => $user->id, + 'transaction_type_id' => 1, + 'transaction_currency_id' => 1, + 'description' => $description, + 'completed' => 1, + 'date' => $date, + ] + ); + Transaction::create( + [ + 'account_id' => $fromAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => bcmul($amount, '-1'), + + ] + ); + Transaction::create( + [ + 'account_id' => $toAccount->id, + 'transaction_journal_id' => $journal->id, + 'amount' => $amount, + + ] + ); + $journal->categories()->save($category); + $journal->budgets()->save($budget); + + return $journal; + + } + /** * @param User $user * @param $name diff --git a/app/Support/Steam.php b/app/Support/Steam.php index e896c65c8c..3592c1cd88 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -133,7 +133,7 @@ class Steam $result = []; foreach ($balances as $entry) { $accountId = intval($entry->account_id); - $balance = round($entry->aggregate, 2); + $balance = $entry->aggregate; $result[$accountId] = $balance; } diff --git a/database/seeds/OldTestDataSeeder.php b/database/seeds/OldTestDataSeeder.php deleted file mode 100644 index 856ffe164c..0000000000 --- a/database/seeds/OldTestDataSeeder.php +++ /dev/null @@ -1,68 +0,0 @@ -start = Carbon::create()->subYear()->startOfYear(); - - } - - /** - * Run the database seeds. - * - * @return void - */ - public function run() - { - // create budget limits for these budgets -// TestData::createBudgetLimit($user, new Carbon, 'Groceries', 400); -// TestData::createBudgetLimit($user, new Carbon, 'Bills', 1000); -// TestData::createBudgetLimit($user, new Carbon, 'Car', 100); - - // create some categories for user #1 - $this->createCategories($user); - - // create some piggy banks for user #1 - TestData::createPiggybanks($user); - - // create some expense accounts for user #1 - $this->createExpenseAccounts($user); - - // create some revenue accounts for user #1 - $this->createRevenueAccounts($user); - - // create journal + attachment: - TestData::createAttachments($user, $this->start); - - // create opening balance for savings account: - $this->openingBalanceSavings($user); - - // need at least one rule group and one rule: - TestData::createRules($user); - - // create a tag: - TestData::createTags($user); - } - -} diff --git a/database/seeds/TestDataSeeder.php b/database/seeds/TestDataSeeder.php index fb281c39b3..663f5656e5 100644 --- a/database/seeds/TestDataSeeder.php +++ b/database/seeds/TestDataSeeder.php @@ -64,25 +64,24 @@ class TestDataSeeder extends Seeder // pay bills: TestData::createRent($user, 'Rent for ' . $month, $current, '800'); - // $this->createWater('Water bill for ' . $month, $current, 15); - // $this->createTV('TV bill for ' . $month, $current, 60); - // $this->createPower('Power bill for ' . $month, $current, 120); - + TestData::createWater($user, 'Water bill for ' . $month, $current, '15'); + TestData::createTV($user, 'TV bill for ' . $month, $current, '60'); + TestData::createPower($user, 'Power bill for ' . $month, $current, '120'); // pay daily groceries: - // $this->createGroceries($current); + TestData::createGroceries($user, $current); // create tag (each type of tag, for date): - // TestData::createTags($this->user, $current); + TestData::createTags($user, $current); // go out for drinks: - // $this->createDrinksAndOthers($current); + TestData::createDrinksAndOthers($user, $current); // save money every month: - // $this->createSavings($current); + TestData::createSavings($user, $current); // buy gas for the car every month: - // $this->createCar($current); + TestData::createCar($user, $current); // create budget limits. TestData::createBudgetLimit($user, $current, 'Groceries', '400'); diff --git a/database/seeds/VisualTestDataSeeder.php b/database/seeds/VisualTestDataSeeder.php deleted file mode 100644 index 0db640c9b0..0000000000 --- a/database/seeds/VisualTestDataSeeder.php +++ /dev/null @@ -1,1043 +0,0 @@ -start = Carbon::create()->subYears(2)->startOfYear(); - $this->end = Carbon::now(); - - } - - /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - public function run() - { - $this->createUsers(); - - // create accounts: - TestData::createAssetAccounts($this->user); - $this->createExpenseAccounts(); - $this->createRevenueAccounts(); - TestData::createBills($this->user); - TestData::createPiggybanks($this->user); - - // create some budgets for user - TestData::createBudgets($this->user); - - $this->createRules(); - - // preference to only see account #1 on frontpage. - $this->createPreferences(); - - // dates: - $start = Carbon::now()->subYears(2)->startOfMonth(); - $end = Carbon::now()->endOfDay(); - - // create journal + attachment: - TestData::createAttachments($this->user, $start); - - - $current = clone $start; - while ($current < $end) { - $month = $current->format('F Y'); - // create salaries: - $this->createIncome('Salary ' . $month, $current, rand(2000, 2100)); - - // pay bills: - $this->createRent('Rent for ' . $month, $current, 800); - $this->createWater('Water bill for ' . $month, $current, 15); - $this->createTV('TV bill for ' . $month, $current, 60); - $this->createPower('Power bill for ' . $month, $current, 120); - - - // pay daily groceries: - $this->createGroceries($current); - - // create tag (each type of tag, for date): - TestData::createTags($this->user, $current); - - // go out for drinks: - $this->createDrinksAndOthers($current); - - // save money every month: - $this->createSavings($current); - - // buy gas for the car every month: - $this->createCar($current); - - // budget limit for this month, on "Groceries". - TestData::createBudgetLimit($this->user, $current, 'Groceries', 400); - TestData::createBudgetLimit($this->user, $current, 'Bills', 1000); - TestData::createBudgetLimit($this->user, $current, 'Car', 100); - - echo 'Created test data for ' . $month . "\n"; - $current->addMonth(); - } - - } - - /** - * @param $date - * - * @return static - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - protected function createCar($date) - { - // twice: - $date = new Carbon($date->format('Y-m') . '-10'); // paid on 10th - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($this->user, 'Shell'); - $category = Category::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Car', 'user_id' => $this->user->id]); - $amount = rand(4000, 5000) / 100; - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => 'Bought gas', - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - // and again! - $date = new Carbon($date->format('Y-m') . '-20'); // paid on 20th - $amount = rand(4000, 5000) / 100; - - - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => 'Gas for car', - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - - // and again! - - return $journal; - } - - /** - * @param Carbon $date - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - protected function createDrinksAndOthers(Carbon $date) - { - $start = clone $date; - $end = clone $date; - $today = new Carbon; - $start->startOfMonth(); - $end->endOfMonth(); - $current = clone $start; - while ($current < $end && $current < $today) { - - // weekly drink: - $thisDate = clone $current; - $thisDate->addDay(); - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($this->user, 'Cafe Central'); - $category = Category::firstOrCreateEncrypted(['name' => 'Drinks', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Going out', 'user_id' => $this->user->id]); - $amount = rand(1500, 3600) / 100; - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => 'Going out for drinks', - 'completed' => 1, - 'date' => $thisDate, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - // shopping at some (online) shop: - - - $current->addWeek(); - } - } - - protected function createExpenseAccounts() - { - $expenses = ['Adobe', 'Google', 'Vitens', 'Albert Heijn', 'PLUS', 'Apple', 'Bakker', 'Belastingdienst', 'bol.com', 'Cafe Central', 'conrad.nl', - 'coolblue', 'Shell', - 'DUO', 'Etos', 'FEBO', 'Greenchoice', 'Halfords', 'XS4All', 'iCentre', 'Jumper', 'Land lord']; - foreach ($expenses as $name) { - // create account: - Account::create( - [ - 'user_id' => $this->user->id, - 'account_type_id' => 4, - 'name' => $name, - 'active' => 1, - 'encrypted' => 1, - ] - ); - } - - } - - /** - * @param Carbon $date - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - protected function createGroceries(Carbon $date) - { - $start = clone $date; - $end = clone $date; - $today = new Carbon; - $start->startOfMonth(); - $end->endOfMonth(); - - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $stores = ['Albert Heijn', 'PLUS', 'Bakker']; - $descriptions = ['Groceries', 'Bought some groceries', 'Got groceries']; - $category = Category::firstOrCreateEncrypted(['name' => 'Daily groceries', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Groceries', 'user_id' => $this->user->id]); - - $current = clone $start; - while ($current < $end && $current < $today) { - // daily groceries: - $amount = rand(1500, 2500) / 100; - $toAccount = TestData::findAccount($this->user, $stores[rand(0, count($stores) - 1)]); - - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => $descriptions[rand(0, count($descriptions) - 1)], - 'completed' => 1, - 'date' => $current, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - - $current->addDay(); - } - } - - - - /** - * @param $description - * @param Carbon $date - * @param $amount - * - * @return TransactionJournal - */ - protected function createPower($description, Carbon $date, $amount) - { - $date = new Carbon($date->format('Y-m') . '-06'); // paid on 10th - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($this->user, 'Greenchoice'); - $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $this->user->id]); - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => $description, - 'completed' => 1, - 'date' => $date, - ] - ); - if($journal->getErrors()->count() > 0) { - echo $journal->getErrors()->first(); - } - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - return $journal; - - } - - protected function createPreferences() - { - $preference = new Preference; - $preference->name = 'frontPageAccounts'; - $preference->data = [1]; - $preference->user()->associate($this->user); - $preference->save(); - } - - - /** - * - */ - protected function createRevenueAccounts() - { - $revenues = ['Job', 'Belastingdienst', 'Bank', 'KPN', 'Google']; - foreach ($revenues as $name) { - // create account: - Account::create( - [ - 'user_id' => $this->user->id, - 'account_type_id' => 5, - 'name' => $name, - 'active' => 1, - 'encrypted' => 1, - ] - ); - } - } - - /** - * @param Carbon $date - * - * @return TransactionJournal - */ - protected function createSavings(Carbon $date) - { - $date = new Carbon($date->format('Y-m') . '-24'); // paid on 24th. - $toAccount = TestData::findAccount($this->user, 'TestData Savings'); - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $category = Category::firstOrCreateEncrypted(['name' => 'Money management', 'user_id' => $this->user->id]); - // create journal: - - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 3, - 'transaction_currency_id' => 1, - 'description' => 'Save money', - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => -150, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => 150, - - ] - ); - $journal->categories()->save($category); - - return $journal; - - } - - /** - * @param $description - * @param Carbon $date - * @param $amount - * - * @return TransactionJournal - */ - protected function createTV($description, Carbon $date, $amount) - { - $date = new Carbon($date->format('Y-m') . '-15'); // paid on 10th - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($this->user, 'XS4All'); - $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $this->user->id]); - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => $description, - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - return $journal; - - } - - /** - * - */ - protected function createUsers() - { - User::create(['email' => 'thegrumpydictator@gmail.com', 'password' => bcrypt('james'), 'reset' => null, 'remember_token' => null]); - $this->user = User::whereEmail('thegrumpydictator@gmail.com')->first(); - - // create rights: - $role = Role::find(1); - $this->user->roles()->save($role); - - } - - /** - * @param $description - * @param Carbon $date - * @param $amount - * - * @return TransactionJournal - */ - protected function createWater($description, Carbon $date, $amount) - { - $date = new Carbon($date->format('Y-m') . '-10'); // paid on 10th - $fromAccount = TestData::findAccount($this->user, 'TestData Checking Account'); - $toAccount = TestData::findAccount($this->user, 'Vitens'); - $category = Category::firstOrCreateEncrypted(['name' => 'House', 'user_id' => $this->user->id]); - $budget = Budget::firstOrCreateEncrypted(['name' => 'Bills', 'user_id' => $this->user->id]); - $journal = TransactionJournal::create( - [ - 'user_id' => $this->user->id, - 'transaction_type_id' => 1, - 'transaction_currency_id' => 1, - 'description' => $description, - 'completed' => 1, - 'date' => $date, - ] - ); - Transaction::create( - [ - 'account_id' => $fromAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount * -1, - - ] - ); - Transaction::create( - [ - 'account_id' => $toAccount->id, - 'transaction_journal_id' => $journal->id, - 'amount' => $amount, - - ] - ); - $journal->categories()->save($category); - $journal->budgets()->save($budget); - - return $journal; - - } - - /** - * @param $name - * - * @return Bill|null - */ - protected function findBill($name) - { - /** @var Bill $bill */ - foreach (Bill::get() as $bill) { - if ($bill->name == $name && $this->user->id == $bill->user_id) { - return $bill; - break; - } - } - - return null; - } - - /** - * @param $name - * - * @return Category|null - */ - protected function findCategory($name) - { - - /** @var Category $category */ - foreach (Category::get() as $category) { - if ($category->name == $name && $this->user->id == $category->user_id) { - return $category; - break; - } - } - - return null; - } - - /** - * @param $name - * - * @return PiggyBank|null - */ - protected function findPiggyBank($name) - { - - /** @var Budget $budget */ - foreach (PiggyBank::get() as $piggyBank) { - $account = $piggyBank->account()->first(); - if ($piggyBank->name == $name && $this->user->id == $account->user_id) { - return $piggyBank; - break; - } - } - - return null; - } - - /** - * @param $tagName - * - * @return Tag|null - * @internal param $tag - */ - protected function findTag($tagName) - { - /** @var Tag $tag */ - foreach (Tag::get() as $tag) { - if ($tag->tag == $tagName && $this->user->id == $tag->user_id) { - return $tag; - break; - } - } - - return null; - } - - /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - */ - private function createRules() - { - // three rule groups to get started. - $ruleGroup = new RuleGroup; - $ruleGroup->user()->associate($this->user); - $ruleGroup->order = 1; - $ruleGroup->active = 1; - $ruleGroup->title = 'Default rules'; - $ruleGroup->description = 'All your rules not in a particular group.'; - $ruleGroup->save(); - unset($ruleGroup); - - $ruleGroup = new RuleGroup; - $ruleGroup->user()->associate($this->user); - $ruleGroup->order = 2; - $ruleGroup->active = 1; - $ruleGroup->title = 'Empty rule group'; - $ruleGroup->description = 'Intentionally has no rules.'; - $ruleGroup->save(); - unset($ruleGroup); - - - $ruleGroup = new RuleGroup; - $ruleGroup->user()->associate($this->user); - $ruleGroup->order = 3; - $ruleGroup->active = 1; - $ruleGroup->title = 'Rules for bills'; - $ruleGroup->description = 'All rules for bills and recurring costs.'; - $ruleGroup->save(); - unset($ruleGroup); - - // move groceries to correct budget/category - $rule = new Rule; - $rule->user()->associate($this->user); - $rule->ruleGroup()->associate(RuleGroup::find(1)); - $rule->order = 1; - $rule->active = 1; - $rule->stop_processing = 0; - $rule->title = 'Move groceries'; - $rule->description = 'Move groceries to correct category and budget.'; - - $rule->save(); - - // initial trigger for this rule: - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 1; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'user_action'; - $ruleTrigger->trigger_value = 'store-journal'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // content trigger for this rule. - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 2; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'description_contains'; - $ruleTrigger->trigger_value = 'groceries'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 3; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'from_account_is'; - $ruleTrigger->trigger_value = 'TestData Checking Account'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // actions for this rule. one, set category - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 1; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_category'; - $ruleAction->action_value = 'Groceries'; - $ruleAction->save(); - unset($ruleAction); - - // actions for this rule. one, set budget - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 2; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_budget'; - $ruleAction->action_value = 'Groceries'; - $ruleAction->save(); - unset($ruleAction); - - - // move "gas" to "Car" and "Car" - $rule = new Rule; - $rule->user()->associate($this->user); - $rule->ruleGroup()->associate(RuleGroup::find(1)); - $rule->order = 2; - $rule->active = 1; - $rule->stop_processing = 0; - $rule->title = 'Move gas'; - $rule->description = null; - - $rule->save(); - - // initial trigger for this rule: - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 1; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'user_action'; - $ruleTrigger->trigger_value = 'store-journal'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // content trigger for this rule. - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 2; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'description_contains'; - $ruleTrigger->trigger_value = 'gas'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 3; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'from_account_is'; - $ruleTrigger->trigger_value = 'TestData Checking Account'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // actions for this rule. one, set category - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 1; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_category'; - $ruleAction->action_value = 'Car'; - $ruleAction->save(); - unset($ruleAction); - - // actions for this rule. one, set budget - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 2; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_budget'; - $ruleAction->action_value = 'Car'; - $ruleAction->save(); - unset($ruleAction); - - // move savings to money management - $rule = new Rule; - $rule->user()->associate($this->user); - $rule->ruleGroup()->associate(RuleGroup::find(1)); - $rule->order = 3; - $rule->active = 1; - $rule->stop_processing = 0; - $rule->title = 'Move savings'; - $rule->description = null; - - $rule->save(); - - // initial trigger for this rule: - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 1; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'user_action'; - $ruleTrigger->trigger_value = 'store-journal'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // is transfer - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 2; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'transaction_type'; - $ruleTrigger->trigger_value = 'Transfer'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // content trigger for this rule. - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 3; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'description_is'; - $ruleTrigger->trigger_value = 'Save money'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 4; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'from_account_is'; - $ruleTrigger->trigger_value = 'TestData Checking Account'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 5; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'to_account_is'; - $ruleTrigger->trigger_value = 'TestData Savings'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // actions for this rule. one, set category - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 1; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_category'; - $ruleAction->action_value = 'Money Management'; - $ruleAction->save(); - unset($ruleAction); - - // move TV bill to "Bills" and "House" - $rule = new Rule; - $rule->user()->associate($this->user); - $rule->ruleGroup()->associate(RuleGroup::find(3)); - $rule->order = 1; - $rule->active = 1; - $rule->stop_processing = 0; - $rule->title = 'TV Bill'; - $rule->description = null; - - $rule->save(); - - // initial trigger for this rule: - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 1; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'user_action'; - $ruleTrigger->trigger_value = 'store-journal'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // content trigger for this rule. - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 2; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'description_contains'; - $ruleTrigger->trigger_value = 'tv bill'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 3; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'from_account_is'; - $ruleTrigger->trigger_value = 'TestData Checking Account'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // actions for this rule. one, set category - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 1; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_category'; - $ruleAction->action_value = 'House'; - $ruleAction->save(); - unset($ruleAction); - - // actions for this rule. one, set budget - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 2; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_budget'; - $ruleAction->action_value = 'Bills'; - $ruleAction->save(); - unset($ruleAction); - - // move rent to bills, rent. - $rule = new Rule; - $rule->user()->associate($this->user); - $rule->ruleGroup()->associate(RuleGroup::find(3)); - $rule->order = 2; - $rule->active = 1; - $rule->stop_processing = 1; - $rule->title = 'Rent'; - $rule->description = 'Do something with rent.'; - - $rule->save(); - - // initial trigger for this rule: - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 1; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'user_action'; - $ruleTrigger->trigger_value = 'update-journal'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // content trigger for this rule. - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 2; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 0; - $ruleTrigger->trigger_type = 'description_contains'; - $ruleTrigger->trigger_value = 'rent'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // another - $ruleTrigger = new RuleTrigger; - $ruleTrigger->rule()->associate($rule); - $ruleTrigger->order = 3; - $ruleTrigger->active = 1; - $ruleTrigger->stop_processing = 1; - $ruleTrigger->trigger_type = 'from_account_is'; - $ruleTrigger->trigger_value = 'TestData Checking Account'; - - $ruleTrigger->save(); - unset($ruleTrigger); - - // actions for this rule. one, set category - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 1; - $ruleAction->active = 1; - $ruleAction->stop_processing = 0; - $ruleAction->action_type = 'set_category'; - $ruleAction->action_value = 'House'; - $ruleAction->save(); - unset($ruleAction); - - // actions for this rule. one, set budget - $ruleAction = new RuleAction; - $ruleAction->rule()->associate($rule); - $ruleAction->order = 2; - $ruleAction->active = 1; - $ruleAction->stop_processing = 1; - $ruleAction->action_type = 'set_budget'; - $ruleAction->action_value = 'Bills'; - $ruleAction->save(); - unset($ruleAction); - } - - -}