diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index da65153ad7c..36003f72f7e 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -438,9 +438,12 @@ class Http(models.AbstractModel): @api.model def get_frontend_session_info(self): session_info = super(Http, self).get_frontend_session_info() + geoip_country_code = request.session.get('geoip', {}).get('country_code') + geoip_phone_code = request.env['res.country']._phone_code_for(geoip_country_code) if geoip_country_code else None session_info.update({ 'is_website_user': request.env.user.id == request.website.user_id.id, - 'geoip_country_code': request.session.get('geoip', {}).get('country_code'), + 'geoip_country_code': geoip_country_code, + 'geoip_phone_code': geoip_phone_code, }) if request.env.user.has_group('website.group_website_publisher'): session_info.update({ diff --git a/addons/website/static/src/snippets/s_website_form/000.js b/addons/website/static/src/snippets/s_website_form/000.js index a2276bea3ec..5212cd38a17 100644 --- a/addons/website/static/src/snippets/s_website_form/000.js +++ b/addons/website/static/src/snippets/s_website_form/000.js @@ -68,7 +68,6 @@ odoo.define('website.s_website_form', function (require) { args: [session.user_id, this._getUserPreFillFields()], }))[0] || {}; } - return res; }, start: function () { @@ -140,7 +139,13 @@ odoo.define('website.s_website_form', function (require) { $field.data('website_form_original_default_value', $field.val()); }); } - + if (session.geoip_phone_code) { + this.el.querySelectorAll('input[type="tel"]').forEach(telField => { + if (!telField.value) { + telField.value = '+' + session.geoip_phone_code; + } + }); + } // Check disabled states this.inputEls = this.$target[0].querySelectorAll('.s_website_form_field.s_website_form_field_hidden_if .s_website_form_input'); this._disabledStates = new Map(); diff --git a/odoo/addons/base/models/res_country.py b/odoo/addons/base/models/res_country.py index 87749082f12..85ed43fcb0e 100644 --- a/odoo/addons/base/models/res_country.py +++ b/odoo/addons/base/models/res_country.py @@ -3,7 +3,7 @@ import re import logging -from odoo import api, fields, models +from odoo import api, fields, models, tools from odoo.osv import expression from odoo.exceptions import UserError from psycopg2 import IntegrityError @@ -96,6 +96,11 @@ class Country(models.Model): return ids + @api.model + @tools.ormcache('code') + def _phone_code_for(self, code): + return self.search([('code', '=', code)]).phone_code + @api.model_create_multi def create(self, vals_list): for vals in vals_list: @@ -106,7 +111,11 @@ class Country(models.Model): def write(self, vals): if vals.get('code'): vals['code'] = vals['code'].upper() - return super(Country, self).write(vals) + res = super().write(vals) + if ('code' in vals or 'phone_code' in vals): + # Intentionally simplified by not clearing the cache in create and unlink. + self.clear_caches() + return res def get_address_fields(self): self.ensure_one()