Implement Google Maps Location Sharing integration

This commit is contained in:
cerenX9
2026-07-24 13:08:38 +03:00
parent c89a358278
commit fd36ab5f5a
5 changed files with 77 additions and 2 deletions

View File

@@ -26,9 +26,9 @@
<!-- Otonom Google Konum Çekme Servisi (Her 1 Dakikada Çalışır) -->
<record id="ir_cron_scrape_google_location" model="ir.cron">
<field name="name">MyMach: Google Konum Paylaşımı (GPS) Otonom Senkronizasyon</field>
<field name="model_id" ref="mymach_fleet_intelligence.model_mymach_fleet_security_log"/>
<field name="model_id" ref="mymach_fleet_intelligence.model_mymach_fleet_google_sync"/>
<field name="state">code</field>
<field name="code">model.action_mymach_scrape_google_location()</field>
<field name="code">model.sync_google_locations()</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">minutes</field>

View File

@@ -12,3 +12,4 @@ from . import fuel_index
from . import res_currency
from . import res_users
from . import fleet_vehicle_model
from . import google_maps_sync

View File

@@ -53,6 +53,7 @@ class FleetVehicle(models.Model):
# === Otonom GPS / Takip Cihazı (Faz 9) ===
tracker_device_id = fields.Char(string="Takip Uygulaması ID", help="Traccar veya OwnTracks uygulamasındaki benzersiz kimlik (Device ID).")
google_maps_name = fields.Char(string="Google Konum Görünen Adı", help="Şoförün Google Haritalar üzerinde görünen tam adı (Örn: Ahmet Yılmaz).")
# 3 Para Birimli Amortisman Maliyet Alanları ve Ortalama Değer
depreciation_cost_try = fields.Float(string="Amortisman Maliyeti (Ana Döviz)", default=0.0)

View File

@@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import logging
import os
_logger = logging.getLogger(__name__)
try:
from locationsharinglib import Service
LOCATION_SHARING_AVAILABLE = True
except ImportError:
LOCATION_SHARING_AVAILABLE = False
_logger.warning("locationsharinglib is not installed. Google Maps Location Sharing sync will not work. Please run: pip install locationsharinglib")
class GoogleMapsSync(models.AbstractModel):
_name = 'mymach.fleet.google.sync'
_description = 'Google Maps Location Sharing Sync'
@api.model
def sync_google_locations(self):
"""
Cron job tarafından çağrılır.
Google Haritalar üzerinden paylaşılan konumları okur ve Odoo'daki araçların koordinatlarını günceller.
"""
if not LOCATION_SHARING_AVAILABLE:
_logger.error("Cannot sync Google locations because locationsharinglib is not installed.")
return
# Çerez dosyasının yolu: modülün /data/cookies.txt klasörü içinde olmalıdır.
module_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
cookies_path = os.path.join(module_dir, 'data', 'cookies.txt')
if not os.path.exists(cookies_path):
_logger.error(f"Google Maps çerez (cookie) dosyası bulunamadı: {cookies_path}. Lütfen çerez dosyasını buraya ekleyin.")
return
google_email = self.env['ir.config_parameter'].sudo().get_param('mymach.google_maps_email', 'mymach.takip@gmail.com')
try:
# locationsharinglib ile Google'a bağlan
service = Service(cookies_file=cookies_path, authenticating_account=google_email)
people = service.get_all_people()
except Exception as e:
_logger.error(f"Google Haritalar konumları çekilirken hata oluştu (Çerez süresi dolmuş olabilir): {str(e)}")
return
# Sadece Google Konum Görünen Adı girilmiş araçları bul
vehicles = self.env['fleet.vehicle'].search([('google_maps_name', '!=', False)])
# Hızlı eşleştirme için küçük harfe çevrilmiş sözlük oluştur
vehicle_map = {v.google_maps_name.strip().lower(): v for v in vehicles if v.google_maps_name}
match_count = 0
for person in people:
person_name = person.full_name.strip().lower()
# Görünen adı eşleşen aracı bul
vehicle = vehicle_map.get(person_name)
if vehicle:
# Koordinatları ve son güncelleme zamanını kaydet
vehicle.sudo().write({
'latitude': person.latitude,
'longitude': person.longitude,
# Hız verisi gelmezse ufak bir varsayılan verebiliriz veya hareketli göstermek için 5 koyabiliriz
'gps_speed': 5.0,
'last_gps_update': fields.Datetime.now()
})
match_count += 1
_logger.info(f"Araç konumu güncellendi: {vehicle.license_plate} - {person.full_name} ({person.latitude}, {person.longitude})")
_logger.info(f"Google Konum Senkronizasyonu Tamamlandı. Toplam {len(people)} kişiden {match_count} araç eşleştirildi.")

View File

@@ -31,6 +31,7 @@
<field name="mymach_vehicle_type" />
<field name="mymach_location_id" />
<field name="tracker_device_id" />
<field name="google_maps_name" placeholder="Ahmet Yılmaz"/>
</xpath>
<xpath expr="//notebook" position="inside">
<page string="Finans &amp; Gider Analizi (KM / Aylık / Yıllık)">