From 04f0782696f256045349193cf1dabd49368eb199 Mon Sep 17 00:00:00 2001 From: Christopher Lorenz Date: Tue, 17 Sep 2019 11:29:15 +0200 Subject: [PATCH] Final Commit for website_contract_extend new file: website_contact_extend/README.rst new file: website_contact_extend/__init__.py new file: website_contact_extend/__manifest__.py new file: website_contact_extend/controllers/__init__.py new file: website_contact_extend/controllers/contactby.py new file: website_contact_extend/controllers/myfilter.py new file: website_contact_extend/data/email_templates.xml new file: website_contact_extend/i18n/de.po new file: website_contact_extend/i18n/en_US.po new file: website_contact_extend/models/__init__.py new file: website_contact_extend/models/res_partner.py new file: website_contact_extend/readme/CONFIGURE.rst new file: website_contact_extend/readme/DESCRIPTION.rst new file: website_contact_extend/readme/USAGE.rst new file: website_contact_extend/static/description/icon.png new file: website_contact_extend/static/description/index.html new file: website_contact_extend/static/src/js/contactus.js new file: website_contact_extend/views/contact_report.xml new file: website_contact_extend/views/disp_msg_template.xml new file: website_contact_extend/views/email_template.xml new file: website_contact_extend/views/means_of_contact.xml new file: website_contact_extend/views/res_partner.xml new file: website_contact_extend/views/website_contact.xml --- website_contact_extend/README.rst | 74 ++++ website_contact_extend/__init__.py | 4 + website_contact_extend/__manifest__.py | 40 ++ .../controllers/__init__.py | 4 + .../controllers/contactby.py | 312 +++++++++++++ .../controllers/myfilter.py | 346 +++++++++++++++ .../data/email_templates.xml | 74 ++++ website_contact_extend/i18n/de.po | 300 +++++++++++++ website_contact_extend/i18n/en_US.po | 412 ++++++++++++++++++ website_contact_extend/models/__init__.py | 3 + website_contact_extend/models/res_partner.py | 38 ++ website_contact_extend/readme/CONFIGURE.rst | 1 + website_contact_extend/readme/DESCRIPTION.rst | 8 + website_contact_extend/readme/USAGE.rst | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 172 ++++++++ .../static/src/js/contactus.js | 42 ++ .../views/contact_report.xml | 164 +++++++ .../views/disp_msg_template.xml | 17 + .../views/email_template.xml | 66 +++ .../views/means_of_contact.xml | 105 +++++ website_contact_extend/views/res_partner.xml | 22 + .../views/website_contact.xml | 146 +++++++ 23 files changed, 2358 insertions(+) create mode 100644 website_contact_extend/README.rst create mode 100644 website_contact_extend/__init__.py create mode 100644 website_contact_extend/__manifest__.py create mode 100644 website_contact_extend/controllers/__init__.py create mode 100644 website_contact_extend/controllers/contactby.py create mode 100644 website_contact_extend/controllers/myfilter.py create mode 100644 website_contact_extend/data/email_templates.xml create mode 100644 website_contact_extend/i18n/de.po create mode 100644 website_contact_extend/i18n/en_US.po create mode 100644 website_contact_extend/models/__init__.py create mode 100644 website_contact_extend/models/res_partner.py create mode 100644 website_contact_extend/readme/CONFIGURE.rst create mode 100644 website_contact_extend/readme/DESCRIPTION.rst create mode 100644 website_contact_extend/readme/USAGE.rst create mode 100644 website_contact_extend/static/description/icon.png create mode 100644 website_contact_extend/static/description/index.html create mode 100644 website_contact_extend/static/src/js/contactus.js create mode 100644 website_contact_extend/views/contact_report.xml create mode 100644 website_contact_extend/views/disp_msg_template.xml create mode 100644 website_contact_extend/views/email_template.xml create mode 100644 website_contact_extend/views/means_of_contact.xml create mode 100644 website_contact_extend/views/res_partner.xml create mode 100644 website_contact_extend/views/website_contact.xml diff --git a/website_contact_extend/README.rst b/website_contact_extend/README.rst new file mode 100644 index 0000000..5586ba9 --- /dev/null +++ b/website_contact_extend/README.rst @@ -0,0 +1,74 @@ +====================== +Website Contact Extend +====================== + + +Extended Website Contact View to give Customer options on how to be +contacted in the future. + +For email verification a verification link will be sent to the email address +entered in the contact view. + +* contact mode fields will be added to the website contact view. +* Information requests can be submitted from the contact view + +**Table of contents** + +.. contents:: + :local: + + +Usage +===== +Customer can verify his email address with a verification link. +The verification link is automatically sent to the email address +entered in the website contact view. + +Following that the mode of future contact can be chosen and a GDPR +information request can be submitted. + +A preliminary Report is also printable in the contacts view. + + +Known issues / Roadmap +====================== + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* IT IS AG + +Contributors +~~~~~~~~~~~~ + +* Dipak Suthar +* Sven Hartmann + + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_contact_extend/__init__.py b/website_contact_extend/__init__.py new file mode 100644 index 0000000..2fb9107 --- /dev/null +++ b/website_contact_extend/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import controllers +from . import models diff --git a/website_contact_extend/__manifest__.py b/website_contact_extend/__manifest__.py new file mode 100644 index 0000000..8ddc4c2 --- /dev/null +++ b/website_contact_extend/__manifest__.py @@ -0,0 +1,40 @@ +################################################################### +# +# IT IS AG, software solutions: http://www.itis.de +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +# +################################################################### + +{ + 'name': "Website Contact Form Extend", + + 'summary': "Extended Website Contact View", + + 'author': "IT IS AG, Odoo Community Association (OCA)", + 'website': "https://github.com/OCA/data-protection", + + # Categories can be used to filter modules in modules listing + # Check https://github.com/odoo/odoo/blob/master/openerp/ + # addons/base/module/module_data.xml + # for the full list + 'version': '12.0.1.0.0', + 'license': 'AGPL-3', + 'category': 'Data Protection', + 'depends': ['base', + 'contacts', + 'website_crm', + 'mail', + 'contacts' + ], + + 'data': [ + 'views/website_contact.xml', + 'views/res_partner.xml', + 'views/contact_report.xml', + 'data/email_templates.xml', + 'views/means_of_contact.xml', + 'views/disp_msg_template.xml', + 'views/email_template.xml' + # 'security/ir.model.access.csv', + ], +} diff --git a/website_contact_extend/controllers/__init__.py b/website_contact_extend/controllers/__init__.py new file mode 100644 index 0000000..02ba887 --- /dev/null +++ b/website_contact_extend/controllers/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import myfilter +from . import contactby diff --git a/website_contact_extend/controllers/contactby.py b/website_contact_extend/controllers/contactby.py new file mode 100644 index 0000000..c229aa3 --- /dev/null +++ b/website_contact_extend/controllers/contactby.py @@ -0,0 +1,312 @@ +# 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 +import base64 +import json + +link_data = {} + + +class ContactByController(http.Controller): + + @http.route('/check_user_exists/', type='json', auth="public", + methods=['POST'], website=True, csrf=False) + def check_user_exists(self, email_from, company_name, **kwargs): + res_part_rec = request.env['res.partner'].sudo().search([ + ('email', '=', email_from), + ('company_name', '=', company_name)]) + + res_part_email = request.env['res.partner'].sudo().search([ + ('email', '=', email_from)]) + + if len(res_part_rec) > 0 or len(res_part_rec) == 0 \ + and len(res_part_email) > 0: + # if partner: + return True + return False + + @http.route('/contact-us-form-review/', + type='http', + auth="public", + methods=['GET'], + website=True) + def contact_us_form_review(self, **kwargs): + # print(kwargs.get("data")) + # link_data =base64.b64decode(kwargs.get("data")).decode("utf-8") \ + # print('FD') + # print(request.session['form_data']) + return http.request.render( + 'website_contact_extend.review_form', + {'form_data': request.session['form_data'], + 'form_data_dict': request.session['form_data_dict']}) + + @http.route('/contact_by/', + type='http', + auth="public", + methods=['GET'], + website=True) + def contact_by(self, data, **kwargs): + global link_data + # print(kwargs.get("data")) + # link_data =base64.b64decode(kwargs.get("data")).decode("utf-8") \ + link_data = data + return http.request.render('website_contact_extend.contactby_form') + # return "
You are at the right \ + # place
" + + @http.route('/contact_by_send/', + type='http', + auth="public", + methods=['POST'], + website=True) + def contact_by_send(self, model_name, **kwargs): + global link_data + # form_contact_name = "" + + model_record = request.env['ir.model'].sudo().search([ + ('model', '=', model_name), + ('website_form_access', '=', True) + ]) + + means_of_cont_dict = request.params + + if 'letter_contact' in means_of_cont_dict: + letter_name = "True" + else: + letter_name = "False" + + if 'email_contact' in means_of_cont_dict: + email_name = "True" + else: + email_name = "False" + + if 'phone_contact' in means_of_cont_dict: + phone_name = "True" + else: + phone_name = "False" + + if not model_record: + return json.dumps(False) + + # print(link_data) + link_data_split = base64.b64decode( + link_data).decode("utf-8").split("####") + # print(link_data_split) + + email = link_data_split[0] + contact_name = link_data_split[1] + + 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.session['form_builder_model_model'] = model_record.model + request.session['form_builder_model'] = model_record.name + request.session['form_builder_id'] = partner[0].id + + return json.dumps({'id': partner[0].id}) + + # return http.request.render('website_contact_extend.\ + # disp_msg_template', {'message_success': \ + # 'Means of contact changed!'}) + # return "

