This commit is contained in:
Benoît Vézina 2024-05-06 13:54:23 -04:00
parent 716f153c91
commit d951fed204
5 changed files with 151 additions and 0 deletions

View file

@ -0,0 +1,3 @@
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from . import models

View file

@ -0,0 +1,41 @@
{
'name': "Bemade Custom Module",
'version': "17.0.0.1.0",
'summary': "Module personnalisé pour Bemade Inc",
'sequence': 10,
'description': """
Ce module personnalisé est développé pour étendre les fonctionnalités de base d'Odoo.
Fonctionnalités:
- Ajout de champs supplémentaires pour collecter plus d'informations sur le visiteur
- Logger les informations de la requête
- Obtenez les données de GeoIP et d'autres sources
- Mise à jour du visiteur avec les nouvelles données
""",
'category': 'Tools',
'author': "Benoit",
'website': "https://bemade.org",
'license': 'AGPL-3',
'depends': [
'base',
'website', # Ajoutez d'autres dépendances si nécessaire
],
'data': [
# Liste des fichiers de données XML ou CSV, par exemple:
# 'views/templates.xml',
# 'security/ir.model.access.csv',
'views/website_visitor_views.xml',
],
'demo': [
# Fichiers de données de démo, par exemple:
# 'demo/demo_data.xml',
],
'installable': True,
'application': True,
'auto_install': False,
'external_dependencies': {
'python': [
'geoip2'
], # Ajoutez les dépendances Python ici, par exemple ['pandas']
},
}

View file

@ -0,0 +1,3 @@
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from . import website_visitor

View file

@ -0,0 +1,60 @@
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
region = fields.Char("Region")
postal_code = fields.Char("Postal Code")
latitude = fields.Float("Latitude")
longitude = fields.Float("Longitude")
ip_address = fields.Char("IP Address")
isp = fields.Char("Internet Service Provider")
connection_type = fields.Char("Connection Type")
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.httprequest.environ.get('geoip', {})
user_agent = request.httprequest.user_agent
_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 = {
'region': geoip_info.get('region'),
'postal_code': geoip_info.get('postal_code'),
'latitude': geoip_info.get('latitude'),
'longitude': geoip_info.get('longitude'),
'ip_address': request.httprequest.remote_addr,
'isp': geoip_info.get('isp'),
'connection_type': geoip_info.get('connection_type'),
'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

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Extend form view -->
<record id="website_geoip_extended.website_visitor_view_form" model="ir.ui.view">
<field name="inherit_id" ref="website.website_visitor_view_form" />
<field name="model">website.visitor</field>
<field name="arch" type="xml">
<field name="website_id" position="after">
<field name="region"/>
<field name="postal_code"/>
<field name="latitude"/>
<field name="longitude"/>
<field name="ip_address"/>
<field name="isp"/>
<field name="connection_type"/>
<field name="device_type"/>
<field name="operating_system"/>
<field name="browser"/>
</field>
</field>
</record>
<!-- Extend tree view -->
<record id="website_geoip_extended.website_visitor_view_tree" model="ir.ui.view">
<field name="inherit_id" ref="website.website_visitor_view_tree" />
<field name="model">website.visitor</field>
<field name="arch" type="xml">
<field name="create_date" position="after">
<field name="region" optional="show"/>
<field name="postal_code" optional="show"/>
<field name="latitude" optional="show"/>
<field name="longitude" optional="show"/>
<field name="ip_address" optional="show"/>
<field name="isp" optional="show"/>
<field name="connection_type" optional="show"/>
<field name="device_type" optional="show"/>
<field name="operating_system" optional="show"/>
<field name="browser" optional="show"/>
</field>
</field>
</record>
</data>
</odoo>