You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

255 lines
8.1 KiB

<?php
namespace App\Http\Controllers;
use App\Couple;
use App\FamilyConnection;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Ramsey\Uuid\Uuid;
class FamilyActionsController extends Controller
{
/**
* Set father for a user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function setFather(Request $request, User $user)
{
$request->validate([
'set_father_id' => 'nullable',
'set_father' => 'required_without:set_father_id|max:255',
]);
if ($request->get('set_father_id')) {
$user->father_id = $request->get('set_father_id');
$user->save();
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $request->get('set_father_id'),
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
} else {
$father = new User;
$father->id = Uuid::uuid4()->toString();
$father->name = $request->get('set_father');
$father->nickname = $request->get('set_father');
$father->gender_id = 1;
$father->manager_id = auth()->id();
$user->setFather($father);
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $father->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
}
return back();
}
/**
* Set mother for a user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function setMother(Request $request, User $user)
{
$request->validate([
'set_mother_id' => 'nullable',
'set_mother' => 'required_without:set_mother_id|max:255',
]);
if ($request->get('set_mother_id')) {
$user->mother_id = $request->get('set_mother_id');
$user->save();
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $request->get('set_mother_id'),
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
} else {
$mother = new User;
$mother->id = Uuid::uuid4()->toString();
$mother->name = $request->get('set_mother');
$mother->nickname = $request->get('set_mother');
$mother->gender_id = 2;
$mother->manager_id = auth()->id();
$user->setMother($mother);
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $mother->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
}
return back();
}
/**
* Add child for a user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function addChild(Request $request, User $user)
{
$request->validate([
'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;
$child->id = Uuid::uuid4()->toString();
$child->name = $request->get('add_child_name');
$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();
$child->save();
if ($request->get('add_child_parent_id')) {
$couple = Couple::find($request->get('add_child_parent_id'));
$child->father_id = $couple->husband_id;
$child->mother_id = $couple->wife_id;
$child->save();
} else {
if ($user->gender_id == 1) {
$child->setFather($user);
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $child->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
} else {
$child->setMother($user);
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $child->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
}
}
\DB::commit();
return back();
}
/**
* Add wife for male user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function addWife(Request $request, User $user)
{
$request->validate([
'set_wife_id' => 'nullable',
'set_wife' => 'required_without:set_wife_id|max:255',
'marriage_date' => 'nullable|date|date_format:Y-m-d',
]);
if ($request->get('set_wife_id')) {
$wife = User::findOrFail($request->get('set_wife_id'));
} else {
$wife = new User;
$wife->id = Uuid::uuid4()->toString();
$wife->name = $request->get('set_wife');
$wife->nickname = $request->get('set_wife');
$wife->gender_id = 2;
$wife->manager_id = auth()->id();
}
$user->addWife($wife, $request->get('marriage_date'));
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $wife->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
return back();
}
/**
* Add husband for female user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function addHusband(Request $request, User $user)
{
$this->validate($request, [
'set_husband_id' => 'nullable',
'set_husband' => 'required_without:set_husband_id|max:255',
'marriage_date' => 'nullable|date|date_format:Y-m-d',
]);
if ($request->get('set_husband_id')) {
$husband = User::findOrFail($request->get('set_husband_id'));
} else {
$husband = new User;
$husband->id = Uuid::uuid4()->toString();
$husband->name = $request->get('set_husband');
$husband->nickname = $request->get('set_husband');
$husband->gender_id = 1;
$husband->manager_id = auth()->id();
}
$user->addHusband($husband, $request->get('marriage_date'));
FamilyConnection::create([
'id' => Uuid::uuid4()->toString(),
'requester_id' => $user->id,
'requested_id' => $husband->id,
'status_id' => FamilyConnection::STATUS_APPROVED,
]);
return back();
}
/**
* Set parent for a user.
*
* @param \Illuminate\Http\Request $request
* @param \App\User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function setParent(Request $request, User $user)
{
$user->parent_id = $request->get('set_parent_id');
$user->save();
return redirect()->route('users.show', $user);
}
}