forked from Mapan/odoo17e
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import AccessError
|
|
from odoo.tools import is_html_empty
|
|
|
|
|
|
class SaleOrderCloseReason(models.Model):
|
|
_name = "sale.order.close.reason"
|
|
_order = "sequence, id"
|
|
_description = "Subscription Close Reason"
|
|
|
|
name = fields.Char('Reason', required=True, translate=True)
|
|
sequence = fields.Integer(default=10)
|
|
|
|
visible_in_portal = fields.Boolean(default=True, required=True)
|
|
retention_message = fields.Html('Message', translate=True, help="Try to prevent customers from leaving and closing their subscriptions, thanks to a catchy message and a call to action.")
|
|
retention_button_text = fields.Char('Button Text', translate=True)
|
|
retention_button_link = fields.Char('Button Link', translate=True)
|
|
empty_retention_message = fields.Boolean(compute='_compute_empty_retention_message')
|
|
# protected reasons can't be deleted as they are used by odoo bot
|
|
is_protected = fields.Boolean(default=False)
|
|
|
|
@api.depends('retention_message')
|
|
def _compute_empty_retention_message(self):
|
|
for reason in self:
|
|
reason.empty_retention_message = is_html_empty(reason.retention_message)
|
|
|
|
def write(self, vals):
|
|
vals.pop('is_protected', None)
|
|
return super().write(vals)
|
|
|
|
@api.ondelete(at_uninstall=False)
|
|
def _unlink_close_reasons(self):
|
|
for reason in self:
|
|
if reason.is_protected:
|
|
raise AccessError(_("The reason %s is required by the Subscription application and cannot be deleted.", reason.name))
|