Skip to content

Commit 6d0aeba

Browse files
committed
[IMP] sale_order_revision: carry Invoice links to new revision Sales Orders
1 parent a6bb2d8 commit 6d0aeba

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

sale_order_revision/models/sale_order.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ def action_view_revisions(self):
5151
"context": context,
5252
}
5353

54+
def create_revision(self):
55+
# Extends base_revision module
56+
action = super().create_revision()
57+
# Keep links to Invoices on the new Sale Order
58+
old_lines = self.order_line
59+
new_lines = self.current_revision_id.order_line
60+
for old_line, new_line in zip(old_lines, new_lines):
61+
new_line.invoice_lines = old_line.invoice_lines
62+
return action
63+
5464
def action_cancel_create_revision(self):
5565
for sale in self:
5666
sale.action_cancel()

sale_order_revision/tests/test_sale_order_revision.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,33 @@ def setUpClass(cls):
1212
super().setUpClass()
1313
cls.revision_model = cls.env["sale.order"]
1414
cls.partner = cls.env["res.partner"].create({"name": "Mr Odoo"})
15-
cls.product = cls.env["product.product"].create({"name": "Test product"})
15+
cls.product = cls.env["product.product"].create(
16+
{"name": "Test product", "invoice_policy": "order"}
17+
)
1618

1719
def _create_tester(self):
1820
sale_form = Form(self.revision_model)
1921
sale_form.partner_id = self.partner
2022
with sale_form.order_line.new() as line_form:
2123
line_form.product_id = self.product
24+
line_form.product_uom_qty = 10
25+
line_form.price_unit = 10
2226
return sale_form.save()
2327

28+
def _create_sale_invoice(self, sale):
29+
SaleInv = self.env["sale.advance.payment.inv"].with_context(active_ids=sale.ids)
30+
popup = SaleInv.create({"advance_payment_method": "delivered"})
31+
popup.create_invoices()
32+
2433
def test_action_cancel_create_revision(self):
2534
sale = self._create_tester()
35+
sale.action_confirm()
36+
self._create_sale_invoice(sale)
2637
sale.action_cancel_create_revision()
2738
self.assertEqual(sale.state, "cancel", "Original SO was cancelled")
2839
self.assertTrue(sale.current_revision_id, "A new SO version was created")
40+
self.assertEqual(
41+
sale.current_revision_id.invoice_ids,
42+
sale.invoice_ids,
43+
"The Sale Order revision keeps a link to the original invoices",
44+
)

0 commit comments

Comments
 (0)