Feat: Meningkatkan PermohonanController dengan fitur-fitur baru dan meningkatkan penanganan data

- Merombak PermohonanController agar struktur dan keterbacaannya lebih baik.
- Menambahkan penanganan unggahan file dalam metode penyimpanan.
- Menerapkan validasi data dan penanganan kesalahan untuk membuat dan memperbarui Permohonan.
- Memperkenalkan pagination dan sorting dalam metode dataForDatatables dan dataForAuthorization.
- Menambahkan fungsi ekspor untuk data Permohonan.
- Membuat migrasi baru untuk menambahkan kolom 'nomor_registrasi' ke tabel 'persetujuan_penawaran'.
This commit is contained in:
2025-05-08 10:19:36 +07:00
parent 1c35d932d3
commit 0df676fa5e
3 changed files with 677 additions and 617 deletions

View File

@@ -1,32 +1,31 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Barryvdh\DomPDF\Facade\Pdf; use Barryvdh\DomPDF\Facade\Pdf;
use Exception; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\City; use Modules\Location\Models\City;
use Modules\Location\Models\District; use Modules\Location\Models\District;
use Modules\Location\Models\Province; use Modules\Location\Models\Province;
use Modules\Location\Models\Village; use Modules\Location\Models\Village;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Http\Requests\PermohonanRequest; use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\Branch; use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\JenisFasilitasKredit; use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\NilaiPlafond; use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PermohonanPembatalan; use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Lpj\Services\PermohonanHistoryService;
class PembatalanController extends Controller class PembatalanController extends Controller
{ {
public $user;
protected $historyService; protected $historyService;
public function __construct(PermohonanHistoryService $historyService) public function __construct(PermohonanHistoryService $historyService)
@@ -36,42 +35,46 @@
public function index() public function index()
{ {
return view('lpj::pembatalan.index'); $user = auth()->user();
return view('lpj::pembatalan.index', compact('user'));
} }
public function edit($id) public function edit($id)
{ {
$pembatalan = PermohonanPembatalan::with(['permohonan.debiture','permohonan.branch'])->find($id); $user = auth()->user();
$pembatalan = PermohonanPembatalan::with(['permohonan.debiture', 'permohonan.branch'])->find($id);
return view( return view(
'lpj::pembatalan.form', 'lpj::pembatalan.form',
compact( compact(
'pembatalan' 'pembatalan',
'user'
), ),
); );
} }
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
$user = auth()->user();
$pembatalan = PermohonanPembatalan::findOrFail($id); $pembatalan = PermohonanPembatalan::findOrFail($id);
$permohonan = Permohonan::find($pembatalan->permohonan_id); $permohonan = Permohonan::find($pembatalan->permohonan_id);
$beforeRequest = $permohonan->toArray(); $beforeRequest = $permohonan->toArray();
try { try {
// Update Permohonan Pembatalan // Update Permohonan Pembatalan
if($request->status=='approved'){ if ($request->status == 'approved') {
$pembatalan->status = 'approved'; $pembatalan->status = 'approved';
$pembatalan->authorized_at = now(); $pembatalan->authorized_at = now();
$pembatalan->authorized_by = auth()->user()->id; $pembatalan->authorized_by = $user->id;
$pembatalan->authorized_status = 1; $pembatalan->authorized_status = 1;
$pembatalan->save(); $pembatalan->save();
$permohonan->status = 'batal'; $permohonan->status = 'batal';
$permohonan->save(); $permohonan->save();
} else{ } else {
$pembatalan->status = 'rejected'; $pembatalan->status = 'rejected';
$pembatalan->authorized_at = now(); $pembatalan->authorized_at = now();
$pembatalan->authorized_by = auth()->user()->id; $pembatalan->authorized_by = $user->id;
$pembatalan->authorized_status = 3; $pembatalan->authorized_status = 3;
$pembatalan->save(); $pembatalan->save();
} }
@@ -86,12 +89,13 @@
public function dataForDatatables(Request $request) public function dataForDatatables(Request $request)
{ {
if (is_null($this->user) || !$this->user->can('debitur.view')) { $user = auth()->user();
if (is_null($user) || !$user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.'); //abort(403, 'Sorry! You are not allowed to view users.');
} }
// Retrieve data from the database // Retrieve data from the database
$query = PermohonanPembatalan::query(); $query = PermohonanPembatalan::query()->with(['permohonan']);
$query = $query->orderBy('created_at', 'desc'); $query = $query->orderBy('created_at', 'desc');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
@@ -108,8 +112,11 @@
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder'); $order = $request->get('sortOrder');
$column = $request->get('sortField'); $column = $request->get('sortField');
// Only allow sorting by existing columns
if (in_array($column, ['created_at', 'status', 'alasan_pembatalan'])) {
$query->orderBy($column, $order); $query->orderBy($column, $order);
} }
}
// Get the total count of records // Get the total count of records
$totalRecords = $query->count(); $totalRecords = $query->count();
@@ -131,7 +138,7 @@
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->with(['permohonan.debiture','permohonan.branch','creator'])->get(); $data = $query->with(['permohonan.debiture', 'permohonan.branch', 'creator'])->get();
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $size); $pageCount = ceil($totalRecords / $size);
@@ -150,4 +157,4 @@
'data' => $data, 'data' => $data,
]); ]);
} }
} }

