geoip
This commit is contained in:
parent
716f153c91
commit
d951fed204
5 changed files with 151 additions and 0 deletions
3
website_geoip_extended/__init__.py
Normal file
3
website_geoip_extended/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import models
|
||||
41
website_geoip_extended/__manifest__.py
Normal file
41
website_geoip_extended/__manifest__.py
Normal 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']
|
||||
},
|
||||
}
|
||||
3
website_geoip_extended/models/__init__.py
Normal file
3
website_geoip_extended/models/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import website_visitor
|
||||
60
website_geoip_extended/models/website_visitor.py
Normal file
60
website_geoip_extended/models/website_visitor.py
Normal 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
|
||||
44
website_geoip_extended/views/website_visitor_views.xml
Normal file
44
website_geoip_extended/views/website_visitor_views.xml
Normal 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>
|
||||
Loading…
Reference in a new issue