main
Ilham Wara Nugroho 2026-01-15 09:45:56 +07:00
parent cb5e527cd3
commit 502aa4d797
8 changed files with 223 additions and 16 deletions

View File

@ -311,4 +311,13 @@ class FormController implements HasMiddleware
return redirect()->back()->withErrors(['error' => 'Persetujuan Data Produsen gagal diproses. Mohon dicoba kembali.' . $e->getMessage()]); return redirect()->back()->withErrors(['error' => 'Persetujuan Data Produsen gagal diproses. Mohon dicoba kembali.' . $e->getMessage()]);
} }
} }
public function create($sector, $code) {
$inventoryYear = date('Y');
$instansi = null;
$data = $this->data($sector, $code, $inventoryYear, $instansi);
return view('modules.form.form', $data);
}
} }

View File

@ -30,6 +30,7 @@
{{-- <link rel="stylesheet" href="{{ asset('assets/plugins/DataTables/datatables.custom.css') }}"> --}} {{-- <link rel="stylesheet" href="{{ asset('assets/plugins/DataTables/datatables.custom.css') }}"> --}}
<style> <style>
.select2-hidden-accessible{position: relative!important;} .select2-hidden-accessible{position: relative!important;}
.modal{z-index: 1051!important;}
</style> </style>
@yield('css') @yield('css')
</head> </head>

View File

@ -2,15 +2,17 @@
<div class="col-md-12"> <div class="col-md-12">
<form method="GET" action="{{ route('modules.form.show', ['sector' => $form->sector, 'code' => $form->code]) }}" <form method="GET" action="{{ route('modules.form.show', ['sector' => $form->sector, 'code' => $form->code]) }}"
id="filterForm"> id="filterForm">
<div class="row"> {{-- <div class="row">
<div class="col-md-4"> <div class="col-md-4">
<x-inventory-year-select :selected-year="$inventoryYear" /> <x-inventory-year-select :selected-year="$inventoryYear" />
</div> </div>
</div> </div> --}}
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group d-flex justify-content-center align-items-center gap-1">
<label for="instansi">Instansi:</label> <div class="">
<label for="instansi">Instansi:</label>
</div>
<div class="input-group"> <div class="input-group">
<select name="instansi" id="instansi" class="form-control"> <select name="instansi" id="instansi" class="form-control">
@if ($scope === \App\Enums\LingkupAksesData::ALL->value) @if ($scope === \App\Enums\LingkupAksesData::ALL->value)
@ -32,11 +34,17 @@
</div> </div>
</div> </div>
<div class="col-md-8 order-md-2 d-flex gap-1 justify-content-end align-items-center flex-wrap"> <div class="col-md-8 order-md-2 d-flex gap-1 justify-content-end align-items-center flex-wrap">
<div class="form-group mb-0 mr-2"> <div class="form-group mb-0 mr-2 d-none">
@include('modules.form.approve') @include('modules.form.approve')
</div> </div>
<div class="form-group mb-0 mr-2"> <div class="form-group mb-0 mr-2">
<button type="button" class="btn btn-info mb-2 mb-md-0" onclick="showMetadataModal()" <button type="button" title="Tambah Data" class="btn btn-primary mb-2 mb-md-0" onclick="showCreateModal()"
{{ !$activityForm || $instansi === 'all' || $limitInternal ? 'disabled' : '' }}>
<i class="bx bx-plus"></i>
</button>
</div>
<div class="form-group mb-0 mr-2">
<button type="button" class="btn btn-secondary mb-2 mb-md-0" onclick="showMetadataModal()"
{{ !$activityForm || $instansi === 'all' || $limitInternal ? 'disabled' : '' }}> {{ !$activityForm || $instansi === 'all' || $limitInternal ? 'disabled' : '' }}>
<i class="bx bx-menu"></i> <i class="bx bx-menu"></i>
</button> </button>

View File

