feat(webstatement): tambah field password untuk proteksi PDF statement

Perubahan yang dilakukan:
- Menambahkan kolom password (nullable) pada tabel print_statement_logs melalui migrasi baru.
- Menambahkan field password di model PrintStatementLog dengan atribut hidden untuk keamanan serialisasi.
- Menambahkan input password pada form request print statement.
- Menambahkan validasi sisi klien agar password minimal 6 karakter.
- Menambahkan konfirmasi melalui SweetAlert untuk pengisian password dan email tujuan.
- Menambahkan index pada kolom password untuk optimasi pencarian jika dibutuhkan.
- Menggunakan field password untuk proteksi file PDF melalui PDFPasswordProtect.
- Menambahkan helper text dan placeholder pada form untuk meningkatkan pengalaman pengguna.
- Menambahkan atribut autocomplete="new-password" untuk menghindari autofill browser yang tidak aman.
- Menjaga kompatibilitas ke belakang dengan membuat field bersifat opsional (nullable).

Tujuan perubahan:
- Memberikan opsi proteksi file PDF dengan password yang diatur oleh pengguna.
- Meningkatkan keamanan distribusi file statement melalui email.
- Memastikan pengalaman pengguna tetap aman dan nyaman saat mengatur proteksi.
This commit is contained in:
Daeng Deni Mardaeni
2025-07-10 14:33:26 +07:00
parent 593a4f0d9c
commit 5b235def37
4 changed files with 110 additions and 25 deletions

View File

@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Menjalankan migrasi untuk menambahkan kolom password ke tabel print_statement_logs
*
* @return void
*/
public function up(): void
{
Schema::table('print_statement_logs', function (Blueprint $table) {
// Menambahkan kolom password setelah kolom stmt_sent_type
$table->string('password', 255)->nullable()->after('stmt_sent_type')
->comment('Password untuk proteksi PDF statement');
// Menambahkan index untuk performa query jika diperlukan
$table->index(['password'], 'idx_print_statement_logs_password');
});
}
/**
* Membalikkan migrasi dengan menghapus kolom password
*
* @return void
*/
public function down(): void
{
Schema::table('print_statement_logs', function (Blueprint $table) {
// Hapus index terlebih dahulu
$table->dropIndex('idx_print_statement_logs_password');
// Hapus kolom password
$table->dropColumn('password');
});
}
};