Add 'details' column to 'detail_dokumen_jaminan' table

This migration adds a nullable 'details' column to the 'detail_dokumen_jaminan' table. The column is used to store custom field data in JSON format. Various parts of the application, including the model, controller, and view, have been updated to handle this new column.
This commit is contained in:
Daeng Deni Mardaeni
2024-11-04 16:00:29 +07:00
parent ec6cb8e09f
commit 6dd55f9532
4 changed files with 83 additions and 18 deletions

View File

@@ -88,6 +88,7 @@
'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name, 'dokumen_jaminan' => 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name,
'name' => $request->name[$key], 'name' => $request->name[$key],
'keterangan' => $request->keterangan[$key], 'keterangan' => $request->keterangan[$key],
'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '',
]; ];
DetailDokumenJaminan::create($detail); DetailDokumenJaminan::create($detail);
} catch (Exception $e) { } catch (Exception $e) {
@@ -181,16 +182,19 @@
//dd($pemilik_jaminan); //dd($pemilik_jaminan);
try{ try {
$pemilikJaminan = PemilikJaminan::updateOrCreate([ $pemilikJaminan = PemilikJaminan::updateOrCreate([
'debiture_id' => $id, 'debiture_id' => $id,
'name' => request()->get('pemilik_name'), 'name' => request()->get('pemilik_name'),
], $pemilik_jaminan); ], $pemilik_jaminan);
} catch (Exception $e){ } catch (Exception $e) {
return redirect()->route('debitur.jaminan.index', $id)->with('error', 'Gagal update pemilik jaminan: '. $e->getMessage()); return redirect()->route('debitur.jaminan.index', $id)->with(
'error',
'Gagal update pemilik jaminan: ' . $e->getMessage(),
);
} }
$validate['pemilik_jaminan_id']=$pemilikJaminan->id; $validate['pemilik_jaminan_id'] = $pemilikJaminan->id;
} }

View File

@@ -17,7 +17,7 @@
'name', 'name',
'dokumen_jaminan', 'dokumen_jaminan',
'keterangan', 'keterangan',
'details',
'status', 'status',
'authorized_at', 'authorized_at',
'authorized_status', 'authorized_status',

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('detail_dokumen_jaminan', function (Blueprint $table) {
$table->string('details')->nullable()->after('dokumen_jaminan_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('detail_dokumen_jaminan', function (Blueprint $table) {
$table->dropColumn('details');
});
}
};

View File

@@ -165,6 +165,18 @@
</div> </div>
</div> </div>
@if($detail->details)
@php $custom_field = json_decode($detail->details,true) @endphp
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
</label>
<div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}">
</div>
</div>
@endif
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Keterangan Keterangan
@@ -341,12 +353,12 @@
}); });
function changePemilikJaminan() { function changePemilikJaminan() {
var pemilikJaminan = document.getElementById('pemilik_jaminan_id').value; var pemilikJaminan = document.getElementById("pemilik_jaminan_id").value;
var fieldsetPemilikJaminan = document.getElementById('pemilik_jaminan'); var fieldsetPemilikJaminan = document.getElementById("pemilik_jaminan");
if(pemilikJaminan === '00') { if (pemilikJaminan === "00") {
fieldsetPemilikJaminan.classList.remove('hidden'); fieldsetPemilikJaminan.classList.remove("hidden");
} else { } else {
fieldsetPemilikJaminan.classList.add('hidden'); fieldsetPemilikJaminan.classList.add("hidden");
} }
} }
</script> </script>
@@ -354,12 +366,12 @@
{{--Legalitas Jaminan--}} {{--Legalitas Jaminan--}}
<script> <script>
function getLegalitasJaminan() { function getLegalitasJaminan() {
var legalitasJaminan = document.getElementById('jenis_jaminan_id').value; var legalitasJaminan = document.getElementById("jenis_jaminan_id").value;
var url = '/basic-data/jenis-jaminan/legalitas/' + legalitasJaminan; var url = "/basic-data/jenis-jaminan/legalitas/" + legalitasJaminan;
fetch(url, { fetch(url, {
method: 'GET', method: "GET",
headers: { headers: {
'Content-Type': 'application/json' "Content-Type": "application/json"
} }
}) })
.then(response => { .then(response => {
@@ -369,8 +381,8 @@
return response.json(); return response.json();
}) })
.then(data => { .then(data => {
var doctainer = document.getElementById('doctainer'); var doctainer = document.getElementById("doctainer");
doctainer.innerHTML = ''; doctainer.innerHTML = "";
data.forEach((item, index) => { data.forEach((item, index) => {
doctainer.innerHTML += ` doctainer.innerHTML += `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -398,6 +410,27 @@
</div> </div>
</div> </div>
${item.custom_field && item.custom_field.length > 0 ? `
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56 capitalize">
${item.custom_field.replace(/_/g, " ")}
</label>
<div class="flex flex-wrap items-baseline w-full">
${item.custom_field_type === "text" ? `
<input class="input" type="text" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "number" ? `
<input class="input" type="number" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "date" ? `
<input class="input" type="date" name="custom_field[][${item.custom_field}]">
` : item.custom_field_type === "textarea" ? `
<textarea class="textarea" rows="3" name="custom_field[][${item.custom_field}]"></textarea>
` : `
<input class="input" type="text" name="custom_field[][${item.custom_field}]">
`}
</div>
</div>
` : ""}
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56"> <label class="form-label max-w-56">
Keterangan Keterangan
@@ -406,10 +439,10 @@
<textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea> <textarea class="textarea" rows="3" type="number" name="keterangan[]"></textarea>
</div> </div>
</div>`; </div>`;
}) });
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error("Error:", error);
// Handle the error here // Handle the error here
}); });
} }