From 678eb69f049babb954de11f365f3dc2fd7dab35e Mon Sep 17 00:00:00 2001 From: ITISAG-OCA Date: Fri, 22 Jun 2018 17:56:24 +0200 Subject: [PATCH] GDPR Module for OCA V11 --- itis_gdpr_extension/__init__.py | 3 + itis_gdpr_extension/__manifest__.py | 61 ++ itis_gdpr_extension/i18n/de.po | 560 ++++++++++++++++++ itis_gdpr_extension/i18n/en_US.po | 552 +++++++++++++++++ itis_gdpr_extension/models/__init__.py | 4 + itis_gdpr_extension/models/contact_model.py | 149 +++++ itis_gdpr_extension/models/models.py | 86 +++ .../security/gdpr_security.xml | 8 + .../security/ir.model.access.csv | 3 + .../static/description/index.html | 63 ++ itis_gdpr_extension/static/src/img/itisag.png | Bin 0 -> 2528 bytes itis_gdpr_extension/views/contact_report.xml | 87 +++ itis_gdpr_extension/views/contact_view.xml | 45 ++ itis_gdpr_extension/views/views.xml | 128 ++++ 14 files changed, 1749 insertions(+) create mode 100755 itis_gdpr_extension/__init__.py create mode 100755 itis_gdpr_extension/__manifest__.py create mode 100755 itis_gdpr_extension/i18n/de.po create mode 100755 itis_gdpr_extension/i18n/en_US.po create mode 100755 itis_gdpr_extension/models/__init__.py create mode 100755 itis_gdpr_extension/models/contact_model.py create mode 100755 itis_gdpr_extension/models/models.py create mode 100755 itis_gdpr_extension/security/gdpr_security.xml create mode 100755 itis_gdpr_extension/security/ir.model.access.csv create mode 100755 itis_gdpr_extension/static/description/index.html create mode 100755 itis_gdpr_extension/static/src/img/itisag.png create mode 100755 itis_gdpr_extension/views/contact_report.xml create mode 100755 itis_gdpr_extension/views/contact_view.xml create mode 100755 itis_gdpr_extension/views/views.xml diff --git a/itis_gdpr_extension/__init__.py b/itis_gdpr_extension/__init__.py new file mode 100755 index 0000000..5305644 --- /dev/null +++ b/itis_gdpr_extension/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models \ No newline at end of file diff --git a/itis_gdpr_extension/__manifest__.py b/itis_gdpr_extension/__manifest__.py new file mode 100755 index 0000000..f4352a2 --- /dev/null +++ b/itis_gdpr_extension/__manifest__.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- + +############################################################################## +# +# IT IS AG, software solutions +# Copyright (C) 2015-TODAY IT IS AG (). +# +# +# The software works in conjunction with other software distributed from +# other parties which is licensed under the GNU Lesser General Public +# License (LGPL). +# Those pieces are not owned by IT IS AG and therefore not under the terms +# of the IT IS EULA, and WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with IT IS Odoo Textblock. If not, see +# +############################################################################## + +{ + 'name': "IT IS GDPR Extension", + + 'summary': """ + Extended Website Contact View to give Customer the option on how to be contacted. + View for DPO to look up Customer Data. + Newletter Double Opt-In and -Out extending the Odoo mass_mailing module. + """, + + 'description': """ + Extended Website Contact View to give Customer the option on how to be contacted. + View for DPO to look up Customer Data. + Newletter Double Opt-In and -Out extending the Odoo mass_mailing module. + """, + + 'author': "IT IS AG", + 'website': "http://www.itis-odoo.de", + + # 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': '0.1', + 'category': 'Website', + 'depends': ['base', + 'website', + 'mass_mailing', + 'contacts', + 'website_crm', + ], + + 'data': [ + 'views/contact_view.xml', + 'security/gdpr_security.xml', + 'security/ir.model.access.csv', + 'views/views.xml', + 'views/contact_report.xml', + ], + 'icon': "/itis_gdpr_extension/static/src/img/itisag.png", + +} \ No newline at end of file diff --git a/itis_gdpr_extension/i18n/de.po b/itis_gdpr_extension/i18n/de.po new file mode 100755 index 0000000..4191271 --- /dev/null +++ b/itis_gdpr_extension/i18n/de.po @@ -0,0 +1,560 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * itis_gdpr_extension +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-14 11:34+0000\n" +"PO-Revision-Date: 2018-06-14 13:33+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: itis_gdpr_extension +#: model:mail.template,body_html:itis_gdpr_extension.verification_email_template +msgid "" +"\n" +"

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

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

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

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

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

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

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

