[MIG] mass_mailing_event_registration_exlude: Migration to 12.0

pull/627/head
Alexandre D. Díaz 2020-07-08 19:52:52 +02:00 committed by Pablo Fuentes
parent 5b08b8b05a
commit 7cedd0a3a9
18 changed files with 662 additions and 177 deletions

View File

@ -1,15 +1,39 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
==================
Mass mailing event
==================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! 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%2Fsocial-lightgray.png?logo=github
:target: https://github.com/OCA/social/tree/12.0/mass_mailing_event_registration_exclude
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mass_mailing_event_registration_exclude
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/205/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module links ``mass_mailing`` with ``event`` in order to exclude
recipients that are already registered, confirmed, cancelled, attended, or a
combination of these states, when the mass mailing is sent.
**Table of contents**
.. contents::
:local:
Usage
=====
@ -29,45 +53,46 @@ soon.
So it's been only sent to 950 partners the ones who are not registered in the
event yet.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/205/10.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/social/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.
Bugs are tracked on `GitHub Issues <https://github.com/OCA/social/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/social/issues/new?body=module:%20mass_mailing_event_registration_exclude%0Aversion:%2012.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
=======
Images
------
Authors
~~~~~~~
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
* Tecnativa
Contributors
------------
~~~~~~~~~~~~
* Antonio Espinosa <antonio.espinosa@tecnativa.com>
* David Vidal <david.vidal@tecnativa.com>
* `Tecnativa <https://www.tecnativa.com>`__:
Maintainer
----------
* Antonio Espinosa
* David Vidal
* Alexandre D. Díaz
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
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.
To contribute to this module, please visit https://odoo-community.org.
This module is part of the `OCA/social <https://github.com/OCA/social/tree/12.0/mass_mailing_event_registration_exclude>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -1,3 +1 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2017 David Vidal <david.vidal@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@ -6,7 +5,7 @@
{
'name': 'Mass mailing event',
'summary': 'Link mass mailing with event for excluding recipients',
'version': '10.0.1.0.1',
'version': '12.0.1.0.0',
'category': 'Marketing',
'website': 'https://github.com/OCA/social',
'author': 'Tecnativa, '

View File

@ -3,27 +3,25 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="event_draft" model="event.registration.state">
<field name="name">Unconfirmed</field>
<field name="code">draft</field>
</record>
<record id="event_draft" model="event.registration.state">
<field name="name">Unconfirmed</field>
<field name="code">draft</field>
</record>
<record id="event_cancel" model="event.registration.state">
<field name="name">Cancelled</field>
<field name="code">cancel</field>
</record>
<record id="event_cancel" model="event.registration.state">
<field name="name">Cancelled</field>
<field name="code">cancel</field>
</record>
<record id="event_open" model="event.registration.state">
<field name="name">Confirmed</field>
<field name="code">open</field>
</record>
<record id="event_open" model="event.registration.state">
<field name="name">Confirmed</field>
<field name="code">open</field>
</record>
<record id="event_done" model="event.registration.state">
<field name="name">Attended</field>
<field name="code">done</field>
</record>
<record id="event_done" model="event.registration.state">
<field name="name">Attended</field>
<field name="code">done</field>
</record>
</data>
</odoo>

View File

@ -1,95 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mass_mailing_event
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.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: mass_mailing_event
#: model:ir.model,name:mass_mailing_event.model_event_registration
msgid "Attendee"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_code
msgid "Code"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_create_uid
msgid "Created by"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_create_date
msgid "Created on"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_display_name
msgid "Display Name"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_mail_mass_mailing_event_id
msgid "Event related"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_mail_mass_mailing_exclude_event_state_ids
msgid "Exclude"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_id
msgid "ID"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state___last_update
msgid "Last Modified on"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_write_uid
msgid "Last Updated by"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_write_date
msgid "Last Updated on"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model,name:mass_mailing_event.model_mail_mass_mailing
msgid "Mass Mailing"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model,name:mass_mailing_event.model_mail_mass_mailing_contact
msgid "Mass Mailing Contact"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model.fields,field_description:mass_mailing_event.field_event_registration_state_name
msgid "Name"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model,name:mass_mailing_event.model_res_partner
msgid "Partner"
msgstr ""
#. module: mass_mailing_event
#: model:ir.model,name:mass_mailing_event.model_event_registration_state
msgid "event.registration.state"
msgstr ""

View File

@ -0,0 +1,97 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mass_mailing_event_registration_exclude
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-08 17:50+0000\n"
"PO-Revision-Date: 2020-07-08 17:50+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__code
msgid "Code"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model,name:mass_mailing_event_registration_exclude.model_res_partner
msgid "Contact"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__create_uid
msgid "Created by"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__create_date
msgid "Created on"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__display_name
msgid "Display Name"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model,name:mass_mailing_event_registration_exclude.model_event_registration
msgid "Event Registration"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model,name:mass_mailing_event_registration_exclude.model_event_registration_state
msgid "Event Registration State"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_mail_mass_mailing__event_id
msgid "Event related"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_mail_mass_mailing__exclude_event_state_ids
msgid "Exclude"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__id
msgid "ID"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state____last_update
msgid "Last Modified on"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__write_uid
msgid "Last Updated by"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__write_date
msgid "Last Updated on"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model,name:mass_mailing_event_registration_exclude.model_mail_mass_mailing
msgid "Mass Mailing"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model,name:mass_mailing_event_registration_exclude.model_mail_mass_mailing_contact
msgid "Mass Mailing Contact"
msgstr ""
#. module: mass_mailing_event_registration_exclude
#: model:ir.model.fields,field_description:mass_mailing_event_registration_exclude.field_event_registration_state__name
msgid "Name"
msgstr ""

View File

@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-
from . import event_registration
from . import event_registration_state
from . import mail_mass_mailing

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2016 Tenativa - Antonio Espinosa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
@ -11,7 +10,7 @@ class EventRegistration(models.Model):
@api.model
def search_count(self, domain):
res = super(EventRegistration, self).search_count(domain)
res = super().search_count(domain)
mass_mailing_id = self.env.context.get('exclude_mass_mailing', False)
if mass_mailing_id:
res_ids = event_filtered_ids(

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
@ -7,6 +6,7 @@ from odoo import fields, models
class EventRegistrationState(models.Model):
_name = 'event.registration.state'
_description = 'Event Registration State'
name = fields.Char(required=True)
code = fields.Char(required=True)

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import copy
@ -44,9 +43,9 @@ class MailMassMailing(models.Model):
string="Exclude", default=_default_exclude_event_state_ids)
def get_recipients(self):
res_ids = super(MailMassMailing, self).get_recipients()
res_ids = super().get_recipients()
if res_ids:
domain = [('id', 'in', res_ids)]
res_ids = event_filtered_ids(
self.env[self.mailing_model], self.id, domain, field='email')
self.env[self.mailing_model_real], self.id, domain, field='email')
return res_ids

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2020 Tecnativa - Alexandre D. Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
@ -11,7 +11,7 @@ class MailMassMailingContact(models.Model):
@api.model
def search_count(self, domain):
res = super(MailMassMailingContact, self).search_count(domain)
res = super().search_count(domain)
mass_mailing_id = self.env.context.get('exclude_mass_mailing', False)
if mass_mailing_id:
res_ids = event_filtered_ids(

View File

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
@ -11,7 +10,7 @@ class ResPartner(models.Model):
@api.model
def search_count(self, domain):
res = super(ResPartner, self).search_count(domain)
res = super().search_count(domain)
mass_mailing_id = self.env.context.get('exclude_mass_mailing', False)
if mass_mailing_id:
res_ids = event_filtered_ids(

View File

@ -0,0 +1,5 @@
* `Tecnativa <https://www.tecnativa.com>`__:
* Antonio Espinosa
* David Vidal
* Alexandre D. Díaz

