[UPDATE]
This commit is contained in:
parent
3d6f3d4fab
commit
71b1c05d67
|
|
@ -45,7 +45,7 @@ class DevMembership(models.Model):
|
|||
('active', 'Active'),
|
||||
('expire', 'Expire'),
|
||||
('cancel', 'Cancel')]), default='draft', tracking=1)
|
||||
|
||||
|
||||
membership_id = fields.Many2one('dev.membership', string='Renew Membership')
|
||||
invoice_id = fields.Many2one('account.move', string='Invoice')
|
||||
user_id = fields.Many2one('res.users', string='Resposible', default=lambda self:self.env.user)
|
||||
|
|
@ -64,7 +64,7 @@ class DevMembership(models.Model):
|
|||
@api.onchange('duration')
|
||||
def _onchange_duration(self):
|
||||
if self.duration and self.interval and self.membership_fees:
|
||||
self.membership_fees = self.duration*self.product_id.list_price
|
||||
self.membership_fees = self.duration*self.product_id.list_price
|
||||
|
||||
@api.constrains('membership_fees')
|
||||
def _check_subscription_fee(self):
|
||||
|
|
@ -119,8 +119,8 @@ class DevMembership(models.Model):
|
|||
if rec.from_date < membership.to_date:
|
||||
raise ValidationError(
|
||||
_("You already have a membership from '%s' to '%s' !!!!") % (membership.from_date, membership.to_date))
|
||||
|
||||
|
||||
|
||||
|
||||
@api.onchange('from_date', 'product_id', 'duration','interval')
|
||||
def onchange_from_date(self):
|
||||
if self.from_date and self.product_id:
|
||||
|
|
@ -130,7 +130,7 @@ class DevMembership(models.Model):
|
|||
self.to_date = self.from_date + relativedelta(months=+self.duration) - relativedelta(days=1)
|
||||
elif self.interval == 'days':
|
||||
self.to_date = self.from_date + relativedelta(days=+self.duration)
|
||||
|
||||
|
||||
def action_confirm_membership(self):
|
||||
if self.product_id.nationality_ids:
|
||||
if self.partner_id.nationality_id not in self.product_id.nationality_ids:
|
||||
|
|
@ -140,8 +140,13 @@ class DevMembership(models.Model):
|
|||
if self.partner_id.gender != self.product_id.gender and self.product_id.gender != False:
|
||||
raise ValidationError(_('Membership is only %s allowed') % self.product_id.gender)
|
||||
self.state = 'confirm'
|
||||
|
||||
|
||||
def action_active_membership(self):
|
||||
# Search for the last membership of the partner
|
||||
last_membership = self.env['dev.membership'].search([
|
||||
('partner_id', '=', self.partner_id.id),
|
||||
('state', '=', 'cancel')
|
||||
], limit=1, order="to_date desc")
|
||||
# Handle sequence generation for new or renewed memberships
|
||||
sequence_code = 'membership.no.sequence'
|
||||
if not self.invoice_id and not self.is_free:
|
||||
|
|
@ -151,21 +156,14 @@ class DevMembership(models.Model):
|
|||
else:
|
||||
# Assuming you have a field to track payment state
|
||||
self.payment_state = self.invoice_id.payment_state
|
||||
if not self.partner_id.membrship_no:
|
||||
if not self.partner_id.membership_no or last_membership:
|
||||
# Generate new sequence number if it's the first membership or it's a renewal after cancellation
|
||||
self.partner_id.membrship_no = self.env['ir.sequence'].next_by_code(sequence_code) or _('New')
|
||||
else:
|
||||
if self.state=='confirm':
|
||||
print('if............................')
|
||||
self.partner_id.membrship_no = self.env['ir.sequence'].next_by_code(sequence_code) or _('New')
|
||||
print('zain000000000000000000000000',self.partner_id.membrship_no)
|
||||
# else:
|
||||
# if self.state=='confirm':
|
||||
# self.partner_id.membrship_no = self.env['ir.sequence'].next_by_code(sequence_code) or _('New')
|
||||
self.state = 'active'
|
||||
self.partner_id.product_id = self.product_id.id
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if not self.partner_id.join_date:
|
||||
self.partner_id.join_date = self.from_date
|
||||
if not self.partner_id.membrship_level:
|
||||
|
|
@ -192,7 +190,7 @@ class DevMembership(models.Model):
|
|||
if rec.state not in ('draft', 'cancel'):
|
||||
raise UserError("You are not allowed to delete this record!!")
|
||||
return super(DevMembership, self).unlink()
|
||||
|
||||
|
||||
def membership_send_by_mail(self):
|
||||
self.ensure_one()
|
||||
template_id = self.env['ir.model.data'].xmlid_to_res_id('dev_membership.template_membership', raise_if_not_found=False)
|
||||
|
|
@ -213,7 +211,7 @@ class DevMembership(models.Model):
|
|||
'target': 'new',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
|
||||
def membership_auto_expire(self):
|
||||
current_date = datetime.now().date()
|
||||
membership_ids = self.env['dev.membership'].search([('state', '=', 'active'),
|
||||
|
|
@ -248,7 +246,7 @@ class DevMembership(models.Model):
|
|||
('to_date', '<=', date),('membership_id','=',False)
|
||||
])
|
||||
for membership in membership_ids:
|
||||
# Check if a cancellation request already exists
|
||||
# Check if a cancellation request already exists
|
||||
existing_cancel_request = self.env['membership.cancellation.request'].search([
|
||||
('membership_id', '=', membership.id),
|
||||
('state', '=', 'draft')
|
||||
|
|
@ -277,7 +275,7 @@ class DevMembership(models.Model):
|
|||
('to_date', '<=', date),('membership_id','=',False)
|
||||
])
|
||||
for membership in membership_ids:
|
||||
m # Check if a cancellation request already exists
|
||||
# m # Check if a cancellation request already exists
|
||||
existing_cancel_request = self.env['membership.cancellation.request'].search([
|
||||
('membership_id', '=', membership.id),
|
||||
('state', '=', 'draft')
|
||||
|
|
@ -296,6 +294,7 @@ class DevMembership(models.Model):
|
|||
|
||||
def cancell_membership_reminder_email_cron(self):
|
||||
membership_pool = self.env['dev.membership']
|
||||
cancel_reason = self.env['ir.config_parameter'].get_param('dev_membership.cancellation_reason')
|
||||
tmpl_id = self.env.ref('dev_membership.dev_cancel_membership_expire')
|
||||
post_expiry_period = self.env['ir.config_parameter'].get_param('dev_membership.post_expiry_period')
|
||||
if tmpl_id:
|
||||
|
|
@ -303,7 +302,7 @@ class DevMembership(models.Model):
|
|||
membership_ids = membership_pool.search([('state', '=', 'expire'),
|
||||
('to_date', '<=', date)])
|
||||
for membership in membership_ids:
|
||||
# Check if a cancellation request already exists
|
||||
# Check if a cancellation request already exists
|
||||
existing_cancel_request = self.env['membership.cancellation.request'].search([
|
||||
('membership_id', '=', membership.id),
|
||||
('state', '=', 'draft')
|
||||
|
|
@ -338,9 +337,9 @@ class DevMembership(models.Model):
|
|||
vals= {'move_type': 'out_invoice',
|
||||
'partner_id': self.partner_id.id,
|
||||
'invoice_line_ids': [
|
||||
(0, None, {'product_id': self.product_id.id, 'quantity': 1, 'price_unit': self.membership_fees, 'tax_ids': [(6, 0, self.product_id.taxes_id.ids)]})
|
||||
]
|
||||
}
|
||||
(0, None, {'product_id': self.product_id.id, 'quantity': 1, 'price_unit': self.membership_fees, 'tax_ids': [(6, 0, self.product_id.taxes_id.ids)]})
|
||||
]
|
||||
}
|
||||
invoice_id = self.env['account.move'].create(vals)
|
||||
self.invoice_id = invoice_id and invoice_id.id or False
|
||||
|
||||
|
|
@ -350,13 +349,24 @@ class DevMembership(models.Model):
|
|||
memberships = self.env['dev.membership'].search([('partner_id', '=', record.partner_id.id),('payment_state', 'in', ['paid','in_payment'])])
|
||||
total_fees = sum(membership.membership_fees for membership in memberships)+record.membership_fees
|
||||
total_duration = sum(membership.duration for membership in memberships)+record.duration
|
||||
|
||||
# البحث عن مستوى العضوية بناءً على إجمالي الرسوم
|
||||
level_by_fees = self.env['membership.level'].search([
|
||||
('min', '<=', total_fees),
|
||||
('max', '>=', total_fees),('years', '<=',total_duration)
|
||||
],order='sequence desc',limit=1)
|
||||
if level_by_fees :
|
||||
record.membrship_level = level_by_fees
|
||||
('max', '>=', total_fees)
|
||||
], limit=1, order='sequence desc')
|
||||
|
||||
# البحث عن مستوى العضوية بناءً على إجمالي المدة
|
||||
level_by_years = self.env['membership.level'].search([
|
||||
('years', '<=', total_duration)
|
||||
], limit=1, order='sequence desc')
|
||||
|
||||
# إعطاء الأولوية للمستوى الأعلى من بين النتائج
|
||||
if level_by_fees and level_by_years:
|
||||
record.membership_level = level_by_fees if level_by_fees.sequence >= level_by_years.sequence else level_by_years
|
||||
else:
|
||||
record.membership_level = level_by_fees or level_by_years or False
|
||||
|
||||
|
||||
def view_invoice(self):
|
||||
if self.invoice_id:
|
||||
|
|
@ -370,8 +380,8 @@ class DevMembership(models.Model):
|
|||
'target': 'current',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
def view_membership(self):
|
||||
if self.membership_id:
|
||||
ctx = dict(create=False)
|
||||
|
|
@ -384,6 +394,5 @@ class DevMembership(models.Model):
|
|||
'target': 'current',
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -13,4 +13,9 @@
|
|||
parent="menu_membership_main"
|
||||
sequence="8" groups="dev_membership.group_membership_manager"/>
|
||||
|
||||
<menuitem id="menu_partner_title_contact"
|
||||
action="base.action_partner_title_contact"
|
||||
name="Contact Titles" parent="dev_membership.menu_configuration_root"
|
||||
sequence="5"/>
|
||||
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -159,21 +159,7 @@
|
|||
</field>
|
||||
</record>
|
||||
<!-- Inherit Form View to Modify it -->
|
||||
<record id="partner_extend_info_personal" model="ir.ui.view">
|
||||
<field name="name">partner.personal.info.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="partner_custom.partner_view_property_cusotm"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='identifcation_info']" position="after">
|
||||
<group>
|
||||
<field name="gender"/>
|
||||
<field name="nationality_id"/>
|
||||
<field name="birth_date"/>
|
||||
<field name="age"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--form-->
|
||||
<record id="view_res_partner_memeber_form" model="ir.ui.view">
|
||||
|
|
@ -281,6 +267,23 @@
|
|||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="partner_extend_info_personal" model="ir.ui.view">
|
||||
<field name="name">partner.personal.info.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="partner_custom.partner_view_property_cusotm"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='identifcation_info']" position="after">
|
||||
<group>
|
||||
<field name="gender"/>
|
||||
<field name="nationality_id"/>
|
||||
<field attrs="{'required':[('is_member','=',True)]}" name="birth_date"/>
|
||||
<field name="age"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- search -->
|
||||
<record id="view_search_res_partner" model="ir.ui.view">
|
||||
<field name="name">res.partner.search</field>
|
||||
|
|
|
|||
|
|
@ -32,19 +32,21 @@
|
|||
<t t-set="company" t-value="user.company_id"/>
|
||||
<!-- Header -->
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: 'Cairo-Regular';
|
||||
src: local('Cairo-Regular'), local('Cairo-Regular'),
|
||||
url(/membership_card_odoo/static/fonts/Cairo-Regular.ttf) format('opentype');
|
||||
}
|
||||
|
||||
.font_cairo{
|
||||
font-family: Cairo-Regular, Arial, sans-serif !important;;
|
||||
}
|
||||
@font-face {font-family: "Sakkal Majalla"; src:
|
||||
url("/membership_card_odoo/static/fonts/ce7b5754581057e6f7444e2192850cc8.eot"); src:
|
||||
url("/membership_card_odoo/static/fonts/ce7b5754581057e6f7444e2192850cc8.eot?#iefix")
|
||||
format("embedded-opentype"),
|
||||
url("/membership_card_odoo/static/fonts/ce7b5754581057e6f7444e2192850cc8.woff2") format("woff2"),
|
||||
url("/membership_card_odoo/static/fonts/ce7b5754581057e6f7444e2192850cc8.woff") format("woff"),
|
||||
url("/membership_card_odoo/static/fonts/ce7b5754581057e6f7444e2192850cc8.ttf") format("truetype");
|
||||
}
|
||||
.content{
|
||||
font-family: 'Sakkal Majalla'!important;
|
||||
}
|
||||
</style>
|
||||
<div style="font-family:'Sakkal Majalla'!important;" id="font" class="page font_cairo">
|
||||
<div style="font-family:'Sakkal Majalla'!important;" id="font" class="page content">
|
||||
<div t-attf-style="background-color:{{membrship_level_color }};">
|
||||
<div style="font-family:'Cairo-Regular';" class="font_cairo">
|
||||
<div style="font-family:'Sakkal Majalla'!important;" class="content">
|
||||
<center>
|
||||
<h2><t t-esc="company.name"/></h2>
|
||||
</center>
|
||||
|
|
@ -53,13 +55,13 @@
|
|||
</center>
|
||||
</div><br/>
|
||||
<!-- Content -->
|
||||
<div style="font-family:'Cairo-Regular';" class="row mt32">
|
||||
<div style="font-family:'Sakkal Majalla'!important;" class="row mt32">
|
||||
<div style="width:20%;margin-top:10px;float:right">
|
||||
<img t-if="image" style="width: 120px; border-radius: 5px;"
|
||||
t-attf-src="data:image/*;base64,{{image}}"/>
|
||||
</div>
|
||||
|
||||
<div style="width:75%;font-family:'Cairo-Regular';margin-top:5px;float:left">
|
||||
<div style="width:70%;font-family:'Sakkal Majalla'!important;';margin-top:5px;float:left">
|
||||
<p dir="rtl" t-if="name"><strong>الاسم:</strong> <t t-esc="name"/></p>
|
||||
<p dir="rtl" t-if="membrship_no"><strong>رقم العضوية:</strong> <t t-esc="membrship_no"/></p>
|
||||
<p dir="rtl" t-if="product_id"><strong> نوع العضوية:</strong> <t t-esc="product_id"/></p>
|
||||
|
|
|
|||
Loading…
Reference in New Issue