This commit is contained in:
zainab8585 2024-08-19 11:04:54 +02:00
parent 3d6f3d4fab
commit 71b1c05d67
4 changed files with 81 additions and 62 deletions

View File

@ -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,
}

View File

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

View File

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

View File

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