Search 1.9 billion lines of Odoo code on GitHub

demo_activity

Author: My Company
License: no license
Branch: 14.0
Repository: twtrubiks/odoo-demo-addons-tutorial
Dependencies: base, hr, and mail
Languages: Markdown (155, 57.6%), Python (39, 14.5%), and XML (75, 27.9%)
Other branches: master

<h1>odoo 觀念 - activity</h1> <p>建議觀看影片, 會更清楚:smile:</p> <p><a href="https://youtu.be/_i4yLHrXRdg">Youtube Tutorial - odoo 手把手教學 - activity</a></p> <p>建議在閱讀這篇文章之前, 請先確保了解看過以下的文章 (因為都有連貫的關係)</p> <p><a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/tree/master/demo_odoo_tutorial">odoo 手把手建立第一個 addons</a></p> <p>本篇文章主要介紹 odoo 中的 activity 這部份</p> <h2>說明</h2> <p>在 odoo 中, 肯定會常常看到 activity, 也就是如下圖的地方</p> <p><img src="https://i.imgur.com/AIlIG2b.png" alt="alt tag"></p> <p>因為要先定義一個 activity 的 data, 所以先來看 <a href="data/mail_data.xml">data/mail_data.xml</a></p> <p><code>xml ...... &lt;data noupdate=&quot;0&quot;&gt; &lt;record id=&quot;mail_act_approval&quot; model=&quot;mail.activity.type&quot;&gt; &lt;field name=&quot;name&quot;&gt;Activity Approval&lt;/field&gt; &lt;field name=&quot;icon&quot;&gt;fa-dollar&lt;/field&gt; &lt;field name=&quot;res_model_id&quot; ref=&quot;demo_activity.model_demo_activity&quot;/&gt; &lt;/record&gt; &lt;/data&gt; ...... </code></p> <p><code>name</code> 定義 activity 的名稱.</p> <p><code>icon</code> 定義 icon.</p> <p><code>res_model_id</code> 選擇對應的 model.</p> <p>這個 activity 的 record 也可以在 odoo 中找到,</p> <p>路徑為 Technical -&gt; Email -&gt; Activity Types</p> <p><img src="https://i.imgur.com/K6mubdq.png" alt="alt tag"></p> <p><img src="https://i.imgur.com/X98vjmh.png" alt="alt tag"></p> <p>也可以進去修改相關的設定</p> <p><img src="https://i.imgur.com/xxToZSP.png" alt="alt tag"></p> <p>再來看 <a href="models/models.py">models/models.py</a></p> <p>```python ...... class DemoActivity(models.Model): _name = &quot;demo.activity&quot; _description = &quot;Demo Activity&quot; _inherit = [&#39;mail.thread&#39;, &#39;mail.activity.mixin&#39;]</p> <pre><code>name = fields.Char(string=&#39;name&#39;, required=True) employee_id = fields.Many2one( &#39;hr.employee&#39;, string=&quot;Employee&quot;, required=True) def button_activity_schedule(self): self.activity_schedule( &#39;demo_activity.mail_act_approval&#39;, user_id = self.sudo().employee_id.user_id.id, note = &#39;my note&#39;, summary = &#39;my summary&#39;) def button_activity_feedback(self): self.activity_feedback( [&#39;demo_activity.mail_act_approval&#39;]) def button_activity_unlink(self): self.activity_unlink( [&#39;demo_activity.mail_act_approval&#39;]) </code></pre> <p>```</p> <p>注意 <code>_inherit = [&#39;mail.thread&#39;, &#39;mail.activity.mixin&#39;]</code></p> <p>這繼承是必須的哦, 不然你的 activity 是會失效的:smile:</p> <p>這是所謂的 prototype inheritance,</p> <p>可參考之前的文章以及影片 <a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/tree/master/demo_prototype_inheritance">demo<em>prototype</em>inheritance</a>.</p> <p>最重要的就是這3個 function,</p> <p>分別展示 <code>activity_schedule</code> <code>activity_feedback</code> <code>activity_unlink</code></p> <p><code>activity_schedule</code></p> <p>指定 activity_schedule 給特定的人</p> <p><code>python self.activity_schedule( &#39;demo_activity.mail_act_approval&#39;, user_id = self.sudo().employee_id.user_id.id, note = &#39;my note&#39;, summary = &#39;my summary&#39;) </code></p> <p><code>demo_activity.mail_act_approval</code> 代表 activity id.</p> <p><code>user_id</code> 代表 user.</p> <p><code>note</code> 代表 note.</p> <p><code>summary</code> 代表 summary.</p> <p>當點選範例的 activity_schedule</p> <p><img src="https://i.imgur.com/AD48O0S.png" alt="alt tag"></p> <p>底下會顯示 activity</p> <p><img src="https://i.imgur.com/1af8U1V.png" alt="alt tag"></p> <p>狀態列也會顯示有一個 activity</p> <p><img src="https://i.imgur.com/LYkQdkP.png" alt="alt tag"></p> <p><code>activity_feedback</code></p> <p>同意(done)這個 activity</p> <p>當點選範例的 activity_feedback</p> <p><img src="https://i.imgur.com/NXdAALh.png" alt="alt tag"></p> <p>底下會顯示 activity 狀態</p> <p><img src="https://i.imgur.com/OtNzxqC.png" alt="alt tag"></p> <p><code>activity_unlink</code></p> <p>取消 activity</p> <p><img src="https://i.imgur.com/IEoHNhc.png" alt="alt tag"></p> <p>這功能和直接點選 Cancel 是一樣的 ( activity 會消失 )</p> <p><img src="https://i.imgur.com/ZzCNX4p.png" alt="alt tag"></p> <p>也請記得設定 security</p> <p><a href="security/ir.model.access.csv">security/ir.model.access.csv</a></p> <p><a href="security/security.xml">security/security.xml</a></p> <p>來看 <a href="views/view.xml">views/view.xml</a></p> <p>```xml ...... <record id="view_activity_form" model="ir.ui.view"> <field name="name">demo.activity.form</field> <field name="model">demo.activity</field> <field eval="25" name="priority"/> <field name="arch" type="xml"> <form string="Demo Activity"> <header> <button name="button_activity_schedule" string="activity schedule" type="object" class="oe_highlight"/> <button name="button_activity_unlink" string="activity unlink" type="object" class="oe_highlight"/> <button name="button_activity_feedback" string="activity feedback" type="object" class="oe_highlight"/> </header> <sheet> <group> <field name="name"/> <field name="employee_id"/> </group> </sheet></p> <pre><code> &lt;div class=&quot;oe_chatter&quot;&gt; &lt;field name=&quot;message_follower_ids&quot; widget=&quot;mail_followers&quot;/&gt; &lt;field name=&quot;activity_ids&quot; widget=&quot;mail_activity&quot;/&gt; &lt;field name=&quot;message_ids&quot; widget=&quot;mail_thread&quot;/&gt; &lt;/div&gt; &lt;/form&gt; &lt;/field&gt; &lt;/record&gt; </code></pre> <p>...... ```</p> <p><code>&lt;button name=&quot;button_activity_schedule&quot; string=&quot;activity schedule&quot; type=&quot;object&quot; class=&quot;oe_highlight&quot;/&gt;</code></p> <p><code>name</code> 就是對應 model 中的 function 的名稱, 像這邊就是對應 <code>demo.activity</code> model 中的</p> <p><code>button_activity_schedule</code> function.</p> <p><code>string</code> 定義 button 的名稱.</p> <p>最後的這段之前也說過了,</p> <p><code>xml &lt;div class=&quot;oe_chatter&quot;&gt; &lt;field name=&quot;message_follower_ids&quot; widget=&quot;mail_followers&quot;/&gt; &lt;field name=&quot;activity_ids&quot; widget=&quot;mail_activity&quot;/&gt; &lt;field name=&quot;message_ids&quot; widget=&quot;mail_thread&quot;/&gt; &lt;/div&gt; </code></p> <p>就是顯示下面的那段</p> <p><img src="https://i.imgur.com/7L9wkDx.png" alt="alt tag"></p> <p>最後記得也要設定 <code>__manifest__.py</code> 哦:smile:</p> <p>注意需要 depend <code>mail</code>:exclamation::exclamation:</p> <p>```python ...... { ...... # any module necessary for this one to work correctly &#39;depends&#39;: [&#39;base&#39;, &#39;mail&#39;, &#39;hr&#39;],</p> <pre><code># always loaded &#39;data&#39;: [ &#39;security/security.xml&#39;, &#39;security/ir.model.access.csv&#39;, &#39;data/mail_data.xml&#39;, &#39;views/menu.xml&#39;, &#39;views/view.xml&#39;, ], &#39;application&#39;: True, </code></pre> <p>} ```</p>