Update dev_membership.py

This commit is contained in:
zainab2097 2024-09-30 13:39:31 +03:00 committed by GitHub
parent 8b22c618d8
commit 24f54a41a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 107 additions and 94 deletions

View File

@ -20,39 +20,42 @@ class DevMembership(models.Model):
_description = 'Dev Membership'
_order = 'name desc'
name = fields.Char(string='Name')
date = fields.Date(string="Request Date", tracking=3, required=1, default=lambda self: datetime.now().date())
from_date = fields.Date(string="Membership From Date", tracking=3, required=1, default=lambda *a: (datetime.now().date()))
from_date = fields.Date(string="Membership From Date", tracking=3, required=1,
default=lambda *a: (datetime.now().date()))
to_date = fields.Date(string="Membership To Date", tracking=3)
request_date = fields.Date(string="Cancell Date", tracking=3,readonly=1)
partner_id = fields.Many2one('res.partner', string="Partner", domain="[('is_member', '=', True)]", tracking=2, required=1)
id_no = fields.Char(string='Identification Number',related='partner_id.identification_number',store=True)
phone = fields.Char(string='Phone',related='partner_id.phone',store=True)
email = fields.Char(string='Email',related='partner_id.email',store=True)
product_id = fields.Many2one('product.product', string="Membership Product", domain="[('is_membership', '=', True)]", tracking=2, required=1)
request_date = fields.Date(string="Cancell Date", tracking=3, readonly=1)
partner_id = fields.Many2one('res.partner', string="Partner", domain="[('is_member', '=', True)]", tracking=2,
required=1)
id_no = fields.Char(string='Identification Number', related='partner_id.identification_number', store=True)
phone = fields.Char(string='Phone', related='partner_id.phone', store=True)
email = fields.Char(string='Email', related='partner_id.email', store=True)
product_id = fields.Many2one('product.product', string="Membership Product",
domain="[('is_membership', '=', True)]", tracking=2, required=1)
membership_fees = fields.Float(string="Membership Fees")
is_free = fields.Boolean(string="Is Free",related="product_id.is_free",)
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=1, tracking=3)
duration = fields.Integer(string="Duration",)
is_free = fields.Boolean(string="Is Free", related="product_id.is_free", )
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=1,
tracking=3)
duration = fields.Integer(string="Duration", )
description = fields.Text(string="Description", related="product_id.description", readonly=False)
interval = fields.Selection(string="Interval", selection=([
('days', 'Days'),
('month', 'Month'),
('year', 'Year')]), default='year',required=1)
payment_state = fields.Selection(string='Payment State',related='invoice_id.payment_state')
('days', 'Days'),
('month', 'Month'),
('year', 'Year')]), default='year', required=1)
payment_state = fields.Selection(string='Payment State', related='invoice_id.payment_state')
state = fields.Selection(string="State", selection=([
('draft', 'Draft'),
('confirm', 'Confirm'),
('active', 'Active'),
('expire', 'Expire'),
('cancel', 'Cancel')]), default='draft', tracking=1)
('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)
cancel_reasone = fields.Many2one('cancellation.reason',string='Cancel Membership Reason')
membrship_level = fields.Many2one('membership.level', string='Membrship level',store=True,required=False,compute='_compute_membership_level')
user_id = fields.Many2one('res.users', string='Resposible', default=lambda self: self.env.user)
cancel_reasone = fields.Many2one('cancellation.reason', string='Cancel Membership Reason')
membrship_level = fields.Many2one('membership.level', string='Membrship level', store=True, required=False,
compute='_compute_membership_level')
@api.onchange('product_id')
def _onchange_membership_type(self):
@ -64,15 +67,10 @@ class DevMembership(models.Model):
self.duration = self.product_id.duration
self.interval = self.product_id.interval
@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
@api.constrains('from_date')
def _check_from_date(self):
@ -85,7 +83,7 @@ class DevMembership(models.Model):
# templet_id = self.env.ref('dev_membership.template_membership_cancell')
# templet2_id = self.env.ref('dev_membership.template_membership_cancell2')
date_deadline = fields.Date.today()
note=_('Membership %s is Cancelled') % self.name
note = _('Membership %s is Cancelled') % self.name
summary = _("Membership Cancellation")
self.sudo().activity_schedule(
@ -105,15 +103,18 @@ class DevMembership(models.Model):
@api.constrains('partner_id', 'from_date')
def _check_if_membership_exists(self):
membership_obj = self.env['dev.membership'].search([('partner_id.id', '=', self.partner_id.id), ('state', 'in', ['draft', 'active', 'confirm']), ('id', '!=', self.id)])
membership_obj = self.env['dev.membership'].search(
[('partner_id.id', '=', self.partner_id.id), ('state', 'in', ['draft', 'active', 'confirm']),
('id', '!=', self.id)])
if membership_obj:
for rec in self:
for membership in membership_obj:
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')
_("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:
if self.interval == 'year':
@ -122,6 +123,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,7 +142,7 @@ class DevMembership(models.Model):
raise ValidationError(
_("Duration cannot be less than the default value in Setting of membrship type.%s'") % self.product_id.duration)
self.state = 'confirm'
def action_active_membership(self):
# Search for the last membership of the partner
last_membership = self.env['dev.membership'].search([
@ -151,8 +153,9 @@ class DevMembership(models.Model):
sequence_code = 'membership.no.sequence'
if not self.invoice_id and not self.is_free:
raise ValidationError(_('Please Create Membership Invoice'))
if self.invoice_id.payment_state not in ['paid','in_payment'] and not self.is_free:
raise ValidationError(_('Membership Invoice is not paid.\nPlease pay the membership invoice and activate the membership.'))
if self.invoice_id.payment_state not in ['paid', 'in_payment'] and not self.is_free:
raise ValidationError(
_('Membership Invoice is not paid.\nPlease pay the membership invoice and activate the membership.'))
else:
# Assuming you have a field to track payment state
self.payment_state = self.invoice_id.payment_state
@ -171,7 +174,6 @@ class DevMembership(models.Model):
if not self.partner_id.memebership_end_date:
self.partner_id.memebership_end_date = self.to_date
def action_cancel_membership(self):
self.state = 'cancel'
@ -193,7 +195,8 @@ class DevMembership(models.Model):
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)
template_id = self.env['ir.model.data'].xmlid_to_res_id('dev_membership.template_membership',
raise_if_not_found=False)
ctx = {
'default_model': 'dev.membership',
'default_res_id': self.ids[0],
@ -219,16 +222,16 @@ class DevMembership(models.Model):
template_id = self.env.ref('dev_membership.dev_membership_expired_mail_template')
for membership in membership_ids:
membership.state = 'expire'
#template_id.send_mail(membership.id, force_send=True)
# template_id.send_mail(membership.id, force_send=True)
if membership.user_id:
membership.message_post(
body=_("The Membership %s was expired on %s") % (membership.name,membership.to_date),
subject=_("Auto Expire Membership") ,
partner_ids=[membership.user_id.partner_id.id],
message_type='notification', #
author_id=self.env.user.partner_id.id,
)
membership.message_post(
body=_("The Membership %s was expired on %s") % (membership.name, membership.to_date),
subject=_("Auto Expire Membership"),
partner_ids=[membership.user_id.partner_id.id],
message_type='notification', #
author_id=self.env.user.partner_id.id,
)
def membership_reminder_email_cron(self):
membership_pool = self.env['dev.membership']
tmpl_id = self.env.ref('dev_membership.dev_membership_expire_reminder_mail_template')
@ -237,19 +240,19 @@ class DevMembership(models.Model):
date = datetime.now().date() + relativedelta(days=int(days_before))
membership_ids = membership_pool.search([('state', '=', 'active'),
('to_date', '=', date)])
for membership in membership_ids:
#tmpl_id.send_mail(membership.id, force_send=True)
# tmpl_id.send_mail(membership.id, force_send=True)
if membership.user_id:
membership.message_post(
body=_("The Membership %s is about to expire on %s") % (membership.name,membership.to_date),
subject=_("Membership Expire Reminder") ,
partner_ids=[membership.user_id.partner_id.id],
message_type='notification',
author_id=self.env.user.partner_id.id,
)
body=_("The Membership %s is about to expire on %s") % (membership.name, membership.to_date),
subject=_("Membership Expire Reminder"),
partner_ids=[membership.user_id.partner_id.id],
message_type='notification',
author_id=self.env.user.partner_id.id,
)
def cancell2_membership_reminder_email_cron(self):
membership_pool = self.env['dev.membership']
@ -259,12 +262,12 @@ class DevMembership(models.Model):
try:
post_expiry_period = int(post_expiry_period)
except ValueError:
post_expiry_period = 0
post_expiry_period = 0
date = fields.Date.today() - relativedelta(days=int(post_expiry_period))
membership_ids = membership_pool.search([
('state', '=', 'expire'),
('to_date', '=', date),('membership_id','=',False)
('to_date', '=', date), ('membership_id', '=', False)
])
for membership in membership_ids:
existing_cancel_request = self.env['membership.cancellation.request'].search([
@ -279,9 +282,9 @@ class DevMembership(models.Model):
'state': 'draft',
'cancel_reason': cancel_reason
})
return True
def membership_secand_reminder_email_cron(self):
membership_pool = self.env['dev.membership']
tmpl_id = self.env.ref('dev_membership.dev_membership_expire_second_reminder_mail_template')
@ -290,23 +293,23 @@ class DevMembership(models.Model):
try:
days_before_second = int(days_before_second)
except ValueError:
days_before_second = 0
days_before_second = 0
date = datetime.now().date() + relativedelta(days=days_before_second)
membership_ids = membership_pool.search([
('state', '=', 'active'),
('to_date', '=', date)
('to_date', '=', date)
])
for membership in membership_ids:
#tmpl_id.send_mail(membership.id, force_send=True)
# tmpl_id.send_mail(membership.id, force_send=True)
if membership.user_id:
membership.message_post(
body=_("The Membership %s is about to expire on %s") % (membership.name,membership.to_date),
subject=_("Membership Expire Reminder") ,
partner_ids=[membership.user_id.partner_id.id],
message_type='notification',
author_id=self.env.user.partner_id.id,
)
body=_("The Membership %s is about to expire on %s") % (membership.name, membership.to_date),
subject=_("Membership Expire Reminder"),
partner_ids=[membership.user_id.partner_id.id],
message_type='notification',
author_id=self.env.user.partner_id.id,
)
return True
def datetime_convert(self):
@ -314,34 +317,17 @@ class DevMembership(models.Model):
return convert_date
def create_membership_invoice(self):
vals= {'move_type': 'out_invoice',
'partner_id': self.partner_id.id,
'ref':self.name,
'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)]})
]
}
vals = {'move_type': 'out_invoice',
'partner_id': self.partner_id.id,
'ref': self.name,
'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)]})
]
}
invoice_id = self.env['account.move'].create(vals)
self.invoice_id = invoice_id and invoice_id.id or False
@api.depends('membership_fees','duration')
def _compute_membership_level(self):
for record in self:
total_fees = record.membership_fees
total_duration = record.duration
memberships = self.env['dev.membership'].search([
('id', '!=', record.id),
('partner_id', '=', record.partner_id.id),
('to_date', '<', record.from_date),
('state', 'in', [['expire','active','cancel']])])
for membership in memberships:
total_fees += membership.membership_fees
total_duration += membership.duration
level_by_fees = self.env['membership.level'].search([ ('min', '<=', total_fees),('years', '<=', total_duration)], limit=1, order='sequence desc')
if level_by_fees:
record.membrship_level = level_by_fees
def view_invoice(self):
if self.invoice_id:
ctx = dict(create=False)
@ -355,7 +341,6 @@ class DevMembership(models.Model):
'context': ctx,
}
def view_membership(self):
if self.membership_id:
ctx = dict(create=False)
@ -369,4 +354,32 @@ class DevMembership(models.Model):
'context': ctx,
}
@api.depends('membership_fees', 'duration')
def _compute_membership_level(self):
for record in self:
total_fees = record.membership_fees
total_duration = record.duration
# Search for memberships to sum fees and duration
memberships = self.env['dev.membership'].search([
('id', '!=', record.id),
('partner_id', '=', record.partner_id.id),
('to_date', '<', record.from_date),
('state', 'in', ['expire', 'active', 'cancel'])
])
for membership in memberships:
total_fees += membership.membership_fees
total_duration += membership.duration
# Search for membership level based on the total fees and duration
level_by_fees = self.env['membership.level'].search([
('min', '<=', total_fees),
('years', '<=', total_duration)
], limit=1, order='sequence desc')
# Update the membership level
record.membership_level = level_by_fees