Means of contact changed!

" + # else: + # return http.request.render('website_contact_extend.\ + # disp_msg_template', {'message_failure': \ + # 'Could not change your means of contact. \ + # Please request a new link'}) + # return "

Could not change your means\ + # of contact. Please request a new link

" + + +class FormReview(parent_controller.WebsiteForm): + + @http.route('/form_review_send/', + type='http', + auth="public", + methods=['POST'], + website=True) + def form_review_send(self, model_name, **kwargs): + # model_name = 'crm.lead' + + res_partner_data = request.session['form_data_dict'] + model_record = request.env['ir.model'].sudo().search([ + ('model', '=', model_name), + ('website_form_access', '=', True) + ]) + + res_part_rec = request.env['res.partner'].sudo().search([ + ('email', '=', res_partner_data['email_from']), + ('company_name', '=', res_partner_data['partner_name'])]) + + res_part_email = request.env['res.partner'].sudo().search([ + ('email', '=', res_partner_data['email_from'])], limit=1) + + # if len(res_part_rec) == 0 and res_part_email: + # print('Company change detected!') + + id_record = self.insert_record( + request, + model_record, + res_partner_data, + '', + '' + ) + + if len(res_part_email) > 0 and len(res_part_rec) == 0 and \ + res_part_email[0].is_verified is True: + + res_cat = request.env['res.partner.category'].search( + [('name', '=', 'New')]) + cat_id = 0 + + if len(res_cat) == 0: + 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 + else: + cat_id = res_cat[0].id + + res_partner_dict = {} + + 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'] + res_partner_dict['company_name'] = res_partner_data['partner_name'] + res_partner_dict['category_id'] = [[6, False, [cat_id]]] + # res_partner_dict['parent_id'] = res_part_email[0].id + if 'phone' in res_partner_data: + res_partner_dict['phone'] = res_partner_data['phone'] + + update_parent_partner = request.env['res.partner'].sudo().search([ + ('id', '=', res_part_email[0].id)]) + + if update_parent_partner and len(update_parent_partner) > 0: + update_parent_partner[0].category_id = False + + update_parent_partner_comp = \ + request.env['res.partner'].sudo().search([ + ('id', '=', res_part_email[0].parent_id.id)]) + + if update_parent_partner_comp and \ + len(update_parent_partner_comp) > 0: + update_parent_partner_comp[0].category_id = False + + res_partner_company_dict = res_partner_dict.copy() + res_partner_company_dict.pop('email') + res_partner_company_dict.pop('company_name') + # res_partner_company_dict.pop('parent_id') + 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' + + # 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, + '', + '' + ) + + res_partner_company_dict['child_ids'] = [ + [6, 'virtual_1798', [id_record_res]]] + # id_record_res_company = self.insert_record( + self.insert_record( + request, + request.env['ir.model'].search( + [('model', '=', 'res.partner')]), + res_partner_company_dict, + '', + '' + ) + + if update_parent_partner and len(update_parent_partner) > 0: + update_parent_partner[0].child_ids = [ + [6, 'virtual_1798', [id_record_res]]] + + id_record = self.insert_record( + request, + model_record, + res_partner_data, + '', + '' + ) + if id_record: + self.insert_attachment( + model_record, + id_record, + '' + ) + 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('') + "####" +\ + str('') + "####" +\ + str('')+"####" + \ + str(res_partner_data['send_mail']) + "####" + \ + str(res_partner_data['request_gdpdr']) + "####" + \ + str(id_record) + "####" + \ + str(crm_lead_obj.create_date) + 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) + + request.env.ref('website_contact_extend.\ + email_template_onchange_data').sudo( + ).send_mail(id_record) + + 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}) diff --git a/website_contact_extend/controllers/myfilter.py b/website_contact_extend/controllers/myfilter.py new file mode 100644 index 0000000..7281285 --- /dev/null +++ b/website_contact_extend/controllers/myfilter.py @@ -0,0 +1,346 @@ +# 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): + 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 "
Not valid!
"\ + "The link you entered is either not valid or expired."\ + "
Please request a new link.
" + 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 = "
"\ + "Thank You! Your email address has been verified!"\ + "
" + + # print(request_gdpdr) + if request_gdpdr == "True": + # print("Hit") + page_render_html = page_render_html + "
"\ + "
"\ + "Click here to choose how you"\ + " want to be contacted
" + + 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 "
Not valid!
"\ + "The link you entered is either not valid or expired."\ + "
Please request a new link.
" + + +class MyFilter(parent_controller.WebsiteForm): + @http.route('/website_form/', + 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) + # 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" + + for chkbx_val_out in data['custom'].split('\n'): + if chkbx_val_out != '': + for chkbx_val_in in chkbx_val_out.split(':'): + if chkbx_val_in.strip() == "request_gdpdr": + request_gdpdr = True + break + + id_record = res_part_email[0].id + + rec_form = data.get('record') + # 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 + + # 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 + request.session['review_form'] = "/contactus-thank-you" + + res_cat = request.env['res.partner.category'].search( + [('name', '=', 'New')]) + cat_id = 0 + + if len(res_cat) == 0: + 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 + 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 + + 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(':'): + if chkbx_val_in.strip() == "request_gdpdr": + request_gdpdr = True + break + + # if request_gdpdr == True: + + if request_gdpdr is True or send_mail is 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) + + 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) + + 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}) diff --git a/website_contact_extend/data/email_templates.xml b/website_contact_extend/data/email_templates.xml new file mode 100644 index 0000000..8c0910d --- /dev/null +++ b/website_contact_extend/data/email_templates.xml @@ -0,0 +1,74 @@ + + + + + + Email verification link + mail verification link + ${(not object.partner_id and object.email_from)|safe} + + + + % if object.partner_id + Dear ${object.partner_id.name},
+ % endif + % if not object.partner_id + Dear ${object.email_from},
+ % endif + + Please click on below link to verify your email address ${object.email_link}.
+ + Thank you. +

