Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions product_contract/models/contract_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,6 @@ def _compute_recurring_invoicing_type(self):
)
def _compute_recurring_interval(self):
return super()._compute_recurring_interval()

def _check_set_successor(self):
return self.state == "closed"
25 changes: 4 additions & 21 deletions product_contract/models/sale_order_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,30 +86,13 @@ def _prepare_contract_line_values(
def create_contract_line(self, contract):
contract_line_model = self.env["contract.line"]
contract_line = self.env["contract.line"]
predecessor_contract_line = False
for rec in self:
if rec.contract_line_id:
# If the upsell/downsell line start at the same date or before
# the contract line to replace supposed to start, we cancel
# the one to be replaced. Otherwise we stop it.
if rec.date_start <= rec.contract_line_id.date_start:
# The contract will handel the contract line integrity
# An exception will be raised if we try to cancel an
# invoiced contract line
rec.contract_line_id.cancel()
elif (
not rec.contract_line_id.date_end
or rec.date_start <= rec.contract_line_id.date_end
):
rec.contract_line_id.stop(rec.date_start - relativedelta(days=1))
predecessor_contract_line = rec.contract_line_id
if predecessor_contract_line:
rec.contract_line_id.stop(rec.date_start - relativedelta(days=1))
if rec.contract_line_id._check_set_successor():
new_contract_line = contract_line_model.create(
rec._prepare_contract_line_values(
contract, predecessor_contract_line.id
)
rec._prepare_contract_line_values(contract, rec.contract_line_id.id)
)
predecessor_contract_line.successor_contract_line_id = new_contract_line
rec.contract_line_id.successor_contract_line_id = new_contract_line
else:
new_contract_line = contract_line_model.create(
rec._prepare_contract_line_values(contract)
Expand Down