Merge remote-tracking branch 'composer/feature/senior-officer' into staging

This commit is contained in:
daengdeni
2025-01-15 16:50:34 +07:00
9 changed files with 149 additions and 151 deletions

View File

@@ -82,8 +82,8 @@ class ActivityController extends Controller
'user_id' => 'required|integer', 'user_id' => 'required|integer',
'team_id' => 'required|integer', 'team_id' => 'required|integer',
], [ ], [
'team_member_id.required_without' => 'Field team_member_id atau region_id harus diisi.', 'team_member_id.required_without' => 'Field team harus diisi.',
'region_id.required_without' => 'Field region_id atau team_member_id harus diisi.', '.required_without' => 'Field harus diisi.',
]); ]);

View File

@@ -1476,14 +1476,12 @@ class SurveyorController extends Controller
{ {
$validated = $request->validate([ $validated = $request->validate([
'form' => 'required|in:create-inspeksi',
'inspeksi' => 'required|exists:permohonan,id',
'dokument' => 'required', 'dokument' => 'required',
'jenisjaminan' => 'required' 'jenis_jaminan' => 'required'
]); ]);
$dokumentId = $validated['dokument']; $dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan']; $jaminanId = $validated['jenis_jaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
@@ -1566,14 +1564,12 @@ class SurveyorController extends Controller
public function denah(Request $request, $id) public function denah(Request $request, $id)
{ {
$validated = $request->validate([ $validated = $request->validate([
'form' => 'required|in:create-denah',
'denah' => 'required|exists:permohonan,id',
'dokument' => 'required', 'dokument' => 'required',
'jenisjaminan' => 'required' 'jenis_jaminan' => 'required'
]); ]);
$dokumentId = $validated['dokument']; $dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan']; $jaminanId = $validated['jenis_jaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
@@ -1596,14 +1592,12 @@ class SurveyorController extends Controller
public function foto(Request $request, $id) public function foto(Request $request, $id)
{ {
$validated = $request->validate([ $validated = $request->validate([
'form' => 'required|in:create-foto',
'foto' => 'required|exists:permohonan,id',
'dokument' => 'required', 'dokument' => 'required',
'jenisjaminan' => 'required' 'jenis_jaminan' => 'required'
]); ]);
$dokumentId = $validated['dokument']; $dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan']; $jaminanId = $validated['jenis_jaminan'];
$fotoObjekJaminan = FotoObjekJaminan::all(); $fotoObjekJaminan = FotoObjekJaminan::all();
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);
@@ -1632,14 +1626,12 @@ class SurveyorController extends Controller
// Ambil data permohonan dengan eager loading // Ambil data permohonan dengan eager loading
$validated = $request->validate([ $validated = $request->validate([
'form' => 'required|in:data-pembanding',
'pembanding' => 'required|exists:permohonan,id',
'dokument' => 'required', 'dokument' => 'required',
'jenisjaminan' => 'required' 'jenis_jaminan' => 'required'
]); ]);
$dokumentId = $validated['dokument']; $dokumentId = $validated['dokument'];
$jaminanId = $validated['jenisjaminan']; $jaminanId = $validated['jenis_jaminan'];
$permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId); $permohonan = $this->getPermohonanJaminanId($id, $dokumentId, $jaminanId);

View File

@@ -47,7 +47,6 @@
<h3 class="card-title">Team Activity</h3> <h3 class="card-title">Team Activity</h3>
</div> </div>
<div data-accordion="true"> <div data-accordion="true">
@php @php
$sortedTeamsActivity = $teamsActivity->sortBy(function ($item) { $sortedTeamsActivity = $teamsActivity->sortBy(function ($item) {
return $item->team->regions->penilaiTeam return $item->team->regions->penilaiTeam
@@ -60,6 +59,9 @@
@endphp @endphp
@foreach ($sortedTeamsActivity as $index => $item) @foreach ($sortedTeamsActivity as $index => $item)
@php
$totalTask = countPermohonanForUser($item->user->id);
@endphp
<div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200" data-accordion-item="true" <div class="accordion-item [&:not(:last-child)]:border-b border-b-gray-200" data-accordion-item="true"
id="accordion_{{ $index }}"> id="accordion_{{ $index }}">
<button class="accordion-toggle py-4 group mx-8" <button class="accordion-toggle py-4 group mx-8"
@@ -69,18 +71,28 @@
<tr> <tr>
<th class="min-w-[150px]" style="width: 600px"> <th class="min-w-[150px]" style="width: 600px">
<span <span
class="text-base text-gray-900 font-normal break-words">{{ $item->user->name }}</span> class="text-base text-gray-900 font-medium break-words">{{ $item->user->name }}</span>
</th> </th>
<th class="min-w-[150px]"> <th class="min-w-[150px]">
<span class="text-base text-gray-900 font-normal"> <span class="text-base text-gray-900 font-normal">
<p>Total Task: {{ countPermohonanForUser($item->user->id) }}</p>
@if ($totalTask >= 0 && $totalTask < 5)
<span class="badge badge-outline badge-success rounded-full">Total Task
{{ $totalTask }}</span>
@elseif ($totalTask >= 5 && $totalTask < 10)
<span class="badge badge-outline badge-warning rounded-full">Total Task
{{ $totalTask }}</span>
@else
<span class="badge badge-outline badge-danger rounded-full">Total Task
{{ $totalTask }}</span>
@endif
</span> </span>
</th> </th>
<th> <th>
<i <i
class="ki-outline ki-plus text-gray-600 text-2sm accordion-active:hidden block"></i> class="ki-outline ki-plus text-gray-600 text-2sm font-medium accordion-active:hidden block"></i>
<i <i
class="ki-outline ki-minus text-gray-600 text-2sm accordion-active:block hidden"></i> class="ki-outline ki-minus text-gray-600 text-2sm font-medium accordion-active:block hidden"></i>
</th> </th>
</tr> </tr>
@@ -144,13 +156,6 @@
@endsection @endsection
@push('scripts') @push('scripts')
<script>
function jadwal(id) {
document.getElementById('ids').value = id;
}
</script>
<script type="module"> <script type="module">
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const accordions = document.querySelectorAll('[data-accordion-item]'); const accordions = document.querySelectorAll('[data-accordion-item]');
@@ -241,7 +246,7 @@
title: 'Due Date', title: 'Due Date',
render: (item, data) => { render: (item, data) => {
if (!data.due_date_sla) { if (!data.due_date_sla) {
return `<span class="badge badge-sm badge-danger uppercase flex justify-center">Sudah melewati batas</span>`; return `<span class="badge badge-sm badge-outline badge-danger uppercase flex justify-center">Sudah melewati batas</span>`;
} }
return `${window.formatTanggalIndonesia(data.due_date_sla)}`; return `${window.formatTanggalIndonesia(data.due_date_sla)}`;
} }
@@ -251,7 +256,7 @@
title: 'Paparan', title: 'Paparan',
render: (item, data) => { render: (item, data) => {
if (!data.due_date_sla) { if (!data.due_date_sla) {
return `<span class="badge badge-sm badge-danger uppercase flex justify-center">Sudah melewati batas</span>`; return `<span class="badge badge-sm badge-outline badge-danger uppercase flex justify-center">Sudah melewati batas</span>`;
} }
return `${window.formatTanggalIndonesia(data.due_date_sla)}`; return `${window.formatTanggalIndonesia(data.due_date_sla)}`;
} }
@@ -311,7 +316,7 @@
} }
</script> </script>
<script type="text/javascript"> <script type="text/javascript">
function updateTeam(penilaaniId, permohonanId, userId, teamId) { function updateTeam(penilaaniId, permohonanId, userId, teamId) {
const selectCategory = () => { const selectCategory = () => {
Swal.fire({ Swal.fire({
@@ -351,7 +356,8 @@
title: 'Pilih ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'), title: 'Pilih ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'),
input: 'select', input: 'select',
inputOptions: subOptions, inputOptions: subOptions,
inputPlaceholder: 'Pilih salah satu ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'), inputPlaceholder: 'Pilih salah satu ' + (selectedCategory === 'team' ?
'Anggota Tim' : 'Wilayah'),
icon: 'info', icon: 'info',
showCancelButton: true, showCancelButton: true,
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
@@ -364,7 +370,8 @@
selectCategory(); selectCategory();
} else if (subResult.isConfirmed) { } else if (subResult.isConfirmed) {
if (!subResult.value) { if (!subResult.value) {
Swal.fire('Error!', 'Anda harus memilih opsi sebelum melanjutkan.', 'error'); Swal.fire('Error!', 'Anda harus memilih opsi sebelum melanjutkan.',
'error');
return; return;
} }
@@ -373,7 +380,8 @@
let useURL = "{{ URL::to('/activity/update-team') }}"; let useURL = "{{ URL::to('/activity/update-team') }}";
// Tentukan tipe parameter berdasarkan kategori // Tentukan tipe parameter berdasarkan kategori
const paramKey = selectedCategory === 'team' ? 'team_member_id' : 'region_id'; const paramKey = selectedCategory === 'team' ? 'team_member_id' :
'region_id';
// Prepare input data // Prepare input data
let input_data = { let input_data = {
@@ -394,7 +402,8 @@
dataType: "json", dataType: "json",
success: function(response) { success: function(response) {
if (response.status === 'success') { if (response.status === 'success') {
Swal.fire('Sukses!', response.message, 'success').then(() => { Swal.fire('Sukses!', response.message,
'success').then(() => {
location.reload(true); location.reload(true);
}); });
} else { } else {
@@ -403,7 +412,9 @@
}, },
error: function(xhr) { error: function(xhr) {
console.error(xhr); console.error(xhr);
Swal.fire('Error!', 'Terjadi kesalahan saat memproses permintaan.', 'error'); Swal.fire('Error!',
'Terjadi kesalahan saat memproses permintaan.',
'error');
}, },
}); });
} }
@@ -415,6 +426,5 @@
// Mulai dari pemilihan kategori // Mulai dari pemilihan kategori
selectCategory(); selectCategory();
} }
</script> </script>
@endpush @endpush

View File

@@ -16,7 +16,7 @@
route('surveyor.inspeksi', [ route('surveyor.inspeksi', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) .
"?form=create-inspeksi&inspeksi={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}", "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['data_form']), 'icon' => !empty($currentInspeksi['data_form']),
], ],
@@ -30,7 +30,7 @@
route('surveyor.denah', [ route('surveyor.denah', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) .
"?form=create-denah&denah={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}", "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['denah_form']), 'icon' => !empty($currentInspeksi['denah_form']),
]; ];
@@ -43,7 +43,7 @@
route('surveyor.foto', [ route('surveyor.foto', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) .
"?form=create-foto&foto={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}", "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['foto_form']), 'icon' => !empty($currentInspeksi['foto_form']),
], ],
@@ -53,7 +53,7 @@
route('surveyor.data-pembanding', [ route('surveyor.data-pembanding', [
'id' => $permohonan->id, 'id' => $permohonan->id,
]) . ]) .
"?form=data-pembanding&pembanding={$permohonan->id}&dokument={$jaminanId}&jenisjaminan={$dokumen->jenisJaminan->id}", "?dokument={$jaminanId}&jenis_jaminan={$dokumen->jenisJaminan->id}",
'show' => true, 'show' => true,
'icon' => !empty($currentInspeksi['data_pembanding']), 'icon' => !empty($currentInspeksi['data_pembanding']),
], ],
@@ -89,10 +89,8 @@
<a href="{{ route('surveyor.inspeksi', ['id' => $permohonan->id]) . <a href="{{ route('surveyor.inspeksi', ['id' => $permohonan->id]) .
'?' . '?' .
http_build_query([ http_build_query([
'form' => 'create-inspeksi',
'inspeksi' => $permohonan->id,
'dokument' => $jaminanId, 'dokument' => $jaminanId,
'jenisjaminan' => $dokumen->jenisJaminan->id, 'jenis_jaminan' => $dokumen->jenisJaminan->id,
]) }}" ]) }}"
class="flex items-center justify-between border border-gray-200 rounded-xl gap-2 px-4 py-4 btn-outline {{ !empty($currentInspeksi['data_form']) ? 'btn-success' : 'btn-primary' }} hover:btn-light"> class="flex items-center justify-between border border-gray-200 rounded-xl gap-2 px-4 py-4 btn-outline {{ !empty($currentInspeksi['data_form']) ? 'btn-success' : 'btn-primary' }} hover:btn-light">
<div class="flex items-center gap-3.5"> <div class="flex items-center gap-3.5">
@@ -114,10 +112,8 @@
<a href="{{ route('surveyor.foto', ['id' => $permohonan->id]) . <a href="{{ route('surveyor.foto', ['id' => $permohonan->id]) .
'?' . '?' .
http_build_query([ http_build_query([
'form' => 'create-foto',
'foto' => $permohonan->id,
'dokument' => $jaminanId, 'dokument' => $jaminanId,
'jenisjaminan' => $dokumen->jenisJaminan->id, 'jenis_jaminan' => $dokumen->jenisJaminan->id,
]) }}" ]) }}"
class="flex items-center justify-between border border-gray-200 rounded-xl gap-2 px-4 py-4 btn-outline {{ !empty($currentInspeksi['foto_form']) ? 'btn-success' : 'btn-primary' }} hover:btn-light"> class="flex items-center justify-between border border-gray-200 rounded-xl gap-2 px-4 py-4 btn-outline {{ !empty($currentInspeksi['foto_form']) ? 'btn-success' : 'btn-primary' }} hover:btn-light">
<div class="flex items-center gap-3.5"> <div class="flex items-center gap-3.5">

View File

@@ -20,7 +20,7 @@
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
<h3 class="card-title">Denah</h3> <h3 class="card-title">Denah</h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => request('denah')]) }}?form=denah" class="btn btn-xs btn-info"> <a href="{{ route('surveyor.show', ['id' => $permohonan->id ]) }}?form=denah" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
</div> </div>

View File

@@ -83,7 +83,7 @@
Data Jaminan Data Jaminan
</h3> </h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => request('foto')]) }}" class="btn btn-xs btn-info"> <a href="{{ route('surveyor.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Back <i class="ki-filled ki-exit-left"></i> Back
</a> </a>
</div> </div>

View File

@@ -1,7 +1,7 @@
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
<h3 class="card-title">Data Pembanding</h3> <h3 class="card-title">Data Pembanding</h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => request('pembanding')]) }}" class="btn btn-xs btn-info"> <a href="{{ route('surveyor.show', ['id' => $permohonan->id]) }}" class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Kembali <i class="ki-filled ki-exit-left"></i> Kembali
</a> </a>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="card-header bg-agi-50"> <div class="card-header bg-agi-50">
<h3 class="card-title">Data Pembanding</h3> <h3 class="card-title">Data Pembanding</h3>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<a href="{{ route('surveyor.show', ['id' => request('pembanding')]) }}" <a href="{{ route('surveyor.show', ['id' => $permohonan->id]) }}"
class="btn btn-xs btn-info"> class="btn btn-xs btn-info">
<i class="ki-filled ki-exit-left"></i> Kembali <i class="ki-filled ki-exit-left"></i> Kembali
</a> </a>

