Merge pull request #214 from expsa/zainab_sale

[ADD]ADD corn mail to partner and user if the membership not renew
This commit is contained in:
zainab2097 2024-07-15 23:49:24 +03:00 committed by GitHub
commit 1623a0b7f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 124 additions and 12 deletions

View File

@ -52,6 +52,33 @@
<p>It's gentle reminder that your membership is about to expire on ${object.datetime_convert()}.</p>
]]></field>
</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 -->
<record id="dev_membership_expired_mail_template" model="mail.template">
<field name="name">Membership Expired Mail</field>

View File

@ -25,6 +25,28 @@
<field name="state">code</field>
<field name="code">model.membership_reminder_email_cron()</field>
</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 -->
<record id="cron_dev_membership_seacond_reminder" model="ir.cron">

View File

@ -30,11 +30,11 @@ class DevMembership(models.Model):
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",readonly=0)
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",readonly=0,)
duration = fields.Integer(string="Duration",)
description = fields.Text(string="Description", related="product_id.description", readonly=False)
interval = fields.Selection(string="Interval", related="product_id.interval")
@ -53,12 +53,18 @@ class DevMembership(models.Model):
def _onchange_membership_type(self):
if self.product_id:
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')
def _check_subscription_fee(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.'))
@ -123,7 +129,7 @@ class DevMembership(models.Model):
def action_active_membership(self):
if not self.invoice_id and not self.is_free:
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.'))
self.state = 'active'
@ -187,14 +193,65 @@ class DevMembership(models.Model):
for membership in membership_ids:
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')
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):
membership_pool = self.env['dev.membership']
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')
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'),
('to_date', '<=', date)])
('to_date', '<=', days_before_second)])
for membership in membership_ids:
tmpl_id.send_mail(membership.id, force_send=True)
return True

View File

@ -58,12 +58,18 @@ class RenewMembership(models.TransientModel):
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.'))
@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')
def _check_duration(self):
for record in self:
if record.duration < record.product_id.duration:
raise ValidationError(_('Duration cannot be less than the default value in Setting of membrship type.'))
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.'))
def action_renew_membership(self):
mem_pool = self.env['dev.membership'].sudo()

View File

@ -14,11 +14,11 @@
<group>
<label for="duration"/>
<div>
<field name="duration" class="oe_inline" readonly="1"/>
<field name="duration" class="oe_inline" readonly="0"/>
<label for="duration" string="&#160;" style="margin-right: 5px;"/>
<field name="interval" class="oe_inline" readonly="1" style="height:24px;"/>
</div>
<field name="membership_fees" readonly="1" force_save="1"/>
<field name="membership_fees" readonly="0" force_save="1"/>
</group>
</group>
<footer>