From 4154c6811101f77011e5138f9db127c55d8102b5 Mon Sep 17 00:00:00 2001 From: vagrant Date: Tue, 11 Sep 2018 22:23:46 +0000 Subject: [PATCH] added member-state seeds without checking for birthdates --- app/Person.php | 9 ++- database/factories/MemberStateFactory.php | 9 ++- database/seeds/data/test/TestDataSeeder.php | 4 +- .../data/test/TestMemberStatesTableSeeder.php | 72 ++++++++++++++++++- .../seeds/data/test/TestPeopleTableSeeder.php | 2 +- 5 files changed, 83 insertions(+), 13 deletions(-) diff --git a/app/Person.php b/app/Person.php index d724eb9..bc1957a 100644 --- a/app/Person.php +++ b/app/Person.php @@ -22,7 +22,6 @@ class Person extends Model public function isMember() { $latest = $this->memberStates->last(); - if (is_null($latest)) { return false; } else { @@ -56,7 +55,7 @@ class Person extends Model /* * Return the last date since when the person is an active member. - * + * * @return Carbon\Carbon */ public function activeSince() @@ -64,7 +63,7 @@ class Person extends Model $latest = $this->memberStates ->orderBy('joining_date', 'desc') ->first(); - + return Carbon::parse($latest['joining_date']); } @@ -76,7 +75,7 @@ class Person extends Model public function activeTime() { $activeTimes = $this->memberStates; - + $diff = 0; foreach ($activeTimes as $period) { @@ -84,7 +83,7 @@ class Person extends Model $end = is_null($period['leaving_date']) ? Carbon::now() : Carbon::parse($period['leaving_date']); - + $diffYears = Carbon::parse($start)->diffInYears($end); $diffDays = Carbon::parse($start)->diffInDays($end); diff --git a/database/factories/MemberStateFactory.php b/database/factories/MemberStateFactory.php index 239e146..a22def4 100644 --- a/database/factories/MemberStateFactory.php +++ b/database/factories/MemberStateFactory.php @@ -1,9 +1,12 @@ define(App\MemberStates::class, function (Faker $faker) { +$factory->define(App\MemberState::class, function (Faker $faker) { return [ - // - ]; + 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), + 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), + ]; }); diff --git a/database/seeds/data/test/TestDataSeeder.php b/database/seeds/data/test/TestDataSeeder.php index a6e45f9..e794ca6 100644 --- a/database/seeds/data/test/TestDataSeeder.php +++ b/database/seeds/data/test/TestDataSeeder.php @@ -14,10 +14,10 @@ class TestDataSeeder extends Seeder $this->call([ TestBookingsTableSeeder::class, TestPeopleTableSeeder::class, - TestMemberStatesTableSeeder::class, TestPersonTargetsTableSeeder::class, TestProjectsTableSeeder::class, - TestSubBookingsTableSeeder::class + TestSubBookingsTableSeeder::class, + TestMemberStatesTableSeeder::class, ]); } } diff --git a/database/seeds/data/test/TestMemberStatesTableSeeder.php b/database/seeds/data/test/TestMemberStatesTableSeeder.php index b1695f2..d9cdcb0 100644 --- a/database/seeds/data/test/TestMemberStatesTableSeeder.php +++ b/database/seeds/data/test/TestMemberStatesTableSeeder.php @@ -12,7 +12,7 @@ class TestMemberStatesTableSeeder extends Seeder */ public function run() { - DB::table('member_states')->insert([ + /*DB::table('member_states')->insert([ [ 'person_id' => 1, 'joining_date' => '2014-9-22', @@ -34,6 +34,74 @@ class TestMemberStatesTableSeeder extends Seeder 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s') ] - ]); + ]);*/ + + // Iterate through existing People and randomly assign their ids + // once or twice. + foreach (App\Person::all() as $person) { + + // randomly decide if person has a state. + $personHasState = rand(1,8) < 8; + + if($personHasState) { + // if Person has a State, decide if it has one or two. + $numberOfStates = rand(1,2); + + if($numberOfStates > 1) { + $this->createPerson($person->id, $numberOfStates); + } else { + $this->createPerson($person->id, $numberOfStates); + } + } + } + } + + public function createPerson($id, $numberOfStates = 1) + { + // manually create faker Instance since you can't control iterations + // in Factory-Files. + $faker = Faker\Factory::create(); + + $startDate = "2014-04-01"; + + if($numberOfStates > 1) { + // if member has 2 states, the first one must be a few years in the past. + $lastLeaving = "2015-12-30"; + $firstSecondJoiningDate = "2017-06-01"; + + $firstJoiningDate = $faker->dateTimeBetween($startDate, "2015-11-30"); + $firstLeavingDate = $faker->dateTimeBetween($firstJoiningDate, $lastLeaving); + + $secondJoiningDate = $faker->dateTimeBetween($firstSecondJoiningDate, 'now'); + $secondLeavingDate = NULL; + if(rand(1,8) === 8) + { + $secondLeavingDate = $faker->dateTimeBetween($secondJoiningDate, 'now'); + } + + factory(App\MemberState::class, 1)->create([ + 'person_id' => $id, + "joining_date" => $firstJoiningDate, + "leaving_date" => $firstLeavingDate, + ]); + + factory(App\MemberState::class, 1)->create([ + 'person_id' => $id, + "joining_date" => $secondJoiningDate, + "leaving_date" => $secondLeavingDate, + ]); + } else { + $joiningDate = $faker->dateTimeBetween($startDate, 'now - 30 days'); + $leavingDate = NULL; + if(rand(1,5) === 5) + { + $leavingDate = $faker->dateTimeBetween($joiningDate, 'now'); + } + factory(App\MemberState::class, 1)->create([ + 'person_id' => $id, + "joining_date" => $joiningDate, + "leaving_date" => $leavingDate, + ]); + } } } diff --git a/database/seeds/data/test/TestPeopleTableSeeder.php b/database/seeds/data/test/TestPeopleTableSeeder.php index 19e033a..c3e7ffe 100644 --- a/database/seeds/data/test/TestPeopleTableSeeder.php +++ b/database/seeds/data/test/TestPeopleTableSeeder.php @@ -15,7 +15,7 @@ class TestPeopleTableSeeder extends Seeder // Create people $people = factory(App\Person::class, 100)->create(); - // Create random member states for + // Create random member states for // $people->each(function ($person) { // $person->memberStates->save(factory('App\MemberState')->make()); // });