Browse Source

Merge pull request #13 from nafiesl/person-birth-order

Add person birth order - closes #5
pull/17/head
Nafies Luthfi 7 years ago
committed by GitHub
parent
commit
051b0a3891
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      app/Couple.php
  2. 12
      app/Http/Controllers/FamilyActionsController.php
  3. 25
      app/Http/Controllers/UsersController.php
  4. 40
      app/Http/Requests/Users/UpdateRequest.php
  5. 10
      app/User.php
  6. 5
      database/migrations/2014_10_12_000000_create_users_table.php
  7. 1
      resources/lang/en/user.php
  8. 1
      resources/lang/id/user.php
  9. 7
      resources/views/users/edit.blade.php
  10. 30
      resources/views/users/partials/childs.blade.php
  11. 8
      resources/views/users/partials/profile.blade.php
  12. 29
      tests/Feature/ManageUserFamiliesTest.php
  13. 46
      tests/Feature/UsersProfileTest.php

4
app/Couple.php

@ -2,8 +2,8 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Ramsey\Uuid\Uuid;
use Illuminate\Database\Eloquent\Model;
class Couple extends Model
{
@ -26,7 +26,7 @@ class Couple extends Model
public function childs()
{
return $this->hasMany(User::class, 'parent_id');
return $this->hasMany(User::class, 'parent_id')->orderBy('birth_order');
}
public function addChild(User $user)

12
app/Http/Controllers/FamilyActionsController.php

@ -2,10 +2,10 @@
namespace App\Http\Controllers;
use App\Couple;
use App\User;
use Illuminate\Http\Request;
use App\Couple;
use Ramsey\Uuid\Uuid;
use Illuminate\Http\Request;
class FamilyActionsController extends Controller
{
@ -60,9 +60,10 @@ class FamilyActionsController extends Controller
public function addChild(Request $request, User $user)
{
$this->validate($request, [
'add_child_name' => 'required|string|max:255',
'add_child_gender_id' => 'required|in:1,2',
'add_child_parent_id' => 'nullable|exists:couples,id',
'add_child_name' => 'required|string|max:255',
'add_child_gender_id' => 'required|in:1,2',
'add_child_parent_id' => 'nullable|exists:couples,id',
'add_child_birth_order' => 'nullable|numeric',
]);
$child = new User;
@ -71,6 +72,7 @@ class FamilyActionsController extends Controller
$child->nickname = $request->get('add_child_name');
$child->gender_id = $request->get('add_child_gender_id');
$child->parent_id = $request->get('add_child_parent_id');
$child->birth_order = $request->get('add_child_birth_order');
$child->manager_id = auth()->id();
\DB::beginTransaction();

25
app/Http/Controllers/UsersController.php

@ -123,30 +123,7 @@ class UsersController extends Controller
*/
public function update(UpdateRequest $request, User $user)
{
$request->validated();
$user->nickname = $request->nickname;
$user->name = $request->get('name');
$user->gender_id = $request->get('gender_id');
$user->dob = $request->get('dob');
$user->dod = $request->get('dod');
if ($request->get('dod')) {
$user->yod = substr($request->get('dod'), 0, 4);
} else {
$user->yod = $request->get('yod');
}
$user->phone = $request->get('phone');
$user->address = $request->get('address');
$user->city = $request->get('city');
$user->email = $request->get('email');
if ($request->get('password')) {
$user->password = bcrypt($request->get('password'));
}
$user->save();
$user->update($request->validated());
return redirect()->route('users.show', $user->id);
}

40
app/Http/Requests/Users/UpdateRequest.php

@ -26,17 +26,18 @@ class UpdateRequest extends FormRequest
public function rules()
{
return [
'nickname' => 'required|string|max:255',
'name' => 'required|string|max:255',
'gender_id' => 'required|numeric',
'dob' => 'nullable|date|date_format:Y-m-d',
'dod' => 'nullable|date|date_format:Y-m-d',
'yod' => 'nullable|date_format:Y',
'phone' => 'nullable|string|max:255',
'address' => 'nullable|string|max:255',
'city' => 'nullable|string|max:255',
'email' => 'nullable|string|max:255',
'password' => 'nullable|min:6|max:15',
'nickname' => 'required|string|max:255',
'name' => 'required|string|max:255',
'gender_id' => 'required|numeric',
'dob' => 'nullable|date|date_format:Y-m-d',
'dod' => 'nullable|date|date_format:Y-m-d',
'yod' => 'nullable|date_format:Y',
'phone' => 'nullable|string|max:255',
'address' => 'nullable|string|max:255',
'city' => 'nullable|string|max:255',
'email' => 'nullable|string|max:255',
'password' => 'nullable|min:6|max:15',
'birth_order' => 'nullable|numeric|min:1',
];
}
@ -47,4 +48,21 @@ class UpdateRequest extends FormRequest
'new_password.same_password' => trans('passwords.same_password'),
];
}
public function validated()
{
$formData = parent::validated();
if ($formData['dod']) {
$formData['yod'] = substr($formData['dod'], 0, 4);
} else {
$formData['yod'] = $formData['yod'];
}
if ($formData['password']) {
$formData['password'] = bcrypt($formData['password']);
}
return $formData;
}
}

