This commit fixes the insert_record override where, after calling super, the visitor is linked a lead with the id got from result, no matter if the model is lead or not. This commit adds the check to apply the link between visitor and lead only if the current model is crm.lead. Task ID: 2179631 PR #43731 closes odoo/odoo#43814 X-original-commit: 37d4fa4385c6c98bff6b5adc7b6aa0ee325c49eb Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
72 lines
3.5 KiB
Python
72 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.addons.website_form.controllers.main import WebsiteForm
|
|
|
|
|
|
class WebsiteForm(WebsiteForm):
|
|
|
|
def _get_country(self):
|
|
country_code = request.session.geoip and request.session.geoip.get('country_code') or False
|
|
if country_code:
|
|
return request.env['res.country'].sudo().search([('code', '=', country_code)], limit=1)
|
|
return request.env['res.country']
|
|
|
|
def _get_phone_fields_to_validate(self):
|
|
return ['phone', 'mobile']
|
|
|
|
# Check and insert values from the form on the model <model> + validation phone fields
|
|
@http.route('/website_form/<string:model_name>', type='http', auth="public", methods=['POST'], website=True)
|
|
def website_form(self, model_name, **kwargs):
|
|
model_record = request.env['ir.model'].sudo().search([('model', '=', model_name), ('website_form_access', '=', True)])
|
|
if model_record and hasattr(request.env[model_name], 'phone_format'):
|
|
try:
|
|
data = self.extract_data(model_record, request.params)
|
|
except:
|
|
# no specific management, super will do it
|
|
pass
|
|
else:
|
|
record = data.get('record', {})
|
|
phone_fields = self._get_phone_fields_to_validate()
|
|
country = request.env['res.country'].browse(record.get('country_id'))
|
|
contact_country = country.exists() and country or self._get_country()
|
|
for phone_field in phone_fields:
|
|
if not record.get(phone_field):
|
|
continue
|
|
number = record[phone_field]
|
|
fmt_number = request.env[model_name].phone_format(number, contact_country)
|
|
request.params.update({phone_field: fmt_number})
|
|
|
|
if model_name == 'crm.lead' and not request.params.get('state_id'):
|
|
geoip_country_code = request.session.get('geoip', {}).get('country_code')
|
|
geoip_state_code = request.session.get('geoip', {}).get('region')
|
|
if geoip_country_code and geoip_state_code:
|
|
State = request.env['res.country.state']
|
|
request.params['state_id'] = State.search([('code', '=', geoip_state_code), ('country_id.code', '=', geoip_country_code)]).id
|
|
|
|
return super(WebsiteForm, self).website_form(model_name, **kwargs)
|
|
|
|
def insert_record(self, request, model, values, custom, meta=None):
|
|
is_lead_model = model.model == 'crm.lead'
|
|
if is_lead_model:
|
|
if 'company_id' not in values:
|
|
values['company_id'] = request.website.company_id.id
|
|
lang = request.context.get('lang', False)
|
|
lang_id = request.env["res.lang"].sudo().search([('code', '=', lang)], limit=1).id
|
|
values['lang_id'] = lang_id
|
|
|
|
result = super(WebsiteForm, self).insert_record(request, model, values, custom, meta=meta)
|
|
|
|
if is_lead_model:
|
|
visitor_sudo = request.env['website.visitor']._get_visitor_from_request()
|
|
if visitor_sudo and result:
|
|
lead_sudo = request.env['crm.lead'].browse(result).sudo()
|
|
if lead_sudo.exists():
|
|
vals = {'lead_ids': [(4, result)]}
|
|
if not visitor_sudo.lead_ids and not visitor_sudo.partner_id:
|
|
vals['name'] = lead_sudo.contact_name
|
|
visitor_sudo.write(vals)
|
|
return result
|