Compare commits

...

No commits in common. '11.0' and '13.0' have entirely different histories.
11.0 ... 13.0

  1. 4
      .editorconfig
  2. 180
      .eslintrc.yml
  3. 10
      .flake8
  4. 36
      .gitignore
  5. 12
      .isort.cfg
  6. 103
      .pre-commit-config.yaml
  7. 8
      .prettierrc.yml
  8. 88
      .pylintrc
  9. 66
      .pylintrc-mandatory
  10. 81
      .travis.yml
  11. 3
      CONTRIBUTING.md
  12. 16
      README.md
  13. 89
      contact_search_form/README.rst
  14. 3
      contact_search_form/__init__.py
  15. 33
      contact_search_form/__manifest__.py
  16. 156
      contact_search_form/i18n/contact_search_form.pot
  17. 161
      contact_search_form/i18n/de.po
  18. 161
      contact_search_form/i18n/en_US.po
  19. 158
      contact_search_form/i18n/fr.po
  20. 158
      contact_search_form/i18n/it.po
  21. 3
      contact_search_form/models/__init__.py
  22. 84
      contact_search_form/models/contact_search.py
  23. 3
      contact_search_form/readme/CONFIGURE.rst
  24. 2
      contact_search_form/readme/DESCRIPTION.rst
  25. 9
      contact_search_form/readme/USAGE.rst
  26. 8
      contact_search_form/security/gdpr_security.xml
  27. 3
      contact_search_form/security/ir.model.access.csv
  28. BIN
      contact_search_form/static/description/icon.png
  29. 431
      contact_search_form/static/description/index.html
  30. 79
      contact_search_form/views/contact_search.xml
  31. 4
      oca_dependencies.txt
  32. 11
      privacy/README.rst
  33. 40
      privacy/__manifest__.py
  34. 6
      privacy/demo/res_users.xml
  35. 286
      privacy/i18n/de.po
  36. 215
      privacy/i18n/es.po
  37. 293
      privacy/i18n/fr.po
  38. 362
      privacy/i18n/hr.po
  39. 232
      privacy/i18n/it.po
  40. 228
      privacy/i18n/privacy.pot
  41. 211
      privacy/i18n/pt.po
  42. 23
      privacy/models/privacy_activity.py
  43. 1
      privacy/readme/CONTRIBUTORS.rst
  44. 22
      privacy/security/data_protection.xml
  45. 7
      privacy/static/description/index.html
  46. 74
      privacy/views/data_protection_menu_view.xml
  47. 98
      privacy/views/privacy_activity_view.xml
  48. 10
      privacy_consent/README.rst
  49. 9
      privacy_consent/__manifest__.py
  50. 39
      privacy_consent/controllers/main.py
  51. 28
      privacy_consent/data/ir_actions_server.xml
  52. 7
      privacy_consent/data/ir_cron.xml
  53. 116
      privacy_consent/data/mail.xml
  54. 237
      privacy_consent/i18n/de.po
  55. 242
      privacy_consent/i18n/es.po
  56. 494
      privacy_consent/i18n/fr.po
  57. 273
      privacy_consent/i18n/privacy_consent.pot
  58. 242
      privacy_consent/i18n/pt.po
  59. 61
      privacy_consent/models/mail_mail.py
  60. 24
      privacy_consent/models/mail_template.py
  61. 92
      privacy_consent/models/privacy_activity.py
  62. 82
      privacy_consent/models/privacy_consent.py
  63. 14
      privacy_consent/models/res_partner.py
  64. 6
      privacy_consent/static/description/index.html
  65. 7
      privacy_consent/static/src/css/privacy_consent.scss
  66. 13
      privacy_consent/templates/assets.xml
  67. 18
      privacy_consent/templates/form.xml
  68. 279
      privacy_consent/tests/test_consent.py
  69. 28
      privacy_consent/views/privacy_activity.xml
  70. 68
      privacy_consent/views/privacy_consent.xml
  71. 12
      privacy_consent/views/res_partner.xml
  72. 91
      privacy_partner_report/README.rst
  73. 2
      privacy_partner_report/__init__.py
  74. 20
      privacy_partner_report/__manifest__.py
  75. 174
      privacy_partner_report/i18n/de.po
  76. 174
      privacy_partner_report/i18n/it.po
  77. 172
      privacy_partner_report/i18n/privacy_partner_report.pot
  78. 1
      privacy_partner_report/readme/CONTRIBUTORS.rst
  79. 2
      privacy_partner_report/readme/DESCRIPTION.rst
  80. 5
      privacy_partner_report/readme/USAGE.rst
  81. 1
      privacy_partner_report/report/__init__.py
  82. 83
      privacy_partner_report/report/privacy_partner_xlsx.py
  83. BIN
      privacy_partner_report/static/description/icon.png
  84. 432
      privacy_partner_report/static/description/index.html
  85. 14
      privacy_partner_report/views/privacy_menu_view.xml
  86. 12
      privacy_partner_report/views/privacy_report.xml
  87. 1
      privacy_partner_report/wizard/__init__.py
  88. 253
      privacy_partner_report/wizard/privacy_report_partner.py
  89. 51
      privacy_partner_report/wizard/privacy_report_partner_wizard.xml
  90. 2
      setup/_metapackage/VERSION.txt
  91. 2
      setup/_metapackage/setup.cfg
  92. 11
      setup/_metapackage/setup.py
  93. 1
      setup/contact_search_form/odoo/addons/contact_search_form
  94. 2
      setup/contact_search_form/setup.cfg
  95. 6
      setup/contact_search_form/setup.py
  96. 2
      setup/privacy/setup.cfg
  97. 2
      setup/privacy_consent/setup.cfg
  98. 1
      setup/privacy_partner_report/odoo/addons/privacy_partner_report
  99. 2
      setup/privacy_partner_report/setup.cfg
  100. 6
      setup/privacy_partner_report/setup.py

4
.editorconfig