View File

@@ -1,34 +1,36 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Exception; use App\Models\User;
use Illuminate\Http\JsonResponse; use Exception;
use Illuminate\Http\Request; use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log;
use Maatwebsite\Excel\Facades\Excel; use Illuminate\Support\Facades\Auth;
use Modules\Location\Models\City; use Illuminate\Support\Facades\DB;
use Modules\Location\Models\District; use Maatwebsite\Excel\Facades\Excel;
use Modules\Location\Models\Province; use Modules\Location\Models\City;
use Modules\Location\Models\Village; use Modules\Location\Models\District;
use Modules\Lpj\Exports\PermohonanExport; use Modules\Location\Models\Province;
use Modules\Lpj\Http\Requests\PermohonanRequest; use Modules\Location\Models\Village;
use Modules\Lpj\Models\Branch; use Modules\Lpj\Exports\PermohonanExport;
use Modules\Lpj\Models\Debiture; use Modules\Lpj\Http\Requests\PermohonanRequest;
use Modules\Lpj\Models\DokumenJaminan; use Modules\Lpj\Models\Branch;
use Modules\Lpj\Models\JenisFasilitasKredit; use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\NilaiPlafond; use Modules\Lpj\Models\DokumenJaminan;
use Modules\Lpj\Models\Penilaian; use Modules\Lpj\Models\JenisFasilitasKredit;
use Modules\Lpj\Models\Permohonan; use Modules\Lpj\Models\NilaiPlafond;
use Modules\Lpj\Models\PermohonanPembatalan; use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\TujuanPenilaian; use Modules\Lpj\Models\PermohonanPembatalan;
use Modules\Lpj\Services\PermohonanHistoryService; use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\TujuanPenilaian;
use Modules\Lpj\Services\PermohonanHistoryService;
class PermohonanController extends Controller class PermohonanController extends Controller
{ {
public $user; public $user;
protected $historyService; protected $historyService;
@@ -168,7 +170,7 @@
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query(); $query = Permohonan::query();
if (!Auth::user()->hasAnyRole(['administrator'])) { if (Auth::check() && !empty(Auth::user()->branch_id)) {
$query = $query->where('branch_id', Auth::user()->branch_id); $query = $query->where('branch_id', Auth::user()->branch_id);
} }
@@ -188,12 +190,36 @@
}); });
} }
// Log sorting parameters for debugging
Log::debug('Sorting parameters', [
'sortField' => $request->get('sortField'),
'sortOrder' => $request->get('sortOrder')
]);
// Apply sorting if provided // Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder'); $order = $request->get('sortOrder');
$column = $request->get('sortField'); $column = $request->get('sortField');
// Define allowed columns for sorting
$allowedColumns = [
'nomor_registrasi',
'mig_mst_lpj_nomor_jaminan',
'tanggal_permohonan',
'status',
'user_id',
'branch_id'
];
// Handle special cases for sorting
if ($column === 'pemohon') {
$query->orderBy('user_id', $order);
} elseif ($column === 'branch') {
$query->orderBy('branch_id', $order);
} elseif (in_array($column, $allowedColumns)) {
$query->orderBy($column, $order); $query->orderBy($column, $order);
} }
}
// Get the total count of records // Get the total count of records
$totalRecords = $query->count(); $totalRecords = $query->count();
@@ -284,7 +310,7 @@
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order'); $query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order');
if (!Auth::user()->hasAnyRole(['administrator'])) { if (Auth::check() && !empty(Auth::user()->branch_id)) {
$query = $query->where('branch_id', Auth::user()->branch_id); $query = $query->where('branch_id', Auth::user()->branch_id);
} }
@@ -405,7 +431,7 @@
} }
// Add created_by // Add created_by
$validatedData['created_by'] = auth()->id(); $validatedData['created_by'] = Auth::check() ? Auth::id() : null;
// Create new PermohonanPembatalan // Create new PermohonanPembatalan
$pembatalan = PermohonanPembatalan::create($validatedData); $pembatalan = PermohonanPembatalan::create($validatedData);
@@ -413,8 +439,8 @@
return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval'); return redirect()->route('permohonan.index')->with('success', 'Pembatalan Permohonan Menunggu Approval');
} }
public function storeAproved(Request $request, $id) public function storeAproved(Request $request, $id): JsonResponse
: JsonResponse { {
$data = []; $data = [];
if (request()->ajax()) { if (request()->ajax()) {
try { try {
@@ -514,5 +540,4 @@
]); ]);
} }
} }
}
}

View File

@@ -0,0 +1,28 @@
<?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('persetujuan_penawaran', function (Blueprint $table) {
$table->string('nomor_registrasi')->nullable()->after('penawaran_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->dropColumn('nomor_registrasi');
});
}
};