[13.0][add][mail_partner_opt_out]
This commit is contained in:
parent
a1e6fd927a
commit
423ec25e97
1
mail_partner_opt_out/__init__.py
Normal file
1
mail_partner_opt_out/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from . import models
|
15
mail_partner_opt_out/__manifest__.py
Normal file
15
mail_partner_opt_out/__manifest__.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Copyright 2021 ForgeFlow S.L.
|
||||||
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||||||
|
{
|
||||||
|
"name": "Mail Partner Opt Out",
|
||||||
|
"summary": "Add the partner's email to the blackmailed list",
|
||||||
|
"version": "13.0.1.0.0",
|
||||||
|
"development_status": "Beta",
|
||||||
|
"category": "Social Network",
|
||||||
|
"website": "https://github.com/OCA/social",
|
||||||
|
"author": "ForgeFlow, Odoo Community Association (OCA)",
|
||||||
|
"license": "LGPL-3",
|
||||||
|
"installable": True,
|
||||||
|
"data": ["views/res_partner_views.xml"],
|
||||||
|
"depends": ["mail"],
|
||||||
|
}
|
1
mail_partner_opt_out/models/__init__.py
Normal file
1
mail_partner_opt_out/models/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
from . import res_partner
|
51
mail_partner_opt_out/models/res_partner.py
Normal file
51
mail_partner_opt_out/models/res_partner.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# Copyright 2021 ForgeFlow S.L.
|
||||||
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||||||
|
from odoo import _, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResPartner(models.Model):
|
||||||
|
_inherit = "res.partner"
|
||||||
|
|
||||||
|
opt_out = fields.Boolean(
|
||||||
|
string="Opt Out",
|
||||||
|
compute="_compute_opt_out",
|
||||||
|
inverse="_inverse_opt_out",
|
||||||
|
search="_search_opt_out",
|
||||||
|
help="Setting this checkbox will add the partner's email to a "
|
||||||
|
"blacklist so that this email won't be considered in mailings.",
|
||||||
|
)
|
||||||
|
|
||||||
|
def _compute_opt_out(self):
|
||||||
|
blacklist = (
|
||||||
|
self.env["mail.blacklist"]
|
||||||
|
.sudo()
|
||||||
|
.search([("email", "in", self.mapped("email"))])
|
||||||
|
)
|
||||||
|
blacklisted_emails = blacklist.mapped("email")
|
||||||
|
for rec in self:
|
||||||
|
if rec.email in blacklisted_emails:
|
||||||
|
rec.opt_out = True
|
||||||
|
else:
|
||||||
|
rec.opt_out = False
|
||||||
|
|
||||||
|
def _inverse_opt_out(self):
|
||||||
|
for rec in self:
|
||||||
|
if rec.opt_out and rec.email:
|
||||||
|
self.env["mail.blacklist"].sudo()._add(self.email)
|
||||||
|
elif not rec.opt_out and rec.email:
|
||||||
|
self.env["mail.blacklist"].sudo()._remove(self.email)
|
||||||
|
|
||||||
|
def _is_unsupported_search_operator(self, operator):
|
||||||
|
return operator not in ["=", "!="]
|
||||||
|
|
||||||
|
def _search_opt_out(self, operator, value):
|
||||||
|
if self._is_unsupported_search_operator(operator):
|
||||||
|
raise ValueError(_("Unsupported search operator"))
|
||||||
|
blacklisted_emails = (
|
||||||
|
self.env["mail.blacklist"].sudo().search([]).mapped("email")
|
||||||
|
)
|
||||||
|
if (operator == "=" and value) or (operator == "!=" and not value):
|
||||||
|
search_operator = "in"
|
||||||
|
else:
|
||||||
|
search_operator = "not in"
|
||||||
|
return [("email", search_operator, blacklisted_emails)]
|
3
mail_partner_opt_out/readme/CONTRIBUTORS.rst
Normal file
3
mail_partner_opt_out/readme/CONTRIBUTORS.rst
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
* ForgeFlow, S.L. (contact@forgeflow.com)
|
||||||
|
|
||||||
|
* Jordi Ballester Alomar (jordi.ballester@forgeflow.com)
|
3
mail_partner_opt_out/readme/DESCRIPTION.rst
Normal file
3
mail_partner_opt_out/readme/DESCRIPTION.rst
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
This module adds the capability for a user to add a partner's email address
|
||||||
|
to the blackmail list so that she will not receive any emails from mass
|
||||||
|
mailing campaigns.
|
6
mail_partner_opt_out/readme/USAGE.rst
Normal file
6
mail_partner_opt_out/readme/USAGE.rst
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Go to a partner. Next to the partner's email address you will see the
|
||||||
|
checkbox 'Opt Out'. Once you press it the partner's email address will be
|
||||||
|
blacklisted and the checkbox will be set. If you uncheck if the email address
|
||||||
|
will be removed from the blacklist.
|
||||||
|
|
||||||
|
You can also search for partners using the opt out as search criteria.
|
12
mail_partner_opt_out/views/res_partner_views.xml
Normal file
12
mail_partner_opt_out/views/res_partner_views.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_partner_form" model="ir.ui.view">
|
||||||
|
<field name="model">res.partner</field>
|
||||||
|
<field name="inherit_id" ref="base.view_partner_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="email" position="before">
|
||||||
|
<field name="opt_out" string="Opt Out" />
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
Loading…
Reference in New Issue
Block a user