perbaikan url query param surveyor dan perbaikan tampilan team activity

This commit is contained in:
majid
2025-01-15 16:06:51 +07:00
parent 47bf238196
commit 1e2b6f21ae
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,110 +316,115 @@
} }
</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({
title: 'Pilih Kategori', title: 'Pilih Kategori',
input: 'select', input: 'select',
inputOptions: { inputOptions: {
team: 'Pilih dari Team', team: 'Pilih dari Team',
region: 'Pilih dari Wilayah' region: 'Pilih dari Wilayah'
}, },
inputPlaceholder: 'Pilih kategori Pengganti', inputPlaceholder: 'Pilih kategori Pengganti',
icon: 'warning', icon: 'warning',
showCancelButton: true, showCancelButton: true,
confirmButtonColor: '#3085d6', confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33', cancelButtonColor: '#d33',
confirmButtonText: 'Lanjut', confirmButtonText: 'Lanjut',
cancelButtonText: 'Batal', cancelButtonText: 'Batal',
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
const selectedCategory = result.value; const selectedCategory = result.value;
let subOptions = {}; let subOptions = {};
if (selectedCategory === 'team') { if (selectedCategory === 'team') {
subOptions = { subOptions = {
@foreach ($teamsActivity as $item) @foreach ($teamsActivity as $item)
{{ $item->user->id }}: '{{ $item->user->name }}', {{ $item->user->id }}: '{{ $item->user->name }}',
@endforeach @endforeach
}; };
} else if (selectedCategory === 'region') { } else if (selectedCategory === 'region') {
subOptions = { subOptions = {
@foreach ($teamPenilai as $item) @foreach ($teamPenilai as $item)
{{ $item->regions->id }}: '{{ $item->regions->name }}', {{ $item->regions->id }}: '{{ $item->regions->name }}',
@endforeach @endforeach
};
}
Swal.fire({
title: 'Pilih ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'),
input: 'select',
inputOptions: subOptions,
inputPlaceholder: 'Pilih salah satu ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'),
icon: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya',
cancelButtonText: 'Kembali',
}).then((subResult) => {
if (subResult.dismiss === Swal.DismissReason.cancel) {
// Kembali ke tahap pemilihan kategori
selectCategory();
} else if (subResult.isConfirmed) {
if (!subResult.value) {
Swal.fire('Error!', 'Anda harus memilih opsi sebelum melanjutkan.', 'error');
return;
}
// Define variables
let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/activity/update-team') }}";
// Tentukan tipe parameter berdasarkan kategori
const paramKey = selectedCategory === 'team' ? 'team_member_id' : 'region_id';
// Prepare input data
let input_data = {
_token: token,
id: penilaaniId,
[paramKey]: subResult.value,
permohonan_id: permohonanId,
user_id: userId,
team_id: teamId,
}; };
// AJAX request
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
if (response.status === 'success') {
Swal.fire('Sukses!', response.message, 'success').then(() => {
location.reload(true);
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(xhr) {
console.error(xhr);
Swal.fire('Error!', 'Terjadi kesalahan saat memproses permintaan.', 'error');
},
});
} }
});
}
});
};
// Mulai dari pemilihan kategori Swal.fire({
selectCategory(); title: 'Pilih ' + (selectedCategory === 'team' ? 'Anggota Tim' : 'Wilayah'),
} input: 'select',
</script> inputOptions: subOptions,
inputPlaceholder: 'Pilih salah satu ' + (selectedCategory === 'team' ?
'Anggota Tim' : 'Wilayah'),
icon: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya',
cancelButtonText: 'Kembali',
}).then((subResult) => {
if (subResult.dismiss === Swal.DismissReason.cancel) {
// Kembali ke tahap pemilihan kategori
selectCategory();
} else if (subResult.isConfirmed) {
if (!subResult.value) {
Swal.fire('Error!', 'Anda harus memilih opsi sebelum melanjutkan.',
'error');
return;
}
// Define variables
let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/activity/update-team') }}";
// Tentukan tipe parameter berdasarkan kategori
const paramKey = selectedCategory === 'team' ? 'team_member_id' :
'region_id';
// Prepare input data
let input_data = {
_token: token,
id: penilaaniId,
[paramKey]: subResult.value,
permohonan_id: permohonanId,
user_id: userId,
team_id: teamId,
};
// AJAX request
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
if (response.status === 'success') {
Swal.fire('Sukses!', response.message,
'success').then(() => {
location.reload(true);
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(xhr) {
console.error(xhr);
Swal.fire('Error!',
'Terjadi kesalahan saat memproses permintaan.',
'error');
},
});
}
});
}
});
};
// Mulai dari pemilihan kategori
selectCategory();
}
</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');
}); });