+ ]]> +
+
+ + + Email confirmation + Verified Email + ${user.email|safe} + + + + Dear ${user.partner_id.name},
+ + This email address ${object.email} has been verified by user.
+ + Thank you. +

+ ]]> +
+
+ + + Requested Information + Requested Information + ${object.email_from|safe} + + + + Dear ${object.contact_name},

+ + Thank you very much for your contact. Your request: + + + + + + + + + We will come back to you shortly. + +
Subject${object.name}
Question${object.description[:-50]}
+

+ Thank you. +

+ ]]> +
+
+
diff --git a/website_contact_extend/i18n/de.po b/website_contact_extend/i18n/de.po new file mode 100644 index 0000000..83f91e0 --- /dev/null +++ b/website_contact_extend/i18n/de.po @@ -0,0 +1,300 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_contact_extend +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-07-02 12:18+0000\n" +"PO-Revision-Date: 2018-07-02 12:18+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_contact_extend +#: model:mail.template,body_html:website_contact_extend.verification_email_template +msgid "\n" +"

\n" +" % if object.partner_id\n" +" Dear ${object.partner_id.name},
\n" +" % endif\n" +" % if not object.partner_id\n" +" Dear ${object.email_from},
\n" +" % endif\n" +"\n" +" Please click on below link to verify your email address ${object.email_link}.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " +msgstr "\n" +"

