Browse Source

Checkin ITIS Odoo 12 Modules

pull/34/head
Christopher Lorenz 5 years ago
parent
commit
6f3a7723be
  1. 72
      contact_search_form/README.rst
  2. 3
      contact_search_form/__init__.py
  3. 33
      contact_search_form/__manifest__.py
  4. 68
      contact_search_form/i18n/de.po
  5. 68
      contact_search_form/i18n/en_US.po
  6. 3
      contact_search_form/models/__init__.py
  7. 84
      contact_search_form/models/contact_search.py
  8. 3
      contact_search_form/readme/CONFIGURE.rst
  9. 2
      contact_search_form/readme/DESCRIPTION.rst
  10. 9
      contact_search_form/readme/USAGE.rst
  11. 8
      contact_search_form/security/gdpr_security.xml
  12. 3
      contact_search_form/security/ir.model.access.csv
  13. BIN
      contact_search_form/static/description/icon.png
  14. 177
      contact_search_form/static/description/index.html
  15. 79
      contact_search_form/views/contact_search.xml
  16. 74
      website_contact_extend/README.rst
  17. 4
      website_contact_extend/__init__.py
  18. 40
      website_contact_extend/__manifest__.py
  19. 4
      website_contact_extend/controllers/__init__.py
  20. 310
      website_contact_extend/controllers/contactby.py
  21. 348
      website_contact_extend/controllers/myfilter.py
  22. 74
      website_contact_extend/data/email_templates.xml
  23. 300
      website_contact_extend/i18n/de.po
  24. 412
      website_contact_extend/i18n/en_US.po
  25. 3
      website_contact_extend/models/__init__.py
  26. 39
      website_contact_extend/models/res_partner.py
  27. 1
      website_contact_extend/readme/CONFIGURE.rst
  28. 8
      website_contact_extend/readme/DESCRIPTION.rst
  29. 8
      website_contact_extend/readme/USAGE.rst
  30. 4
      website_contact_extend/security/ir.model.access.csv
  31. BIN
      website_contact_extend/static/description/icon.png
  32. 172
      website_contact_extend/static/description/index.html
  33. 41
      website_contact_extend/static/src/js/contactus.js
  34. 164
      website_contact_extend/views/contact_report.xml
  35. 17
      website_contact_extend/views/disp_msg_template.xml
  36. 66
      website_contact_extend/views/email_template.xml
  37. 105
      website_contact_extend/views/means_of_contact.xml
  38. 22
      website_contact_extend/views/res_partner.xml
  39. 146
      website_contact_extend/views/website_contact.xml

72
contact_search_form/README.rst

@ -0,0 +1,72 @@
===================
Contact Search Form
===================
Multiple models can be searched for specified string by DPO.
View containing a search function for Data Protection Officers (DPO) to look
up Customer Data. All available Odoo models can be included in the search
query looking for a specified string.
**Table of contents**
.. contents::
:local:
Usage
=====
The new menu Contact Search is located in the Contacts App
When accessing the Contact Search form a new query can be defined by
clicking on the Create button.
To perform a search the search string is required and the Odoo models that
should be searched have to be selected in the dropdown 'Search in model'.
The search results are stored and can be accessed at a later time from the
tree view of 'Contact Search'.
Known issues / Roadmap
======================
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/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 <dipaks@itis.de>
* Sven Hartmann <svenh@itis.de>
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.

3
contact_search_form/__init__.py

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

33
contact_search_form/__manifest__.py

@ -0,0 +1,33 @@
#####################################################################
#
# IT IS AG, software solutions: http://www.itis.de
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
#
#####################################################################
{
'name': 'Contact Search Form',
'summary': "Multiple models can be searched for specified string by DPO",
'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',
'license': 'AGPL-3',
'category': 'Contacts',
'depends': ['base',
'contacts',
],
'data': [
'security/gdpr_security.xml',
'security/ir.model.access.csv',
'views/contact_search.xml',
],
}

68
contact_search_form/i18n/de.po

@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contact_search_form
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-02 12:16+0000\n"
"PO-Revision-Date: 2018-07-02 14:16+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"
"Language: de_DE\n"
"X-Generator: Poedit 1.5.4\n"
#. module: contact_search_form
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info
msgid "Contact Search"
msgstr "Kontakt Suche"
#. module: contact_search_form
#: model:ir.actions.act_window,name:contact_search_form.action_dpo_view_itis
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Customer Info"
msgstr "Kundeninformation"
#. module: contact_search_form
#: model:res.groups,name:contact_search_form.group_dpo
msgid "Data Protection Officer"
msgstr "Data Protection Officer"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "SEARCH"
msgstr "Suche"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.dpo_view_tree
msgid "Search Contact"
msgstr "Kontakt Suchen"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "Search Results"
msgstr "Suchergebnisse"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Search Terms"
msgstr "Suchbegriffe"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "VIEW RECORD"
msgstr "VIEW RECORD"
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_dpo_view
msgid "dpo.view"
msgstr "dpo.view"
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_search_line
msgid "search.line"
msgstr "search.line"

68
contact_search_form/i18n/en_US.po

@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * contact_search_form
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-02 12:15+0000\n"
"PO-Revision-Date: 2018-07-02 12:15+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: contact_search_form
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info
msgid "Contact Search"
msgstr "Contact Search"
#. module: contact_search_form
#: model:ir.actions.act_window,name:contact_search_form.action_dpo_view_itis
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Customer Info"
msgstr "Customer Info"
#. module: contact_search_form
#: model:res.groups,name:contact_search_form.group_dpo
msgid "Data Protection Officer"
msgstr "Data Protection Officer"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "SEARCH"
msgstr "SEARCH"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.dpo_view_tree
msgid "Search Contact"
msgstr "Search Contact"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "Search Results"
msgstr "Search Results"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Search Terms"
msgstr "Search Terms"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "VIEW RECORD"
msgstr "VIEW RECORD"
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_dpo_view
msgid "dpo.view"
msgstr "dpo.view"
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_search_line
msgid "search.line"
msgstr "search.line"

3
contact_search_form/models/__init__.py

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import contact_search