\n" +" \n" +" " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"(2) Die personenbezogene Daten werden nicht an ein " +"Drittland oder an eine internationale Organisation übermittelt" +msgstr "" +"(2) Die personenbezogene Daten werden nicht an ein " +"Drittland oder an eine internationale Organisation übermittelt" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.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: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und " +"Freiheiten anderer
Personen nicht beeinträchtigen." +msgstr "" +"(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und " +"Freiheiten anderer
Personen nicht beeinträchtigen." + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"bis zum __. __. ____ □ Bis zu ____ " +"Jahre □ Gesetzl. Aufbewahrungfrist" +msgstr "" +"bis zum __. __. ____ □ Bis zu ____ " +"Jahre □ Gesetzl. Aufbewahrungfrist" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"oder □ Widerspruchsrecht gegen diese " +"Verarbeitung besteht;" +msgstr "" +"oder □ Widerspruchsrecht gegen diese " +"Verarbeitung besteht;" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert " +"_______________ " +msgstr "" +"Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert " +"_______________ " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"Grund □ Kontakt ____ mal " +"nicht erreicht □ Systemwechsel " +msgstr "" +"Grund □ Kontakt ____ mal " +"nicht erreicht □ Systemwechsel " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Adresse:" +msgstr "Adresse:" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunft für:" +msgstr "Auskunft für:" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunft nach Artikel 15 DS-GVO" +msgstr "Auskunft nach Artikel 15 DS-GVO" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunftsgeber:" +msgstr "Auskunftsgeber:" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: itis_gdpr_extension +#: model:ir.actions.report,name:itis_gdpr_extension.report_contact +msgid "Contact Report" +msgstr "Kontakt Report" + +#. module: itis_gdpr_extension +#: model:ir.ui.menu,name:itis_gdpr_extension.menu_customer_info +msgid "Contact Search" +msgstr "Kontakt Suche" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_contact_type +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_contact_type +msgid "Contact Type" +msgstr "Art des Kontakts" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by E-Mail" +msgstr "Kontakt per E-Mail" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by Letter" +msgstr "Kontakt per Post" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by Phone" +msgstr "Kontakt per Telefon" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_create_uid +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_create_date +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: itis_gdpr_extension +#: model:ir.actions.act_window,name:itis_gdpr_extension.action_dpo_view_itis +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "Customer Info" +msgstr "Kunden Information" + +#. module: itis_gdpr_extension +#: model:res.groups,name:itis_gdpr_extension.group_dpo +msgid "Data Protection Officers" +msgstr "Data Protection Officers" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.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: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_display_name +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_email_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_email_contact +msgid "Email Contact" +msgstr "Email Kontakt" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_crm_lead_email_link +msgid "Email verification link" +msgstr "Email verifikations Link" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Email:" +msgstr "E-Mail:" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_field_list +msgid "Fields Name" +msgstr "Felder Namen" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_model_id +msgid "Found in Model" +msgstr "Gefunden in Modell" + +#. module: itis_gdpr_extension +#: code:addons/itis_gdpr_extension/models/models.py:18 +#, python-format +msgid "Found record" +msgstr "Gefunden in Eintrag" + +#. module: itis_gdpr_extension +#: selection:res.partner,contact_type:0 +msgid "I do not want to be contacted." +msgstr "Ich möchte nicht kontaktiert werden." + +#. module: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_id +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_id +msgid "ID" +msgstr "ID" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "In the future I want to be contacted by" +msgstr "In Zukunft möchte ich nur kontaktiert werden durch:" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Information request concerning data about the personally" +msgstr "Persönliche Informationsauskunft:" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view___last_update +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line___last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_write_uid +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert durch" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_write_date +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Interessent / Chance" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_letter_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_letter_contact +msgid "Letter Contact" +msgstr "Brief Kontakt" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_last_updated +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_last_updated +msgid "Letzte Aktualisierung" +msgstr "Letzte Aktualisierung" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_name +msgid "Model Name" +msgstr "Modellname" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Name:" +msgstr "Name:" + +#. module: itis_gdpr_extension +#: code:addons/itis_gdpr_extension/models/models.py:71 +#, python-format +msgid "No record found with ." +msgstr "Kein Eintrag gefunden mit ." + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_phone_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_phone_contact +msgid "Phone Contact" +msgstr "Telefon Kontakt" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Phone:" +msgstr "Telefon:" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_record_id +msgid "Record ID" +msgstr "Datensatz Nr." + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "SEARCH" +msgstr "Suche" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.dpo_view_tree +msgid "Search Contact" +msgstr "Kontakt Suchen" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_search_lines +msgid "Search Result" +msgstr "Suchergebnis" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.search_line_tree_view_itis +msgid "Search Results" +msgstr "Suchergebnisse" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_name +msgid "Search Term" +msgstr "Suchbegriff" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_search_id +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "Search Terms" +msgstr "Suchbegriffe" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_model_ids +msgid "Search in Model" +msgstr "Suche in Modell" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.search_line_tree_view_itis +msgid "VIEW RECORD" +msgstr "VIEW RECORD" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_is_verified +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_is_verified +#: model:mail.template,subject:itis_gdpr_extension.confirmation_email_template +msgid "Verified Email" +msgstr "Verifizierte Email" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,help:itis_gdpr_extension.field_res_partner_contact_type +#: model:ir.model.fields,help:itis_gdpr_extension.field_res_users_contact_type +msgid "Which way user want to be contacted." +msgstr "Art der Kontaktierung" + +#. module: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " +msgstr "" +"a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" +msgstr "" +"b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die " +"personenbezogenen Daten offengelegt worden sind oder noch offengelegt " +"werden, insbesondere bei Empfängern in Drittländern oder bei internationalen " +"Organisationen: _______________________________
oder " +" keine Offenlegung gegenüber Dritten " +"beabsichtigt, Nicht " +"bekannt" +msgstr "" +"c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die " +"personenbezogenen Daten offengelegt worden sind oder noch offengelegt " +"werden, insbesondere bei Empfängern in Drittländern oder bei internationalen " +"Organisationen: _______________________________
oder " +" keine Offenlegung gegenüber Dritten " +"beabsichtigt, Nicht " +"bekannt" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"d) geplante Dauer, für die die personenbezogenen Daten gespeichert " +"werden: " +msgstr "" +"d) geplante Dauer, für die die personenbezogenen Daten gespeichert " +"werden: " + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_dpo_view +msgid "dpo.view" +msgstr "dpo.view" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"e) Recht auf Berichtigung oder Löschung " +"der betreffenden personenbezogenen Daten besteht " +"oder Einschränkung der " +"Verarbeitung durch den Verantwortlichen " +msgstr "" +"e) Recht auf Berichtigung oder Löschung " +"der betreffenden personenbezogenen Daten besteht " +"oder Einschränkung der " +"Verarbeitung durch den Verantwortlichen " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"f) das Bestehen eines Beschwerderechts " +"bei einer Aufsichtsbehörde besteht" +msgstr "" +"f) das Bestehen eines Beschwerderechts " +"bei einer Aufsichtsbehörde besteht" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" +msgstr "" +"g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"h) eine automatisierte Entscheidungsfindung " +"mit diesen Daten findet nicht statt. " +msgstr "" +"h) eine automatisierte Entscheidungsfindung " +"mit diesen Daten findet nicht statt. " + +#. module: itis_gdpr_extension +#: model:mail.template,subject:itis_gdpr_extension.verification_email_template +msgid "mail verification link" +msgstr "Bitte bestätigen Sie Ihre E-Mail-Adresse" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_search_line +msgid "search.line" +msgstr "search.line" diff --git a/itis_gdpr_extension/i18n/en_US.po b/itis_gdpr_extension/i18n/en_US.po new file mode 100755 index 0000000..cac3888 --- /dev/null +++ b/itis_gdpr_extension/i18n/en_US.po @@ -0,0 +1,552 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * itis_gdpr_extension +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-06-22 12:53+0000\n" +"PO-Revision-Date: 2018-06-22 15:22+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: en_US\n" +"X-Generator: Poedit 1.5.4\n" + +#. module: itis_gdpr_extension +#: model:mail.template,body_html:itis_gdpr_extension.verification_email_template +msgid "" +"\n" +"

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

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

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

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

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

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

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