View File

@ -0,0 +1,3 @@
This module links ``mass_mailing`` with ``event`` in order to exclude
recipients that are already registered, confirmed, cancelled, attended, or a
combination of these states, when the mass mailing is sent.

View File

@ -0,0 +1,15 @@
In a mass mailing, users can set an event related and exclude the recipients who
have an email address already registered in that event.
This is useful in this scenario:
1. Create a mass mailing for telling to 1000 partners that a new event is
available.
2. During a week some of them (50) have been registered in the event
3. Then, a week after the first mass mailing, duplicate it to get a second
mass mailing. Relate this one to the event and exclude the registered emails.
Change the message body to remember that early bird period is going to expire
soon.
4. Send the second mass mailing and registered emails are automatically excluded,
So it's been only sent to 950 partners the ones who are not registered in the
event yet.

View File

@ -0,0 +1,446 @@
<?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>Mass mailing event</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="mass-mailing-event">
<h1 class="title">Mass mailing event</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/social/tree/12.0/mass_mailing_event_registration_exclude"><img alt="OCA/social" src="https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/social-12-0/social-12-0-mass_mailing_event_registration_exclude"><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/205/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module links <tt class="docutils literal">mass_mailing</tt> with <tt class="docutils literal">event</tt> in order to exclude
recipients that are already registered, confirmed, cancelled, attended, or a
combination of these states, when the mass mailing is sent.</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>In a mass mailing, users can set an event related and exclude the recipients who
have an email address already registered in that event.</p>
<p>This is useful in this scenario:</p>
<p>1. Create a mass mailing for telling to 1000 partners that a new event is
available.
2. During a week some of them (50) have been registered in the event
3. Then, a week after the first mass mailing, duplicate it to get a second
mass mailing. Relate this one to the event and exclude the registered emails.
Change the message body to remember that early bird period is going to expire
soon.
4. Send the second mass mailing and registered emails are automatically excluded,
So its been only sent to 950 partners the ones who are not registered in the
event yet.</p>
</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/social/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/social/issues/new?body=module:%20mass_mailing_event_registration_exclude%0Aversion:%2012.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>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul>
<li><p class="first"><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:</p>
<blockquote>
<ul class="simple">
<li>Antonio Espinosa</li>
<li>David Vidal</li>
<li>Alexandre D. Díaz</li>
</ul>
</blockquote>
</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/social/tree/12.0/mass_mailing_event_registration_exclude">OCA/social</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>

