From 69df349d3fbcddaf2ef31d431fafeee77fb0696e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sofia=20Reh=C3=A1kov=C3=A1?= <125893846+sofiarehakova@users.noreply.github.com> Date: Mon, 3 Nov 2025 22:56:35 +0100 Subject: [PATCH] potvrdenie vykazu a oprava databazy --- .../Http/Controllers/InternshipController.php | 25 +++++++++++-------- .../components/InternshipDocumentEditor.vue | 9 ++++++- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/backend/app/Http/Controllers/InternshipController.php b/backend/app/Http/Controllers/InternshipController.php index ee474f5..0be763f 100644 --- a/backend/app/Http/Controllers/InternshipController.php +++ b/backend/app/Http/Controllers/InternshipController.php @@ -37,7 +37,7 @@ class InternshipController extends Controller }); $internships->each(function ($internship) { - $internship->status = InternshipStatus::whereColumn('internship_id', '=', $internship->id)->orderByDesc('changed')->get()->first()->makeHidden(['created_at', 'updated_at', 'id']); + $internship->status = InternshipStatus::whereInternshipId($internship->id)->orderByDesc('changed')->get()->first()->makeHidden(['created_at', 'updated_at', 'id']); $internship->status->modified_by = User::find($internship->status->modified_by)->makeHidden(['created_at', 'updated_at', 'email_verified_at']); }); @@ -126,7 +126,7 @@ class InternshipController extends Controller $internship->contact = User::find($internship->company->contact)->makeHidden(['created_at', 'updated_at', 'email_verified_at']); unset($internship->company->contact); - $internship->status = InternshipStatus::whereColumn('internship_id', '=', $internship->id)->orderByDesc('changed')->get()->first()->makeHidden(['created_at', 'updated_at', 'id']); + $internship->status = InternshipStatus::whereInternshipId($internship->id)->orderByDesc('changed')->get()->first()->makeHidden(['created_at', 'updated_at', 'id']); $internship->status->modified_by = User::find($internship->status->modified_by)->makeHidden(['created_at', 'updated_at', 'email_verified_at']); $internship->agreement = $internship->agreement !== null; @@ -231,21 +231,16 @@ class InternshipController extends Controller ], 400); } - if ($user->role !== 'ADMIN' && $internship->user_id !== $user->id && $user->id !== $internship->contact) { + if ($internship->user_id !== $user->id && $user->id !== $internship->company->contact) { abort(403, 'Unauthorized'); } $request->validate([ 'agreement' => ['nullable', 'file', 'mimes:pdf', 'max:10240'], - 'report' => ['nullable', 'file', 'mimes:pdf', 'max:10240'] + 'report' => ['nullable', 'file', 'mimes:pdf', 'max:10240'], + 'report_confirmed' => ['required', 'boolean'], ]); - if (!$request->hasFile('agreement') && !$request->hasFile('report')) { - return response()->json([ - 'message' => 'At least one document (agreement or report) must be provided.' - ], 400); - } - if ($request->hasFile('agreement')) { $internship->agreement = file_get_contents($request->file('agreement')->getRealPath()); } @@ -254,6 +249,16 @@ class InternshipController extends Controller $internship->report = file_get_contents($request->file('report')->getRealPath()); } + if($user->role === 'EMPLOYER') { + if($request->report_confirmed && (!$internship->agreement || !$internship->report)) { + return response()->json([ + 'message' => 'Report cannot be confirmed without an agreement and report.' + ], 400); + } + + $internship->report_confirmed = $request->report_confirmed; + } + $internship->save(); return response()->noContent(); } diff --git a/frontend/app/components/InternshipDocumentEditor.vue b/frontend/app/components/InternshipDocumentEditor.vue index deaa7c0..965c699 100644 --- a/frontend/app/components/InternshipDocumentEditor.vue +++ b/frontend/app/components/InternshipDocumentEditor.vue @@ -1,6 +1,8 @@