diff --git a/odex25_sales/dev_membership/i18n/ar_001.po b/odex25_sales/dev_membership/i18n/ar_001.po index 7bd3bdfc1..65e68af46 100644 --- a/odex25_sales/dev_membership/i18n/ar_001.po +++ b/odex25_sales/dev_membership/i18n/ar_001.po @@ -1572,4 +1572,10 @@ msgstr "المرشحين" #. module: dev_membership #: model:ir.actions.report,name:dev_membership.menu_print_membership_nomination msgid "Print Membership Nomination" -msgstr "طباعة المرشحين للعضوية" \ No newline at end of file +msgstr "طباعة المرشحين للعضوية" + +#. module: dev_membership +#: code:addons/dev_membership/models/res_partner.py:10 +#, python-format +msgid "email must be unique." +msgstr "يجب أن يكون البريد الإلكتروني فريدًا." \ No newline at end of file diff --git a/odex25_sales/dev_membership/models/membership_cancel_request.py b/odex25_sales/dev_membership/models/membership_cancel_request.py index 8a9802cd5..3f8490119 100644 --- a/odex25_sales/dev_membership/models/membership_cancel_request.py +++ b/odex25_sales/dev_membership/models/membership_cancel_request.py @@ -28,7 +28,8 @@ class MembershipCancellationRequest(models.Model): rec.membership_id.partner_id.memebership_end_date = request_date rec.membership_id.request_date = request_date rec.state = 'approved' - rec.membership_id.state = 'cancel' + if rec.membership_id.state=='active': + rec.membership_id.state = 'cancel' rec.membership_id.partner_id.check_active_membership() def action_reject(self): diff --git a/odex25_sales/dev_membership/models/res_partner.py b/odex25_sales/dev_membership/models/res_partner.py index 4dcbc07a5..46c91ca32 100644 --- a/odex25_sales/dev_membership/models/res_partner.py +++ b/odex25_sales/dev_membership/models/res_partner.py @@ -19,7 +19,10 @@ _logger = logging.getLogger(__name__) class Partner(models.Model): _inherit = 'res.partner' - is_member = fields.Boolean(string='Is Member') + is_member = fields.Boolean(string='Is Member' ,default=False) + mobile = fields.Char(copy=False) + identification_number = fields.Char(copy=False) + email = fields.Char(copy=False) membership_count = fields.Integer(string="Membership Count", compute="_get_membership_count") active_membership_id = fields.Many2one('dev.membership', string='Membership', compute='check_active_membership') membrship_level = fields.Many2one('membership.level',string='Membrship level',store=True,compute='_compute_membership_level') @@ -169,50 +172,46 @@ class Partner(models.Model): - @api.constrains('identification_number', 'is_member') - def _check_id_no_required_if_member(self): - for record in self: - if record.is_member and not record.identification_number: - raise ValidationError(_("ID number is required for members.")) + - @api.constrains('mobile', 'is_member') - def _check_mobile_required_if_member(self): - for record in self: - if record.is_member and not record.mobile: - raise ValidationError(_("Mobile number is required for members.")) + - @api.constrains('mobile', 'identification_number') + @api.constrains('mobile', 'identification_number','email') def _check_unique_mobile_id(self): - for record in self: - if record.mobile: - existing_mobile = self.search([ - ('mobile', '=', record.mobile), - ('id', '!=', record.id) - ], limit=1) - if existing_mobile: - raise ValidationError(_("Mobile number must be unique.")) - if record.identification_number: - existing_id = self.search([ - ('identification_number', '=', record.identification_number), - ('id', '!=', record.id) - ], limit=1) - if existing_id: - raise ValidationError(_("ID number must be unique.")) + for record in self: + if record.mobile: + existing_mobile = self.search([ + ('mobile', '=', record.mobile), + ('id', '!=', record.id) + ], limit=1) + if existing_mobile: + raise ValidationError(_("Mobile number must be unique.")) + if record.identification_number: + existing_id = self.search([ + ('identification_number', '=', record.identification_number), + ('id', '!=', record.id) + ], limit=1) + if existing_id: + raise ValidationError(_("ID number must be unique.")) + if record.email: + existing_email = self.search([ + ('email', '=', record.email), + ('id', '!=', record.id) + ], limit=1) + if existing_email: + raise ValidationError(_("email must be unique.")) - # @api.constrains('mobile') - # def _check_mobile_format(self): - # print("Test constraint running!") - # for record in self: - # print("Checking mobile format: %s", record.mobile) - # if record.mobile and (len(record.mobile) != 10 or not record.mobile.isdigit()): - # raise ValidationError(_("Mobile number must be exactly 10 digits.")) + @api.onchange('mobile') + def _check_mobile_format(self): + print("Test constraint running!") + for record in self: + print("Checking mobile format: %s", record.mobile) + if record.mobile and (len(record.mobile) != 10 or not record.mobile.isdigit()): + raise ValidationError(_("Mobile number must be exactly 10 digits.")) # Optional: Add SQL constraints for uniqueness - _sql_constraints = [ - ('unique_mobile', 'UNIQUE(mobile)', 'Mobile number must be unique.'), - ('unique_identification_number', 'UNIQUE(identification_number)', 'ID number must be unique.'), - ] + diff --git a/odex25_sales/dev_membership/security/security.xml b/odex25_sales/dev_membership/security/security.xml index 682252a1f..0faea90a8 100644 --- a/odex25_sales/dev_membership/security/security.xml +++ b/odex25_sales/dev_membership/security/security.xml @@ -39,8 +39,5 @@ [(1,'=',1)] - - Sale/Purchase Tab - - + diff --git a/odex25_sales/dev_membership/views/dev_membership.xml b/odex25_sales/dev_membership/views/dev_membership.xml index 3ec72d24e..6d6c44264 100644 --- a/odex25_sales/dev_membership/views/dev_membership.xml +++ b/odex25_sales/dev_membership/views/dev_membership.xml @@ -48,7 +48,7 @@ attrs="{'invisible':['|',('membership_id','!=',False),('state','not in',['expire','active','cancel'])]}"/>