Xenoptics HR · Attendance

Monthly Attendance — July 2026

Merged source: app/GPS punches + biometric machine
vw_attendance_combinedsp_get_attendance_month_V3
Design preview — representative data. Structure, columns and cell logic mirror XENHR's report exactly; swap in the live pull (driver ready) once SQL Server credentials are provided.
AL · AnnualPL · PersonalSL · Sick
Employee Late
(min)
1Wed 2Thu 3Fri 4Sat 5Sun 6Mon 7Tue 8Wed 9Thu 10Fri 11Sat 12Sun 13Mon 14Tue 15Wed 16Thu 17Fri 18Sat 19Sun 20Mon 21Tue 22Wed 23Thu 24Fri 25Sat 26Sun 27Mon 28Tue 29Wed 30Thu 31Fri
InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut InOut
Atthavit Mungmai1000127408:5517:4109:2117:5509:2518:2008:5818:1708:5318:0108:5217:4009:0717:4208:4918:0008:5818:1608:5118:0008:5017:4308:4317:5708:5218:0508:5818:1508:5017:5608:5517:5808:5218:1308:4218:1809:2117:59
Veerasak Sanyamuang100013708:5718:0808:5117:5708:5717:59ALAL08:4818:1008:5718:0908:4917:4108:5818:1608:4317:4208:5218:0708:5418:0708:5918:1108:5517:5409:0718:0208:4618:0608:5418:11
Sasipimol Sornsirikulpong1000144708:4818:0308:5117:5708:5117:4008:4218:2009:2217:5908:4218:1408:4717:3608:4818:1008:4518:1508:4717:3608:5018:1608:5118:1708:5618:0008:5518:1409:2517:3608:4418:0508:4717:5808:4418:0308:5017:3808:4618:10
Phattira Sookcharoen10001611008:5718:0709:2918:1508:5118:0908:4717:5009:2918:1708:4918:0908:4718:1308:4918:1608:5617:5709:0118:1109:2517:5908:4818:0308:5117:5708:4718:1608:4918:0108:5518:1708:4918:2009:2618:0308:4818:13
Maneekhat Atcharaphorn1000266108:5418:1808:4318:0508:5317:5609:3318:1708:5818:2008:5518:0508:5818:0408:5618:0008:5618:01SL08:5017:3708:5718:0308:5618:0008:5618:1308:4317:5908:4918:1209:2818:1508:5117:56
Prasopchokchai Arutchaporn1000312609:0818:0008:4218:1608:5418:0108:4918:0009:1318:1309:0518:1308:5817:4308:4718:1508:5317:3308:4917:5408:5818:1608:4218:0408:5317:5008:4518:1008:5818:0208:5417:5908:4718:1608:4817:58
Nyein Su Su1001009208:5518:0709:0518:0508:4717:5809:2517:5808:5218:2008:5218:0108:4818:2009:2518:0209:3718:1608:5218:1308:4318:17PLPLPL08:4618:0108:5817:4208:4517:5408:5217:47
Pasunun Arphaphat10014414009:1518:1908:5418:1108:5118:0108:5418:1109:3018:1108:5118:1208:5217:3509:2818:0808:5018:1008:4318:1908:5718:0008:4418:0308:4218:1408:5418:0408:4918:0209:3118:0408:4617:5609:3618:1408:5118:1208:5718:20
8 employees · 31 days · In = first scan, Out = last scan (MIN/MAX per day) Orange = late in (after shift start) · Red = early out (before shift end) · Green = holiday · Grey = weekend

Data source mapping

Rule: use the Odoo model where one exists; fall back to the XENHR backend DB (or the biometric machine) only for what Odoo lacks.

Report fieldSource of recordWhere it comes from
Employee name / codeOdoohr.employee (name, barcode/registration no. as employee_code)
Shift start / endOdooresource.calendar on the employee's working schedule
Leave overlays (AL/PL/SL)Odoohr.leave + hr.leave.type (approved leaves in range)
Public holidaysOdooresource.calendar.leaves (global) — else XENHR holidays
App / GPS punchesXENHRattendance_records — no Odoo equivalent for the GPS-geofence source yet (gap #9)
Biometric punches (raw)Machine[192.168.67.51].attendance.dbo.Transcantime (enrollnumber, datetimescan)
In / Out per dayDerivedMIN / MAX scan per employee-day across the merged set (SP step 2)
Employee-code correctionsXENHR8 hard-coded remaps in the SP — must move to a mapping table, not stay in SQL