<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                現在用戶已經可以在系統添加請假單了。但是還沒有審批流程。先來設置一個簡單的審批流程,員工填寫請假單(草稿狀態)->提交請假單給領導(待審批狀態)->領導審批(完成狀態)。 編輯類文件?`models/models.py` ~~~ # -*- coding: utf-8 -*- from odoo import models, fields, api class qingjiadan(models.Model): WORKFLOW_STATE_SELECTION = [ ('draft', '草稿'), ('confirm', '待審批'), ('complete', '已完成') ] _name = 'qingjia.qingjiadan' name = fields.Char(string="申請人") days = fields.Integer(string="天數") startdate = fields.Date(string="開始日期") reason = fields.Text(string="請假事由") state = fields.Selection(WORKFLOW_STATE_SELECTION, default='draft', string='狀態', readonly=True) @api.multi def do_confirm(self): self.state = 'confirm' return True @api.multi def do_complete(self): self.state = 'complete' return True ~~~ 添加了一個字段`state`,請假單狀態,字段類型為`fields.Selection`,包含三個狀態draft(草稿),confirm(待審批),complete(已完成),默認值為draft(草稿),`readonly=True`屬性表示在form視圖下是不能修改的。 添加了兩個方法`do_confirm()`,`do_complete()`,用于改變請假單狀態。`@api.multi`修飾符還不明白用途。按鈕事件方法必須有返回值,這里沒有什么需要返回的值就返回`return True` 然后編輯視圖資源文件?`views/views.xml`中的form視圖部分 ~~~ <!-- form視圖 --> <record id="view_form_qingjia_qingjiadan" model="ir.ui.view"> <field name="name">請假單</field> <field name="model">qingjia.qingjiadan</field> <field name="arch" type="xml"> <form> <header> <button name="button_confirm" states="draft" string="提交" type="workflow" class="oe_highlight"/> <button name="button_complete" states="confirm" string="批準" type="workflow" class="oe_highlight" groups="base.group_user"/> <!-- 右上角 進度顯示。--> <field name="state" widget="statusbar"/> </header> <sheet> <group name="group_top" string="請假單"> <field name="name"/> <field name="days"/> <field name="startdate"/> <field name="reason"/> </group> </sheet> </form> </field> </record> ~~~ 添加了`<header>...</header>`節,名稱可知這是表單布局的頭部。其中添加了三個元素,兩個按鈕,一個狀態條。 按鈕的屬性: name: 指定按鈕點擊后的事件名,對應工作流的activity,后面會看到 states: 表示按鈕在什么狀態下顯示,對應state字段的值 type: 工作流的按鈕固定值`workflow` class: 按鈕的class樣式,`oe_highlight`樣式為高亮顯示 groups: 這里就是上一節提到的第三級權限,字段級權限 狀態條屬性: name: 狀態條綁定字段名 widget: 類型,狀態條固定值`statusbar` * * * 在tree視圖中加入`state`字段顯示 ~~~ <!-- tree視圖 --> <record id="view_tree_qingjia_qingjiadan" model="ir.ui.view"> <field name="name">請假單列表</field> <field name="model">qingjia.qingjiadan</field> <field name="arch" type="xml"> <tree> <field name="name"/> <field name="days"/> <field name="startdate"/> <field name="state"/> </tree> </field> </record> ~~~ 新建工作流資源文件`views/workflow.xml` 添加工作流: ~~~ <!-- 工作流 --> <record id="workflow_qingjia_qingjiadan" model="workflow"> <field name="name">請假單工作流</field> <field name="osv">qingjia.qingjiadan</field> <field name="on_create">True</field> </record> ~~~ 這個文件中定義了一個工作流,id為`workflow_qingjia_qingjiadan`。三個工作流活動,id分別為`activity_draft`,`activity_confirm`,`activity_complete`,兩個工作流流轉,id分別為`transition_draft2confirm`,`transition_confirm2complete`。工作流屬性: model: 工作流模型,固定為`workflow` name: 工作流名稱,任意填寫 osv: 工作流綁定的對象模型 on_create: 創建一個綁定的對象模型的對象時,是否自動生成一個工作流對象。說起來有點繞口,其實就是創建一個請假單時,自動創建一個請假單工作流對象。 * * * 添加工作流活動: ~~~ <!-- 工作流活動 --> <record id="activity_draft" model="workflow.activity"> <field name="name">草稿</field> <field name="wkf_id">workflow_qingjia_qingjiadan</field> <field name="kind">dummy</field> <field name="flow_start">True</field> </record> <record id="activity_confirm" model="workflow.activity"> <field name="name">待審核</field> <field name="wkf_id">workflow_qingjia_qingjiadan</field> <field name="kind">function</field> <field name="action">do_confirm()</field> </record> <record id="activity_complete" model="workflow.activity"> <field name="name">已完成</field> <field name="wkf_id">workflow_qingjia_qingjiadan</field> <field name="kind">function</field> <field name="action">do_complete()</field> </record> ~~~ model: 工作流活動模型,固定為`workflow.activity` name: 工作流活動名稱,任意填寫 wkf_id: 工作流活動所屬的工作流id kind: 工作流活動類型,有三個可選項,`'dummy'`不執行任何動作,`'function'`執行action中定義的python代碼,并且執行action_id中定義的server action,`'subflow'`觸發subflow_id中指定的工作流。 flow_start: 表示流程的開始節點 * * * 添加工作流流轉: ~~~ <!-- 工作流流轉 --> <record id="transition_draft2confirm" model="workflow.transition"> <field name="act_from">activity_draft</field> <field name="act_to">activity_confirm</field> <field name="signal">button_confirm</field> </record> <record id="transition_confirm2complete" model="workflow.transition"> <field name="act_from">activity_confirm</field> <field name="act_to">activity_complete</field> <field name="signal">button_complete</field> </record> ~~~ model: 工作流流轉模型,固定為`workflow.transition` act_from: 流轉起始的工作流活動id act_to: 流轉結束的工作流活動id signal: 觸發流轉的信號,還記得前面在form視圖中添加的工作流按鈕 ~~~ <button name="button_confirm" states="draft" string="提交" type="workflow" class="oe_highlight"/> <button name="button_complete" states="confirm" string="批準" type="workflow" class="oe_highlight" groups="base.group_user"/> ~~~ 按鈕name值就是發出的信號,觸發對應的流轉。 * * * 最后工作流資源文件`views/workflow.xml`是這樣的: ~~~ <?xml version="1.0" encoding="UTF-8"?> <openerp> <data> <!-- 工作流 --> <record id="workflow_qingjia_qingjiadan" model="workflow"> <field name="name">請假單工作流</field> <field name="osv">qingjia.qingjiadan</field> <field name="on_create">True</field> </record> <!-- 工作流活動 --> <record id="activity_draft" model="workflow.activity"> <field name="name">草稿</field> <field name="wkf_id" ref="workflow_qingjia_qingjiadan"/> <field name="kind">function</field> <field name="flow_start">True</field> </record> <record id="activity_confirm" model="workflow.activity"> <field name="name">待審核</field> <field name="wkf_id" ref="workflow_qingjia_qingjiadan"/> <field name="kind">function</field> <field name="action">do_confirm()</field> </record> <record id="activity_complete" model="workflow.activity"> <field name="name">已完成</field> <field name="wkf_id" ref="workflow_qingjia_qingjiadan"/> <field name="kind">function</field> <field name="action">do_complete()</field> </record> <!-- 工作流流轉 --> <record id="transition_draft2confirm" model="workflow.transition"> <field name="act_from">activity_draft</field> <field name="act_to">activity_confirm</field> <field name="signal">button_confirm</field> </record> <record id="transition_confirm2complete" model="workflow.transition"> <field name="act_from">activity_confirm</field> <field name="act_to">activity_complete</field> <field name="signal">button_complete</field> </record> </data> </openerp> ~~~ 編輯配置文件`__manifest__.py`,添加對工作流資源文件`views/workflow.xml`載入: ~~~ # always loaded 'data': [ 'security/ir.model.access.csv', 'views/workflow.xml', 'views/views.xml', 'views/templates.xml', ], ~~~ 好了,代碼編輯完了,可以測試下效果。因為修改了python代碼文件,所以需要重啟服務,然后升級請假模塊。也可以把之前的模塊卸載后再次安裝,不過卸載模塊會將之前的數據也清空,這里因為在表中新建了字段,所以我是直接卸載后重新安裝的。 用user1用戶登錄系統,創建一個請假單,并保存。 ![](http://upload-images.jianshu.io/upload_images/3551405-f45608469720a3da.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 帶工作流的請假單 我們看到在頭部出現的`提交`按鈕,狀態條,并顯示默認的`草稿`狀態。 提交后,出現了`審批`按鈕,顯示`待審批`狀態。 批準后,無按鈕,顯示`已完成`狀態。 工作流都按預期執行了,但是這里有點問題,就是自己有權限審批自己的請假單,這是因為權限配置的問題,我們把`審批`按鈕的權限給到了`base.group_user`組,而我們知道這是一個默認全部賬號都有的基本組。下次我們來解決這個問題。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看