10
app/User.php

@ -23,11 +23,11 @@ class User extends Authenticatable
* @var array
*/
protected $fillable = [
'id',
'id', 'birth_order',
'nickname', 'gender_id', 'name',
'email', 'password',
'address', 'phone',
'dof', 'dod',
'dob', 'dod', 'yod', 'city',
'father_id', 'mother_id', 'parent_id',
];
@ -104,10 +104,10 @@ class User extends Authenticatable
public function childs()
{
if ($this->gender_id == 2) {
return $this->hasMany(User::class, 'mother_id');
return $this->hasMany(User::class, 'mother_id')->orderBy('birth_order');
}
return $this->hasMany(User::class, 'father_id');
return $this->hasMany(User::class, 'father_id')->orderBy('birth_order');
}
public function profileLink($type = 'profile')
@ -206,7 +206,7 @@ class User extends Authenticatable
}
})
->get();
->orderBy('birth_order')->get();
}
public function parent()

5
database/migrations/2014_10_12_000000_create_users_table.php

@ -1,8 +1,8 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
@ -22,6 +22,7 @@ class CreateUsersTable extends Migration
$table->uuid('mother_id')->nullable();
$table->uuid('parent_id')->nullable();
$table->date('dob')->nullable();
$table->unsignedTinyInteger('birth_order')->nullable();
$table->date('dod')->nullable();
$table->date('yod')->nullable();
$table->string('email')->unique()->nullable();

1
resources/lang/en/user.php

@ -17,6 +17,7 @@ return [
'grand_father' => 'Grand Father',
'nieces' => 'Nieces',
'marriages' => 'Marriages',
'birth_order' => 'Birth Order',
// Actions
'edit' => 'Edit Profile',

1
resources/lang/id/user.php

@ -17,6 +17,7 @@ return [
'grand_father' => 'Kakek',
'nieces' => 'Keponakan',
'marriages' => 'Pernikahan',
'birth_order' => 'Anak ke',
// Actions
'edit' => 'Edit Profil',

7
resources/views/users/edit.blade.php

@ -70,6 +70,11 @@
<div class="col-md-6">{!! FormField::text('dob', ['label' => trans('user.dob'), 'placeholder' => trans('app.example').' 1959-07-20']) !!}</div>
</div>
<div class="row">
<div class="col-md-4">
{!! FormField::text('birth_order', ['label' => trans('user.birth_order'), 'type' => 'number', 'min' => 1]) !!}
</div>
</div>
<div class="row">
<div class="col-md-6">{!! FormField::text('yod', ['label' => trans('user.yod'), 'placeholder' => trans('app.example').' 2003']) !!}</div>
<div class="col-md-6">{!! FormField::text('dod', ['label' => trans('user.dod'), 'placeholder' => trans('app.example').' 2003-10-17']) !!}</div>
</div>
@ -78,7 +83,7 @@
</div>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ trans('app.address') }} & {{ trans('app.contact') }}</h3></div>
<div class="panel-heading"><h3 class="panel-title">{{ trans('app.address') }} &amp; {{ trans('app.contact') }}</h3></div>
<div class="panel-body">
{!! FormField::textarea('address', ['label' => trans('app.address')]) !!}
{!! FormField::text('city', ['label' => trans('app.city'), 'placeholder' => trans('app.example').' Jakarta']) !!}

30
resources/views/users/partials/childs.blade.php

@ -2,10 +2,10 @@
<div class="panel-heading">
@can ('edit', $user)
<div class="pull-right" style="margin: -3px -6px">
{{ link_to_route('users.show', trans('user.add_child'), [$user->id, 'action' => 'add_child'], ['class' => 'btn btn-success btn-xs']) }}
{{ link_to_route('users.show', __('user.add_child'), [$user->id, 'action' => 'add_child'], ['class' => 'btn btn-success btn-xs']) }}
</div>
@endcan
<h3 class="panel-title">{{ trans('user.childs') }} ({{ $user->childs->count() }})</h3>
<h3 class="panel-title">{{ __('user.childs') }} ({{ $user->childs->count() }})</h3>
</div>
<ul class="list-group">
@ -14,26 +14,34 @@
{{ $child->profileLink() }} ({{ $child->gender }})
</li>
@empty
<li class="list-group-item"><i>{{ trans('app.childs_were_not_recorded') }}</i></li>
<li class="list-group-item">{{ __('app.childs_were_not_recorded') }}</li>
@endforelse
@can('edit', $user)
@if (request('action') == 'add_child')
<li class="list-group-item">
{{ Form::open(['route' => ['family-actions.add-child', $user->id]]) }}
<div class="row">
<div class="col-md-6">
{!! FormField::text('add_child_name', ['label' => trans('user.child_name')]) !!}
<div class="col-md-8">
{!! FormField::text('add_child_name', ['label' => __('user.child_name')]) !!}
</div>
<div class="col-md-6">
{!! FormField::radios('add_child_gender_id', [1 => trans('app.male'), 2 => trans('app.female')], ['label' => trans('user.child_gender')]) !!}
<div class="col-md-4">
{!! FormField::radios('add_child_gender_id', [1 => __('app.male'), 2 => __('app.female')], ['label' => __('user.child_gender')]) !!}
</div>
</div>
{!! FormField::select('add_child_parent_id', $usersMariageList, ['label' => trans('user.add_child_from_existing_couples', ['name' => $user->name]), 'placeholder' => trans('app.unknown')]) !!}
{{ Form::submit(trans('user.add_child'), ['class' => 'btn btn-success btn-sm']) }}
{{ link_to_route('users.show', trans('app.cancel'), [$user->id], ['class' => 'btn btn-default btn-sm']) }}
<div class="row">
<div class="col-md-8">
{!! FormField::select('add_child_parent_id', $usersMariageList, ['label' => __('user.add_child_from_existing_couples', ['name' => $user->name]), 'placeholder' => __('app.unknown')]) !!}
</div>
<div class="col-md-4">
{!! FormField::text('add_child_birth_order', ['label' => __('user.birth_order'), 'type' => 'number', 'min' => 1]) !!}
</div>
</div>
{{ Form::submit(__('user.add_child'), ['class' => 'btn btn-success btn-sm']) }}
{{ link_to_route('users.show', __('app.cancel'), [$user->id], ['class' => 'btn btn-default btn-sm']) }}
{{ Form::close() }}
</li>
@endif
@endcan
</ul>
</div>
</div>

