fix membership

This commit is contained in:
ahmed-nouri051 2025-05-12 08:53:26 +02:00
parent 83204154c3
commit 6685aac6a1
6 changed files with 56 additions and 45 deletions

View File

@ -1572,4 +1572,10 @@ msgstr "المرشحين"
#. module: dev_membership
#: model:ir.actions.report,name:dev_membership.menu_print_membership_nomination
msgid "Print Membership Nomination"
msgstr "طباعة المرشحين للعضوية"
msgstr "طباعة المرشحين للعضوية"
#. module: dev_membership
#: code:addons/dev_membership/models/res_partner.py:10
#, python-format
msgid "email must be unique."
msgstr "يجب أن يكون البريد الإلكتروني فريدًا."

View File

@ -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):

View File

@ -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.'),
]

View File

@ -39,8 +39,5 @@
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('group_membership_manager'))]"/>
</record>
<record id="sale_purchase_tab" model="res.groups">
<field name="name">Sale/Purchase Tab</field>
<field name="category_id" ref="dev_membership.membership_category"/> <!-- Or use your own category -->
</record>
</odoo>

View File

@ -48,7 +48,7 @@
attrs="{'invisible':['|',('membership_id','!=',False),('state','not in',['expire','active','cancel'])]}"/>
<button name="%(dev_membership.membership_request_cancel_wizard_action)d" type="action" string="Cancel"
attrs="{'invisible': ([('state', 'not in', ['active','expire'])])}"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,activeexpire,cancel"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,active,expire,cancel"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">

View File

@ -231,6 +231,11 @@
<xpath expr="//field[@name='function']" position="attributes">
<attribute name="attrs">{'required':[('is_member','=',True)]}</attribute>
</xpath>
<xpath expr="//field[@name='mobile']" position="attributes">
<attribute name="attrs">{'required':[('is_member','=',True)]}</attribute>
</xpath>
<xpath expr="//field[@name='company_type']" position="attributes">
<attribute name="attrs">{'invisible':[('is_member','=',True)]}</attribute>
</xpath>
@ -264,6 +269,9 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="partner_custom.partner_view_property_cusotm"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='identification_number']" position="attributes">
<attribute name="attrs">{'required':[('is_member','=',True)]}</attribute>
</xpath>
<xpath expr="//group[@name='identifcation_info']" position="after">
<group>
<field name="gender" attrs="{'required':[('is_member','=',True)]}"/>