Skip to content

Commit

Permalink
Merge pull request #9 from factorlibre/16-0-fix-2-sale_invoice_policy
Browse files Browse the repository at this point in the history
[16.0][FIX] sale_invoice_policy: if not order_id.invoice_policy_required, keep standard behaviour
  • Loading branch information
ACheung-FactorLibre authored Apr 17, 2024
2 parents 9050c2d + 1e4b634 commit b3a867b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 15 deletions.
1 change: 0 additions & 1 deletion sale_invoice_policy/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@


class SaleOrder(models.Model):

_inherit = "sale.order"

invoice_policy = fields.Selection(
Expand Down
21 changes: 7 additions & 14 deletions sale_invoice_policy/models/sale_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"

def _get_order_lines_by_invoice_policy(self, invoice_policy):
def _get_required_order_lines_by_invoice_policy(self, invoice_policy):
so_lines = self.filtered(
lambda x, p=invoice_policy: x.order_id.invoice_policy == p
and x.order_id.invoice_policy_required
).with_prefetch()
return so_lines

Expand All @@ -33,17 +34,13 @@ def _compute_qty_to_invoice(self):
line_by_id = {line.id: line for line in self}
done_lines = self.env["sale.order.line"]
for invoice_policy in invoice_policies:
so_lines = self._get_order_lines_by_invoice_policy(invoice_policy)
so_lines._set_invoice_policy_on_product_templates(invoice_policy)
so_lines = self._get_required_order_lines_by_invoice_policy(invoice_policy)
if so_lines:
done_lines |= so_lines
so_lines._set_invoice_policy_on_product_templates(invoice_policy)
super(SaleOrderLine, so_lines)._compute_qty_to_invoice()
for line in so_lines:
# due to the change of context in compute methods,
# assign the value in the modified context to self
line_by_id[line.id].qty_to_invoice = line.qty_to_invoice
# Not to break function if (it could not happen) some records
# were not in so_lines
super(SaleOrderLine, self - done_lines)._compute_qty_to_invoice()
return True

Expand All @@ -60,16 +57,12 @@ def _compute_invoice_status(self):
line_by_id = {line.id: line for line in self}
done_lines = self.env["sale.order.line"]
for invoice_policy in invoice_policies:
so_lines = self._get_order_lines_by_invoice_policy(invoice_policy)
so_lines._set_invoice_policy_on_product_templates(invoice_policy)
done_lines |= so_lines
so_lines = self._get_required_order_lines_by_invoice_policy(invoice_policy)
if so_lines:
done_lines |= so_lines
so_lines._set_invoice_policy_on_product_templates(invoice_policy)
super(SaleOrderLine, so_lines)._compute_invoice_status()
for line in so_lines:
# due to the change of context in compute methods,
# assign the value in the modified context to self
line_by_id[line.id].invoice_status = line.invoice_status
# Not to break function if (it could not happen) some records
# were not in so_lines
super(SaleOrderLine, self - done_lines)._compute_invoice_status()
return True
12 changes: 12 additions & 0 deletions sale_invoice_policy/tests/test_sale_invoice_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ def setUpClass(cls):

def test_sale_order_invoice_order(self):
"""Test invoicing based on ordered quantities"""
settings = self.env["res.config.settings"].create({})
settings.sale_invoice_policy_required = True
settings.execute()
so = self.env["sale.order"].create(
{
"partner_id": self.env.ref("base.res_partner_2").id,
Expand All @@ -36,6 +39,9 @@ def test_sale_order_invoice_order(self):
"invoice_policy": "order",
}
)
so._compute_invoice_policy_required()
self.assertTrue(so.invoice_policy_required)
self.assertTrue(so.invoice_policy == "order")

so.action_confirm()

Expand All @@ -56,6 +62,9 @@ def test_sale_order_invoice_order(self):

def test_sale_order_invoice_deliver(self):
"""Test invoicing based on delivered quantities"""
settings = self.env["res.config.settings"].create({})
settings.sale_invoice_policy_required = True
settings.execute()
so = self.env["sale.order"].create(
{
"partner_id": self.env.ref("base.res_partner_2").id,
Expand All @@ -66,6 +75,9 @@ def test_sale_order_invoice_deliver(self):
],
}
)
so._compute_invoice_policy_required()
self.assertTrue(so.invoice_policy_required)
self.assertTrue(so.invoice_policy == "delivery")

so.action_confirm()

Expand Down

0 comments on commit b3a867b

Please sign in to comment.