\n" +" \n" +" " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"(2) Die personenbezogene Daten werden nicht an ein " +"Drittland oder an eine internationale Organisation übermittelt" +msgstr "" +"(2) The personal data will not be transmitted to " +"a third country or an international organization" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.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: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"(4) Das Recht auf Erhalt einer Kopie gemäß Absatz 3 darf die Rechte und " +"Freiheiten anderer
Personen nicht beeinträchtigen." +msgstr "" +"(4) The right to receive a copy under paragraph 3 must not affect the rights " +"and freedoms of other persons." + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"bis zum __. __. ____ □ Bis zu ____ " +"Jahre □ Gesetzl. Aufbewahrungfrist" +msgstr "" +"Until the __. __. " +"____ □ Up to " +"____ years □ Storage period by law" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"oder □ Widerspruchsrecht gegen diese " +"Verarbeitung besteht;" +msgstr "" +"or □ Right to object to this processing," + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"Wenn doch: Die Daten werden nach folgender Art ausgewertet und gruppiert " +"_______________ " +msgstr "" +"If so: The data is evaluated and grouped in the " +"following way_______________ " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"Grund □ Kontakt ____ mal " +"nicht erreicht □ Systemwechsel " +msgstr "" +"Reason: □ Contact ____ not reached □ " +"Systemchange " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Adresse:" +msgstr "Address:" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunft für:" +msgstr "Information for:" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunft nach Artikel 15 DS-GVO" +msgstr "" +"Information according to Article 15 of the GDPR" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Auskunftsgeber:" +msgstr "Information giver:" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: itis_gdpr_extension +#: model:ir.actions.report,name:itis_gdpr_extension.report_contact +msgid "Contact Report" +msgstr "Contact Report" + +#. module: itis_gdpr_extension +#: model:ir.ui.menu,name:itis_gdpr_extension.menu_customer_info +msgid "Contact Search" +msgstr "Contact Search" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_contact_type +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_contact_type +msgid "Contact Type" +msgstr "Contact Type" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by E-Mail" +msgstr "Contact by E-Mail" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by Letter" +msgstr "Contact by Letter" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Contact by Phone" +msgstr "Contact by Phone" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_create_uid +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_create_uid +msgid "Created by" +msgstr "Created by" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_create_date +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_create_date +msgid "Created on" +msgstr "Created on" + +#. module: itis_gdpr_extension +#: model:ir.actions.act_window,name:itis_gdpr_extension.action_dpo_view_itis +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "Customer Info" +msgstr "Customer Info" + +#. module: itis_gdpr_extension +#: model:res.groups,name:itis_gdpr_extension.group_dpo +msgid "Data Protection Officers" +msgstr "Data Protection Officers" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.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: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_display_name +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_email_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_email_contact +msgid "Email Contact" +msgstr "Email Contact" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_crm_lead_email_link +msgid "Email verification link" +msgstr "Email verification link" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Email:" +msgstr "Email:" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_field_list +msgid "Fields Name" +msgstr "Fields Name" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_model_id +msgid "Found in Model" +msgstr "Found in Model" + +#. module: itis_gdpr_extension +#: code:addons/itis_gdpr_extension/models/models.py:19 +#, python-format +msgid "Found record" +msgstr "Found record" + +#. module: itis_gdpr_extension +#: selection:res.partner,contact_type:0 +msgid "I do not want to be contacted." +msgstr "I do not want to be contacted." + +#. module: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_id +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_id +msgid "ID" +msgstr "ID" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "In the future I want to be contacted by" +msgstr "In the future I want to be contacted by" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.contactus_form_inherited +msgid "Information request concerning data about the personally" +msgstr "Information request concerning data about the personally" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view___last_update +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line___last_update +msgid "Last Modified on" +msgstr "Last Modified on" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_write_uid +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_write_date +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/Opportunity" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_letter_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_letter_contact +msgid "Letter Contact" +msgstr "Letter Contact" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_name +msgid "Model Name" +msgstr "Model Name" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Name:" +msgstr "Name:" + +#. module: itis_gdpr_extension +#: code:addons/itis_gdpr_extension/models/models.py:78 +#, python-format +msgid "No record found with ." +msgstr "No record found with ." + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_phone_contact +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_users_phone_contact +msgid "Phone Contact" +msgstr "Phone Contact" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "Phone:" +msgstr "Phone:" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_record_id +msgid "Record ID" +msgstr "Record ID" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_record_name +msgid "Record Name" +msgstr "Record Name" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "SEARCH" +msgstr "SEARCH" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.dpo_view_tree +msgid "Search Contact" +msgstr "Search Contact" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_search_lines +msgid "Search Result" +msgstr "Search Result" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.search_line_tree_view_itis +msgid "Search Results" +msgstr "Search Results" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_name +msgid "Search Term" +msgstr "Search Term" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_search_line_search_id +#: model:ir.ui.view,arch_db:itis_gdpr_extension.view_dpo_form_view_itis +msgid "Search Terms" +msgstr "Search Terms" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_dpo_view_model_ids +msgid "Search in Model" +msgstr "Search in Model" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.search_line_tree_view_itis +msgid "VIEW RECORD" +msgstr "VIEW RECORD" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,field_description:itis_gdpr_extension.field_res_partner_is_verified +#: model:mail.template,subject:itis_gdpr_extension.confirmation_email_template +msgid "Verified Email" +msgstr "Verified Email" + +#. module: itis_gdpr_extension +#: model:ir.model.fields,help:itis_gdpr_extension.field_res_partner_contact_type +#: model:ir.model.fields,help:itis_gdpr_extension.field_res_users_contact_type +msgid "Which way user want to be contacted." +msgstr "Which way user want to be contacted." + +#. module: itis_gdpr_extension +#: 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: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"a) die Verarbeitungszwecke: Kontaktaufnahme; Geschäftsvorgänge; Sonstiges; " +msgstr "" +"a) The processing purposes: □ " +"Contact, Transactions, Other " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"b) die Kategorien personenbezogener Daten, die verarbeitet werden:
Kundendaten, Lieferantendaten, Interessentendaten, Personaldaten" +msgstr "" +"b) The categories of personal data being processed:
Customer data, Supplier data, Prospect data, Personal data" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"c) die Empfänger oder Kategorien von Empfängern, gegenüber denen die " +"personenbezogenen Daten offengelegt worden sind oder noch offengelegt " +"werden, insbesondere bei Empfängern in Drittländern oder bei internationalen " +"Organisationen: _______________________________
oder " +" keine Offenlegung gegenüber Dritten " +"beabsichtigt, Nicht " +"bekannt" +msgstr "" +"c) The recipients or categories of recipients to whom the personal data have " +"been disclosed or are yet to be disclosed, in particular to recipients in " +"third countries or to international organizations: _______________________________
or No disclosure to third " +"parties, Not known" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"d) geplante Dauer, für die die personenbezogenen Daten gespeichert " +"werden: " +msgstr "" +"d) Planned duration for which the personal data is stored: " + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_dpo_view +msgid "dpo.view" +msgstr "dpo.view" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"e) Recht auf Berichtigung oder Löschung " +"der betreffenden personenbezogenen Daten besteht " +"oder Einschränkung der " +"Verarbeitung durch den Verantwortlichen " +msgstr "" +"e) Right to rectification or deletion of " +"personal data concerned, or Restriction of " +"processing by the controller , or " + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"f) das Bestehen eines Beschwerderechts " +"bei einer Aufsichtsbehörde besteht" +msgstr "" +"f) The existence of a right to complain to " +"a supervisory authority" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"g) die Herkunft der Daten ist von eigener Recherche, Auskunftei" +msgstr "" +"g) The origin of the data is from Own research, Credit reference agency" + +#. module: itis_gdpr_extension +#: model:ir.ui.view,arch_db:itis_gdpr_extension.report_contact_document +msgid "" +"h) eine automatisierte Entscheidungsfindung " +"mit diesen Daten findet nicht statt. " +msgstr "" +"h) An automated decision-making with this data " +"does not take place." + +#. module: itis_gdpr_extension +#: model:mail.template,subject:itis_gdpr_extension.verification_email_template +msgid "mail verification link" +msgstr "mail verification link" + +#. module: itis_gdpr_extension +#: model:ir.model,name:itis_gdpr_extension.model_search_line +msgid "search.line" +msgstr "search.line" diff --git a/itis_gdpr_extension/models/__init__.py b/itis_gdpr_extension/models/__init__.py new file mode 100755 index 0000000..630673c --- /dev/null +++ b/itis_gdpr_extension/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import contact_model \ No newline at end of file diff --git a/itis_gdpr_extension/models/contact_model.py b/itis_gdpr_extension/models/contact_model.py new file mode 100755 index 0000000..255dc69 --- /dev/null +++ b/itis_gdpr_extension/models/contact_model.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- +from odoo import api, fields, models, tools, _ +from odoo.addons.website_form.controllers import main as parent_controller +from odoo import http +from odoo.http import request +import json +from odoo.exceptions import ValidationError +from psycopg2 import IntegrityError +import base64 + +class CrmLead(models.Model): + _inherit = "crm.lead" + + email_link = fields.Char("Email verification link") + +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") + +class VerifyController(http.Controller): + @http.route('/verify_email', type='http', auth="public", methods=['GET'], website=True) + def verify_email(self, **kwargs): + if kwargs: + 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] + link_date = link_data[5] + 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 "
Der link ist leider nicht gültig.
Der von Ihnen eingegebene Link ist nicht gültig, oder ist abgelaufen.
Bitte fordern Sie einen neuen Link an.
" + partner = request.env['res.partner'].sudo().search([('email','=',email),('name','=',contact_name)]) + 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 + template = request.env.ref('itis_gdpr_extension.confirmation_email_template').sudo().send_mail(part.id) + return "
Vielen Dank! Ihre E-Mail-Adresse wurde verifiziert!
" + else: + return "
Der link ist leider nicht gültig.
Der von Ihnen eingegebene Link ist nicht gültig, oder ist abgelaufen.
Bitte fordern Sie einen neuen Link an.
" + + + +class MyFilter(parent_controller.WebsiteForm): + + @http.route('/website_form/', type='http', auth="public", methods=['POST'], website=True) + def website_form(self, model_name, **kwargs): + model_record = request.env['ir.model'].sudo().search([('model', '=', model_name), ('website_form_access', '=', True)]) + if not model_record: + return json.dumps(False) + need_send_email = False + try: + data = self.extract_data(model_record, request.params) + contact_type=False + phone_contact = False + letter_contact = False + email_contact = False + send_mail = True + 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 + + index = index + 1 + contact_name = data.get("record").get("contact_name") + email_from = data.get("record").get("email_from") + #if data.get("record",False): + #partner_records = request.env['res.partner'].sudo().search([('name', '=', contact_name), ('email', '=', email_from)]) + #for partner_record in partner_records: + #if partner_record: + #if partner_record.is_verified: + #partner_record.contact_type = contact_type + #partner_record.phone_contact = phone_contact + #partner_record.email_contact = email_contact + #partner_record.letter_contact = letter_contact + #if not partner_record.is_verified: + # need_send_email = True + + # 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]}) + + try: + 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']) + if id_record and send_mail 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(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 + template = request.env.ref('itis_gdpr_extension.verification_email_template').send_mail(id_record) + # 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 ? + except IntegrityError: + return json.dumps(False) + + request.session['form_builder_model_model'] = model_record.model + request.session['form_builder_model'] = model_record.name + request.session['form_builder_id'] = id_record + + return json.dumps({'id': id_record}) \ No newline at end of file diff --git a/itis_gdpr_extension/models/models.py b/itis_gdpr_extension/models/models.py new file mode 100755 index 0000000..8879122 --- /dev/null +++ b/itis_gdpr_extension/models/models.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, tools, SUPERUSER_ID, _ +from odoo.exceptions import UserError + +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' + } + + @api.one + def _compute_record_name(self): + for record in self: + record_object = self.env[self.model_id.model].search([('id', '=', int(self.record_id))]) + record.record_name = record_object.name + +class ItisDpoView(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() + self._cr.commit() + found = False + for model in self.model_ids: + table_name = model.model.replace(".","_") + query = '''select * from '''+table_name+''' where ''' + field_list = self.env['ir.model.fields'].search([('model_id.id', '=', model.id),('ttype', 'in', ['char','html','text']),('store', '=', True)]) + for field in field_list: + query = query +table_name+'''."'''+ field.name +'''" like '%'''+self.name+'''%' or ''' + query = query[:-3] + query = query+''';''' + + self._cr.execute(query) + colnames = [desc[0] for desc in self._cr.description] + id_index = colnames.index("id") + rec_id = 0 + rows = self._cr.fetchall() + + if rows: + for rec in rows: + ind = 0 + rec_id = rec[id_index] + founded_col = [] + for row in rec: + if str(row).find(self.name) >= 0: + founded_col.append(colnames[ind]) + found = True + ind = ind + 1 + fields_data = self.env['ir.model.fields'].search([('name', 'in', founded_col),('model_id', '=', model.id)]) + field_desc = [] + for field in fields_data: + field_desc.append(field.field_description) + create_id = self.env['search.line'].create({"field_list":str(field_desc),"name":model.name,"model_id":int(model.id),"search_id":int(self.id),"record_id":int(rec_id)}) + if not found: + raise UserError(_("No record found with "+self.name+".")) + + + def _search_tables(self): + user_id = self.env['res.users'].browse('email', '=', self.email) + # field user_info could be an array containg the fields we want to display... + partner_id = self.env['res.partner'].browse('email', '=', self.email) + crm_id = self.env['crm.lead'].browse('email', '=', self.email) + mm_id = self.env['mail.mass_mailing'].browse('email', '=', self.email) \ No newline at end of file diff --git a/itis_gdpr_extension/security/gdpr_security.xml b/itis_gdpr_extension/security/gdpr_security.xml new file mode 100755 index 0000000..591d923 --- /dev/null +++ b/itis_gdpr_extension/security/gdpr_security.xml @@ -0,0 +1,8 @@ + + + + + Data Protection Officers + + + \ No newline at end of file diff --git a/itis_gdpr_extension/security/ir.model.access.csv b/itis_gdpr_extension/security/ir.model.access.csv new file mode 100755 index 0000000..773df98 --- /dev/null +++ b/itis_gdpr_extension/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 diff --git a/itis_gdpr_extension/static/description/index.html b/itis_gdpr_extension/static/description/index.html new file mode 100755 index 0000000..98758fb --- /dev/null +++ b/itis_gdpr_extension/static/description/index.html @@ -0,0 +1,63 @@ + +Schulung

