from odoo import models, fields from odoo.http import request import logging _logger = logging.getLogger(__name__) class WebsiteVisitor(models.Model): _inherit = 'website.visitor' # Ajout de champs supplémentaires pour collecter plus d'informations sur le visiteur city = fields.Char("City") postal_code = fields.Char("Postal Code") latitude = fields.Float("Latitude") longitude = fields.Float("Longitude") ip_address = fields.Char("IP Address") device_type = fields.Char("Device Type") operating_system = fields.Char("Operating System") browser = fields.Char("Browser") def _upsert_visitor(self, access_token, force_track_values=None): # Logger les informations de la requête _logger.info('Request Remote Address: %s', request.httprequest.remote_addr) _logger.info('User Agent: %s', request.httprequest.user_agent.string) # Obtenez les données de GeoIP et d'autres sources geoip_info = request.geoip user_agent = request.httprequest.user_agent _logger.debug('geoip_info: %s', geoip_info) _logger.info('User Agent Details: Platform: %s, Browser: %s, Version: %s', user_agent.platform, user_agent.browser, user_agent.version) # _logger.info('User Agent Details: OS: %s, Browser: %s, Device: %s', user_agent.os, user_agent.browser, user_agent.platform) # Appel de la méthode parente via super() visitor_id, upsert_type = super()._upsert_visitor(access_token, force_track_values) # Récupération du visiteur basé sur l'ID retourné visitor = self.browse(visitor_id) # Mise à jour du visiteur avec les nouvelles données update_values = { 'city': geoip_info.city.name, 'postal_code': geoip_info.postal.code, 'latitude': geoip_info.location.latitude, 'longitude': geoip_info.location.longitude, 'ip_address': request.httprequest.remote_addr, 'device_type': user_agent.platform, 'operating_system': user_agent.platform, # Modifié pour utiliser platform 'browser': user_agent.browser, } _logger.info('Updating Visitor with: %s', update_values) visitor.sudo().write(update_values) return visitor_id, upsert_type