auto send email
This commit is contained in:
@@ -18,7 +18,7 @@ Academy Management
|
||||
'version': '0.1',
|
||||
|
||||
# any module necessary for this one to work correctly
|
||||
'depends': ['base'],
|
||||
'depends': ['base', 'mail'],
|
||||
|
||||
# always loaded
|
||||
'data': [
|
||||
@@ -29,6 +29,8 @@ Academy Management
|
||||
'views/academy_schedule_views.xml',
|
||||
'views/academy_student_views.xml',
|
||||
'views/academy_teacher_views.xml',
|
||||
'data/email_template_reminder.xml',
|
||||
'data/scheduled_action_cron.xml',
|
||||
'views/academy_menus.xml',
|
||||
],
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data>
|
||||
<record id="email_template_reminder" model="mail.template">
|
||||
<field name="name">Nhắc nhở lịch học</field>
|
||||
<field name="model_id" ref="academy_management.model_academy_schedule" />
|
||||
<field name="subject">[Nhắc nhở] Bạn có buổi học "{{ object.name }}" vào {{ object.date.strftime('%d/%m/%Y %H:%M') }}</field>
|
||||
<field name="email_to">{{ ','.join(object.student_ids.mapped('email'))}}</field>
|
||||
<field name="body_html" type="html">
|
||||
<p>Chào bạn,</p>
|
||||
<p>Đây là lời nhắc rằng bạn có buổi học sắp diễn ra với thông tin chi tiết như sau:</p>
|
||||
<table border="0" cellpadding="5" cellspacing="0">
|
||||
<tr>
|
||||
<td>
|
||||
<strong>📚 Tên lịch học:</strong>
|
||||
</td>
|
||||
<td><t t-out="object.name"></t></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>🎓 Khóa học:</strong>
|
||||
</td>
|
||||
<td><t t-out="object.course_id.name"></t></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>👨🏫 Giáo viên:</strong>
|
||||
</td>
|
||||
<td><t t-out="object.teacher_id.name"></t></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>🗓️ Thời gian:</strong>
|
||||
</td>
|
||||
<td><t t-out="object.date.strftime('%H:%M')"></t> ngày <t t-out="object.date.strftime('%d/%m/%Y')"></t></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<strong>⏳ Thời lượng:</strong>
|
||||
</td>
|
||||
<td><t t-out="object.duration"></t> tiếng</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>Vui lòng chuẩn bị đầy đủ tài liệu và tham gia đúng giờ nhé!</p>
|
||||
<p>Trân trọng,</p>
|
||||
<p>Phòng đào tạo</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<data>
|
||||
<record id="ir_cron_send_training_reminders" model="ir.cron">
|
||||
<field name="name">Nhắc nhở lịch học</field>
|
||||
<field name="model_id" ref="academy_management.model_academy_schedule" />
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._send_reminder()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">minutes</field>
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False" /> -->
|
||||
<field name="active" eval="True" />
|
||||
</record>
|
||||
</data>
|
||||
|
||||
</odoo>
|
||||
@@ -1,4 +1,5 @@
|
||||
from odoo import api, fields, models, _
|
||||
from datetime import timedelta
|
||||
|
||||
class AcademySchedule(models.Model):
|
||||
_name = 'academy.schedule'
|
||||
@@ -15,10 +16,32 @@ class AcademySchedule(models.Model):
|
||||
('confirmed', 'Xác nhận'),
|
||||
('cancel', 'Đã hủy')
|
||||
], string='Trạng thái', default='draft', required=True)
|
||||
reminder_sent = fields.Boolean(string="Reminder Sent", default=False)
|
||||
|
||||
def action_confirm(self):
|
||||
self.state = 'confirmed'
|
||||
|
||||
def action_cancel(self):
|
||||
self.state = 'cancel'
|
||||
|
||||
def _send_reminder(self):
|
||||
now = fields.Datetime.now()
|
||||
next_day = now + timedelta(days=1)
|
||||
|
||||
sessions = self.search([
|
||||
('state', '=', 'confirmed'),
|
||||
('date', '>=', now),
|
||||
('date', '<=', next_day),
|
||||
('reminder_sent', '=', False),
|
||||
])
|
||||
|
||||
template = self.env.ref('academy_management.email_template_reminder', raise_if_not_found=False)
|
||||
if not template:
|
||||
return
|
||||
|
||||
for session in sessions:
|
||||
if session.student_ids:
|
||||
print(f'Gửi nhắc nhở lịch học: {session.name}')
|
||||
template.send_mail(session.id, force_send=True)
|
||||
session.reminder_sent = True
|
||||
|
||||
Reference in New Issue
Block a user