84
contact_search_form/models/contact_search.py

@ -0,0 +1,84 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models, _
class SearchLine(models.Model):
_name = "search.line"
name = fields.Char(string="Model Name")
field_list = fields.Char(string="Fields Name")
model_id = fields.Many2one('ir.model', string="Found in Model")
record_id = fields.Integer(string="Record ID")
search_id = fields.Many2one("dpo.view", string="Search Terms")
record_name = fields.Char(string="Record Name",
compute="_compute_record_name")
@api.multi
def open_record(self):
return {
'name': _('Found record'),
'view_type': 'form',
'view_mode': 'form',
'res_model': self.model_id.model,
'type': 'ir.actions.act_window',
'res_id': self.record_id,
'target': 'new'
}
def _compute_record_name(self):
for record in self:
record_object = self.env[record.model_id.model].browse([
record.record_id
])
record.record_name = record_object.name_get()[0][1]
class DpoView(models.Model):
_name = "dpo.view"
name = fields.Char(string="Search Term")
model_ids = fields.Many2many('ir.model',
'dpo_view_ir_model_rel',
string='Search in Model')
search_lines = fields.One2many('search.line',
'search_id',
string='Search Result')
@api.multi
def search_string(self):
search_line_ids = self.env['search.line'].search([
('search_id', '=', self.id)
])
search_line_ids.unlink()
final_list = []
for model_id in self.model_ids:
field_list = []
found_match = {}
for field_id in model_id.field_id:
if field_id.ttype in ['char', 'html', 'text'] \
and field_id.store:
field_list.append(field_id.name)
for field in field_list:
records = self.env[model_id.model].search([
(field, 'ilike', self.name),
(field, '!=', '')
])
for rec in records:
temp_list = found_match.get(rec.id, False)
if temp_list:
temp_list.append(field)
found_match[rec.id] = temp_list
else:
found_match[rec.id] = [field]
for key, value in found_match.items():
founded_json = {}
founded_json["field_list"] = str(list(set(value)))
founded_json["name"] = str(model_id.name)
founded_json["model_id"] = model_id.id
founded_json["search_id"] = self.id
founded_json["record_id"] = key
final_list.append(founded_json)
if final_list:
for vals in final_list:
self.env['search.line'].create(vals)

3
contact_search_form/readme/CONFIGURE.rst

@ -0,0 +1,3 @@
To access contact search view in contacts view, the user has to activate the 'Data Protection Officer' checkbox
in User -> Technical Settings.
After that a new menu item 'Contact Search' will appear in the Contacts App.

2
contact_search_form/readme/DESCRIPTION.rst

@ -0,0 +1,2 @@
View containing a search function for Data Protection Officers (DPO) to look up Customer Data.
All available Odoo models can be included in the search query looking for a specified string.

9
contact_search_form/readme/USAGE.rst

@ -0,0 +1,9 @@
The new menu Contact Search is located in the Contacts App
When accessing the Contact Search form a new query can be defined by
clicking on the Create button.
To perform a search the search string is required and the Odoo models that
should be searched have to be selected in the dropdown 'Search in model'.
The search results are stored and can be accessed at a later time from the
tree view of 'Contact Search'.

8
contact_search_form/security/gdpr_security.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="group_dpo" model="res.groups">
<field name="name">Data Protection Officer</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
</odoo>

3
contact_search_form/security/ir.model.access.csv

@ -0,0 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
access_dpo_view,access_dpo_view,model_dpo_view,group_dpo,1,1,1,1
access_search_line,access_search_line,model_search_line,group_dpo,1,1,1,1

BIN
contact_search_form/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

177
contact_search_form/static/description/index.html
File diff suppressed because it is too large
View File

79
contact_search_form/views/contact_search.xml

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_dpo_form_view_itis" model="ir.ui.view">
<field name="name">view.dpo.form.view.itis</field>
<field name="model">dpo.view</field>
<field name="arch" type="xml">
<form string="Customer Info">
<div class="oe_title">
<h1>
<field name="name" default_focus="1" placeholder="Search Terms" required="1"/>
</h1>
</div>
<group>
<field name="model_ids" widget="many2many_tags"/>
</group>
<br/>
<br/>
<center>
<button name="search_string" type="object" string="SEARCH" class="btn-primary"/>
</center>
<br/>
<field name="search_lines"/>
</form>
</field>
</record>
<record id="dpo_view_tree" model="ir.ui.view">
<field name="name">DPO Tree view</field>
<field name="model">dpo.view</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<tree string="Search Contact">
<field name='name'/>
<field name="model_ids"/>
<field name="search_lines"/>
</tree>
</field>
</record>
<record id="action_dpo_view_itis" model="ir.actions.act_window">
<field name="name">Customer Info</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">dpo.view</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="dpo_view_tree"/>
<field name="view_type">form</field>
</record>
<menuitem id="menu_customer_info_base"
name="Contact Search"
parent="contacts.menu_contacts"
sequence="20"
groups="contact_search_form.group_dpo"/>
<menuitem id="menu_customer_info"
name="Contact Search"
action="action_dpo_view_itis"
parent="menu_customer_info_base"
sequence="21"
groups="contact_search_form.group_dpo"/>
<record id="search_line_tree_view_itis" model="ir.ui.view">
<field name="name">search.line.tree.view.itis</field>
<field name="model">search.line</field>
<field name="arch" type="xml">
<tree string="Search Results" create="false" delete="false" edit="false">
<field name="model_id"/>
<field name="record_id"/>
<field name="record_name"/>
<field name="field_list"/>
<button name="open_record" type="object" string="VIEW RECORD" class="btn-primary"/>
</tree>
</field>
</record>
</odoo>

74
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 <https://github.com/OCA/web/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 <dipaks@itis.de>
* Sven Hartmann <svenh@itis.de>
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.

4
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

40
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',
'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',
],
}

4
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

310
website_contact_extend/controllers/contactby.py

