diff --git a/agreement_rebate/models/agreement_rebate_settlement.py b/agreement_rebate/models/agreement_rebate_settlement.py
index c9ff579ab..29f5077a4 100644
--- a/agreement_rebate/models/agreement_rebate_settlement.py
+++ b/agreement_rebate/models/agreement_rebate_settlement.py
@@ -32,6 +32,7 @@ class AgreementRebateSettlement(models.Model):
amount_invoiced = fields.Float(string="Amount invoiced")
amount_rebate = fields.Float(string="Amount rebate")
invoice_id = fields.Many2one(comodel_name="account.move", string="Invoice")
+ active = fields.Boolean(default=True)
@api.model_create_multi
def create(self, vals_list):
@@ -43,6 +44,17 @@ class AgreementRebateSettlement(models.Model):
)
return super(AgreementRebateSettlement, self).create(vals_list)
+ def write(self, vals):
+ res = super().write(vals)
+ if "active" in vals and not self.env.context.get(
+ "skip_active_field_update", False
+ ):
+ lines = self.with_context(active_test=False).line_ids.filtered(
+ lambda ln: ln.active != vals["active"]
+ )
+ lines.with_context(skip_active_field_update=True).active = vals["active"]
+ return res
+
def _reverse_type_map(self, inv_type):
return {
"out_invoice": "out_refund",
@@ -101,6 +113,13 @@ class AgreementRebateSettlement(models.Model):
action["domain"] = [("id", "in", self.ids)]
return action
+ def action_show_settlement_lines(self):
+ action = self.env.ref(
+ "agreement_rebate.agreement_rebate_settlement_line_action"
+ ).read()[0]
+ action["domain"] = [("settlement_id", "in", self.ids)]
+ return action
+
def action_show_agreement(self):
agreements = self.line_ids.mapped("agreement_id")
action = self.env.ref("agreement.agreement_action").read()[0]
@@ -167,6 +186,7 @@ class AgreementRebateSettlementLine(models.Model):
store=True,
readonly=False,
)
+ active = fields.Boolean(default=True)
@api.depends(
"invoice_line_ids",
@@ -188,6 +208,27 @@ class AgreementRebateSettlementLine(models.Model):
else:
line.invoice_status = "to_invoice"
+ def write(self, vals):
+ res = super().write(vals)
+ if "active" in vals and not self.env.context.get(
+ "skip_active_field_update", False
+ ):
+ if vals["active"]:
+ # If one line is active settlement must be active
+ settlements = self.mapped("settlement_id").filtered(
+ lambda s: not s.active
+ )
+ else:
+ # If lines are archived and the settlement has not active lines, the
+ # settlement must be archived
+ settlements = self.mapped("settlement_id").filtered(
+ lambda s: s.active and not s.line_ids
+ )
+ settlements.with_context(skip_active_field_update=True).active = vals[
+ "active"
+ ]
+ return res
+
def _prepare_invoice(self):
"""
Prepare the dict of values to create the new invoice for a sales order.
diff --git a/agreement_rebate/views/agreement_rebate_settlement_view.xml b/agreement_rebate/views/agreement_rebate_settlement_view.xml
index 612db9f29..5574679f6 100644
--- a/agreement_rebate/views/agreement_rebate_settlement_view.xml
+++ b/agreement_rebate/views/agreement_rebate_settlement_view.xml
@@ -22,6 +22,14 @@
string="Invoiced"
domain="[('line_ids.invoice_status', '=', 'invoiced')]"
/>
+
+
+
+
+
+
@@ -62,15 +72,29 @@
>
Agreement
+
+
@@ -78,6 +102,7 @@
+
@@ -107,7 +132,7 @@
@@ -140,7 +165,7 @@
-
-
+
+
+
+