Update Form

This commit is contained in:
NoBody313
2025-05-08 09:36:20 +07:00
parent 653482d2b2
commit ca9fd810a7
6 changed files with 687 additions and 150 deletions
+26 -7
View File
@@ -4,6 +4,8 @@ namespace App\Http\Controllers;
use App\Models\FileUpload;
use App\Models\Letter;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
@@ -11,6 +13,7 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\URL;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Exception;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
/**
@@ -103,8 +106,8 @@ class LetterController extends Controller
'program_studi_mahasiswa' => 'required|string',
'tahun_ajaran' => 'required|string',
'start_date' => 'required|date',
'completion_date' => 'nullable|date',
'nomor_surat_acceptance' => 'nullable|string',
'completion_date' => 'required|date',
'nomor_surat_acceptance' => 'required|string',
'nomor_surat_completion' => 'nullable|string',
'lampiran' => 'nullable|file|mimes:pdf,jpg,png|max:2048',
]);
@@ -197,25 +200,27 @@ class LetterController extends Controller
'program_studi_mahasiswa' => 'sometimes|string',
'tahun_ajaran' => 'sometimes|string',
'start_date' => 'sometimes|date',
'completion_date' => 'sometimes|date',
'completion_date' => 'required|date',
'is_acceptance' => 'sometimes|boolean',
'nomor_surat_acceptance' => 'nullable|string',
'is_completion' => 'sometimes|boolean',
'is_completion' => 'nullable|boolean',
'nomor_surat_completion' => 'nullable|string',
'lampiran' => 'nullable|file|mimes:pdf,jpg,png|max:2048',
]);
// Update boolean flags if letter numbers are provided
// Force update boolean if nomor_surat_* diberikan
if ($request->has('nomor_surat_acceptance')) {
$validated['is_acceptance'] = !empty($request->nomor_surat_acceptance);
$validated['is_acceptance'] = !empty($request->input('nomor_surat_acceptance'));
}
if ($request->has('nomor_surat_completion')) {
$validated['is_completion'] = !empty($request->nomor_surat_completion);
$validated['is_completion'] = !empty($request->input('nomor_surat_completion'));
}
// Update letter
$letter->update($validated);
// Upload file jika ada
if ($request->hasFile('lampiran')) {
$this->handleFileUpload($request->file('lampiran'), $letter, true);
}
@@ -314,6 +319,20 @@ class LetterController extends Controller
}
}
public function generateSurat($id)
{
$letter = Letter::findOrFail($id);
$letter->start_formatted = Carbon::parse($letter->start_date)->translatedFormat('j F Y');
$letter->end_formatted = Carbon::parse($letter->completion_date)->translatedFormat('j F Y');
$pdf = Pdf::loadView('template', ['letter' => $letter, 'tanggalSurat' => Carbon::now()->isoFormat('D MMMM Y')]);
return $pdf->download('Surat.pdf')
->withHeaders([
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, OPTIONS',
'Access-Control-Allow-Headers' => 'Content-Type, Authorization',
]);
}
/**
* Format letter data for consistent API response
*
+4
View File
@@ -2,6 +2,7 @@
namespace App\Providers;
use Carbon\Carbon;
use Dedoc\Scramble\Scramble;
use Dedoc\Scramble\Support\Generator\OpenApi;
use Dedoc\Scramble\Support\Generator\SecurityScheme;
@@ -23,6 +24,9 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
Carbon::setLocale('id');
setlocale(LC_TIME, 'id_ID.UTF-8');
Scramble::configure()
->withDocumentTransformers(function (OpenApi $openApi) {
$openApi->secure(
+1
View File
@@ -10,6 +10,7 @@
"license": "MIT",
"require": {
"php": "^8.2",
"barryvdh/laravel-dompdf": "^3.1",
"dedoc/scramble": "^0.12.15",
"laravel/framework": "^12.0",
"laravel/pulse": "^1.4",
Generated
+516 -143
View File
File diff suppressed because it is too large Load Diff
+138
View File
@@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Surat Penerimaan</title>
<style>
@page {
size: A4;
margin: 2cm;
}
body {
font-family: Helvetica, Arial, sans-serif;
margin: 0;
padding: 0;
text-align: justify;
}
.container {
width: 100%;
}
.kop {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.kop img {
width: 60px;
height: 60px;
}
.kop-text {
flex: 1;
text-align: start;
}
.line {
border-bottom: 2px solid black;
margin-bottom: 20px;
}
.right {
text-align: right;
}
.section {
margin-bottom: 15px;
}
.label {
display: inline-block;
width: 100px;
}
.bold {
font-weight: bold;
}
</style>
</head>
<body>
<div class="container">
{{-- Kop Surat --}}
<table style="width: 100%; margin-bottom: 20px;">
<tr>
<td style="width: 80px;">
<img src="{{ public_path('assets/humic.jpg') }}" alt="Logo" style="width: 80px;height: 80px">
</td>
<td style="text-align: center;">
<div style="font-size: 14pt; font-weight: bold; line-height: 1.3;">
Pusat Penelitian HUMIC Engineering<br>
Universitas Telkom
</div>
<div style="font-size: 10pt; margin-top: 4px; line-height: 1.4;">
Jl. Telekomunikasi Terusan Buah Batu, Bandung 40257, Jawa Barat, Indonesia<br>
Telp/Faks: +6281321397936 / +6222-70658638 / +6222-7565931
</div>
</td>
</tr>
</table>
<div class="line"></div>
{{-- Detail Surat --}}
<div class="section">
<div><span class="label">Nomor</span>: {{ $letter->nomor_surat_acceptance }}</div>
<div><span class="label">Lampiran</span>: -</div>
<div><span class="label">Perihal</span>: Surat Penerimaan Kerja Praktek</div>
</div>
<div class="section">
<p>Kepada Yth.<br>
Kaprodi {{ $letter->program_studi_mahasiswa }} <br>
di Tempat</p>
</div>
<div class="section">
<p>Dengan hormat,</p>
<p>
Sehubungan dengan pengajuan kerja praktek di CoE Humic Engineering yang telah diajukan oleh mahasiswa
atas nama:
</p>
</div>
<div class="section">
<div><span class="label">Nama</span>: {{ $letter->nama_mahasiswa }}</div>
<div><span class="label">NIM</span>: {{ $letter->nomor_induk_mahasiswa }}</div>
<div><span class="label">Prodi</span>: {{ $letter->program_studi_mahasiswa }}</div>
</div>
<div class="section">
<p>
Dengan ini kami menyatakan bahwa mahasiswa yang bersangkutan <span class="bold">DITERIMA</span> untuk
melaksanakan kerja praktek di CoE Human Centric Engineering, Telkom University. Kegiatan ini
dilaksanakan pada tanggal {{ $letter->start_formatted }} sampai dengan {{ $letter->end_formatted }},
periode Tahun Ajaran Ganjil {{ $letter->tahun_ajaran }}.
</p>
<p>
Demikian surat keterangan ini kami buat agar dapat dipergunakan sebagaimana mestinya.
</p>
</div>
<div class="section">
<p>Bandung, {{ $tanggalSurat }}</p>
<br><br><br>
<p><span class="bold" style="text-decoration: underline;">Assoc. Prof. Dr. Satria Manda</span><br>
Direktur CoE HUMIC ENGINERING</p>
</div>
</div>
</body>
</html>
+2
View File
@@ -1,6 +1,7 @@
<?php
use App\Http\Controllers\AdminMonitoringController;
use App\Http\Controllers\LetterController;
use Illuminate\Auth\Middleware\Authorize;
use Illuminate\Support\Facades\Route;
@@ -14,4 +15,5 @@ Route::post('/monitoring/login', [AdminMonitoringController::class, 'login'])
Route::middleware('auth:monitoring')->group(function () {
Route::post('/monitoring/logout', [AdminMonitoringController::class, 'logout'])
->name('monitoring.logout');
Route::get('/generate-surat', [LetterController::class, 'generateSurat']);
});