Merge branch 'master' into feature/senior-officer

This commit is contained in:
majid 2024-09-11 14:59:26 +07:00
commit 0ae0374e5e
6 changed files with 183 additions and 65 deletions

View File

@ -174,10 +174,4 @@
{
return Excel::download(new DebitureExport, 'debitur.xlsx');
}
public function download($id)
{
$document = DokumenJaminan::find($id);
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
}
}

View File

@ -5,6 +5,7 @@
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;
@ -25,7 +26,7 @@
public function index($id)
{
$debitur = Debiture::find($id);
$documents = DokumenJaminan::with('pemilik')->where('debiture_id', $id)->get();
$documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get();
return view(
'lpj::debitur.edit',
@ -68,7 +69,6 @@
$document = DokumenJaminan::create($validate);
try {
foreach ($request->dokumen_jaminan as $key => $value) {
$file_name = $value->getClientOriginalName();
@ -77,7 +77,7 @@
$file_name = $value->getClientOriginalName();
$value->storeAs(
'public/jaminan/' . $debitur->id . '/' . $document->id . '/',
$file_name
$file_name,
);
$detail = [
@ -92,17 +92,17 @@
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'Gagal upload file dokumen jaminan '. $key. ': '. $e->getMessage(),
'Gagal upload file dokumen jaminan ' . $key . ': ' . $e->getMessage(),
);
}
}
}
DB::commit();
}catch (Exception $e) {
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'gg'.$e->getMessage(),
'gg' . $e->getMessage(),
);
}
@ -112,7 +112,7 @@
);
} catch (Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with('error','ggl'. $e->getMessage());
return redirect()->route('debitur.jaminan.index', $id)->with('error', 'ggl' . $e->getMessage());
}
}
}
@ -138,6 +138,7 @@
$validate = $request->validated();
if ($validate) {
try {
DB::beginTransaction();
$validate['debiture_id'] = $id;
if ($validate['pemilik_jaminan_id'] == 0) {
@ -160,29 +161,77 @@
], $pemilik_jaminan);
}
if ($request->hasFile('dokumen_jaminan')) {
$file = $request->file('dokumen_jaminan');
$file_name = $file->getClientOriginalName();
$file->storeAs('public/jaminan/' . $debitur->id, $file_name);
$validate['dokumen_jaminan'] = 'jaminan/' . $debitur->id . '/' . $file_name;
}
$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) {
} catch
(Exception $e) {
DB::rollBack();
return redirect()->route('debitur.jaminan.index', $id)->with('error', $e->getMessage());
}
}
}
public function edit($id, $jaminan)
{
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();
@ -200,6 +249,7 @@
'jenisJaminan',
'jenisLegalitasJaminan',
'document',
'details',
'cities',
'districts',
'villages',
@ -208,14 +258,30 @@
);
}
public function destroy($id, $jaminan_id)
{
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 download(
$id,
) {
$document = DetailDokumenJaminan::find($id);
return response()->download(storage_path('app/public/' . $document->dokumen_jaminan));
}
}

View File

@ -63,4 +63,8 @@
public function permohonan(){
return $this->belongsTo(Permohonan::class, 'permohonan_id', 'id');
}
public function detail(){
return $this->hasMany(DetailDokumenJaminan::class, 'dokumen_jaminan_id', 'id');
}
}

View File