@ -0,0 +1,160 @@
<!-- Metadata Modal -->
<div class="modal fade" id="formModal" tabindex="-1" role="dialog" aria-labelledby="formModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-lg" role="document" style="width:90%; max-width: 90%;">
<div class="modal-content">
<div class="modal-header">
<div class="modal-title" id="formModalLabel">
<b>Form Tambah Data Baru</b>
</div>
</div>
<div class="modal-body">
<div class="row">
<!-- Right Column - Metadata Form -->
<div class="col-md-12">
<form id="FormSubmit" method="POST" enctype="multipart/form-data">
@csrf
<input type="hidden" name="id" id="metadataId">
<input type="hidden" name="code_id" value="{{ $activityForm->id ?? 0 }}">
<div class="row">
<div class="col-md-6 mb-3">
<x-inventory-year-select :selected-year="$inventoryYear" />
</div>
<div class="col-md-6">
<div class="form-group">
<div class="">
<label for="instansi">Instansi:</label>
</div>
<div class="input-group">
<select name="instansi" id="instansi" class="form-control">
@if ($scope === \App\Enums\LingkupAksesData::ALL->value)
<option value="none" @if ($instansi === null || $instansi == 'none') selected @endif>DATA
KONSOLIDASI</option>
@if ($agencies->isNotEmpty())
<option value="all" @if ($instansi === 'all') selected @endif>SELURUH DATA DARI PRODUSEN</option>
@endif
@endif
@foreach ($agencies as $agency)
<option value="{{ $agency->name }}"
@if ($instansi == $agency->name) selected @endif>
{{ $agency->name }}
</option>
@endforeach
</select>
</div>
</div>
</div>
@foreach ($formDetails as $detail)
@php
$unitCode = $detail->unit_code;
$unitCategory = $unitsMap[$unitCode]->category ?? null;
@endphp
<div class="col-md-12 mb-3">
<b>{{ $detail->activity ? $detail->activity->name : 'N/A' }}</b>
@if ($unitCategory)
<div class="input-group">
<input type="text" class="form-control w-50 text-right" oninput="numberFormat(this)">
<div class="input-group-text p-0" style="width: 200px!important;">
<select name="unit_code[{{ $detail->activity_code }}]" class="form-control unit-code"
data-activity-code="{{ $detail->activity_code }}"
data-current-unit="{{ $unitCode }}">
@foreach ($unitsByCategory[$unitCategory] as $unit)
<option value="{{ $unit->code }}"
{{ $unit->code == $unitCode ? 'selected' : '' }}>
{{ $unit->code }}
</option>
@endforeach
</select>
</div>
</div>
@else
{{ $unitCode }}
@endif
</div>
@endforeach
</div>
</form>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Simpan Data</button>
</div>
</div>
</div>
</div>
@section('css')
<style>
/* Global styles */
/* #metadataModal .form-group {
margin-bottom: 5px;
}
#metadataModal label {
color: #555;
font-size: 12px;
margin-left: 2px;
}
#metadataModal .form-control {
font-size: 12px;
height: auto;
line-height: 16px;
padding: 5px 8px 6px;
}
#metadataModal textarea.form-control {
height: 89px;
} */
.meta-content {
background: #EEF;
border-radius: 5px;
font-size: 12px;
font-weight: 400;
line-height: 16px;
margin-bottom: 10px;
padding: 10px 15px;
}
.meta-content h1 {
font-size: 13px;
margin: 0;
}
.meta-num {
color: #666;
font-size: 10px;
font-weight: 400;
margin-bottom: 5px;
}
.meta-actions {
font-size: 11px;
}
/* Link colors */
a.qa-pending {
color: #aaa;
}
a.qa-revise {
color: IndianRed;
}
a.qa-partial {
color: GoldenRod;
}
a.qa-done {
color: MediumSeaGreen;
}
</style>
@endsection

View File

@ -42,6 +42,7 @@
</div> </div>
</div> </div>
@include('modules.form.import') @include('modules.form.import')
@include('modules.form.form')
@if ($instansi !== 'all') @if ($instansi !== 'all')
@include('modules.form.aktivitas-user') @include('modules.form.aktivitas-user')
@include('modules.form.metadata.index') @include('modules.form.metadata.index')

View File

