[IMP] delete user and benefit safely with validation

This commit is contained in:
younes 2025-08-07 11:17:05 +01:00
parent 6461dc2330
commit c1df27244a
5 changed files with 71 additions and 7 deletions

View File

@ -12237,7 +12237,7 @@ msgstr ""
#: code:addons/odex_benefit/models/visit.py:0 #: code:addons/odex_benefit/models/visit.py:0
#, python-format #, python-format
msgid "You cannot delete this record" msgid "You cannot delete this record"
msgstr "" msgstr "لا يمكنك حذف هذا السجل"
#. module: odex_benefit #. module: odex_benefit
#: code:addons/odex_benefit/controllers/benefit.py:0 #: code:addons/odex_benefit/controllers/benefit.py:0
@ -14585,4 +14585,17 @@ msgstr "فشل في حذف هذا الشريك بعد حذف المستخدم ا
#: code:addons/odex_benefit/models/res_users.py:0 #: code:addons/odex_benefit/models/res_users.py:0
#, python-format #, python-format
msgid "Cannot delete user '%s': linked to Benefits - Profiles %s" msgid "Cannot delete user '%s': linked to Benefits - Profiles %s"
msgstr "لا يمكن حذف المستخدم '%s': مرتبط بملفات المستفيدين %s" msgstr "لا يمكن حذف المستخدم '%s': مرتبط بملفات المستفيدين %s"
#. module: odex_benefit
#: code:addons/odex_benefit/models/benefit.py:0
#, python-format
msgid "Cannot delete user '%s': still linked to other benefit profiles."
msgstr "لا يمكن حذف المستخدم '%s': لا يزال مرتبطًا بملفات مستفيدين أخرى."
#. module: odex_benefit
#: code:addons/odex_benefit/models/res_partner.py:0
#, python-format
msgid "Cannot delete partner '%s': linked to Benefits - Profiles %s"
msgstr "لا يمكن حذف الشريك '%s': مرتبط بملفات مستفيدين %s"

View File

@ -33,4 +33,5 @@ from . import service_refuse_reason
from . import res_city from . import res_city
from . import seasonal_service from . import seasonal_service
# from . import res_config_settings # from . import res_config_settings
from . import res_users from . import res_users
from . import res_partner

View File

@ -1079,10 +1079,31 @@ class GrantBenefitProfile(models.Model):
return res return res
def unlink(self): def unlink(self):
for order in self: users_to_delete = self.env['res.users']
if order.state not in ['draft','new']: skip_user = self.env.context.get('skip_user_unlink')
for record in self:
if record.state not in ['draft', 'new']:
raise UserError(_('You cannot delete this record')) raise UserError(_('You cannot delete this record'))
return super(GrantBenefitProfile, self).unlink()
if not skip_user and record.user_id:
other_benefits = self.env['grant.benefit'].search([
('user_id', '=', record.user_id.id),
('id', '!=', record.id)
])
if other_benefits:
raise UserError(
_("Cannot delete user '%s': still linked to other benefit profiles.")
% record.user_id.name
)
users_to_delete |= record.user_id
res = super().unlink()
if not skip_user:
users_to_delete.unlink()
return res
def copy(self, default=None): def copy(self, default=None):
"""Override the copy method to prevent duplicating the record.""" """Override the copy method to prevent duplicating the record."""

View File

@ -0,0 +1,24 @@
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
class ResPartner(models.Model):
_inherit = "res.partner"
def unlink(self):
env = self.env
for partner in self:
grants = env['grant.benefit'].search([
('partner_id', '=', partner.id),
('state', 'not in', ['draft', 'new'])
])
if grants:
grant_info = ', '.join('[%s: %s]' % (g.code or g.name or g.id, dict(g._fields['state'].selection).get(g.state)) for g in grants)
raise ValidationError(
_("Cannot delete partner '%s': linked to Benefits - Profiles %s") % (partner.name, grant_info)
)
return super().unlink()

View File

@ -15,11 +15,16 @@ class ResUsers(models.Model):
('state', 'not in', ['draft', 'new']) ('state', 'not in', ['draft', 'new'])
]) ])
if grants: if grants:
grant_info = ', '.join('[%s: %s]' % (g.code or g.name or g.id, g.state) for g in grants) grant_info = ', '.join('[%s: %s]' % (g.code or g.name or g.id, dict(self.env['grant.benefit']._fields['state'].selection).get(g.state)) for g in grants)
raise ValidationError( raise ValidationError(
_("Cannot delete user '%s': linked to Benefits - Profiles %s") % (user.name, grant_info) _("Cannot delete user '%s': linked to Benefits - Profiles %s") % (user.name, grant_info)
) )
partners = self.mapped('partner_id') partners = self.mapped('partner_id')
for user in self:
benefits = self.env['grant.benefit'].search([('user_id', '=', user.id)])
benefits.with_context(skip_user_unlink=True).unlink()
res = super(ResUsers, self).unlink() res = super(ResUsers, self).unlink()
for partner in partners: for partner in partners: