upload feature registrasi view

This commit is contained in:
Andy Chaerudin
2024-10-02 11:33:23 +07:00
committed by rahmatrafli1
parent 8106da7dd9
commit 544f7a7c11
7 changed files with 741 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
<?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::create('branches', function (Blueprint $table) {
$table->id();
$table->string('code', 9)->unique();
$table->string('name');
$table->boolean('status')->default(true)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->char('authorized_status', 1)->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down()
: void
{
Schema::dropIfExists('branches');
}
};

View File

@@ -0,0 +1,52 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Modules\Lpj\Models\Debiture;
use Modules\Lpj\Models\JenisJaminan;
use Modules\Lpj\Models\JenisLegalitasJaminan;
use Modules\Lpj\Models\PemilikJaminan;
use Modules\Lpj\Models\Permohonan;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('dokumen_jaminan', function (Blueprint $table) {
$table->id();
$table->foreignIdFor(Debiture::class)->constrained('debitures')->onDelete('cascade');
$table->foreignIdFor(Permohonan::class)->nullable()->constrained('permohonan')->onDelete('cascade');
$table->foreignIdFor(JenisJaminan::class)->constrained('jenis_jaminan')->onDelete('cascade');
$table->foreignIdFor(PemilikJaminan::class)->constrained('pemilik_jaminan')->onDelete('cascade');
$table->string('province_code')->nullable()->index();
$table->string('city_code')->nullable()->index();
$table->string('district_code')->nullable()->index();
$table->string('village_code')->nullable()->index();
$table->string('postal_code', 5)->nullable();
$table->text('address')->nullable();
$table->boolean('status')->default(true)->nullable();
$table->timestamps();
$table->timestamp('authorized_at')->nullable();
$table->char('authorized_status', 1)->nullable();
$table->softDeletes();
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
$table->unsignedBigInteger('deleted_by')->nullable();
$table->unsignedBigInteger('authorized_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('dokumen_jaminan');
}
};

View File

@@ -0,0 +1,96 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@php
// $route = Route::currentRouteName();
// dd($route);
$route = explode('.', Route::currentRouteName());
@endphp
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<form id="{{$route[0]}}_form" name="{{$route[0]}}_form" method="POST">
<input type="hidden" id="id" name="id" value="{{ $id }}">
@method('PUT')
@csrf
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Tambah Registrasi
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('registrasi.show', $id) }}" class="btn btn-xs btn-primary" title="Detail"><i class="ki-filled ki-abstract-26"></i> Detail</a>
<a href="{{ route('registrasi.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
No. registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<label class="card-title" id="textReg">
No. registrasi
</label>
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Tindakan
</label>
<div class="flex gap-12">
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="radio" name="{{$route[0]}}_tindakan" type="radio" value="0" id="{{ $route[0] }}_tindakan_yes"/>
Yes
</label>&nbsp;&nbsp;
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input class="radio" name="{{$route[0]}}_tindakan" type="radio" value="1" id="{{ $route[0] }}_tindakan_no" />
No
</label>
</div>
</div>
<div id="{{$route[0]}}_div_jenis_pilihan" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Data Jenis Penilaian (Pilihan registrasi)
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="inputku select" id="{{$route[0]}}_jenis_penilaian" name="{{$route[0]}}_jenis_penilaian">
<option></option>
</select>
<em id="{{$route[0]}}_jenis_penilaian_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_catatan" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea class="inputku textarea" name="{{$route[0]}}_catatan" id="{{$route[0]}}_catatan" placeholder="Catatan..." rows="6"></textarea>
<em id="{{$route[0]}}_catatan_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div id="{{ $route[0] }}_div_region" class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Region
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="inputku select" id="{{$route[0]}}_region" name="{{$route[0]}}_region">
<option></option>
</select>
<em id="{{$route[0]}}_region_msg" class="alert text-danger text-sm"></em>
</div>
</div>
<div class="flex justify-end">
<button type="button" class="btn btn-primary" id="toEdit">
Save
</button>
</div>
</div>
</div>
</form>
</div>
@endsection
@include('lpj::registrasi.js.editjs')

View File

