[IMP] account_advanced_protection_features: correct function button_draft when called on multiple moves
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m27s

This commit is contained in:
2026-01-07 16:56:30 +01:00
parent c7254a7b84
commit 36b12f43af
3 changed files with 60 additions and 5 deletions

View File

@@ -5,11 +5,12 @@ class AccountMove(models.Model):
_inherit = 'account.move' _inherit = 'account.move'
def button_draft(self): def button_draft(self):
if self.is_move_sent and self.journal_id.prevent_reset_to_draft_sent_invoice: for move in self:
raise UserError(_( if move.is_move_sent and move.journal_id.prevent_reset_to_draft_sent_invoice:
"You cannot reset to draft this invoice because it has been sent by email." raise UserError(_(
)) "You cannot reset to draft this invoice because it has been sent by email."
return super(AccountMove, self).button_draft() ))
return super().button_draft()
@api.ondelete(at_uninstall=False) @api.ondelete(at_uninstall=False)
def _check_posted(self): def _check_posted(self):

View File

@@ -0,0 +1 @@
from . import test_account_move

View File

@@ -0,0 +1,53 @@
# Copyright 2025 Boris Gallet, Clément Thomas, Quentin Mondot
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import TransactionCase
class TestAccountMoveButtonDraft(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.partner = cls.env["res.partner"].create({"name": "Test Partner"})
cls.journal = cls.env["account.journal"].search(
[("type", "=", "sale")], limit=1
)
cls.account = cls.env["account.account"].search(
[("account_type", "=", "income")], limit=1
)
def _create_invoice(self):
return self.env["account.move"].create({
"move_type": "out_invoice",
"partner_id": self.partner.id,
"journal_id": self.journal.id,
"invoice_line_ids": [
(0, 0, {
"name": "Test line",
"quantity": 1,
"price_unit": 100.0,
"account_id": self.account.id,
}),
],
})
def test_button_draft_multiple_moves(self):
"""Test that button_draft works on multiple account.move records.
"""
# Create two invoices
invoice1 = self._create_invoice()
invoice2 = self._create_invoice()
# Post both invoices
invoice1.action_post()
invoice2.action_post()
# Combine them into a recordset
invoices = invoice1 | invoice2
# This should not raise "Expected singleton" error
invoices.button_draft()
# Verify both are back to draft
self.assertEqual(invoice1.state, "draft")
self.assertEqual(invoice2.state, "draft")