diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 396baff97fe..ac2fde727a2 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -101,6 +101,10 @@ class MailComposer(models.TransientModel): if 'create_uid' in fields_list and 'create_uid' not in result: result['create_uid'] = self.env.uid + # comment mode by default removes emails + if 'auto_delete' in fields_list and 'auto_delete' not in result and result.get('composition_mode') == 'comment': + result['auto_delete'] = True + return { fname: result[fname] for fname in result if fname in fields_list @@ -264,7 +268,8 @@ class MailComposer(models.TransientModel): template = self.env['mail.template'].browse(template_id) values = dict( (field, template[field]) - for field in ('email_from', + for field in ('auto_delete', + 'email_from', 'reply_to', 'scheduled_date', 'subject', @@ -285,6 +290,7 @@ class MailComposer(models.TransientModel): self.env['mail.template'].browse(template_id), template_res_ids, ('attachment_ids', + 'auto_delete', 'body_html', 'email_cc', 'email_from', @@ -318,6 +324,8 @@ class MailComposer(models.TransientModel): default_model=model, default_res_ids=res_ids ).default_get(['attachment_ids', + 'auto_delete', + 'auto_delete_keep_log', 'body', 'composition_mode', 'email_from', @@ -333,6 +341,8 @@ class MailComposer(models.TransientModel): values = dict( (key, default_values[key]) for key in ('attachment_ids', + 'auto_delete', + 'auto_delete_keep_log', 'body', 'email_from', 'mail_server_id', @@ -657,7 +667,7 @@ class MailComposer(models.TransientModel): values.update( email_add_signature=not bool(self.template_id) and self.email_add_signature, email_layout_xmlid=self.email_layout_xmlid, - mail_auto_delete=self.template_id.auto_delete if self.template_id else True, + mail_auto_delete=self.auto_delete, model_description=model_description, ) return values diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 2080a7890a5..d57670fd72c 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -1058,7 +1058,7 @@ class MassMailing(models.Model): composer_values = { 'auto_delete': not mailing.keep_archives, # email-mode: keep original message for routing - 'auto_delete_message': not mailing.reply_to_mode == 'update', + 'auto_delete_keep_log': mailing.reply_to_mode == 'update', 'author_id': author_id, 'attachment_ids': [(4, attachment.id) for attachment in mailing.attachment_ids], 'body': mailing._prepend_preview(mailing.body_html, mailing.preview), diff --git a/addons/mass_mailing/wizard/mail_compose_message.py b/addons/mass_mailing/wizard/mail_compose_message.py index 0257761489b..c522ee8d07a 100644 --- a/addons/mass_mailing/wizard/mail_compose_message.py +++ b/addons/mass_mailing/wizard/mail_compose_message.py @@ -53,9 +53,6 @@ class MailComposeMessage(models.TransientModel): mail_values['body_html'] = body mail_values.update({ - 'auto_delete': not self.mass_mailing_id.keep_archives, - # email-mode: keep original message for routing - 'is_notification': self.mass_mailing_id.reply_to_mode == 'update', 'mailing_id': self.mass_mailing_id.id, 'mailing_trace_ids': [(0, 0, trace_values_all[res_id])] if res_id in trace_values_all else False, }) diff --git a/addons/test_mail/tests/test_mail_composer.py b/addons/test_mail/tests/test_mail_composer.py index 5af84501003..251457ba98f 100644 --- a/addons/test_mail/tests/test_mail_composer.py +++ b/addons/test_mail/tests/test_mail_composer.py @@ -127,7 +127,7 @@ class TestComposerForm(TestMailComposer): composer_form = Form(self.env['mail.compose.message'].with_context( self._get_web_context(self.test_record, add_web=True) )) - self.assertFalse(composer_form.auto_delete) + self.assertTrue(composer_form.auto_delete, 'MailComposer: comment mode should remove notification emails by default') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertFalse(composer_form.body) @@ -204,8 +204,7 @@ class TestComposerForm(TestMailComposer): composer_form = Form(self.env['mail.compose.message'].with_context( self._get_web_context(self.test_record, add_web=True, default_template_id=self.template.id) )) - # self.assertTrue(composer_form.auto_delete) - self.assertFalse(composer_form.auto_delete) # FIXME: currently not taking template value + self.assertTrue(composer_form.auto_delete, 'Should take template value') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertEqual(composer_form.body, '
TemplateBody %s
' % self.test_record.name) @@ -234,8 +233,7 @@ class TestComposerForm(TestMailComposer): default_composition_mode='comment', default_template_id=self.template.id), )) - # self.assertTrue(composer_form.auto_delete) - self.assertFalse(composer_form.auto_delete) # FIXME: currently not taking template value + self.assertTrue(composer_form.auto_delete, 'Should take composer value') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertEqual(composer_form.body, self.template.body_html, @@ -265,8 +263,7 @@ class TestComposerForm(TestMailComposer): default_model='mail.test.ticket', default_template_id=self.template.id, )) - # self.assertTrue(composer_form.auto_delete) - self.assertFalse(composer_form.auto_delete) # FIXME: currently not taking template value + self.assertTrue(composer_form.auto_delete, 'Should take composer value') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertEqual(composer_form.body, 'TemplateBody
') @@ -315,8 +312,7 @@ class TestComposerForm(TestMailComposer): composer_form = Form(self.env['mail.compose.message'].with_context( self._get_web_context(self.test_records, add_web=True, default_template_id=self.template.id) )) - # self.assertTrue(composer_form.auto_delete) - self.assertFalse(composer_form.auto_delete) # FIXME: currently not taking template value + self.assertTrue(composer_form.auto_delete, 'Should take composer value') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertEqual(composer_form.body, self.template.body_html, @@ -346,8 +342,7 @@ class TestComposerForm(TestMailComposer): default_model='mail.test.ticket', default_template_id=self.template.id, )) - # self.assertTrue(composer_form.auto_delete) - self.assertFalse(composer_form.auto_delete) # FIXME: currently not taking template value + self.assertTrue(composer_form.auto_delete, 'Should take composer value') self.assertTrue(composer_form.auto_delete_keep_log) self.assertEqual(composer_form.author_id, self.env.user.partner_id) self.assertEqual(composer_form.body, self.template.body_html, @@ -561,7 +556,10 @@ class TestComposerInternals(TestMailComposer): }) # default creation values - self.assertFalse(composer.auto_delete) + if composition_mode == 'comment': + self.assertTrue(composer.auto_delete, 'By default, remove notification emails') + else: + self.assertFalse(composer.auto_delete, 'By default, keep mailing emails') self.assertTrue(composer.auto_delete_keep_log) self.assertTrue(composer.email_add_signature) self.assertEqual(composer.email_layout_xmlid, 'mail.test_layout') @@ -575,14 +573,14 @@ class TestComposerInternals(TestMailComposer): # values come from template if composition_mode == 'comment': - self.assertFalse(composer.auto_delete, 'TODO: should be updated with template') + self.assertTrue(composer.auto_delete) self.assertTrue(composer.auto_delete_keep_log) self.assertTrue(composer.email_add_signature, 'TODO: should be False as template negates this config') self.assertEqual(composer.email_layout_xmlid, 'mail.test_layout') self.assertEqual(composer.message_type, 'comment') self.assertEqual(composer.subtype_id, self.env.ref('mail.mt_comment')) else: - self.assertFalse(composer.auto_delete, 'TODO: should be updated with template') + self.assertTrue(composer.auto_delete) self.assertTrue(composer.auto_delete_keep_log) self.assertTrue(composer.email_add_signature, 'TODO: should be False as template negates this config') self.assertEqual(composer.email_layout_xmlid, 'mail.test_layout') @@ -598,10 +596,6 @@ class TestComposerInternals(TestMailComposer): self.assertEqual(composer.subtype_id, self.env.ref('mail.mt_note')) self.assertTrue(composer.subtype_is_log) - # force some composer values to see changes (due to previous bugs) - composer.write({ - 'auto_delete': True, - }) # update with template with void values: void value is forced for # booleans, cannot distinguish composer.write({'template_id': template_falsy.id}) @@ -1135,7 +1129,7 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase): 'body': 'Test Body
', 'partner_ids': [(4, self.partner_1.id), (4, self.partner_2.id)] }) - self.assertFalse(composer.auto_delete) + self.assertTrue(composer.auto_delete, 'Comment mode removes notification emails by default') self.assertTrue(composer.auto_delete_keep_log) with self.mock_mail_gateway(mail_unlink_sent=True): composer._action_send_mail() @@ -1169,7 +1163,7 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase): # global outgoing self.assertEqual(len(self._mails), 3, 'Should have sent an email each recipient') self.assertEqual(len(self._new_mails), 2, 'Should have created 2 mail.mail (1 for users, 1 for customers)') - self.assertEqual(len(self._new_mails.exists()), 0, 'To fix: does not respect auto_delete') + self.assertEqual(len(self._new_mails.exists()), 2, 'Should not have deleted mail.mail records') @users('employee') @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') @@ -1534,7 +1528,7 @@ class TestComposerResultsMass(TestMailComposer): default_template_id=self.template.id) )) composer = composer_form.save() - self.assertFalse(composer.auto_delete, 'Fixme: should take composer value') + self.assertTrue(composer.auto_delete, 'Should take composer value') self.assertTrue(composer.auto_delete_keep_log) with self.mock_mail_gateway(mail_unlink_sent=True), self.mock_mail_app(): composer._action_send_mail()