\n" +" % if object.partner_id\n" +" Dear ${object.partner_id.name},
\n" +" % endif\n" +" % if not object.partner_id\n" +" Dear ${object.email_from},
\n" +" % endif\n" +"\n" +" Please click on below link to verify your email address ${object.email_link}.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " + +#. module: website_contact_extend +#: model:mail.template,body_html:website_contact_extend.confirmation_email_template +msgid "\n" +"

\n" +" Dear ${user.partner_id.name},
\n" +"\n" +" This email address ${object.email} has been verified by user.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " +msgstr "\n" +"

\n" +" Dear ${user.partner_id.name},
\n" +"\n" +" This email address ${object.email} has been verified by user.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "(2) Die personenbezogene Daten werden nicht an ein Drittland oder an eine internationale Organisation übermittelt" +msgstr "(2) Die personenbezogene Daten werden nicht an ein Drittland oder an eine internationale Organisation übermittelt" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "(3) Der Verantwortliche stellt eine Kopie der personenbezogenen Daten, die Gegenstand der Verarbeitung sind, zur Verfügung:" +msgstr "(3) Der Verantwortliche stellt eine Kopie der personenbezogenen Daten, die Gegenstand der Verarbeitung sind, zur Verfügung:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und Freiheiten anderer
Personen nicht beeinträchtigen." +msgstr "(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und Freiheiten anderer
Personen nicht beeinträchtigen." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "bis zum __. __. ____ □ Bis zu ____ Jahre □ Gesetzl. Aufbewahrungfrist" +msgstr "bis zum __. __. ____ □ Bis zu ____ Jahre □ Gesetzl. Aufbewahrungfrist" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "oder □ Widerspruchsrecht gegen diese Verarbeitung besteht;" +msgstr "oder □ Widerspruchsrecht gegen diese Verarbeitung besteht;" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert _______________ " +msgstr "Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert _______________ " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Grund □ Kontakt ____ mal nicht erreicht □ Systemwechsel " +msgstr "Grund □ Kontakt ____ mal nicht erreicht □ Systemwechsel " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Adresse:" +msgstr "Adresse:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunft für:" +msgstr "Auskunft für:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunft nach Artikel 15 DS-GVO" +msgstr "Auskunft nach Artikel 15 DS-GVO" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunftsgeber:" +msgstr "Auskunftsgeber:" + +#. module: website_contact_extend +#: model:ir.model,name:website_contact_extend.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: website_contact_extend +#: model:ir.actions.report,name:website_contact_extend.report_contact +msgid "Contact Report" +msgstr "Kontakt Report" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_contact_type +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_contact_type +msgid "Contact Type" +msgstr "Art des Kontakts" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by E-Mail" +msgstr "Kontakt per E-Mail" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by Letter" +msgstr "Kontakt per Post" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by Phone" +msgstr "Kontakt per Telefon" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Die betroffene Person hat das Recht, von dem Verantwortlichen eine Bestätigung darüber zu verlangen, ob sie betreffende personenbezogene Daten verarbeitet werden; ist dies der Fall, so hat sie ein Recht auf Auskunft über diese personenbezogenen Daten und auf folgende Informationen:" +msgstr "Die betroffene Person hat das Recht, von dem Verantwortlichen eine Bestätigung darüber zu verlangen, ob sie betreffende personenbezogene Daten verarbeitet werden; ist dies der Fall, so hat sie ein Recht auf Auskunft über diese personenbezogenen Daten und auf folgende Informationen:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_email_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_email_contact +msgid "Email Contact" +msgstr "Email Kontakt" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_crm_lead_email_link +msgid "Email verification link" +msgstr "Email verifikations Link" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Email:" +msgstr "E-Mail:" + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I do not want to be contacted." +msgstr "Ich möchte nicht kontaktiert werden." + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I only want to be contacted by Email." +msgstr "Ich möchte nur per Email kontaktiert werden." + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I only want to be contacted by Phone." +msgstr "Ich möchte nur per Telefon kontaktiert werden." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "In the future I want to be contacted by" +msgstr "In Zukunft möchte ich nur kontaktiert werden durch:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Information request concerning data about the personally" +msgstr "Persönliche Informationsauskunft:" + +#. module: website_contact_extend +#: model:ir.model,name:website_contact_extend.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Interessent / Chance" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_letter_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_letter_contact +msgid "Letter Contact" +msgstr "Brief Kontakt" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_last_updated +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_last_updated +msgid "Letzte Aktualisierung" +msgstr "Letzte Aktualisierung" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Name:" +msgstr "Name:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_phone_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_phone_contact +msgid "Phone Contact" +msgstr "Telefon Kontakt" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Phone:" +msgstr "Telefon:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_is_verified +#: model:mail.template,subject:website_contact_extend.confirmation_email_template +msgid "Verified Email" +msgstr "Verifizierte Email" + +#. module: website_contact_extend +#: model:ir.model.fields,help:website_contact_extend.field_res_partner_contact_type +#: model:ir.model.fields,help:website_contact_extend.field_res_users_contact_type +msgid "Which way user want to be contacted." +msgstr "Art der Kontaktierung" + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "You can contact me by Email or Phone." +msgstr "Ich kann per Email oder Telefon kontaktiert werden." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " +msgstr "a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" +msgstr "b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt worden sind oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen Organisationen: _______________________________
oder keine Offenlegung gegenüber Dritten beabsichtigt, Nicht bekannt" +msgstr "c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt worden sind oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen Organisationen: _______________________________
oder keine Offenlegung gegenüber Dritten beabsichtigt, Nicht bekannt" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "d) geplante Dauer, für die die personenbezogenen Daten gespeichert werden: " +msgstr "d) geplante Dauer, für die die personenbezogenen Daten gespeichert werden: " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "e) Recht auf Berichtigung oder Löschung der betreffenden personenbezogenen Daten besteht oder Einschränkung der Verarbeitung durch den Verantwortlichen " +msgstr "e) Recht auf Berichtigung oder Löschung der betreffenden personenbezogenen Daten besteht oder Einschränkung der Verarbeitung durch den Verantwortlichen " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "f) das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde besteht" +msgstr "f) das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde besteht" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" +msgstr "g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "h) eine automatisierte Entscheidungsfindung mit diesen Daten findet nicht statt. " +msgstr "h) eine automatisierte Entscheidungsfindung mit diesen Daten findet nicht statt. " + +#. module: website_contact_extend +#: model:mail.template,subject:website_contact_extend.verification_email_template +msgid "mail verification link" +msgstr "mail verification link" + diff --git a/website_contact_extend/i18n/en_US.po b/website_contact_extend/i18n/en_US.po new file mode 100644 index 0000000..d8a734e --- /dev/null +++ b/website_contact_extend/i18n/en_US.po @@ -0,0 +1,412 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_contact_extend +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-07-02 12:18+0000\n" +"PO-Revision-Date: 2018-07-02 14:26+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: en_US\n" + +#. module: website_contact_extend +#: model:mail.template,body_html:website_contact_extend.verification_email_template +msgid "" +"\n" +"

