Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m42s
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
from odoo import models, _
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class Base(models.AbstractModel):
|
|
_inherit = 'base'
|
|
|
|
def unlink(self):
|
|
if not self.env.context.get('module_uninstall'):
|
|
self._check_survey_record_creation_references()
|
|
return super().unlink()
|
|
|
|
def _check_survey_record_creation_references(self):
|
|
if not self or self._name in (
|
|
'survey.record.creation.field.values',
|
|
'survey.record.creation.field.values.x2m',
|
|
):
|
|
return
|
|
|
|
FieldValues = self.env['survey.record.creation.field.values'].sudo()
|
|
if not FieldValues.search_count([('field_id.relation', '=', self._name)], limit=1):
|
|
return
|
|
|
|
references = [f"{self._name},{record.id}" for record in self]
|
|
|
|
used_in_m2o = FieldValues.search([
|
|
('fixed_value_many2one', 'in', references),
|
|
])
|
|
used_in_m2m = self.env['survey.record.creation.field.values.x2m'].sudo().search([
|
|
('value_reference', 'in', references),
|
|
])
|
|
|
|
if not used_in_m2o and not used_in_m2m:
|
|
return
|
|
|
|
usages = set()
|
|
for fv in used_in_m2o:
|
|
usages.add((
|
|
fv.survey_id.display_name or '',
|
|
fv.field_id.field_description or fv.field_id.name or '',
|
|
fv.fixed_value_many2one.display_name or '',
|
|
))
|
|
for fvx in used_in_m2m:
|
|
parent = fvx.survey_record_creation_field_values_id
|
|
usages.add((
|
|
parent.survey_id.display_name or '',
|
|
parent.field_id.field_description or parent.field_id.name or '',
|
|
fvx.value_reference.display_name or '',
|
|
))
|
|
|
|
usage_lines = '\n'.join(
|
|
'- ' + _(
|
|
'Survey "%(survey)s", field "%(field)s" (value: %(value)s)',
|
|
survey=survey, field=field, value=value,
|
|
)
|
|
for survey, field, value in sorted(usages)
|
|
)
|
|
|
|
raise UserError(_(
|
|
'Cannot delete this record because it is used as a default value '
|
|
'in the following survey record creation configurations:\n\n'
|
|
'%(usages)s\n\n'
|
|
'Please update or remove the corresponding survey configuration first.',
|
|
usages=usage_lines,
|
|
))
|