Update Form
This commit is contained in:
@@ -4,6 +4,8 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\Models\FileUpload;
|
use App\Models\FileUpload;
|
||||||
use App\Models\Letter;
|
use App\Models\Letter;
|
||||||
|
use Barryvdh\DomPDF\Facade\Pdf;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -11,6 +13,7 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
use Illuminate\Support\Facades\URL;
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,8 +106,8 @@ class LetterController extends Controller
|
|||||||
'program_studi_mahasiswa' => 'required|string',
|
'program_studi_mahasiswa' => 'required|string',
|
||||||
'tahun_ajaran' => 'required|string',
|
'tahun_ajaran' => 'required|string',
|
||||||
'start_date' => 'required|date',
|
'start_date' => 'required|date',
|
||||||
'completion_date' => 'nullable|date',
|
'completion_date' => 'required|date',
|
||||||
'nomor_surat_acceptance' => 'nullable|string',
|
'nomor_surat_acceptance' => 'required|string',
|
||||||
'nomor_surat_completion' => 'nullable|string',
|
'nomor_surat_completion' => 'nullable|string',
|
||||||
'lampiran' => 'nullable|file|mimes:pdf,jpg,png|max:2048',
|
'lampiran' => 'nullable|file|mimes:pdf,jpg,png|max:2048',
|
||||||
]);
|
]);
|
||||||
@@ -197,25 +200,27 @@ class LetterController extends Controller
|
|||||||
'program_studi_mahasiswa' => 'sometimes|string',
|
'program_studi_mahasiswa' => 'sometimes|string',
|
||||||
'tahun_ajaran' => 'sometimes|string',
|
'tahun_ajaran' => 'sometimes|string',
|
||||||
'start_date' => 'sometimes|date',
|
'start_date' => 'sometimes|date',
|
||||||
'completion_date' => 'sometimes|date',
|
'completion_date' => 'required|date',
|
||||||
'is_acceptance' => 'sometimes|boolean',
|
'is_acceptance' => 'sometimes|boolean',
|
||||||
'nomor_surat_acceptance' => 'nullable|string',
|
'nomor_surat_acceptance' => 'nullable|string',
|
||||||
'is_completion' => 'sometimes|boolean',
|
'is_completion' => 'nullable|boolean',
|
||||||
'nomor_surat_completion' => 'nullable|string',
|
'nomor_surat_completion' => 'nullable|string',
|
||||||
'lampiran' => 'nullable|file|mimes:pdf,jpg,png|max:2048',
|
'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')) {
|
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')) {
|
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);
|
$letter->update($validated);
|
||||||
|
|
||||||
|
// Upload file jika ada
|
||||||
if ($request->hasFile('lampiran')) {
|
if ($request->hasFile('lampiran')) {
|
||||||
$this->handleFileUpload($request->file('lampiran'), $letter, true);
|
$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
|
* Format letter data for consistent API response
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Dedoc\Scramble\Scramble;
|
use Dedoc\Scramble\Scramble;
|
||||||
use Dedoc\Scramble\Support\Generator\OpenApi;
|
use Dedoc\Scramble\Support\Generator\OpenApi;
|
||||||
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
use Dedoc\Scramble\Support\Generator\SecurityScheme;
|
||||||
@@ -23,6 +24,9 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
|
Carbon::setLocale('id');
|
||||||
|
setlocale(LC_TIME, 'id_ID.UTF-8');
|
||||||
|
|
||||||
Scramble::configure()
|
Scramble::configure()
|
||||||
->withDocumentTransformers(function (OpenApi $openApi) {
|
->withDocumentTransformers(function (OpenApi $openApi) {
|
||||||
$openApi->secure(
|
$openApi->secure(
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.2",
|
"php": "^8.2",
|
||||||
|
"barryvdh/laravel-dompdf": "^3.1",
|
||||||
"dedoc/scramble": "^0.12.15",
|
"dedoc/scramble": "^0.12.15",
|
||||||
"laravel/framework": "^12.0",
|
"laravel/framework": "^12.0",
|
||||||
"laravel/pulse": "^1.4",
|
"laravel/pulse": "^1.4",
|
||||||
|
|||||||
Generated
+516
-143
File diff suppressed because it is too large
Load Diff
@@ -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>
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\AdminMonitoringController;
|
use App\Http\Controllers\AdminMonitoringController;
|
||||||
|
use App\Http\Controllers\LetterController;
|
||||||
use Illuminate\Auth\Middleware\Authorize;
|
use Illuminate\Auth\Middleware\Authorize;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
@@ -14,4 +15,5 @@ Route::post('/monitoring/login', [AdminMonitoringController::class, 'login'])
|
|||||||
Route::middleware('auth:monitoring')->group(function () {
|
Route::middleware('auth:monitoring')->group(function () {
|
||||||
Route::post('/monitoring/logout', [AdminMonitoringController::class, 'logout'])
|
Route::post('/monitoring/logout', [AdminMonitoringController::class, 'logout'])
|
||||||
->name('monitoring.logout');
|
->name('monitoring.logout');
|
||||||
|
Route::get('/generate-surat', [LetterController::class, 'generateSurat']);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user