\n" +" % if object.partner_id\n" +" Dear ${object.partner_id.name},
\n" +" % endif\n" +" % if not object.partner_id\n" +" Dear ${object.email_from},
\n" +" % endif\n" +"\n" +" Please click on below link to verify your email address " +"${object.email_link}.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " +msgstr "" +"\n" +"

\n" +" % if object.partner_id\n" +" Dear ${object.partner_id.name},
\n" +" % endif\n" +" % if not object.partner_id\n" +" Dear ${object.email_from},
\n" +" % endif\n" +"\n" +" Please click on below link to verify your email address " +"${object.email_link}.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " + +#. module: website_contact_extend +#: model:mail.template,body_html:website_contact_extend.confirmation_email_template +msgid "" +"\n" +"

\n" +" Dear ${user.partner_id.name},
\n" +"\n" +" This email address ${object.email} has been " +"verified by user.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " +msgstr "" +"\n" +"

\n" +" Dear ${user.partner_id.name},
\n" +"\n" +" This email address ${object.email} has been " +"verified by user.
\n" +"\n" +" Thank you.\n" +"

\n" +" \n" +" " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"(2) Die personenbezogene Daten werden nicht an ein " +"Drittland oder an eine internationale Organisation übermittelt" +msgstr "" +"(2) The personal data will not be transmitted to " +"a third country or an international organization" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"(3) Der Verantwortliche stellt eine Kopie der personenbezogenen Daten, " +"die Gegenstand der Verarbeitung sind, zur Verfügung:" +msgstr "" +"(3) The responsible person provides a copy of the personal data that is the " +"subject of the processing:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und " +"Freiheiten anderer
Personen nicht beeinträchtigen." +msgstr "" +"(4) The right to receive a copy under paragraph 3 must not affect the rights " +"and freedoms of other persons." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"bis zum __. __. ____ □ Bis zu ____ " +"Jahre □ Gesetzl. Aufbewahrungfrist" +msgstr "" +"Until the __. __. " +"____ □ Up to " +"____ years □ Storage period by law" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"oder □ Widerspruchsrecht gegen diese " +"Verarbeitung besteht;" +msgstr "" +"or □ Right to object to this processing," + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert " +"_______________ " +msgstr "" +"If so: The data is evaluated and grouped in the " +"following way_______________ " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"Grund □ Kontakt ____ mal " +"nicht erreicht □ Systemwechsel " +msgstr "" +"Reason: □ Contact ____ not reached □ System " +"change " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Adresse:" +msgstr "Address:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunft für:" +msgstr "Information for:" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunft nach Artikel 15 DS-GVO" +msgstr "" +"Information according to Article 15 of the GDPR" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Auskunftsgeber:" +msgstr "Information giver:" + +#. module: website_contact_extend +#: model:ir.model,name:website_contact_extend.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: website_contact_extend +#: model:ir.actions.report,name:website_contact_extend.report_contact +msgid "Contact Report" +msgstr "Contact Report" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_contact_type +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_contact_type +msgid "Contact Type" +msgstr "Contact Type" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by E-Mail" +msgstr "Contact by E-Mail" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by Letter" +msgstr "Contact by Letter" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Contact by Phone" +msgstr "Contact by Phone" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"Die betroffene Person hat das Recht, von dem Verantwortlichen eine " +"Bestätigung darüber zu verlangen, ob sie betreffende personenbezogene Daten " +"verarbeitet werden; ist dies der Fall, so hat sie ein Recht auf Auskunft " +"über diese personenbezogenen Daten und auf folgende Informationen:" +msgstr "" +"The data subject has the right to ask the person responsible for " +"confirmation of the processing of the personal data concerned; if this is " +"the case, it has a right to information about such personal data and to the " +"following information:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_email_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_email_contact +msgid "Email Contact" +msgstr "Email Contact" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_crm_lead_email_link +msgid "Email verification link" +msgstr "Email verification link" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Email:" +msgstr "Email:" + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I do not want to be contacted." +msgstr "I do not want to be contacted." + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I only want to be contacted by Email." +msgstr "I only want to be contacted by Email." + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "I only want to be contacted by Phone." +msgstr "I only want to be contacted by Phone." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "In the future I want to be contacted by" +msgstr "In the future I want to be contacted by" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.contactus_form_inherited +msgid "Information request concerning data about the personally" +msgstr "Information request concerning data about personal Information" + +#. module: website_contact_extend +#: model:ir.model,name:website_contact_extend.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/Opportunity" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_letter_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_letter_contact +msgid "Letter Contact" +msgstr "Letter Contact" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_last_updated +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_last_updated +msgid "Letzte Aktualisierung" +msgstr "Last Updated on" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Name:" +msgstr "Name:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_phone_contact +#: model:ir.model.fields,field_description:website_contact_extend.field_res_users_phone_contact +msgid "Phone Contact" +msgstr "Phone Contact" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "Phone:" +msgstr "Phone:" + +#. module: website_contact_extend +#: model:ir.model.fields,field_description:website_contact_extend.field_res_partner_is_verified +#: model:mail.template,subject:website_contact_extend.confirmation_email_template +msgid "Verified Email" +msgstr "Verified Email" + +#. module: website_contact_extend +#: model:ir.model.fields,help:website_contact_extend.field_res_partner_contact_type +#: model:ir.model.fields,help:website_contact_extend.field_res_users_contact_type +msgid "Which way user want to be contacted." +msgstr "Which way user want to be contacted." + +#. module: website_contact_extend +#: selection:res.partner,contact_type:0 +msgid "You can contact me by Email or Phone." +msgstr "You can contact me by Email or Phone." + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " +msgstr "" +"a) The processing purposes: □ " +"Contact, Transactions, Other " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" +msgstr "" +"b) The categories of personal data being processed:
Customer data, Supplier data, Prospect data, Personal data" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die " +"personenbezogenen Daten offengelegt worden sind oder noch offengelegt " +"werden, insbesondere bei Empfängern in Drittländern oder bei internationalen " +"Organisationen: _______________________________
oder " +" keine Offenlegung gegenüber Dritten " +"beabsichtigt, Nicht " +"bekannt" +msgstr "" +"c) The recipients or categories of recipients to whom the personal data have " +"been disclosed or are yet to be disclosed, in particular to recipients in " +"third countries or to international organizations: _______________________________
or No disclosure to third " +"parties, Not known" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"d) geplante Dauer, für die die personenbezogenen Daten gespeichert " +"werden: " +msgstr "" +"d) Planned duration for which the personal data is stored: " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"e) Recht auf Berichtigung oder Löschung " +"der betreffenden personenbezogenen Daten besteht " +"oder Einschränkung der " +"Verarbeitung durch den Verantwortlichen " +msgstr "" +"e) Right to rectification or deletion of " +"personal data concerned, or Restriction of " +"processing by the controller , or " + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"f) das Bestehen eines Beschwerderechts " +"bei einer Aufsichtsbehörde besteht" +msgstr "" +"f) The existence of a right to complain to " +"a supervisory authority" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" +msgstr "" +"g) The origin of the data is from Own research, Credit reference agency" + +#. module: website_contact_extend +#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document +msgid "" +"h) eine automatisierte Entscheidungsfindung " +"mit diesen Daten findet nicht statt. " +msgstr "" +"h) An automated decision-making with this data " +"does not take place." + +#. module: website_contact_extend +#: model:mail.template,subject:website_contact_extend.verification_email_template +msgid "mail verification link" +msgstr "mail verification link" diff --git a/website_contact_extend/models/__init__.py b/website_contact_extend/models/__init__.py new file mode 100644 index 0000000..ccebc72 --- /dev/null +++ b/website_contact_extend/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import res_partner diff --git a/website_contact_extend/models/res_partner.py b/website_contact_extend/models/res_partner.py new file mode 100644 index 0000000..5f88bea --- /dev/null +++ b/website_contact_extend/models/res_partner.py @@ -0,0 +1,38 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models, api + + +class ResContacts(models.Model): + _inherit = "res.partner" + + contact_type = fields.Selection([ + ('no_contact', 'I do not want to be contacted.'), + ('email_contact', 'I only want to be contacted by Email.'), + ('phone_contact', 'I only want to be contacted by Phone.'), + ('email_phone_contact', 'You can contact me by Email or Phone.') + ], + string='Contact Type', + default='email_contact', + help="Which way user want to be contacted.") + letter_contact = fields.Boolean("Letter Contact") + phone_contact = fields.Boolean("Phone Contact") + email_contact = fields.Boolean("Email Contact") + is_verified = fields.Boolean("Verified Email") + last_updated = fields.Datetime("Letzte Aktualisierung") + request_gdpdr = fields.Boolean("Request GDPDR") + + # s + @api.multi + def write(self, vals): + return super(ResContacts, self).write(vals) + + @api.model + def create(self, vals): + return super(ResContacts, self).create(vals) + + +class CrmLead(models.Model): + _inherit = "crm.lead" + + email_link = fields.Char("Email verification link") diff --git a/website_contact_extend/readme/CONFIGURE.rst b/website_contact_extend/readme/CONFIGURE.rst new file mode 100644 index 0000000..9d46c1a --- /dev/null +++ b/website_contact_extend/readme/CONFIGURE.rst @@ -0,0 +1 @@ +The contact mode fields will be added to the Contact Site automatically. diff --git a/website_contact_extend/readme/DESCRIPTION.rst b/website_contact_extend/readme/DESCRIPTION.rst new file mode 100644 index 0000000..1fafdbb --- /dev/null +++ b/website_contact_extend/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +Extended Website Contact View to give Customer options on how to be + contacted in the future. + +For email verification a verification link will be sent to the email address +entered in the contact view. + +* contact mode fields will be added to the website contact view. +* Information requests can be submitted from the contact view diff --git a/website_contact_extend/readme/USAGE.rst b/website_contact_extend/readme/USAGE.rst new file mode 100644 index 0000000..6351bd1 --- /dev/null +++ b/website_contact_extend/readme/USAGE.rst @@ -0,0 +1,8 @@ +Customer can verify his email address with a verification link. +The verification link is automatically sent to the email address +entered in the website contact view. + +Following that the mode of future contact can be chosen and a GDPR + information request can be submitted. + +A preliminary Report is also printable in the contacts view. diff --git a/website_contact_extend/static/description/icon.png b/website_contact_extend/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/website_contact_extend/static/description/index.html b/website_contact_extend/static/description/index.html new file mode 100644 index 0000000..b4f0163 --- /dev/null +++ b/website_contact_extend/static/description/index.html @@ -0,0 +1,172 @@ + + + + + + + Schulung + + + + + + + + + + + + + + + +

