Skip to content

Commit

Permalink
[IMP] sale_order_line_cancel: support kits
Browse files Browse the repository at this point in the history
  • Loading branch information
jbaudoux committed May 8, 2024
1 parent b79aebf commit 217d3a8
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
3 changes: 2 additions & 1 deletion sale_order_line_cancel/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# © 2016 Sylvain Van Hoof
# Copyright 2018 Sylvain Van Hoof (Okia SPRL)
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <[email protected]>
# Copyright 2023 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

Expand Down
15 changes: 7 additions & 8 deletions sale_order_line_cancel/models/sale_order_line.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2018 Okia SPRL
# Copyright 2018 Jacques-Etienne Baudoux (BCIM) <[email protected]>
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand Down Expand Up @@ -30,11 +31,11 @@ def _compute_can_cancel_remaining_qty(self):
for rec in self:
rec.can_cancel_remaining_qty = (
float_compare(
rec.product_qty_remains_to_deliver, 0, precision_digits=precision
rec.qty_remains_to_deliver, 0, precision_digits=precision
)
== 1
and rec.state in ("sale", "done")
and rec.move_ids
and rec.qty_delivered_method == 'stock_move'
)

@api.depends(
Expand All @@ -44,10 +45,8 @@ def _compute_can_cancel_remaining_qty(self):
)
def _compute_product_qty_remains_to_deliver(self):
for line in self:
remaining_to_deliver = (
line.product_uom_qty - line.qty_delivered - line.product_qty_canceled
)
line.product_qty_remains_to_deliver = remaining_to_deliver
qty_remaining = line.qty_to_deliver - line.product_qty_canceled
line.product_qty_remains_to_deliver = qty_remaining

def _get_moves_to_cancel(self):
return self.move_ids.filtered(lambda m: m.state not in ("done", "cancel"))
Expand Down Expand Up @@ -101,10 +100,10 @@ def _cancel_by_running_procurement(self):
simulate_procured_qty = self.product_uom_qty + qty_to_cancel
self.ensure_one()
line = self.with_context(simulate_procured_qty=simulate_procured_qty)
previous_sate = line.state
previous_state = line.state
line.state = "sale"
line._action_launch_stock_rule(simulate_procured_qty)
line.state = previous_sate
line.state = previous_state
line.product_qty_canceled += qty_to_cancel

def _get_qty_procurement(self, previous_product_uom_qty=False):
Expand Down
9 changes: 6 additions & 3 deletions sale_order_line_cancel/models/stock_move.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Copyright 2023 ACSONE SA/NV
# Copyright 2024 Jacques-Etienne Baudoux (BCIM) <[email protected]>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import models
Expand All @@ -13,8 +14,10 @@ def _action_cancel(self):
lambda m: m.sale_line_id and m.state not in ("done", "cancel")
)
res = super()._action_cancel()
for rec in sale_moves:
if rec.state != "cancel":
sale_lines = sale_moves.filtered(lambda m: m.state == "cancel").sale_line_id
for line in sale_lines:
# Update SO line qty canceled only when all remaining moves are canceled
if line._get_moves_to_cancel():
continue
rec.sale_line_id.product_qty_canceled = rec.product_uom_qty
line.product_qty_canceled = line.qty_to_deliver
return res

0 comments on commit 217d3a8

Please sign in to comment.