Implemented a bulk download button for documents in the detail view and updated button styles and placements in related components. Additionally, removed unnecessary sleep call in the controller to improve performance.
333 lines
15 KiB
PHP
333 lines
15 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\JenisJaminan;
|
|
use Modules\Lpj\Models\JenisLegalitasJaminan;
|
|
use Modules\Lpj\Models\PemilikJaminan;
|
|
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],
|
|
];
|
|
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();
|
|
|
|
return view(
|
|
'lpj::debitur.jaminan',
|
|
compact('debitur', 'provinces', 'jenisJaminan', 'jenisLegalitasJaminan', 'pemilikJaminan'),
|
|
);
|
|
}
|
|
|
|
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'] == 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);
|
|
}
|
|
|
|
$document = DokumenJaminan::find($jaminan);
|
|
$document->update($validate);
|
|
|
|
if ($request->detail_dokumen_jaminan_id) {
|
|
foreach ($request->detail_dokumen_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 {
|
|
$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();
|
|
$pemilikJaminan = PemilikJaminan::where('debiture_id', $document->debiture_id)->get();
|
|
|
|
return view(
|
|
'lpj::debitur.jaminan',
|
|
compact(
|
|
'debitur',
|
|
'provinces',
|
|
'jenisJaminan',
|
|
'jenisLegalitasJaminan',
|
|
'document',
|
|
'details',
|
|
'cities',
|
|
'districts',
|
|
'villages',
|
|
'pemilikJaminan',
|
|
),
|
|
);
|
|
}
|
|
|
|
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, $jaminan)
|
|
{
|
|
$jenisJaminan = JenisJaminan::find($id);
|
|
$legalitasJaminan = $jenisJaminan->jenis_legalitas_jaminan_id;
|
|
|
|
$legalitas = JenisLegalitasJaminan::whereIn('code', json_decode($legalitasJaminan, true))->get();
|
|
echo json_encode($legalitas);
|
|
}
|
|
}
|