You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
348 lines
14 KiB
348 lines
14 KiB
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo.addons.website_form.controllers import main as parent_controller
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.exceptions import ValidationError
|
|
from psycopg2 import IntegrityError
|
|
import base64
|
|
import json
|
|
|
|
class VerifyController(http.Controller):
|
|
@http.route('/verify_email',
|
|
type='http',
|
|
auth="public",
|
|
methods=['GET'],
|
|
website=True)
|
|
def verify_email(self, **kwargs):
|
|
print(kwargs)
|
|
|
|
if kwargs:
|
|
|
|
contact_url = '%s/contact_by/%s' % (
|
|
request.env['ir.config_parameter'].
|
|
sudo().get_param('web.base.url'),
|
|
kwargs.get("data"))
|
|
|
|
link_data = base64.b64decode(kwargs.get("data")).decode("utf-8")\
|
|
.split("####")
|
|
email = link_data[0]
|
|
contact_name = link_data[1]
|
|
email_name = link_data[2]
|
|
phone_name = link_data[3]
|
|
letter_name = link_data[4]
|
|
personal_data = link_data[5]
|
|
request_gdpdr = link_data[6]
|
|
crm_id = link_data[7]
|
|
link_date = link_data[8]
|
|
link_date = link_date.split(" ")[0].replace("-", "")
|
|
import datetime
|
|
today = datetime.date.today()
|
|
link = datetime.datetime.strptime(link_date, "%Y%m%d").date()
|
|
diff = today - link
|
|
if diff.days > 5 or diff.days < 0:
|
|
return "<center style='color:red'>Not valid!<br/>"\
|
|
"The link you entered is either not valid or expired."\
|
|
"<br/>Please request a new link.</center>"
|
|
partner = request.env['res.partner'].sudo().search([
|
|
('email', '=', email),
|
|
('name', '=', contact_name)
|
|
])
|
|
if not partner:
|
|
partner = request.env['res.partner'].sudo().create({'name':contact_name,'email':email})
|
|
if partner:
|
|
for part in partner:
|
|
part.is_verified = True
|
|
part.last_updated = part.write_date
|
|
if email_name == "True":
|
|
part.email_contact = True
|
|
else:
|
|
part.email_contact = False
|
|
if phone_name == "True":
|
|
part.phone_contact = True
|
|
else:
|
|
part.phone_contact = False
|
|
if letter_name == "True":
|
|
part.letter_contact = True
|
|
else:
|
|
part.letter_contact = False
|
|
request.env.ref(
|
|
'website_contact_extend.confirmation_email_template'
|
|
).sudo().send_mail(part.id)
|
|
|
|
page_render_html = "<center style='color:green'>"\
|
|
"Thank You! Your email address has been verified!"\
|
|
"</center>"
|
|
|
|
# print(request_gdpdr)
|
|
if request_gdpdr == "True":
|
|
# print("Hit")
|
|
page_render_html = page_render_html + "<br/>"\
|
|
"<div style='text-align: center'>Click <a href='" + contact_url + "'>here</a> to choose how you want to be contacted</div>"
|
|
|
|
if personal_data == "True":
|
|
|
|
request.env.ref(
|
|
'website_contact_extend.email_template_information_request'
|
|
).sudo().send_mail(int(crm_id))
|
|
|
|
request.env.ref(
|
|
'website_contact_extend.requested_info_email_template'
|
|
).sudo().send_mail(int(crm_id))
|
|
|
|
return page_render_html
|
|
|
|
else:
|
|
return "<center style='color:red'>Not valid!<br/>"\
|
|
"The link you entered is either not valid or expired."\
|
|
"<br/>Please request a new link.</center>"
|
|
|
|
|
|
class MyFilter(parent_controller.WebsiteForm):
|
|
@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)
|
|
])
|
|
request.session['review_form'] = ""
|
|
request.session['form_data'] = ""
|
|
request.session['form_data_dict'] = ""
|
|
# request.clear_caches()
|
|
|
|
if not model_record:
|
|
return json.dumps(False)
|
|
# need_send_email = False
|
|
try:
|
|
data = self.extract_data(model_record, request.params)
|
|
print(data)
|
|
# contact_type = False
|
|
phone_contact = False
|
|
letter_contact = False
|
|
email_contact = False
|
|
send_mail = False
|
|
request_gdpdr = False
|
|
|
|
index = 0
|
|
for field_name, field_value in request.params.items():
|
|
# if field_name == "contact_type":
|
|
# contact_type = field_value
|
|
if field_name == "send_mail" and field_value == "send_mail":
|
|
send_mail = True
|
|
if field_name == "phone_contact" \
|
|
and field_value == "phone_contact":
|
|
phone_contact = True
|
|
if field_name == "letter_contact" \
|
|
and field_value == "letter_contact":
|
|
letter_contact = True
|
|
if field_name == "email_contact" \
|
|
and field_value == "email_contact":
|
|
email_contact = True
|
|
if field_name == "send_mail" \
|
|
and field_value == "send_mail":
|
|
send_mail = True
|
|
index += 1
|
|
# contact_name = data.get("record").get("contact_name")
|
|
# email_from = data.get("record").get("email_from")
|
|
|
|
# If we encounter an issue while extracting data
|
|
except ValidationError as e:
|
|
# I couldn't find a cleaner way to pass data to an exception
|
|
return json.dumps({'error_fields': e.args[0]})
|
|
|
|
res_partner_data = data['record']
|
|
|
|
try:
|
|
contact_name = data.get("record").get("contact_name")
|
|
email = data.get("record").get("email_from")
|
|
company = data.get("record").get("partner_name")
|
|
res_part_rec = request.env['res.partner'].sudo().search([
|
|
('email', '=', email),
|
|
('company_name', '=', company)])
|
|
# ('name', '=', contact_name)])
|
|
|
|
# ('company_name', '=', company)
|
|
res_part_email = request.env['res.partner'].sudo().search([
|
|
('email', '=', email)])
|
|
|
|
if len(res_part_rec) > 0 or len(res_part_rec) == 0 and len(res_part_email) > 0:
|
|
request.session['review_form'] = "/contact-us-form-review"
|
|
print('Display review')
|
|
|
|
for chkbx_val_out in data['custom'].split('\n'):
|
|
if chkbx_val_out != '':
|
|
for chkbx_val_in in chkbx_val_out.split(':'):
|
|
print(chkbx_val_in)
|
|
if chkbx_val_in.strip() == "request_gdpdr":
|
|
request_gdpdr = True
|
|
break
|
|
|
|
id_record = res_part_email[0].id
|
|
|
|
rec_form = data.get('record')
|
|
print(rec_form)
|
|
# if 'phone' not in data.get('record'):
|
|
# rec_form['phone'] = ""
|
|
lst_form_rec = []
|
|
lst_form_rec.append(rec_form['email_from'])
|
|
lst_form_rec.append(rec_form['name'])
|
|
lst_form_rec.append(rec_form['partner_name'])
|
|
lst_form_rec.append(rec_form['medium_id'])
|
|
lst_form_rec.append(rec_form['contact_name'])
|
|
lst_form_rec.append(rec_form['team_id'])
|
|
lst_form_rec.append(rec_form['description'])
|
|
lst_form_rec.append(rec_form['user_id'])
|
|
lst_form_rec.append(request_gdpdr)
|
|
lst_form_rec.append(send_mail)
|
|
|
|
rec_form['send_mail'] = send_mail
|
|
rec_form['request_gdpdr'] = request_gdpdr
|
|
if 'phone' in rec_form:
|
|
lst_form_rec.append(rec_form['phone'])
|
|
else:
|
|
lst_form_rec.append('')
|
|
|
|
request.session['form_data'] = lst_form_rec
|
|
request.session['form_data_dict'] = rec_form
|
|
print(request.session['form_data'])
|
|
|
|
# Some fields have additional SQL constraints
|
|
# that we can't check generically
|
|
# Ex: crm.lead.probability which is a float between 0 and 1
|
|
# TODO: How to get the name of the erroneous field ?
|
|
else:
|
|
# code for adding new customer
|
|
print('Hello')
|
|
request.session['review_form'] = "/contactus-thank-you"
|
|
|
|
res_cat = request.env['res.partner.category'].search([('name', '=', 'New')])
|
|
print(res_cat)
|
|
cat_id = 0
|
|
|
|
if len(res_cat) == 0:
|
|
print('Hit')
|
|
id_part_res_cat = self.insert_record(
|
|
request,
|
|
request.env['ir.model'].search([('model', '=', 'res.partner.category')]),
|
|
{'name': 'New', 'create_uid': request.env.uid},
|
|
'',
|
|
''
|
|
)
|
|
cat_id = id_part_res_cat
|
|
print(id_part_res_cat)
|
|
else:
|
|
cat_id = res_cat[0].id
|
|
|
|
|
|
res_partner_dict = {}
|
|
|
|
# if 'phone' not in res_partner_data:
|
|
# res_partner_data['phone'] = ""
|
|
|
|
res_partner_dict['name'] = res_partner_data['contact_name']
|
|
res_partner_dict['display_name'] = res_partner_data['contact_name']
|
|
res_partner_dict['email'] = res_partner_data['email_from']
|
|
if 'phone' in res_partner_data:
|
|
res_partner_dict['phone'] = res_partner_data['phone']
|
|
res_partner_dict['company_name'] = res_partner_data['partner_name']
|
|
res_partner_dict['category_id'] = [[6, False, [cat_id]]]
|
|
|
|
|
|
res_partner_company_dict = res_partner_dict.copy()
|
|
res_partner_company_dict.pop('email')
|
|
res_partner_company_dict.pop('company_name')
|
|
if 'phone' in res_partner_company_dict:
|
|
res_partner_company_dict.pop('phone')
|
|
|
|
res_partner_company_dict['name'] = res_partner_data['partner_name']
|
|
res_partner_company_dict['display_name'] = res_partner_data['partner_name']
|
|
res_partner_company_dict['customer'] = False
|
|
res_partner_company_dict['is_company'] = True
|
|
res_partner_company_dict['company_type'] = 'company'
|
|
|
|
id_record_res_company = self.insert_record(
|
|
request,
|
|
request.env['ir.model'].search([('model', '=', 'res.partner')]),
|
|
res_partner_company_dict,
|
|
'',
|
|
data.get('meta')
|
|
)
|
|
|
|
res_partner_dict['parent_id'] = id_record_res_company
|
|
|
|
id_record_res = self.insert_record(
|
|
request,
|
|
request.env['ir.model'].search([('model', '=', 'res.partner')]),
|
|
res_partner_dict,
|
|
'',
|
|
data.get('meta')
|
|
)
|
|
|
|
id_record = self.insert_record(
|
|
request,
|
|
model_record,
|
|
data['record'],
|
|
data['custom'],
|
|
data.get('meta')
|
|
)
|
|
if id_record:
|
|
self.insert_attachment(
|
|
model_record,
|
|
id_record,
|
|
data['attachments']
|
|
)
|
|
|
|
for chkbx_val_out in data['custom'].split('\n'):
|
|
if chkbx_val_out != '':
|
|
for chkbx_val_in in chkbx_val_out.split(':'):
|
|
print(chkbx_val_in)
|
|
if chkbx_val_in.strip() == "request_gdpdr":
|
|
request_gdpdr = True
|
|
break
|
|
|
|
print("RGPDR" + str(request_gdpdr))
|
|
# if request_gdpdr == True:
|
|
|
|
if request_gdpdr == True or send_mail == True:
|
|
if id_record and model_name == "crm.lead":
|
|
crm_lead_obj = request.env['crm.lead'].sudo().search([
|
|
('id', '=', id_record)]
|
|
)
|
|
email_data = crm_lead_obj.email_from + "####" + \
|
|
crm_lead_obj.contact_name + "####" + \
|
|
str(email_contact) + "####" + \
|
|
str(phone_contact) + "####" + \
|
|
str(letter_contact) + "####" + \
|
|
str(send_mail) + "####" + \
|
|
str(request_gdpdr) + "####" + \
|
|
str(id_record) + "####" + \
|
|
str(crm_lead_obj.create_date)
|
|
|
|
print(email_data)
|
|
ency_email = base64.b64encode(email_data.encode()).decode(
|
|
"utf-8"
|
|
)
|
|
action_url = '%s/verify_email/?data=%s' % (
|
|
request.env['ir.config_parameter'].
|
|
sudo().get_param('web.base.url'),
|
|
ency_email,
|
|
)
|
|
if crm_lead_obj:
|
|
crm_lead_obj.email_link = action_url
|
|
request.env.ref(
|
|
'website_contact_extend.verification_email_template'
|
|
).sudo().send_mail(id_record)
|
|
|
|
except IntegrityError:
|
|
return json.dumps(False)
|
|
|
|
print(request.session['review_form'])
|
|
request.session['form_builder_model_model'] = model_record.model
|
|
request.session['form_builder_model'] = model_record.name
|
|
request.session['form_builder_id'] = id_record
|
|
|
|
return json.dumps({'id': id_record})
|