Hello,
I have made some code for document expiry module, that when notification date comes then the email will be triggered till the expiry date laps. A person can stop the email notification send for any particular document by marking check on Disable Notification check box. It's working fine but fails at one place when Notification date is not come and If Expiry Date laps then for both these case mail is triggered, but it should not be happened.
Here is my code:
class Employee(models.Model):
_inherit = 'hr.employee'
document_lines_ids = fields.One2many('document.lines', 'employee_id', string='Document Lines')
@api.model
def scheduler_document_expiration(self):
employee_obj = self.env['hr.employee'].search([])
template_id = self.env['ir.model.data'].get_object_reference('document_expiry_control', 'email_template_document_expiration')[1]
template_browse = self.env['mail.template'].browse(template_id)
DATE_FORMAT = '%Y-%m-%d'
today_date = datetime.strptime(
str(datetime.today().date()), DATE_FORMAT).date()
if template_browse:
for data in employee_obj:
documents = data.document_lines_ids.filtered(lambda r: not r.disable_notification)
for lines in documents.filtered(lambda r: today_date >= datetime.strptime(
str(r.notification_from), DATE_FORMAT).date() and today_date <= datetime.strptime(
str(r.expiry_date), DATE_FORMAT).date()):
if any(documents.filtered(lambda r: today_date >= datetime.strptime(
str(r.notification_from), DATE_FORMAT).date() and today_date <= datetime.strptime(
str(r.expiry_date), DATE_FORMAT).date())):
values = template_browse.generate_email(data.id, fields=None)
mail_mail_obj = self.env['mail.mail']
msg_id = mail_mail_obj.create(values)
if msg_id:
msg_id.send()
return True
Template:
<data noupdate="1">
<record id="email_template_document_expiration" model="mail.template">
<field name="name">Document Expiration Notification</field>
<field name="email_from">abc@gmail.com</field>
<field name="subject">Document Expiration</field>
<field name="email_to">xyz@gmail.com</field>
<field name="lang">${object.lang}</field>
<field name="model_id" ref="document_expiry_control.model_hr_employee"/>
<field name="auto_delete" eval="True"/>
<field name="body_html"><![CDATA[
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
<p>Hi,</p>
% for data in object.document_lines_ids:
% if data.disable_notification == False:
<p>The ${data.document_type.name} of ${object.name} is going to expire on ${data.expiry_date}.</p>
% endif
% endfor
<p>Kindly proceed with the renewal.</P>
<p>Best Regards,</p>
</div>
]]></field>
</record>
</data>