Privacy - Consent

privacy_consent
REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/18.0/privacy_consent
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, michelerusti
WEBSITE
WEBSITEhttps://github.com/OCA/data-protection
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

For those that need explicit consent as a lawfulness base for personal
data processing, as required by GDPR (article 6.1.a), this module
provides the needed tools to automate it.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_list Privacy Consent List privacy.consent list New
consent_search Privacy Consent Search privacy.consent search New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' string='Consents count'
  • consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='activity_id' string='Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' selection=[('auto', 'Automatically'), ('manual', 'Manually')] string='Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    comodel_name='mail.template' default=<expr> 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.' string='Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' string='Accepted by default'
  • server_action_id Many2one → ir.actions.server
    comodel_name='ir.actions.server' domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' string='Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." tracking=True
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    comodel_name='privacy.activity' required=True string='Activity' tracking=True
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' tracking=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Subject asked for consent.' required=True string='Subject' tracking=True
  • state Selection
    default='draft' required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] tracking=True
Public methods (5)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' string='Consents'
  • privacy_consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='partner_id' string='Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/17.0/privacy_consent
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSOCA-git-bot, oca-ci, JordiToledo
WEBSITE
WEBSITEhttps://github.com/OCA/data-protection
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

For those that need explicit consent as a lawfulness base for personal
data processing, as required by GDPR (article 6.1.a), this module
provides the needed tools to automate it.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' string='Consents count'
  • consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='activity_id' string='Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' selection=[('auto', 'Automatically'), ('manual', 'Manually')] string='Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    comodel_name='mail.template' default=<expr> 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.' string='Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' string='Accepted by default'
  • server_action_id Many2one → ir.actions.server
    comodel_name='ir.actions.server' domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' string='Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." tracking=True
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    comodel_name='privacy.activity' required=True string='Activity' tracking=True
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' tracking=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Subject asked for consent.' required=True string='Subject' tracking=True
  • state Selection
    default='draft' required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] tracking=True
Public methods (5)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' string='Consents'
  • privacy_consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='partner_id' string='Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/16.0/privacy_consent
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSThibault Delavallée, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/data-protection
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' string='Consents count'
  • consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='activity_id' string='Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' selection=[('auto', 'Automatically'), ('manual', 'Manually')] string='Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    comodel_name='mail.template' default=<expr> 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.' string='Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' string='Accepted by default'
  • server_action_id Many2one → ir.actions.server
    comodel_name='ir.actions.server' domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' string='Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." tracking=True
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    comodel_name='privacy.activity' readonly=True required=True string='Activity' tracking=True
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True tracking=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Subject asked for consent.' readonly=True required=True string='Subject' tracking=True
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] tracking=True
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' string='Consents'
  • privacy_consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='partner_id' string='Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/15.0/privacy_consent
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci, pilarvargas-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/data-protection
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' string='Consents count'
  • consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='activity_id' string='Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' selection=[('auto', 'Automatically'), ('manual', 'Manually')] string='Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    comodel_name='mail.template' default=<expr> 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.' string='Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' string='Accepted by default'
  • server_action_id Many2one → ir.actions.server
    comodel_name='ir.actions.server' domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' string='Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." tracking=True
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    comodel_name='privacy.activity' readonly=True required=True string='Activity' tracking=True
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True tracking=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Subject asked for consent.' readonly=True required=True string='Subject' tracking=True
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] tracking=True
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' string='Consents'
  • privacy_consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='partner_id' string='Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/14.0/privacy_consent
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSOCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Rad0van, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/data-protection
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' string='Consents count'
  • consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='activity_id' string='Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' selection=[('auto', 'Automatically'), ('manual', 'Manually')] string='Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    comodel_name='mail.template' default=<expr> 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.' string='Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' string='Accepted by default'
  • server_action_id Many2one → ir.actions.server
    comodel_name='ir.actions.server' domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' string='Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." tracking=True
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    comodel_name='privacy.activity' readonly=True required=True string='Activity' tracking=True
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True tracking=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' help='Subject asked for consent.' readonly=True required=True string='Subject' tracking=True
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] tracking=True
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' string='Consents'
  • privacy_consent_ids One2many → privacy.consent
    comodel_name='privacy.consent' inverse_name='partner_id' string='Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/13.0/privacy_consent
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSJairo Llopis, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, sergiocorato
WEBSITE
WEBSITEhttps://github.com/OCA/management-activity
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' args: 'Consents count'
  • consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'activity_id', 'Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' args: [('auto', 'Automatically'), ('manual', 'Manually')], 'Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    default=<expr> 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.' args: 'mail.template', 'Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' args: 'Accepted by default'
  • server_action_id Many2one → ir.actions.server
    domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' args: 'ir.actions.server', 'Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." track_visibility='onchange'
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    readonly=True required=True track_visibility='onchange' args: 'privacy.activity', 'Activity'
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    help='Subject asked for consent.' readonly=True required=True track_visibility='onchange' args: 'res.partner', 'Subject'
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] track_visibility='onchange'
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' args: 'Consents'
  • privacy_consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'partner_id', 'Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/12.0/privacy_consent
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSGitHub, Jairo Llopis, OCA Transbot, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, sergiocorato
WEBSITE
WEBSITEhttps://github.com/OCA/management-activity
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
assets_frontend assets_frontend ir.ui.view qweb Inherits web.assets_frontend
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' args: 'Consents count'
  • consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'activity_id', 'Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' args: [('auto', 'Automatically'), ('manual', 'Manually')], 'Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    default=<expr> 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.' args: 'mail.template', 'Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' args: 'Accepted by default'
  • server_action_id Many2one → ir.actions.server
    domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' args: 'ir.actions.server', 'Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." track_visibility='onchange'
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    readonly=True required=True track_visibility='onchange' args: 'privacy.activity', 'Activity'
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    help='Subject asked for consent.' readonly=True required=True track_visibility='onchange' args: 'res.partner', 'Subject'
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] track_visibility='onchange'
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals_list)
    @api.model_create_multi
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' args: 'Consents'
  • privacy_consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'partner_id', 'Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/11.0/privacy_consent
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), initOS GmbH
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), initOS GmbH
COMMITTERS
COMMITTERSOCA Transbot, oca-travis, OCA-git-bot, fkantelberg
WEBSITE
WEBSITEhttps://github.com/OCA/management-activity
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • send_get_mail_body(self, partner=None)
    Replace privacy consent magic links. This replacement is done here instead of directly writing it into the ``mail.template`` to avoid writing the tokeinzed URL in the mail thread for the ``privacy.consent`` record, which would enable any reader of such thread to impersonate the subject and choose in its behalf.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' args: 'Consents'
  • consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'activity_id', 'Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' args: [('auto', 'Automatically'), ('manual', 'Manually')], 'Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    default=<expr> 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.' args: 'mail.template', 'Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' args: 'Accepted by default'
  • server_action_id Many2one → ir.actions.server
    domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' args: 'ir.actions.server', 'Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." track_visibility='onchange'
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    readonly=True required=True track_visibility='onchange' args: 'privacy.activity', 'Activity'
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    help='Subject asked for consent.' readonly=True required=True track_visibility='onchange' args: 'res.partner', 'Subject'
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] track_visibility='onchange'
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals)
    @api.model
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' args: 'Consents'
  • privacy_consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'partner_id', 'Privacy consents'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/data-protection
