Rekap Absen

Foto absen cuma tersimpan 3 hari
`); win.document.close(); } function openAddEmployeeModal() { document.getElementById('new-emp-name').value = ''; document.getElementById('new-emp-code').value = ''; document.getElementById('employee-add-error').textContent = ''; newEmpCodeTouched = false; openModal('employee-add-modal'); } async function submitAddEmployee() { const name = document.getElementById('new-emp-name').value.trim(); const code = document.getElementById('new-emp-code').value.trim().toLowerCase(); const errEl = document.getElementById('employee-add-error'); if (!name || !code) { errEl.textContent = 'Nama & ID wajib diisi.'; return; } try { await sbFunction('admin-create-employee', { employee_code: code, full_name: name }); closeModal('employee-add-modal'); loadKaryawanTab(); } catch (e) { errEl.textContent = 'Gagal: ID mungkin sudah dipakai.'; } } let editEmpTarget = null; function openEditEmployeeModal(emp) { editEmpTarget = emp; document.getElementById('employee-edit-title').textContent = emp.full_name; document.getElementById('edit-emp-name').value = emp.full_name; document.getElementById('edit-emp-salary').value = emp.base_salary || 0; document.getElementById('edit-emp-incentive').value = emp.incentive || 0; document.getElementById('edit-emp-active').checked = emp.is_active; document.getElementById('employee-edit-error').textContent = ''; openModal('employee-edit-modal'); } async function submitEditEmployee() { const errEl = document.getElementById('employee-edit-error'); try { await sbRpc('pic_update_employee', { p_employee_id: editEmpTarget.id, p_full_name: document.getElementById('edit-emp-name').value.trim(), p_base_salary: parseFloat(document.getElementById('edit-emp-salary').value) || 0, p_incentive: parseFloat(document.getElementById('edit-emp-incentive').value) || 0, p_is_active: document.getElementById('edit-emp-active').checked, }); closeModal('employee-edit-modal'); loadKaryawanTab(); } catch (e) { errEl.textContent = 'Gagal menyimpan. Coba lagi.'; } } /* ---------- boot ---------- */ (async () => { const restored = await tryRestoreSession(); if (!restored) { document.getElementById('login-card').style.display = 'block'; } })();