在Odoo中添加自定义设置选项,以使应用更加灵活和可配置。假设我们正在开发一个销售管理模块(称为my_sales
),其中包括一个可选功能,允许销售人员为客户创建优惠券。这个功能可能不是每个企业都需要的,所以我们决定将其作为一个可在设置中启用或禁用的选项提供。
准备工作
在开始之前,我们已经开发了一个基础的销售管理模块,允许销售人员创建订单和管理客户。现在,我们想要添加一个新功能:生成优惠券。但是,我们希望这个功能是可选的,即用户可以在设置中选择是否启用它。
如何实现…
按照以下步骤来创建自定义设置选项:
-
添加一个新分组:
在my_sales/security/groups.xml
文件中定义一个新的用户组,用于控制谁可以管理优惠券功能。<record id="group_manage_coupons" model="res.groups"> <field name="name">Manage Coupons</field> <field name="users" eval="[(4, ref('base.user_admin'))]"/> </record>
-
通过继承
res.config.settings
模型来添加新字段:
我们需要在设置模型中添加一个新的布尔字段,以便启用或禁用优惠券功能。from odoo import models, fields class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' group_manage_coupons = fields.Boolean( string="Enable Coupons", implied_group='my_sales.group_manage_coupons' )
-
修改设置视图以包含新选项:
通过继承并修改设置视图来添加优惠券管理的设置选项。<record id="res_config_settings_view_form" model="ir.ui.view"> <field name="name">res.config.settings.view.form.inherit.sales</field> <field name="model">res.config.settings</field> <field name="inherit_id" ref="base.res_config_settings_view_form"/> <field name="arch" type="xml"> <xpath expr="//div[hasclass('settings')]" position="inside"> <div class="app_settings_block" data-string="Sales" string="Sales"> <h2>Coupons</h2> <div class="row mt16 o_settings_container"> <div class="col-12 col-lg-6 o_setting_box"> <div class="o_setting_left_pane"> <field name="group_manage_coupons"/> </div> <div class="o_setting_right_pane"> <label for="group_manage_coupons"/> <div class="text-muted"> Enable or disable the ability for salespeople to create coupons for customers. </div> </div> </div> </div> </div> </xpath> </field> </record>
-
为Settings添加一个菜单项和动作:
在my_sales/views/menuitems.xml
中添加一个菜单项和相应的动作,以便用户可以访问这些设置。<record id="sales_config_settings_action" model="ir.actions.act_window"> <field name="name">Settings</field> <field name="type">ir.actions.act_window</field> <field name="res_model">res.config.settings</field> <field name="view_mode">form</field> <field name="target">inline</field> <field name="context">{'module' : 'my_sales'}</field> </record> <menuitem name="Settings" id="sales_setting_menu" parent="sales_base_menu" action="sales_config_settings_action" sequence="50"/>
-
修改功能设置:
确保在提供优惠券功能的代码中检查这个设置,以确定是否应该使功能可用。 -
重启服务并更新
my_sales
模块:
重启Odoo服务并更新my_sales
模块,以确保这些更改生效。
通过以上步骤,我们成功地为销售管理模块添加了一个可通过设置启用或禁用的自定义功能。这种方法提供了极大的灵活性,允许应用适应不同企业的特定需求。