--:--:--
--:--:--
Caricamento...
✅ Sistema pronto — avvicina o scannerizza il badge
📷
Scannerizza il tuo badge
Posiziona il barcode davanti allo scanner oppure digita il codice
✅
ENTRATA
Nome Cognome
Ruolo
--:--:--
Ora registrata
❌
Badge non riconosciuto
Il codice scansionato non corrisponde a nessun dipendente registrato.

📝 Dettagli timbratura

–

✕
async function timbratura(shopId, barcode) { if(!shopId) return {success:false, message:'ShopId mancante'}; try { var bid = String(barcode).trim(); var oggi = new Date().toISOString().split('T')[0]; var results = await Promise.all([ sb('employees?shop_id=eq.' + shopId + '&id=eq.' + encodeURIComponent(bid)), sb('assenze?shop_id=eq.' + shopId + '&emp_id=eq.' + encodeURIComponent(bid) + '&data=lte.' + oggi + '&data_fine=gte.' + oggi), sb('punches?shop_id=eq.' + shopId + '&emp_id=eq.' + encodeURIComponent(bid) + '&data=eq.' + oggi + '&order=ora.desc&limit=1') ]); var emp = results[0] && results[0][0]; if(!emp) return {success:false, message:'Badge non riconosciuto'}; var ass = results[1]; if(ass && ass.length) { var t = ass[0].tipo; if(t==='FERIE'||t==='PERMESSO'||t==='MALATTIA') return {success:false, message: emp.nome + ' ha ' + t + ' oggi'}; } var last = results[2]; var tipo = (!last || !last[0] || last[0].tipo === 'USCITA') ? 'ENTRATA' : 'USCITA'; var ora = new Date().toTimeString().split(' ')[0]; await sb('punches', {method:'POST', prefer:'return=minimal', body:{ shop_id: shopId, emp_id: bid, barcode: bid, nome: emp.nome, cognome: emp.cognome, data: oggi, ora: ora, tipo: tipo }}); return {success:true, tipo:tipo, nome:emp.nome, cognome:emp.cognome, ora:ora, data:oggi}; } catch(e) { return {success:false, message:e.message}; } }