partner-contact/partner_tier_validation/models/res_partner.py

48 lines
1.5 KiB
Python
Raw Permalink Normal View History

2021-03-23 19:13:18 +00:00
# Copyright 2019 Open Source Integrators
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
2021-04-28 15:43:20 +00:00
from flectra import api, fields, models
2021-03-23 19:13:18 +00:00
class ResPartner(models.Model):
_name = "res.partner"
2021-04-28 15:43:20 +00:00
_inherit = ["res.partner", "tier.validation"]
_tier_validation_manual_config = False
2021-03-23 19:13:18 +00:00
state = fields.Selection(
2021-04-28 15:43:20 +00:00
[("draft", "Draft"), ("confirmed", "Active"), ("cancel", "Archived")],
string="Status",
default="draft",
2021-03-23 19:13:18 +00:00
)
2021-04-28 15:43:20 +00:00
2021-05-30 02:14:14 +00:00
@api.model
def _tier_revalidation_fields(self, values):
"""
Changing some Partner fields forces Tier Validation to be reevaluated.
Out of the box these are is_company and parent_id.
Other can be added extenting this method.
"""
return ["is_company", "parent_id"]
2021-04-28 15:43:20 +00:00
@api.model
def create(self, vals):
new = super().create(vals)
if new.need_validation and new.state != "confirmed":
new.active = False
2021-05-30 02:14:14 +00:00
else:
new.active = True
new.state = "confirmed"
2021-04-28 15:43:20 +00:00
return new
def write(self, vals):
2021-05-30 02:14:14 +00:00
# Changing certain fields required new validation process
revalidate_fields = self._tier_revalidation_fields(vals)
if any(x in revalidate_fields for x in vals.keys()):
self.mapped("review_ids").unlink()
vals["state"] = "draft"
# Automatically update active flag depending on state
2021-04-28 15:43:20 +00:00
if "state" in vals:
vals["active"] = vals["state"] == "confirmed"
return super().write(vals)