fix membership
This commit is contained in:
parent
83204154c3
commit
6685aac6a1
|
|
@ -1573,3 +1573,9 @@ msgstr "المرشحين"
|
||||||
#: model:ir.actions.report,name:dev_membership.menu_print_membership_nomination
|
#: model:ir.actions.report,name:dev_membership.menu_print_membership_nomination
|
||||||
msgid "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 "يجب أن يكون البريد الإلكتروني فريدًا."
|
||||||
|
|
@ -28,6 +28,7 @@ class MembershipCancellationRequest(models.Model):
|
||||||
rec.membership_id.partner_id.memebership_end_date = request_date
|
rec.membership_id.partner_id.memebership_end_date = request_date
|
||||||
rec.membership_id.request_date = request_date
|
rec.membership_id.request_date = request_date
|
||||||
rec.state = 'approved'
|
rec.state = 'approved'
|
||||||
|
if rec.membership_id.state=='active':
|
||||||
rec.membership_id.state = 'cancel'
|
rec.membership_id.state = 'cancel'
|
||||||
rec.membership_id.partner_id.check_active_membership()
|
rec.membership_id.partner_id.check_active_membership()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,10 @@ _logger = logging.getLogger(__name__)
|
||||||
class Partner(models.Model):
|
class Partner(models.Model):
|
||||||
_inherit = 'res.partner'
|
_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")
|
membership_count = fields.Integer(string="Membership Count", compute="_get_membership_count")
|
||||||
active_membership_id = fields.Many2one('dev.membership', string='Membership', compute='check_active_membership')
|
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')
|
membrship_level = fields.Many2one('membership.level',string='Membrship level',store=True,compute='_compute_membership_level')
|
||||||
|
|
@ -169,19 +172,11 @@ 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):
|
def _check_unique_mobile_id(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.mobile:
|
if record.mobile:
|
||||||
|
|
@ -198,21 +193,25 @@ class Partner(models.Model):
|
||||||
], limit=1)
|
], limit=1)
|
||||||
if existing_id:
|
if existing_id:
|
||||||
raise ValidationError(_("ID number must be unique."))
|
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')
|
@api.onchange('mobile')
|
||||||
# def _check_mobile_format(self):
|
def _check_mobile_format(self):
|
||||||
# print("Test constraint running!")
|
print("Test constraint running!")
|
||||||
# for record in self:
|
for record in self:
|
||||||
# print("Checking mobile format: %s", record.mobile)
|
print("Checking mobile format: %s", record.mobile)
|
||||||
# if record.mobile and (len(record.mobile) != 10 or not record.mobile.isdigit()):
|
if record.mobile and (len(record.mobile) != 10 or not record.mobile.isdigit()):
|
||||||
# raise ValidationError(_("Mobile number must be exactly 10 digits."))
|
raise ValidationError(_("Mobile number must be exactly 10 digits."))
|
||||||
|
|
||||||
|
|
||||||
# Optional: Add SQL constraints for uniqueness
|
# 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.'),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,5 @@
|
||||||
<field name="domain_force">[(1,'=',1)]</field>
|
<field name="domain_force">[(1,'=',1)]</field>
|
||||||
<field name="groups" eval="[(4, ref('group_membership_manager'))]"/>
|
<field name="groups" eval="[(4, ref('group_membership_manager'))]"/>
|
||||||
</record>
|
</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>
|
</odoo>
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
attrs="{'invisible':['|',('membership_id','!=',False),('state','not in',['expire','active','cancel'])]}"/>
|
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"
|
<button name="%(dev_membership.membership_request_cancel_wizard_action)d" type="action" string="Cancel"
|
||||||
attrs="{'invisible': ([('state', 'not in', ['active','expire'])])}"/>
|
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>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
<div class="oe_button_box" name="button_box">
|
<div class="oe_button_box" name="button_box">
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,11 @@
|
||||||
<xpath expr="//field[@name='function']" position="attributes">
|
<xpath expr="//field[@name='function']" position="attributes">
|
||||||
<attribute name="attrs">{'required':[('is_member','=',True)]}</attribute>
|
<attribute name="attrs">{'required':[('is_member','=',True)]}</attribute>
|
||||||
</xpath>
|
</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">
|
<xpath expr="//field[@name='company_type']" position="attributes">
|
||||||
<attribute name="attrs">{'invisible':[('is_member','=',True)]}</attribute>
|
<attribute name="attrs">{'invisible':[('is_member','=',True)]}</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
@ -264,6 +269,9 @@
|
||||||
<field name="model">res.partner</field>
|
<field name="model">res.partner</field>
|
||||||
<field name="inherit_id" ref="partner_custom.partner_view_property_cusotm"/>
|
<field name="inherit_id" ref="partner_custom.partner_view_property_cusotm"/>
|
||||||
<field name="arch" type="xml">
|
<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">
|
<xpath expr="//group[@name='identifcation_info']" position="after">
|
||||||
<group>
|
<group>
|
||||||
<field name="gender" attrs="{'required':[('is_member','=',True)]}"/>
|
<field name="gender" attrs="{'required':[('is_member','=',True)]}"/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue