2016-11-16 8 views
0

私はodooのスターターです。誰も私が以下に述べる問題の解決策を見つけるのを助けることができますか?タスクのステータスが変更され、odooで自動的にデッドラインとタスクが終了したという通知を管理者に通知する方法

私はOdoo ERPの管理者であると考えています。私はタスクのステータス変更、デッドラインに達したことを自動的に気付かれる必要があります。タスクはメッセージや通知ポップアップなどの情報を終了します。

予想される目標:管理者は、プロジェクトとプロジェクト内のいくつかのタスクを作成します。これらのタスクは従業員に割り当てられます。従業員は、特定の従業員に割り当てられた特定のタスクに作業を追加します。したがって、私たちが望む目標は、そのタスクが通知によって自動的に期限に達すると、管理者にタスクのステータスを知らせることです。また、管理者はタスクの段階的変更について気付くべきです。

誰でもこの目標を達成するのに役立つことができます。前もって感謝します。

+0

あなたの質問を編集して追加してください:1.あなたのコード/あなたの試み2.あなたの入力、現在の出力と期待される出力 –

+0

期待どおりの結果を更新しました。あなたの終わりからの返信を期待しています。ありがとう –

+0

タスクでは、* project.task *モデルのエントリを意味しますか?右? – Nope

答えて

0

以下を試してください。私はodooのモジュールを書く方法についての基本的な知識を期待しています。

最初の手順 電子メールテンプレートを追加して管理者に送信します。 /your_module_name/data/data.xmlファイルをモジュールに追加することでそれを行うことができます。そして次のコードでそれを記入してください。

<?xml version="1.0" encoding="utf-8"?> 
    <openerp> 
     <data> 
     <record id="mail_to_admin_when_task_changed" model="email.template"> 
      <field name="name">Notification for admin</field> 
      <field name="email_from">${object.user_id.login}</field> 
      <field name="subject">Task state changed</field> 
      <field name="email_to">[email protected]</field> 
      <field name="model_id" ref="project.model_project_task"/> 
      <field name="lang">${object.user_id.lang}</field> 
      <field name="body_html"><![CDATA[ 
       Hello admin, the new state for <b>${object.name}</b> is <b>${object.state}</b>. 
      ]]></field> 
      </record> 
     </data> 
    </openerp> 

レジストあなたdata.xmlのデータ・リストへのパスを追加することで、あなたの__openerp__.pyからファイル。

# ...other openerp definition 
'data': [ 
     'data/data.xml' 
     #...paths to views 
    ], 
# ...other openerp definition 

第二工程 project.taskモデルにおけるwrite()方法を上書き。 project.taskモデルを継承することでそれを行うことができます。 モデルフォルダーにproject_task.pyを作成してください。 __init__.pyに登録してください。次に、project_task.pyに次のコードを書いてください。

# -*- coding: utf-8 -*- 
from openerp import models, fields, api, osv 

class project_task(models.Model): 
    _inherit = "project.task" 

    def write(self,cr,uid,ids,vals,context=None): 
     mtp = self.pool.get('email.template') 
     mail_to_admin_template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'your_module_name', 'mail_to_admin_when_task_changed')[1] 

     if "state" in vals: 
      for id in ids: 
       mtp.send_mail(cr,uid,mail_to_admin_template_id,id,force_send=True,context=context) 


     return super(project_task,self).write(cr,uid,ids,vals,context=context) 

編集が必要な場合は教えてください。

+0

これは可能性の1つですが、もう1つは独自の変更を加えたOdooの内部メールシステムを使用することです。 – CZoellner

+0

@CZoellner解決策が分かりやすいかもしれません。あなたは答えでそれを説明できますか?私はおそらくあなたの答えを投票するだろう。 – Nope

+0

実際、私は他の解決策が理解しやすいとは思わない。そしてそれのための公式のdoc(現在のドキュメント上)もありません。それはちょうど 'mail.thread'というモデルとそのすべての機能を使っています:チャッター、フォロワー、トリガーされたメール、ノートなど。 – CZoellner

関連する問題