Merge branch 'staging' into feature/senior-officer

This commit is contained in:
majid
2025-01-06 14:27:48 +07:00
14 changed files with 971 additions and 96 deletions

View File

@@ -8,6 +8,7 @@
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Log;
use Modules\Location\Models\City;
use Modules\Location\Models\District;
use Modules\Location\Models\Province;
@@ -20,6 +21,7 @@
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan;
use Modules\Lpj\Models\Permohonan;
use ZipArchive;
class DokumenJaminanController extends Controller
@@ -31,6 +33,13 @@
{
$debitur = Debiture::find($id);
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
if (request()->get('permohonan_id') !== null) {
$permohonan_id = request()->get('permohonan_id');
$documents = DokumenJaminan::with('pemilik', 'detail')
->where('debiture_id', $id)
->where('permohonan_id', $permohonan_id)
->get();
}
return view(
'lpj::debitur.edit',
@@ -127,7 +136,10 @@
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$pemilikJaminan = PemilikJaminan::where('debiture_id', $id)->get();
$hubunganPemilik = HubunganPemilikJaminan::all();
$permohonan = null;
if(request()->get('permohonan_id')) {
$permohonan = Permohonan::where('id', request()->get('permohonan_id'))->first();
}
return view(
'lpj::debitur.jaminan',
compact(
@@ -137,6 +149,7 @@
'jenisLegalitasJaminan',
'pemilikJaminan',
'hubunganPemilik',
'permohonan'
),
);
}
@@ -238,7 +251,7 @@
];
$dokumenJaminan = [];
$dokumenNomor=[];
$dokumenNomor = [];
if (isset($request->dokumen_jaminan[$key]) && is_array($request->dokumen_jaminan[$key])) {
foreach ($request->dokumen_jaminan[$key] as $index => $file) {
@@ -311,7 +324,8 @@
public function edit(
$id,
$jaminan,
) {
)
{
$document = DokumenJaminan::find($jaminan);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
@@ -325,9 +339,9 @@
$jenisJaminan = JenisJaminan::all();
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitas='';
if($_jenisJaminan) {
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
$legalitas = '';
if ($_jenisJaminan) {
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn(
@@ -367,7 +381,8 @@
public function destroy(
$id,
$jaminan_id,
) {
)
{
try {
$jaminan = DokumenJaminan::find($jaminan_id);
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $jaminan->id)->get();
@@ -385,7 +400,7 @@
public function bulkDownload()
{
$dokumenIds = request()->get('jaminan'); // Expecting an array of dokumen_jaminan_id
$documents = DokumenJaminan::where('id', $dokumenIds)->with(['jenisJaminan', 'detail','debiture'])->get();
$documents = DokumenJaminan::where('id', $dokumenIds)->with(['jenisJaminan', 'detail', 'debiture'])->get();
if ($documents->isEmpty()) {
return redirect()->back()->with('error', 'No documents found for the provided IDs.');
@@ -397,23 +412,23 @@
if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) {
foreach ($documents as $document) {
$jenisJaminan = $document->debiture->permohonan->nomor_registrasi ?? 'Uncategorized';
$folderName = $this->sanitizeFolderName($jenisJaminan);
$jenisJaminan = $document->debiture->permohonan->nomor_registrasi ?? 'Uncategorized';
$folderName = $this->sanitizeFolderName($jenisJaminan);
foreach ($document->detail as $detail) {
if($detail->dokumen_jaminan) {
$folderJaminanName = $this->sanitizeFolderName($detail->jenisLegalitasJaminan->name?? 'Uncategorized');
$files = is_array(json_decode($detail->dokumen_jaminan))
if ($detail->dokumen_jaminan) {
$folderJaminanName = $this->sanitizeFolderName($detail->jenisLegalitasJaminan->name ?? 'Uncategorized');
$files = is_array(json_decode($detail->dokumen_jaminan))
? json_decode($detail->dokumen_jaminan)
: [$detail->dokumen_jaminan];
foreach ($files as $file) {
$filePath = storage_path('app/public/' . $file);
if (file_exists($filePath)) {
$zip->addFile($filePath, $folderName . '/' .$folderJaminanName.'/'.basename($filePath));
$zip->addFile($filePath, $folderName . '/' . $folderJaminanName . '/' . basename($filePath));
} else {
// Log or display an error message for missing files
\Log::warning('File not found: ' . $filePath);
Log::warning('File not found: ' . $filePath);
}
}
}
@@ -463,7 +478,8 @@
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1)
: JsonResponse {
: JsonResponse
{
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
@@ -487,7 +503,7 @@
'dokumen_jaminan' => json_decode(
$detail->dokumen_jaminan,
) ?? $detail->dokumen_jaminan,
'dokumen_nomor' => json_decode(
'dokumen_nomor' => json_decode(
$detail->dokumen_nomor,
) ?? $detail->dokumen_nomor,
'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
@@ -508,7 +524,7 @@
'jenis_legalitas_jaminan_id' => $legalitas->id,
'name' => $legalitas->name,
'dokumen_jaminan' => null,
'dokumen_nomor' => null,
'dokumen_nomor' => null,
'custom_field' => $legalitas->custom_field,
'custom_field_type' => $legalitas->custom_field_type,
'details' => null,

View File

@@ -8,6 +8,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\Authorization;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenilaianTeam;
@@ -376,6 +377,9 @@ class PenilaianController extends Controller
$header = $headers[$type] ?? 'Pelaporan';
if($header==='SLA') {
return view('lpj::penilaian.otorisator.index-sla', compact('header'));
}
return view('lpj::penilaian.otorisator.index', compact('header'));
}
@@ -389,14 +393,32 @@ class PenilaianController extends Controller
];
$header = $headers[$type] ?? 'Pelaporan';
$permohonan = Permohonan::find($id);
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header'));
$authorization=null;
if($header === 'SLA') {
$authorization = Authorization::with(['user'])->find($id);
$permohonan = Permohonan::find($authorization->permohonan_id);
} else {
$permohonan = Permohonan::find($id);
}
if($header === 'SLA') {
return view('lpj::penilaian.otorisator.sla', compact('permohonan', 'header','authorization'));
}
return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header','authorization'));
}
public function otorisatorUpdate(Request $request, $id, $context)
{
$permohonan = Permohonan::find($id);
if($context==='SLA'){
$authorization = Authorization::with(['user'])->find($id);
if (!$authorization) {
return response()->json([
'message' => 'Data authorization SLA tidak ditemukan.',
], 404);
}
$permohonan = Permohonan::find($authorization->permohonan_id);
} else {
$permohonan = Permohonan::find($id);
}
if (!$permohonan) {
return response()->json([
'message' => 'Data permohonan tidak ditemukan.',
@@ -447,13 +469,41 @@ class PenilaianController extends Controller
break;
case 'sla':
if (Auth::user()->roles[0]->name === 'senior-officer') {
$authorization->update([
'status' => '3',
'approve_so' => Auth::user()->id,
'approve_so_at' => now(),
'keterangan_so' => $request->message,
]);
} elseif (Auth::user()->roles[0]->name === 'EO Appraisal' || Auth::user()->roles[0]->name === 'administrator') {
$status = '2';
if(!in_array($permohonan->nulai_plafond_id,[1,4])){
$status = '1';
$permohonan->update([
'status' => $authorization->request
]);
}
$permohonan->update([
'status' => 'proses-sla',
'keterangan' => $request->message,
]);
$authorization->update([
'status' => $status,
'approve_eo' => Auth::user()->id,
'approve_eo_at' => now(),
'keterangan_eo' => $request->message,
]);
} elseif (Auth::user()->roles[0]->name === 'DD Appraisal') {
$authorization->update([
'status' => '1',
'approve_dd' => Auth::user()->id,
'approve_dd_at' => now(),
'keterangan_dd' => $request->message,
]);
$permohonan->update([
'status' => $authorization->request
]);
}
break;
default:
return response()->json([

View File

@@ -69,6 +69,11 @@
$permohonan->toArray(),
$filePath,
);
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if(count($documents)<1){
return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id'=>$permohonan->id],['id'=> $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect()
->route('permohonan.index')->with('success', 'Permohonan created successfully');
} catch (Exception $e) {
@@ -151,6 +156,11 @@
}
$permohonan->update($validate);
$documents = DokumenJaminan::where('permohonan_id', $permohonan->id)->get();
if(count($documents)<1){
return redirect()->route('debitur.jaminan.create', array_merge(['permohonan_id'=>$permohonan->id],['id'=> $permohonan->debiture->id]))->with('success', 'Permohonan created successfully, Lengkapi data jaminan terlebih dahulu');
}
return redirect()
->route('permohonan.index')->with('success', 'Permohonan updated successfully');
} catch (Exception $e) {
@@ -228,7 +238,7 @@
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian'])->get();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'penilaian','documents'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $size);
@@ -265,7 +275,7 @@
}
// Retrieve data from the database
$query = Permohonan::query();
$query = Permohonan::query()->with('documents')->has('documents', '>', 0)->where('status', '=', 'order');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
@@ -304,7 +314,7 @@
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->where('status', '=', 'order')->get(
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(
);
// Calculate the page count

View File

@@ -4,9 +4,11 @@ namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Lpj\Models\Authorization;
class SLAController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
@@ -62,4 +64,74 @@ class SLAController extends Controller
{
//
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Authorization::query()->with('permohonan.debiture','user','approveSo','approveEo','approveDd');
// Pencarian berdasarkan parameter search
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('jenisPenilaian', 'name', 'LIKE', '%' . $search . '%');
$q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Sorting berdasarkan sortField dan sortOrder
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Hitung total records
$totalRecords = $query->count();
// Pagination (default page size 10)
$size = $request->get('size', 10);
if ($size == 0) {
$size = 10;
}
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page', 1);
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
}
// Filtered records
$filteredRecords = $query->count();
// Ambil data dengan relasi
$data = $query->get();
// Hitung jumlah halaman
$pageCount = ceil($totalRecords / $size);
// Ambil current page
$currentPage = max(1, $request->get('page', 1));
// Return JSON response
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
}