@ -0,0 +1,310 @@
# 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
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/<string:data>',
type='http',
auth="public",
methods=['GET'],
website=True)
def contact_by(self, data, **kwargs):
global link_data
print(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 "<center style='color:red'>You are at the right place</center>"
@http.route('/contact_by_send/<string:model_name>',
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)
])
print(model_record)
print(request.params)
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]
print(email, contact_name, email_name, phone_name, letter_name)
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 "<p style='color: green'>Means of contact changed!</p>"
# 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 "<p style='color: red'>Could not change your means of contact. Please request a new link</p>"
class FormReview(parent_controller.WebsiteForm):
@http.route('/form_review_send/<string:model_name>',
type='http',
auth="public",
methods=['POST'],
website=True)
def form_review_send(self, model_name, **kwargs):
# model_name = 'crm.lead'
print('Send')
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!')
print(res_part_email)
print('Verified?')
print(res_part_email[0].is_verified)
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 == True:
print('Company change detected')
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 = {}
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']
print('Here')
update_parent_partner = request.env['res.partner'].sudo().search([
('id', '=', res_part_email[0].id)])
print(update_parent_partner)
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(
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})

348
website_contact_extend/controllers/myfilter.py

@ -0,0 +1,348 @@
# 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})

74
website_contact_extend/data/email_templates.xml

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="verification_email_template" model="mail.template">
<field name="name">Email verification link</field>
<field name="subject">mail verification link</field>
<field name="email_to">${(not object.partner_id and object.email_from)|safe}</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
<p>
% if object.partner_id
Dear <strong>${object.partner_id.name}</strong>,<br/>
% endif
% if not object.partner_id
Dear <strong>${object.email_from}</strong>,<br/>
% endif
Please click on below link to verify your email address <strong>${object.email_link}</strong>.<br/>
Thank you.
</p>
]]>
</field>
</record>
<record id="confirmation_email_template" model="mail.template">
<field name="name">Email confirmation</field>
<field name="subject">Verified Email</field>
<field name="email_to">${user.email|safe}</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
<p>
Dear <strong>${user.partner_id.name}</strong>,<br/>
This email address <strong> ${object.email}</strong> has been verified by user.<br/>
Thank you.
</p>
]]>
</field>
</record>
<record id="requested_info_email_template" model="mail.template">
<field name="name">Requested Information</field>
<field name="subject">Requested Information</field>
<field name="email_to">${object.email_from|safe}</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
<p>
Dear <strong>${object.contact_name}</strong>,<br/><br/>
Thank you very much for your contact. Your request:
<table class="table">
<tbody>
<tr>
<td><strong>Subject</strong></td><td>${object.name}</td>
</tr>
<tr>
<td><strong>Question</strong></td><td>${object.description[:-50]}</td>
</tr>
<tr>We will come back to you shortly.</tr>
</tbody>
</table>
<br/><br/>
Thank you.
</p>
]]>
</field>
</record>
</odoo>