+ +

Features

+ +

 

+
    +
  • Enhancement + of contact form for selection of preferred contact method (e-mail, phone, letter) 

    +
  • +
  • Update + of existing customer information 

  • +
  • Request + for personal information by customer  

  • +
  • Report + creation “Auskunft nach Artikel 15 DS-GVO” 

  • +
+

 

+ +

 

+ +

Enhanced Contact + Form

+ +

 

+ +

 

+
+
+
+
+
 
+

After submission of this form it will search master record based on email and name + and update the record accordingly. +

+

On the contact form you can also print the report “Information Request article 15 GDPR” +

+
+
+
+
+ +
 
+

Itisproductsupport@itis.de

+ +

http://www.itis.de

+ +

 

+ \ No newline at end of file diff --git a/website_contact_extend/static/src/js/contactus.js b/website_contact_extend/static/src/js/contactus.js new file mode 100644 index 0000000..e62322e --- /dev/null +++ b/website_contact_extend/static/src/js/contactus.js @@ -0,0 +1,42 @@ +odoo.define('website_contact_extend.success_page', function (require) { + "use strict"; + + var ajax = require("web.ajax"); + + $(document).on('blur', '.input_email_from', function (ev) { + console.log(ev); + var email_from = $('.input_email_from').val(); + var company_name = $('.input_company').val(); + + return ajax.jsonRpc('/check_user_exists', 'call', { + email_from: email_from, + company_name: company_name, + }).then(function (res) { + var contactus_page = "/contactus-thank-you"; + if (res) { + contactus_page = "/contact-us-form-review"; + } + var formaction_webform = 'form[action="/website_form/"]'; + $(formaction_webform).attr('data-success_page', contactus_page); + }); + }); + + $(document).on('blur', '.input_company', function (ev) { + console.log(ev); + var email_from = $('.input_email_from').val(); + var company_name = $('.input_company').val(); + + return ajax.jsonRpc('/check_user_exists', 'call', { + email_from: email_from, + company_name: company_name, + }).then(function (res) { + var contactus_page = "/contactus-thank-you"; + if (res) { + contactus_page = "/contact-us-form-review"; + } + var formaction_webform = 'form[action="/website_form/"]'; + $(formaction_webform).attr('data-success_page', contactus_page); + }); + }); + +}); diff --git a/website_contact_extend/views/contact_report.xml b/website_contact_extend/views/contact_report.xml new file mode 100644 index 0000000..5d0cc4a --- /dev/null +++ b/website_contact_extend/views/contact_report.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + diff --git a/website_contact_extend/views/disp_msg_template.xml b/website_contact_extend/views/disp_msg_template.xml new file mode 100644 index 0000000..61a21a9 --- /dev/null +++ b/website_contact_extend/views/disp_msg_template.xml @@ -0,0 +1,17 @@ + + + + diff --git a/website_contact_extend/views/email_template.xml b/website_contact_extend/views/email_template.xml new file mode 100644 index 0000000..4fa5898 --- /dev/null +++ b/website_contact_extend/views/email_template.xml @@ -0,0 +1,66 @@ + + + + + Data Change Email Template + Change has been made + + + + Dear Sir/Madam,

