document.addEventListener("DOMContentLoaded", function () { const searchInput = document.getElementById('searchKaryawan'); if (searchInput) { searchInput.addEventListener('keyup', function () { const keyword = this.value.toLowerCase(); const rows = document.querySelectorAll("table tbody tr"); rows.forEach(row => { const nama = row.querySelector("td:nth-child(2)")?.textContent.toLowerCase(); if (nama.includes(keyword)) { row.style.display = ""; } else { row.style.display = "none"; } }); }); } }); // pilih kloter document.getElementById('kloter_id').addEventListener('change', function () { const id = this.value; if (id) { window.location.href = `/operator/presensi/${id}`; } }); document.getElementById('btnLihatKloter').addEventListener('click', function () { const select = document.getElementById('kloter_id'); const id = select.value; if (id) { window.location.href = `/operator/gaji/${id}`; } else { alert('Pilih kloter terlebih dahulu'); } }); // checkbox mode otomatis const checkbox = document.getElementById('modeOtomatis'); const STORAGE_KEY = 'mode_presensi_otomatis'; // Inisialisasi: ambil dari localStorage let modeOtomatis = localStorage.getItem(STORAGE_KEY); if (modeOtomatis === null) { // default true jika belum pernah disetel modeOtomatis = 'true'; localStorage.setItem(STORAGE_KEY, modeOtomatis); } checkbox.checked = modeOtomatis === 'true'; toggleInputManualJam(checkbox.checked); checkbox.addEventListener('change', function () { const isChecked = this.checked; localStorage.setItem(STORAGE_KEY, isChecked.toString()); toggleInputManualJam(isChecked); }); function toggleInputManualJam(isOtomatis) { document.querySelectorAll('.inputManualJam').forEach(el => { el.classList.toggle('d-none', isOtomatis); }); } function getCurrentTime() { const now = new Date(); return now.toTimeString().slice(0, 8); } document.querySelectorAll('.formPresensi').forEach(form => { form.addEventListener('submit', function (e) { const hiddenInput = form.querySelector('.inputJam'); const manualInput = form.querySelector('.inputManualJam'); const mode = localStorage.getItem(STORAGE_KEY) === 'true'; const jamSekarang = getCurrentTime(); let jamInput = ''; if (mode) { jamInput = jamSekarang; } else { jamInput = manualInput.value; if (!jamInput) { e.preventDefault(); Swal.fire({ icon: 'warning', title: 'Jam tidak valid!', text: 'Jam manual tidak boleh kosong.', timer: 5000, timerProgressBar: true, confirmButtonText: 'Oke', allowOutsideClick: false, allowEscapeKey: false, }); return; } // Lengkapi format menjadi HH:mm:ss jika hanya jam dan menit if (jamInput.length === 5) { jamInput += ':00'; } if (jamInput > jamSekarang) { e.preventDefault(); Swal.fire({ icon: 'warning', title: 'Jam tidak valid!', text: 'Jam tidak boleh lebih dari waktu sekarang.', timer: 3000, // 5 detik timerProgressBar: true, confirmButtonText: 'Oke', allowOutsideClick: false, allowEscapeKey: false, didOpen: () => { const content = Swal.getHtmlContainer(); if (content) { content.querySelector('button.swal2-confirm')?.focus(); } } }); return; } } hiddenInput.value = jamInput; }); }); document.addEventListener('DOMContentLoaded', function () { function handleJamEdit(selector, route, jamKey, errorMsg) { document.querySelectorAll(selector).forEach(input => { input.addEventListener('change', function () { const id = this.dataset.id; const jam = this.value; const savedMsg = this.nextElementSibling; fetch(route, { method: "POST", headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': window.presensiConfig.csrfToken }, body: JSON.stringify({ id: id, [jamKey]: jam }) }) .then(response => response.json()) .then(() => { if (savedMsg) { savedMsg.classList.remove('d-none'); setTimeout(() => savedMsg.classList.add('d-none'), 1500); } }) .catch(error => { alert(errorMsg); console.error(error); }); }); }); } handleJamEdit( '.input-edit-jam-masuk', window.presensiConfig.routeUpdateJamMasuk, 'jam_masuk', "Gagal menyimpan jam masuk." ); handleJamEdit( '.input-edit-jam-pulang', window.presensiConfig.routeUpdateJamPulang, 'jam_pulang', "Gagal menyimpan jam pulang." ); });