@@ -0,0 +1,170 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('registrasi') }}
@endsection
@section('content')
<div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="registrasi-table" data-api-url="{{ route('registrasi.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Registrasi
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Registrasi" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
<div class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script type="text/javascript">
function showPermohonanData(regId)
{
var url = "{{ url('registrasi') }}/"+regId;
$(location).attr('href',url);
}
</script>
<script type="module">
const element = document.querySelector('#registrasi-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
},
tanggal_permohonan: {
title: 'Tanggal Permohonan'
},
user_id: {
title: 'User Pemohon',
render: (item, data) => {
return `${data.user.name}`;
},
},
branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
return `${data.branch.name}`;
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
return `${data.debiture.name}`;
},
},
tujuan_penilaian_id: {
title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
},
},
status: {
title: 'Status'
},
actions: {
title: 'Status',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a onclick="showPermohonanData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-abstract-26"></i>
</a>
<a class="btn btn-sm btn-icon btn-clear btn-info" title="Register" href="registrasi/${data.id}/edit">
<i class="ki-outline ki-arrow-circle-right"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -0,0 +1,196 @@
@push('scripts')
<script type="module">
$(document).ready(function() {
prepareForm();
});
function prepareForm()
{
$("#registrasi_form")[0].reset();
$(":radio[name='{{ $route[0] }}_tindakan'][value='0']").attr('checked', 'checked');
$("#{{ $route[0] }}_div_jenis_pilihan").show();
$("#{{ $route[0] }}_div_catatan").hide();
$("#{{ $route[0] }}_div_region").hide();
// prepare data
setData();
}
function setData()
{
let id = $("#id").val();
let token = "{{ csrf_token() }}";
// alert('token = ' + token);
var useURL = "{{ route('registrasi.setData') }}";
var input_data = new Object();
input_data._token = token;
input_data.id = id;
$.ajax({
url: useURL,
type: "POST",
data: input_data,
dataType: "json",
beforeSend: function() {
// if ($("#myLoader").hasClass("pre-loader hidden")) {
// pleaseStartLoader();
// }
},
success: function(response) {
console.log(response);
$("#textReg").text(response.datas.nomor_registrasi);
setJenisPenilaianList(response.jenisPenilaians,0);
setRegionList(response.regions,0);
},
error: function(xhr) {
},
complete: function() {
}
});
}
function setRegionList(datas, cid)
{
$('#{{$route[0]}}_region').empty().append('<option value="0"> - Pilih Region - </option>');
$.each(datas, function(key, value){
$('#{{$route[0]}}_region').append(new Option(value, key));
});
}
function setJenisPenilaianList(datas, cid)
{
$('#{{$route[0]}}_jenis_penilaian').empty().append('<option value="0"> - Pilih Jenis Penilaian - </option>');
$.each(datas, function(key, value){
$('#{{$route[0]}}_jenis_penilaian').append(new Option(value, key));
});
}
$('input[type=radio][name={{ $route[0] }}_tindakan]').change(function() {
removeErrorCssMsg();
if($(this).val()==0)
{
// show jenis pilihan
// hide catatan
$("#{{ $route[0] }}_div_jenis_pilihan").show();
$("#{{ $route[0] }}_catatan").val('');
$("#{{ $route[0] }}_div_catatan").hide();
}
else
{
$("#{{$route[0]}}_jenis_penilaian option[value=0]").prop('selected', true);
$("#{{ $route[0] }}_div_jenis_pilihan").hide();
$("#{{ $route[0] }}_div_catatan").show();
}
});
$("#toEdit").click(function(e) {
e.preventDefault();
//define variable
let token = "{{ csrf_token() }}";
let _method = $('input[name=_method]').val();
let id = $('#{{$route[0]}}_id').val();
let tindakan = $('input[name="{{$route[0]}}_tindakan"]:checked').val();
let jenis_penilaian = $("#{{$route[0]}}_jenis_penilaian").val();
let region = $("#{{$route[0]}}_region").val();
let catatan = $("#{{$route[0]}}_catatan").val();
if(jenis_penilaian==0)
jenis_penilaian='';
if(region==0)
region='';
var input_data = new Object();
input_data._token= token;
input_data._method= _method;
input_data.id= id;
input_data.tindakan= tindakan;
input_data.jenis_penilaian= jenis_penilaian;
input_data.region= region;
input_data.catatan = catatan;
let useURL= '{{ route($route[0].'.update', $id) }}';
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
beforeSend: function() {
},
success: function(response) {
removeErrorCssMsg();
if ('error' == response.status) {
$.each(response.message, function(index, value) {
if ("catatan" === index) {
$("#{{$route[0]}}_catatan").addClass(" border-danger");
$("#{{$route[0]}}_catatan_msg").text(value);
}
if ("jenis_penilaian" === index) {
$("#{{$route[0]}}_jenis_penilaian").addClass(" border-danger");
$("#{{$route[0]}}_jenis_penilaian_msg").text(value);
}
if ("region" === index) {
$("#{{$route[0]}}_region").addClass(" border-danger");
$("#{{$route[0]}}_region_msg").text(value);
}
});
}
else
{
toastr.success(response.message);
var url = "{{ route('registrasi.index') }}";
$(location).attr('href',url);
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);
},
complete: function() {
// pleaseStopLoader();
}
});
//
});
$('#{{$route[0]}}_jenis_penilaian').on('change', function (e) {
var idNya = $('#{{$route[0]}}_jenis_penilaian').find(":selected").val();
// var textNya = $('#{{$route[0]}}_jenis_penilaian').find(":selected").text();
if('1'==idNya)
{
// INTERNAL, show region
$("#{{ $route[0] }}_div_region").show();
}
else
{
// selain INTERNAL, hide region
$("#{{ $route[0] }}_div_region").hide();
}
});
/*
$('#{{$route[0]}}_jenis_penilaian').on('change', function() {
console.log( this.value );
});
*/
</script>
@endpush

View File

@@ -0,0 +1,148 @@
@push('scripts')
<script type="module">
$(document).ready(function() {
prepareForm();
});
function prepareForm()
{
setData();
}
function setData()
{
let id = $("#id").val();
let token = "{{ csrf_token() }}";
// alert('token = ' + token);
var useURL = "{{ route('registrasi.showData') }}";
var input_data = new Object();
input_data._token = token;
input_data.id = id;
$.ajax({
url: useURL,
type: "POST",
data: input_data,
dataType: "json",
beforeSend: function() {
// if ($("#myLoader").hasClass("pre-loader hidden")) {
// pleaseStartLoader();
// }
},
success: function(response) {
console.log(response);
$("#textReg").text(response.datas.nomor_registrasi);
// setJenisPenilaianList(response.jenisPenilaians,0);
},
error: function(xhr) {
},
complete: function() {
}
});
}
function setJenisPenilaianList(datas, cid)
{
$('#{{$route[0]}}_jenis_penilaian').empty().append('<option value="0"> - Pilih Jenis Penilaian - </option>');
$.each(datas, function(key, value){
$('#{{$route[0]}}_jenis_penilaian').append(new Option(value, key));
});
}
$('input[type=radio][name={{ $route[0] }}_tindakan]').change(function() {
removeErrorCssMsg();
if($(this).val()==0)
{
// show jenis pilihan
// hide catatan
$("#{{ $route[0] }}_div_jenis_pilihan").show();
$("#{{ $route[0] }}_catatan").val('');
$("#{{ $route[0] }}_div_catatan").hide();
}
else
{
$("#{{$route[0]}}_jenis_penilaian option[value=0]").prop('selected', true);
$("#{{ $route[0] }}_div_jenis_pilihan").hide();
$("#{{ $route[0] }}_div_catatan").show();
}
});
$("#toEdit").click(function(e) {
e.preventDefault();
//define variable
let token = "{{ csrf_token() }}";
let _method = $('input[name=_method]').val();
let id = $('#{{$route[0]}}_id').val();
let tindakan = $('input[name="{{$route[0]}}_tindakan"]:checked').val();
let jenis_penilaian = $("#{{$route[0]}}_jenis_penilaian").val();
let catatan = $("#{{$route[0]}}_catatan").val();
if(jenis_penilaian==0)
jenis_penilaian='';
var input_data = new Object();
input_data._token= token;
input_data._method= _method;
input_data.id= id;
input_data.tindakan= tindakan;
input_data.jenis_penilaian= jenis_penilaian;
input_data.catatan = catatan;
let useURL= '{{ route($route[0].'.update', $id) }}';
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
beforeSend: function() {
},
success: function(response) {
removeErrorCssMsg();
if ('error' == response.status) {
$.each(response.message, function(index, value) {
if ("catatan" === index) {
$("#{{$route[0]}}_catatan").addClass(" border-danger");
$("#{{$route[0]}}_catatan_msg").text(value);
}
if ("jenis_penilaian" === index) {
$("#{{$route[0]}}_jenis_penilaian").addClass(" border-danger");
$("#{{$route[0]}}_jenis_penilaian_msg").text(value);
}
});
}
else
{
toastr.success(response.message);
var url = "{{ route('registrasi.index') }}";
$(location).attr('href',url);
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);
},
complete: function() {
// pleaseStopLoader();
}
});
//
});
</script>
@endpush

View File

@@ -0,0 +1,40 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@php
// $route = Route::currentRouteName();
// dd($route); registrasi.show
$route = explode('.', Route::currentRouteName());
@endphp
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Detail Permohonan
</h3>
<div class="flex items-center gap-2">
<a href="{{ route('registrasi.edit', $id) }}" class="btn btn-xs btn-primary" title="Register"><i class="ki-filled ki-arrow-circle-right"></i> Registrasi</a>
<a href="{{ route('registrasi.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body grid gap-5">
<input type="hidden" id="id" name="id" value="{{ $id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
No. registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<label class="card-title" id="textReg">
No. registrasi
</label>
</div>
</div>
</div>
</div>
</div>
@endsection
@include('lpj::registrasi.js.showjs')