From ebebd6e84ea51b6e3bdfcd7ff8dae8df5ce2eef0 Mon Sep 17 00:00:00 2001 From: Kristof Bernaert Date: Mon, 26 Jan 2026 04:04:44 +0100 Subject: [PATCH] Fix allow_mail_archived_partner causing system notifications to send emails --- .../models/account_move_send.py | 20 ++++++++++++----- .../models/mail_thread.py | 22 ++++++++++++++++++- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/allow_mail_archived_partner/models/account_move_send.py b/allow_mail_archived_partner/models/account_move_send.py index 0aee72a..d8f4c83 100755 --- a/allow_mail_archived_partner/models/account_move_send.py +++ b/allow_mail_archived_partner/models/account_move_send.py @@ -41,15 +41,23 @@ class AccountInvoiceSend(models.TransientModel): _logger.error(f"🔥 Partner IDs: {self.partner_ids.ids}") _logger.error(f"🔥 Current context: {dict(self.env.context)}") - # CRITICAL: Pass ALL required context flags + # CRITICAL: Get the actual partner email for logging + if self.partner_ids: + for partner in self.partner_ids: + _logger.error(f"🔥 Wizard partner: {partner.id} - {partner.name}, active={partner.active}, email={partner.email}") + + # Call parent with context AND ensure partner_ids are passed + # We need to pass partner_ids to the message_post call return super( AccountInvoiceSend, self.with_context( - active_test=False, # For res.partner searches - include_archived_partners=True, # For mail_thread.py - mail_notify_force=True, # For mail_thread.py - force_email=True, # Already present - mark_invoice_as_sent=True, # Already present + active_test=False, + include_archived_partners=True, + mail_notify_force=True, + force_email=True, + mark_invoice_as_sent=True, + # Add partner_ids to context so mail_thread can access them + invoice_partner_ids=self.partner_ids.ids if self.partner_ids else [], ) ).action_send_and_print() diff --git a/allow_mail_archived_partner/models/mail_thread.py b/allow_mail_archived_partner/models/mail_thread.py index 88cade4..d50897a 100755 --- a/allow_mail_archived_partner/models/mail_thread.py +++ b/allow_mail_archived_partner/models/mail_thread.py @@ -19,6 +19,11 @@ class MailThread(models.AbstractModel): _logger.error(f"🔥 Message subject: {getattr(message, 'subject', 'No subject')}") _logger.error(f"🔥 Context: {dict(self.env.context)}") + # Check message attributes + _logger.error(f"🔥 Message author_id: {getattr(message, 'author_id', None)}") + _logger.error(f"🔥 Message partner_ids: {getattr(message, 'partner_ids', None)}") + _logger.error(f"🔥 Message record: {message.model if hasattr(message, 'model') else 'N/A'} {message.res_id if hasattr(message, 'res_id') else 'N/A'}") + return super()._notify_thread(message, msg_vals=msg_vals, **kwargs) def _notify_get_recipients(self, message, msg_vals, **kwargs): @@ -116,7 +121,7 @@ class MailThread(models.AbstractModel): def message_post(self, **kwargs): """ - Log when messages are posted via chatter. + Override to ensure partner_ids are passed from context when empty. """ _logger.error("🔥🔥🔥 MailThread.message_post CALLED 🔥🔥🔥") _logger.error(f"🔥 Model: {self._name}") @@ -124,4 +129,19 @@ class MailThread(models.AbstractModel): _logger.error(f"🔥 Context: {dict(self.env.context)}") _logger.error(f"🔥 Partner IDs in kwargs: {kwargs.get('partner_ids', [])}") + # Check if we have partner_ids from context (passed from account.invoice.send) + context_partner_ids = self.env.context.get('invoice_partner_ids', []) + if context_partner_ids and not kwargs.get('partner_ids'): + _logger.error(f"🔥 Using partner_ids from context: {context_partner_ids}") + kwargs['partner_ids'] = [(6, 0, context_partner_ids)] + + # Also check for other sources of partner_ids + if not kwargs.get('partner_ids'): + # Try to get from the record itself + if self and hasattr(self, 'partner_id'): + _logger.error(f"🔥 Getting partner_id from record: {self.partner_id.id}") + kwargs['partner_ids'] = [(6, 0, [self.partner_id.id])] + + _logger.error(f"🔥 Final partner_ids being passed: {kwargs.get('partner_ids', [])}") + return super().message_post(**kwargs) \ No newline at end of file