300
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"
" <p>\n"
" % if object.partner_id\n"
" Dear <strong>${object.partner_id.name}</strong>,<br/>\n"
" % endif\n"
" % if not object.partner_id\n"
" Dear <strong>${object.email_from}</strong>,<br/>\n"
" % endif\n"
"\n"
" Please click on below link to verify your email address <strong>${object.email_link}</strong>.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
msgstr "\n"
" <p>\n"
" % if object.partner_id\n"
" Dear <strong>${object.partner_id.name}</strong>,<br/>\n"
" % endif\n"
" % if not object.partner_id\n"
" Dear <strong>${object.email_from}</strong>,<br/>\n"
" % endif\n"
"\n"
" Please click on below link to verify your email address <strong>${object.email_link}</strong>.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
#. module: website_contact_extend
#: model:mail.template,body_html:website_contact_extend.confirmation_email_template
msgid "\n"
" <p>\n"
" Dear <strong>${user.partner_id.name}</strong>,<br/>\n"
"\n"
" This email address <strong> ${object.email}</strong> has been verified by user.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
msgstr "\n"
" <p>\n"
" Dear <strong>${user.partner_id.name}</strong>,<br/>\n"
"\n"
" This email address <strong> ${object.email}</strong> has been verified by user.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "(2) <span class=\"T2\">□ </span><span class=\"T7\">Die </span>personenbezogene Daten <span class=\"T7\">werden nicht </span>an ein Drittland oder an eine internationale Organisation übermittelt"
msgstr "(2) <span class=\"T2\">□ </span><span class=\"T7\">Die </span>personenbezogene Daten <span class=\"T7\">werden nicht </span>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<br/>Personen nicht beeinträchtigen."
msgstr "(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und Freiheiten anderer<br/>Personen nicht beeinträchtigen."
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "<span class=\"T2\"> □ </span><span class=\"T1\">bis zum __. __. ____</span> <span> <span class=\"T1\"> </span><span class=\"T2\">□ Bis zu ____ Jahre □ </span><span class=\"T3\">Gesetzl. Aufbewahrungfrist</span></span>"
msgstr "<span class=\"T2\"> □ </span><span class=\"T1\">bis zum __. __. ____</span> <span> <span class=\"T1\"> </span><span class=\"T2\">□ Bis zu ____ Jahre □ </span><span class=\"T3\">Gesetzl. Aufbewahrungfrist</span></span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "<span class=\"T2\">oder □ </span>Widerspruchsrecht gegen diese Verarbeitung <span class=\"T1\">besteht</span>;"
msgstr "<span class=\"T2\">oder □ </span>Widerspruchsrecht gegen diese Verarbeitung <span class=\"T1\">besteht</span>;"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "<span class=\"T2\">□ </span><span class=\"T4\">Wenn doch: Die Daten werden</span><span class=\"T7\"> nach folgender Art ausgewertet und gruppiert _______________ </span>"
msgstr "<span class=\"T2\">□ </span><span class=\"T4\">Wenn doch: Die Daten werden</span><span class=\"T7\"> nach folgender Art ausgewertet und gruppiert _______________ </span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "<span class=\"T6\">Grund</span><span> <span class=\"T2\">□ Kontakt ____ mal nicht erreicht □ Systemwechsel </span></span>"
msgstr "<span class=\"T6\">Grund</span><span> <span class=\"T2\">□ Kontakt ____ mal nicht erreicht □ Systemwechsel </span></span>"
#. 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 n<span class=\"T1\">ach Artikel 15 DS-GVO</span>"
msgstr "Auskunft n<span class=\"T1\">ach Artikel 15 DS-GVO</span>"
#. 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) <span class=\"T1\">d</span>ie Verarbeitungszwecke:<span class=\"T1\"> </span><span class=\"T2\">□ </span><span class=\"T1\">Kontaktaufnahme; </span><span class=\"T2\">□ </span><span class=\"T3\">Geschäftsvorgänge</span><span class=\"T1\">; </span><span class=\"T2\">□ </span><span class=\"T3\">S</span><span class=\"T1\">onstiges; </span>"
msgstr "a) <span class=\"T1\">d</span>ie Verarbeitungszwecke:<span class=\"T1\"> </span><span class=\"T2\">□ </span><span class=\"T1\">Kontaktaufnahme; </span><span class=\"T2\">□ </span><span class=\"T3\">Geschäftsvorgänge</span><span class=\"T1\">; </span><span class=\"T2\">□ </span><span class=\"T3\">S</span><span class=\"T1\">onstiges; </span>"
#. 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: <span class=\"T1\"> <br/></span><span class=\"T2\">□ </span><span class=\"T1\">Kundendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Lieferantendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Interessentendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Personaldaten</span>"
msgstr "b) die Kategorien personenbezogener Daten, die verarbeitet werden: <span class=\"T1\"> <br/></span><span class=\"T2\">□ </span><span class=\"T1\">Kundendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Lieferantendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Interessentendaten, </span><span class=\"T2\">□ </span><span class=\"T1\">Personaldaten</span>"
#. 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: <span class=\"T1\"> </span><span class=\"T2\">□ </span>_______________________________<br/> <span class=\"T6\">oder</span> <span class=\"T1\"> </span><span class=\"T2\">□ </span><span class=\"T3\">keine</span><span class=\"T1\"> Offenlegung gegenüber Dritten beabsichtigt, </span><span class=\"T2\">□ </span><span class=\"T1\">Nicht bekannt</span>"
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: <span class=\"T1\"> </span><span class=\"T2\">□ </span>_______________________________<br/> <span class=\"T6\">oder</span> <span class=\"T1\"> </span><span class=\"T2\">□ </span><span class=\"T3\">keine</span><span class=\"T1\"> Offenlegung gegenüber Dritten beabsichtigt, </span><span class=\"T2\">□ </span><span class=\"T1\">Nicht bekannt</span>"
#. 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: <span class=\"T1\"> </span>"
msgstr "d) geplante Dauer, für die die personenbezogenen Daten gespeichert werden: <span class=\"T1\"> </span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "e) <span> <span class=\"T2\">□ </span>Recht auf Berichtigung oder Löschung der betreffenden personenbezogenen Daten <span class=\"T1\">besteht oder </span><span class=\"T2\">□ </span>Einschränkung der Verarbeitung durch den Verantwortlichen </span>"
msgstr "e) <span> <span class=\"T2\">□ </span>Recht auf Berichtigung oder Löschung der betreffenden personenbezogenen Daten <span class=\"T1\">besteht oder </span><span class=\"T2\">□ </span>Einschränkung der Verarbeitung durch den Verantwortlichen </span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "f) <span> <span class=\"T2\">□ </span>das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde <span class=\"T5\">besteht</span></span>"
msgstr "f) <span> <span class=\"T2\">□ </span>das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde <span class=\"T5\">besteht</span></span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "g) die Herkunft der Daten <span class=\"T7\">ist von </span><span class=\"T2\">□ </span><span class=\"T4\">eigener Recherche, </span><span class=\"T2\">□ </span><span class=\"T4\">Auskunftei</span>"
msgstr "g) die Herkunft der Daten <span class=\"T7\">ist von </span><span class=\"T2\">□ </span><span class=\"T4\">eigener Recherche, </span><span class=\"T2\">□ </span><span class=\"T4\">Auskunftei</span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid "h) <span class=\"T2\">□ </span>eine automatisierte Entscheidungsfindung <span class=\"T7\">mit diesen Daten findet nicht statt. </span>"
msgstr "h) <span class=\"T2\">□ </span>eine automatisierte Entscheidungsfindung <span class=\"T7\">mit diesen Daten findet nicht statt. </span>"
#. module: website_contact_extend
#: model:mail.template,subject:website_contact_extend.verification_email_template
msgid "mail verification link"
msgstr "mail verification link"

