Updated route to point to new getLegalitasJaminan method in DokumenJaminanController. Enhanced logic to handle additional parameters and provide more contextual data, including existing document details. Refined Blade template to dynamically load legalitas jaminan fields, ensuring better user experience and maintainability.
472 lines
22 KiB
PHP
472 lines
22 KiB
PHP
<?php
|
|
|
|
namespace Modules\Lpj\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Modules\Location\Models\City;
|
|
use Modules\Location\Models\District;
|
|
use Modules\Location\Models\Province;
|
|
use Modules\Location\Models\Village;
|
|
use Modules\Lpj\Http\Requests\DokumenJaminanRequest;
|
|
use Modules\Lpj\Models\Debiture;
|
|
use Modules\Lpj\Models\DetailDokumenJaminan;
|
|
use Modules\Lpj\Models\DokumenJaminan;
|
|
use Modules\Lpj\Models\HubunganPemilikJaminan;
|
|
use Modules\Lpj\Models\JenisJaminan;
|
|
use Modules\Lpj\Models\JenisLegalitasJaminan;
|
|
use Modules\Lpj\Models\PemilikJaminan;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Collection;
|
|
use ZipArchive;
|
|
|
|
class DokumenJaminanController extends Controller
|
|
{
|
|
public $user;
|
|
|
|
|
|
public function index($id)
|
|
{
|
|
$debitur = Debiture::find($id);
|
|
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
|
|
|
|
return view(
|
|
'lpj::debitur.edit',
|
|
compact('debitur', 'documents'),
|
|
);
|
|
}
|
|
|
|
public function store(DokumenJaminanRequest $request, $id)
|
|
{
|
|
$debitur = Debiture::find($id);
|
|
|
|
$validate = $request->validated();
|
|
|
|
if ($validate) {
|
|
try {
|
|
DB::beginTransaction();
|
|
$validate['debiture_id'] = $id;
|
|
|
|
if ($validate['pemilik_jaminan_id'] == 0) {
|
|
$pemilik_jaminan = [
|
|
'hubungan_pemilik_jaminan_id' => 1,
|
|
'npwp' => $debitur->npwp,
|
|
'email' => $debitur->email,
|
|
'phone' => $debitur->phone,
|
|
'province_code' => $debitur->province_code,
|
|
'city_code' => $debitur->city_code,
|
|
'district_code' => $debitur->district_code,
|
|
'village_code' => $debitur->village_code,
|
|
'postal_code' => $debitur->postal_code,
|
|
'address' => $debitur->address,
|
|
];
|
|
|
|
$pemilikJaminan = PemilikJaminan::updateOrCreate([
|
|
'debiture_id' => $id,
|
|
'name' => $debitur->name,
|
|
], $pemilik_jaminan);
|
|
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
|
|
}
|
|
|
|
$document = DokumenJaminan::create($validate);
|
|
|
|
try {
|
|
foreach ($request->dokumen_jaminan as $key => $value) {
|
|
$file_name = $value->getClientOriginalName();
|
|
|
|
if ($file_name) {
|
|
try {
|
|
$file_name = $value->getClientOriginalName();
|
|
$value->storeAs(
|
|
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
|
|
$file_name,
|
|
);
|
|
|
|
$detail = [
|
|
'dokumen_jaminan_id' => $document->id,
|
|
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
|
|
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
|
|
'name' => $request->name[$key],
|
|
'keterangan' => $request->keterangan[$key],
|
|
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '',
|
|
];
|
|
DetailDokumenJaminan::create($detail);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
return redirect()->route('debitur.jaminan.index', $id)->with(
|
|
'error',
|
|
'Gagal upload file dokumen jaminan ' . $key . ': ' . $e->getMessage(),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
DB::commit();
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
return redirect()->route('debitur.jaminan.index', $id)->with(
|
|
'error',
|
|
'gg' . $e->getMessage(),
|
|
);
|
|
}
|
|
|
|
return redirect()->route('debitur.jaminan.index', $id)->with(
|
|
'success',
|
|
'Dokumen Jaminan berhasil ditambahkan',
|
|
);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
return redirect()->route('debitur.jaminan.index', $id)->with('error', 'ggl' . $e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
|
|
public function create($id)
|
|
{
|
|
$debitur = Debiture::find($id);
|
|
$provinces = Province::all();
|
|
$jenisJaminan = JenisJaminan::all();
|
|
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
|
|
$pemilikJaminan = PemilikJaminan::where('debiture_id', $id)->get();
|
|
$hubunganPemilik = HubunganPemilikJaminan::all();
|
|
|
|
return view(
|
|
'lpj::debitur.jaminan',
|
|
compact(
|
|
'debitur',
|
|
'provinces',
|
|
'jenisJaminan',
|
|
'jenisLegalitasJaminan',
|
|
'pemilikJaminan',
|
|
'hubunganPemilik',
|
|
),
|
|
);
|
|
}
|
|
|
|
public function update(DokumenJaminanRequest $request, $id, $jaminan)
|
|
{
|
|
$debitur = Debiture::find($id);
|
|
|
|
$validate = $request->validated();
|
|
if ($validate) {
|
|
try {
|
|
DB::beginTransaction();
|
|
$validate['debiture_id'] = $id;
|
|
|
|
if ($validate['pemilik_jaminan_id'] == 00) {
|
|
$pemilik_jaminan = [
|
|
'hubungan_pemilik_jaminan_id' => request()->get('hubungan_pemilik_jaminan_id'),
|
|
'province_code' => $debitur->province_code,
|
|
'city_code' => $debitur->city_code,
|
|
'district_code' => $debitur->district_code,
|
|
'village_code' => $debitur->village_code,
|
|
'postal_code' => $debitur->postal_code,
|
|
'address' => $debitur->address,
|
|
'nomor_id' => request()->get('nomor_id'),
|
|
'name' => request()->get('pemilik_name'),
|
|
];
|
|
|
|
$detailSertifikat = [];
|
|
$names = request()->input('detail_sertifikat.name', []);
|
|
$nomorIds = request()->input('detail_sertifikat.nomor_id', []);
|
|
|
|
foreach ($names as $index => $name) {
|
|
if (isset($nomorIds[$index])) {
|
|
$detailSertifikat[] = [
|
|
'name' => $name,
|
|
'nomor_id' => $nomorIds[$index],
|
|
];
|
|
}
|
|
}
|
|
|
|
$pemilik_jaminan['detail_sertifikat'] = json_encode($detailSertifikat);
|
|
|
|
//dd($pemilik_jaminan);
|
|
|
|
try {
|
|
$pemilikJaminan = PemilikJaminan::updateOrCreate([
|
|
'debiture_id' => $id,
|
|
'name' => request()->get('pemilik_name'),
|
|
], $pemilik_jaminan);
|
|
} catch (Exception $e) {
|
|
return redirect()->route('debitur.jaminan.index', $id)->with(
|
|
'error',
|
|
'Gagal update pemilik jaminan: ' . $e->getMessage(),
|
|
);
|
|
}
|
|
|
|
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
|
|
}
|
|
|
|
|
|
if ($validate['pemilik_jaminan_id'] == 0) {
|
|
$pemilik_jaminan = [
|
|
'hubungan_pemilik_jaminan_id' => 1,
|
|
'npwp' => $debitur->npwp,
|
|
'email' => $debitur->email,
|
|
'phone' => $debitur->phone,
|
|
'province_code' => $debitur->province_code,
|
|
'city_code' => $debitur->city_code,
|
|
'district_code' => $debitur->district_code,
|
|
'village_code' => $debitur->village_code,
|
|
'postal_code' => $debitur->postal_code,
|
|
'address' => $debitur->address,
|
|
];
|
|
|
|
$pemilikJaminan = PemilikJaminan::updateOrCreate([
|
|
'debiture_id' => $id,
|
|
'name' => $debitur->name,
|
|
], $pemilik_jaminan);
|
|
|
|
$validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
|
|
}
|
|
|
|
$document = DokumenJaminan::find($jaminan);
|
|
$document->update($validate);
|
|
|
|
if($request->jenis_legalitas_jaminan_id){
|
|
foreach($request->jenis_legalitas_jaminan_id as $key => $value){
|
|
if (isset($request->dokumen_jaminan[$key])) {
|
|
$file = $request->dokumen_jaminan[$key];
|
|
if ($file) {
|
|
$file_name = $file->getClientOriginalName();
|
|
}
|
|
|
|
if (isset($file_name)) {
|
|
$file->storeAs(
|
|
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
|
|
$file_name,
|
|
);
|
|
|
|
$detail = [
|
|
'dokumen_jaminan_id' => $document->id,
|
|
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
|
|
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
|
|
'name' => $request->name[$key],
|
|
'keterangan' => $request->keterangan[$key],
|
|
];
|
|
|
|
if (isset($request->detail_dokumen_jaminan_id[$key])) {
|
|
$detailDocument = DetailDokumenJaminan::find(
|
|
$request->detail_dokumen_jaminan_id[$key],
|
|
);
|
|
|
|
$detailDocument->update($detail);
|
|
$detailDocument->save();
|
|
} else {
|
|
$detailDocument = DetailDokumenJaminan::create($detail);
|
|
$detailDocument->save();
|
|
}
|
|
}
|
|
} else {
|
|
$detail = [
|
|
'dokumen_jaminan_id' => $document->id,
|
|
'jenis_legalitas_jaminan_id' => $request->jenis_legalitas_jaminan_id[$key],
|
|
'name' => $request->name[$key],
|
|
'keterangan' => $request->keterangan[$key],
|
|
];
|
|
|
|
if (isset($request->detail_dokumen_jaminan_id[$key])) {
|
|
$detailDocument = DetailDokumenJaminan::find(
|
|
$request->detail_dokumen_jaminan_id[$key],
|
|
);
|
|
$detailDocument->update($detail);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
DB::commit();
|
|
return redirect()->route('debitur.jaminan.index', $id)->with(
|
|
'success',
|
|
'Dokumen Jaminan berhasil diubah',
|
|
);
|
|
} catch (Exception $e) {
|
|
DB::rollBack();
|
|
return redirect()->route('debitur.jaminan.index', $id)->with('error', $e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
|
|
public function edit(
|
|
$id,
|
|
$jaminan,
|
|
) {
|
|
$document = DokumenJaminan::find($jaminan);
|
|
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $document->id)->get();
|
|
|
|
$debitur = Debiture::find($document->debiture_id);
|
|
$provinces = Province::all();
|
|
$cities = City::where('province_code', $document->province_code)->get();
|
|
$districts = District::where('city_code', $document->city_code)->get();
|
|
$villages = Village::where('district_code', $document->district_code)->get();
|
|
|
|
|
|
$jenisJaminan = JenisJaminan::all();
|
|
$jenisLegalitasJaminan = JenisLegalitasJaminan::all();
|
|
|
|
$_jenisJaminan = JenisJaminan::find($document->jenis_jaminan_id);
|
|
$legalitasJaminan = json_decode($_jenisJaminan->jenis_legalitas_jaminan_id, true);
|
|
|
|
$currentLegalitasJaminan = JenisLegalitasJaminan::whereIn('id',$document->detail->pluck('jenis_legalitas_jaminan_id')->toArray())->get();
|
|
|
|
|
|
|
|
// Remove values from $legalitasJaminan that are in $currentLegalitasJaminan
|
|
$legalitasJaminan = array_diff($legalitasJaminan, $currentLegalitasJaminan->pluck('code')->toArray());
|
|
|
|
$legalitas = JenisLegalitasJaminan::whereIn('code', $legalitasJaminan)->get();
|
|
|
|
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
|
|
$hubunganPemilik = HubunganPemilikJaminan::all();
|
|
|
|
return view(
|
|
'lpj::debitur.jaminan',
|
|
compact(
|
|
'debitur',
|
|
'provinces',
|
|
'jenisJaminan',
|
|
'jenisLegalitasJaminan',
|
|
'document',
|
|
'details',
|
|
'cities',
|
|
'districts',
|
|
'villages',
|
|
'pemilikJaminan',
|
|
'hubunganPemilik',
|
|
'legalitas'
|
|
),
|
|
);
|
|
}
|
|
|
|
public function destroy(
|
|
$id,
|
|
$jaminan_id,
|
|
) {
|
|
try {
|
|
$jaminan = DokumenJaminan::find($jaminan_id);
|
|
$details = DetailDokumenJaminan::where('dokumen_jaminan_id', $jaminan->id)->get();
|
|
foreach ($details as $detail) {
|
|
Storage::delete('public/' . $detail->dokumen_jaminan);
|
|
$detail->delete();
|
|
}
|
|
$jaminan->delete();
|
|
echo json_encode(['success' => true, 'message' => 'Dokumen Jaminan deleted successfully']);
|
|
} catch (Exception $e) {
|
|
echo json_encode(['success' => false, 'message' => 'Failed to delete Dokumen Jaminan']);
|
|
}
|
|
}
|
|
|
|
public function bulkDownload()
|
|
{
|
|
$dokumenIds = request()->get('jaminan'); // Expecting an array of dokumen_jaminan_id
|
|
$documents = DetailDokumenJaminan::where('dokumen_jaminan_id', $dokumenIds)->get();
|
|
if ($documents->isEmpty()) {
|
|
return redirect()->back()->with('error', 'No documents found for the provided IDs.');
|
|
}
|
|
|
|
$zip = new ZipArchive;
|
|
$zipFileName = 'documents_jaminan_' . $dokumenIds . '.zip';
|
|
$zipFilePath = storage_path('app/public/' . $zipFileName);
|
|
|
|
if ($zip->open($zipFilePath, ZipArchive::CREATE) === true) {
|
|
foreach ($documents as $document) {
|
|
$filePath = storage_path('app/public/' . $document->dokumen_jaminan);
|
|
if (file_exists($filePath)) {
|
|
$zip->addFile($filePath, basename($filePath));
|
|
} else {
|
|
// Log or display an error message for missing files
|
|
return redirect()->back()->with('error', 'File not found: ' . $filePath);
|
|
}
|
|
}
|
|
$zip->close();
|
|
|
|
if (!file_exists($zipFilePath)) {
|
|
return redirect()->back()->with('error', 'Failed to create ZIP file.');
|
|
}
|
|
} else {
|
|
return redirect()->back()->with('error', 'Failed to create ZIP file.');
|
|
}
|
|
|
|
return response()->download($zipFilePath, $zipFileName, [
|
|
'Content-Type' => 'application/zip',
|
|
'Content-Disposition' => 'attachment; filename="' . $zipFileName . '"',
|
|
'Content-Length' => filesize($zipFilePath),
|
|
])->deleteFileAfterSend(false);
|
|
}
|
|
|
|
|
|
public function download()
|
|
{
|
|
$dokumen = request()->get('dokumen');
|
|
$document = DetailDokumenJaminan::find($dokumen);
|
|
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
|
|
}
|
|
|
|
public function legalitasJaminan($id)
|
|
{
|
|
$jenisJaminan = JenisJaminan::find($id);
|
|
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
|
|
|
|
$legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
|
|
echo json_encode($legalitas);
|
|
}
|
|
|
|
|
|
public function getLegalitasJaminan($id = 10, $jenisJaminanId = 1) : JsonResponse
|
|
{
|
|
|
|
$jenisJaminan = JenisJaminan::findOrFail($jenisJaminanId);
|
|
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
|
|
$newLegalitasJaminan = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
|
|
|
|
$existingLegalitas = [];
|
|
$newLegalitas = [];
|
|
|
|
// Create a set of new jenis_legalitas_jaminan_ids for quick lookup
|
|
$newLegalitasIds = $newLegalitasJaminan->pluck('id')->toArray();
|
|
|
|
if($id>0) {
|
|
$document = DokumenJaminan::findOrFail($id);
|
|
if ($document && $document->detail) {
|
|
foreach ($document->detail as $detail) {
|
|
// Only include existing legalitas if its id is in the new set
|
|
if (in_array($detail->jenis_legalitas_jaminan_id, $newLegalitasIds)) {
|
|
$existingLegalitas[] = [
|
|
'id' => $detail->id,
|
|
'jenis_legalitas_jaminan_id' => $detail->jenis_legalitas_jaminan_id,
|
|
'name' => $detail->name,
|
|
'dokumen_jaminan' => $detail->dokumen_jaminan,
|
|
'custom_field' => $detail->jenisLegalitasJaminan->custom_field,
|
|
'custom_field_type' => $detail->jenisLegalitasJaminan->custom_field_type,
|
|
'details' => $detail->details,
|
|
'keterangan' => $detail->keterangan,
|
|
'is_existing' => true
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($newLegalitasJaminan as $legalitas) {
|
|
if (!Collection::make($existingLegalitas)->contains('jenis_legalitas_jaminan_id', $legalitas->id)) {
|
|
$newLegalitas[] = [
|
|
'id' => null,
|
|
'jenis_legalitas_jaminan_id' => $legalitas->id,
|
|
'name' => $legalitas->name,
|
|
'dokumen_jaminan' => null,
|
|
'custom_field' => $legalitas->custom_field,
|
|
'custom_field_type' => $legalitas->custom_field_type,
|
|
'details' => null,
|
|
'keterangan' => null,
|
|
'is_existing' => false
|
|
];
|
|
}
|
|
}
|
|
|
|
$combinedLegalitas = array_merge($existingLegalitas, $newLegalitas);
|
|
return response()->json($combinedLegalitas);
|
|
}
|
|
}
|