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
This commit is contained in:
@@ -452,18 +452,32 @@ class MemoController extends Controller
|
|||||||
Storage::disk('public')->put($filePath, $pdf->output());
|
Storage::disk('public')->put($filePath, $pdf->output());
|
||||||
|
|
||||||
// Update status permohonan yang dipilih
|
// Update status permohonan yang dipilih
|
||||||
|
// Update data di tabel NOC untuk setiap permohonan
|
||||||
foreach ($permohonanIds as $permohonanId) {
|
foreach ($permohonanIds as $permohonanId) {
|
||||||
|
// Cari NOC berdasarkan permohonan_id
|
||||||
|
$noc = Noc::where('permohonan_id', $permohonanId)->first();
|
||||||
|
|
||||||
|
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);
|
$permohonan = Permohonan::find($permohonanId);
|
||||||
if ($permohonan) {
|
if ($permohonan) {
|
||||||
$permohonan->status = 'memo-penyelesaian';
|
$permohonan->status = 'memo-penyelesaian';
|
||||||
$permohonan->memo_penyelesaian_number = $memoNumber;
|
$permohonan->save();
|
||||||
$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();
|
|
||||||
|
|
||||||
Log::info('MemoController: Berhasil update permohonan ID: ' . $permohonanId);
|
Log::info('MemoController: Berhasil update status permohonan ID: ' . $permohonanId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,15 +485,15 @@ class MemoController extends Controller
|
|||||||
Log::info('MemoController: Berhasil generate PDF dan menyimpan memo penyelesaian untuk ' . count($permohonanIds) . ' permohonan');
|
Log::info('MemoController: Berhasil generate PDF dan menyimpan memo penyelesaian untuk ' . count($permohonanIds) . ' permohonan');
|
||||||
|
|
||||||
// Return PDF untuk download
|
// Return PDF untuk download
|
||||||
return $pdf->download($fileName);
|
return $pdf->download('memo-penyelesaian-' . $memoNumber . '.pdf');
|
||||||
|
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
Log::error('MemoController: Error saat generate PDF memo penyelesaian - ' . $e->getMessage());
|
Log::error('MemoController: Error saat generate PDF memo penyelesaian - ' . $e->getMessage());
|
||||||
|
|
||||||
return redirect()->back()
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
namespace Modules\Lpj\Models;
|
namespace Modules\Lpj\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Foundation\Auth\User;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
// use Modules\Lpj\Database\Factories\NocFactory;
|
// use Modules\Lpj\Database\Factories\NocFactory;
|
||||||
|
|
||||||
class Noc extends Base
|
class Noc extends Base
|
||||||
@@ -23,6 +22,10 @@ class Noc extends Base
|
|||||||
'bukti_penyelesaian',
|
'bukti_penyelesaian',
|
||||||
'bukti_ksl',
|
'bukti_ksl',
|
||||||
'memo_penyelesaian',
|
'memo_penyelesaian',
|
||||||
|
'memo_penyelesaian_number',
|
||||||
|
'memo_penyelesaian_date',
|
||||||
|
'memo_penyelesaian_payment_date',
|
||||||
|
'memo_penyelesaian_created_at',
|
||||||
'catatan_noc',
|
'catatan_noc',
|
||||||
'status',
|
'status',
|
||||||
'authorized_status',
|
'authorized_status',
|
||||||
@@ -37,6 +40,9 @@ class Noc extends Base
|
|||||||
'nominal_penyelesaian' => 'decimal:2',
|
'nominal_penyelesaian' => 'decimal:2',
|
||||||
'status_penyelesaiaan' => 'boolean',
|
'status_penyelesaiaan' => 'boolean',
|
||||||
'tanggal_penyelesaian' => 'date',
|
'tanggal_penyelesaian' => 'date',
|
||||||
|
'memo_penyelesaian_date' => 'date',
|
||||||
|
'memo_penyelesaian_payment_date' => 'date',
|
||||||
|
'memo_penyelesaian_created_at' => 'datetime',
|
||||||
'status' => 'boolean',
|
'status' => 'boolean',
|
||||||
'authorized_status' => 'boolean',
|
'authorized_status' => 'boolean',
|
||||||
'authorized_at' => 'datetime',
|
'authorized_at' => 'datetime',
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration {
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('noc', function (Blueprint $table) {
|
||||||
|
// Field untuk informasi memo penyelesaian
|
||||||
|
$table->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'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user