Skip to content

Latest commit

 

History

History

demo_activity

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

odoo 觀念 - activity

建議觀看影片, 會更清楚:smile:

Youtube Tutorial - odoo 手把手教學 - activity

建議在閱讀這篇文章之前, 請先確保了解看過以下的文章 (因為都有連貫的關係)

odoo 手把手建立第一個 addons

本篇文章主要介紹 odoo 中的 activity 這部份

說明

在 odoo 中, 肯定會常常看到 activity, 也就是如下圖的地方

alt tag

因為要先定義一個 activity 的 data, 所以先來看 data/mail_data.xml

......
<data noupdate="0">
  <record id="mail_act_approval" model="mail.activity.type">
      <field name="name">Activity Approval</field>
      <field name="icon">fa-dollar</field>
      <field name="res_model_id" ref="demo_activity.model_demo_activity"/>
  </record>
</data>
......

name 定義 activity 的名稱.

icon 定義 icon.

res_model_id 選擇對應的 model.

這個 activity 的 record 也可以在 odoo 中找到,

路徑為 Technical -> Email -> Activity Types

alt tag

alt tag

也可以進去修改相關的設定

alt tag

再來看 models/models.py

......
class DemoActivity(models.Model):
    _name = "demo.activity"
    _description = "Demo Activity"
    _inherit = ['mail.thread', 'mail.activity.mixin']

    name = fields.Char(string='name', required=True)
    employee_id = fields.Many2one(
        'hr.employee', string="Employee", required=True)

    def button_activity_schedule(self):
        self.activity_schedule(
            'demo_activity.mail_act_approval',
            user_id = self.sudo().employee_id.user_id.id,
            note = 'my note',
            summary = 'my summary')

    def button_activity_feedback(self):
        self.activity_feedback(
            ['demo_activity.mail_act_approval'])

    def button_activity_unlink(self):
        self.activity_unlink(
            ['demo_activity.mail_act_approval'])

注意 _inherit = ['mail.thread', 'mail.activity.mixin']

這繼承是必須的哦, 不然你的 activity 是會失效的:smile:

這是所謂的 prototype inheritance,

可參考之前的文章以及影片 demo_prototype_inheritance.

最重要的就是這3個 function,

分別展示 activity_schedule activity_feedback activity_unlink

activity_schedule

指定 activity_schedule 給特定的人

self.activity_schedule(
    'demo_activity.mail_act_approval',
    user_id = self.sudo().employee_id.user_id.id,
    note = 'my note',
    summary = 'my summary')

demo_activity.mail_act_approval 代表 activity id.

user_id 代表 user.

note 代表 note.

summary 代表 summary.

當點選範例的 activity_schedule

alt tag

底下會顯示 activity

alt tag

狀態列也會顯示有一個 activity

alt tag

activity_feedback

同意(done)這個 activity

當點選範例的 activity_feedback

alt tag

底下會顯示 activity 狀態

alt tag

activity_unlink

取消 activity

alt tag

這功能和直接點選 Cancel 是一樣的 ( activity 會消失 )

alt tag

也請記得設定 security

security/ir.model.access.csv

security/security.xml

來看 views/view.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>

                <div class="oe_chatter">
                    <field name="message_follower_ids" widget="mail_followers"/>
                    <field name="activity_ids" widget="mail_activity"/>
                    <field name="message_ids" widget="mail_thread"/>
                </div>

              </form>
          </field>
    </record>
......

<button name="button_activity_schedule" string="activity schedule" type="object" class="oe_highlight"/>

name 就是對應 model 中的 function 的名稱, 像這邊就是對應 demo.activity model 中的

button_activity_schedule function.

string 定義 button 的名稱.

最後的這段之前也說過了,

<div class="oe_chatter">
    <field name="message_follower_ids" widget="mail_followers"/>
    <field name="activity_ids" widget="mail_activity"/>
    <field name="message_ids" widget="mail_thread"/>
</div>

就是顯示下面的那段

alt tag

最後記得也要設定 __manifest__.py 哦:smile:

注意需要 depend mail❗❗

......
  {
    ......
    # any module necessary for this one to work correctly
    'depends': ['base', 'mail', 'hr'],

    # always loaded
    'data': [
        'security/security.xml',
        'security/ir.model.access.csv',
        'data/mail_data.xml',
        'views/menu.xml',
        'views/view.xml',
    ],
    'application': True,
}