View File

@@ -549,10 +549,10 @@ Route::middleware(['auth'])->group(function () {
Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus'); Route::get('checkButtonStatus/{id}', [SurveyorController::class, 'checkButtonStatus'])->name('checkButtonStatus');
Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [SurveyorController::class, 'dataForDatatables'])->name('datatables');
Route::get('inspeksi/{id}', [SurveyorController::class, 'formInspeksi'])->name('inspeksi'); Route::get('inspeksi/{id}/create', [SurveyorController::class, 'formInspeksi'])->name('inspeksi');
Route::get('denah/{id}', [SurveyorController::class, 'denah'])->name('denah'); Route::get('denah/{id}/create', [SurveyorController::class, 'denah'])->name('denah');
Route::get('foto/{id}', [SurveyorController::class, 'foto'])->name('foto'); Route::get('foto/{id}/create', [SurveyorController::class, 'foto'])->name('foto');
Route::get('data-pembanding/{id}', [SurveyorController::class, 'dataPembanding'])->name('data-pembanding'); Route::get('data-pembanding/{id}/create', [SurveyorController::class, 'dataPembanding'])->name('data-pembanding');
Route::post('submitSurveyor/{id}', [SurveyorController::class, 'submitSurveyor'])->name('submitSurveyor'); Route::post('submitSurveyor/{id}', [SurveyorController::class, 'submitSurveyor'])->name('submitSurveyor');
Route::post('update_analisa/{id}', [SurveyorController::class, 'update_analisa'])->name('update_analisa'); Route::post('update_analisa/{id}', [SurveyorController::class, 'update_analisa'])->name('update_analisa');
}); });