diff --git a/addons/mymach_fleet_intelligence/__manifest__.py b/addons/mymach_fleet_intelligence/__manifest__.py
index a07e547..87d7ef8 100644
--- a/addons/mymach_fleet_intelligence/__manifest__.py
+++ b/addons/mymach_fleet_intelligence/__manifest__.py
@@ -27,7 +27,6 @@
'views/fleet_handover_views.xml',
'views/fuel_index_views.xml',
'views/home_views.xml',
- 'views/driver_tracker_template.xml',
],
'installable': True,
'application': True,
diff --git a/addons/mymach_fleet_intelligence/controllers/main.py b/addons/mymach_fleet_intelligence/controllers/main.py
index 8f8dd90..6c90ad8 100644
--- a/addons/mymach_fleet_intelligence/controllers/main.py
+++ b/addons/mymach_fleet_intelligence/controllers/main.py
@@ -390,15 +390,51 @@ class MymachFleetController(http.Controller):
'vehicles_json': map_data
})
- @http.route('/mymach/driver/tracker', type='http', auth='user')
- def driver_tracker(self, **kwargs):
+ @http.route('/mymach/api/tracker', type='http', auth='public', methods=['GET', 'POST'], csrf=False)
+ def api_tracker_webhook(self, **kwargs):
"""
- Sürücülerin mobil cihazlarından konum paylaşabilmeleri için web arayüzü.
+ Otonom GPS Takip Webhook'u (OwnTracks / Traccar / OsmAnd Formatları)
+ Bu endpoint arka plan takip uygulamasından gelen verileri (GET veya POST) karşılar.
"""
- vehicles = request.env['fleet.vehicle'].sudo().search([])
- return request.render('mymach_fleet_intelligence.driver_tracker_template', {
- 'vehicles': vehicles,
- })
+ try:
+ data = {}
+ if request.httprequest.method == 'POST':
+ try:
+ data = json.loads(request.httprequest.data.decode('utf-8'))
+ except:
+ data = request.httprequest.form.to_dict()
+ else:
+ data = request.httprequest.args.to_dict()
+
+ # Traccar / OsmAnd formatları query params (id, lat, lon) olarak gönderir.
+ # OwnTracks JSON içinde (tid, lat, lon) olarak gönderir.
+
+ device_id = data.get('id') or data.get('device') or data.get('tid') or kwargs.get('id')
+ lat = data.get('lat') or kwargs.get('lat')
+ lon = data.get('lon') or data.get('lng') or kwargs.get('lon')
+ speed = data.get('speed') or data.get('vel') or kwargs.get('speed') or 0.0
+
+ if not device_id or not lat or not lon:
+ return request.make_response(json.dumps({'error': 'Missing device_id or coordinates'}), headers=[('Content-Type', 'application/json')], status=400)
+
+ # Cihaz ID'si ile eşleşen aracı bul (Sıfır Güven - Sadece kayıtlı cihazlar)
+ vehicle = request.env['fleet.vehicle'].sudo().search([('tracker_device_id', '=', device_id)], limit=1)
+
+ if not vehicle:
+ return request.make_response(json.dumps({'error': 'Device not registered to any vehicle'}), headers=[('Content-Type', 'application/json')], status=404)
+
+ from odoo import fields
+ # Araç Konumunu Güncelle
+ vehicle.sudo().write({
+ 'latitude': float(lat),
+ 'longitude': float(lon),
+ 'gps_speed': float(speed),
+ 'last_gps_update': fields.Datetime.now()
+ })
+
+ return request.make_response(json.dumps({'status': 'success', 'vehicle': vehicle.license_plate}), headers=[('Content-Type', 'application/json')])
+ except Exception as e:
+ return request.make_response(json.dumps({'error': str(e)}), headers=[('Content-Type', 'application/json')], status=500)
@http.route('/mymach/fix_db', type='http', auth='none')
def fix_db(self, db='mymach-odoodev2-2026', **kwargs):
diff --git a/addons/mymach_fleet_intelligence/models/fleet_vehicle.py b/addons/mymach_fleet_intelligence/models/fleet_vehicle.py
index ba0dcd4..9526f5d 100644
--- a/addons/mymach_fleet_intelligence/models/fleet_vehicle.py
+++ b/addons/mymach_fleet_intelligence/models/fleet_vehicle.py
@@ -51,6 +51,9 @@ class FleetVehicle(models.Model):
index_currency_id = fields.Many2one('res.currency', string="Amortisman Endeks Dövizi",
default=lambda self: self.env.ref('base.TRY').id if self.env.ref('base.TRY', raise_if_not_found=False) else False)
+ # === 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).")
+
# 3 Para Birimli Amortisman Maliyet Alanları ve Ortalama Değer
depreciation_cost_try = fields.Float(string="Amortisman Maliyeti (Ana Döviz)", default=0.0)
depreciation_cost_usd = fields.Float(string="Amortisman Maliyeti (Döviz 1)", default=0.0)
diff --git a/addons/mymach_fleet_intelligence/views/dashboard_template.xml b/addons/mymach_fleet_intelligence/views/dashboard_template.xml
index 3853840..6018ea3 100644
--- a/addons/mymach_fleet_intelligence/views/dashboard_template.xml
+++ b/addons/mymach_fleet_intelligence/views/dashboard_template.xml
@@ -216,14 +216,7 @@
-
-
-
-