[ADD]ADD corn mail to partner and user if the membership not renew
This commit is contained in:
parent
78c247137a
commit
82bc0de986
|
|
@ -52,6 +52,33 @@
|
||||||
<p>It's gentle reminder that your membership is about to expire on ${object.datetime_convert()}.</p>
|
<p>It's gentle reminder that your membership is about to expire on ${object.datetime_convert()}.</p>
|
||||||
]]></field>
|
]]></field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<record id="dev_cancel_membership_expire" model="mail.template">
|
||||||
|
<field name="name">Membership Cancel Notify</field>
|
||||||
|
<field name="email_from">${(object.company_id.email or '') | safe}</field>
|
||||||
|
<field name="email_to">${(object.partner_id.email or '') | safe}</field>
|
||||||
|
<field name="subject">Membership Second Expire Reminder</field>
|
||||||
|
<field name="model_id" ref="dev_membership.model_dev_membership"/>
|
||||||
|
<field name="auto_delete" eval="True"/>
|
||||||
|
<field name="body_html"><![CDATA[
|
||||||
|
<p>Hello ${object.partner_id.name}.</p>
|
||||||
|
<p>Hope you doing well!</p>
|
||||||
|
<p>It's gentle reminder that your membership is about to Cancelled on ${object.datetime_convert()}.</p>
|
||||||
|
]]></field>
|
||||||
|
</record>
|
||||||
|
<record id="dev_cancel_membership_expire2" model="mail.template">
|
||||||
|
<field name="name">Membership Cancel Notify</field>
|
||||||
|
<field name="email_from">${(object.company_id.email or '') | safe}</field>
|
||||||
|
<field name="email_to">${(object.user_id.email or '') | safe}</field>
|
||||||
|
<field name="subject">Membership Second Expire Reminder</field>
|
||||||
|
<field name="model_id" ref="dev_membership.model_dev_membership"/>
|
||||||
|
<field name="auto_delete" eval="True"/>
|
||||||
|
<field name="body_html"><![CDATA[
|
||||||
|
<p>Hello ${object.user_id.name}.</p>
|
||||||
|
<p>Hope you doing well!</p>
|
||||||
|
<p>It's gentle reminder that your membership is about to Cancelled on ${object.datetime_convert()}.</p>
|
||||||
|
]]></field>
|
||||||
|
</record>
|
||||||
<!-- todo end -->
|
<!-- todo end -->
|
||||||
<record id="dev_membership_expired_mail_template" model="mail.template">
|
<record id="dev_membership_expired_mail_template" model="mail.template">
|
||||||
<field name="name">Membership Expired Mail</field>
|
<field name="name">Membership Expired Mail</field>
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,28 @@
|
||||||
<field name="state">code</field>
|
<field name="state">code</field>
|
||||||
<field name="code">model.membership_reminder_email_cron()</field>
|
<field name="code">model.membership_reminder_email_cron()</field>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="cron_cancel_dev_membership_reminder" model="ir.cron">
|
||||||
|
<field name="name">Membership Partner Cancel Notify</field>
|
||||||
|
<field name="user_id" ref="base.user_admin"/>
|
||||||
|
<field name="interval_number">1</field>
|
||||||
|
<field name="interval_type">days</field>
|
||||||
|
<field name="numbercall">-1</field>
|
||||||
|
<field name="doall" eval="False"/>
|
||||||
|
<field name="model_id" ref="model_dev_membership"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model.cancell_membership_reminder_email_cron()</field>
|
||||||
|
</record>
|
||||||
|
<record id="cron_cancel2_dev_membership_reminder" model="ir.cron">
|
||||||
|
<field name="name">Membership User Cancel Notify</field>
|
||||||
|
<field name="user_id" ref="base.user_admin"/>
|
||||||
|
<field name="interval_number">1</field>
|
||||||
|
<field name="interval_type">days</field>
|
||||||
|
<field name="numbercall">-1</field>
|
||||||
|
<field name="doall" eval="False"/>
|
||||||
|
<field name="model_id" ref="model_dev_membership"/>
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">model.cancell2_membership_reminder_email_cron()</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<!-- todo start -->
|
<!-- todo start -->
|
||||||
<record id="cron_dev_membership_seacond_reminder" model="ir.cron">
|
<record id="cron_dev_membership_seacond_reminder" model="ir.cron">
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,11 @@ class DevMembership(models.Model):
|
||||||
phone = fields.Char(string='Phone',related='partner_id.phone',store=True)
|
phone = fields.Char(string='Phone',related='partner_id.phone',store=True)
|
||||||
email = fields.Char(string='Email',related='partner_id.email',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)
|
product_id = fields.Many2one('product.product', string="Membership Product", domain="[('is_membership', '=', True)]", tracking=2, required=1)
|
||||||
membership_fees = fields.Float(string="Membership Fees",readonly=0)
|
membership_fees = fields.Float(string="Membership Fees")
|
||||||
is_free = fields.Boolean(string="Is Free",related="product_id.is_free",)
|
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)
|
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=1, tracking=3)
|
||||||
duration = fields.Integer(string="Duration",readonly=0,)
|
duration = fields.Integer(string="Duration",)
|
||||||
description = fields.Text(string="Description", related="product_id.description", readonly=False)
|
description = fields.Text(string="Description", related="product_id.description", readonly=False)
|
||||||
interval = fields.Selection(string="Interval", related="product_id.interval")
|
interval = fields.Selection(string="Interval", related="product_id.interval")
|
||||||
|
|
||||||
|
|
@ -53,12 +53,18 @@ class DevMembership(models.Model):
|
||||||
def _onchange_membership_type(self):
|
def _onchange_membership_type(self):
|
||||||
if self.product_id:
|
if self.product_id:
|
||||||
self.membership_fees = self.product_id.list_price
|
self.membership_fees = self.product_id.list_price
|
||||||
self.duration = self.product_id.duration
|
self.duration = (self.product_id.duration)
|
||||||
|
@api.onchange('duration')
|
||||||
|
def _onchange_duration(self):
|
||||||
|
if self.duration and self.interval and self.membership_fees:
|
||||||
|
self.membership_fees = self.duration*self.membership_fees
|
||||||
|
|
||||||
@api.constrains('membership_fees')
|
@api.constrains('membership_fees')
|
||||||
def _check_subscription_fee(self):
|
def _check_subscription_fee(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.membership_fees < record.product_id.list_price:
|
if record.product_id.duration==1 and record.membership_fees < record.product_id.list_price :
|
||||||
|
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||||
|
elif record.product_id.duration>1 and record.membership_fees*record.duration < record.product_id.list_price*record.duration :
|
||||||
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -123,7 +129,7 @@ class DevMembership(models.Model):
|
||||||
def action_active_membership(self):
|
def action_active_membership(self):
|
||||||
if not self.invoice_id and not self.is_free:
|
if not self.invoice_id and not self.is_free:
|
||||||
raise ValidationError(_('Please Create Membership Invoice'))
|
raise ValidationError(_('Please Create Membership Invoice'))
|
||||||
if self.invoice_id.payment_state != 'paid' and not self.is_free:
|
if self.invoice_id.payment_state not in ['paid','in_payment'] and not self.is_free:
|
||||||
raise ValidationError(_('Membership Invoice is not paid.\nPlease Paid membership invoice and active the membership.'))
|
raise ValidationError(_('Membership Invoice is not paid.\nPlease Paid membership invoice and active the membership.'))
|
||||||
self.state = 'active'
|
self.state = 'active'
|
||||||
|
|
||||||
|
|
@ -187,14 +193,65 @@ class DevMembership(models.Model):
|
||||||
for membership in membership_ids:
|
for membership in membership_ids:
|
||||||
tmpl_id.send_mail(membership.id, force_send=True)
|
tmpl_id.send_mail(membership.id, force_send=True)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def cancell_membership_reminder_email_cron(self):
|
||||||
|
membership_pool = self.env['dev.membership']
|
||||||
|
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')
|
||||||
|
cancel_reason = self.env['ir.config_parameter'].get_param('dev_membership.cancellation_reason')
|
||||||
|
|
||||||
|
if tmpl_id and post_expiry_period:
|
||||||
|
date = fields.Date.today() - relativedelta(days=int(post_expiry_period))
|
||||||
|
membership_ids = membership_pool.search([
|
||||||
|
('state', '=', 'expire'),
|
||||||
|
('to_date', '<=', date),('membership_id','=',False)
|
||||||
|
])
|
||||||
|
for membership in membership_ids:
|
||||||
|
membership.write({
|
||||||
|
'state': 'cancel',
|
||||||
|
'cancel_reason': cancel_reason
|
||||||
|
})
|
||||||
|
tmpl_id.send_mail(membership.id, force_send=True)
|
||||||
|
return True
|
||||||
|
def cancell2_membership_reminder_email_cron(self):
|
||||||
|
membership_pool = self.env['dev.membership']
|
||||||
|
tmpl_id = self.env.ref('dev_membership.dev_cancel_membership_expire2')
|
||||||
|
post_expiry_period = self.env['ir.config_parameter'].get_param('dev_membership.post_expiry_period')
|
||||||
|
cancel_reason = self.env['ir.config_parameter'].get_param('dev_membership.cancellation_reason')
|
||||||
|
|
||||||
|
if tmpl_id and post_expiry_period:
|
||||||
|
date = fields.Date.today() - relativedelta(days=int(post_expiry_period))
|
||||||
|
membership_ids = membership_pool.search([
|
||||||
|
('state', '=', 'expire'),
|
||||||
|
('to_date', '<=', date),('membership_id','=',False)
|
||||||
|
])
|
||||||
|
for membership in membership_ids:
|
||||||
|
membership.write({
|
||||||
|
'state': 'cancel',
|
||||||
|
'cancel_reason': cancel_reason
|
||||||
|
})
|
||||||
|
tmpl_id.send_mail(membership.id, force_send=True)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def cancell_membership_reminder_email_cron(self):
|
||||||
|
membership_pool = self.env['dev.membership']
|
||||||
|
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:
|
||||||
|
date = self.to_date+ relativedelta(days=int(post_expiry_period))
|
||||||
|
membership_ids = membership_pool.search([('state', '=', 'expire'),
|
||||||
|
('to_date', '<=', date)])
|
||||||
|
for membership in membership_ids:
|
||||||
|
tmpl_id.send_mail(membership.id, force_send=True)
|
||||||
|
return True
|
||||||
def membership_secand_reminder_email_cron(self):
|
def membership_secand_reminder_email_cron(self):
|
||||||
membership_pool = self.env['dev.membership']
|
membership_pool = self.env['dev.membership']
|
||||||
tmpl_id = self.env.ref('dev_membership.dev_membership_expire_second_reminder_mail_template')
|
tmpl_id = self.env.ref('dev_membership.dev_membership_expire_second_reminder_mail_template')
|
||||||
days_before_second = self.env['ir.config_parameter'].get_param('dev_membership.days_before_second')
|
days_before_second = self.env['ir.config_parameter'].get_param('dev_membership.days_before_second')
|
||||||
if tmpl_id:
|
if tmpl_id:
|
||||||
date = datetime.now().date() + relativedelta(days=int(days_before))
|
date = datetime.now().date() + relativedelta(days=int(days_before_second))
|
||||||
membership_ids = membership_pool.search([('state', '=', 'active'),
|
membership_ids = membership_pool.search([('state', '=', 'active'),
|
||||||
('to_date', '<=', date)])
|
('to_date', '<=', days_before_second)])
|
||||||
for membership in membership_ids:
|
for membership in membership_ids:
|
||||||
tmpl_id.send_mail(membership.id, force_send=True)
|
tmpl_id.send_mail(membership.id, force_send=True)
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -58,12 +58,18 @@ class RenewMembership(models.TransientModel):
|
||||||
if record.membership_fees < record.product_id.list_price:
|
if record.membership_fees < record.product_id.list_price:
|
||||||
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||||
|
|
||||||
|
@api.onchange('duration')
|
||||||
|
def _onchange_duration(self):
|
||||||
|
if self.duration and self.interval and self.membership_fees:
|
||||||
|
self.membership_fees = self.duration*self.membership_fees
|
||||||
@api.constrains('duration')
|
@api.constrains('duration')
|
||||||
def _check_duration(self):
|
def _check_duration(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.duration < record.product_id.duration:
|
if record.product_id.duration==1 and record.membership_fees < record.product_id.list_price :
|
||||||
raise ValidationError(_('Duration cannot be less than the default value in Setting of membrship type.'))
|
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||||
|
elif record.product_id.duration>1 and record.membership_fees*record.duration < record.product_id.list_price*record.duration :
|
||||||
|
raise ValidationError(_('Membership fees cannot be less than the default value in Setting of membrship type.'))
|
||||||
|
|
||||||
|
|
||||||
def action_renew_membership(self):
|
def action_renew_membership(self):
|
||||||
mem_pool = self.env['dev.membership'].sudo()
|
mem_pool = self.env['dev.membership'].sudo()
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,11 @@
|
||||||
<group>
|
<group>
|
||||||
<label for="duration"/>
|
<label for="duration"/>
|
||||||
<div>
|
<div>
|
||||||
<field name="duration" class="oe_inline" readonly="1"/>
|
<field name="duration" class="oe_inline" readonly="0"/>
|
||||||
<label for="duration" string=" " style="margin-right: 5px;"/>
|
<label for="duration" string=" " style="margin-right: 5px;"/>
|
||||||
<field name="interval" class="oe_inline" readonly="1" style="height:24px;"/>
|
<field name="interval" class="oe_inline" readonly="1" style="height:24px;"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="membership_fees" readonly="1" force_save="1"/>
|
<field name="membership_fees" readonly="0" force_save="1"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue