auto send email

This commit is contained in:
XuanHuyen
2025-04-04 23:58:46 +07:00
parent 857155ba7a
commit bfc818f7a6
4 changed files with 96 additions and 1 deletions
+3 -1
View File
@@ -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,6 +16,7 @@ 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'
@@ -22,3 +24,24 @@ class AcademySchedule(models.Model):
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