Как создать функцию уведомления по электронной почте в Odoo?

У меня calender.event модуль. В том, что у меня есть одно поле даты ending_date. Я хотел создать функцию, когда дата окончания превышает текущую дату, она должна отправлять уведомление всем сотрудникам.

Эта функция унаследовала файл calender.event

def send_birthday_email(self, cr, uid, ids=None, context=None):
        sobj = self.pool.get('calendar.event').browse(cr,uid,ids,context=context)
            ir_model_data = self.pool.get('ir.model.data')
            template_obj = self.pool.get('email.template')
            cc_text = ''
            if sobj.attendee_ids:
                    for cc_obj in sobj.attendee_ids:
                        if cc_obj.email:
                                cc_text += cc_obj.email + ','
                    for rec in sobj:
                            template_id = ir_model_data.get_object_reference(cr,uid,'calander_extended', 'calendar_notify')[1]
                    self.pool.get('email.template').write(cr,uid,template_id,{'email_to' : cc_text,})
                    self.pool.get('email.template').send_mail(cr,uid,template_id,rec.id,force_send=True,context=context)
                    return True 

Это шаблон электронной почты, написанный для него

<?xml version="1.0"?>
<openerp>
    <data>
        <record id="calendar_notify" model="email.template">
            <field name="name">Email Notification</field>
            <field name="email_from">${object.event_id.user_id.email or ''}</field>
            <field name="subject">${object.event_id.name}</field>
            <field name="model_id" ref="calander_extended.model_calendar_event"/>
        <field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
        <field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
            <field name="auto_delete" eval="True"/>

            <field name="body_html"><![CDATA[
                <html>
                    <head>
                        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
                        <title>${object.event_id.name}</title>
                        <style> 
                            span.oe_mail_footer_access {
                                display:block;    
                                text-align:center;
                                color:grey;                                
                            }
                        </style>
                    </head>
                    <body>
                        <div style="border-radius: 2px; max-width: 1200px; height: auto;margin-left: auto;margin-right: auto;background-color:#f9f9f9;">
                            <div style="height:auto;text-align: center;font-size : 30px;color: #8A89BA;">
                                <strong>${object.event_id.name}</strong>
                            </div>

                        </div>
                    </body>
                </html>
                ]]>
                </field>
        </record>
    </data>
</openerp>

Когда я вызываю эту функцию, нажимая кнопку, она не получает никакой ошибки. Но не получает почту и для участников.


person shridhar ivani    schedule 09.05.2016    source источник


Ответы (2)


Когда мне нужно написать подобную функцию, я написал функцию проверки состояния и отправителя электронной почты, и cron регулярно вызывает ее!
Это работает хорошо!

person Döme    schedule 09.05.2016
comment
я хотел, как написать функцию для этого - person shridhar ivani; 09.05.2016

Вы можете создать cron, как это делает модуль календаря [1]:

<record forcecreate="True" id="ir_cron_scheduler_alarm" model="ir.cron">
    <field name="name">Run Event Reminder</field>
    <field eval="False" name="active" />
    <field name="user_id" ref="base.user_root" />
    <field name="interval_number">30</field>
    <field name="interval_type">minutes</field>
    <field name="numbercall">-1</field>
    <field eval="False" name="doall" />
    <field eval="'calendar.alarm_manager'" name="model" />
    <field eval="'get_next_mail'" name="function" />
    <!--<field eval="'(False,)'" name="args" />-->
</record>

В данном случае вызывается метод get_next_mail для модели calendar.alarm_manager. В вашем методе вы можете делать все, что хотите. Кроме того, эта модель выглядит как правильное место для размещения вашего кода путем его расширения.

[1] https://github.com/OCA/OCB/blob/9.0/addons/calendar/calendar_cron.xml

person simahawk    schedule 09.05.2016
comment
как написать функцию для этого. я не понимаю, пожалуйста, скажите мне - person shridhar ivani; 09.05.2016
comment
для примеров того, как отправить электронную почту, просто посмотрите на существующий код. Чтобы найти события, вам просто нужно запросить объекты calendar.event с доменом, например [('end_date', '›', current_date)]. - person simahawk; 10.05.2016
comment
Мне нужна функция и код xml, поэтому я пробовал, но не работал - person shridhar ivani; 12.05.2016
comment
затем предоставьте свой код и конкретную проблему (трассировка и т. д.), с которой вы столкнулись. - person simahawk; 16.05.2016