@ -117,12 +117,10 @@
.catch(error => console.error('Error converting value:', error)); .catch(error => console.error('Error converting value:', error));
} }
} }
function showMetadataModal() { function showMetadataModal() {
$('#metadataModal').modal('show'); $('#metadataModal').modal('show');
fetchMetadata(); fetchMetadata();
} }
function fetchMetadata() { function fetchMetadata() {
$('#metadataContent').hide(); $('#metadataContent').hide();
$('#isLoadMetadata').show(); $('#isLoadMetadata').show();
@ -141,6 +139,30 @@
}); });
} }
function showCreateModal() {
$('#formModal').modal('show');
fetchFormdata();
}
function fetchFormdata() {
$('#formContent').hide();
$('#isLoadForm').show();
$.ajax({
url: '{{ route('modules.form.create', ['sector' => $form->sector, 'code' => $form->code]) }}',
type: 'GET',
success: function(data) {
$('#formContent').html(data);
$('#formContent').show();
$('#isLoadForm').hide();
},
error: function(xhr, status, error) {
console.error(error);
$('#isLoadForm').hide();
}
});
}
function showActivityUserModal() { function showActivityUserModal() {
$('#userActivityModal').modal('show'); $('#userActivityModal').modal('show');
fetchUserActivity(); fetchUserActivity();

View File

@ -15,9 +15,9 @@
@endphp @endphp
<th style="min-width: 150px;"> <th style="min-width: 150px;">
{{ $detail->activity ? $detail->activity->name : 'N/A' }} {{ $detail->activity ? $detail->activity->name : 'N/A' }}
<br /><br />
@if ($unitCategory) @if ($unitCategory)
<select name="unit_code[{{ $detail->activity_code }}]" class="form-control unit-code" {{-- <select name="unit_code[{{ $detail->activity_code }}]" class="form-control unit-code"
data-activity-code="{{ $detail->activity_code }}" data-activity-code="{{ $detail->activity_code }}"
data-current-unit="{{ $unitCode }}"> data-current-unit="{{ $unitCode }}">
@foreach ($unitsByCategory[$unitCategory] as $unit) @foreach ($unitsByCategory[$unitCategory] as $unit)
@ -26,7 +26,7 @@
{{ $unit->code }} {{ $unit->code }}
</option> </option>
@endforeach @endforeach
</select> </select> --}}
@else @else
{{ $unitCode }} {{ $unitCode }}
@endif @endif
@ -54,11 +54,16 @@
: ''; : '';
@endphp @endphp
<td> <td>
<input type="text" <div class="input-group">
name="data[{{ $year }}][{{ $detail->activity_code }}-{{ $detail->unit_code }}]" <input type="text"
value="{{ getFormattedValue($activity_value) ?? '' }}" name="data[{{ $year }}][{{ $detail->activity_code }}-{{ $detail->unit_code }}]"
class="form-control text-right" oninput="numberFormat(this)" value="{{ getFormattedValue($activity_value) ?? '' }}"
style="min-width: 80px;" {{ $isLocked || $instansi === 'all' || $limitInternal ? 'readonly' : '' }}> class="form-control text-right" oninput="numberFormat(this)"
style="min-width: 80px;" {{ $isLocked || $instansi === 'all' || $limitInternal ? 'readonly' : '' }}>
<div class="input-group-text">
{{ $detail->unit_code }}
</div>
</div>
{{-- <input type="hidden" {{-- <input type="hidden"
name="data[{{ $year }}][{{ $detail->activity_code }}-{{ $detail->unit_code }}]" name="data[{{ $year }}][{{ $detail->activity_code }}-{{ $detail->unit_code }}]"
value="{{ $activity_value }}"> --}} value="{{ $activity_value }}"> --}}

View File

@ -171,6 +171,7 @@ Route::name('management.')->prefix('management')->group(function () {
Route::post('ef/add_ef_source', [EfController::class, 'storeEfSource'])->name('pengaturan.ef.addEfSource'); Route::post('ef/add_ef_source', [EfController::class, 'storeEfSource'])->name('pengaturan.ef.addEfSource');
// Additional Function for Dynamic Form Routing // Additional Function for Dynamic Form Routing
Route::get('form/create/{sector}/{code}', [FormController::class, 'create'])->name('form.create');
Route::resource('form/metadata', FormMetadataController::class)->only('index', 'store', 'destroy')->names('form.metadata'); Route::resource('form/metadata', FormMetadataController::class)->only('index', 'store', 'destroy')->names('form.metadata');
Route::get('form/aktivitas_user', [FormController::class, 'getUserActivities'])->name('form.aktivitasUser'); Route::get('form/aktivitas_user', [FormController::class, 'getUserActivities'])->name('form.aktivitasUser');