412
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"
" <p>\n"
" % if object.partner_id\n"
" Dear <strong>${object.partner_id.name}</strong>,<br/>\n"
" % endif\n"
" % if not object.partner_id\n"
" Dear <strong>${object.email_from}</strong>,<br/>\n"
" % endif\n"
"\n"
" Please click on below link to verify your email address <strong>"
"${object.email_link}</strong>.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
msgstr ""
"\n"
" <p>\n"
" % if object.partner_id\n"
" Dear <strong>${object.partner_id.name}</strong>,<br/>\n"
" % endif\n"
" % if not object.partner_id\n"
" Dear <strong>${object.email_from}</strong>,<br/>\n"
" % endif\n"
"\n"
" Please click on below link to verify your email address <strong>"
"${object.email_link}</strong>.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
#. module: website_contact_extend
#: model:mail.template,body_html:website_contact_extend.confirmation_email_template
msgid ""
"\n"
" <p>\n"
" Dear <strong>${user.partner_id.name}</strong>,<br/>\n"
"\n"
" This email address <strong> ${object.email}</strong> has been "
"verified by user.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
msgstr ""
"\n"
" <p>\n"
" Dear <strong>${user.partner_id.name}</strong>,<br/>\n"
"\n"
" This email address <strong> ${object.email}</strong> has been "
"verified by user.<br/>\n"
"\n"
" Thank you.\n"
" </p>\n"
" \n"
" "
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"(2) <span class=\"T2\">□ </span><span class=\"T7\">Die </"
"span>personenbezogene Daten <span class=\"T7\">werden nicht </span>an ein "
"Drittland oder an eine internationale Organisation übermittelt"
msgstr ""
"(2) <span class=\"T2\">□ </span>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<br/>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 ""
"<span class=\"T2\"> □ </span><span class=\"T1\">bis zum __. __. ____</"
"span> <span> <span class=\"T1\"> </span><span class=\"T2\">□ Bis zu ____ "
"Jahre □ </span><span class=\"T3\">Gesetzl. Aufbewahrungfrist</span></"
"span>"
msgstr ""
"<span class=\"T2\"> □ </span><span class=\"T1\">Until the __. __. "
"____</span> <span> <span class=\"T1\"> </span><span class=\"T2\">□ Up to "
"____ years □ </span><span class=\"T3\">Storage period by law</span></"
"span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"<span class=\"T2\">oder □ </span>Widerspruchsrecht gegen diese "
"Verarbeitung <span class=\"T1\">besteht</span>;"
msgstr ""
"<span class=\"T2\">or □ </span>Right to object to this processing,"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"<span class=\"T2\">□ </span><span class=\"T4\">Wenn doch: Die Daten werden</"
"span><span class=\"T7\"> nach folgender Art ausgewertet und gruppiert "
"_______________ </span>"
msgstr ""
"<span class=\"T2\">□ </span>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 ""
"<span class=\"T6\">Grund</span><span> <span class=\"T2\">□ Kontakt ____ mal "
"nicht erreicht □ Systemwechsel </span></span>"
msgstr ""
"<span class=\"T6\">Reason:</span> □ Contact ____ not reached □ System "
"change </span>"
#. 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 n<span class=\"T1\">ach Artikel 15 DS-GVO</span>"
msgstr ""
"Information <span class=\"T1\">according to Article 15 of the GDPR</span>"
#. 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) <span class=\"T1\">d</span>ie Verarbeitungszwecke:<span class=\"T1\"> </"
"span><span class=\"T2\">□ </span><span class=\"T1\">Kontaktaufnahme; </"
"span><span class=\"T2\">□ </span><span class=\"T3\">Geschäftsvorgänge</"
"span><span class=\"T1\">; </span><span class=\"T2\">□ </span><span class="
"\"T3\">S</span><span class=\"T1\">onstiges; </span>"
msgstr ""
"a) The processing purposes:<span class=\"T1\"> </span><span class=\"T2\">□ "
"</span><span class=\"T1\">Contact, </span><span class=\"T2\">□ </span><span "
"class=\"T3\">Transactions</span><span class=\"T1\">, </span><span class="
"\"T2\">□ </span><span class=\"T1\">Other </span>"
#. 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: <span "
"class=\"T1\"> <br/></span><span class=\"T2\">□ </span><span class="
"\"T1\">Kundendaten, </span><span class=\"T2\">□ </span><span class="
"\"T1\">Lieferantendaten, </span><span class=\"T2\">□ </span><span class="
"\"T1\">Interessentendaten, </span><span class=\"T2\">□ </span><span class="
"\"T1\">Personaldaten</span>"
msgstr ""
"b) The categories of personal data being processed: <span class=\"T1\"> <br/"
"></span><span class=\"T2\">□ </span><span class=\"T1\">Customer data, </"
"span><span class=\"T2\">□ </span><span class=\"T1\">Supplier data, </"
"span><span class=\"T2\">□ </span><span class=\"T1\">Prospect data, </"
"span><span class=\"T2\">□ </span><span class=\"T1\">Personal data</span>"
#. 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: <span class=\"T1\"> </span><span class=\"T2\">□ </"
"span>_______________________________<br/> <span class=\"T6\">oder</span> "
"<span class=\"T1\"> </span><span class=\"T2\">□ </span><span class="
"\"T3\">keine</span><span class=\"T1\"> Offenlegung gegenüber Dritten "
"beabsichtigt, </span><span class=\"T2\">□ </span><span class=\"T1\">Nicht "
"bekannt</span>"
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: <span class=\"T1\"> </"
"span><span class=\"T2\">□ </span>_______________________________<br/> <span "
"class=\"T6\">or</span> <span class=\"T1\"> </span><span class=\"T2\">□ </"
"span><span class=\"T3\">No</span><span class=\"T1\"> disclosure to third "
"parties, </span><span class=\"T2\">□ </span><span class=\"T1\">Not known</"
"span>"
#. 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: <span class=\"T1\"> </span>"
msgstr ""
"d) Planned duration for which the personal data is stored: <span class="
"\"T1\"> </span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"e) <span> <span class=\"T2\">□ </span>Recht auf Berichtigung oder Löschung "
"der betreffenden personenbezogenen Daten <span class=\"T1\">besteht "
"oder </span><span class=\"T2\">□ </span>Einschränkung der "
"Verarbeitung durch den Verantwortlichen </span>"
msgstr ""
"e)<span> <span class=\"T2\">□ </span>Right to rectification or deletion of "
"personal data concerned, or <span class=\"T2\">□ </span>Restriction of "
"processing by the controller , or </span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"f) <span> <span class=\"T2\">□ </span>das Bestehen eines Beschwerderechts "
"bei einer Aufsichtsbehörde <span class=\"T5\">besteht</span></span>"
msgstr ""
"f)<span> <span class=\"T2\">□ </span>The existence of a right to complain to "
"a supervisory authority</span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"g) die Herkunft der Daten <span class=\"T7\">ist von </span><span class="
"\"T2\">□ </span><span class=\"T4\">eigener Recherche, </span><span class="
"\"T2\">□ </span><span class=\"T4\">Auskunftei</span>"
msgstr ""
"g) The origin of the data is from <span class=\"T2\">□ </span><span class="
"\"T4\">Own research, </span><span class=\"T2\">□ </span><span class="
"\"T4\">Credit reference agency</span>"
#. module: website_contact_extend
#: model:ir.ui.view,arch_db:website_contact_extend.report_contact_document
msgid ""
"h) <span class=\"T2\">□ </span>eine automatisierte Entscheidungsfindung "
"<span class=\"T7\">mit diesen Daten findet nicht statt. </span>"
msgstr ""
"h) <span class=\"T2\">□ </span>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"

3
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

39
website_contact_extend/models/res_partner.py

