From 5e7368ebcf2f84b28b32c2f8e46a3b439a16dd49 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Thu, 17 Jul 2025 13:03:32 +0700 Subject: [PATCH] feat(memo): tambah field memo penyelesaian ke tabel NOC dan update generatePdf Menambahkan penyimpanan data memo penyelesaian ke tabel NOC dan memperbarui fungsi generatePdf di MemoController agar lebih terintegrasi. Perubahan yang dilakukan: - Menambahkan migrasi untuk field baru di tabel NOC: - memo_penyelesaian_number: nomor memo penyelesaian - memo_penyelesaian_date: tanggal memo - memo_penyelesaian_payment_date: tanggal pembayaran - memo_penyelesaian_pdf_path: path file PDF memo - memo_penyelesaian_created_at: timestamp pembuatan memo - Update model NOC: - Menambahkan field baru ke $fillable array untuk mass assignment - Menambahkan casting untuk field date dan datetime agar otomatis diconvert oleh Eloquent - Mempertahankan struktur model dan relasi yang sudah ada - Update MemoController: - Mengubah proses penyimpanan memo dari tabel permohonan ke tabel NOC - Menambahkan pencarian NOC berdasarkan permohonan_id - Menyimpan semua informasi memo penyelesaian langsung ke NOC - Tetap memperbarui status permohonan agar proses bisnis tetap berjalan - Menambahkan logging untuk mempermudah monitoring dan debugging - Menggunakan DB transaction untuk menjaga konsistensi data Struktur data memo penyelesaian: - Disimpan secara terpusat di tabel NOC sebagai source of truth - Memiliki relasi langsung dengan tabel permohonan untuk referensi data - Menyimpan path PDF memo untuk akses file yang lebih mudah - Menyediakan timestamp lengkap untuk kebutuhan audit trail Tujuan perubahan: - Memusatkan data memo penyelesaian di tabel NOC untuk kemudahan query dan reporting - Menjamin konsistensi data dengan mekanisme transaction - Memperjelas struktur relasi antara memo penyelesaian dan permohonan - Memudahkan proses tracking, pelaporan, dan audit memo penyelesaian --- app/Http/Controllers/MemoController.php | 42 ++++++++++++------- app/Models/Noc.php | 10 ++++- ..._memo_penyelesaian_fields_to_noc_table.php | 36 ++++++++++++++++ 3 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 database/migrations/2025_07_17_055636_add_memo_penyelesaian_fields_to_noc_table.php diff --git a/app/Http/Controllers/MemoController.php b/app/Http/Controllers/MemoController.php index 04390f1..097a94e 100644 --- a/app/Http/Controllers/MemoController.php +++ b/app/Http/Controllers/MemoController.php @@ -452,34 +452,48 @@ class MemoController extends Controller Storage::disk('public')->put($filePath, $pdf->output()); // Update status permohonan yang dipilih + // Update data di tabel NOC untuk setiap permohonan foreach ($permohonanIds as $permohonanId) { - $permohonan = Permohonan::find($permohonanId); - if ($permohonan) { - $permohonan->status = 'memo-penyelesaian'; - $permohonan->memo_penyelesaian_number = $memoNumber; - $permohonan->memo_penyelesaian_date = $memoDate; - $permohonan->memo_penyelesaian_payment_date = $paymentDate; - $permohonan->memo_penyelesaian_created_at = now(); - $permohonan->memo_penyelesaian_pdf_path = $filePath; - //$permohonan->save(); + // Cari NOC berdasarkan permohonan_id + $noc = Noc::where('permohonan_id', $permohonanId)->first(); - Log::info('MemoController: Berhasil update permohonan ID: ' . $permohonanId); - } + if ($noc) { + // Update field memo penyelesaian di tabel NOC + $noc->memo_penyelesaian = $filePath; + $noc->memo_penyelesaian_number = $memoNumber; + $noc->memo_penyelesaian_date = $memoDate; + $noc->memo_penyelesaian_payment_date = $paymentDate; + $noc->memo_penyelesaian_created_at = now(); + $noc->save(); + + Log::info('MemoController: Berhasil update NOC untuk permohonan ID: ' . $permohonanId); + } else { + Log::warning('MemoController: NOC tidak ditemukan untuk permohonan ID: ' . $permohonanId); + } + + // Update status permohonan + $permohonan = Permohonan::find($permohonanId); + if ($permohonan) { + $permohonan->status = 'memo-penyelesaian'; + $permohonan->save(); + + Log::info('MemoController: Berhasil update status permohonan ID: ' . $permohonanId); + } } DB::commit(); Log::info('MemoController: Berhasil generate PDF dan menyimpan memo penyelesaian untuk ' . count($permohonanIds) . ' permohonan'); // Return PDF untuk download - return $pdf->download($fileName); + return $pdf->download('memo-penyelesaian-' . $memoNumber . '.pdf'); } catch (Exception $e) { DB::rollback(); Log::error('MemoController: Error saat generate PDF memo penyelesaian - ' . $e->getMessage()); return redirect()->back() - ->withInput() - ->with('error', 'Terjadi kesalahan saat generate PDF memo penyelesaian: ' . $e->getMessage()); + ->with('error', 'Terjadi kesalahan saat generate PDF memo penyelesaian: ' . $e->getMessage()) + ->withInput(); } } diff --git a/app/Models/Noc.php b/app/Models/Noc.php index 16a0342..edc266a 100644 --- a/app/Models/Noc.php +++ b/app/Models/Noc.php @@ -2,8 +2,7 @@ namespace Modules\Lpj\Models; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Foundation\Auth\User; // use Modules\Lpj\Database\Factories\NocFactory; class Noc extends Base @@ -23,6 +22,10 @@ class Noc extends Base 'bukti_penyelesaian', 'bukti_ksl', 'memo_penyelesaian', + 'memo_penyelesaian_number', + 'memo_penyelesaian_date', + 'memo_penyelesaian_payment_date', + 'memo_penyelesaian_created_at', 'catatan_noc', 'status', 'authorized_status', @@ -37,6 +40,9 @@ class Noc extends Base 'nominal_penyelesaian' => 'decimal:2', 'status_penyelesaiaan' => 'boolean', 'tanggal_penyelesaian' => 'date', + 'memo_penyelesaian_date' => 'date', + 'memo_penyelesaian_payment_date' => 'date', + 'memo_penyelesaian_created_at' => 'datetime', 'status' => 'boolean', 'authorized_status' => 'boolean', 'authorized_at' => 'datetime', diff --git a/database/migrations/2025_07_17_055636_add_memo_penyelesaian_fields_to_noc_table.php b/database/migrations/2025_07_17_055636_add_memo_penyelesaian_fields_to_noc_table.php new file mode 100644 index 0000000..3ad7b46 --- /dev/null +++ b/database/migrations/2025_07_17_055636_add_memo_penyelesaian_fields_to_noc_table.php @@ -0,0 +1,36 @@ +string('memo_penyelesaian_number')->nullable()->after('memo_penyelesaian'); + $table->date('memo_penyelesaian_date')->nullable()->after('memo_penyelesaian_number'); + $table->date('memo_penyelesaian_payment_date')->nullable()->after('memo_penyelesaian_date'); + $table->timestamp('memo_penyelesaian_created_at')->nullable()->after('memo_penyelesaian_date'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('noc', function (Blueprint $table) { + $table->dropColumn([ + 'memo_penyelesaian_number', + 'memo_penyelesaian_date', + 'memo_penyelesaian_payment_date', + 'memo_penyelesaian_created_at' + ]); + }); + } +};