123 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use App\Http\Requests\CVRequest;
use App\Http\Resources\CVInfoCollection;
use App\Http\Resources\FullCVCollection;
use App\Http\Resources\FullCVResource;
use App\Models\CV;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Inertia\Response as InertiaResponse;
class CVController extends Controller
{
public function index(Request $request): InertiaResponse
{
return inertia('CV/Index', [
'cvs' => new FullCVCollection(CV::all()),
]);
}
public function show(CV $cv): InertiaResponse
{
return inertia('CV/Show', [
'cv' => new FullCVResource($cv),
'cvInfo' => new CVInfoCollection($cv->info()->orderByDesc('id')->get()),
]);
}
public function create(): InertiaResponse
{
return inertia('CV/Create');
}
public function store(CVRequest $request): RedirectResponse
{
CV::query()
->create([
'token' => Str::random(50),
'recipient' => $request->get('recipient'),
'email' => $request->get('email'),
'phone_number' => $request->get('phone_number'),
'locations' => ($locations = $request->get('locations')) === [''] ? [] : $locations,
'mission' => ($mission = $request->get('mission')) === [''] ? [] : $mission,
'rodo' => ($rodo =$request->get('rodo')) === '' ? null : $rodo,
'position' => $request->get('position'),
'notes' => $request->get('notes'),
]);
return redirect()
->route('admin.cv.store')
->with('success', 'Utworzono nowe CV dla firmy ' . $request->get('recipient'));
}
public function updateSendStatus(CV $cv): RedirectResponse
{
$cv->update([
'sended' => true,
'sended_timestamp' => now()
]);
return redirect()
->route('admin.cv.show', ['cv' => $cv])
->with('success', 'Status wysłania ustawiono jako "wysłano".');
}
public function edit(CV $cv): InertiaResponse
{
return inertia('CV/Edit', [
'cv' => new FullCVResource($cv),
]);
}
public function update(CVRequest $request, CV $cv): RedirectResponse
{
$toUpdate = [
'recipient' => $request->get('recipient'),
'email' => $request->get('email'),
'phone_number' => $request->get('phone_number'),
'locations' => ($locations = $request->get('locations')) === [''] ? [] : $locations,
'mission' => ($mission = $request->get('mission')) === [''] ? [] : $mission,
'rodo' => ($rodo =$request->get('rodo')) === '' ? null : $rodo,
'position' => $request->get('position'),
'notes' => $request->get('notes'),
];
if ($cv->sended && ! $request->boolean('sended')) {
$toUpdate = array_merge($toUpdate, [
'sended' => false,
'sended_timestamp' => null,
]);
} else if (! $cv->sended && $request->boolean('sended')) {
$toUpdate = array_merge($toUpdate, [
'sended' => true,
'sended_timestamp' => now(),
]);
}
$cv->update($toUpdate);
return redirect()
->back()
->with('success', 'Zaktualizowano CV dla firmy ' . $request->get('recipient'));
}
public function delete(CV $cv): InertiaResponse
{
return inertia('CV/ConfirmDelete', compact('cv'));
}
public function destroy(CV $cv): RedirectResponse
{
$name = $cv->recipient;
$cv->delete();
return redirect()
->route('admin.cv.index')
->with('info', 'Usunięto CV dla firmy '. $name .'.');
}
}