Я понял, что вы хотите добавить кнопку в раздел действий формы модели hr.payslip
, созданной модулем hr_payroll
.
Я вижу, что вы создаете новую модельназванный email.payslip
.Это не является необходимым для достижения вашей цели, проверьте следующие шаги:
Измените __manifest__.py
вашего модуля, чтобы он зависел от hr_payroll
и mail
:
'depends': [
'hr_payroll',
'mail',
],
Измените действие XML следующим образом:
<record id="action_email_payslip" model="ir.actions.server">
<field name="name">Email Payslip</field>
<field name="model_id" ref="hr_payroll.model_hr_payslip"/>
<field name="binding_model_id" ref="hr_payroll.model_hr_payslip"/>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_email_payslip_send()
</field>
</record>
Это необходимо для создания кнопки в разделе действий представлений модели hr.payslip
.Кнопка вызовет метод Python этой модели, который будет отвечать за вызов всплывающего окна для отправки электронного письма.
Теперь давайте определим этот метод в Python:
class HrPayslip(models.Model):
_inherit = 'hr.payslip'
@api.multi
def action_email_payslip_send(self):
self.ensure_one()
template = self.env.ref(
'your_module.email_template_payslip',
False,
)
compose_form = self.env.ref(
'mail.email_compose_message_wizard_form',
False,
)
ctx = dict(
default_model='hr.payslip',
default_res_id=self.id,
default_use_template=bool(template),
default_template_id=template and template.id or False,
default_composition_mode='comment',
)
return {
'name': _('Compose Email'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form.id, 'form')],
'view_id': compose_form.id,
'target': 'new',
'context': ctx,
}
Просто замените your_module
на техническое название вашего модуля.Этот метод откроет форму для отправки электронного письма, и мы сообщаем ему о необходимости загрузить по умолчанию наш пользовательский шаблон электронной почты, XML-идентификатор которого email_template_payslip
.
Теперь нам нужно определить этот шаблон электронной почты в XML,Создайте новую папку с именем data
в корневом каталоге вашего модуля, поместите в файл XML, например, с именем email_template_data.xml
.Не забудьте добавить data
ключ вашей __manifest__.py
строки 'data/email_template_data.xml'
, чтобы сообщить вашему модулю, что он должен загрузить содержимое этого XML-файла:
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="0">
<record id="email_template_payslip" model="mail.template">
<field name="name">Payslip - Send by Email</field>
<field name="email_from">${(user.email or '')|safe}</field>
<field name="subject">${object.company_id.name|safe} Payslip (Ref ${object.name or 'n/a' })</field>
<field name="email_to">${(object.employee_id.work_email or '')|safe}</field>
<field name="model_id" ref="hr_payroll.model_hr_payslip"/>
<field name="auto_delete" eval="True"/>
<field name="lang">${(object.employee_id.user_id.lang or user.lang)}</field>
<field name="body_html"><![CDATA[
<div style="font-family: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
<p>Hello ${object.employee_id.name},</p>
<p>Here is your payslip from ${object.company_id.name}: </p>
<p style="border-left: 1px solid #8e0000; margin-left: 30px;">
Name: <strong>${object.name}</strong><br />
</p>
<p>If you have any question, do not hesitate to contact us.</p>
<p>Thank you for choosing ${object.company_id.name or 'us'}!</p>
<br/>
<br/>
</div>
]]></field>
</record>
</odoo>
В переменную ctx
у вас есть все данные, которые вы добавили в метод Python.В переменной object
каждое поле текущей записи hr.payslip
.Вы можете использовать точечную запись, чтобы добраться до любого реляционного поля.Изучите другие шаблоны электронной почты, чтобы узнать больше о языке Mako.
Если вы определенно хотите использовать свою модель email.payslip
, вам следует выполнить почти тот же процесс (в зависимости от того, что вы хотите именно) и заменить hr.payslip
ссылки email.payslip
единиц.
Если вы уверены, что вносите какие-либо изменения в шаблон электронной почты, вы можете установить атрибут noupdate
в 1, чтобы пользователи Odoo могли настраиватьШаблон электронной почты из интерфейса без потери изменений в случае обновления вашего модуля:
<odoo noupdate="1">
...
</odoo>
После того, как вы увидите всплывающее окно электронной почты и шаблон по умолчанию загружен OK, не забудьте проверить эти три шага:
- Рабочий адрес электронной почты сотрудника текущей записи платежного листа должен быть заполнен (так как это адресат электронной почты).
- Вы должны настроить свой сервер исходящей почты.
- Проверьте задачу cron Почта: менеджер очередей электронной почты .Он должен быть активным и запущенным каждую минуту (если вы хотите отправить электронное письмо максимум за одну минуту), или просто нажмите Запустить вручную .Также параметр
force_send
может быть установлен на True в электронном письме, чтобы не зависеть от заданий cron.