oca-hr/odoo-bringout-oca-hr-attendance-hr_attendance_geolocation/hr_attendance_geolocation/models/hr_attendance.py
Ernad Husremovic dfcda4100c Move all OCA HR modules from oca-technical to dedicated oca-hr submodule
Reorganized 67 HR-related modules for better structure:
- Moved all odoo-bringout-oca-hr-* packages from packages/oca-technical/
- Now organized in dedicated packages/oca-hr/ submodule
- Includes attendance, expense, holiday, employee, and contract modules
- Maintains all module functionality while improving project organization

This creates a cleaner separation between general technical modules
and HR-specific functionality.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-30 17:11:28 +02:00

80 lines
2.7 KiB
Python

# Copyright 2019 ForgeFlow S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class HrAttendance(models.Model):
_inherit = "hr.attendance"
check_in_latitude = fields.Float(digits="Location", readonly=True)
check_in_latitude_text = fields.Char(
"Check-in Latitude", compute="_compute_check_in_latitude_text"
)
check_in_longitude = fields.Float(digits="Location", readonly=True)
check_in_longitude_text = fields.Char(
"Check-in Longitude", compute="_compute_check_in_longitude_text"
)
check_out_latitude = fields.Float(digits="Location", readonly=True)
check_out_latitude_text = fields.Char(
"Check-out Latitude", compute="_compute_check_out_latitude_text"
)
check_out_longitude = fields.Float(digits="Location", readonly=True)
check_out_longitude_text = fields.Char(
"Check-out Longitude", compute="_compute_check_out_longitude_text"
)
def _get_raw_value_from_geolocation(self, dd):
d = int(dd)
m = int((dd - d) * 60)
s = (dd - d - m / 60) * 3600.00
z = round(s, 2)
return "%sº %s' %s\"" % (abs(d), abs(m), abs(z))
def _get_latitude_raw_value(self, dd):
return "%s %s" % (
"N" if int(dd) >= 0 else "S",
self._get_raw_value_from_geolocation(dd),
)
def _get_longitude_raw_value(self, dd):
return "%s %s" % (
"E" if int(dd) >= 0 else "W",
self._get_raw_value_from_geolocation(dd),
)
@api.depends("check_in_latitude")
def _compute_check_in_latitude_text(self):
for item in self:
item.check_in_latitude_text = (
self._get_latitude_raw_value(item.check_in_latitude)
if item.check_in_latitude
else False
)
@api.depends("check_in_longitude")
def _compute_check_in_longitude_text(self):
for item in self:
item.check_in_longitude_text = (
self._get_longitude_raw_value(item.check_in_longitude)
if item.check_in_longitude
else False
)
@api.depends("check_out_latitude")
def _compute_check_out_latitude_text(self):
for item in self:
item.check_out_latitude_text = (
self._get_latitude_raw_value(item.check_out_latitude)
if item.check_out_latitude
else False
)
@api.depends("check_out_longitude")
def _compute_check_out_longitude_text(self):
for item in self:
item.check_out_longitude_text = (
self._get_longitude_raw_value(item.check_out_longitude)
if item.check_out_longitude
else False
)