@ -56,7 +56,10 @@
Jenis Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<select onchange="getLegalitasJaminan()" class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="jenis_jaminan_id" id="jenis_jaminan_id">
@if(isset($document->id))
<input type="hidden" name="jenis_jaminan_id" value="{{ $document->jenis_jaminan_id }}">
@endif
<select onchange="getLegalitasJaminan()" {{ isset($document->id) ? "disabled" : "" }} class="input tomselect w-full @error('branch_id') border-danger bg-danger-light @enderror" name="jenis_jaminan_id" id="jenis_jaminan_id">
<option value="">Pilih Jenis Jaminan</option>
@foreach($jenisJaminan as $row)
@if(isset($document))
@ -74,9 +77,51 @@
</div>
</div>
<div id="doctainer" class="grid gap-5">
@if(isset($document->id))
@foreach($document->detail as $detail)
<input type="hidden" name="detail_dokumen_jaminan_id[]" value="{{ $detail->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
{{ $loop->index + 1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value=" {{ $detail->jenis_legalitas_jaminan_id }}">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nama Dokumen
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input " type="text" id="name" name="name[]" value="{{ $detail->name ?? "" }}" placeholder="Nama Dokumen">
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Dokumen Jaminan
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="file-input" type="file" name="dokumen_jaminan[]" value="">
@if(isset($detail->dokumen_jaminan))
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id,'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline mt-2">{{ basename($detail->dokumen_jaminan) }} <i class="ki-filled ki-cloud-download"></i></a>
@endif
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Keterangan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="textarea" rows="3" type="number" name="keterangan[]">{{ $detail->keterangan ?? "" }}</textarea>
</div>
</div>
@endforeach
@else
<div id="doctainer" class="grid gap-5">
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
@ -215,11 +260,11 @@
console.log(data);
var doctainer = document.getElementById('doctainer');
doctainer.innerHTML = '';
data.forEach((item,index) => {
data.forEach((item, index) => {
doctainer.innerHTML += `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 font-bold">
${index+1}. ${item.name}
${index + 1}. ${item.name}
</label>
<input type="hidden" name="jenis_legalitas_jaminan_id[]" value="${item.id}">
</div>

View File

@ -1,4 +1,4 @@
<div class="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-5 lg:gap-7.5">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-5 lg:gap-7.5">
@foreach($documents as $document)
<div class="card flex flex-col gap-5 p-5 lg:p-7.5">
<div class="flex items-center flex-wrap justify-between gap-1">
@ -43,27 +43,7 @@
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@if($document->dokumen_jaminan)
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
dokumen jaminan
</span>
<a href="{{ route('debitur.download',$document->id) }}" class="badge badge-sm badge-outline">{{ basename($document->dokumen_jaminan) }} <i class="ki-filled ki-cloud-download"></i></a>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@endif
<div class="flex items-start justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
keterangan
</span>
<p class="text-2xs text-gray-600 text-right max-w-[250px]">
{{ $document->keterangan }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed mb-3.5">
</div>
<div class="flex items-start justify-between flex-wrap gap-2">
<span class="text-2xs text-gray-600 uppercase">
alamat
</span>
@ -71,6 +51,35 @@
{{ $document->address.', '.$document->village->name.', '.$document->city->name.', '.$document->province->name.', '.$document->postal_code }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
dokumen jaminan
</span>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
@foreach($document->detail as $detail)
<div class="flex items-center justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase">
{{ $loop->index+1 }}. {{ $detail->jenisLegalitasJaminan->name }}
</span>
<a href="{{ route('debitur.jaminan.download',['id'=>$debitur->id, 'dokumen'=>$detail->id]) }}" class="badge badge-sm badge-outline">{{ basename($detail->dokumen_jaminan) }} <i class="ki-filled ki-cloud-download"></i></a>
</div>
<div class="border-t border-gray-300 border-dashed">
</div>
<div class="flex items-start justify-between flex-wrap my-2.5 gap-2">
<span class="text-2xs text-gray-600 uppercase pl-3">
keterangan
</span>
<p class="text-2xs text-gray-600 text-right max-w-[250px]">
{{ $detail->keterangan }}
</p>
</div>
<div class="border-t border-gray-300 border-dashed mb-3.5">
</div>
@endforeach
</div>
</div>
@endforeach

View File

@ -257,22 +257,22 @@ Route::middleware(['auth'])->group(function () {
Route::resource('permohonan', PermohonanController::class);
Route::name('debitur.')->prefix('debitur')->group(function () {
Route::get('download/{id}', [DebitureController::class, 'download'])->name('download');
Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore');
Route::get('datatables', [DebitureController::class, 'dataForDatatables'])
->name('datatables');
Route::get('export', [DebitureController::class, 'export'])->name('export');
Route::name('debitur.')->prefix('debitur')->group(function () {
Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore');
Route::get('datatables', [DebitureController::class, 'dataForDatatables'])
->name('datatables');
Route::get('export', [DebitureController::class, 'export'])->name('export');
Route::name('jaminan.')->prefix('{id}/jaminan')->group(function () {
Route::get('/', [DokumenJaminanController::class, 'index'])->name('index');
Route::get('create', [DokumenJaminanController::class, 'create'])->name('create');
Route::get('{jaminan}/edit', [DokumenJaminanController::class, 'edit'])->name('edit');
Route::put('{jaminan}', [DokumenJaminanController::class, 'update'])->name('update');
Route::post('store', [DokumenJaminanController::class, 'store'])->name('store');
Route::delete('{jaminan}', [DokumenJaminanController::class, 'destroy'])->name('destroy');
});
Route::name('jaminan.')->prefix('{id}/jaminan')->group(function () {
Route::get('download/{dokumen}', [DokumenJaminanController::class, 'download'])->name('download');
Route::get('/', [DokumenJaminanController::class, 'index'])->name('index');
Route::get('create', [DokumenJaminanController::class, 'create'])->name('create');
Route::get('{jaminan}/edit', [DokumenJaminanController::class, 'edit'])->name('edit');
Route::put('{jaminan}', [DokumenJaminanController::class, 'update'])->name('update');
Route::post('store', [DokumenJaminanController::class, 'store'])->name('store');
Route::delete('{jaminan}', [DokumenJaminanController::class, 'destroy'])->name('destroy');
});
Route::name('pemilik.')->prefix('{id}/pemilik')->group(function () {
Route::get('/', [PemilikJaminanController::class, 'index'])->name('index');