bemade-addons/website_geoip_extended/models/website_visitor.py
2025-05-29 21:35:47 -04:00

58 lines
2.3 KiB
Python

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