说明
Odoo采购模块中,询价单的审批只有两级审批,当询价单金额超过设置的数值时须由经理审批通过。如果我们想再加一个或多个审批环节,又该如何处理呢?接下来我们就通过代码来说明如果修改代码实现对采购审批流程的修改。
模块结构
采购相关的模块共有四个,它们分别是:purchase、purchase_mrp、purchase_requisition、purchase_stock。
- purchase 采购功能相关主要业务实现
- purchase_mrp 采购业务中涉及到制造模块的逻辑
- purchase_requisition 采购协议
- purchase_stock 采购中涉及到的库存逻辑
purchase模块目录说明:
- manifest.py Odoo模块配置文件,指定了模块的版本、名依赖、demo数据、数据等信息
- data 存放相关数据,在__manifest__.py 文件中指定
- i18n 国际化配置
- models 包含主要业务代码
- report 打印模板
- security 权限配置
- views 前端页面
i18n目录是Odoo模块的约定目录,国际化的配置文件必须放在此目录下,否则加载无效。security、view、data目录是一种逻辑目录,这些目录下的数据需要在 manifest.py配置中指定文件的相对路径。
添加一个组
Odoo 中的组(res.groups)就是一种角色的概念,我们可以为组分配一定的访问权限,这种设置是通过文件配置来实现的。然后在Web端我们为某个用户分配某些组来实现对用户权限的控制。
在security目录下的purchase_security.xml文件中添加
<record id="group_purchase_manager_gm" model="res.groups">
<field name="name">Manager GM</field>
<field name="category_id" ref="base.module_category_purchase_management"/>
<field name="implied_ids" eval="[(4, ref('group_purchase_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
我们添加了一个名称为的Manager GM的组,category_id指定组的分类,implied_ids指定了组继承了哪些组,users指定了初始化时哪些用户属于该组。
为purchase.order 添加审批方法 button_approve_gm
找到models文件夹中的purchase.py 文件,为PurchaseOrder 类添加如下方法
@api.multi
def button_approve_gm(self, force=False):
self.write({'state': 'purchase', 'date_approve': fields.Date.context_today(self)})
self.filtered(lambda p: p.company_id.po_lock == 'lock').write({'state': 'done'})
return {}
添加审批按钮
找到views目录下的purchase_views.xml ,我们修改 id为purchase_order_form 的record。我们在header中添加如下代码
<button name="button_approve_gm" type="object" states='to approve gm' string="Approve Order" class="oe_highlight" groups="purchase.group_purchase_manager_gm"/>
- states 当前订单状态是"to approve gm"时显示
- groups 当前用户属于“purchase.group_purchase_manager_gm”z组时显示
- name 指定了点击按钮时的回调方法
国际化配置
首先找到i18n下的purchase.pot文件,添加默认配置如下:
#. module: purchase
#: model:res.groups,name:purchase.group_purchase_manager_gm
msgid "Manager GM"
msgstr ""
注: .pot 文件是国际化配置解析校验规则,我们必须在.pot 文件中指定需要配置的字段。如果没有指定,国际化的配置是不会生效的
然后找到对应的po文件,zh_CN.po如下:
#. module: purchase
#: model:res.groups,name:purchase.group_purchase_manager_gm
msgid "Manager GM"
msgstr "总经理"