2016-05-09 5 views
2

私はcalender.eventモジュールを持っています。その中に私は1つの日付フィールドending_dateを持っています。終了日がすべての従業員に通知を送信する必要がある現在の日付を超えたときに機能を作成したいと考えました。Odooで電子メール通知機能を作成する方法は?

はcalender.eventでこの機能はありません。これは、私は、ボタンをクリックして、任意のエラーを取得.butないことによって、その関数を呼び出すと、それ

<?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> 

のために書かれた電子メールテンプレートでファイル

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 

を継承しました出席者にもメールを届ける

答えて

0

私は同様の機能を書かなければならないときに、私は条件チェッカーと電子メール送信機能を書いて、cronはそれをreguラリー!
うまく動作します!

+0

を私はそのための関数を書くためにどのよう –

0

カレンダーモジュールは、[1]ないとしてあなたは、cronのを作成することができます。この場合

<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> 

calendar.alarm_managerモデルにメソッドget_next_mailを呼びかけています。あなたの方法では、あなたが望むものを何でもすることができます。また、このモデルは、コードを拡張して配置する場所のように見えます。

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

+0

のための目的球を作成する方法を望んでいました。私はそれを取得していません –

+0

電子メールを送信する方法の例については、単に既存のコードを見てください。イベントを見つけるには、[( 'end_date'、 '>'、current_date)]のようなドメインのcalendar.event objsを照会するだけです。 – simahawk

+0

私は機能とXMLコードを望んでいました。私は試してみましたが、動作していません –

関連する問題