[IMP] partner_profiles: prevent company type edit in several cases
Prevents the modification of the company type of res.partner: - if partner is a public or a position profile - if the partner has position profiles attached Also synchronize the company type between main and public profiles.
This commit is contained in:
committed by
Stéphan Sainléger
parent
c95d20d7a1
commit
379b598754
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
from odoo import _, api, fields, models
|
from odoo import _, api, fields, models
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -80,6 +81,19 @@ class res_partner(models.Model):
|
|||||||
self.contact_type = "attached"
|
self.contact_type = "attached"
|
||||||
self.partner_profile = position_profile.id
|
self.partner_profile = position_profile.id
|
||||||
|
|
||||||
|
@api.onchange("is_company")
|
||||||
|
def _onchange_is_company(self):
|
||||||
|
for partner in self:
|
||||||
|
if partner.is_main_profile:
|
||||||
|
if partner.has_position or partner.child_ids.filtered(lambda c: c.is_position_profile):
|
||||||
|
raise UserError("You can not modify the partner company type when the parner has postion profiles associated. Please remove the position profiles before retrying.")
|
||||||
|
if partner.public_profile_id:
|
||||||
|
# public_partner = self.env["res.partner"].browse(partner.public_profile_id)[0]
|
||||||
|
values = {
|
||||||
|
"is_company": partner.is_company,
|
||||||
|
}
|
||||||
|
partner.public_profile_id.sudo().write(values)
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def create(self, vals):
|
def create(self, vals):
|
||||||
"""Assume if not type, default is contact"""
|
"""Assume if not type, default is contact"""
|
||||||
|
@@ -95,6 +95,10 @@
|
|||||||
<attribute name="attrs">{'invisible': ['|', ('is_public_profile','=', True),
|
<attribute name="attrs">{'invisible': ['|', ('is_public_profile','=', True),
|
||||||
('is_position_profile','=', True)]}</attribute>
|
('is_position_profile','=', True)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
<xpath expr="//field[@name='company_type']" position="attributes">
|
||||||
|
<attribute name="attrs">{'invisible': ['|', ('is_public_profile','=', True),
|
||||||
|
('is_position_profile','=', True)]}</attribute>
|
||||||
|
</xpath>
|
||||||
<xpath expr="//field[@name='image']" position="attributes">
|
<xpath expr="//field[@name='image']" position="attributes">
|
||||||
<attribute name="attrs">{'invisible': ['|', ('is_public_profile','=', True),
|
<attribute name="attrs">{'invisible': ['|', ('is_public_profile','=', True),
|
||||||
('is_position_profile','=', True)]}</attribute>
|
('is_position_profile','=', True)]}</attribute>
|
||||||
|
Reference in New Issue
Block a user