@ -0,0 +1,39 @@
# 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):
print(vals)
return super(ResContacts, self).write(vals)
@api.model
def create(self, vals):
print(vals)
return super(ResContacts, self).create(vals)
class CrmLead(models.Model):
_inherit = "crm.lead"
email_link = fields.Char("Email verification link")

1
website_contact_extend/readme/CONFIGURE.rst

@ -0,0 +1 @@
The contact mode fields will be added to the Contact Site automatically.

8
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

8
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.

4
website_contact_extend/security/ir.model.access.csv

@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_mail_template,access.mail.template.view,mail.model_mail_template,,1,0,0,0
access_crm_lead_record,access.crm.lead.record,crm.model_crm_lead,,1,0,0,0
access_mail_mail_record,access.mail.mail.record,mail.model_mail_mail,,1,1,1,0

BIN
website_contact_extend/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

172
website_contact_extend/static/description/index.html
File diff suppressed because it is too large
View File

41
website_contact_extend/static/src/js/contactus.js

@ -0,0 +1,41 @@
odoo.define('website_contact_extend.success_page', function (require) {
"use strict";
var ajax = require("web.ajax");
// function check_user_exists(){
// }
$(document).on('blur', '.input_email_from', function (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";
}
$('form[action="/website_form/"]').attr('data-success_page',contactus_page);
});
});
$(document).on('blur', '.input_company', function (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";
}
$('form[action="/website_form/"]').attr('data-success_page',contactus_page);
});
});
});

