Files
ihrm/geofencing/models.py

40 lines
1.2 KiB
Python
Raw Normal View History

from django.core.exceptions import ValidationError
2025-04-30 14:55:35 +05:30
from django.db import models
from geopy.geocoders import Nominatim
2025-04-30 14:55:35 +05:30
from base.models import Company
class GeoFencing(models.Model):
2025-04-30 14:55:35 +05:30
latitude = models.FloatField(max_length=100)
longitude = models.FloatField(max_length=100)
radius_in_meters = models.IntegerField()
2025-04-30 14:55:35 +05:30
company_id = models.OneToOneField(
"base.Company",
related_name="geo_fencing",
on_delete=models.CASCADE,
blank=True,
null=True,
)
start = models.BooleanField(default=False)
def clean(self):
geolocator = Nominatim(user_agent="geo_checker") # Use a unique user-agent
try:
2025-04-30 14:55:35 +05:30
location = geolocator.reverse(
(self.latitude, self.longitude), exactly_one=True
)
if location:
pass
else:
raise ValidationError("Invalid Location")
except Exception as e:
2025-04-30 14:55:35 +05:30
raise ValidationError(e)
return super().clean()
2025-04-30 14:55:35 +05:30
def save_base(
self, raw=..., force_insert=..., force_update=..., using=..., update_fields=...
):
self.clean()
2025-04-30 14:55:35 +05:30
return super().save_base(raw, force_insert, force_update, using, update_fields)