[ADD] website_crm_phone_validation: add phone validation in contact form

This way if phone validation is activated users will have to enter correct
phone numbers. This will greatly help having correct data in customer
tables and improve efficiency of CRM-based flow.
This commit is contained in:
Fabien Pinckaers
2017-05-05 12:27:07 +02:00
committed by Thibault Delavallée
parent 2c61be1609
commit 4388505cc9
4 changed files with 79 additions and 0 deletions
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import controllers
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': 'Contact Form Number Validation',
'summary': 'Validate and format contact form numbers',
'sequence': '9999',
'category': 'Hidden',
'description': """
Contact Number Validation on Website
====================================
Validate contact (phone,mobile,fax) numbers and normalize them on leads and contacts:
- use the national format for your company country
- use the international format for all others
""",
'data': [],
'depends': [
'crm_phone_validation',
'website_crm',
'website_form',
],
'auto_install': True,
}
@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import website_form
@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.website_form.controllers.main import WebsiteForm
from odoo.http import request, route
import json
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', 'fax']
@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 not model_record or not hasattr(request.env[model_name], 'phone_format'):
return super(WebsiteForm, self).website_form(model_name, **kwargs)
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 = self._get_country()
invalid_fields = {}
for phone_field in phone_fields:
if not record.get(phone_field):
continue
number = record[phone_field]
try:
request.env[model_name].phone_format(number, country)
except Exception as error:
invalid_fields[phone_field] = error.args[0]
if invalid_fields:
return json.dumps({'error_fields': invalid_fields})
return super(WebsiteForm, self).website_form(model_name, **kwargs)