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:
@@ -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) {
|
||||||
@@ -187,7 +188,10 @@
|
|||||||
'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;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
'name',
|
'name',
|
||||||
'dokumen_jaminan',
|
'dokumen_jaminan',
|
||||||
'keterangan',
|
'keterangan',
|
||||||
|
'details',
|
||||||
'status',
|
'status',
|
||||||
'authorized_at',
|
'authorized_at',
|
||||||
'authorized_status',
|
'authorized_status',
|
||||||
|
|||||||
@@ -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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user