- In DB which use large amounts of records and intesive use of
mass_mailings, not optimized compute records lead to a drastical
decrease of performance
* [FIX+IMP] mass_mailing_list_dynamic: tests, icons, filters...
* Brand new icon
* Added feature of loading an existing filter as criteria
* Tests as SavepointCase for optimizing times
* Tests in post-install for avoiding errors on res.partner not null constraints
when several modules added them.
* Updated documentation.
* Fix mock in test for not commiting test data.
* [FIX] mass_mailing_list_dynamic: Wasn't able to create contacts in fully synced lists
Syncing context was being set in the wrong object. Added to test too.
* [FIX] mass_mailing_list_dynamic: Allow to write back vals from res.partner
Module mass_mailing_partner writes back certain values from partner to
mass_mailing_contact. Module should allow that write operation.
Without this patch, users without access to reading and editing mass mailing contact records are now unable to change a partner's name or email. They'd recieve an exception such as:
AccessError: Sorry, you are not allowed to access this document. Only users with the following access level are currently allowed to do that:
- Mass Mailing/User
(Document model: mail.mass_mailing.contact)
Restrictive ACLs shouldn't restrict normal user operation nor DB consistency, so using sudo mode now and testing behavior.
* Exclude opt_out.
Now opted-out records will not be counted in the "Mailing lists" smart button
in the partner form.
* Avoid duplicate error.
By indicating the exact `partner_id` and ensuring no contacts associated to it are found, you avoid possible duplication errors when several partners share the same name or email.
Under some integration environment, the public part of the tour fails to load, I don't know exactly why (or better, I don't know why it was working before, because it was deleting the phantomjs session entirely).
In any case, with this fix, it works there and is faster to test.
- Relicense to LGPL.
- Fix all known issues.
- Enable tour only in demo instances.
- Fix Sass headers.
- Remove compiled css and maps.
- Update JS modules to new api.
- Update tour to new tours api.
- Update module structure to match latest template.
Let you have the name field in the mass mailing subscription snippet.
Leave most logic to base module.
Make name field autofilled if user data is available.
Add tour test.
- Imported last updates from v8.
- Adapted to v9.
- Added a saner default to `mass_mailing.salt` configuration parameter by
reusing `database.secret` if available, hoping that some day
https://github.com/odoo/odoo/pull/12040 gets merged.
- Updated README.
- Increase security, drop backwards compatibility.
Security got improved upstream, which would again break compatibility among current addon and future master upstream.
I choose to break it now and keep it secured future-wise, so I drop the backwards compatibility features.
- Includes tour tests.
- Removes outdated tests.
- Extends the mailing list management form when unsubscriber is a contact.
- Adds a reason form even if he is not.
- Avoids all methods that were not model-agnostic.
[FIX][mass_mailing_custom_unsubscribe] Reasons noupdate
After this fix, when you update the addon, you will not lose your customized reasons.
[FIX] Compatibilize with mass_mailing_partner
Current test code was based on the assumption that the `@api.model` decorator on `create()` ensured an empty recordset when running the method, but that's not true. This was causing an incompatibility betwee these tests and the `mass_mailing_partner` addon, which works assuming 0-1 recordsets.
Now records are created from an empty recordset, and thus tests work everywhere.
Update instructions
If the user does not add the unsubscribe snippet, nothing will happen, so it's added to README to avoid confusion when testing/using the addon.
[FIX] Use the right operator to preserve recordsets order
Using `|=` sorts records at will each time (treating them as Python's `set`).
Using `+=` always appends a record to the end of the set.
Since we are using the record position in the set, this caused the test to work sometimes and fail other times. Now it works always.