Odoo创建自动报告并使用电子邮件模板

时间:2018-05-21 11:09:07

标签: python xml jinja2 odoo-10 odoo-9

我想生成一个自动报告,并在每个月的第一天使用电子邮件模板将其发送到特定的电子邮件。

我正在考虑使用:

  • ir.cron对象,用于自动调用方法的第一个 月
  • stock.location对象,使用get_data()方法获取数据
  • mail.template对象,用于通过电子邮件发送特定用户的数据。

我编写了 get_data()方法,以便从所有位置获取 power_difference 值。问题是当我调用 send_mail()方法时。我的self.id变量等于False,因此我理解无法呈现邮件模板。

我做错了什么?我从get_data()方法获得了所需的一切,但问题是如何将记录值传递给邮件模板并发送电子邮件。

get_data()方法:

@api.model
def get_data(self):
    locations = self.env['stock.location'].search([('id','child_of',[361]),('usage','=','view')]
    records=[]
    location_power_changes={}
       for location in locations:
        power = location.power
    location.power_difference = location.last_month_power - power
    location.last_month_power = power
    location_changes['power_difference'] = location.power_difference
        records.append(location_power_changes)
    template = self.env.ref('t_stock.email_template_1')
    self.env['mail.template'].browse(template.id).send_mail(self.id)

邮件模板

<?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data noupdate="1">
        <record id="email_template_t" model="mail.template">
            <field name="name">T</field>
            <field name="email_from">example@mail.com</field>
            <field name="email_to">example1@mail.com</field>
            <field name="model_id" ref="t_stock.model_stock_location"/>
            <field name="body_html"><![CDATA[
                <p>Test</p>
                <table>
                <tbody>
                <tr>
                <th>T1</th>

                </tr>
                % if object.get_data():
                    % for values in object.get_data()
                    <tr>
                            <td>${values['power_difference']}</td>
                   </tr>
                   % endfor
                   % endif
                   </tbody></table><br>
        ]]></field>
        </record>
    </data>
</openerp>

0 个答案:

没有答案