+ User ${(object.contact_name)} with the ID ${(object.id)} the has made a change in the record.

+ +

Please find the user and his/her details below.

+ + + + + + + + + + + + + + + +
Name${object.contact_name}
Company${object.partner_name}
Email${object.email_from}
Phone${object.phone}
+

+ Thank you. + ]]> +
+
+ + + Information Request Template + Information request on stored data for user ${object.email_from} from contact form + + + + Dear colleagues,

+

following customer has requested an information about personal data stored in odoo:

+ + + + + + + + + + + + + +
Name${object.contact_name}
Company${object.partner_name}
Notes:${object.name}${object.description[:-50]}
+

+ Thank you. + ]]> +
+
+
+
diff --git a/website_contact_extend/views/means_of_contact.xml b/website_contact_extend/views/means_of_contact.xml new file mode 100644 index 0000000..a76d043 --- /dev/null +++ b/website_contact_extend/views/means_of_contact.xml @@ -0,0 +1,105 @@ + + + + + + diff --git a/website_contact_extend/views/res_partner.xml b/website_contact_extend/views/res_partner.xml new file mode 100644 index 0000000..a9640ab --- /dev/null +++ b/website_contact_extend/views/res_partner.xml @@ -0,0 +1,22 @@ + + + + + + res.partner.form + res.partner + + + + + + + + + + + + + + + diff --git a/website_contact_extend/views/website_contact.xml b/website_contact_extend/views/website_contact.xml new file mode 100644 index 0000000..15254cc --- /dev/null +++ b/website_contact_extend/views/website_contact.xml @@ -0,0 +1,146 @@ + + + + +