现在有一个需求就是odoo14框架,有用户表和订单表,订单表审核员不是该用户,用户点击审核按钮提示不是审核员并且取消审核操作如何实现
时间: 2024-03-20 16:42:46 浏览: 73
要实现这个需求,可以按照以下步骤进行操作:
1. 在订单表中添加一个审核员字段,表示该订单的审核员是谁。
2. 在订单表对应的模型类中,添加一个审核方法,例如:
```
@api.multi
def approve_order(self):
# 获取当前登录用户
current_user = self.env.user
# 判断当前用户是否为该订单的审核员
if current_user.id != self.auditor_id.id:
raise ValidationError("您不是该订单的审核员,无法审核该订单!")
# 实现审核逻辑
# ...
return True
```
3. 在订单表的视图中添加一个审核按钮,例如:
```
<button name="approve_order" string="审核" type="object" class="btn-primary"/>
```
4. 在用户点击审核按钮时,调用审核方法。如果当前用户不是该订单的审核员,将会抛出一个验证错误,提示用户不是审核员并取消审核操作。
注意,要使这个功能生效,需要在订单表的视图中添加审核按钮,并设置该按钮的动作为调用审核方法。另外,为了避免通过URL直接访问审核方法,可以将审核方法的访问权限设置为只有审核员才能访问。可以通过在方法上添加`@api.check_permissions('auditor_id')`装饰器实现。
相关问题
odoo框架需求:假如有用户表订单表 现在需要让用户审核订单,审核人不能是订单表的申请人,这个方法如何实现请写出完整代码
在Odoo框架中实现该需求,需要进行以下步骤:
1. 定义用户表和订单表的模型
```python
from odoo import models, fields
class User(models.Model):
_name = 'myapp.user'
name = fields.Char()
email = fields.Char()
...
class Order(models.Model):
_name = 'myapp.order'
name = fields.Char()
user_id = fields.Many2one('myapp.user')
status = fields.Selection([('draft', 'Draft'), ('pending', 'Pending'), ('approved', 'Approved')], default='draft')
...
```
2. 创建订单审核模型,并继承订单模型
```python
class OrderApproval(models.Model):
_name = 'myapp.order_approval'
_inherits = {'myapp.order': 'order_id'}
order_id = fields.Many2one('myapp.order', required=True, ondelete='cascade')
approved_by = fields.Many2one('myapp.user', string='Approved By')
...
```
3. 定义订单审核流程
```python
class OrderWorkflow(models.Model):
_name = 'myapp.order_workflow'
def action_approve(self):
for rec in self:
if rec.order_id.status == 'pending' and rec.approved_by != rec.order_id.user_id:
rec.order_id.status = 'approved'
```
4. 将订单审核模型添加到菜单中
```xml
<odoo>
<data>
<menuitem id="menu_order_approval" name="Order Approval" parent="base.menu_sales" sequence="10"/>
<record id="view_order_approval_form" model="ir.ui.view">
<field name="name">Order Approval Form</field>
<field name="model">myapp.order_approval</field>
<field name="arch" type="xml">
<form string="Order Approval">
<sheet>
<group>
<field name="name"/>
<field name="user_id"/>
<field name="status"/>
<field name="approved_by"/>
...
</group>
</sheet>
</form>
</field>
</record>
<record id="action_order_approval" model="ir.actions.act_window">
<field name="name">Order Approval</field>
<field name="res_model">myapp.order_approval</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_order_approval_list" name="Order Approval" parent="menu_order_approval" action="action_order_approval"/>
</data>
</odoo>
```
5. 进行权限设置,使只有审核人才能操作
```xml
<odoo>
<data>
<record id="group_order_approval_user" model="res.groups">
<field name="name">Order Approval User</field>
</record>
<record id="rule_order_approval_access" model="ir.rule">
<field name="name">Order Approval Access</field>
<field name="model_id" ref="myapp.model_myapp_order_approval"/>
<field name="domain_force">[('approved_by', '=', user.id)]</field>
<field name="groups" eval="[(4,ref('myapp.group_order_approval_user'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
</data>
</odoo>
```
以上是实现Odoo框架中的订单审核需求的完整代码,该代码具体实现了订单审核的业务逻辑和权限控制。
使用odoo13框架现在有一个需求,有合同表合同表中关联着用户,然后现在需要用户审核合同,怎么样才能只显示除了该用户是审核人的合同
你可以在合同表中添加一个字段,用于记录审核人。然后在视图中添加一个筛选器,筛选器条件为审核人不等于当前用户,这样就可以只显示除了该用户是审核人的合同了。具体实现方法如下:
1. 在合同表中添加一个字段,命名为"审核人",用于记录审核人。
2. 在视图中添加一个筛选器,在筛选器中添加一个条件,条件为"审核人"不等于当前用户。
3. 保存视图并运行,就可以只显示除了该用户是审核人的合同了。
如果你需要在代码中实现这个功能,可以使用Odoo的ORM来实现,如下所示:
``` python
from odoo import models, fields, api
class Contract(models.Model):
_name = "my_module.contract"
name = fields.Char(string="合同名称")
user_id = fields.Many2one('res.users', string='用户')
auditor_id = fields.Many2one('res.users', string='审核人')
class ContractController(models.Model):
_inherit = "my_module.contract"
@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
# 获取当前用户
current_user = self.env.user
# 添加筛选条件,只显示审核人不为当前用户的合同
args += [('auditor_id', '!=', current_user.id)]
return super(ContractController, self).search(args, offset=offset, limit=limit, order=order, count=count)
```
这段代码会在搜索合同时,自动添加一个筛选条件,只显示审核人不为当前用户的合同。
阅读全文