@ -7,11 +7,11 @@ indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[.eslintrc,*.{json,yml,yaml,rst,md}]
[*.{json,yml,yaml,rst,md}]
indent_size = 2
# Do not configure editor for libs and autogenerated content
[*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst]
[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
charset = unset
end_of_line = unset
indent_size = unset

180
.eslintrc.yml

@ -0,0 +1,180 @@
env:
browser: true
# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
parserOptions:
ecmaVersion: 2017
# Globals available in Odoo that shouldn't produce errorings
globals:
_: readonly
$: readonly
fuzzy: readonly
jQuery: readonly
moment: readonly
odoo: readonly
openerp: readonly
Promise: readonly
# Styling is handled by Prettier, so we only need to enable AST rules;
# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
rules:
accessor-pairs: warn
array-callback-return: warn
callback-return: warn
capitalized-comments:
- warn
- always
- ignoreConsecutiveComments: true
ignoreInlineComments: true
complexity:
- warn
- 15
constructor-super: warn
dot-notation: warn
eqeqeq: warn
global-require: warn
handle-callback-err: warn
id-blacklist: warn
id-match: warn
init-declarations: error
max-depth: warn
max-nested-callbacks: warn
max-statements-per-line: warn
no-alert: warn
no-array-constructor: warn
no-caller: warn
no-case-declarations: warn
no-class-assign: warn
no-cond-assign: error
no-const-assign: error
no-constant-condition: warn
no-control-regex: warn
no-debugger: error
no-delete-var: warn
no-div-regex: warn
no-dupe-args: error
no-dupe-class-members: error
no-dupe-keys: error
no-duplicate-case: error
no-duplicate-imports: error
no-else-return: warn
no-empty-character-class: warn
no-empty-function: error
no-empty-pattern: error
no-empty: warn
no-eq-null: error
no-eval: error
no-ex-assign: error
no-extend-native: warn
no-extra-bind: warn
no-extra-boolean-cast: warn
no-extra-label: warn
no-fallthrough: warn
no-func-assign: error
no-global-assign: error
no-implicit-coercion:
- warn
- allow: ["~"]
no-implicit-globals: warn
no-implied-eval: warn
no-inline-comments: warn
no-inner-declarations: warn
no-invalid-regexp: warn
no-irregular-whitespace: warn
no-iterator: warn
no-label-var: warn
no-labels: warn
no-lone-blocks: warn
no-lonely-if: error
no-mixed-requires: error
no-multi-str: warn
no-native-reassign: error
no-negated-condition: warn
no-negated-in-lhs: error
no-new-func: warn
no-new-object: warn
no-new-require: warn
no-new-symbol: warn
no-new-wrappers: warn
no-new: warn
no-obj-calls: warn
no-octal-escape: warn
no-octal: warn
no-param-reassign: warn
no-path-concat: warn
no-process-env: warn
no-process-exit: warn
no-proto: warn
no-prototype-builtins: warn
no-redeclare: warn
no-regex-spaces: warn
no-restricted-globals: warn
no-restricted-imports: warn
no-restricted-modules: warn
no-restricted-syntax: warn
no-return-assign: error
no-script-url: warn
no-self-assign: warn
no-self-compare: warn
no-sequences: warn
no-shadow-restricted-names: warn
no-shadow: warn
no-sparse-arrays: warn
no-sync: warn
no-this-before-super: warn
no-throw-literal: warn
no-undef-init: warn
no-undef: error
no-unmodified-loop-condition: warn
no-unneeded-ternary: error
no-unreachable: error
no-unsafe-finally: error
no-unused-expressions: error
no-unused-labels: error
no-unused-vars: error
no-use-before-define: error
no-useless-call: warn
no-useless-computed-key: warn
no-useless-concat: warn
no-useless-constructor: warn
no-useless-escape: warn
no-useless-rename: warn
no-void: warn
no-with: warn
operator-assignment: [error, always]
prefer-const: warn
radix: warn
require-yield: warn
sort-imports: warn
spaced-comment: [error, always]
strict: [error, function]
use-isnan: error
valid-jsdoc:
- warn
- prefer:
arg: param
argument: param
augments: extends
constructor: class
exception: throws
func: function
method: function
prop: property
return: returns
virtual: abstract
yield: yields
preferType:
array: Array
bool: Boolean
boolean: Boolean
number: Number
object: Object
str: String
string: String
requireParamDescription: false
requireReturn: false
requireReturnDescription: false
requireReturnType: false
valid-typeof: warn
yoda: warn

10
.flake8

@ -0,0 +1,10 @@
[flake8]
max-line-length = 80
max-complexity = 16
# B = bugbear
# B9 = bugbear opinionated (incl line length)
select = C,E,F,W,B,B9
# E203: whitespace before ':' (black behaviour)
# E501: flake8 line length (covered by bugbear B950)
# W503: line break before binary operator (black behaviour)
ignore = E203,E501,W503

36
.gitignore

@ -5,24 +5,6 @@ __pycache__/
# C extensions
*.so
# Distribution / packaging
.Python
env/
bin/
build/
develop-eggs/
dist/
eggs/
# Project specific
oca.cfg
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
*.so
# Distribution / packaging
.Python
env/
@ -39,7 +21,6 @@ var/
*.egg-info/
.installed.cfg
*.egg
*.eggs
# Installer logs
pip-log.txt
@ -55,23 +36,10 @@ coverage.xml
# Translations
*.mo
*.pot
# Pycharm
.idea
# Eclipse
.settings
# Visual Studio cache/options directory
.vs/
# OSX Files
.DS_Store
# Django stuff:
*.log
# Mr Developer
.mr.developer.cfg
.project
@ -87,5 +55,5 @@ docs/_build/
*~
*.swp
# OCA rules
!static/lib/
# OSX Files
*.DS_Store

12
.isort.cfg

@ -0,0 +1,12 @@
[settings]
; see https://github.com/psf/black
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
combine_as_imports=True
use_parentheses=True
line_length=88
known_odoo=odoo
known_odoo_addons=odoo.addons
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
default_section=THIRDPARTY

103
.pre-commit-config.yaml

@ -0,0 +1,103 @@
exclude: |
(?x)
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
# Maybe reactivate this when all README files include prettier ignore tags?
^README\.md$|
# Library files can have extraneous formatting (even minimized)
/static/(src/)?lib/|
# Repos using Sphinx to generate docs don't need prettying
^docs/_templates/.*\.html$|
# You don't usually want a bot to modify your legal texts
(LICENSE.*|COPYING.*)
default_language_version:
python: python3
node: "14.13.0"
repos:
- repo: https://github.com/psf/black
rev: 19.10b0
hooks:
- id: black
- repo: https://github.com/prettier/pre-commit
rev: "v1.19.1"
hooks:
- id: prettier
# TODO Avoid awebdeveloper/pre-commit-prettier if possible
# HACK https://github.com/prettier/prettier/issues/7407
- repo: https://github.com/awebdeveloper/pre-commit-prettier
rev: v0.0.1
hooks:
- id: prettier
name: prettier xml plugin
additional_dependencies:
- "prettier@1.19.1"
- "@prettier/plugin-xml@0.7.2"
files: \.xml$
- repo: https://github.com/pre-commit/mirrors-eslint
rev: v6.8.0
hooks:
- id: eslint
verbose: true
args:
- --color
- --fix
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.4.0
hooks:
- id: trailing-whitespace
# exclude autogenerated files
exclude: /README\.rst$|\.pot?$
- id: end-of-file-fixer
# exclude autogenerated files
exclude: /README\.rst$|\.pot?$
- id: debug-statements
- id: fix-encoding-pragma
args: ["--remove"]
- id: check-case-conflict
- id: check-docstring-first
- id: check-executables-have-shebangs
- id: check-merge-conflict
# exclude files where underlines are not distinguishable from merge conflicts
exclude: /README\.rst$|^docs/.*\.rst$
- id: check-symlinks
- id: check-xml
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://gitlab.com/pycqa/flake8
rev: 3.7.9
hooks:
- id: flake8
name: flake8 except __init__.py
exclude: /__init__\.py$
additional_dependencies: ["flake8-bugbear==19.8.0"]
- id: flake8
name: flake8 only __init__.py
args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py
files: /__init__\.py$
additional_dependencies: ["flake8-bugbear==19.8.0"]
- repo: https://github.com/pre-commit/mirrors-pylint
rev: v2.5.3
hooks:
- id: pylint
name: pylint with optional checks
args: ["--rcfile=.pylintrc", "--exit-zero"]
verbose: true
additional_dependencies: ["pylint-odoo==3.5.0"]
- id: pylint
name: pylint with mandatory checks
args: ["--rcfile=.pylintrc-mandatory"]
additional_dependencies: ["pylint-odoo==3.5.0"]
- repo: https://github.com/asottile/pyupgrade
rev: v1.26.2
hooks:
- id: pyupgrade
- repo: https://github.com/pre-commit/mirrors-isort
rev: v4.3.21
hooks:
- id: isort
name: isort except __init__.py
exclude: /__init__\.py$
- repo: https://github.com/acsone/setuptools-odoo
rev: 2.5.2
hooks:
- id: setuptools-odoo-make-default

8
.prettierrc.yml

@ -0,0 +1,8 @@
# Defaults for all prettier-supported languages.
# Prettier will complete this with settings from .editorconfig file.
bracketSpacing: false
printWidth: 88
proseWrap: always
semi: true
trailingComma: "es5"
xmlWhitespaceSensitivity: "ignore"

88
.pylintrc

@ -0,0 +1,88 @@
[MASTER]
load-plugins=pylint_odoo
score=n
[ODOOLINT]
readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest_required_authors=Odoo Community Association (OCA)
manifest_required_keys=license
manifest_deprecated_keys=description,active
license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid_odoo_versions=13.0
[MESSAGES CONTROL]
disable=all
# This .pylintrc contains optional AND mandatory checks and is meant to be
# loaded in an IDE to have it check everything, in the hope this will make
# optional checks more visible to contributors who otherwise never look at a
# green travis to see optional checks that failed.
# .pylintrc-mandatory containing only mandatory checks is used the pre-commit
# config as a blocking check.
enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
manifest-required-author,
manifest-required-key,
manifest-version-format,
method-compute,
method-inverse,
method-required-super,
method-search,
missing-import-error,
missing-manifest-dependency,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
# messages that do not cause the lint step to fail
consider-merging-classes-inherited,
create-user-wo-reset-password,
dangerous-filter-wo-user,
deprecated-module,
file-not-used,
invalid-commit,
missing-newline-extrafiles,
missing-readme,
no-utf8-coding-comment,
odoo-addons-relative-import,
old-api7-method-defined,
redefined-builtin,
too-complex,
unnecessary-utf8-coding-comment
[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no

66
.pylintrc-mandatory

@ -0,0 +1,66 @@
[MASTER]
load-plugins=pylint_odoo
score=n
[ODOOLINT]
readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest_required_authors=Odoo Community Association (OCA)
manifest_required_keys=license
manifest_deprecated_keys=description,active
license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid_odoo_versions=13.0
[MESSAGES CONTROL]
disable=all
enable=anomalous-backslash-in-string,
api-one-deprecated,
api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv,
duplicate-key,
duplicate-xml-fields,
duplicate-xml-record-id,
eval-referenced,
eval-used,
incoherent-interpreter-exec-perm,
license-allowed,
manifest-author-string,
manifest-deprecated-key,
manifest-required-author,
manifest-required-key,
manifest-version-format,
method-compute,
method-inverse,
method-required-super,
method-search,
missing-import-error,
missing-manifest-dependency,
openerp-exception-warning,
pointless-statement,
pointless-string-statement,
print-used,
redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
return-in-init,
rst-syntax-error,
sql-injection,
too-few-format-args,
translation-field,
translation-required,
unreachable,
use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error
[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no

81
.travis.yml

@ -1,67 +1,44 @@
language: python
sudo: false
cache: pip
cache:
directories:
- $HOME/.cache/pip
- $HOME/.cache/pre-commit
python:
# For branches <= 10.0, put `- "2.7.13"`
- "3.5"
- "3.6"
addons:
# By default postgresql-9.1 is installed but there is issue related:
# https://github.com/OCA/maintainer-quality-tools/issues/432#issuecomment-281580935
# Better use higher PostgreSQL version
postgresql: "9.5"
postgresql: "9.6"
apt:
# sources:
# Search your sources alias here:
# https://github.com/travis-ci/apt-source-whitelist/blob/master/ubuntu.json
packages:
- expect-dev # provides unbuffer utility
# Search your packages here:
# https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
# For wkhtmltopdf, see the env section below
# Sometimes complicated website repos need Compass & SaSS:
#before_install:
# - rvm install ruby --latest
# - gem install bootstrap-sass
# - gem install compass --pre
- expect-dev # provides unbuffer utility
stages:
- linting
- test
jobs:
include:
- stage: linting
name: "pre-commit"
before_install:
install: pip install pre-commit
script: pre-commit run --all --show-diff-on-failure --verbose --color always
after_success:
- stage: test
env:
- TESTS="1" ODOO_REPO="odoo/odoo" MAKEPOT="1"
- stage: test
env:
- TESTS="1" ODOO_REPO="OCA/OCB"
env:
global:
- VERSION="11.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0"
# Set this variable to some version existing as linux-generic build on
# https://github.com/wkhtmltopdf/wkhtmltopdf/releases
# if you need to install wkhtmltopdf
# - WKHTMLTOPDF_VERSION="0.12.4"
# Set the above to install a `wkhtmltopdf` version that is not the one provided
# by the `pov-wkhtmltopdf` repo.
- PHANTOMJS_VERSION="latest"
# The above line controls the PhantomJS version that is used for JS testing.
# It is not necessary to include this value unless you are altering the default.
# Use `OS` to skip the PhantomJS upgrade & use the system version instead.
- WEBSITE_REPO="1"
# Use the above line to install dependencies that are required for website repos:
# * SASS & Bootstrap-SASS
# * Compass
matrix:
- LINT_CHECK="1"
# use this to install a standalone database to export .pot files
# - MAKEPOT="1"
# add MAKEPOT="1" to a TEST line to export .pot files from
# the test database after test success
- TESTS="1" ODOO_REPO="odoo/odoo" MAKEPOT="1"
- TESTS="1" ODOO_REPO="OCA/OCB"
# either use the two lines above or the two below. Don't change the default if
# it's not necessary (it is only necessary if modules in your repository can't
# be installed in the same database. And you get a huge speed penalty in your
# tests)
# - TESTS="1.0" ODOO_REPO="odoo/odoo" UNIT_TEST="1"
# - TESTS="1.0" ODOO_REPO="OCA/OCB" UNIT_TEST="1"
- VERSION="13.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0"
install:
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git
${HOME}/maintainer-quality-tools
- export PATH=${HOME}/maintainer-quality-tools/travis:${PATH}
- travis_install_nightly

3
CONTRIBUTING.md

@ -1,6 +1,7 @@
# OCA Guidelines
Please follow the official guide from the [OCA Guidelines page](https://github.com/OCA/maintainer-tools/blob/master/CONTRIBUTING.md).
Please follow the official guide from the
[OCA Guidelines page](https://github.com/OCA/maintainer-tools/blob/master/CONTRIBUTING.md).
## Project Specific Guidelines

16
README.md

@ -1,23 +1,11 @@
[![Runbot Status](https://runbot.odoo-community.org/runbot/badge/flat/263/11.0.svg)](https://runbot.odoo-community.org/runbot/repo/github-com-oca-data-protection-263)
[![Build Status](https://travis-ci.org/OCA/data-protection.svg?branch=11.0)](https://travis-ci.org/OCA/data-protection)
[![Runbot Status](https://runbot.odoo-community.org/runbot/badge/flat/263/13.0.svg)](https://runbot.odoo-community.org/runbot/repo/github-com-oca-data-protection-263)
[![Build Status](https://travis-ci.org/OCA/data-protection.svg?branch=13.0)](https://travis-ci.org/OCA/data-protection)
# Data Protection
Odoo modules for data protection (like GDPR).
[//]: # (addons)
Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
[contact_search_form](contact_search_form/) | 11.0.1.0.0 | | Multiple models can be searched for specified string by DPO
[privacy](privacy/) | 11.0.1.0.0 | | Provides data privacy and protection features to comply to regulations, such as GDPR.
[privacy_consent](privacy_consent/) | 11.0.1.0.0 | | Allow people to explicitly accept or reject inclusion in some activity, GDPR compliant
[privacy_partner_report](privacy_partner_report/) | 11.0.1.0.0 | [![mreficent](https://github.com/mreficent.png?size=30px)](https://github.com/mreficent) | Show the transactions that a specific partner is involved in.
[website_contact_extend](website_contact_extend/) | 11.0.1.0.0 | | Extended Website Contact View
[//]: # (end addons)
----

89
contact_search_form/README.rst

@ -1,89 +0,0 @@
===================
Contact Search Form
===================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github
:target: https://github.com/OCA/data-protection/tree/11.0/contact_search_form
:alt: OCA/data-protection
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-contact_search_form
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/263/11.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
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:
Configuration
=============
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.
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'.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/data-protection/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20contact_search_form%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* IT IS AG
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.
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/11.0/contact_search_form>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

3
contact_search_form/__init__.py

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

33
contact_search_form/__manifest__.py

@ -1,33 +0,0 @@
#####################################################################
#
# 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': '11.0.1.0.0',
'license': 'AGPL-3',
'category': 'Contacts',
'depends': ['base',
'contacts',
],
'data': [
'security/gdpr_security.xml',
'security/ir.model.access.csv',
'views/contact_search.xml',
],
}

156
contact_search_form/i18n/contact_search_form.pot

@ -1,156 +0,0 @@
# 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"
"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
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info_base
msgid "Contact Search"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_uid
msgid "Created by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_date
msgid "Created on"
msgstr ""
#. 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 ""
#. module: contact_search_form
#: model:res.groups,name:contact_search_form.group_dpo
msgid "Data Protection Officer"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_display_name
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_display_name
msgid "Display Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_field_list
msgid "Fields Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_model_id
msgid "Found in Model"
msgstr ""
#. module: contact_search_form
#: code:addons/contact_search_form/models/contact_search.py:20
#, python-format
msgid "Found record"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_id
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_id
msgid "ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view___last_update
#: model:ir.model.fields,field_description:contact_search_form.field_search_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_uid
msgid "Last Updated by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_date
msgid "Last Updated on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_name
msgid "Model Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_id
msgid "Record ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_name
msgid "Record Name"
msgstr ""
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "SEARCH"
msgstr ""
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.dpo_view_tree
msgid "Search Contact"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_search_lines
msgid "Search Result"
msgstr ""
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "Search Results"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_name
msgid "Search Term"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_search_id
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Search Terms"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_model_ids
msgid "Search in Model"
msgstr ""
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "VIEW RECORD"
msgstr ""
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_dpo_view
msgid "dpo.view"
msgstr ""
#. module: contact_search_form
#: model:ir.model,name:contact_search_form.model_search_line
msgid "search.line"
msgstr ""

161
contact_search_form/i18n/de.po

@ -1,161 +0,0 @@
# 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"
"Language: de_DE\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"
#. module: contact_search_form
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info_base
msgid "Contact Search"
msgstr "Kontakt Suche"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_uid
msgid "Created by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_date
msgid "Created on"
msgstr ""
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_display_name
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_display_name
msgid "Display Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_field_list
msgid "Fields Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_model_id
msgid "Found in Model"
msgstr ""
#. module: contact_search_form
#: code:addons/contact_search_form/models/contact_search.py:20
#, python-format
msgid "Found record"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_id
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_id
msgid "ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view___last_update
#: model:ir.model.fields,field_description:contact_search_form.field_search_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_uid
msgid "Last Updated by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_date
msgid "Last Updated on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_name
msgid "Model Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_id
msgid "Record ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_name
msgid "Record Name"
msgstr ""
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_search_lines
#, fuzzy
msgid "Search Result"
msgstr "Suchergebnisse"
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_name
#, fuzzy
msgid "Search Term"
msgstr "Suchbegriffe"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_search_id
#: 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.model.fields,field_description:contact_search_form.field_dpo_view_model_ids
#, fuzzy
msgid "Search in Model"
msgstr "Suchergebnisse"
#. 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"

161
contact_search_form/i18n/en_US.po

@ -1,161 +0,0 @@
# 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"
"Language: \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
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info_base
msgid "Contact Search"
msgstr "Contact Search"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_uid
msgid "Created by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_date
msgid "Created on"
msgstr ""
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_display_name
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_display_name
msgid "Display Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_field_list
msgid "Fields Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_model_id
msgid "Found in Model"
msgstr ""
#. module: contact_search_form
#: code:addons/contact_search_form/models/contact_search.py:20
#, python-format
msgid "Found record"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_id
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_id
msgid "ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view___last_update
#: model:ir.model.fields,field_description:contact_search_form.field_search_line___last_update
msgid "Last Modified on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_uid
msgid "Last Updated by"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_date
msgid "Last Updated on"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_name
msgid "Model Name"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_id
msgid "Record ID"
msgstr ""
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_name
msgid "Record Name"
msgstr ""
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_search_lines
#, fuzzy
msgid "Search Result"
msgstr "Search Results"
#. 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.model.fields,field_description:contact_search_form.field_dpo_view_name
#, fuzzy
msgid "Search Term"
msgstr "Search Terms"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_search_id
#: 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.model.fields,field_description:contact_search_form.field_dpo_view_model_ids
#, fuzzy
msgid "Search in Model"
msgstr "Search Results"
#. 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"

158
contact_search_form/i18n/fr.po

@ -1,158 +0,0 @@
# 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"
"PO-Revision-Date: 2019-01-27 16:03+0000\n"
"Last-Translator: Nicolas JEUDY <njeudy@panda-chi.io>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.4\n"
#. module: contact_search_form
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info_base
msgid "Contact Search"
msgstr "Rechercher un contact"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_uid
msgid "Created by"
msgstr "Créé par"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_date
msgid "Created on"
msgstr "Crée le"
#. 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 "Infos client"
#. module: contact_search_form
#: model:res.groups,name:contact_search_form.group_dpo
msgid "Data Protection Officer"
msgstr "Délégué à la protection des données"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_display_name
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_display_name
msgid "Display Name"
msgstr "Nom d'affichage"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_field_list
msgid "Fields Name"
msgstr "Nom des champs"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_model_id
msgid "Found in Model"
msgstr "Trouvé dans le modèle"
#. module: contact_search_form
#: code:addons/contact_search_form/models/contact_search.py:20
#, python-format
msgid "Found record"
msgstr "Enregistrement trouvé"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_id
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_id
msgid "ID"
msgstr "ID"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view___last_update
#: model:ir.model.fields,field_description:contact_search_form.field_search_line___last_update
msgid "Last Modified on"
msgstr "Modifié le"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_uid
msgid "Last Updated by"
msgstr "Mis à jour par"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_date
msgid "Last Updated on"
msgstr "Mis à jour le"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_name
msgid "Model Name"
msgstr "Nom du Modèle"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_id
msgid "Record ID"
msgstr "ID de l'enregistrement"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_name
msgid "Record Name"
msgstr "Nom de l'enregistrement"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "SEARCH"
msgstr "RECHERCHER"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.dpo_view_tree
msgid "Search Contact"
msgstr "Rechercher un Contact"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_search_lines
msgid "Search Result"
msgstr "Résultat de la recherche"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "Search Results"
msgstr "Résultats de la recherche"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_name
msgid "Search Term"
msgstr "Critère de recherche"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_search_id
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Search Terms"
msgstr "Critères de recherche"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_model_ids
msgid "Search in Model"
msgstr "Rechercher dans un Modèle"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "VIEW RECORD"
msgstr "Voir l'enregistrement"
#. 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"

158
contact_search_form/i18n/it.po

@ -1,158 +0,0 @@
# 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"
"PO-Revision-Date: 2019-03-20 12:14+0000\n"
"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.5.1\n"
#. module: contact_search_form
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info
#: model:ir.ui.menu,name:contact_search_form.menu_customer_info_base
msgid "Contact Search"
msgstr "Ricerca contatto"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_uid
msgid "Created by"
msgstr "Creato da"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_create_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_create_date
msgid "Created on"
msgstr "Creato il"
#. 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 "Informazioni cliente"
#. module: contact_search_form
#: model:res.groups,name:contact_search_form.group_dpo
msgid "Data Protection Officer"
msgstr "Responsabile protezione dati (DPO)"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_display_name
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_field_list
msgid "Fields Name"
msgstr "Nome campi"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_model_id
msgid "Found in Model"
msgstr "Trovato nel modello"
#. module: contact_search_form
#: code:addons/contact_search_form/models/contact_search.py:20
#, python-format
msgid "Found record"
msgstr "Trovato record"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_id
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_id
msgid "ID"
msgstr "ID"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view___last_update
#: model:ir.model.fields,field_description:contact_search_form.field_search_line___last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_uid
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_write_date
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_name
msgid "Model Name"
msgstr "Nome modello"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_id
msgid "Record ID"
msgstr "ID record"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_record_name
msgid "Record Name"
msgstr "Nome record"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "SEARCH"
msgstr "RICERCA"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.dpo_view_tree
msgid "Search Contact"
msgstr "Ricerca contatto"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_search_lines
msgid "Search Result"
msgstr "Risultato ricerca"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "Search Results"
msgstr "Risultati ricerca"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_name
msgid "Search Term"
msgstr "Termine di ricerca"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_search_line_search_id
#: model:ir.ui.view,arch_db:contact_search_form.view_dpo_form_view_itis
msgid "Search Terms"
msgstr "Termini di ricerca"
#. module: contact_search_form
#: model:ir.model.fields,field_description:contact_search_form.field_dpo_view_model_ids
msgid "Search in Model"
msgstr "Ricerca nel modello"
#. module: contact_search_form
#: model:ir.ui.view,arch_db:contact_search_form.search_line_tree_view_itis
msgid "VIEW RECORD"
msgstr ""
#. 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

@ -1,3 +0,0 @@
# 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

@ -1,84 +0,0 @@
# 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[self.model_id.model].browse([
self.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

@ -1,3 +0,0 @@
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

@ -1,2 +0,0 @@
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

@ -1,9 +0,0 @@
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

@ -1,8 +0,0 @@
<?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

@ -1,3 +0,0 @@
"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

Before

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

431
contact_search_form/static/description/index.html

@ -1,431 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Contact Search Form</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="contact-search-form">
<h1 class="title">Contact Search Form</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/contact_search_form"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-contact_search_form"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>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.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>To access contact search view in contacts view, the user has to activate the ‘Data Protection Officer’ checkbox
in User -&gt; Technical Settings.
After that a new menu item ‘Contact Search’ will appear in the Contacts App.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<p>The new menu Contact Search is located in the Contacts App</p>
<p>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’.</p>
<p>The search results are stored and can be accessed at a later time from the
tree view of ‘Contact Search’.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/data-protection/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20contact_search_form%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>IT IS AG</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/contact_search_form">OCA/data-protection</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

79
contact_search_form/views/contact_search.xml

@ -1,79 +0,0 @@
<?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>

4
oca_dependencies.txt

@ -1,4 +0,0 @@
# List the OCA project dependencies, one per line
# Add a repository url and branch if you need a forked version
#
reporting-engine

11
privacy/README.rst

@ -14,13 +14,13 @@ Data Privacy and Protection
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github
:target: https://github.com/OCA/data-protection/tree/11.0/privacy
:target: https://github.com/OCA/data-protection/tree/13.0/privacy
:alt: OCA/data-protection
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy
:target: https://translation.odoo-community.org/projects/data-protection-13-0/data-protection-13-0-privacy
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/263/11.0
:target: https://runbot.odoo-community.org/runbot/263/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -49,7 +49,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/data-protection/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20privacy%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20privacy%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
@ -67,6 +67,7 @@ Contributors
* Miquel Raïch <miquel.raich@eficent.com>
* Daniel Reis <dreis.pt@hotmail.com>
* Nicolas JEUDY <https://github.com/njeudy>
Maintainers
~~~~~~~~~~~
@ -81,6 +82,6 @@ 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.
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/11.0/privacy>`_ project on GitHub.
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/13.0/privacy>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

40
privacy/__manifest__.py

@ -1,28 +1,22 @@
# Copyright 2018 Eficent Business and IT Consulting Services S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
'name': 'Data Privacy and Protection',
'version': '11.0.1.0.0',
'category': 'Data Protection',
'summary': 'Provides data privacy and protection features '
'to comply to regulations, such as GDPR.',
'author': "Eficent, "
"Tecnativa, "
"Odoo Community Association (OCA)",
'website': 'http://www.github.com/OCA/data-protection',
'license': 'AGPL-3',
'data': [
'security/data_protection.xml',
'security/ir.model.access.csv',
'views/data_protection_menu_view.xml',
'views/privacy_activity_view.xml',
"name": "Data Privacy and Protection",
"version": "13.0.1.0.1",
"category": "Data Protection",
"summary": "Provides data privacy and protection features "
"to comply to regulations, such as GDPR.",
"author": "Eficent, " "Tecnativa, " "Odoo Community Association (OCA)",
"website": "http://www.github.com/OCA/data-protection",
"license": "AGPL-3",
"data": [
"security/data_protection.xml",
"security/ir.model.access.csv",
"views/data_protection_menu_view.xml",
"views/privacy_activity_view.xml",
],
'demo': [
'demo/res_users.xml',
],
'depends': [
'mail',
],
'installable': True,
'application': True,
"demo": ["demo/res_users.xml"],
"depends": ["mail"],
"installable": True,
"application": True,
}

6
privacy/demo/res_users.xml

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="base.user_demo" model="res.users">
<field name="groups_id" eval="[(4, ref('group_data_protection_user'))]"/>
<field name="groups_id" eval="[(4, ref('group_data_protection_user'))]" />
</record>
</data>

286
privacy/i18n/de.po

@ -1,77 +1,91 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy
# * privacy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-07-31 14:44+0000\n"
"Last-Translator: Malin Kienke <malin.kienke@initos.com>\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.7.1\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Aktiv"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Tätigkeiten"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
msgid "Activity State"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Archiviert"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "Sind betroffene Personen in der Datenbank enthalten?"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Klicken Sie hier, um eine Verarbeitungstätigkeit hinzuzufügen."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Verantwortlicher"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Erstellt von"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Erstellt am"
msgstr ""
#. module: privacy
#: model:ir.module.category,name:privacy.module_category_data_protection
msgid "Data Protection"
msgstr "Datenschutz"
msgstr ""
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_manager
msgid "Data Protection Manager"
msgstr "Datenschutzbeauftragter"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_config
msgid "Data Protection Settings"
msgstr "Datenschutzeinstellungen"
msgstr ""
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_user
@ -81,126 +95,264 @@ msgstr ""
#. module: privacy
#: model:ir.model,name:privacy.model_privacy_activity
msgid "Data processing activities"
msgstr "Verarbeitungstätigkeiten"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
msgid "Data processing activities define why, how and what you do\n"
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Zuordnung betroffener Personen"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Beschreibung"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Anzeigename"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Gruppieren nach"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "Wie werden hier personenbezogene Daten verwendet? Warum? Etc."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr "Letzte Änderung am"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert von"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr "Stammdaten"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr "Bezeichnung"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr "Partner"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr "Datenschutz"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr "Auftragsverarbeiter"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_report
msgid "Reports"
msgstr "Berichte"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr "Auswahlfilter, um bestimmte betroffene Personen auszuwählen."
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_setting
msgid "Settings"
msgstr "Einstellungen"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Subjects details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
msgid "Transactions"
msgstr "Vorgänge"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
msgid "Whoever determines the purposes and means of the processing of personal data."
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
"Die Stelle, welche über die Zwecke und Mittel der Verarbeitung von "
"personenbezogenen Daten entscheidet."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr ""
"Die Stelle, die personenbezogene Daten im Auftrag des Verantwortlichen "
"verarbeitet."
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "processors"
msgstr ""

215
privacy/i18n/es.po

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-11 08:39+0000\n"
"PO-Revision-Date: 2019-02-04 14:50+0000\n"
"PO-Revision-Date: 2019-03-01 10:52+0000\n"
"Last-Translator: Marta Vázquez Rodríguez <vazrodmar@gmail.com>\n"
"Language-Team: \n"
"Language: es\n"
@ -18,44 +18,61 @@ msgstr ""
"X-Generator: Weblate 3.4\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Activa"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Actividades"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
#, fuzzy
msgid "Activity State"
msgstr "Actividades"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Archivada"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "¿Los sujetos interesados se encuentran en esta base de datos?"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Pulse para añadir una actividad de tratamiento de datos."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Responsable"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Creado el"
@ -72,7 +89,7 @@ msgstr "Gestor de protección de datos"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_config
msgid "Data Protection Settings"
msgstr "Usuario de protección de datos"
msgstr "Configuración Protección de Datos"
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_user
@ -85,7 +102,7 @@ msgid "Data processing activities"
msgstr "Actividades de tratamiento de datos"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
@ -94,79 +111,180 @@ msgstr ""
"\t\tcon los datos personales de los interesados."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Definir interesados"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Descripción"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Detalles"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Agrupar por"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "¿Cómo se usan los datos personales aquí? ¿Por qué? Etc."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr "ID"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr "Datos maestros"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr "Nombre"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr "Contactos"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr "Privacidad"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr "Encargados del tratamiento"
@ -176,7 +294,12 @@ msgid "Reports"
msgstr "Informes"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr ""
"Filtro de selección para encontrar los interesados específicos incluidos."
@ -187,17 +310,47 @@ msgid "Settings"
msgstr "Configuración"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
#, fuzzy
msgid "Subjects details"
msgstr "Filtro de interesados"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr "Filtro de interesados"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
msgid "Transactions"
msgstr "Transacciones"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr ""
@ -205,6 +358,12 @@ msgstr ""
"personales."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr "Quien procesa los datos personales en nombre del responsable."
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
#, fuzzy
msgid "processors"
msgstr "Encargados del tratamiento"

293
privacy/i18n/fr.po

@ -1,207 +1,358 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy
# * privacy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-01-27 16:03+0000\n"
"Last-Translator: Nicolas JEUDY <njeudy@panda-chi.io>\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.4\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Actif"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Traitements"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
msgid "Activity State"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Archivé"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "Est ce que les personnes impactées sont dans cette base de données ?"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Cliquez pour ajouter un traitement au registre."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Responsable"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Créé par"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Créé le"
msgstr ""
#. module: privacy
#: model:ir.module.category,name:privacy.module_category_data_protection
msgid "Data Protection"
msgstr "Protection des données"
msgstr ""
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_manager
msgid "Data Protection Manager"
msgstr "Responsable des traitements"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_config
msgid "Data Protection Settings"
msgstr "Protection des données - Paramètres"
msgstr ""
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_user
msgid "Data Protection User"
msgstr "Protection des données - Utilisateur"
msgstr ""
#. module: privacy
#: model:ir.model,name:privacy.model_privacy_activity
msgid "Data processing activities"
msgstr "Traitements des données personnelles"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
msgid "Data processing activities define why, how and what you do\n"
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
msgstr ""
"Le registre des traitements des données personnelles définit\n"
"…………pourquoi et comment sont utilisées les données personnelles."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Filtrer les personnes impactées"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Description"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Détails"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Nom affiché"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Grouper par"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "Comment sont utilisées les données personnelles ? Pourquoi ? Etc."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr "ID"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr "Modificatié le"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr "Mis à jour par"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr "Mis à jour le"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr "Registre(s)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr "Nom"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr "Contacts"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr "Vie privée"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr "Sous-traitants"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_report
msgid "Reports"
msgstr "Rapports"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr "Ajouter des filtres pour associer les personnes concernées."
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_setting
msgid "Settings"
msgstr "Configuration"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Subjects details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr "Filtre des personnes concernées"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
#, fuzzy
msgid "Transactions"
msgstr "Traitements"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
msgid "Whoever determines the purposes and means of the processing of personal data."
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
"Personnes définissant les finalités et les raisons du traitement des "
"données personnelles."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr "Sous-traitants utilisant ces données personnelles."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "processors"
msgstr ""

362
privacy/i18n/hr.po

@ -0,0 +1,362 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-11-14 16:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr "Potrebna radnja"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Aktivan"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Aktivnosti"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
#, fuzzy
msgid "Activity State"
msgstr "Aktivnosti"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Arhivirano"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "Jesu li dotični subjekti prisutni u ovoj bazi?"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr "Broj priloga"
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Kliknite za dodavanje aktivnosti obrade podataka."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Kontroler"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: privacy
#: model:ir.module.category,name:privacy.module_category_data_protection
msgid "Data Protection"
msgstr "Zaštita podataka"
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_manager
msgid "Data Protection Manager"
msgstr "Upravlja zaštitom podataka"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_config
msgid "Data Protection Settings"
msgstr "Postavke zaštite podataka"
#. module: privacy
#: model:res.groups,name:privacy.group_data_protection_user
msgid "Data Protection User"
msgstr "Korisnik zaštite podataka"
#. module: privacy
#: model:ir.model,name:privacy.model_privacy_activity
msgid "Data processing activities"
msgstr "Aktivnosti obrade podataka"
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Definirajte subjekte"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Opis"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Pojedinosti"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Naziv"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr "Pratitelji"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr "Pratitelji (kanali)"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr "Pratitelji (partneri)"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Grupiraj po"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "Kako su ovdje korišteni osobni podaci? Zašto? itd..."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr "ID"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr "Ako je označeno, nove poruke zahtijevaju važu pozornost."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Ako je označeno, nove poruke zahtijevaju važu pozornost."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr "Je pratitelj"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr "Poruke"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_report
msgid "Reports"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_setting
msgid "Settings"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Subjects details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
msgid "Transactions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "processors"
msgstr ""

232
privacy/i18n/it.po

@ -1,10 +1,10 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy
# * privacy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-06-06 22:20+0000\n"
"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>\n"
@ -17,44 +17,61 @@ msgstr ""
"X-Generator: Weblate 3.6.1\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr "Richiesta azione"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Attiva"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Attività"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
#, fuzzy
msgid "Activity State"
msgstr "Attività"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Archiviata"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "I soggetti interessati sono presenti nel database?"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr "Numero allegati"
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Fare clic per aggiungere un'attività di elaborazione dei dati."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Titolare trattamento"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Creato il"
@ -84,8 +101,9 @@ msgid "Data processing activities"
msgstr "Attività di elaborazione dei dati"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
msgid "Data processing activities define why, how and what you do\n"
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
msgstr ""
"Le attività di elaborazione dei dati definiscono perché, come e cosa viene "
@ -93,81 +111,182 @@ msgstr ""
" dei dati personali dei soggetti interessati."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Indicare soggetti"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Descrizione"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Dettagli"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr "Follower"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr "Follower (canali)"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr "Follower (partner)"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Raggruppa per"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "Come vengono usati i dati personali? Perché? Ecc."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr "ID"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr "Se selezionato, nuovi messaggi richiedono attenzione."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Se selezionato, nuovi messaggi richiedono attenzione."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Se selezionato, alcuni messaggi presentano un errore di consegna."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr "È un follower"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr "Allegato principale"
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr "Dati principali"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr "Errore di consegna messaggio"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr "Messaggi"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr "Nome"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr "Numero di azioni"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr "Numero di errori"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "Numero di messaggi che richiedono un'azione"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Numero di messaggi con errore di consegna"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr "Numero di messaggi non letti"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr "Partner"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr "Privacy"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr "Responsabili del trattamento"
msgstr "Responsabile trattamento"
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_report
@ -175,9 +294,15 @@ msgid "Reports"
msgstr "Informative"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr "Filtro di selezione per trovare specifici soggetti interessati inclusi."
msgstr ""
"Filtro di selezione per trovare specifici soggetti interessati inclusi."
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_setting
@ -185,9 +310,28 @@ msgid "Settings"
msgstr "Impostazioni"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Subjects details"
msgstr "Dettagli soggetti interessati"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr "Filtro per soggetti interessati"
msgstr "Filtro soggetti interessati"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
@ -195,11 +339,29 @@ msgid "Transactions"
msgstr "Operazioni"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
msgid "Whoever determines the purposes and means of the processing of personal data."
msgstr "Chiunque determini i fini e i mezzi di elaborazione dei dati personali."
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr "Messaggi non letti"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr "Numero messaggi non letti"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr ""
"Chiunque determini i fini e i mezzi di elaborazione dei dati personali."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr "Chiunque elabori dati personali per conto del titolare del trattamento."
msgstr ""
"Chiunque elabori dati personali per conto del titolare del trattamento."
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "processors"
msgstr "responsabili trattamento"

228
privacy/i18n/privacy.pot

@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy
# * privacy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -14,44 +14,66 @@ msgstr ""
"Plural-Forms: \n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
msgid "Activity State"
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr ""
@ -81,72 +103,170 @@ msgid "Data processing activities"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
msgid "Data processing activities define why, how and what you do\n"
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr ""
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_exception_icon
msgid "Icon"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
@ -159,7 +279,8 @@ msgid "Privacy"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr ""
@ -169,7 +290,17 @@ msgid "Reports"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr ""
@ -179,7 +310,21 @@ msgid "Settings"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Subjects details"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr ""
@ -189,12 +334,33 @@ msgid "Transactions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
msgid "Whoever determines the purposes and means of the processing of personal data."
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal "
"data."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "processors"
msgstr ""

211
privacy/i18n/pt.po

@ -14,44 +14,61 @@ msgstr ""
"X-Generator: Weblate 3.1.1\n"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_active
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__active
msgid "Active"
msgstr "Ativo"
#. module: privacy
#: model:ir.actions.act_window,name:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_ids
#: model:ir.ui.menu,name:privacy.menu_privacy_activity
msgid "Activities"
msgstr "Atividades"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_state
#, fuzzy
msgid "Activity State"
msgstr "Atividades"
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Archived"
msgstr "Arquivado"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_find
msgid "Are affected subjects present in this database?"
msgstr "Os titulares afetados estão presentes nesta base de dados?"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid "Click to add a data processing activity."
msgstr "Clique para adicionar uma atividade de processamento de dados."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_controller_id
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__controller_id
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Controller"
msgstr "Controlador"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_create_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__create_date
msgid "Created on"
msgstr "Criado em"
@ -82,7 +99,7 @@ msgid "Data processing activities"
msgstr "Atividades de processamento de dados"
#. module: privacy
#: model:ir.actions.act_window,help:privacy.activity_action
#: model_terms:ir.actions.act_window,help:privacy.activity_action
msgid ""
"Data processing activities define why, how and what you do\n"
" with subjects' personal data."
@ -91,79 +108,180 @@ msgstr ""
"os dados pessoais dos titulares."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_find
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_find
msgid "Define subjects"
msgstr "Definir titulares"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_description
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__description
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Description"
msgstr "Descrição"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_form
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Details"
msgstr "Detalhes"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_display_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__display_name
msgid "Display Name"
msgstr "Nome a Exibir"
#. module: privacy
#: model:ir.ui.view,arch_db:privacy.activity_search
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_search
msgid "Group By"
msgstr "Agrupar Por"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_description
#: model:ir.model.fields,help:privacy.field_privacy_activity__description
msgid "How is personal data used here? Why? Etc."
msgstr "Como são usados os dados pessoais aqui? Porquê? Etc."
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__id
msgid "ID"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity___last_update
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread
msgid "If checked new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_uid
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_uid
msgid "Last Updated by"
msgstr "Última Atualização por"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_write_date
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_master_data
msgid "Master Data"
msgstr "Dados Principais"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_name
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_ids
msgid "Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__name
msgid "Name"
msgstr "Nome"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Overdue"
msgstr ""
#. module: privacy
#: model:ir.actions.act_window,name:privacy.action_data_protection_partner_form
#: model:ir.ui.menu,name:privacy.menu_data_protection_partner
msgid "Partners"
msgstr "Parceiros"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Planned"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.parent_menu_data_protection
msgid "Privacy"
msgstr "Privacidade"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__processor_ids
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
msgid "Processors"
msgstr "Processadores"
@ -173,7 +291,12 @@ msgid "Reports"
msgstr "Relatórios"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__subject_domain
msgid "Selection filter to find specific subjects included."
msgstr "Filtro de seleção para procurar titulares específicos incluídos."
@ -183,22 +306,58 @@ msgid "Settings"
msgstr "Configurações"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity_subject_domain
#: model:ir.model.fields,help:privacy.field_privacy_activity__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
#, fuzzy
msgid "Subjects details"
msgstr "Filtro de titulares"
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__subject_domain
msgid "Subjects filter"
msgstr "Filtro de titulares"
#. module: privacy
#: selection:privacy.activity,activity_state:0
msgid "Today"
msgstr ""
#. module: privacy
#: model:ir.ui.menu,name:privacy.menu_data_protection_transaction
msgid "Transactions"
msgstr "Transações"
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_controller_id
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy
#: model:ir.model.fields,field_description:privacy.field_privacy_activity__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity__controller_id
msgid ""
"Whoever determines the purposes and means of the processing of personal data."
msgstr "Quem determina os fins e meios do processamento de dados pessoais."
#. module: privacy
#: model:ir.model.fields,help:privacy.field_privacy_activity_processor_ids
#: model:ir.model.fields,help:privacy.field_privacy_activity__processor_ids
msgid "Whoever processes personal data on behalf of the controller."
msgstr "Quem processa dados pessoais em nome do controlador."
#. module: privacy
#: model_terms:ir.ui.view,arch_db:privacy.activity_form
#, fuzzy
msgid "processors"
msgstr "Processadores"

23
privacy/models/privacy_activity.py

@ -7,20 +7,12 @@ from odoo import api, fields, models
class PrivacyActivity(models.Model):
_name = "privacy.activity"
_description = "Data processing activities"
_inherit = "mail.thread"
_inherit = ["mail.thread", "mail.activity.mixin"]
active = fields.Boolean(
default=True,
index=True,
)
name = fields.Char(
index=True,
required=True,
translate=True,
)
active = fields.Boolean(default=True, index=True,)
name = fields.Char(index=True, required=True, translate=True,)
description = fields.Html(
translate=True,
help="How is personal data used here? Why? Etc."
translate=True, help="How is personal data used here? Why? Etc."
)
controller_id = fields.Many2one(
"res.partner",
@ -28,7 +20,7 @@ class PrivacyActivity(models.Model):
required=True,
default=lambda self: self._default_controller_id(),
help="Whoever determines the purposes and means of the processing "
"of personal data.",
"of personal data.",
)
processor_ids = fields.Many2many(
"res.partner",
@ -37,8 +29,7 @@ class PrivacyActivity(models.Model):
help="Whoever processes personal data on behalf of the controller.",
)
subject_find = fields.Boolean(
"Define subjects",
help="Are affected subjects present in this database?",
"Define subjects", help="Are affected subjects present in this database?",
)
subject_domain = fields.Char(
"Subjects filter",
@ -49,4 +40,4 @@ class PrivacyActivity(models.Model):
@api.model
def _default_controller_id(self):
"""By default it should be the current user's company."""
return self.env.user.company_id
return self.env.user.company_id.partner_id

1
privacy/readme/CONTRIBUTORS.rst

@ -1,2 +1,3 @@
* Miquel Raïch <miquel.raich@eficent.com>
* Daniel Reis <dreis.pt@hotmail.com>
* Nicolas JEUDY <https://github.com/njeudy>

22
privacy/security/data_protection.xml

@ -1,30 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L.
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0) -->
<odoo>
<data noupdate="0">
<data>
<record model="ir.module.category" id="module_category_data_protection">
<field name="name">Data Protection</field>
<field name="sequence">30</field>
</record>
<record id="group_data_protection_user" model="res.groups">
<field name="name">Data Protection User</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="category_id" ref="module_category_data_protection"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
<field name="category_id" ref="module_category_data_protection" />
</record>
<record id="group_data_protection_manager" model="res.groups">
<field name="name">Data Protection Manager</field>
<field name="implied_ids" eval="[(4, ref('privacy.group_data_protection_user'))]"/>
<field name="category_id" ref="module_category_data_protection"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
<field name="implied_ids" eval="[(4, ref('group_data_protection_user'))]" />
<field name="category_id" ref="module_category_data_protection" />
<field name="users" eval="[(4, ref('base.user_admin'))]" />
</record>
<record id="base.user_root" model="res.users">
<field name="groups_id" eval="[(4, ref('group_data_protection_manager'))]"/>
</record>
</data>
</odoo>

7
privacy/static/description/index.html

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/13.0/privacy"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-13-0/data-protection-13-0-privacy"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This application provides data protection and privacy feature,
to comply with regulations such as GDPR.</p>
<p><strong>Table of contents</strong></p>
@ -397,7 +397,7 @@ to comply with regulations such as GDPR.</p>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/data-protection/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20privacy%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20privacy%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
@ -414,6 +414,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<ul class="simple">
<li>Miquel Raïch &lt;<a class="reference external" href="mailto:miquel.raich&#64;eficent.com">miquel.raich&#64;eficent.com</a>&gt;</li>
<li>Daniel Reis &lt;<a class="reference external" href="mailto:dreis.pt&#64;hotmail.com">dreis.pt&#64;hotmail.com</a>&gt;</li>
<li>Nicolas JEUDY &lt;<a class="reference external" href="https://github.com/njeudy">https://github.com/njeudy</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
@ -423,7 +424,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy">OCA/data-protection</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/13.0/privacy">OCA/data-protection</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>

74
privacy/views/data_protection_menu_view.xml

@ -1,47 +1,47 @@
<?xml version="1.0"?>
<?xml version="1.0" ?>
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L.
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0) -->
<data>
<record id="action_data_protection_partner_form" model="ir.actions.act_window">
<field name="name">Partners</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
</record>
<menuitem id="parent_menu_data_protection"
name="Privacy"
groups="group_data_protection_user"
web_icon="privacy,static/description/icon.png"
<menuitem
id="parent_menu_data_protection"
name="Privacy"
groups="group_data_protection_user"
web_icon="privacy,static/description/icon.png"
/>
<menuitem id="menu_data_protection_master_data"
name="Master Data"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="10"
<menuitem
id="menu_data_protection_master_data"
name="Master Data"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="10"
/>
<menuitem id="menu_data_protection_partner"
name="Partners"
parent="menu_data_protection_master_data"
action="action_data_protection_partner_form"
sequence="1010"
<menuitem
id="menu_data_protection_partner"
name="Partners"
parent="menu_data_protection_master_data"
action="action_data_protection_partner_form"
sequence="1010"
/>
<menuitem id="menu_data_protection_transaction"
name="Transactions"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="20"
<menuitem
id="menu_data_protection_transaction"
name="Transactions"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="20"
/>
<menuitem id="menu_data_protection_report"
name="Reports"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="30"
<menuitem
id="menu_data_protection_report"
name="Reports"
parent="parent_menu_data_protection"
groups="group_data_protection_user"
sequence="30"
/>
<record id="action_data_protection_config" model="ir.actions.act_window">
<field name="name">Data Protection Settings</field>
<field name="type">ir.actions.act_window</field>
@ -50,12 +50,12 @@
<field name="target">inline</field>
<field name="context">{'module': 'data_protection'}</field>
</record>
<menuitem id="menu_data_protection_setting"
name="Settings"
parent="parent_menu_data_protection"
action="action_data_protection_config"
groups="group_data_protection_manager"
sequence="90"
<menuitem
id="menu_data_protection_setting"
name="Settings"
parent="parent_menu_data_protection"
action="action_data_protection_config"
groups="group_data_protection_manager"
sequence="90"
/>
</data>

98
privacy/views/privacy_activity_view.xml

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record model="ir.ui.view" id="activity_form">
<field name="name">Privacy Activity Form</field>
<field name="model">privacy.activity</field>
@ -13,85 +12,92 @@
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button
class="oe_stat_button"
icon="fa-archive"
name="toggle_active"
type="object"
>
<field
name="active"
options='{"terminology": "archive"}'
widget="boolean_button"
/>
</button>
<field name="active" invisible="1" />
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name"/></h1>
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" />
</h1>
</div>
<group name="basic">
<group name="owners">
<field name="controller_id"/>
<field
name="processor_ids"
widget="many2many_tags"
/>
<field name="controller_id" />
</group>
<group name="subjects">
<field name="subject_find"/>
<field
name="subject_domain"
widget="domain"
options='{"model": "res.partner"}'
attrs='{"required": [("subject_find", "=", True)],
"invisible": [("subject_find", "=", False)]}'
/>
<group name="dates">
<field name="create_date" readonly="1" />
<field name="write_date" readonly="1" />
<field name="write_uid" readonly="1" />
</group>
</group>
<separator name="subjects" string="Subjects details" />
<group name="subjects">
<field name="subject_find" />
<field
name="subject_domain"
widget="domain"
options='{"model": "res.partner"}'
attrs='{"required": [("subject_find", "=", True)],
"invisible": [("subject_find", "=", False)]}'
/>
</group>
<separator name="processors" string="Processors" />
<group name="processors">
<field name="processor_ids" widget="many2many">
<tree string="processors">
<field name="name" />
<field name="email" />
<field name="country_id" />
</tree>
</field>
</group>
<notebook string="Details" name="advanced">
<page string="Description">
<group>
<field name="description" nolabel="1"/>
<field name="description" nolabel="1" />
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
<field name="message_follower_ids" widget="mail_followers" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="activity_tree">
<field name="name">Privacy Activity Tree</field>
<field name="model">privacy.activity</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="controller_id"/>
<field name="processor_ids"/>
<field name="name" />
<field name="controller_id" />
<field name="processor_ids" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="activity_search">
<field name="name">Privacy Activity Search</field>
<field name="model">privacy.activity</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="controller_id"/>
<field name="processor_ids"/>
<separator/>
<field name="name" />
<field name="controller_id" />
<field name="processor_ids" />
<separator />
<filter
string="Archived"
name="inactive"
domain="[('active', '=', False)]"
/>
<separator/>
<separator />
<group string="Group By" name="groupby">
<filter
name="controller_id_groupby"
@ -102,7 +108,6 @@
</search>
</field>
</record>
<record id="activity_action" model="ir.actions.act_window">
<field name="name">Activities</field>
<field name="res_model">privacy.activity</field>
@ -110,18 +115,17 @@
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a data processing activity.
</p><p>
</p>
<p>
Data processing activities define why, how and what you do
with subjects' personal data.
</p>
</field>
</record>
<menuitem
action="activity_action"
groups="group_data_protection_user"
id="menu_privacy_activity"
parent="menu_data_protection_master_data"
/>
</data>

10
privacy_consent/README.rst

@ -14,13 +14,13 @@ Privacy - Consent
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github
:target: https://github.com/OCA/data-protection/tree/11.0/privacy_consent
:target: https://github.com/OCA/data-protection/tree/13.0/privacy_consent
:alt: OCA/data-protection
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy_consent
:target: https://translation.odoo-community.org/projects/data-protection-13-0/data-protection-13-0-privacy_consent
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/263/11.0
:target: https://runbot.odoo-community.org/runbot/263/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -136,7 +136,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/data-protection/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_consent%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_consent%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
@ -173,6 +173,6 @@ 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.
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/11.0/privacy_consent>`_ project on GitHub.
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/13.0/privacy_consent>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

9
privacy_consent/__manifest__.py

@ -3,8 +3,8 @@
{
"name": "Privacy - Consent",
"summary": "Allow people to explicitly accept or reject inclusion "
"in some activity, GDPR compliant",
"version": "11.0.1.0.0",
"in some activity, GDPR compliant",
"version": "13.0.1.0.3",
"development_status": "Production/Stable",
"category": "Privacy",
"website": "https://github.com/OCA/management-activity",
@ -12,14 +12,13 @@
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"privacy",
],
"depends": ["privacy"],
"data": [
"security/ir.model.access.csv",
"data/ir_actions_server.xml",
"data/ir_cron.xml",
"data/mail.xml",
"templates/assets.xml",
"templates/form.xml",
"views/privacy_consent.xml",
"views/privacy_activity.xml",

39
privacy_consent/controllers/main.py

@ -7,39 +7,36 @@ from werkzeug.exceptions import NotFound
from odoo.http import Controller, request, route
from odoo.addons.web.controllers.main import ensure_db
class ConsentController(Controller):
@route("/privacy/consent/<any(accept,reject):choice>/"
"<int:consent_id>/<token>",
type="http", auth="none", website=True)
@route(
"/privacy/consent/<any(accept,reject):choice>/<int:consent_id>/<token>",
type="http",
auth="public",
website=True,
)
def consent(self, choice, consent_id, token, *args, **kwargs):
"""Process user's consent acceptance or rejection."""
ensure_db()
try:
# If there's a website, we need a user to render the template
request.uid = request.website.user_id.id
except AttributeError:
# If there's no website, the default is OK
pass
consent = request.env["privacy.consent"] \
.with_context(subject_answering=True) \
.sudo().browse(consent_id)
consent = (
request.env["privacy.consent"]
.with_context(subject_answering=True)
.sudo()
.browse(consent_id)
)
if not (consent.exists() and consent._token() == token):
raise NotFound
if consent.partner_id.lang:
consent = consent.with_context(lang=consent.partner_id.lang)
request.context = consent.env.context
consent.action_answer(choice == "accept", self._metadata())
return request.render("privacy_consent.form", {
"consent": consent,
})
return request.render("privacy_consent.form", {"consent": consent})
def _metadata(self):
return (u"User agent: {}\n"
u"Remote IP: {}\n"
u"Date and time: {:%Y-%m-%d %H:%M:%S}").format(
return (
u"User agent: {}\n"
u"Remote IP: {}\n"
u"Date and time: {:%Y-%m-%d %H:%M:%S}"
).format(
request.httprequest.environ.get("HTTP_USER_AGENT"),
request.httprequest.environ.get("REMOTE_ADDRESS"),
datetime.now(),

28
privacy_consent/data/ir_actions_server.xml

@ -1,16 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2019 initOS GmbH - Florian Kantelberg
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="update_opt_out" model="ir.actions.server">
<field name="name">Update partner's opt out</field>
<field name="model_id" ref="model_privacy_consent"/>
<field name="crud_model_id" ref="base.model_res_partner"/>
<record id="sync_blacklist" model="ir.actions.server">
<field name="name">Sync partner's email blacklist status</field>
<field name="model_id" ref="model_privacy_consent" />
<field name="crud_model_id" ref="base.model_res_partner" />
<field name="state">code</field>
<field name="code">records.mapped('partner_id').write({'opt_out': not record.accepted})</field>
<field name="code">
for consent in records:
email = consent.partner_id.email
# Skip records without email, although highly improbable
if not email:
continue
# Choose method to sync acceptance and blacklisting
if consent.accepted:
method = env["mail.blacklist"]._remove
else:
method = env["mail.blacklist"]._add
# Apply user desire
method(email)
</field>
</record>
</data>

7
privacy_consent/data/ir_cron.xml

@ -1,18 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2019 initOS GmbH - Florian Kantelberg
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="cron_auto_consent" model="ir.cron">
<field name="name">Request automatic data processing consents</field>
<field name="model_id" ref="model_privacy_activity"/>
<field name="model_id" ref="model_privacy_activity" />
<field name="state">code</field>
<field name="code">model._cron_new_consents()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
</data>

116
privacy_consent/data/mail.xml

@ -1,42 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2019 Tecnativa - Cristina Martin R.
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<!-- Mail templates -->
<record id="template_consent" model="mail.template">
<field name="auto_delete" eval="False"/>
<field name="auto_delete" eval="False" />
<field name="name">Personal data processing consent request</field>
<field name="subject">Data processing consent request for ${object.activity_id.display_name|safe}</field>
<field name="model_id" ref="model_privacy_consent"/>
<field name="use_default_to" eval="True"/>
<field
name="subject"
>Data processing consent request for ${object.activity_id.display_name|safe}</field>
<field name="model_id" ref="model_privacy_consent" />
<field name="use_default_to" eval="True" />
<field name="lang">${object.partner_id.lang}</field>
<field name="body_html" type="xml">
<div style="background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
<div
style="background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;"
>
<table style="width:600px;margin:5px auto;">
<tbody>
<tr>
<td>
<a href="/">
<img src="/logo" alt="${object.activity_id.controller_id.display_name|safe}" style="vertical-align:baseline;max-width:100px;"/>
<img
src="/logo"
alt="${object.activity_id.controller_id.display_name|safe}"
style="vertical-align:baseline;max-width:100px;"
/>
</a>
</td>
</tr>
</tbody>
</table>
<table style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;">
<table
style="width:600px;margin:0px auto;background:white;border:1px solid #e1e1e1;"
>
<tbody>
<tr>
<td colspan="2" style="padding:15px 20px 0px 20px; font-size:16px;">
<td
colspan="2"
style="padding:15px 20px 0px 20px; font-size:16px;"
>
<p>
Hello, ${object.partner_id.name|safe}
</p>
<p>
We contacted you to ask you to give us your explicit consent to include your data in a data processing activity called
<b>${object.activity_id.display_name|safe}</b>, property of
<i>${object.activity_id.controller_id.display_name|safe}</i>
<b
>${object.activity_id.display_name|safe}</b>, property of
<i
>${object.activity_id.controller_id.display_name|safe}</i>
</p>
${object.description or ""}
<p>
@ -59,19 +72,32 @@
</td>
</tr>
<tr>
<td style="padding:15px 20px 0px 20px; font-size:16px; text-align:right;">
<a href="/privacy/consent/accept/" style="background-color: #449d44; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;">
<td
style="padding:15px 20px 0px 20px; font-size:16px; text-align:right;"
>
<a
href="/privacy/consent/accept/"
style="background-color: #449d44; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;"
>
Accept
</a>
</td>
<td style="padding:15px 20px 0px 20px; font-size:16px; text-align:left;">
<a href="/privacy/consent/reject/" style="background-color: #d9534f; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;">
<td
style="padding:15px 20px 0px 20px; font-size:16px; text-align:left;"
>
<a
href="/privacy/consent/reject/"
style="background-color: #d9534f; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;"
>
Reject
</a>
</td>
</tr>
<tr>
<td colspan="2" style="padding:15px 20px 15px 20px; font-size:16px;">
<td
colspan="2"
style="padding:15px 20px 15px 20px; font-size:16px;"
>
<p>
If you need further information, please respond to this email and we will attend your request as soon as possible.
</p>
@ -88,7 +114,10 @@
<td style="padding-top:10px;font-size: 12px;">
<p>
Sent by
<a href="/" style="color:#717188;">${object.activity_id.controller_id.display_name|safe}</a>.
<a
href="/"
style="color:#717188;"
>${object.activity_id.controller_id.display_name|safe}</a>.
</p>
</td>
</tr>
@ -97,62 +126,61 @@
</div>
</field>
</record>
<!-- Mail subtypes -->
<record id="mt_consent_consent_new" model="mail.message.subtype">
<field name="name">New Consent</field>
<field name="description">Privacy consent request created</field>
<field name="res_model">privacy.consent</field>
<field name="default" eval="False"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="default" eval="False" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
</record>
<record id="mt_consent_acceptance_changed" model="mail.message.subtype">
<field name="name">Acceptance Changed by Subject</field>
<field name="description">Acceptance status updated by subject</field>
<field name="res_model">privacy.consent</field>
<field name="default" eval="False"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="default" eval="False" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
</record>
<record id="mt_consent_state_changed" model="mail.message.subtype">
<field name="name">State Changed</field>
<field name="description">Privacy consent request state changed</field>
<field name="res_model">privacy.consent</field>
<field name="default" eval="False"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="default" eval="False" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
</record>
<record id="mt_activity_consent_new" model="mail.message.subtype">
<field name="name">New Consent</field>
<field name="description">Privacy consent request created</field>
<field name="res_model">privacy.activity</field>
<field name="default" eval="True"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="parent_id" ref="mt_consent_consent_new"/>
<field name="default" eval="True" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
<field name="parent_id" ref="mt_consent_consent_new" />
<field name="relation_field">activity_id</field>
</record>
<record id="mt_activity_acceptance_changed" model="mail.message.subtype">
<field name="name">Acceptance Changed</field>
<field name="description">Privacy consent request acceptance status changed</field>
<field
name="description"
>Privacy consent request acceptance status changed</field>
<field name="res_model">privacy.activity</field>
<field name="default" eval="True"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="parent_id" ref="mt_consent_acceptance_changed"/>
<field name="default" eval="True" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
<field name="parent_id" ref="mt_consent_acceptance_changed" />
<field name="relation_field">activity_id</field>
</record>
<record id="mt_activity_state_changed" model="mail.message.subtype">
<field name="name">State Changed</field>
<field name="description">Privacy consent request state changed</field>
<field name="res_model">privacy.activity</field>
<field name="default" eval="False"/>
<field name="hidden" eval="False"/>
<field name="internal" eval="True"/>
<field name="parent_id" ref="mt_consent_state_changed"/>
<field name="default" eval="False" />
<field name="hidden" eval="False" />
<field name="internal" eval="True" />
<field name="parent_id" ref="mt_consent_state_changed" />
<field name="relation_field">activity_id</field>
</record>
</data>

237
privacy_consent/i18n/de.po

@ -142,70 +142,81 @@ msgid "Acceptance status updated by subject"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_accepted
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Accepted"
msgstr "Akzeptiert"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
msgid "Accepted by default"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_active
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
msgid "Active"
msgstr "Aktiv"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_activity_id
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Activity"
msgstr "Aktivität"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
msgid "Answered"
msgstr "Beantwortet"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Archived"
msgstr "Archiviert"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
msgid "Ask for consent"
msgstr "Einwilligung einholen"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
msgid "Ask subjects for consent"
msgstr "Einwilligung beim Betroffenen einholen"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
msgid "Automatically"
msgstr "Automatisch"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
msgid "Awaiting response"
msgstr "Warten auf Antwort"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Consent"
msgstr "Einwilligung"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_body_html
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
#, fuzzy
msgid "Consent Template Default Body Html"
msgstr "Einverständniserklärung Standardtext html"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_subject
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
#, fuzzy
msgid "Consent Template Default Subject"
msgstr "Standardmäßige Einverständniserklärung Betroffener"
@ -217,26 +228,31 @@ msgstr "Einwilligung in die Datenverarbeitung"
#. module: privacy_consent
#: model:ir.actions.act_window,name:privacy_consent.consent_action
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
#: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
msgid "Consents"
msgstr "Einwilligungen"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
#, fuzzy
msgid "Consents count"
msgstr "Einwilligungen"
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_res_partner
msgid "Contact"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
msgid "Created by"
msgstr "Erstellt von"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
msgid "Created on"
msgstr "Erstellt am"
@ -252,17 +268,17 @@ msgid ""
msgstr "Bitte um Erteilung der Einwilligung zur Datenverarbeitung:"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_display_name
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
msgid "Display Name"
msgstr "Anzeigename"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
msgid "Draft"
msgstr "Entwurf"
#. module: privacy_consent
#: sql_constraint:privacy.consent:0
#: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
msgid "Duplicated partner in this data processing activity"
msgstr "Doppelter Partner in dieser Verarbeitungsaktivität"
@ -272,12 +288,12 @@ msgid "Email Templates"
msgstr "E-Mail-Vorlagen"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
msgid "Email template"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
msgid ""
"Email to be sent to subjects to ask for consent. A good template should "
"include details about the current consent request status, how to change it, "
@ -289,60 +305,87 @@ msgstr ""
"der Einwilligung ändern kann und wo man weitere Informationen erhält."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
msgid ""
"Enable if you need to track any kind of consent from the affected subjects"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
#, fuzzy
msgid "Generate and enqueue missing consent requests"
msgstr "Erstellung und Versand fehlender Einwilligungsanfragen"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate missing draft consent requests"
msgstr "Fehlende Entwürfe von Einwilligungsanfragen erstellen"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:138
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Generated consents"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Group By"
msgstr "Gruppieren nach"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Hello,"
msgstr "Hallo"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>accept</b> this processing of my data"
msgstr "Ich <b>akzeptiere</b> die Verarbeitung meiner Daten"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>reject</b> this processing of my data"
msgstr "Ich <b>lehne</b> die Verarbeitung meiner Daten ab"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
msgid "ID"
msgstr "Ausweis"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "If it was a mistake, you can undo it here:"
msgstr "Wenn es ein Fehler war, können Sie diesen hier rückgängig machen:"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_accepted
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
msgid ""
"Indicates current acceptance status, which can come from subject's last "
"answer, or from the default specified in the related data processing "
@ -353,38 +396,58 @@ msgstr ""
"angegebenen Standard ergeben kann."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
#, fuzzy
msgid "Last Metadata"
msgstr "Letzte Metadaten"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent___last_update
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
msgid "Last Modified on"
msgstr "Letzte Änderung am"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert von"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
msgid "Manually"
msgstr "Manuell"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
msgid "Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
msgid "Metadata from the last acceptance or rejection by the subject"
msgstr "Metadaten aus der letzten Annahme oder Ablehnung durch den Betroffenen"
#. module: privacy_consent
#: code:addons/privacy_consent/models/mail_template.py:24
#: code:addons/privacy_consent/models/mail_template.py:0
#, python-format
msgid ""
"Missing privacy consent link placeholders. You need at least these two "
@ -399,6 +462,31 @@ msgstr ""
msgid "New Consent"
msgstr "Neue Einwilligung"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_mail
msgid "Outgoing Mails"
@ -424,14 +512,14 @@ msgid "Privacy consent request state changed"
msgstr "Status der Anfrage zur Einwilligung geändert"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
msgid "Privacy consent requests amount"
msgstr "Anzahl der Anfragen zur Einwilligung"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
msgid "Privacy consents"
msgstr "Einwilligung zum Datenschutz"
@ -443,35 +531,40 @@ msgid "Request automatic data processing consents"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:99
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Require consent is available only for subjects in current database."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
msgid ""
"Run this action when a new consent request is created or its acceptance "
"status is updated."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
msgid "Server action"
msgstr "Server-Aktion"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
msgid "Should we assume the subject has accepted if we receive no response?"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Sincerely,<br/>"
msgstr "Mit freundlichen Grüßen<br/>"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:91
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Specify a mail template to ask automated consent."
msgstr ""
@ -479,8 +572,8 @@ msgstr ""
"einzuholen."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_state
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "State"
msgstr "Status"
@ -491,27 +584,32 @@ msgid "State Changed"
msgstr "Status geändert"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
msgid "Subject"
msgstr "Betroffener"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
msgid "Subject asked for consent."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.actions.server,name:privacy_consent.sync_blacklist
msgid "Sync partner's email blacklist status"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thank you!"
msgstr "Vielen Dank."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thanks for your response."
msgstr "Vielen Dank für Ihre Antwort."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
#, fuzzy
msgid "This could enqueue many consent emails, are you sure to proceed?"
msgstr ""
@ -519,30 +617,35 @@ msgstr ""
"sicher, dass Sie fortfahren wollen?"
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.update_opt_out
msgid "Update partner's opt out"
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid ""
"We asked you to authorize us to process your data in this data processing "
"activity:"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "We have recorded this action on your side."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-danger\">rejected</b> such processing."
msgstr ""
"Du hast diese Verarbeitungstätigkeit <b class=\"text-danger\">abgelehnt</b>."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-success\">accepted</b> such processing."
msgstr ""
"Du hast dieser Verarbeitungstätigkeit <b class=\"text-success\">zugestimmt</"

242
privacy_consent/i18n/es.po

@ -248,70 +248,81 @@ msgid "Acceptance status updated by subject"
msgstr "Estado de aceptación modificado por el interesado"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_accepted
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Accepted"
msgstr "Aceptado"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
msgid "Accepted by default"
msgstr "Aceptado por defecto"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_active
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
msgid "Active"
msgstr "Activo"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_activity_id
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Activity"
msgstr "Actividad"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
msgid "Answered"
msgstr "Respondido"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Archived"
msgstr "Archivado"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
msgid "Ask for consent"
msgstr "Solicitar consentimiento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
msgid "Ask subjects for consent"
msgstr "Solicitar consentimiento a los interesados"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
msgid "Automatically"
msgstr "Automáticamente"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
msgid "Awaiting response"
msgstr "Esperando respuesta"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Consent"
msgstr "Consentimiento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_body_html
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
#, fuzzy
msgid "Consent Template Default Body Html"
msgstr "HTML por defecto para el cuerpo de la plantilla de consentimiento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_subject
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
#, fuzzy
msgid "Consent Template Default Subject"
msgstr "HTML por defecto para el asunto de la plantilla de consentimiento"
@ -323,26 +334,31 @@ msgstr "Consentimiento para tratamiento de datos"
#. module: privacy_consent
#: model:ir.actions.act_window,name:privacy_consent.consent_action
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
#: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
msgid "Consents"
msgstr "Consents"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
#, fuzzy
msgid "Consents count"
msgstr "Consents"
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_res_partner
msgid "Contact"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
msgid "Created on"
msgstr "Creado el"
@ -360,17 +376,17 @@ msgstr ""
"${object.activity_id.display_name|safe}"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_display_name
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
msgid "Draft"
msgstr "Borrador"
#. module: privacy_consent
#: sql_constraint:privacy.consent:0
#: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
msgid "Duplicated partner in this data processing activity"
msgstr "Contacto duplicado en esta actividad de tratamiento"
@ -380,12 +396,12 @@ msgid "Email Templates"
msgstr "Plantillas de correo electrónico"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
msgid "Email template"
msgstr "Plantilla de correo electrónico"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
msgid ""
"Email to be sent to subjects to ask for consent. A good template should "
"include details about the current consent request status, how to change it, "
@ -396,7 +412,7 @@ msgstr ""
"actual del consentimiento, cómo cambiarlo, y dónde obtener más información."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
msgid ""
"Enable if you need to track any kind of consent from the affected subjects"
msgstr ""
@ -404,55 +420,82 @@ msgstr ""
"interesados"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate and enqueue missing consent requests"
msgstr ""
"Generar y colocar en la bandeja de salida las solicitudes de consentimiento "
"que falten"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate missing draft consent requests"
msgstr "Generar borradores de las solicitudes de consentimiento faltantes"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:138
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Generated consents"
msgstr "Consentimientos generados"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Group By"
msgstr "Agrupar por"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Hello,"
msgstr "Hola,"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>accept</b> this processing of my data"
msgstr "<b>Acepto</b> este tratamiento de mis datos"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>reject</b> this processing of my data"
msgstr "<b>Rechazo</b> este tratamiento de mis datos"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
msgid "ID"
msgstr "ID"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "If it was a mistake, you can undo it here:"
msgstr "Si ha sido un error, puede deshacerlo aquí:"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_accepted
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
msgid ""
"Indicates current acceptance status, which can come from subject's last "
"answer, or from the default specified in the related data processing "
@ -463,39 +506,59 @@ msgstr ""
"actividad de tratamiento relacionada."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
#, fuzzy
msgid "Last Metadata"
msgstr "Últimos metadatos"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent___last_update
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
msgid "Manually"
msgstr "Manualmente"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
msgid "Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
msgid "Metadata from the last acceptance or rejection by the subject"
msgstr ""
"Metadatos de la última aceptación o denegación por parte del interesado"
#. module: privacy_consent
#: code:addons/privacy_consent/models/mail_template.py:24
#: code:addons/privacy_consent/models/mail_template.py:0
#, python-format
msgid ""
"Missing privacy consent link placeholders. You need at least these two "
@ -514,6 +577,31 @@ msgstr ""
msgid "New Consent"
msgstr "Nuevo consentimiento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_mail
msgid "Outgoing Mails"
@ -542,14 +630,14 @@ msgstr ""
"cambiado"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
msgid "Privacy consent requests amount"
msgstr "Cantidad de solicitudes de consentimiento para el tratamiento de datos"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
msgid "Privacy consents"
msgstr "Consentimientos para el tratamiento de datos"
@ -561,7 +649,7 @@ msgid "Request automatic data processing consents"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:99
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Require consent is available only for subjects in current database."
msgstr ""
@ -569,7 +657,7 @@ msgstr ""
"se encuentren en esta misma base de datos."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
msgid ""
"Run this action when a new consent request is created or its acceptance "
"status is updated."
@ -578,23 +666,28 @@ msgstr ""
"cuando su estado de aceptación cambie."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
msgid "Server action"
msgstr "Acción de servidor"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
msgid "Should we assume the subject has accepted if we receive no response?"
msgstr ""
"¿Hay que asumir que el interesado ha aceptado si no recibimos respuesta?"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Sincerely,<br/>"
msgstr "Atentamente,<br/>"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:91
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Specify a mail template to ask automated consent."
msgstr ""
@ -602,8 +695,8 @@ msgstr ""
"automáticamente el consentimiento."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_state
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "State"
msgstr "Estado"
@ -614,39 +707,49 @@ msgid "State Changed"
msgstr "El estado ha cambiado"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
msgid "Subject"
msgstr "Interesado"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
msgid "Subject asked for consent."
msgstr "Interesado a quien se le pide el consentimiento."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.actions.server,name:privacy_consent.sync_blacklist
msgid "Sync partner's email blacklist status"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thank you!"
msgstr "¡Gracias!"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thanks for your response."
msgstr "Gracias por su respuesta."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "This could enqueue many consent emails, are you sure to proceed?"
msgstr ""
"Esto podría poner en la cola muchos correos electrónicos solicitando "
"consentimiento para el tratamiento de datos, ¿seguro que quiere continuar?"
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.update_opt_out
msgid "Update partner's opt out"
msgstr "Sincronizar la opción del contacto para recibir o no envíos masivos"
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid ""
"We asked you to authorize us to process your data in this data processing "
"activity:"
@ -655,17 +758,17 @@ msgstr ""
"esta actividad de tratamiento:"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "We have recorded this action on your side."
msgstr "Hemos registrado esta acción por su parte."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-danger\">rejected</b> such processing."
msgstr "Ha <b class=\"text-danger\">rechazado</b> dicho tratamiento."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-success\">accepted</b> such processing."
msgstr "Ha <b class=\"text-success\">aceptado</b> dicho tratamiento."
@ -674,3 +777,6 @@ msgstr "Ha <b class=\"text-success\">aceptado</b> dicho tratamiento."
#~ msgid "Partner"
#~ msgstr "Contacto"
#~ msgid "Update partner's opt out"
#~ msgstr "Sincronizar la opción del contacto para recibir o no envíos masivos"

494
privacy_consent/i18n/fr.po

@ -6,15 +6,13 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-22 10:47+0000\n"
"Last-Translator: Logan Gônet <logan.gonet@horanet.com>\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: privacy_consent
#: model:mail.template,body_html:privacy_consent.template_consent
@ -124,374 +122,317 @@ msgid ""
" </div>\n"
" "
msgstr ""
"<?xml version=\"1.0\"?>\n"
"<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-"
"family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
" <table style=\"width:600px;margin:5px auto;\">\n"
" <tbody>\n"
" <tr>\n"
" <td>\n"
" <a href=\"/\">\n"
" <img src=\"/logo\" alt=\"${object."
"activity_id.controller_id.display_name|safe}\" style=\"vertical-"
"align:baseline;max-width:100px;\"/>\n"
" </a>\n"
" </td>\n"
" </tr>\n"
" </tbody>\n"
" </table>\n"
" <table style=\"width:600px;margin:0px "
"auto;background:white;border:1px solid #e1e1e1;\">\n"
" <tbody>\n"
" <tr>\n"
" <td colspan=\"2\" style=\"padding:15px 20px 0px "
"20px; font-size:16px;\">\n"
" <p>\n"
" Bonjour, ${object.partner_id.name|safe}\n"
" </p>\n"
" <p>\n"
" Nous vous avons contacté pour vous "
"demander de nous donner votre consentement explicite à inclure vos données "
"dans une activité de traitement de données appelée\n"
" <b>${object.activity_id."
"display_name|safe}</b>, appartenant à \n"
" <i>${object.activity_id.controller_id."
"display_name|safe}</i>\n"
" </p>\n"
" ${object.description or \"\"}\n"
" <p>\n"
" % if object.state == \"answered\":\n"
" La dernière fois vous aviez répondu, "
"vous\n"
" % elif object.state == \"sent\":\n"
" Si vous ne faite rien, nous "
"supposerons que vous avez\n"
" % endif\n"
"\n"
" % if object.accepted:\n"
" <b>accepté</b>\n"
" % else:\n"
" <b>refusé</b>\n"
" % endif\n"
" ce traitement de données.\n"
" </p>\n"
" <p>\n"
" Vous pouvez mettre à jour vos "
"préférences ci-dessous:\n"
" </p>\n"
" </td>\n"
" </tr>\n"
" <tr>\n"
" <td style=\"padding:15px 20px 0px 20px; font-"
"size:16px; text-align:right;\">\n"
" <a href=\"/privacy/consent/accept/\" style"
"=\"background-color: #449d44; padding: 12px; font-weight: 12px; text-"
"decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">\n"
" Accepter\n"
" </a>\n"
" </td>\n"
" <td style=\"padding:15px 20px 0px 20px; font-"
"size:16px; text-align:left;\">\n"
" <a href=\"/privacy/consent/reject/\" style"
"=\"background-color: #d9534f; padding: 12px; font-weight: 12px; text-"
"decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">\n"
" Refuser\n"
" </a>\n"
" </td>\n"
" </tr>\n"
" <tr>\n"
" <td colspan=\"2\" style=\"padding:15px 20px 15px "
"20px; font-size:16px;\">\n"
" <p>\n"
" Si vous avez besoin de plus "
"d'informations, veuillez répondre à cet e-mail et nous répondrons à votre "
"demande dans les plus brefs délais.\n"
" </p>\n"
" <p>\n"
" Merci !\n"
" </p>\n"
" </td>\n"
" </tr>\n"
" </tbody>\n"
" </table>\n"
" <table style=\"width:600px;margin:0px auto;text-align:center;"
"\">\n"
" <tbody>\n"
" <tr>\n"
" <td style=\"padding-top:10px;font-size: 12px;\">"
"\n"
" <p>\n"
" Envoyé par\n"
" <a href=\"/\" style=\"color:#717188;\""
">${object.activity_id.controller_id.display_name|safe}</a>.\n"
" </p>\n"
" </td>\n"
" </tr>\n"
" </tbody>\n"
" </table>\n"
" </div>\n"
" "
#. module: privacy_consent
#: model:mail.message.subtype,name:privacy_consent.mt_activity_acceptance_changed
msgid "Acceptance Changed"
msgstr "Acceptation Modifiée"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,name:privacy_consent.mt_consent_acceptance_changed
msgid "Acceptance Changed by Subject"
msgstr "Acceptation Modifiée par l'intéressé"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,description:privacy_consent.mt_consent_acceptance_changed
msgid "Acceptance status updated by subject"
msgstr "Statut d'acceptation modifié par l'intéressé"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_accepted
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Accepted"
msgstr "Accepté"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
msgid "Accepted by default"
msgstr "Accepté par défaut"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_active
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
msgid "Active"
msgstr "Actif"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_activity_id
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Activity"
msgstr "Traitement"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
msgid "Answered"
msgstr "Répondu"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Archived"
msgstr "Archivé"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
msgid "Ask for consent"
msgstr "Demander le consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
msgid "Ask subjects for consent"
msgstr "Demandé aux intéressés leur consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
msgid "Automatically"
msgstr "Automatiquement"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
msgid "Awaiting response"
msgstr "Attente d'une réponse"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Consent"
msgstr "Consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_body_html
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
msgid "Consent Template Default Body Html"
msgstr "Modèle de corps HTML par défaut pour un consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_subject
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
msgid "Consent Template Default Subject"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_privacy_consent
msgid "Consent of data processing"
msgstr "Consentement au traitement des données"
msgstr ""
#. module: privacy_consent
#: model:ir.actions.act_window,name:privacy_consent.consent_action
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
#: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
msgid "Consents"
msgstr "Consentements"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
msgid "Consents count"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_res_partner
msgid "Contact"
msgstr "Contact"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
msgid "Created by"
msgstr "Créé par"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
msgid "Created on"
msgstr "Créé le"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_privacy_activity
msgid "Data processing activities"
msgstr "Traitements des données personnelles"
msgstr ""
#. module: privacy_consent
#: model:mail.template,subject:privacy_consent.template_consent
msgid ""
"Data processing consent request for ${object.activity_id.display_name|safe}"
msgstr ""
"Demande de consentement pour le traitement de ${object.activity_id."
"display_name|safe}"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_display_name
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
msgid "Display Name"
msgstr "Nom à afficher"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
msgid "Draft"
msgstr "Brouillon"
msgstr ""
#. module: privacy_consent
#: sql_constraint:privacy.consent:0
#: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
msgid "Duplicated partner in this data processing activity"
msgstr "Partenaire dupliqué dans ce traitement de donnés"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_template
msgid "Email Templates"
msgstr "Modèles d'emails"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
msgid "Email template"
msgstr "Modèle de courriel"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
msgid ""
"Email to be sent to subjects to ask for consent. A good template should "
"include details about the current consent request status, how to change it, "
"and where to get more information."
msgstr ""
"Courriel qui va être envoyé aux intéressés afin de leur demander leur "
"consentement. Un bon modèle doit inclure des informations le statut actuel "
"du consentement, comment le changer et où peu t'il avoir davantage "
"d'information."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
msgid ""
"Enable if you need to track any kind of consent from the affected subjects"
msgstr ""
"Activer si vous avez besoin de suivre tout type de consentement des "
"intéressés"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate and enqueue missing consent requests"
msgstr ""
"Générer et mettre en file d'attente les demandes de consentement manquant"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate missing draft consent requests"
msgstr "Générer des brouillons de demandes de consentement manquants"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:138
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Generated consents"
msgstr "Consentements générés"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Group By"
msgstr "Regrouper par"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Hello,"
msgstr "Bonjour,"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>accept</b> this processing of my data"
msgstr "J' <b>accepte</b> ce traitement de mes données"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>reject</b> this processing of my data"
msgstr "Je <b>refuse</b> ce traitement de mes données"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
msgid "ID"
msgstr "ID"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "If it was a mistake, you can undo it here:"
msgstr "Si c'était une erreur, vous pouvez l'annule :"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_accepted
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
msgid ""
"Indicates current acceptance status, which can come from subject's last "
"answer, or from the default specified in the related data processing "
"activity."
msgstr ""
"Indique l'état d'acceptation actuel, qui peut provenir de la dernière "
"réponse de l'intéressé ou de la valeur par défaut spécifiée dans le "
"traitement des données associée."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
msgid "Last Metadata"
msgstr "Dernières méta-données"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent___last_update
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
msgid "Manually"
msgstr "Manuellement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
msgid "Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
msgid "Metadata from the last acceptance or rejection by the subject"
msgstr "Métadonnées de la dernière acceptation ou refus par l'intéressé"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/mail_template.py:24
#: code:addons/privacy_consent/models/mail_template.py:0
#, python-format
msgid ""
"Missing privacy consent link placeholders. You need at least these two "
@ -499,163 +440,188 @@ msgid ""
"<a href=\"%s\">Accept</a>\n"
"<a href=\"%s\">Reject</a>"
msgstr ""
"Variable manquantes pour les liens de consentement. Vous avez besoin d'au "
"moins ces deux liens:\n"
"<a href=\"%s\">Accepter</a>\n"
"<a href=\"%s\">Refuser</a>"
#. module: privacy_consent
#: model:mail.message.subtype,name:privacy_consent.mt_activity_consent_new
#: model:mail.message.subtype,name:privacy_consent.mt_consent_consent_new
msgid "New Consent"
msgstr "Nouveau Consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_mail
msgid "Outgoing Mails"
msgstr "Emails Sortants"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,description:privacy_consent.mt_activity_acceptance_changed
msgid "Privacy consent request acceptance status changed"
msgstr "Statut d'acceptation du consentement modifié"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,description:privacy_consent.mt_activity_consent_new
#: model:mail.message.subtype,description:privacy_consent.mt_consent_consent_new
msgid "Privacy consent request created"
msgstr "Demande de consentement créé"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,description:privacy_consent.mt_activity_state_changed
#: model:mail.message.subtype,description:privacy_consent.mt_consent_state_changed
msgid "Privacy consent request state changed"
msgstr "État du consentement modifié"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
msgid "Privacy consent requests amount"
msgstr "Nombre de demande de consentement"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
msgid "Privacy consents"
msgstr "Consentement à la protection des données"
msgstr ""
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.cron_auto_consent_ir_actions_server
#: model:ir.cron,cron_name:privacy_consent.cron_auto_consent
#: model:ir.cron,name:privacy_consent.cron_auto_consent
msgid "Request automatic data processing consents"
msgstr "Demander des autorisations de traitement automatique des données"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:99
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Require consent is available only for subjects in current database."
msgstr ""
"L'exigence de consentement n'est disponible que pour les intéressés de la "
"base de données actuelle."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
msgid ""
"Run this action when a new consent request is created or its acceptance "
"status is updated."
msgstr ""
"Exécutez cette action lorsqu'une nouvelle demande de consentement est créée "
"ou que son statut d'acceptation est mis à jour."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
msgid "Server action"
msgstr "Action du serveur"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
msgid "Should we assume the subject has accepted if we receive no response?"
msgstr ""
"Doit-on supposer que le sujet a accepté si nous ne recevons aucune réponse?"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Sincerely,<br/>"
msgstr "Sincèrement,<br/>"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:91
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Specify a mail template to ask automated consent."
msgstr ""
"Spécifiez un modèle de courriel électronique pour demander un consentement "
"automatisé."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_state
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "State"
msgstr "État"
msgstr ""
#. module: privacy_consent
#: model:mail.message.subtype,name:privacy_consent.mt_activity_state_changed
#: model:mail.message.subtype,name:privacy_consent.mt_consent_state_changed
msgid "State Changed"
msgstr "État modifié"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
msgid "Subject"
msgstr "Intéressé"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
msgid "Subject asked for consent."
msgstr "L'intéressé questionné sur son consentement."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.actions.server,name:privacy_consent.sync_blacklist
msgid "Sync partner's email blacklist status"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thank you!"
msgstr "Merci !"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thanks for your response."
msgstr "Merci pour votre réponse."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "This could enqueue many consent emails, are you sure to proceed?"
msgstr ""
"Cela peut mettre plusieurs courriels de consentement dans la file d'attente, "
"êtes-vous sûr de vouloir continuer ?"
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.update_opt_out
msgid "Update partner's opt out"
msgstr "Mettre à jour l'exclusion des partenaires"
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid ""
"We asked you to authorize us to process your data in this data processing "
"activity:"
msgstr ""
"Nous vous avons demandé de nous autoriser à traiter vos données dans cette "
"activité de traitement de données:"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "We have recorded this action on your side."
msgstr "Nous avons enregistré cette action pour vous."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-danger\">rejected</b> such processing."
msgstr "Vous avez <b class=\"text-danger\">refusé</b> ce traitement."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-success\">accepted</b> such processing."
msgstr "Vous avez <b class=\"text-success\">accepté</b> ce traitement."
msgstr ""

273
privacy_consent/i18n/privacy_consent.pot

@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy_consent
# * privacy_consent
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -15,7 +15,8 @@ msgstr ""
#. module: privacy_consent
#: model:mail.template,body_html:privacy_consent.template_consent
msgid "<?xml version=\"1.0\"?>\n"
msgid ""
"<?xml version=\"1.0\"?>\n"
"<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
" <table style=\"width:600px;margin:5px auto;\">\n"
" <tbody>\n"
@ -116,69 +117,80 @@ msgid "Acceptance status updated by subject"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_accepted
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Accepted"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
msgid "Accepted by default"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_active
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
msgid "Active"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_activity_id
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Activity"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
msgid "Answered"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Archived"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
msgid "Ask for consent"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
msgid "Ask subjects for consent"
msgstr ""
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
msgid "Automatically"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
msgid "Awaiting response"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Consent"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_body_html
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
msgid "Consent Template Default Body Html"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_subject
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
msgid "Consent Template Default Subject"
msgstr ""
@ -189,26 +201,30 @@ msgstr ""
#. module: privacy_consent
#: model:ir.actions.act_window,name:privacy_consent.consent_action
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
#: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
msgid "Consents"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
msgid "Consents count"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_res_partner
msgid "Contact"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
msgid "Created by"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
msgid "Created on"
msgstr ""
@ -219,21 +235,22 @@ msgstr ""
#. module: privacy_consent
#: model:mail.template,subject:privacy_consent.template_consent
msgid "Data processing consent request for ${object.activity_id.display_name|safe}"
msgid ""
"Data processing consent request for ${object.activity_id.display_name|safe}"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_display_name
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
msgid "Display Name"
msgstr ""
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
msgid "Draft"
msgstr ""
#. module: privacy_consent
#: sql_constraint:privacy.consent:0
#: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
msgid "Duplicated partner in this data processing activity"
msgstr ""
@ -243,105 +260,160 @@ msgid "Email Templates"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
msgid "Email template"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_template_id
msgid "Email to be sent to subjects to ask for consent. A good template should include details about the current consent request status, how to change it, and where to get more information."
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
msgid ""
"Email to be sent to subjects to ask for consent. A good template should "
"include details about the current consent request status, how to change it, "
"and where to get more information."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_required
msgid "Enable if you need to track any kind of consent from the affected subjects"
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
msgid ""
"Enable if you need to track any kind of consent from the affected subjects"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate and enqueue missing consent requests"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate missing draft consent requests"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:138
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Generated consents"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Group By"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Hello,"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>accept</b> this processing of my data"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>reject</b> this processing of my data"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
msgid "ID"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "If it was a mistake, you can undo it here:"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_accepted
msgid "Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity."
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
msgid ""
"Indicates current acceptance status, which can come from subject's last "
"answer, or from the default specified in the related data processing "
"activity."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
msgid "Last Metadata"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent___last_update
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
msgid "Last Modified on"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
msgid "Last Updated by"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
msgid "Last Updated on"
msgstr ""
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
msgid "Manually"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
msgid "Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
msgid "Metadata from the last acceptance or rejection by the subject"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/mail_template.py:24
#: code:addons/privacy_consent/models/mail_template.py:0
#, python-format
msgid "Missing privacy consent link placeholders. You need at least these two links:\n"
msgid ""
"Missing privacy consent link placeholders. You need at least these two links:\n"
"<a href=\"%s\">Accept</a>\n"
"<a href=\"%s\">Reject</a>"
msgstr ""
@ -352,6 +424,31 @@ msgstr ""
msgid "New Consent"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_mail
msgid "Outgoing Mails"
@ -375,14 +472,14 @@ msgid "Privacy consent request state changed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
msgid "Privacy consent requests amount"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
msgid "Privacy consents"
msgstr ""
@ -394,40 +491,47 @@ msgid "Request automatic data processing consents"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:99
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Require consent is available only for subjects in current database."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_server_action_id
msgid "Run this action when a new consent request is created or its acceptance status is updated."
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
msgid ""
"Run this action when a new consent request is created or its acceptance "
"status is updated."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
msgid "Server action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
msgid "Should we assume the subject has accepted if we receive no response?"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Sincerely,<br/>"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:91
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Specify a mail template to ask automated consent."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_state
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "State"
msgstr ""
@ -438,52 +542,63 @@ msgid "State Changed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
msgid "Subject"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
msgid "Subject asked for consent."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.actions.server,name:privacy_consent.sync_blacklist
msgid "Sync partner's email blacklist status"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thank you!"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thanks for your response."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "This could enqueue many consent emails, are you sure to proceed?"
msgstr ""
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.update_opt_out
msgid "Update partner's opt out"
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
msgid "We asked you to authorize us to process your data in this data processing activity:"
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid ""
"We asked you to authorize us to process your data in this data processing "
"activity:"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "We have recorded this action on your side."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-danger\">rejected</b> such processing."
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-success\">accepted</b> such processing."
msgstr ""

242
privacy_consent/i18n/pt.po

@ -244,70 +244,81 @@ msgid "Acceptance status updated by subject"
msgstr "Estado da aceitação atualizado por titular"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_accepted
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__accepted
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Accepted"
msgstr "Aceite"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__default_consent
msgid "Accepted by default"
msgstr "Aceite por defeito"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_active
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction
msgid "Action Needed"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__active
msgid "Active"
msgstr "Ativo"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_activity_id
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__activity_id
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Activity"
msgstr "Atividade"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__answered
msgid "Answered"
msgstr "Respondido"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Archived"
msgstr "Arquivado"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_form
msgid "Ask for consent"
msgstr "Pedir consentimento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_required
msgid "Ask subjects for consent"
msgstr "Solicitar consentimento aos titulares"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__auto
msgid "Automatically"
msgstr "Automaticamente"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__sent
msgid "Awaiting response"
msgstr "À espera de resposta"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Consent"
msgstr "Consentimento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_body_html
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_body_html
#, fuzzy
msgid "Consent Template Default Body Html"
msgstr "Corpo predefinido HTML do modelo de consentimento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_default_subject
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_default_subject
#, fuzzy
msgid "Consent Template Default Subject"
msgstr "Modelo predefinido de consentimento do titular"
@ -319,26 +330,31 @@ msgstr "Consentimento de processamento de dados"
#. module: privacy_consent
#: model:ir.actions.act_window,name:privacy_consent.consent_action
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_count
#: model:ir.ui.menu,name:privacy_consent.menu_privacy_consent
msgid "Consents"
msgstr "Consentimentos"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_count
#, fuzzy
msgid "Consents count"
msgstr "Consentimentos"
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_res_partner
msgid "Contact"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_create_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__create_date
msgid "Created on"
msgstr "Criado em"
@ -356,17 +372,17 @@ msgstr ""
"display_name|safe}"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_display_name
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__display_name
msgid "Display Name"
msgstr "Nome a Exibir"
#. module: privacy_consent
#: selection:privacy.consent,state:0
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_consent__state__draft
msgid "Draft"
msgstr "Rascunho"
#. module: privacy_consent
#: sql_constraint:privacy.consent:0
#: model:ir.model.constraint,message:privacy_consent.constraint_privacy_consent_unique_partner_activity
msgid "Duplicated partner in this data processing activity"
msgstr "Parceiro duplicado nesta atividade de processamento de dados"
@ -376,12 +392,12 @@ msgid "Email Templates"
msgstr "Modelos de E-mail"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__consent_template_id
msgid "Email template"
msgstr "Modelo de Email"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_template_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_template_id
msgid ""
"Email to be sent to subjects to ask for consent. A good template should "
"include details about the current consent request status, how to change it, "
@ -392,7 +408,7 @@ msgstr ""
"alterá-lo, e onde obter ais informação."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_consent_required
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__consent_required
msgid ""
"Enable if you need to track any kind of consent from the affected subjects"
msgstr ""
@ -400,54 +416,81 @@ msgstr ""
"afetados"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_follower_ids
msgid "Followers"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_channel_ids
msgid "Followers (Channels)"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
#, fuzzy
msgid "Generate and enqueue missing consent requests"
msgstr "Gerar e enviar pedidos de consentimento em falta"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
msgid "Generate missing draft consent requests"
msgstr "Gerar pedidos de consentimento em rascunho em falta"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:138
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Generated consents"
msgstr "Consentimentos gerados"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "Group By"
msgstr "Agrupar Por"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Hello,"
msgstr "Olá"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>accept</b> this processing of my data"
msgstr "Eu <b>aceito</b> este processamento dos meus dados"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "I <b>reject</b> this processing of my data"
msgstr "Eu <b>rejeito</b> este processamento dos meus dados"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__id
msgid "ID"
msgstr "ID"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "If it was a mistake, you can undo it here:"
msgstr "Se foi um lapso, pode revertê-lo aqui:"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_accepted
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__accepted
msgid ""
"Indicates current acceptance status, which can come from subject's last "
"answer, or from the default specified in the related data processing "
@ -458,38 +501,58 @@ msgstr ""
"em processamento."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__last_metadata
#, fuzzy
msgid "Last Metadata"
msgstr "Últimos Metadados"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent___last_update
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_uid
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_uid
msgid "Last Updated by"
msgstr "Última Atualização por"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_write_date
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: privacy_consent
#: selection:privacy.activity,consent_required:0
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields.selection,name:privacy_consent.selection__privacy_activity__consent_required__manual
msgid "Manually"
msgstr "Manualmente"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_last_metadata
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_ids
msgid "Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__last_metadata
msgid "Metadata from the last acceptance or rejection by the subject"
msgstr "Metadados da última aceitação ou rejeição pelo titular"
#. module: privacy_consent
#: code:addons/privacy_consent/models/mail_template.py:24
#: code:addons/privacy_consent/models/mail_template.py:0
#, python-format
msgid ""
"Missing privacy consent link placeholders. You need at least these two "
@ -508,6 +571,31 @@ msgstr ""
msgid "New Consent"
msgstr "Novo Consentimento"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: privacy_consent
#: model:ir.model,name:privacy_consent.model_mail_mail
msgid "Outgoing Mails"
@ -531,14 +619,14 @@ msgid "Privacy consent request state changed"
msgstr "Estado do pedido de consentimento de privacidade alterado"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_res_partner_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users_privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_partner__privacy_consent_count
#: model:ir.model.fields,help:privacy_consent.field_res_users__privacy_consent_count
msgid "Privacy consent requests amount"
msgstr "Número de pedidos de consentimento de privacidade"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users_privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_partner__privacy_consent_ids
#: model:ir.model.fields,field_description:privacy_consent.field_res_users__privacy_consent_ids
msgid "Privacy consents"
msgstr "Consentimentos de privacidade"
@ -550,7 +638,7 @@ msgid "Request automatic data processing consents"
msgstr ""
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:99
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Require consent is available only for subjects in current database."
msgstr ""
@ -558,7 +646,7 @@ msgstr ""
"atual."
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__server_action_id
msgid ""
"Run this action when a new consent request is created or its acceptance "
"status is updated."
@ -567,31 +655,36 @@ msgstr ""
"estado de aceitação for atualizado."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity_server_action_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_activity__server_action_id
msgid "Server action"
msgstr "Ação do servidor"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity_default_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_activity__default_consent
msgid "Should we assume the subject has accepted if we receive no response?"
msgstr ""
"Devemos assumir que o titular dos dados aceitou, se não houver resposta?"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Sincerely,<br/>"
msgstr "Cumprimentos,<br />"
#. module: privacy_consent
#: code:addons/privacy_consent/models/privacy_activity.py:91
#: code:addons/privacy_consent/models/privacy_activity.py:0
#, python-format
msgid "Specify a mail template to ask automated consent."
msgstr ""
"Especifique um modelo de email para pedido automático de consentimento."
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_state
#: model:ir.ui.view,arch_db:privacy_consent.consent_search
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__state
#: model_terms:ir.ui.view,arch_db:privacy_consent.consent_search
msgid "State"
msgstr "Estado"
@ -602,27 +695,32 @@ msgid "State Changed"
msgstr "Estado Alterado"
#. module: privacy_consent
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__partner_id
msgid "Subject"
msgstr "Titular dos dados"
#. module: privacy_consent
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent_partner_id
#: model:ir.model.fields,help:privacy_consent.field_privacy_consent__partner_id
msgid "Subject asked for consent."
msgstr "Foi pedido consentimento ao titular."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.actions.server,name:privacy_consent.sync_blacklist
msgid "Sync partner's email blacklist status"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thank you!"
msgstr "Obrigado!"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "Thanks for your response."
msgstr "Obrigado pela sua resposta."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.activity_form
#: model_terms:ir.ui.view,arch_db:privacy_consent.activity_form
#, fuzzy
msgid "This could enqueue many consent emails, are you sure to proceed?"
msgstr ""
@ -630,12 +728,17 @@ msgstr ""
"prosseguir?"
#. module: privacy_consent
#: model:ir.actions.server,name:privacy_consent.update_opt_out
msgid "Update partner's opt out"
msgstr "Atualizar a Auto Exclusão do parceiro"
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread
msgid "Unread Messages"
msgstr ""
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model:ir.model.fields,field_description:privacy_consent.field_privacy_consent__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: privacy_consent
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid ""
"We asked you to authorize us to process your data in this data processing "
"activity:"
@ -644,22 +747,25 @@ msgstr ""
"atividade de processamento:"
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "We have recorded this action on your side."
msgstr "Registámos esta ação com seu conhecimento."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-danger\">rejected</b> such processing."
msgstr "Você <b class=\"text-danger\">rejeitou</b> este processamento."
#. module: privacy_consent
#: model:ir.ui.view,arch_db:privacy_consent.form
#: model_terms:ir.ui.view,arch_db:privacy_consent.form
msgid "You have <b class=\"text-success\">accepted</b> such processing."
msgstr "Você <b class=\"text-success\">aceitou</b> este processamento."
#~ msgid "Partner"
#~ msgstr "Parceiro"
#~ msgid "Update partner's opt out"
#~ msgstr "Atualizar a Auto Exclusão do parceiro"
#~ msgid "Email composition wizard"
#~ msgstr "Assistente de criação de email"

61
privacy_consent/models/mail_mail.py

@ -7,25 +7,36 @@ from odoo import models
class MailMail(models.Model):
_inherit = "mail.mail"
def _postprocess_sent_message(self, mail_sent=True):
def _postprocess_sent_message(
self, success_pids, failure_reason=False, failure_type=None
):
"""Write consent status after sending message."""
if mail_sent:
# Get all mails sent to consents
consent_mails = self.filtered(
lambda one: one.mail_message_id.model == "privacy.consent"
)
# Get related draft consents
consents = self.env["privacy.consent"].browse(
consent_mails.mapped("mail_message_id.res_id"),
self._prefetch
).filtered(lambda one: one.state == "draft")
# Set as sent
consents.write({
"state": "sent",
})
return super(MailMail, self)._postprocess_sent_message(mail_sent)
# Know if mail was successfully sent to a privacy consent
res_ids = []
for mail in self:
if (
mail.mail_message_id.model == "privacy.consent"
and mail.state == "sent"
and success_pids
and not failure_reason
and not failure_type
):
res_ids.append(mail.mail_message_id.res_id)
consents = self.env["privacy.consent"].search(
[
("id", "in", res_ids),
("state", "=", "draft"),
("partner_id", "in", [par.id for par in success_pids]),
]
)
consents.write({"state": "sent"})
return super()._postprocess_sent_message(
success_pids=success_pids,
failure_reason=failure_reason,
failure_type=failure_type,
)
def send_get_mail_body(self, partner=None):
def _send_prepare_body(self):
"""Replace privacy consent magic links.
This replacement is done here instead of directly writing it into
@ -34,20 +45,12 @@ class MailMail(models.Model):
which would enable any reader of such thread to impersonate the
subject and choose in its behalf.
"""
result = super(MailMail, self).send_get_mail_body(partner=partner)
result = super(MailMail, self)._send_prepare_body()
# Avoid polluting other model mails
if self.model != "privacy.consent":
return result
# Tokenize consent links
consent = self.env["privacy.consent"] \
.browse(self.mail_message_id.res_id) \
.with_prefetch(self._prefetch)
result = result.replace(
"/privacy/consent/accept/",
consent._url(True),
)
result = result.replace(
"/privacy/consent/reject/",
consent._url(False),
)
consent = self.env["privacy.consent"].browse(self.mail_message_id.res_id)
result = result.replace("/privacy/consent/accept/", consent._url(True),)
result = result.replace("/privacy/consent/reject/", consent._url(False),)
return result

24
privacy_consent/models/mail_template.py

@ -13,20 +13,22 @@ class MailTemplate(models.Model):
@api.constrains("body_html", "model")
def _check_consent_links_in_body_html(self):
"""Body for ``privacy.consent`` templates needs placeholder links."""
links = [u"//a[@href='/privacy/consent/{}/']".format(action)
for action in ("accept", "reject")]
links = [
"//a[@href='/privacy/consent/{}/']".format(action)
for action in ("accept", "reject")
]
for one in self:
if one.model != "privacy.consent":
continue
doc = html.document_fromstring(one.body_html)
for link in links:
if not doc.xpath(link):
raise ValidationError(_(
"Missing privacy consent link placeholders. "
"You need at least these two links:\n"
'<a href="%s">Accept</a>\n'
'<a href="%s">Reject</a>'
) % (
"/privacy/consent/accept/",
"/privacy/consent/reject/",
))
raise ValidationError(
_(
"Missing privacy consent link placeholders. "
"You need at least these two links:\n"
'<a href="%s">Accept</a>\n'
'<a href="%s">Reject</a>'
)
% ("/privacy/consent/accept/", "/privacy/consent/reject/",)
)

92
privacy_consent/models/privacy_activity.py

@ -7,48 +7,36 @@ from odoo.tools.safe_eval import safe_eval
class PrivacyActivity(models.Model):
_inherit = 'privacy.activity'
_inherit = "privacy.activity"
server_action_id = fields.Many2one(
"ir.actions.server",
"Server action",
domain=[
("model_id.model", "=", "privacy.consent"),
],
domain=[("model_id.model", "=", "privacy.consent")],
help="Run this action when a new consent request is created or its "
"acceptance status is updated.",
)
consent_ids = fields.One2many(
"privacy.consent",
"activity_id",
"Consents",
)
consent_count = fields.Integer(
"Consents",
compute="_compute_consent_count",
"acceptance status is updated.",
)
consent_ids = fields.One2many("privacy.consent", "activity_id", "Consents",)
consent_count = fields.Integer("Consents count", compute="_compute_consent_count",)
consent_required = fields.Selection(
[("auto", "Automatically"), ("manual", "Manually")],
"Ask subjects for consent",
help="Enable if you need to track any kind of consent "
"from the affected subjects",
"from the affected subjects",
)
consent_template_id = fields.Many2one(
"mail.template",
"Email template",
default=lambda self: self._default_consent_template_id(),
domain=[
("model", "=", "privacy.consent"),
],
domain=[("model", "=", "privacy.consent")],
help="Email to be sent to subjects to ask for consent. "
"A good template should include details about the current "
"consent request status, how to change it, and where to "
"get more information.",
"A good template should include details about the current "
"consent request status, how to change it, and where to "
"get more information.",
)
default_consent = fields.Boolean(
"Accepted by default",
help="Should we assume the subject has accepted if we receive no "
"response?",
help="Should we assume the subject has accepted if we receive no " "response?",
)
# Hidden helpers help user design new templates
@ -65,41 +53,45 @@ class PrivacyActivity(models.Model):
@api.depends("consent_ids")
def _compute_consent_count(self):
self.consent_count = 0
groups = self.env["privacy.consent"].read_group(
[("activity_id", "in", self.ids)],
["activity_id"],
["activity_id"],
[("activity_id", "in", self.ids)], ["activity_id"], ["activity_id"],
)
for group in groups:
self.browse(group["activity_id"][0], self._prefetch) \
.consent_count = group["activity_id_count"]
self.browse(group["activity_id"][0]).consent_count = group[
"activity_id_count"
]
def _compute_consent_template_defaults(self):
"""Used in context values, to help users design new templates."""
template = self._default_consent_template_id()
if template:
self.update({
"consent_template_default_body_html": template.body_html,
"consent_template_default_subject": template.subject,
})
self.update(
{
"consent_template_default_body_html": template.body_html,
"consent_template_default_subject": template.subject,
}
)
@api.constrains("consent_required", "consent_template_id")
def _check_auto_consent_has_template(self):
"""Require a mail template to automate consent requests."""
for one in self:
if one.consent_required == "auto" and not one.consent_template_id:
raise ValidationError(_(
"Specify a mail template to ask automated consent."
))
raise ValidationError(
_("Specify a mail template to ask automated consent.")
)
@api.constrains("consent_required", "subject_find")
def _check_consent_required_subject_find(self):
for one in self:
if one.consent_required and not one.subject_find:
raise ValidationError(_(
"Require consent is available only for subjects "
"in current database."
))
raise ValidationError(
_(
"Require consent is available only for subjects "
"in current database."
)
)
@api.model
def _cron_new_consents(self):
@ -115,22 +107,24 @@ class PrivacyActivity(models.Model):
def action_new_consents(self):
"""Generate new consent requests."""
consents = self.env["privacy.consent"]
consents_vals = []
# Skip activitys where consent is not required
for one in self.with_context(active_test=False) \
.filtered("consent_required"):
for one in self.with_context(active_test=False).filtered("consent_required"):
domain = [
("id", "not in", one.mapped("consent_ids.partner_id").ids),
("email", "!=", False),
] + safe_eval(one.subject_domain)
# Create missing consent requests
# Store values for creating missing consent requests
for missing in self.env["res.partner"].search(domain):
consents |= consents.create({
"partner_id": missing.id,
"accepted": one.default_consent,
"activity_id": one.id,
})
# Send consent request emails for automatic activitys
consents_vals.append(
{
"partner_id": missing.id,
"accepted": one.default_consent,
"activity_id": one.id,
}
)
# Create and send consent request emails for automatic activitys
consents = self.env["privacy.consent"].create(consents_vals)
consents.action_auto_ask()
# Redirect user to new consent requests generated
return {

82
privacy_consent/models/privacy_consent.py

@ -8,24 +8,24 @@ from odoo import api, fields, models
class PrivacyConsent(models.Model):
_name = 'privacy.consent'
_name = "privacy.consent"
_description = "Consent of data processing"
_inherit = "mail.thread"
_rec_name = "partner_id"
_sql_constraints = [
("unique_partner_activity", "UNIQUE(partner_id, activity_id)",
"Duplicated partner in this data processing activity"),
(
"unique_partner_activity",
"UNIQUE(partner_id, activity_id)",
"Duplicated partner in this data processing activity",
),
]
active = fields.Boolean(
default=True,
index=True,
)
active = fields.Boolean(default=True, index=True,)
accepted = fields.Boolean(
track_visibility="onchange",
help="Indicates current acceptance status, which can come from "
"subject's last answer, or from the default specified in the "
"related data processing activity.",
"subject's last answer, or from the default specified in the "
"related data processing activity.",
)
last_metadata = fields.Text(
readonly=True,
@ -59,30 +59,25 @@ class PrivacyConsent(models.Model):
track_visibility="onchange",
)
def _creation_subtype(self):
return self.env.ref("privacy_consent.mt_consent_consent_new")
def _track_subtype(self, init_values):
"""Return specific subtypes."""
if self.env.context.get("subject_answering"):
return "privacy_consent.mt_consent_acceptance_changed"
if "activity_id" in init_values or "partner_id" in init_values:
return "privacy_consent.mt_consent_consent_new"
return self.env.ref("privacy_consent.mt_consent_acceptance_changed")
if "state" in init_values:
return "privacy_consent.mt_consent_state_changed"
return self.env.ref("privacy_consent.mt_consent_state_changed")
return super(PrivacyConsent, self)._track_subtype(init_values)
def _token(self):
"""Secret token to publicly authenticate this record."""
secret = self.env["ir.config_parameter"].sudo().get_param(
"database.secret")
secret = self.env["ir.config_parameter"].sudo().get_param("database.secret")
params = "{}-{}-{}-{}".format(
self.env.cr.dbname,
self.id,
self.partner_id.id,
self.activity_id.id,
self.env.cr.dbname, self.id, self.partner_id.id, self.activity_id.id,
)
return hmac.new(
secret.encode('utf-8'),
params.encode('utf-8'),
hashlib.sha512,
secret.encode("utf-8"), params.encode("utf-8"), hashlib.sha512,
).hexdigest()
def _url(self, accept):
@ -100,9 +95,11 @@ class PrivacyConsent(models.Model):
def _send_consent_notification(self):
"""Send email notification to subject."""
for one in self.with_context(tpl_force_default_to=True,
mail_notify_user_signature=False,
mail_auto_subscribe_no_notify=True):
for one in self.with_context(
tpl_force_default_to=True,
mail_notify_user_signature=False,
mail_auto_subscribe_no_notify=True,
):
one.activity_id.consent_template_id.send_mail(one.id)
def _run_action(self):
@ -112,36 +109,30 @@ class PrivacyConsent(models.Model):
if one.state == "draft":
continue
action = one.activity_id.server_action_id.with_context(
active_id=one.id,
active_ids=one.ids,
active_model=one._name,
active_id=one.id, active_ids=one.ids, active_model=one._name,
)
action.run()
@api.model
def create(self, vals):
@api.model_create_multi
def create(self, vals_list):
"""Run server action on create."""
result = super(PrivacyConsent,
self.with_context(mail_create_nolog=True)).create(vals)
results = super().create(vals_list)
# Sync the default acceptance status
result.sudo()._run_action()
return result
results._run_action()
return results
def write(self, vals):
"""Run server action on update."""
result = super(PrivacyConsent, self).write(vals)
result = super().write(vals)
self._run_action()
return result
def message_get_suggested_recipients(self):
result = super(PrivacyConsent, self) \
.message_get_suggested_recipients()
result = super().message_get_suggested_recipients()
reason = self._fields["partner_id"].string
for one in self:
one._message_add_suggested_recipient(
result,
partner=one.partner_id,
reason=reason,
result, partner=one.partner_id, reason=reason,
)
return result
@ -149,7 +140,7 @@ class PrivacyConsent(models.Model):
"""Let user manually ask for consent."""
return {
"context": {
"default_composition_mode": "mass_mail",
"default_composition_mode": "comment",
"default_model": self._name,
"default_res_id": self.id,
"default_template_id": self.activity_id.consent_template_id.id,
@ -167,7 +158,8 @@ class PrivacyConsent(models.Model):
"""Automatically ask for consent."""
templated = self.filtered("activity_id.consent_template_id")
automated = templated.filtered(
lambda one: one.activity_id.consent_required == "auto")
lambda one: one.activity_id.consent_required == "auto"
)
automated._send_consent_notification()
def action_answer(self, answer, metadata=False):
@ -179,8 +171,4 @@ class PrivacyConsent(models.Model):
:param str metadata:
Metadata from last user acceptance or rejection request.
"""
self.write({
"state": "answered",
"accepted": answer,
"last_metadata": metadata,
})
self.write({"state": "answered", "accepted": answer, "last_metadata": metadata})

14
privacy_consent/models/res_partner.py

@ -8,9 +8,7 @@ class ResPartner(models.Model):
_inherit = "res.partner"
privacy_consent_ids = fields.One2many(
"privacy.consent",
"partner_id",
"Privacy consents",
"privacy.consent", "partner_id", "Privacy consents",
)
privacy_consent_count = fields.Integer(
"Consents",
@ -21,11 +19,11 @@ class ResPartner(models.Model):
@api.depends("privacy_consent_ids")
def _compute_privacy_consent_count(self):
"""Count consent requests."""
self.privacy_consent_count = 0
groups = self.env["privacy.consent"].read_group(
[("partner_id", "in", self.ids)],
["partner_id"],
["partner_id"],
[("partner_id", "in", self.ids)], ["partner_id"], ["partner_id"],
)
for group in groups:
self.browse(group["partner_id"][0], self._prefetch) \
.privacy_consent_count = group["partner_id_count"]
self.browse(group["partner_id"][0]).privacy_consent_count = group[
"partner_id_count"
]

6
privacy_consent/static/description/index.html

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy_consent"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy_consent"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/13.0/privacy_consent"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-13-0/data-protection-13-0-privacy_consent"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows the user to define a set of subjects (partners)
affected by any data processing activity, and establish
a process to ask them for consent to include them in that activity.</p>
@ -484,7 +484,7 @@ and the request state.</li>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/data-protection/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_consent%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_consent%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
@ -516,7 +516,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy_consent">OCA/data-protection</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/13.0/privacy_consent">OCA/data-protection</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>

7
privacy_consent/static/src/css/privacy_consent.scss

@ -0,0 +1,7 @@
/* Copyright 2020 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
.o_consent_form {
// Need !important to override an inline style of max-width: 300px
max-width: 100% !important;
}

13
privacy_consent/templates/assets.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<template id="assets_frontend" inherit_id="web.assets_frontend">
<xpath expr=".">
<link
rel="stylesheet"
href="/privacy_consent/static/src/css/privacy_consent.scss"
/>
</xpath>
</template>
</data>

18
privacy_consent/templates/form.xml

@ -1,25 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<template id="form" name="Consent response processed">
<!-- Use web.login_layout because it gets automatically wrapped
by website layout if website is installed, and otherwise includes
all possibly needed assets -->
<t t-call="web.login_layout">
<t t-set="login_card_classes" t-value="'o_consent_form'" />
<div class="container readable">
<div class="jumbotron">
<h1>Thank you!</h1>
<p>
Hello, <b t-esc="consent.partner_id.display_name"/>
Hello, <b t-esc="consent.partner_id.display_name" />
</p>
<p>
We asked you to authorize us to process your data in this data processing activity:
<b t-esc="consent.activity_id.display_name"/>
<b t-esc="consent.activity_id.display_name" />
</p>
<t t-raw="consent.activity_id.description or ''"/>
<t t-raw="consent.activity_id.description or ''" />
<p t-if="consent.accepted">
You have <b class="text-success">accepted</b> such processing.
</p>
@ -52,12 +51,13 @@
Thanks for your response.
</p>
<p class="text-muted">
Sincerely,<br/>
<i t-raw="consent.activity_id.controller_id.with_context(show_address=True, html_format=True).name_get()[0][1]"/>
Sincerely,<br />
<i
t-raw="consent.activity_id.controller_id.with_context(show_address=True, html_format=True).name_get()[0][1]"
/>
</p>
</div>
</div>
</t>
</template>
</data>

279
privacy_consent/tests/test_consent.py

@ -4,148 +4,161 @@
from contextlib import contextmanager
from odoo.exceptions import ValidationError
from odoo.tests.common import HttpCase
from odoo.tests.common import Form, HttpCase
class ActivityCase(HttpCase):
def setUp(self):
super(ActivityCase, self).setUp()
# HACK https://github.com/odoo/odoo/issues/12237
# TODO Remove hack in v12
self._oldenv = self.env
self.env = self._oldenv(self.cursor())
# HACK end
self.cron = self.env.ref("privacy_consent.cron_auto_consent")
self.cron_mail_queue = self.env.ref(
"mail.ir_cron_mail_scheduler_action")
self.update_opt_out = self.env.ref("privacy_consent.update_opt_out")
self.cron_mail_queue = self.env.ref("mail.ir_cron_mail_scheduler_action")
self.sync_blacklist = self.env.ref("privacy_consent.sync_blacklist")
self.mt_consent_consent_new = self.env.ref(
"privacy_consent.mt_consent_consent_new")
"privacy_consent.mt_consent_consent_new"
)
self.mt_consent_acceptance_changed = self.env.ref(
"privacy_consent.mt_consent_acceptance_changed")
"privacy_consent.mt_consent_acceptance_changed"
)
self.mt_consent_state_changed = self.env.ref(
"privacy_consent.mt_consent_state_changed")
"privacy_consent.mt_consent_state_changed"
)
# Some partners to ask for consent
self.partners = self.env["res.partner"]
self.partners += self.partners.create({
"name": "consent-partner-0",
"email": "partner0@example.com",
"notify_email": "none",
"opt_out": False,
})
self.partners += self.partners.create({
"name": "consent-partner-1",
"email": "partner1@example.com",
"notify_email": "always",
"opt_out": True,
})
self.partners += self.partners.create({
"name": "consent-partner-2",
"email": "partner2@example.com",
"opt_out": False,
})
self.partners += self.partners.create(
{"name": "consent-partner-0", "email": "partner0@example.com"}
)
self.partners += self.partners.create(
{"name": "consent-partner-1", "email": "partner1@example.com"}
)
self.partners += self.partners.create(
{"name": "consent-partner-2", "email": "partner2@example.com"}
)
# Partner without email, on purpose
self.partners += self.partners.create({
"name": "consent-partner-3",
"opt_out": True,
})
self.partners += self.partners.create({"name": "consent-partner-3"})
# Partner with wrong email, on purpose
self.partners += self.partners.create(
{"name": "consent-partner-4", "email": "wrong-mail"}
)
# Blacklist some partners
self.blacklists = self.env["mail.blacklist"]
self.blacklists += self.blacklists._add("partner1@example.com")
# Activity without consent
self.activity_noconsent = self.env["privacy.activity"].create({
"name": "activity_noconsent",
"description": "I'm activity 1",
})
self.activity_noconsent = self.env["privacy.activity"].create(
{"name": "activity_noconsent", "description": "I'm activity 1"}
)
# Activity with auto consent, for all partners
self.activity_auto = self.env["privacy.activity"].create({
"name": "activity_auto",
"description": "I'm activity auto",
"subject_find": True,
"subject_domain": repr([("id", "in", self.partners.ids)]),
"consent_required": "auto",
"default_consent": True,
"server_action_id": self.update_opt_out.id,
})
self.activity_auto = self.env["privacy.activity"].create(
{
"name": "activity_auto",
"description": "I'm activity auto",
"subject_find": True,
"subject_domain": repr([("id", "in", self.partners.ids)]),
"consent_required": "auto",
"default_consent": True,
"server_action_id": self.sync_blacklist.id,
}
)
# Activity with manual consent, skipping partner 0
self.activity_manual = self.env["privacy.activity"].create({
"name": "activity_manual",
"description": "I'm activity 3",
"subject_find": True,
"subject_domain": repr([("id", "in", self.partners[1:].ids)]),
"consent_required": "manual",
"default_consent": False,
"server_action_id": self.update_opt_out.id,
})
# HACK https://github.com/odoo/odoo/issues/12237
# TODO Remove hack in v12
def tearDown(self):
self.env = self._oldenv
super(ActivityCase, self).tearDown()
self.activity_manual = self.env["privacy.activity"].create(
{
"name": "activity_manual",
"description": "I'm activity 3",
"subject_find": True,
"subject_domain": repr([("id", "in", self.partners[1:].ids)]),
"consent_required": "manual",
"default_consent": False,
"server_action_id": self.sync_blacklist.id,
}
)
# HACK https://github.com/odoo/odoo/issues/12237
# TODO Remove hack in v12
@contextmanager
def release_cr(self):
self.env.cr.release()
yield
self.env.cr.acquire()
def _patch_build(self):
self._built_messages = []
IMS = self.env["ir.mail_server"]
def _build_email(_self, email_from, email_to, subject, body, *args, **kwargs):
self._built_messages.append(body)
return _build_email.origin(
_self, email_from, email_to, subject, body, *args, **kwargs,
)
try:
IMS._patch_method("build_email", _build_email)
yield
finally:
IMS._revert_method("build_email")
def check_activity_auto_properly_sent(self):
"""Check emails sent by ``self.activity_auto``."""
consents = self.env["privacy.consent"].search([
("activity_id", "=", self.activity_auto.id),
])
consents = self.env["privacy.consent"].search(
[("activity_id", "=", self.activity_auto.id)]
)
# Check pending mails
for consent in consents:
self.assertEqual(consent.state, "draft")
messages = consent.message_ids
self.assertEqual(len(messages), 2)
# Check sent mails
self.cron_mail_queue.method_direct_trigger()
with self._patch_build():
self.cron_mail_queue.method_direct_trigger()
for consent in consents:
self.assertEqual(consent.state, "sent")
good_email = "@" in (consent.partner_id.email or "")
expected_messages = 3 if good_email else 2
self.assertEqual(
consent.state, "sent" if good_email else "draft",
)
messages = consent.message_ids
self.assertEqual(len(messages), 3)
self.assertEqual(len(messages), expected_messages)
# 2nd message notifies creation
self.assertEqual(
messages[2].subtype_id,
self.mt_consent_consent_new,
messages[expected_messages - 1].subtype_id, self.mt_consent_consent_new,
)
# 3rd message notifies subject
# Placeholder links should be logged
self.assertTrue("/privacy/consent/accept/" in messages[1].body)
self.assertTrue("/privacy/consent/reject/" in messages[1].body)
self.assertIn(
"/privacy/consent/accept/", messages[expected_messages - 2].body
)
self.assertIn(
"/privacy/consent/reject/", messages[expected_messages - 2].body
)
# Tokenized links shouldn't be logged
self.assertFalse(consent._url(True) in messages[1].body)
self.assertFalse(consent._url(False) in messages[1].body)
self.assertNotIn(consent._url(True), messages[expected_messages - 2].body)
self.assertNotIn(consent._url(False), messages[expected_messages - 2].body)
# 4th message contains the state change
self.assertEqual(
messages[0].subtype_id,
self.mt_consent_state_changed,
)
# Partner's opt_out should be synced with default consent
self.assertFalse(consent.partner_id.opt_out)
if good_email:
self.assertEqual(
messages[0].subtype_id, self.mt_consent_state_changed,
)
# Partner's is_blacklisted should be synced with default consent
self.assertFalse(consent.partner_id.is_blacklisted)
# Check the sent message was built properly tokenized
accept_url, reject_url = map(consent._url, (True, False))
for body in self._built_messages:
if accept_url in body and reject_url in body:
self._built_messages.remove(body)
break
else:
raise AssertionError("Some message body should have these urls")
def test_default_template(self):
"""We have a good mail template by default."""
good = self.env.ref("privacy_consent.template_consent")
self.assertEqual(
self.activity_noconsent.consent_template_id,
good,
self.activity_noconsent.consent_template_id, good,
)
self.assertEqual(
self.activity_noconsent.consent_template_default_body_html,
good.body_html,
self.activity_noconsent.consent_template_default_body_html, good.body_html,
)
self.assertEqual(
self.activity_noconsent.consent_template_default_subject,
good.subject,
self.activity_noconsent.consent_template_default_subject, good.subject,
)
def test_find_subject_if_consent_required(self):
"""If user wants to require consent, it needs subjects."""
# Test the onchange helper
onchange_activity1 = self.env["privacy.activity"].new(
self.activity_noconsent.copy_data()[0])
self.activity_noconsent.copy_data()[0]
)
self.assertFalse(onchange_activity1.subject_find)
onchange_activity1.consent_required = "auto"
onchange_activity1._onchange_consent_required_subject_find()
@ -164,17 +177,21 @@ class ActivityCase(HttpCase):
def test_generate_manually(self):
"""Manually-generated consents work as expected."""
self.partners.write({"opt_out": False})
for partner in self.partners:
if "@" in (partner.email or ""):
self.blacklists._remove(partner.email)
result = self.activity_manual.action_new_consents()
self.assertEqual(result["res_model"], "privacy.consent")
consents = self.env[result["res_model"]].search(result["domain"])
self.assertEqual(consents.mapped("state"), ["draft"] * 2)
self.assertEqual(consents.mapped("partner_id.opt_out"), [False] * 2)
self.assertEqual(consents.mapped("accepted"), [False] * 2)
self.assertEqual(consents.mapped("last_metadata"), [False] * 2)
self.assertEqual(consents.mapped("state"), ["draft"] * 3)
self.assertEqual(
consents.mapped("partner_id.is_blacklisted"), [False] * 3,
)
self.assertEqual(consents.mapped("accepted"), [False] * 3)
self.assertEqual(consents.mapped("last_metadata"), [False] * 3)
# Check sent mails
messages = consents.mapped("message_ids")
self.assertEqual(len(messages), 2)
self.assertEqual(len(messages), 3)
subtypes = messages.mapped("subtype_id")
self.assertTrue(subtypes & self.mt_consent_consent_new)
self.assertFalse(subtypes & self.mt_consent_acceptance_changed)
@ -182,17 +199,27 @@ class ActivityCase(HttpCase):
# Send one manual request
action = consents[0].action_manual_ask()
self.assertEqual(action["res_model"], "mail.compose.message")
composer = self.env[action["res_model"]] \
.with_context(active_ids=consents[0].ids,
active_model=consents._name,
**action["context"]).create({})
composer.onchange_template_id_wrapper()
composer.send_mail()
Composer = self.env[action["res_model"]].with_context(
active_ids=consents[0].ids,
active_model=consents._name,
**action["context"],
)
composer_wizard = Form(Composer)
self.assertIn(consents[0].partner_id.name, composer_wizard.body)
composer_record = composer_wizard.save()
with self._patch_build():
composer_record.send_mail()
# Check the sent message was built properly tokenized
body = self._built_messages[0]
self.assertIn(consents[0]._url(True), body)
self.assertIn(consents[0]._url(False), body)
messages = consents.mapped("message_ids") - messages
self.assertEqual(len(messages), 2)
self.assertEqual(messages[0].subtype_id, self.mt_consent_state_changed)
self.assertEqual(consents.mapped("state"), ["sent", "draft"])
self.assertEqual(consents.mapped("partner_id.opt_out"), [True, False])
self.assertEqual(consents.mapped("state"), ["sent", "draft", "draft"])
self.assertEqual(
consents.mapped("partner_id.is_blacklisted"), [True, False, False],
)
# Placeholder links should be logged
self.assertTrue("/privacy/consent/accept/" in messages[1].body)
self.assertTrue("/privacy/consent/reject/" in messages[1].body)
@ -202,36 +229,32 @@ class ActivityCase(HttpCase):
self.assertNotIn(accept_url, messages[1].body)
self.assertNotIn(reject_url, messages[1].body)
# Visit tokenized accept URL
with self.release_cr():
result = self.url_open(accept_url).text
self.assertIn("accepted", result)
self.assertIn(reject_url, result)
self.assertIn(self.activity_manual.name, result)
self.assertIn(self.activity_manual.description, result)
result = self.url_open(accept_url).text
self.assertIn("accepted", result)
self.assertIn(reject_url, result)
self.assertIn(self.activity_manual.name, result)
self.assertIn(self.activity_manual.description, result)
consents.invalidate_cache()
self.assertEqual(consents.mapped("accepted"), [True, False])
self.assertEqual(consents.mapped("accepted"), [True, False, False])
self.assertTrue(consents[0].last_metadata)
self.assertFalse(consents[0].partner_id.opt_out)
self.assertEqual(consents.mapped("state"), ["answered", "draft"])
self.assertFalse(consents[0].partner_id.is_blacklisted)
self.assertEqual(consents.mapped("state"), ["answered", "draft", "draft"])
self.assertEqual(
consents[0].message_ids[0].subtype_id,
self.mt_consent_acceptance_changed,
consents[0].message_ids[0].subtype_id, self.mt_consent_acceptance_changed,
)
# Visit tokenized reject URL
with self.release_cr():
result = self.url_open(reject_url).text
self.assertIn("rejected", result)
self.assertIn(accept_url, result)
self.assertIn(self.activity_manual.name, result)
self.assertIn(self.activity_manual.description, result)
result = self.url_open(reject_url).text
self.assertIn("rejected", result)
self.assertIn(accept_url, result)
self.assertIn(self.activity_manual.name, result)
self.assertIn(self.activity_manual.description, result)
consents.invalidate_cache()
self.assertEqual(consents.mapped("accepted"), [False, False])
self.assertEqual(consents.mapped("accepted"), [False, False, False])
self.assertTrue(consents[0].last_metadata)
self.assertTrue(consents[0].partner_id.opt_out)
self.assertEqual(consents.mapped("state"), ["answered", "draft"])
self.assertTrue(consents[0].partner_id.is_blacklisted)
self.assertEqual(consents.mapped("state"), ["answered", "draft", "draft"])
self.assertEqual(
consents[0].message_ids[0].subtype_id,
self.mt_consent_acceptance_changed,
consents[0].message_ids[0].subtype_id, self.mt_consent_acceptance_changed,
)
self.assertFalse(consents[1].last_metadata)

28
privacy_consent/views/privacy_activity.xml

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="activity_form" model="ir.ui.view">
<field name="name">Add consent fields</field>
<field name="model">privacy.activity</field>
<field name="inherit_id" ref="privacy.activity_form"/>
<field name="inherit_id" ref="privacy.activity_form" />
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
@ -18,19 +16,15 @@
name="%(consent_action)d"
type="action"
>
<field
name="consent_count"
widget="statinfo"
/>
<field name="consent_count" widget="statinfo" />
</button>
</div>
<notebook name="advanced" position="inside">
<page string="Consent" name="consent">
<group>
<label for="consent_required"/>
<label for="consent_required" />
<div>
<field name="consent_required" class="oe_inline"/>
<field name="consent_required" class="oe_inline" />
<button
attrs='{"invisible": [("consent_required", "!=", "manual")]}'
class="btn-link"
@ -50,15 +44,10 @@
/>
</div>
</group>
<group
attrs='{"invisible": [("consent_required", "=", False)]}'
>
<group attrs='{"invisible": [("consent_required", "=", False)]}'>
<group>
<field name="default_consent"/>
<field
name="server_action_id"
groups="base.group_no_one"
/>
<field name="default_consent" />
<field name="server_action_id" groups="base.group_no_one" />
</group>
<group>
<field
@ -84,5 +73,4 @@
</notebook>
</field>
</record>
</data>

68
privacy_consent/views/privacy_consent.xml

@ -1,9 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record model="ir.ui.view" id="consent_form">
<field name="name">Privacy Consent Form</field>
<field name="model">privacy.consent</field>
@ -16,67 +14,60 @@
class="oe_highlight"
string="Ask for consent"
/>
<field name="state" widget="statusbar"/>
<field name="state" widget="statusbar" />
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button
class="oe_stat_button"
icon="fa-archive"
name="toggle_active"
type="object"
>
<field
name="active"
options='{"terminology": "archive"}'
widget="boolean_button"
/>
</button>
<field name="active" invisible="1" />
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
</div>
<group>
<field name="partner_id"/>
<field name="activity_id"/>
<field name="accepted"/>
<field name="last_metadata"/>
<field name="partner_id" />
<field name="activity_id" />
<field name="accepted" />
<field name="last_metadata" />
</group>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
<field name="message_follower_ids" widget="mail_followers" />
<field name="message_ids" widget="mail_thread" />
</div>
</form>
</field>
</record>
<record model="ir.ui.view" id="consent_tree">
<field name="name">Privacy Consent Tree</field>
<field name="model">privacy.consent</field>
<field name="arch" type="xml">
<tree>
<field name="activity_id"/>
<field name="partner_id"/>
<field name="state"/>
<field name="accepted"/>
<field name="activity_id" />
<field name="partner_id" />
<field name="state" />
<field name="accepted" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="consent_search">
<field name="name">Privacy Consent Search</field>
<field name="model">privacy.consent</field>
<field name="arch" type="xml">
<search>
<field name="activity_id"/>
<field name="partner_id"/>
<field name="state"/>
<field name="accepted"/>
<separator/>
<field name="activity_id" />
<field name="partner_id" />
<field name="state" />
<field name="accepted" />
<separator />
<filter
string="Archived"
name="inactive"
domain="[('active', '=', False)]"
/>
<separator/>
<separator />
<group string="Group By" name="groupby">
<filter
name="activity_id_groupby"
@ -97,17 +88,10 @@
</search>
</field>
</record>
<act_window
id="consent_action"
name="Consents"
res_model="privacy.consent"
/>
<act_window id="consent_action" name="Consents" res_model="privacy.consent" />
<menuitem
action="consent_action"
id="menu_privacy_consent"
parent="privacy.menu_data_protection_master_data"
/>
</data>

12
privacy_consent/views/res_partner.xml

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">Add consent smart button</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="inherit_id" ref="base.view_partner_form" />
<field
name="groups_id"
eval="[(4, ref('privacy.group_data_protection_user'))]"
@ -22,13 +20,9 @@
name="%(consent_action)d"
type="action"
>
<field
name="privacy_consent_count"
widget="statinfo"
/>
<field name="privacy_consent_count" widget="statinfo" />
</button>
</div>
</field>
</record>
</data>

91
privacy_partner_report/README.rst

@ -1,91 +0,0 @@
======================
Privacy Partner Report
======================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github
:target: https://github.com/OCA/data-protection/tree/11.0/privacy_partner_report
:alt: OCA/data-protection
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy_partner_report
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/263/11.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module helps a company to identify all the transactions that a specific
partner is involved in, with the possibility to export the associated data.
**Table of contents**
.. contents::
:local:
Usage
=====
To use this module, you need to:
#. Go to menu of ``Privacy > Reports > Partner Report``.
#. Select a partner, and then wait some seconds until a list of models appear.
#. Click on ``Export XLSX``.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/data-protection/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_partner_report%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Eficent
Contributors
~~~~~~~~~~~~
* Miquel Raïch <miquel.raich@eficent.com>
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.
.. |maintainer-mreficent| image:: https://github.com/mreficent.png?size=40px
:target: https://github.com/mreficent
:alt: mreficent
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-mreficent|
This module is part of the `OCA/data-protection <https://github.com/OCA/data-protection/tree/11.0/privacy_partner_report>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

2
privacy_partner_report/__init__.py

@ -1,2 +0,0 @@
from . import report
from . import wizard

20
privacy_partner_report/__manifest__.py

@ -1,20 +0,0 @@
# Copyright 2018 Eficent Business and IT Consulting Services S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
'name': 'Privacy Partner Report',
'version': '11.0.1.0.0',
'category': 'GDPR',
'summary': 'Show the transactions that a specific partner is involved in.',
'author': "Eficent, "
"Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/data-protection/',
'license': 'AGPL-3',
'depends': ['privacy', 'report_xlsx'],
'data': [
'wizard/privacy_report_partner_wizard.xml',
'views/privacy_report.xml',
'views/privacy_menu_view.xml',
],
'installable': True,
'maintainers': ['mreficent'],
}

174
privacy_partner_report/i18n/de.po

@ -1,174 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy_partner_report
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-04-26 13:16+0000\n"
"Last-Translator: dw3gn3r <denise.wegner@initos.com>\n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.5.1\n"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a company</span><br/>"
msgstr "<span>Wählen Sie eine Firma</span><br/>"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a partner</span><br/>"
msgstr "<span>Wählen Sie einen Partner</span><br/>"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_company_id
msgid "Company"
msgstr "Unternehmen"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_uid
msgid "Created by"
msgstr "Erstellt von"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_date
msgid "Created on"
msgstr "Erstellt am"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_name
msgid "Database Table"
msgstr "Datenbanktabelle"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_display_name
msgid "Display Name"
msgstr "Anzeigename"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Export XLSX"
msgstr "XLSX exportieren"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:121
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr "Formularinhalt fehlt, dieser Bericht kann nicht gedruckt werden."
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_id
msgid "ID"
msgstr "Kennung"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx___last_update
msgid "Last Modified on"
msgstr "Letzte Änderung am"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert von"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"
#. module: privacy_partner_report
#: model:ir.model.fields,help:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "List of Related Document IDs"
msgstr "Vorlagen"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_model_id
msgid "Models"
msgstr "Vorlagen"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_table_ids
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Models with related partner data"
msgstr "Vorlagen mit zugehörigen Partnerdaten"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:66
#, python-format
msgid "No data for this partner."
msgstr "Keine Daten zu diesem Partner gefunden."
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:125
#, python-format
msgid "No provided partner."
msgstr "Kein unterstützter Partner."
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_count_rows
msgid "Number of lines"
msgstr "Anzahl der Zeilen"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_partner_id
msgid "Partner"
msgstr "Partner"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/report/privacy_partner_xlsx.py:31
#, python-format
msgid "Partner Data"
msgstr "Partnerdaten"
#. module: privacy_partner_report
#: model:ir.actions.act_window,name:privacy_partner_report.action_privacy_partner_menu
#: model:ir.ui.menu,name:privacy_partner_report.menu_privacy_report_privacy_report
msgid "Partner Report"
msgstr "Partnerbericht"
#. module: privacy_partner_report
#: model:ir.actions.report,name:privacy_partner_report.report_partner_xlsx
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_data
msgid "Privacy Partner Data"
msgstr "Datenschutz Partnerdaten"
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_report
msgid "Privacy Partner Report"
msgstr "Datenschutz Partnerbericht"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "Related Document IDs"
msgstr "Zugehörige Dokumentenkennung"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Report Options"
msgstr "Berichtsoptionen"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_field_type
msgid "Type"
msgstr "Typ"
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_report_privacy_partner_report_report_partner_xlsx
msgid "report.privacy_partner_report.report_partner_xlsx"
msgstr "oder"

174
privacy_partner_report/i18n/it.po

@ -1,174 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy_partner_report
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-06-07 15:37+0000\n"
"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.6.1\n"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a company</span><br/>"
msgstr "<span>Selezionare un'azienda</span><br/>"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a partner</span><br/>"
msgstr "<span>Selezionare un partner</span><br/>"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_company_id
msgid "Company"
msgstr "Azienda"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_uid
msgid "Created by"
msgstr "Creato da"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_date
msgid "Created on"
msgstr "Creato il"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_name
msgid "Database Table"
msgstr "Tabella database"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Export XLSX"
msgstr "Esporta XLSX"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:121
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr "Modulo senza contenuto, impossibile stampare il resoconto."
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_id
msgid "ID"
msgstr "ID"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx___last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: privacy_partner_report
#: model:ir.model.fields,help:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "List of Related Document IDs"
msgstr "Elenco ID dei documenti collegati"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_model_id
msgid "Models"
msgstr "Modelli"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_table_ids
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Models with related partner data"
msgstr "Modelli con dati del partner collegato"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:66
#, python-format
msgid "No data for this partner."
msgstr "Nessun dato per questo partner."
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:125
#, python-format
msgid "No provided partner."
msgstr "Nessun partner assegnato."
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_count_rows
msgid "Number of lines"
msgstr "Numero di righe"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_partner_id
msgid "Partner"
msgstr "Partner"
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/report/privacy_partner_xlsx.py:31
#, python-format
msgid "Partner Data"
msgstr "Dati partner"
#. module: privacy_partner_report
#: model:ir.actions.act_window,name:privacy_partner_report.action_privacy_partner_menu
#: model:ir.ui.menu,name:privacy_partner_report.menu_privacy_report_privacy_report
msgid "Partner Report"
msgstr "Resoconto partner"
#. module: privacy_partner_report
#: model:ir.actions.report,name:privacy_partner_report.report_partner_xlsx
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_data
msgid "Privacy Partner Data"
msgstr "Dati privacy del partner"
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_report
msgid "Privacy Partner Report"
msgstr "Resoconto privacy del partner"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "Related Document IDs"
msgstr "ID documenti collegati"
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Report Options"
msgstr "Opzioni resoconto"
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_field_type
msgid "Type"
msgstr "Tipo"
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_report_privacy_partner_report_report_partner_xlsx
msgid "report.privacy_partner_report.report_partner_xlsx"
msgstr "report.privacy_partner_report.report_partner_xlsx"

172
privacy_partner_report/i18n/privacy_partner_report.pot

@ -1,172 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * privacy_partner_report
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \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: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a company</span><br/>"
msgstr ""
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "<span>Select a partner</span><br/>"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_company_id
msgid "Company"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_uid
msgid "Created by"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_create_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_create_date
msgid "Created on"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_name
msgid "Database Table"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_display_name
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_display_name
msgid "Display Name"
msgstr ""
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Export XLSX"
msgstr ""
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:121
#, python-format
msgid "Form content is missing, this report cannot be printed."
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_id
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx_id
msgid "ID"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report___last_update
#: model:ir.model.fields,field_description:privacy_partner_report.field_report_privacy_partner_report_report_partner_xlsx___last_update
msgid "Last Modified on"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_uid
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_uid
msgid "Last Updated by"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_write_date
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_write_date
msgid "Last Updated on"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,help:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "List of Related Document IDs"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_model_id
msgid "Models"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_table_ids
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Models with related partner data"
msgstr ""
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:66
#, python-format
msgid "No data for this partner."
msgstr ""
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/wizard/privacy_report_partner.py:125
#, python-format
msgid "No provided partner."
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_count_rows
msgid "Number of lines"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_report_partner_id
msgid "Partner"
msgstr ""
#. module: privacy_partner_report
#: code:addons/privacy_partner_report/report/privacy_partner_xlsx.py:31
#, python-format
msgid "Partner Data"
msgstr ""
#. module: privacy_partner_report
#: model:ir.actions.act_window,name:privacy_partner_report.action_privacy_partner_menu
#: model:ir.ui.menu,name:privacy_partner_report.menu_privacy_report_privacy_report
msgid "Partner Report"
msgstr ""
#. module: privacy_partner_report
#: model:ir.actions.report,name:privacy_partner_report.report_partner_xlsx
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_data
msgid "Privacy Partner Data"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_privacy_partner_report
msgid "Privacy Partner Report"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_res_ids
msgid "Related Document IDs"
msgstr ""
#. module: privacy_partner_report
#: model:ir.ui.view,arch_db:privacy_partner_report.privacy_partner_report_wizard
msgid "Report Options"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model.fields,field_description:privacy_partner_report.field_privacy_partner_data_field_type
msgid "Type"
msgstr ""
#. module: privacy_partner_report
#: model:ir.model,name:privacy_partner_report.model_report_privacy_partner_report_report_partner_xlsx
msgid "report.privacy_partner_report.report_partner_xlsx"
msgstr ""

1
privacy_partner_report/readme/CONTRIBUTORS.rst

@ -1 +0,0 @@
* Miquel Raïch <miquel.raich@eficent.com>

2
privacy_partner_report/readme/DESCRIPTION.rst

@ -1,2 +0,0 @@
This module helps a company to identify all the transactions that a specific
partner is involved in, with the possibility to export the associated data.

5
privacy_partner_report/readme/USAGE.rst

@ -1,5 +0,0 @@
To use this module, you need to:
#. Go to menu of ``Privacy > Reports > Partner Report``.
#. Select a partner, and then wait some seconds until a list of models appear.
#. Click on ``Export XLSX``.

1
privacy_partner_report/report/__init__.py

@ -1 +0,0 @@
from . import privacy_partner_xlsx

83
privacy_partner_report/report/privacy_partner_xlsx.py

@ -1,83 +0,0 @@
# Copyright 2018 Eficent Business and IT Consulting Services S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
import logging
from odoo import models
from odoo.tools.translate import _
_logger = logging.getLogger(__name__)
class ReportPartnerXlsx(models.AbstractModel):
_name = 'report.privacy_partner_report.report_partner_xlsx'
_inherit = 'report.report_xlsx.abstract'
def _search_longest_row(self, tables):
res = 0
for table in tables:
for model in tables[table]:
if len(tables[table][model]) > 0:
if len(tables[table][model][0]) > res:
res = len(tables[table][model][0])
return res
def generate_xlsx_report(self, workbook, data, objects):
for o in objects:
report_data = o.compute_data_for_report(data)
partner = report_data['form'].get('partner_id', False)
partner = self.env['res.partner'].sudo().browse(partner[0])
workbook.set_properties({
'comments': 'Created with Python and XlsxWriter from Odoo'})
sheet = workbook.add_worksheet(_('Partner Data'))
sheet.set_landscape()
sheet.fit_to_pages(1, 0)
sheet.set_zoom(75)
sheet.set_column(0, self._search_longest_row(
report_data['tables']), 25)
title_style = workbook.add_format(
{'bold': True, 'bg_color': '#FFFFCC', 'border': 2})
sheet.set_row(0, None, None, {'collapsed': 1})
sheet.write_row(1, 0, ["Partner: " + partner.display_name],
title_style)
i = 3
first_row = i+2
for table in sorted(report_data['tables'].keys()):
for model in sorted(report_data['tables'][table].keys()):
rows = len(report_data['tables'][table][model])
if rows:
style = workbook.add_format()
style.set_bold(True)
style.set_border(2)
sheet.write_row(i, 0, [model], style)
i += 1
j = 0
for column in report_data['tables'][table][model][0]:
style = workbook.add_format()
style.set_bold(True)
if j == 0:
style.set_left(1)
if j == len(report_data['tables'][
table][model][0]) - 1:
style.set_right(1)
style.set_top(1)
style.set_bottom(1)
sheet.write_row(i, j, [column], style)
j += 1
for row in report_data['tables'][table][model]:
i += 1
j = 0
for column in row:
style = workbook.add_format()
if j == 0:
style.set_left(1)
if j == len(row) - 1:
style.set_right(1)
if i == rows + first_row - 1:
style.set_bottom(1)
if row[column]:
sheet.write_row(i, j, [row[column]], style)
else:
sheet.write_row(i, j, [''], style)
j += 1
i += 2
first_row = i+2

BIN
privacy_partner_report/static/description/icon.png

Before

Width: 128  |  Height: 128  |  Size: 2.1 KiB

432
privacy_partner_report/static/description/index.html

@ -1,432 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Privacy Partner Report</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="privacy-partner-report">
<h1 class="title">Privacy Partner Report</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy_partner_report"><img alt="OCA/data-protection" src="https://img.shields.io/badge/github-OCA%2Fdata--protection-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/data-protection-11-0/data-protection-11-0-privacy_partner_report"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/263/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module helps a company to identify all the transactions that a specific
partner is involved in, with the possibility to export the associated data.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id1">Usage</a></h1>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to menu of <tt class="docutils literal">Privacy &gt; Reports &gt; Partner Report</tt>.</li>
<li>Select a partner, and then wait some seconds until a list of models appear.</li>
<li>Click on <tt class="docutils literal">Export XLSX</tt>.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/data-protection/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/data-protection/issues/new?body=module:%20privacy_partner_report%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>Eficent</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Miquel Raïch &lt;<a class="reference external" href="mailto:miquel.raich&#64;eficent.com">miquel.raich&#64;eficent.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/mreficent"><img alt="mreficent" src="https://github.com/mreficent.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/data-protection/tree/11.0/privacy_partner_report">OCA/data-protection</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

14
privacy_partner_report/views/privacy_menu_view.xml

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L.
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0) -->
<odoo>
<menuitem id="menu_privacy_report_privacy_report"
name="Partner Report"
parent="privacy.menu_data_protection_report"
groups="privacy.group_data_protection_user"
sequence="10"
action="privacy_partner_report.action_privacy_partner_menu"
/>
</odoo>

12
privacy_partner_report/views/privacy_report.xml

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<report
id="report_partner_xlsx"
model="privacy.partner.report"
string="Privacy Partner Data"
report_type="xlsx"
name="privacy_partner_report.report_partner_xlsx"
file="privacy_partner_report"
attachment_use="False"
/>
</odoo>

1
privacy_partner_report/wizard/__init__.py

@ -1 +0,0 @@
from . import privacy_report_partner

253
privacy_partner_report/wizard/privacy_report_partner.py

@ -1,253 +0,0 @@
# Copyright 2018 Eficent Business and IT Consulting Services S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import api, fields, models, _
from odoo.exceptions import UserError
import ast
class PrivacyPartnerReport(models.TransientModel):
_name = "privacy.partner.report"
_description = "Privacy Partner Report"
company_id = fields.Many2one(
comodel_name='res.company',
string='Company',
required=True,
default=lambda self: self.env.user.company_id,
)
partner_id = fields.Many2one(
comodel_name='res.partner',
string='Partner',
required=True,
)
table_ids = fields.Many2many(
comodel_name='privacy.partner.data',
string='Models with related partner data',
)
@api.onchange('partner_id')
def _onchange_partner_id(self):
if self.partner_id:
data = self._get_tables_from_partner(self.partner_id)
names = self._get_table_names(data)
tables = self.env['privacy.partner.data']
for name in sorted(names):
vals = self._get_default_table(
name=name,
data=[t for t in data if t[0] == name and not t[5]],
)
if vals:
tables |= self.env['privacy.partner.data'].create(vals)
self.table_ids = tables
else:
self.table_ids = self.env['privacy.partner.data']
return {
'domain': {
'table_ids': [
('id', 'in', self.table_ids.ids)],
},
}
@api.onchange('company_id')
def _onchange_company_id(self):
if not self.company_id:
self.company_id = self.env.user.company_id
return {
'domain': {
'partner_id': [
('company_id', 'in', [self.company_id.id, False])],
},
}
@api.multi
def button_export_xlsx(self):
self.ensure_one()
if not self.table_ids:
raise UserError(_('No data for this partner.'))
return self.check_report(xlsx_report=True)
def _build_contexts(self, data):
result = {}
result['partner_id'] = data['form']['partner_id'][0] or False
result['company_id'] = data['form']['company_id'][0] or False
result['table_ids'] = 'table_ids' in data['form'] and \
data['form']['table_ids'] or False
return result
@staticmethod
def _transform_binary(binary):
# TODO: Implement if needed
return False
def _clean_data(self, model, rows):
cleaned_rows = []
for i, row in enumerate(rows):
cleaned_rows.append({})
for key, value in row.items():
label = self.env[model]._fields[key].string or key
if self.env[model]._fields[key].store:
if 'many2one' == self.env[model]._fields[key].type:
comodel = self.env[model]._fields[key].comodel_name
if value:
record = self.env[comodel].sudo().browse(value)
cleaned_rows[i][label] = record.display_name
else:
cleaned_rows[i][label] = rows[i][key]
elif 'binary' == self.env[model]._fields[key].type:
binary = self._transform_binary(rows[i][key])
if binary:
cleaned_rows[i][label] = binary
elif '2many' not in self.env[model]._fields[key].type:
cleaned_rows[i][label] = rows[i][key]
return cleaned_rows
@api.multi
def check_report(self, xlsx_report=False):
self.ensure_one()
data = {}
data['ids'] = self.env.context.get('active_ids', [])
data['model'] = self.env.context.get('active_model', 'ir.ui.menu')
data['form'] = self.read(['partner_id', 'company_id', 'table_ids'])[0]
used_context = self._build_contexts(data)
data['form']['id'] = str(data['form']['id'])
data['form']['used_context'] = dict(
used_context, lang=self.env.context.get('lang', 'en_US'))
return self._print_report(data=data, xlsx_report=xlsx_report)
@api.multi
def compute_data_for_report(self, data):
if not data.get('form'):
raise UserError(
_("Form content is missing, this report cannot be printed."))
partner = data['form'].get('partner_id', False)
if not partner:
raise UserError(
_("No provided partner."))
partner = self.env['res.partner'].sudo().browse(partner[0])
tables = data['form'].get('table_ids', False)
if tables:
tables = self.env['privacy.partner.data'].browse(tables)
tables = self._get_rows_from_tables(tables, partner)
data.update({'tables': tables, })
return data
def _exclude_column(self, model, column):
# https://github.com/odoo/odoo/issues/24927
if model in ('mail.compose.message', 'survey.mail.compose.message'):
if column in ('needaction_partner_ids', 'starred_partner_ids'):
return True
# feel free to add more specific cases meanwhile the issue is not fixed
return False
def _get_default_table(self, name, data):
if data:
field_type = data[0][4]
res = self.env[data[0][1]]
for t in data:
res |= self.env[t[1]].sudo().browse(t[3])
if res:
values = {
'name': name,
'model_id': self.env['ir.model'].sudo().search(
[('model', '=', res._name)]).id,
'count_rows': len(res.ids),
'field_type': field_type,
'res_ids': res.ids,
}
return values
return {}
def _get_model_from_table(self, table, partner):
new_tables = {}
for model in table.model_id:
rows = self._get_rows_from_model(model, partner)
new_tables[model.display_name] = rows
return new_tables
def _get_rows_from_model(self, model, partner):
lines = self.env[model.model]
columns = [k for k, v in self.env[model.model]._fields.items()
if v.comodel_name == 'res.partner' and
v.store and not self._exclude_column(model.model, k)]
for column in columns:
lines |= self.env[model.model].sudo().search(
[(column, '=', partner.id)])
rows = lines.sudo().read(load=False)
rows = self._clean_data(model.model, rows)
return rows
def _get_rows_from_tables(self, tables, partner):
new_tables = {}
for table in tables:
data_table = self._get_model_from_table(table, partner)
new_tables[str(table.name)] = data_table
return new_tables
def _get_table_names(self, data):
names = []
for t in data:
if t[3] and not t[5] and t[0] not in names:
names.append(t[0])
return names
def _get_tables_from_partner(self, partner):
tables = [t[0] for t in [
[[self.env[m]._table, m, k, self.env[m].sudo().search(
[(k, '=', partner.id)]).ids, v.type, self.env[m]._transient]
for k, v in self.env[m]._fields.items()
if v.comodel_name == 'res.partner' and self.env[m]._auto and
v.store and not self._exclude_column(m, k)]
for m in [x for x in self.env.registry.keys()]] if t]
for i, t in enumerate(tables):
if t[4] == 'many2many':
if t[3]:
relation = self.env[t[1]]._fields[t[2]].relation
if relation:
tables[i][0] = relation
return tables
def _print_report(self, data, xlsx_report=False):
records = self.env[data['model']].sudo().browse(data.get('ids', []))
if xlsx_report:
return self.env.ref('privacy_partner_report.report_partner_xlsx').\
with_context(landscape=True).report_action(
records, data=data)
class PrivacyPartnerData(models.TransientModel):
_name = "privacy.partner.data"
_description = "Privacy Partner Data"
name = fields.Char(
string='Database Table',
)
model_id = fields.Many2one(
comodel_name='ir.model',
ondelete='cascade',
string='Models',
)
field_type = fields.Char(
string="Type", oldname='type',
)
count_rows = fields.Integer(
default=0,
string='Number of lines',
)
res_ids = fields.Char('Related Document IDs', index=True,
help='List of Related Document IDs')
@api.multi
def action_view_records(self):
self.ensure_one()
response = {
'name': self.model_id.display_name,
'type': 'ir.actions.act_window',
'res_model': self.model_id.model,
'view_mode': 'tree,form',
'domain': [('id', 'in', ast.literal_eval(self.res_ids))],
'target': 'current',
'context': {'delete': True},
}
return response

51
privacy_partner_report/wizard/privacy_report_partner_wizard.xml

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2018 Eficent Business and IT Consulting Services S.L.
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0) -->
<odoo>
<record id="privacy_partner_report_wizard" model="ir.ui.view">
<field name="name">Partner Report</field>
<field name="model">privacy.partner.report</field>
<field name="arch" type="xml">
<form string="Report Options">
<header>
<button name="button_export_xlsx" string="Export XLSX" type="object" default_focus="1" class="oe_highlight"/>
</header>
<group groups="base.group_multi_company">
<group>
<span >Select a company</span><br/>
<field name="company_id" options="{'no_create': True}" nolabel="1" />
</group>
</group>
<group>
<group>
<span>Select a partner</span><br/>
<field name="partner_id" options="{'no_create': True}" nolabel="1" domain="[('company_id', 'in', [False, company_id])]"/>
</group>
</group>
<group string='Models with related partner data' attrs="{'invisible': [('partner_id', '=', False)]}" col="1">
<field name="table_ids" options="{'no_create': True}" editable="bottom" nolabel="1">
<tree>
<field name="model_id"/>
<field name="count_rows" text-align="right"/>
<button name="action_view_records"
type="object" icon="fa-info-circle"
attrs="{'invisible': [('count_rows', '=', '0')]}" />
</tree>
</field>
</group>
</form>
</field>
</record>
<record id="action_privacy_partner_menu" model="ir.actions.act_window">
<field name="name">Partner Report</field>
<field name="res_model">privacy.partner.report</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="privacy_partner_report_wizard"/>
<field name="target">current</field>
</record>
</odoo>

2
setup/_metapackage/VERSION.txt

@ -1 +1 @@
11.0.20211016.0
13.0.20211016.0

2
setup/_metapackage/setup.cfg

@ -1,2 +0,0 @@
[bdist_wheel]
universal=1

11
setup/_metapackage/setup.py

@ -4,19 +4,16 @@ with open('VERSION.txt', 'r') as f:
version = f.read().strip()
setuptools.setup(
name="odoo11-addons-oca-data-protection",
name="odoo13-addons-oca-data-protection",
description="Meta package for oca-data-protection Odoo addons",
version=version,
install_requires=[
'odoo11-addon-contact_search_form',
'odoo11-addon-privacy',
'odoo11-addon-privacy_consent',
'odoo11-addon-privacy_partner_report',
'odoo11-addon-website_contact_extend',
'odoo13-addon-privacy',
'odoo13-addon-privacy_consent',
],
classifiers=[
'Programming Language :: Python',
'Framework :: Odoo',
'Framework :: Odoo :: 11.0',
'Framework :: Odoo :: 13.0',
]
)

1
setup/contact_search_form/odoo/addons/contact_search_form

@ -1 +0,0 @@
../../../../contact_search_form

2
setup/contact_search_form/setup.cfg

@ -1,2 +0,0 @@
[bdist_wheel]
universal=1

6
setup/contact_search_form/setup.py

@ -1,6 +0,0 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

2
setup/privacy/setup.cfg

@ -1,2 +0,0 @@
[bdist_wheel]
universal=1

2
setup/privacy_consent/setup.cfg

@ -1,2 +0,0 @@
[bdist_wheel]
universal=1

1
setup/privacy_partner_report/odoo/addons/privacy_partner_report

@ -1 +0,0 @@
../../../../privacy_partner_report

2
setup/privacy_partner_report/setup.cfg

@ -1,2 +0,0 @@
[bdist_wheel]
universal=1

6
setup/privacy_partner_report/setup.py

@ -1,6 +0,0 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save