8
resources/views/users/partials/profile.blade.php

@ -7,9 +7,7 @@
<tbody>
<tr>
<th class="col-sm-4">{{ trans('user.name') }}</th>
<td class="col-sm-8">
{{ $user->profileLink() }}
</td>
<td class="col-sm-8">{{ $user->profileLink() }}</td>
</tr>
<tr>
<th>{{ trans('user.nickname') }}</th>
@ -23,6 +21,10 @@
<th>{{ trans('user.dob') }}</th>
<td>{{ $user->dob }}</td>
</tr>
<tr>
<th>{{ trans('user.birth_order') }}</th>
<td>{{ $user->birth_order }}</td>
</tr>
@if ($user->dod)
<tr>
<th>{{ trans('user.dod') }}</th>

29
tests/Feature/ManageUserFamiliesTest.php

@ -3,8 +3,8 @@
namespace Tests\Feature;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ManageUserFamiliesTest extends TestCase
{
@ -114,6 +114,33 @@ class ManageUserFamiliesTest extends TestCase
}
/** @test */
public function user_can_add_children_with_birth_order()
{
$user = $this->loginAsUser(['gender_id' => 1]);
$this->visit(route('profile'));
$this->seePageIs(route('profile'));
$this->click(trans('user.add_child'));
$this->seeElement('input', ['name' => 'add_child_birth_order']);
$this->submitForm(trans('user.add_child'), [
'add_child_name' => 'Nama Anak 1',
'add_child_gender_id' => 1,
'add_child_birth_order' => 2,
'add_child_parent_id' => '',
]);
$this->seeInDatabase('users', [
'nickname' => 'Nama Anak 1',
'gender_id' => 1,
'father_id' => $user->id,
'mother_id' => null,
'parent_id' => null,
'manager_id' => $user->id,
'birth_order' => 2,
]);
}
/** @test */
public function user_can_set_wife()
{
$user = $this->loginAsUser(['gender_id' => 1]);

46
tests/Feature/UsersProfileTest.php

@ -27,31 +27,33 @@ class UsersProfileTest extends TestCase
$this->seePageIs(route('users.edit', $user->id));
$this->submitForm(trans('app.update'), [
'nickname' => 'Nama Panggilan',
'name' => 'Nama User',
'gender_id' => 1,
'dob' => '1959-06-09',
'dod' => '2003-10-17',
'yod' => '',
'address' => 'Jln. Angkasa, No. 70',
'city' => 'Nama Kota',
'phone' => '081234567890',
'email' => '',
'password' => '',
'nickname' => 'Nama Panggilan',
'name' => 'Nama User',
'gender_id' => 1,
'dob' => '1959-06-09',
'dod' => '2003-10-17',
'yod' => '',
'address' => 'Jln. Angkasa, No. 70',
'city' => 'Nama Kota',
'phone' => '081234567890',
'email' => '',
'password' => '',
'birth_order' => 3,
]);
$this->seeInDatabase('users', [
'nickname' => 'Nama Panggilan',
'name' => 'Nama User',
'gender_id' => 1,
'dob' => '1959-06-09',
'dod' => '2003-10-17',
'yod' => '2003',
'address' => 'Jln. Angkasa, No. 70',
'city' => 'Nama Kota',
'phone' => '081234567890',
'email' => null,
'password' => null,
'nickname' => 'Nama Panggilan',
'name' => 'Nama User',
'gender_id' => 1,
'dob' => '1959-06-09',
'dod' => '2003-10-17',
'yod' => '2003',
'address' => 'Jln. Angkasa, No. 70',
'city' => 'Nama Kota',
'phone' => '081234567890',
'email' => null,
'password' => null,
'birth_order' => 3,
]);
}

Loading…
Cancel
Save