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 @@