diff --git a/backend/app/Enums/InternshipStatus.php b/backend/app/Enums/InternshipStatus.php new file mode 100644 index 0000000..93a34d4 --- /dev/null +++ b/backend/app/Enums/InternshipStatus.php @@ -0,0 +1,22 @@ + $case->value, self::cases()); + } +} diff --git a/backend/app/Http/Controllers/CompanyController.php b/backend/app/Http/Controllers/CompanyController.php index d37e2f6..6f20bae 100644 --- a/backend/app/Http/Controllers/CompanyController.php +++ b/backend/app/Http/Controllers/CompanyController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers; use App\Models\Company; use App\Models\User; use App\Models\Internship; -use App\Models\InternshipStatus; +use App\Models\InternshipStatusData; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -186,7 +186,7 @@ class CompanyController extends Controller // mazanie statusov $internships->each(function ($internship) { - InternshipStatus::whereInternshipId($internship->id)->delete(); + InternshipStatusData::whereInternshipId($internship->id)->delete(); }); // mazanie praxov diff --git a/backend/app/Http/Controllers/InternshipController.php b/backend/app/Http/Controllers/InternshipController.php index 9d5913d..a7d87ff 100644 --- a/backend/app/Http/Controllers/InternshipController.php +++ b/backend/app/Http/Controllers/InternshipController.php @@ -4,7 +4,7 @@ namespace App\Http\Controllers; use App\Models\Company; use App\Models\Internship; -use App\Models\InternshipStatus; +use App\Models\InternshipStatusData; use App\Models\User; use Illuminate\Http\Request; use Mpdf\Mpdf; @@ -61,7 +61,7 @@ class InternshipController extends Controller return response()->json($internship); } - public function get_default_agreement(Request $request, int $id) + public function get_default_proof(Request $request, int $id) { $user = auth()->user(); $internship = Internship::find($id); @@ -78,7 +78,7 @@ class InternshipController extends Controller $contact = User::find($internship->company->contact); - $html = view('agreement.default', [ + $html = view('proof.default', [ 'company' => $internship->company, 'companyContact' => $contact, 'internship' => $internship, @@ -93,10 +93,10 @@ class InternshipController extends Controller return response($pdf->Output('', 'S'), 200) ->header('Content-Type', 'application/pdf') - ->header('Content-Disposition', 'attachment; filename="agreement_' . $id . '.pdf"'); + ->header('Content-Disposition', 'attachment; filename="proof_' . $id . '.pdf"'); } - public function get_agreement(int $id) + public function get_proof(int $id) { $user = auth()->user(); $internship = Internship::find($id); @@ -107,9 +107,9 @@ class InternshipController extends Controller ], 400); } - if (!$internship->agreement) { + if (!$internship->proof) { return response()->json([ - 'message' => 'No agreement file exists for this internship.' + 'message' => 'No proof file exists for this internship.' ], 404); } @@ -117,9 +117,9 @@ class InternshipController extends Controller abort(403, 'Unauthorized'); } - return response($internship->agreement, 200) + return response($internship->proof, 200) ->header('Content-Type', 'application/pdf') - ->header('Content-Disposition', 'attachment; filename="agreement_' . $id . '.pdf"'); + ->header('Content-Disposition', 'attachment; filename="proof_' . $id . '.pdf"'); } public function get_report(int $id) @@ -182,10 +182,10 @@ class InternshipController extends Controller 'year_of_study' => $request->year_of_study, 'semester' => $request->semester, 'position_description' => $request->position_description, - 'agreement' => null + 'proof' => null ]); - InternshipStatus::create([ + InternshipStatusData::create([ 'internship_id' => $Internship->id, 'status' => 'SUBMITTED', 'changed' => now(), @@ -250,13 +250,13 @@ class InternshipController extends Controller } $request->validate([ - 'agreement' => ['nullable', 'file', 'mimes:pdf', 'max:10240'], + 'proof' => ['nullable', 'file', 'mimes:pdf', 'max:10240'], 'report' => ['nullable', 'file', 'mimes:pdf', 'max:10240'], 'report_confirmed' => ['required', 'boolean'], ]); - if ($request->hasFile('agreement')) { - $internship->agreement = file_get_contents($request->file('agreement')->getRealPath()); + if ($request->hasFile('proof')) { + $internship->proof = file_get_contents($request->file('proof')->getRealPath()); } if ($request->hasFile('report')) { @@ -264,9 +264,9 @@ class InternshipController extends Controller } if ($user->role === 'EMPLOYER') { - if ($request->report_confirmed && (!$internship->agreement || !$internship->report)) { + if ($request->report_confirmed && (!$internship->proof || !$internship->report)) { return response()->json([ - 'message' => 'Report cannot be confirmed without an agreement and report.' + 'message' => 'Report cannot be confirmed without an proof and report.' ], 400); } diff --git a/backend/app/Http/Controllers/InternshipStatusController.php b/backend/app/Http/Controllers/InternshipStatusDataController.php similarity index 58% rename from backend/app/Http/Controllers/InternshipStatusController.php rename to backend/app/Http/Controllers/InternshipStatusDataController.php index 5b0820e..8c32f88 100644 --- a/backend/app/Http/Controllers/InternshipStatusController.php +++ b/backend/app/Http/Controllers/InternshipStatusDataController.php @@ -2,19 +2,19 @@ namespace App\Http\Controllers; +use App\Enums\InternshipStatus; use App\Mail\InternshipStatusUpdated; use App\Models\Internship; -use App\Models\InternshipStatus; -use App\Models\User; +use App\Models\InternshipStatusData; use Illuminate\Http\Request; use Mail; -class InternshipStatusController extends Controller +class InternshipStatusDataController extends Controller { public function get(int $id) { $user = auth()->user(); - $internship_statuses = InternshipStatus::whereInternshipId($id)->orderByDesc('changed')->get(); + $internship_statuses = InternshipStatusData::whereInternshipId($id)->orderByDesc('changed')->get(); if (!$internship_statuses) { return response()->json([ @@ -45,9 +45,7 @@ class InternshipStatusController extends Controller abort(403, 'Unauthorized'); } - $currentStatus = $internship->status; - $nextPossibleStatuses = $this->possibleNewStatuses($currentStatus->status, $user->role, $internship->report_confirmed); - + $nextPossibleStatuses = $internship->nextStates($user->role); return response()->json($nextPossibleStatuses); } @@ -78,7 +76,7 @@ class InternshipStatusController extends Controller /** * Display the specified resource. */ - public function show(InternshipStatus $internshipStatus) + public function show(InternshipStatusData $internshipStatus) { // } @@ -86,7 +84,7 @@ class InternshipStatusController extends Controller /** * Show the form for editing the specified resource. */ - public function edit(InternshipStatus $internshipStatus) + public function edit(InternshipStatusData $internshipStatus) { // } @@ -110,14 +108,14 @@ class InternshipStatusController extends Controller } $internshipStatus = $internship->status; - $newStatusValidator = 'in:' . implode(',', $this->possibleNewStatuses($internshipStatus->status, $user->role, $internship->report_confirmed)); + $newStatusValidator = 'in:' . implode(',', $internship->nextStates($user->role)); $request->validate([ 'status' => ['required', 'string', 'uppercase', $newStatusValidator], 'note' => ['required', 'string', 'min:1'] ]); - InternshipStatus::create([ + $newStatus = InternshipStatusData::make([ 'internship_id' => $id, 'status' => $request->status, 'note' => $request->note, @@ -125,47 +123,26 @@ class InternshipStatusController extends Controller 'modified_by' => $user->id ]); - Mail::to($internship->student)->sendNow(new InternshipStatusUpdated($internship, $user->name, $internship->student->name, $internship->company->name, $internshipStatus->status, $request->status, $request->note)); + Mail::to($internship->student) + ->sendNow(new InternshipStatusUpdated( + $internship, + $user->name, + $internship->student->name, + $internship->company->name, + $internshipStatus->status, + $request->enum('status', InternshipStatus::class), + $request->note + )); + $newStatus->save(); return response()->noContent(); } /** * Remove the specified resource from storage. */ - public function destroy(InternshipStatus $internshipStatus) + public function destroy(InternshipStatusData $internshipStatus) { // } - - private function possibleNewStatuses(string $current_status, string $userRole, bool $report_confirmed) - { - if ($userRole === "STUDENT") - return []; - - switch ($current_status) { - case 'SUBMITTED': - return ['CONFIRMED', 'DENIED']; - case 'CONFIRMED': - if ($userRole === 'EMPLOYER') { - return ['DENIED']; - } - - if ($report_confirmed) { - return ['SUBMITTED', 'DENIED', 'DEFENDED', 'NOT_DEFENDED']; - } - - return ['SUBMITTED', 'DENIED']; - case 'DENIED': - if ($userRole === 'EMPLOYER') { - return ['CONFIRMED']; - } - return ['SUBMITTED', 'CONFIRMED']; - case 'DEFENDED': - case 'NOT_DEFENDED': - return []; - default: - throw new \InvalidArgumentException('Unknown status'); - } - } } diff --git a/backend/app/Http/Controllers/StudentDataController.php b/backend/app/Http/Controllers/StudentDataController.php index 1d24a25..f72f5ef 100644 --- a/backend/app/Http/Controllers/StudentDataController.php +++ b/backend/app/Http/Controllers/StudentDataController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers; use App\Models\Internship; use App\Models\StudentData; use App\Models\User; -use App\Models\InternshipStatus; +use App\Models\InternshipStatusData; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -208,7 +208,7 @@ class StudentDataController extends Controller // mazanie statusov $internships->each(function ($internship) { - InternshipStatus::whereInternshipId($internship->id)->delete(); + InternshipStatusData::whereInternshipId($internship->id)->delete(); }); // mazanie praxov diff --git a/backend/app/Mail/InternshipStatusUpdated.php b/backend/app/Mail/InternshipStatusUpdated.php index 53bd204..fdb43f3 100644 --- a/backend/app/Mail/InternshipStatusUpdated.php +++ b/backend/app/Mail/InternshipStatusUpdated.php @@ -2,6 +2,7 @@ namespace App\Mail; +use App\Enums\InternshipStatus; use App\Models\Internship; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; @@ -17,14 +18,14 @@ class InternshipStatusUpdated extends Mailable private string $changedByName; private string $studentName; private string $companyName; - private string $oldStatus; - private string $newStatus; + private InternshipStatus $oldStatus; + private InternshipStatus $newStatus; private string $note; /** * Create a new message instance. */ - public function __construct(Internship $internship, string $changedByName, string $studentName, string $companyName, string $oldStatus, string $newStatus, string $note) + public function __construct(Internship $internship, string $changedByName, string $studentName, string $companyName, InternshipStatus $oldStatus, InternshipStatus $newStatus, string $note) { $this->internship = $internship; $this->changedByName = $changedByName; @@ -57,8 +58,8 @@ class InternshipStatusUpdated extends Mailable "changedByName" => $this->changedByName, "studentName" => $this->studentName, "companyName" => $this->companyName, - "oldStatus" => $this->prettyStatus($this->oldStatus), - "newStatus" => $this->prettyStatus($this->newStatus), + "oldStatus" => $this->prettyStatus($this->oldStatus->value), + "newStatus" => $this->prettyStatus($this->newStatus->value), "note" => $this->note, ] ); @@ -78,8 +79,10 @@ class InternshipStatusUpdated extends Mailable { return match ($status) { 'SUBMITTED' => 'Zadané', - 'CONFIRMED' => 'Potvrdená', - 'DENIED' => 'Zamietnutá', + 'CONFIRMED_BY_COMPANY' => 'Potvrdená firmou', + 'CONFIRMED_BY_ADMIN' => 'Potvrdená garantom', + 'DENIED_BY_COMPANY' => 'Zamietnutá firmou', + 'DENIED_BY_ADMIN' => 'Zamietnutá garantom', 'DEFENDED' => 'Obhájená', 'NOT_DEFENDED' => 'Neobhájená', default => throw new \Exception("Invalid status: $status") diff --git a/backend/app/Models/Internship.php b/backend/app/Models/Internship.php index 4330fee..fa77655 100644 --- a/backend/app/Models/Internship.php +++ b/backend/app/Models/Internship.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Enums\InternshipStatus; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -24,7 +25,7 @@ class Internship extends Model 'year_of_study', 'semester', 'position_description', - 'agreement', + 'proof', 'report', 'report_confirmed', ]; @@ -63,7 +64,59 @@ class Internship extends Model public function status() { - return $this->hasOne(InternshipStatus::class, 'internship_id')->latestOfMany(); + return $this->hasOne(InternshipStatusData::class, 'internship_id')->latestOfMany(); + } + + public function nextStates(string $userRole) + { + $current_status = $this->status->status; + $report_confirmed = $this->report_confirmed; + + // študent nemôže meniť stav + if ($userRole === 'STUDENT') + return []; + + /* + nasledujúci platný stav je určený podľa: + - aktuálneho stavu + - roly používateľa, ktorý ide meniť stav + - či bol výkaz potvrdený firmou + */ + return match (true) { + // prax bola iba vytvorená a ide ju meniť admin alebo firma + $current_status === InternshipStatus::SUBMITTED + => ['CONFIRMED_BY_COMPANY', 'DENIED_BY_COMPANY'], + + // prax bola potvrdená firmou a ide ju meniť admin + $current_status === InternshipStatus::CONFIRMED_BY_COMPANY && $userRole === "ADMIN" + => ['CONFIRMED_BY_ADMIN', 'DENIED_BY_ADMIN'], + + // prax bola potvrdená firmou a ide ju meniť firma + $current_status === InternshipStatus::CONFIRMED_BY_COMPANY && $userRole === "EMPLOYER" + => ['DENIED_BY_COMPANY'], + + // prax bola zamietnutá firmou a ide ju meniť admin + $current_status === InternshipStatus::DENIED_BY_COMPANY && $userRole === "ADMIN" + => ['CONFIRMED_BY_COMPANY', 'SUBMITTED'], + + // prax bola potvrdená garantom, ide ju meniť admin a výkaz bol potvrdený firmou + $current_status === InternshipStatus::CONFIRMED_BY_ADMIN && $userRole === "ADMIN" && $report_confirmed + => ['DENIED_BY_ADMIN', 'CONFIRMED_BY_COMPANY', 'DENIED_BY_COMPANY', 'DEFENDED', 'NOT_DEFENDED'], + + // prax bola potvrdená garantom, ide ju meniť admin a výkaz nebol potvrdený firmou + $current_status === InternshipStatus::CONFIRMED_BY_ADMIN && $userRole === "ADMIN" && !$report_confirmed + => ['DENIED_BY_ADMIN', 'CONFIRMED_BY_COMPANY', 'DENIED_BY_COMPANY'], + + // prax bola obhájená a ide ju meniť admin + $current_status === InternshipStatus::DEFENDED && $userRole === "ADMIN" + => ['NOT_DEFENDED'], + + // prax nebola obhájená a ide ju meniť admin + $current_status === InternshipStatus::NOT_DEFENDED && $userRole === "ADMIN" + => ['DEFENDED'], + + default => [] + }; } /** @@ -82,7 +135,7 @@ class Internship extends Model 'year_of_study' => $this->year_of_study, 'semester' => $this->semester, 'position_description' => $this->position_description, - 'agreement' => $this->agreement !== null, + 'proof' => $this->proof !== null, 'report' => $this->report !== null, 'report_confirmed' => $this->report_confirmed, 'status' => $this->status, diff --git a/backend/app/Models/InternshipStatus.php b/backend/app/Models/InternshipStatusData.php similarity index 73% rename from backend/app/Models/InternshipStatus.php rename to backend/app/Models/InternshipStatusData.php index fc41517..63c4c28 100644 --- a/backend/app/Models/InternshipStatus.php +++ b/backend/app/Models/InternshipStatusData.php @@ -5,7 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class InternshipStatus extends Model +class InternshipStatusData extends Model { /** @use HasFactory<\Database\Factories\InternshipStatusFactory> */ use HasFactory; @@ -33,6 +33,20 @@ class InternshipStatus extends Model 'updated_at', ]; + protected $table = 'internship_statuses'; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'status' => '\App\Enums\InternshipStatus', + ]; + } + public function modifiedBy() { return $this->belongsTo(User::class, 'modified_by'); @@ -43,7 +57,7 @@ class InternshipStatus extends Model return [ 'id' => $this->id, 'internship_id' => $this->internship_id, - 'status' => $this->status, + 'status' => $this->status->value, 'changed' => $this->changed, 'note' => $this->note, 'modified_by' => $this->modifiedBy, diff --git a/backend/composer.json b/backend/composer.json index db682c5..dc92586 100644 --- a/backend/composer.json +++ b/backend/composer.json @@ -12,7 +12,7 @@ "php": "^8.2", "laravel/framework": "^12.0", "laravel/sanctum": "^4.0", - "laravel/tinker": "^2.10.1", + "laravel/tinker": "^2.10", "mpdf/mpdf": "^8.2" }, "require-dev": { diff --git a/backend/composer.lock b/backend/composer.lock index 19ead8e..4f9caa0 100644 --- a/backend/composer.lock +++ b/backend/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9911f9a2eb5e48d459c109368a23930b", + "content-hash": "3b2e99453e86a7f518baa13eca7aa622", "packages": [ { "name": "brick/math", @@ -1458,16 +1458,16 @@ }, { "name": "laravel/tinker", - "version": "v2.10.1", + "version": "v2.10.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "url": "https://api.github.com/repos/laravel/tinker/zipball/3bcb5f62d6f837e0f093a601e26badafb127bd4c", + "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c", "shasum": "" }, "require": { @@ -1518,9 +1518,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" + "source": "https://github.com/laravel/tinker/tree/v2.10.2" }, - "time": "2025-01-27T14:24:01+00:00" + "time": "2025-11-20T16:29:12+00:00" }, { "name": "league/commonmark", diff --git a/backend/database/factories/InternshipFactory.php b/backend/database/factories/InternshipFactory.php index 4b0e117..f2dd600 100644 --- a/backend/database/factories/InternshipFactory.php +++ b/backend/database/factories/InternshipFactory.php @@ -27,7 +27,7 @@ class InternshipFactory extends Factory 'year_of_study' => fake()->randomElement([1, 2, 3, 4, 5]), 'semester' => fake()->randomElement(["WINTER", "SUMMER"]), 'position_description' => fake()->jobTitle(), - 'agreement' => null, + 'proof' => null, 'report' => null, 'report_confirmed' => false, ]; diff --git a/backend/database/factories/InternshipStatusFactory.php b/backend/database/factories/InternshipStatusDataFactory.php similarity index 72% rename from backend/database/factories/InternshipStatusFactory.php rename to backend/database/factories/InternshipStatusDataFactory.php index 9826179..2512c6e 100644 --- a/backend/database/factories/InternshipStatusFactory.php +++ b/backend/database/factories/InternshipStatusDataFactory.php @@ -2,12 +2,13 @@ namespace Database\Factories; +use App\Enums\InternshipStatus; use Illuminate\Database\Eloquent\Factories\Factory; /** - * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\InternshipStatus> + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\InternshipStatusData> */ -class InternshipStatusFactory extends Factory +class InternshipStatusDataFactory extends Factory { /** * Define the model's default state. @@ -18,7 +19,7 @@ class InternshipStatusFactory extends Factory { return [ 'internship_id' => 0, - 'status' => fake()->randomElement(["SUBMITTED", "CONFIRMED", "DENIED", "DEFENDED", "NOT_DEFENDED"]), + 'status' => fake()->randomElement(InternshipStatus::all()), 'changed' => fake()->dateTime(), 'note' => null, 'modified_by' => 0, diff --git a/backend/database/migrations/2025_10_20_193012_create_internships_table.php b/backend/database/migrations/2025_10_20_193012_create_internships_table.php index 83571d4..b85d00c 100644 --- a/backend/database/migrations/2025_10_20_193012_create_internships_table.php +++ b/backend/database/migrations/2025_10_20_193012_create_internships_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class extends Migration { /** * Run the migrations. */ @@ -20,7 +19,7 @@ return new class extends Migration $table->unsignedSmallInteger("year_of_study")->nullable(false); $table->enum("semester", ["WINTER", "SUMMER"])->nullable(false); $table->string("position_description")->nullable(false); - $table->binary("agreement")->nullable(true); + $table->binary("proof")->nullable(true); $table->binary("report")->nullable(true); $table->boolean("report_confirmed")->nullable(false)->default(false); $table->timestamps(); diff --git a/backend/database/migrations/2025_10_20_193408_create_internship_statuses_table.php b/backend/database/migrations/2025_10_20_193408_create_internship_statuses_table.php index a54ffa7..fe3086a 100644 --- a/backend/database/migrations/2025_10_20_193408_create_internship_statuses_table.php +++ b/backend/database/migrations/2025_10_20_193408_create_internship_statuses_table.php @@ -1,11 +1,11 @@ id(); $table->foreignId("internship_id")->nullable(false)->constrained("internships")->onDelete("cascade"); - $table->enum("status", ["SUBMITTED", "CONFIRMED", "DENIED", "DEFENDED", "NOT_DEFENDED"])->nullable(false)->default("SUBMITTED"); + $table->enum("status", InternshipStatus::all())->nullable(false)->default(InternshipStatus::SUBMITTED); $table->dateTimeTz("changed")->nullable(false); $table->string("note")->nullable(true)->default(null); $table->foreignId("modified_by")->nullable(false)->constrained("users")->onDelete("cascade"); diff --git a/backend/database/seeders/DatabaseSeeder.php b/backend/database/seeders/DatabaseSeeder.php index 1e4a572..6dd478b 100644 --- a/backend/database/seeders/DatabaseSeeder.php +++ b/backend/database/seeders/DatabaseSeeder.php @@ -4,7 +4,7 @@ namespace Database\Seeders; use App\Models\Company; use App\Models\Internship; -use App\Models\InternshipStatus; +use App\Models\InternshipStatusData; use App\Models\StudentData; use App\Models\User; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; @@ -57,7 +57,7 @@ class DatabaseSeeder extends Seeder 'company_id' => Company::inRandomOrder()->value('id'), ]); - InternshipStatus::factory()->create([ + InternshipStatusData::factory()->create([ 'internship_id' => $internship->id, 'status' => "SUBMITTED", 'note' => 'made by seeder', diff --git a/backend/resources/views/agreement/default.blade.php b/backend/resources/views/proof/default.blade.php similarity index 100% rename from backend/resources/views/agreement/default.blade.php rename to backend/resources/views/proof/default.blade.php diff --git a/backend/routes/api.php b/backend/routes/api.php index 61c7fff..a21ab05 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -4,7 +4,7 @@ use App\Http\Controllers\Auth\RegisteredUserController; use App\Http\Controllers\CompanyController; use App\Http\Controllers\InternshipController; use App\Http\Controllers\StudentDataController; -use App\Http\Controllers\InternshipStatusController; +use App\Http\Controllers\InternshipStatusDataController; use App\Models\Company; use App\Models\StudentData; use Illuminate\Http\Request; @@ -46,11 +46,11 @@ Route::prefix('/internships')->group(function () { //Route::middleware("auth:sanctum")->group(function () { Route::prefix('/{id}')->group(function () { Route::get("/", [InternshipController::class, 'get'])->name("api.internships.get"); - Route::put("/status", [InternshipStatusController::class, 'update'])->name("api.internships.status.update"); - Route::get("/statuses", [InternshipStatusController::class, 'get'])->name("api.internships.get"); - Route::get("/next-statuses", [InternshipStatusController::class, 'get_next_states'])->name("api.internships.status.next.get"); - Route::get("/default-agreement", [InternshipController::class, 'get_default_agreement'])->name("api.internships.agreement.default.get"); - Route::get("/agreement", [InternshipController::class, 'get_agreement'])->name("api.internships.agreement.get"); + Route::put("/status", [InternshipStatusDataController::class, 'update'])->name("api.internships.status.update"); + Route::get("/statuses", [InternshipStatusDataController::class, 'get'])->name("api.internships.get"); + Route::get("/next-statuses", [InternshipStatusDataController::class, 'get_next_states'])->name("api.internships.status.next.get"); + Route::get("/default-proof", [InternshipController::class, 'get_default_proof'])->name("api.internships.proof.default.get"); + Route::get("/proof", [InternshipController::class, 'get_proof'])->name("api.internships.proof.get"); Route::get("/report", [InternshipController::class, 'get_report'])->name("api.internships.report.get"); Route::post("/documents", [InternshipController::class, 'update_documents'])->name("api.internships.documents.set"); Route::post("/basic", [InternshipController::class, 'update_basic'])->name("api.internships.update.basic"); diff --git a/frontend/app/components/InternshipAgreementDownloader.vue b/frontend/app/components/InternshipAgreementDownloader.vue index c82c0b9..29170f0 100644 --- a/frontend/app/components/InternshipAgreementDownloader.vue +++ b/frontend/app/components/InternshipAgreementDownloader.vue @@ -2,7 +2,8 @@ import { FetchError } from 'ofetch'; const props = defineProps<{ - internship_id: number + internship_id: number, + block?: boolean, }>(); const client = useSanctumClient(); @@ -13,8 +14,8 @@ async function requestDownload() { loading.value = true; try { - const agreement = await client(`/api/internships/${props.internship_id}/default-agreement`); - triggerDownload(agreement, `default-agreement-${props.internship_id}`); + const proof = await client(`/api/internships/${props.internship_id}/default-proof`); + triggerDownload(proof, `default-proof-${props.internship_id}`); } catch (e) { if (e instanceof FetchError) { alert(`Nepodarilo sa vygenerovať zmluvu: ${e.statusMessage}`); @@ -27,8 +28,8 @@ async function requestDownload() {