Update dev_membership.py
This commit is contained in:
parent
8b22c618d8
commit
24f54a41a3
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue