{
    "name": "Xenoptics Attendance (Monthly)",
    "version": "19.0.1.27.0",
    "summary": "Monthly attendance report merging biometric (HRSystem) + native Odoo GPS/systray check-ins",
    "description": """
Renders the monthly attendance pivot (per-employee, per-day In/Out) at
/odoo/attendances/bymonth, sourced from the HRSystem SQL Server stored
procedure sp_get_attendance_month_V3 (biometric machine + app/GPS punches).
Feature-parity with XENHR's AttendanceReportsByMonthPage during migration.

GPS geofencing (v1.2): mirrors XENHR's AttendanceService::checkIn /
validateGpsLocation exactly, but reuses Odoo core's own native GPS
check-in instead of a custom page -- core hr_attendance already asks the
browser for coordinates on the systray check-in/out widget and stores them
on hr.attendance (in_latitude/in_longitude); this module just adds the
missing piece, xeno.attendance.location, and rejects a check-in outside
every configured location's radius (same haversine formula, same
"no locations configured = unrestricted" fallback). Only check-in is
geofenced, never check-out, matching XENHR. Requires "Device Tracking" in
Attendances settings (enabled by default by this module's data).

Auto-fill rules (v1.3): ports XENHR's AttendanceAutoRule -- an employee or
department exempt from daily scanning shows "Present" instead of blank/
absent on a working day with no scan at all, never overriding a real scan.
XENHR's "ignore" rule type is validated in its API but never actually
processed anywhere in that codebase (confirmed dead code), so only the
real auto_fill behavior is ported.

Native check-in merge (v1.10): now that XENHR is frozen and unreachable,
attendance is genuinely split across two systems going forward -- the
biometric scanners keep writing straight to HRSystem's
vw_attendance_combined, but the GPS/systray check-in widget writes only to
Odoo's own hr.attendance, which HRSystem has zero knowledge of. Every
report (Monthly/My/My Team) merges both: HRSystem's own row wins where it
already has data for a day, Odoo's native hr.attendance fills in anything
HRSystem doesn't have, and an employee with no HRSystem row at all this
month (a fully post-cutover hire, or someone who simply never scanned a
biometric machine) still gets a row synthesized from their native
check-ins.

Check-in Locations list: a "Preview" button opens a small Leaflet/
OpenStreetMap dialog (marker + geofence radius circle, lat/long/radius/
status, a link to open the same point on openstreetmap.org) so HR can
sanity-check a pinned coordinate without leaving Odoo. Leaflet is vendored
locally under static/lib/leaflet, no external JS host in the asset
bundle; map tiles themselves still load from openstreetmap.org, same as
any embedded map. Also adds the (previously missing) Archived filter to
this list.
""",
    "author": "Xenoptics",
    "license": "LGPL-3",
    "category": "Human Resources/Attendances",
    "depends": ["hr", "hr_holidays", "hr_attendance"],
    "external_dependencies": {"python": ["pymssql"]},
    "data": [
        "security/ir.model.access.csv",
        "security/hr_business_trip_security.xml",
        "data/attendance_code_map_data.xml",
        "data/attendance_geofence_data.xml",
        "views/attendance_menu.xml",
        "views/attendance_code_map_views.xml",
        "views/attendance_viewer_views.xml",
        "views/attendance_override_views.xml",
        "views/attendance_dayoff_views.xml",
        "views/attendance_my_menu.xml",
        "views/attendance_myteam_menu.xml",
        "views/hr_business_trip_views.xml",
        "views/employee_type_views.xml",
        "views/hr_employee_views.xml",
        "views/attendance_geofence_views.xml",
        "views/attendance_auto_rule_views.xml",
    ],
    "assets": {
        "web.assets_backend": [
            "xeno_attendance/static/src/js/bymonth_action.js",
            "xeno_attendance/static/src/xml/bymonth_templates.xml",
            "xeno_attendance/static/src/js/myteam_action.js",
            "xeno_attendance/static/src/xml/myteam_templates.xml",
            "xeno_attendance/static/src/js/my_action.js",
            "xeno_attendance/static/src/xml/my_templates.xml",
            "xeno_attendance/static/src/scss/my_attendance_checkin.scss",
            "xeno_attendance/static/lib/leaflet/leaflet.css",
            "xeno_attendance/static/lib/leaflet/leaflet.js",
            "xeno_attendance/static/src/js/location_preview_action.js",
            "xeno_attendance/static/src/xml/location_preview_templates.xml",
            "xeno_attendance/static/src/scss/location_preview.scss",
        ],
    },
    "installable": True,
    "application": False,
}