View File

@ -1,3 +1 @@
# -*- coding: utf-8 -*-
from . import test_mass_mailing_event
from . import test_mass_mailing_event_registration_exclude

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2016 Antonio Espinosa <antonio.espinosa@tecnativa.com>
# Copyright 2017 David Vidal <david.vidal@tecnativa.com>
# Copyright 2016 Tecnativa - Antonio Espinosa
# Copyright 2017 Tecnativa - David Vidal
# Copyright 2020 Tecnativa - Alexandre D. Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import at_install, post_install, SavepointCase
@ -8,15 +8,15 @@ from odoo.tests.common import at_install, post_install, SavepointCase
@at_install(False)
@post_install(True)
class TestMassMailingEvent(SavepointCase):
class TestMassMailingEventRegistrationExclude(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestMassMailingEvent, cls).setUpClass()
super(TestMassMailingEventRegistrationExclude, cls).setUpClass()
cls.event = cls.env['event.event'].create({
'name': 'Test event',
'date_begin': '2017-06-24 8:00:00',
'date_end': '2017-06-30 18:00:00',
'date_begin': '2020-06-24 8:00:00',
'date_end': '2020-06-30 18:00:00',
})
cls.registration = cls.env['event.registration'].create({
'event_id': cls.event.id,
@ -30,12 +30,12 @@ class TestMassMailingEvent(SavepointCase):
'name': 'Test list',
})
cls.contact_a = cls.env['mail.mass_mailing.contact'].create({
'list_id': cls.contact_list.id,
'list_ids': [(4, cls.contact_list.id, False)],
'name': 'Test contact A',
'email': 'partner_a@example.org',
})
cls.contact_b = cls.env['mail.mass_mailing.contact'].create({
'list_id': cls.contact_list.id,
'list_ids': [(4, cls.contact_list.id, False)],
'name': 'Test contact B',
'email': 'partner_b@example.org',
})
@ -50,19 +50,21 @@ class TestMassMailingEvent(SavepointCase):
def test_mailing_contact(self):
domain = [
('list_id', 'in', [self.contact_list.id]),
('list_ids', 'in', [self.contact_list.id]),
('opt_out', '=', False),
]
mass_mailing = self.env['mail.mass_mailing'].create({
'name': 'Test subject',
'email_from': 'from@example.com',
'mailing_model': 'mail.mass_mailing.contact',
'mailing_model_id':
self.env['ir.model']._get('mail.mass_mailing.contact').id,
'mailing_domain': str(domain),
'contact_list_ids': [(6, 0, [self.contact_list.id])],
'body_html': '<p>Test email body</p>',
'reply_to_mode': 'email',
})
}).with_context(default_list_ids=[self.contact_list.id])
mail_contact = self.env['mail.mass_mailing.contact'].with_context(
default_list_ids=[self.contact_list.id],
exclude_mass_mailing=mass_mailing.id)
self.assertEqual(
[self.contact_a.id, self.contact_b.id],
@ -88,7 +90,6 @@ class TestMassMailingEvent(SavepointCase):
def test_mailing_partner(self):
domain = [
('id', 'in', [self.partner_a.id, self.partner_b.id]),
('opt_out', '=', False),
]
domain_reg = [
('event_id', '=', self.event.id),
@ -96,11 +97,11 @@ class TestMassMailingEvent(SavepointCase):
mass_mailing = self.env['mail.mass_mailing'].create({
'name': 'Test subject',
'email_from': 'from@example.com',
'mailing_model': 'res.partner',
'mailing_model_id': self.env['ir.model']._get('res.partner').id,
'mailing_domain': str(domain),
'body_html': '<p>Test email body</p>',
'reply_to_mode': 'email',
})
}).with_context(default_list_ids=[self.contact_list.id])
mail_partner = self.env['res.partner'].with_context(
exclude_mass_mailing=mass_mailing.id)
mail_registration = self.env['event.registration'].with_context(