58 lines
2.3 KiB
Python
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
|