164
website_contact_extend/views/contact_report.xml

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<report
id="report_contact"
string="Contact Report"
model="res.partner"
report_type="qweb-pdf"
file="website_contact_extend.contact_report"
name="website_contact_extend.contact_report"
/>
<template id="contact_report">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="website_contact_extend.report_contact_document" t-lang="doc.lang"/>
</t>
</t>
</template>
<template id="report_contact_document">
<t t-call="web.external_layout">
<div class="page">
<div class="oe_structure"/>
<h2 class="P8">
<a id="a__Auskunft_nach_Artikel_15_DS-GVO">
<span/>
</a>
Auskunft n
<span class="T1">ach Artikel 15 DS-GVO</span>
</h2>
<p class="Text_20_body"/>
<p class="P1">Auskunft für:
<span class="T8">
<span t-field="doc.name"/>
</span>
</p>
<p class="Text_20_body">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:
</p>
<p class="P4">a) die Verarbeitungszwecke:
<span class="T1"></span>
<span class="T2"></span>
<span class="T1">Kontaktaufnahme;</span>
<span class="T2"></span>
<span class="T3">Geschäftsvorgänge;</span>
<span class="T2"></span>
<span class="T3">Sonstiges;</span>
</p>
<p class="P2">b) die Kategorien personenbezogener Daten, die verarbeitet werden:
<span class="T1">
<br/>
</span>
<span class="T2"></span>
<span class="T1">Kundendaten,</span>
<span class="T2"></span>
<span class="T1">Lieferantendaten,</span>
<span class="T2"></span>
<span class="T1">Interessentendaten,</span>
<span class="T2"></span>
<span class="T1">Personaldaten</span>
</p>
<p class="P2">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:
<span class="T2"></span>_______________________________
<br/>
<span class="T6">oder</span>
<span class="T2"></span>
<span class="T3">keine Offenlegung gegenüber Dritten beabsichtigt,</span>
<span class="T2"></span>
<span class="T1">Nicht bekannt</span>
</p>
<p class="P2">d) geplante Dauer, für die die personenbezogenen Daten gespeichert werden:
</p>
<p class="P4">
<span class="T2">□ bis zum __. __. ____</span>
<span class="T2">□ Bis zu ____ Jahre</span>
<span class="T3">□ Gesetzl. Aufbewahrungfrist</span>
</p>
<p class="P2">
<span class="T6">Grund</span>
<span class="T2">□ Kontakt ____ mal nicht erreicht □ Systemwechsel</span>
</p>
<p class="P2">e)
<span>□ Recht auf Berichtigung oder Löschung der betreffenden
personenbezogenen Daten besteht oder
</span>
<span>□ Einschränkung der Verarbeitung durch den Verantwortlichen
</span>
</p>
<p class="P2"><span>oder □ Widerspruchsrecht gegen diese Verarbeitung besteht;</span>
</p>
<p class="P3">f)
<span>□ das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde besteht
</span>
</p>
<p class="P5">g) die Herkunft der Daten
<span class="T7">ist von</span>
<span class="T2"></span>
<span class="T4">eigener Recherche,</span>
<span class="T2"></span>
<span class="T4">Auskunftei</span>
</p>
<p class="P5">h)<span class="T2"></span>eine automatisierte Entscheidungsfindung
<span class="T7">mit diesen Daten findet nicht statt.</span>
</p>
<p class="P5">
<span class="T2"></span>
<span class="T4">Wenn doch: Die Daten werden</span>
<span class="T7">nach folgender Art ausgewertet und gruppiert _______________</span>
</p>
<p class="P5">(2)
<span class="T2"></span>
<span class="T7">Die</span>personenbezogene Daten<span class="T7">werden nicht</span>an ein
Drittland oder an eine internationale Organisation übermittelt
</p>
<p class="Text_20_body">(3) Der Verantwortliche stellt eine Kopie der personenbezogenen Daten, die
Gegenstand der Verarbeitung sind, zur Verfügung:
</p>
<p class="P6">
<p t-if="doc.name">
Name:
<span t-field="doc.name"/>
</p>
<p t-if="doc.email">
Email:
<span t-field="doc.email"/>
</p>
<p t-if="doc.phone">
Phone:
<span t-field="doc.phone"/>
</p>
</p>
<p class="P6">
Adresse:
<span t-field="doc.street"/>
<span t-field="doc.zip"/>
<span t-field="doc.city"/>
<span t-field="doc.country_id.name"/>
</p>
<p class="Text_20_body">(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und
Freiheiten anderer<br/>Personen nicht beeinträchtigen.
</p>
<p class="Text_20_body"></p>
<p class="P7">Auskunftsgeber:
<span class="T8">
<span t-field="doc.user_id.name"/>,
<span t-field="doc.user_id.company_id.name"/>,
<span t-field="doc.user_id.company_id.street"/>,
<span t-field="doc.user_id.company_id.zip"/>
<span t-field="doc.user_id.company_id.city"/>
</span>
</p>
</div>
</t>
</template>
</data>
</odoo>

17
website_contact_extend/views/disp_msg_template.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="disp_msg_template">
<t t-call="website.layout">
<div class="oe_structure">
<div class="container">
<div class="page">
<div class="row">
<p id="message_success" style="color: green;"></p>
<p id="message_failure" style="color: red;"></p>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>

66
website_contact_extend/views/email_template.xml

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data noupdate="1">
<record id="email_template_onchange_data" model="mail.template">
<field name="name">Data Change Email Template</field>
<field name="subject">Change has been made</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="auto_delete" eval="True"/>
<field name="body_html">
<![CDATA[
<p>Dear Sir/Madam,<br/><br/>
User ${(object.contact_name)} with the ID ${(object.id)} the has made a change in the record.<br/><p>
<p>Please find the user and his/her details below.<br/></p>
<table class="table table-striped">
<tbody>
<tr>
<td>Name</td><td>${object.contact_name}</td>
</tr>
<tr>
<td>Company</td><td>${object.partner_name}</td>
</tr>
<tr>
<td>Email</td><td>${object.email_from}</td>
</tr>
<tr>
<td>Phone</td><td>${object.phone}</td>
</tr>
</tbody>
</table>
<br/><br/>
Thank you.
]]>
</field>
</record>
<record id="email_template_information_request" model="mail.template">
<field name="name">Information Request Template</field>
<field name="subject">Information request on stored data for user ${object.email_from} from contact form</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="auto_delete" eval="True"/>
<field name="body_html">
<![CDATA[
<p>Dear colleagues,<br/><br/>
<p>following customer has requested an information about personal data stored in odoo:<br/></p>
<table class="table">
<tbody>
<tr>
<td>Name</td><td>${object.contact_name}</td>
</tr>
<tr>
<td>Company</td><td>${object.partner_name}</td>
</tr>
<tr>
<td>Notes:</td><td><strong>${object.name}</strong></td>
<td></td><td>${object.description[:-50]}</td>
</tr>
</tbody>
</table>
<br/><br/>
Thank you.
]]>
</field>
</record>
</data>
</odoo>

105
website_contact_extend/views/means_of_contact.xml

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="contactby_form">
<t t-call="website.layout">
<div class="oe_structure">
<div class="container">
<form action="/contact_by_send/" method="post" data-model_name="crm.lead" data-success_page="/contactus-thank-you"
class="s_website_form container-fluid mt32" enctype="multipart/form-data"
data-editable-form="false">
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="contact_type">In the future I want to
be
contacted
by
</label>
<div class="col-lg-7 col-md-8">
<div class="checkbox">
<label>
<input type="checkbox" name="letter_contact" value="letter_contact"/>
Contact by Letter
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="email_contact" value="email_contact"/>
Contact by E-Mail
</label>
</div>
<div class="checkbox">
<label>
<input type="checkbox" name="phone_contact" value="phone_contact"/>
Contact by Phone
</label>
</div>
<div>
<a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Send</a>
<!--<button name="Send" class="btn btn-primary btn-lg o_website_form_send" type="submit">Send</button>-->
</div>
</div>
</div>
</form>
</div>
</div>
</t>
</template>
<template id="review_form">
<t t-call="website.layout">
<div class="oe_structure">
<div class="container">
<form action="/form_review_send/" method="post"
data-success_page="/contactus-thank-you" data-model_name="crm.lead"
class="s_website_form container-fluid mt32">
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="email_from">Email</label>
<div class="col-lg-7 col-md-8">
<input class="form-control o_website_form_input" type="text" name="email_from" t-att-value="form_data[0]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="contact_name">Your Name</label>
<div class="col-lg-7 col-md-8">
<input class="form-control o_website_form_input" type="text" name="contact_name" t-att-value="form_data[4]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="company_name">Your Company</label>
<div class="col-lg-7 col-md-8">
<input class="form-control o_website_form_input" type="text" name="company_name" t-att-value="form_data[2]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="phone">Phone</label>
<div class="col-lg-7 col-md-8">
<input class="form-control o_website_form_input" type="text" name="phone" t-att-value="form_data[10]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="name">Subject</label>
<div class="col-lg-7 col-md-8">
<input class="form-control o_website_form_input" type="text" name="name" t-att-value="form_data[1]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="description">Your Question</label>
<div class="col-lg-7 col-md-8">
<textarea class="form-control o_website_form_input" type="text" name="description" disabled="disabled"><t t-esc="form_data[6]"/></textarea></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="request_gdpdr">Set contact channel</label>
<div class="col-lg-7 col-md-8">
<input type="checkbox" name="request_gdpdr" t-att-checked="form_data[8]" disabled="true"/></div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="send_mail">Information request about personal data</label>
<div class="col-lg-7 col-md-8">
<input type="checkbox" name="send_mail" t-att-checked="form_data[9]" disabled="true"/></div>
</div>
<div>
<div class="offset-lg-3 offset-md-4 col-md-8 col-lg-7">
<a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Confirm</a>
<a href="/contactus" class="btn btn-primary btn-lg" style="margin-left: 1%;">Cancel</a>
</div>
</div>
</form>
</div>
</div>
</t>
</template>
</odoo>

22
website_contact_extend/views/res_partner.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_partner_form_gdpr_inherit" model="ir.ui.view">
<field name="name">res.partner.form</field>
<field name="model">res.partner</field>
<field eval="1" name="priority"/>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="website" position="after">
<!--<field name="contact_type" />-->
<field name="phone_contact" readonly="True" />
<field name="email_contact" readonly="True" />
<field name="letter_contact" readonly="True" />
<field name="is_verified" readonly="True" />
<field name="last_updated" readonly="True" />
</field>
</field>
</record>
</odoo>

146
website_contact_extend/views/website_contact.xml

@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_frontend" inherit_id="website.assets_frontend" name="Website Support Assets">
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/website_contact_extend/static/src/js/contactus.js"/>
</xpath>
</template>
<!--<template id="contactus_form_inherited" name="Contact Form" inherit_id="website_crm.contactus_form" customize_show="True">-->
<!--<xpath expr="//div[@class='form-group row form-field o_website_form_required_custom'][last()]" position="after">-->
<!--<div class="form-group row form-field o_website_form_required_custom">-->
<!--<label class="col-lg-3 col-md-4 col-form-label" for="contact_type">Request GDPDR</label>-->
<!--<div class="col-lg-7 col-md-8">-->
<!--<div class="checkbox>"><label><input type="checkbox" name="request_gdpdr" value="request_gdpdr"/></label></div>-->
<!--&lt;!&ndash;<div class="checkbox>"><label><input type="checkbox" name="letter_contact" value="letter_contact"/> Contact by Letter </label></div>&ndash;&gt;-->
<!--&lt;!&ndash;<div class="checkbox>"><label><input type="checkbox" name="email_contact" value="email_contact"/> Contact by E-Mail </label></div>&ndash;&gt;-->
<!--&lt;!&ndash;<div class="checkbox>"><label><input type="checkbox" name="phone_contact" value="phone_contact"/> Contact by Phone </label></div>&ndash;&gt;-->
<!--&lt;!&ndash;<select class="form-control" name="contact_type" id="contact_type">-->
<!--<option value="no_contact">I do not want to be contacted.</option>-->
<!--<option value="email_contact">I only want to be contacted by Email.</option>-->
<!--<option value="phone_contact">I only want to be contacted by Phone.</option>-->
<!--<option value="email_phone_contact">You can contact me by Email or Phone.</option>-->
<!--</select>&ndash;&gt;-->
<!--</div>-->
<!--</div>-->
<!--<div class="form-group row form-field">-->
<!--<label class="col-lg-3 col-md-4 col-form-label" for="contact_type">Information request concerning data about the personally</label>-->
<!--<div class="col-lg-7 col-md-8">-->
<!--<input type="checkbox" name="send_mail" value="send_mail"/>-->
<!--</div>-->
<!--</div>-->
<!--</xpath>-->
<!--</template>-->
<!--t-attf="http.request.session.review_form ? '/contact-us-form-review' : '/contactus-thank-you'"-->
<template id="contactus_form_inherited" name="Contact Form" inherit_id="website_crm.contactus_form"
customize_show="True">
<xpath expr="//div" position="replace">
<div class="container">
<form action="/website_form/" method="post" data-model_name="crm.lead"
data-success_page="/contactus-thank-you"
class="s_website_form container-fluid mt32" enctype="multipart/form-data"
data-editable-form="false">
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="contact_name">Your Name</label>
<div class="col-lg-7 col-md-8">
<input type="text" class="form-control o_website_form_input" name="contact_name"
t-att-value="request.params.get('contact_name', '')" required=""/>
</div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="phone">Phone Number</label>
<div class="col-lg-7 col-md-8">
<input type="text" class="form-control o_website_form_input" name="phone"
t-att-value="request.params.get('phone', '')"/>
</div>
</div>
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="email_from">Email</label>
<div class="col-lg-7 col-md-8">
<input type="text" class="form-control o_website_form_input input_email_from" name="email_from" required=""
t-att-value="request.params.get('email_from', '')"/>
</div>
</div>
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="partner_name">Your Company</label>
<div class="col-lg-7 col-md-8">
<input type="text" class="form-control o_website_form_input input_company" name="partner_name" required=""
t-att-value="request.params.get('partner_name', '')"/>
</div>
</div>
<div class="form-group row form-field o_website_form_required">
<label class="col-lg-3 col-md-4 col-form-label" for="name">Subject</label>
<div class="col-lg-7 col-md-8">
<input type="text" class="form-control o_website_form_input" name="name" required=""
t-att-value="request.params.get('name', '')"/>
</div>
</div>
<div class="form-group row form-field o_website_form_required_custom">
<label class="col-lg-3 col-md-4 col-form-label" for="description">Your Question</label>
<div class="col-lg-7 col-md-8">
<textarea class="form-control o_website_form_input" name="description" required="">
<t t-esc="request.params.get('description', '')"/>
</textarea>
</div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="request_gdpdr">Set contact channel</label>
<div class="col-lg-7 col-md-8">
<div class="checkbox>">
<label>
<input type="checkbox" name="request_gdpdr" value="request_gdpdr"/>
</label>
</div>
</div>
</div>
<div class="form-group row form-field">
<label class="col-lg-3 col-md-4 col-form-label" for="send_mail">Information request about personal data
</label>
<div class="col-lg-7 col-md-8">
<input type="checkbox" name="send_mail" value="send_mail"/>
</div>
</div>
<div class="form-group row">
<div class="offset-lg-3 offset-md-4 col-md-8 col-lg-7">
<a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Send</a>
<span id="o_website_form_result"></span>
</div>
</div>
</form>
</div>
</xpath>
</template>
<!--<record id="contactus_thanks_override" model="website.page">-->
<!--<field name="inherit_id" ref="website_crm.contactus_thanks_ir_ui_view"></field>-->
<!--&lt;!&ndash;<field name="key">website_crm.contactus_thanks</field>&ndash;&gt;-->
<!--<field name="arch" type="xml">-->
<!--<xpath expr="//t/t/div[@id='wrap']" position="replace">-->
<!--<body>-->
<!--<div>Hello</div>-->
<!--</body>-->
<!--</xpath>-->
<!--</field>-->
<!--</record>-->
<!--<record id="contactus_form_review" model="website.page">-->
<!--<field name="name">Review Form</field>-->
<!--<field name="type">qweb</field>-->
<!--<field name="url">/contact-us-form-review</field>-->
<!--<field name="website_published">True</field>-->
<!--<field name="key">website_contact_extend.contactus_form_review</field>-->
<!--<field name="arch" type="xml">-->
<!--<body>-->
<!--<div>Hello from Review</div>-->
<!--</body>-->
<!--</field>-->
<!--</record>-->
</odoo>
Loading…
Cancel
Save