Features

 

 

 

Enhanced Contact Form

 

 

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

Search for customer data & report

 

After installing the module the user is able to see sub menu in Contacts→ Configuration → Contact Search section like below screen shot.

 

 

When user opens the Contact Search form then there are two fields available to define the value to search for and the model where the search should be performed. Results will be displayed with according record ID and model name.

 

For more information you can see below screen shot.

 

 

 

The according record can be opened from the list view.

 

On the contact form you can also print the required report “Auskunft nach Artikel 15 DS-GVO”

Itisproductsupport@itis.de

http://www.itis.de

 

\ No newline at end of file diff --git a/itis_gdpr_extension/static/src/img/itisag.png b/itis_gdpr_extension/static/src/img/itisag.png new file mode 100755 index 0000000000000000000000000000000000000000..288b8491d85bda0e3774a2ff329acb7350ba4328 GIT binary patch literal 2528 zcmV<62_N=}P)`Cc#r^#f+-SMW#@DH={%^kGjhiNp~ zWQw3_fm!qFYxLsSv1A5l1XTmfx^*wn)-kEH3YZa84KV-zyEXLw=+X2tAZ66I)~}~~ z)6ycSYA`=tzJfj+Ig;K2;Do1J=P`OZ@Mzr>u<*yp^ z?tAEVY%JXbR9~nZsmHPGPg*Qg2h?e}osyIkzNr3S+D46{_LvxI1)L{Tj?`vgo&qY5 z1?W@5vZeADvlT6qBRZPw0P}{*k!nRdwGBD-5K_Pr^r>OB{I$SrM}>DrMUfL=zM>vM zPUY%fiD(U*LZt-rYF-|F`|MKs4t=F9Cx==WEuyyh^T|GaIynXnB4NM)5&+{w#Mv?1 zFm0GOFu%dPg!wth}Cn2c&c#D+Yo63iPLHx0MWH;r7lM* zH~$AQw;*C?1NDK-%+Nzsy3B8^UQPDuYH~I=ccKXA&y!GAMnZ8h35khB42o#;Wn2QD zYoX#kl~1X*qU~ z0ZJ065>zf!M|$Mc(c0|&@51~=aA5X8QUcmps1!yjZ&Nv^7Gu7NDMjkgklar8!t@hV z4JsEZ?o;_dWk=T`b**8jx?*Yosy0$TL6PD}WmGAr{!e#Q-7z%+RU4_*_;)x``Q-nP zxw*o)u76!R9yWlEEZw1 z$z<0Q)lf_wK-K2ddgRo4z*bo-P6_oRzfldx)Cp8ADo5(yGBN~o>Heb{iiuyIa&tRi zupJZ!pCs{ZvsoK_mCIjxgBqhcfZ7h!YQ?CAM<$AZ$B~iYA1MD(q(4kIR8)38`fJ0q zVSb6*KBD>_sR3E$cp}8FR5DP{iQcf!?_)@gWKU7d(Jv3aE~DaS@_DKgKbMdH?8upI zxb9=5`nLQ7f~oi9RKn;yc_qmA15iMEQMvq`UaNmtV)8^^$#~-A>n`a+U{v)v)iY{X zVsh@~!BNU-!8IRC=|o)qe2LpmOa-X?PHOH`x%sc@4SJx|`rr5VP}R0V`uLR%bTa=1 z`egNQso~kB)R^-aHD}MK%MU(8Uro!Ts~J=1+q4OEb4)7PMvS1=#6)Tzd>1)lW62pE z9Xz0%e|rv&R2h_`RL-Y-KSmpF+e`!K2A;#$QBia;Dw-M)B-WTa=op?~@t`<*1JCuv zA@Q^Yu8^D-Rz>KCZq6gC1 zm>8_1Q zS51*qxzh7;=K{soHNy-jD(5(NEfY`vnma7%4Pl*wHv}Aw+=9vNlDqyD-z#ED#mF&b z3boIeL9LjYV+IV>(;FE0Yd!Hj4PMeRs+Zl81G5dko2JV=C{P)Idqmf$<9x^Wx#IA3 z`RzD-$+#S?T*0NHBHk}G@Iiwaut=4291p(kZfE4_>pt$|1A-Y4RBxcJ5v()j5j-!= zF%3sm0_q`8`h)qOl+jeNY&q5K+D$w1R%(xFD5^J5*HbCR)gdyE1Jic>Ivw4-mDWD} zD}68xL-hvgT9jl|jS7%;>96VJpZ`KTvd#4276UL1LG=deu5FSJqWz4_Gq3-XE|gbL zWb zpXbGlDn_dG>ZGS}8;?CVEV;)H=yf`=X>)KFAgxhb9$!p1w{Iug=FN2bAFol{`VHdp z=bUO!PZwJ%@x!yc%=rVfSoV&>LUJHV?U=R=8|bT<5BAELyf^<0JD|_d8ihQj<}H=< z@orzYle{;-*3?9G9~>}#ZypM${2vhbx}B6;BgPE+)+kV@cA$CNP9C0=F1ALz%!~3? zhA*ZjEfw;pr^vigvX^S5)`)ZFGof0|jY7Q@7w2)A%T4>%Czph7Yh)-Y(A;6Rl$6kk zHP6wR{rkmJqmbDF1se71q491bvoz;%szIO0+sSA8TV(o!`bAPwpRb$m{LRYnYmM|q zJ(oOO|2HA@C)D~;DG^L9QLE89MKCo)Jv4571XD}YcP6GsFttS8lyP4KQ%lqreljhB qsU_<2`?DgLTB7F6Ge + + + + + + + + + + \ No newline at end of file diff --git a/itis_gdpr_extension/views/contact_view.xml b/itis_gdpr_extension/views/contact_view.xml new file mode 100755 index 0000000..7842031 --- /dev/null +++ b/itis_gdpr_extension/views/contact_view.xml @@ -0,0 +1,45 @@ + + + + + res.partner.form + res.partner + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/itis_gdpr_extension/views/views.xml b/itis_gdpr_extension/views/views.xml new file mode 100755 index 0000000..d3761c5 --- /dev/null +++ b/itis_gdpr_extension/views/views.xml @@ -0,0 +1,128 @@ + + + + + + view.dpo.form.view.itis + dpo.view + +
+
+

+ +

+ +
+ + + +
+
+
+
+
+ + + + + +
+
+ + + search.line.tree.view.itis + search.line + + + + + + +