Files
monica/app/Http/Controllers/Contacts/LifeEventsController.php
T
2018-09-25 19:18:07 -04:00

126 lines
3.7 KiB
PHP

<?php
namespace App\Http\Controllers\Contacts;
use App\Helpers\DateHelper;
use Illuminate\Http\Request;
use App\Models\Contact\Contact;
use Illuminate\Support\Collection;
use App\Http\Controllers\Controller;
use App\Models\Contact\LifeEventCategory;
use App\Services\Contact\LifeEvent\CreateLifeEvent;
use App\Services\Contact\LifeEvent\DestroyLifeEvent;
use App\Http\Resources\LifeEvent\LifeEventType as LifeEventTypeResource;
use App\Http\Resources\LifeEvent\LifeEventCategory as LifeEventCategoryResource;
class LifeEventsController extends Controller
{
/**
* Get the list of life event categories.
*
* @param Request $request
* @return Collection
*/
public function categories(Request $request)
{
$lifeEventCategories = auth()->user()->account->lifeEventCategories;
return LifeEventCategoryResource::collection($lifeEventCategories);
}
/**
* Get the list of life event types for a given life event category.
* @param Request $request
* @param int $LifeEventCategoryId
* @return Collection
*/
public function types(Request $request, int $lifeEventCategoryId)
{
$lifeEventCategory = LifeEventCategory::findOrFail($lifeEventCategoryId);
$lifeEventTypes = $lifeEventCategory->lifeEventTypes;
return LifeEventTypeResource::collection($lifeEventTypes);
}
/**
* Display the list of life events.
*
* @param Contact $contact
* @return \Illuminate\Http\Response
*/
public function index(Request $request, Contact $contact)
{
$lifeEventsCollection = collect([]);
$lifeEvents = $contact->lifeEvents()->get();
foreach ($lifeEvents as $lifeEvent) {
$data = [
'id' => $lifeEvent->id,
'life_event_type' => $lifeEvent->lifeEventType->name,
'default_life_event_type_key' => $lifeEvent->lifeEventType->default_life_event_type_key,
'name' => $lifeEvent->name,
'note' => $lifeEvent->note,
'happened_at' => DateHelper::getShortDate($lifeEvent->happened_at),
];
$lifeEventsCollection->push($data);
}
return $lifeEventsCollection;
}
/**
* Store the life event.
*
* @param Request $request
* @param Contact $contact
* @return \Illuminate\Http\Response
*/
public function store(Request $request, Contact $contact)
{
$data = [
'account_id' => auth()->user()->account->id,
'contact_id' => $contact->id,
'life_event_type_id' => $request->get('life_event_type_id'),
'happened_at' => $request->get('happened_at'),
'name' => $request->get('name'),
'note' => $request->get('note'),
];
// create the conversation
try {
$lifeEvent = (new CreateLifeEvent)->execute($data);
} catch (\Exception $e) {
return back()
->withInput()
->withErrors(trans('app.error_save'));
}
return $lifeEvent;
}
/**
* Destroy the life event.
* @param Request $request
* @param Contact $contat
* @param LifeEvent $lifeEvent
* @return bool
*/
public function destroy(Request $request, Contact $contat, $lifeEventId)
{
$data = [
'account_id' => auth()->user()->account->id,
'life_event_id' => $lifeEventId,
];
try {
(new DestroyLifeEvent)->execute($data);
} catch (\Exception $e) {
return back()
->withInput()
->withErrors(trans('app.error_save'));
}
return 'done';
}
}