GIT
GIThttps://github.com/OCA/data-protection.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/data-protection/tree/10.0/privacy_consent
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYPrivacy
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Jairo Llopis, OCA Transbot, oca-travis, OCA-git-bot, OCA Git Bot, Cristina Martin
WEBSITE
WEBSITEhttps://github.com/OCA/management-activity
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/data-protection:
    - privacy
odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
activity_form Add consent fields privacy.activity div Inherits privacy.activity_form
consent_form Privacy Consent Form privacy.consent form New
consent_search Privacy Consent Search privacy.consent search New
consent_tree Privacy Consent Tree privacy.consent tree New
form Consent response processed ir.ui.view qweb New
view_partner_form Add consent smart button res.partner div Inherits base.view_partner_form
Models touched (5)

New fields (0)

No new fields.

Public methods (1)
  • send_get_mail_body(self, partner=None)
    Replace privacy consent magic links. This replacement is done here instead of directly writing it into the ``mail.template`` to avoid writing the tokeinzed URL in the mail thread for the ``privacy.consent`` record, which would enable any reader of such thread to impersonate the subject and choose in its behalf.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • consent_count Integer
    compute='_compute_consent_count' args: 'Consents'
  • consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'activity_id', 'Consents'
  • consent_required Selection
    help='Enable if you need to track any kind of consent from the affected subjects' args: [('auto', 'Automatically'), ('manual', 'Manually')], 'Ask subjects for consent'
  • consent_template_default_body_html Text
    compute='_compute_consent_template_defaults'
  • consent_template_default_subject Char
    compute='_compute_consent_template_defaults'
  • consent_template_id Many2one → mail.template
    default=<expr> 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.' args: 'mail.template', 'Email template'
  • default_consent Boolean
    help='Should we assume the subject has accepted if we receive no response?' args: 'Accepted by default'
  • server_action_id Many2one → ir.actions.server
    domain=[('model_id.model', '=', 'privacy.consent')] help='Run this action when a new consent request is created or its acceptance status is updated.' args: 'ir.actions.server', 'Server action'
Public methods (1)
  • action_new_consents(self)
    Generate new consent requests.

New fields (6)
  • accepted Boolean
    help="Indicates current acceptance status, which can come from subject's last answer, or from the default specified in the related data processing activity." track_visibility='onchange'
  • active Boolean
    default=True index=True
  • activity_id Many2one → privacy.activity
    readonly=True required=True track_visibility='onchange' args: 'privacy.activity', 'Activity'
  • last_metadata Text
    help='Metadata from the last acceptance or rejection by the subject' readonly=True track_visibility='onchange'
  • partner_id Many2one → res.partner
    help='Subject asked for consent.' readonly=True required=True track_visibility='onchange' args: 'res.partner', 'Subject'
  • state Selection
    default='draft' readonly=True required=True selection=[('draft', 'Draft'), ('sent', 'Awaiting response'), ('answered', 'Answered')] track_visibility='onchange'
Public methods (6)
  • action_answer(self, answer, metadata=False)
    Process answer. :param bool answer: Did the subject accept? :param str metadata: Metadata from last user acceptance or rejection request.
  • action_auto_ask(self)
    Automatically ask for consent.
  • action_manual_ask(self)
    Let user manually ask for consent.
  • create(self, vals)
    @api.model
    Run server action on create.
  • message_get_suggested_recipients(self)
  • write(self, vals)
    Run server action on update.

New fields (2)
  • privacy_consent_count Integer
    compute='_compute_privacy_consent_count' help='Privacy consent requests amount' args: 'Consents'
  • privacy_consent_ids One2many → privacy.consent
    args: 'privacy.consent', 'partner_id', 'Privacy consents'
Public methods (0)

No public methods.