106 lines
3.5 KiB
PHP
106 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\StoreAdvanceRequest;
|
|
use App\Models\Advance;
|
|
use App\Models\AdvanceType;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
|
|
class AdvanceController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = Advance::with(['user', 'type']);
|
|
|
|
if ($request->user()->hasRole('pracownik')) {
|
|
$query->where('user_id', $request->user()->id);
|
|
}
|
|
|
|
$search = trim((string) $request->query('search', ''));
|
|
if ($search !== '') {
|
|
$query->where(function ($query) use ($search) {
|
|
$query->whereHas('user', function ($userQuery) use ($search) {
|
|
$userQuery->where('name', 'like', "%{$search}%")
|
|
->orWhere('surname', 'like', "%{$search}%")
|
|
->orWhere('email', 'like', "%{$search}%");
|
|
})->orWhereHas('type', function ($typeQuery) use ($search) {
|
|
$typeQuery->where('name', 'like', "%{$search}%");
|
|
})->orWhere('amount', 'like', "%{$search}%");
|
|
});
|
|
}
|
|
|
|
if ($request->filled('type')) {
|
|
$query->where('advance_type_id', $request->integer('type'));
|
|
}
|
|
|
|
if ($request->filled('date_from')) {
|
|
$query->whereDate('date', '>=', $request->query('date_from'));
|
|
}
|
|
|
|
if ($request->filled('date_to')) {
|
|
$query->whereDate('date', '<=', $request->query('date_to'));
|
|
}
|
|
|
|
$advances = $query->orderByDesc('date')->orderByDesc('id')->paginate(10)->withQueryString();
|
|
$types = AdvanceType::orderBy('name')->get();
|
|
|
|
return view('zaliczki', compact('advances', 'types'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$types = AdvanceType::orderBy('name')->get();
|
|
$users = request()->user()->hasRole('pracownik')
|
|
? collect()
|
|
: User::orderBy('name')->orderBy('surname')->get();
|
|
|
|
return view('zaliczki.create', compact('types', 'users'));
|
|
}
|
|
|
|
public function store(StoreAdvanceRequest $request)
|
|
{
|
|
Advance::create([
|
|
'date' => $request->validated('date'),
|
|
'amount' => $request->validated('amount'),
|
|
'advance_type_id' => $request->validated('advance_type_id'),
|
|
'user_id' => $request->validated('user_id'),
|
|
]);
|
|
|
|
return redirect()->route('zaliczki')->with('status', 'Zaliczka została dodana.');
|
|
}
|
|
|
|
public function edit(Request $request, Advance $advance)
|
|
{
|
|
$this->authorizeAccess($request, $advance);
|
|
$types = AdvanceType::orderBy('name')->get();
|
|
$users = $request->user()->hasRole('pracownik')
|
|
? collect()
|
|
: User::orderBy('name')->orderBy('surname')->get();
|
|
|
|
return view('zaliczki.edit', compact('advance', 'types', 'users'));
|
|
}
|
|
|
|
public function update(StoreAdvanceRequest $request, Advance $advance)
|
|
{
|
|
$this->authorizeAccess($request, $advance);
|
|
$advance->update($request->validated());
|
|
|
|
return redirect()->route('zaliczki')->with('status', 'Zaliczka została zaktualizowana.');
|
|
}
|
|
|
|
public function destroy(Request $request, Advance $advance)
|
|
{
|
|
$this->authorizeAccess($request, $advance);
|
|
$advance->delete();
|
|
|
|
return redirect()->route('zaliczki')->with('status', 'Zaliczka została usunięta.');
|
|
}
|
|
|
|
private function authorizeAccess(Request $request, Advance $advance): void
|
|
{
|
|
abort_if($request->user()->hasRole('pracownik') && $advance->user_id !== $request->user()->id, 403);
|
|
}
|
|
}
|