码迷,mamicode.com
首页 > 其他好文 > 详细

(61) 总结字段更新方法

时间:2018-01-26 14:02:10      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:销售订单   gre   tom   更新   app   更改   top   precision   man   

前言:

当我们建立一个记录后,随着后面的流程,这个记录有些字段是要更改的

 

采用onchange更改

@api.onchange(‘sale_id‘)
def onchange_sale_id(self
):
   
if self
.sale_id:
       
self.sale_order_site = self
.sale_id.sale_order_site

sale_id = fields.Many2one(
‘sale.order‘, ‘Sale Order‘
,
                         
domain=lambda self: [(‘user_id‘, ‘=‘, self.env.uid),(‘state‘,‘!=‘,‘cancel‘
)],
                          )

 

技术分享图片

当我们改变销售订单,对应的网单号就会跟着变

 

 

采用compute 更改

@api.one
@api.depends(‘amount‘,‘back_amount‘,‘currency_id‘,‘payment_date‘
)
def _get_amount_net(self
):
    amount_net =
0.0
   
currency = self.env[‘res.currency‘].search([(‘name‘, ‘=‘, ‘USD‘)], limit=1
)
   
if
currency:
        amount_net_orig =
self.amount - self
.back_amount
       
if
amount_net_orig:
           
if currency.id != self
.currency_id.id:
                from_currency =
self.currency_id.with_context(date=self
.payment_date)
                amount_net += from_currency.compute(amount_net_orig, currency)
           
else
:
                amount_net = amount_net_orig
   
self
.amount_net = amount_net

 

amount_net = fields.Float(compute=‘_get_amount_net‘, string=‘Amount Net‘,digits_compute=dp.get_precision(‘Account‘),store=True)

 

这样就会根据 ‘amount‘,‘back_amount‘,‘currency_id‘,‘payment_date‘ 的变化来计算

amount_net 的值,这里要注意,要改变的字段,一定要调用这个计算方法 如:

compute=‘_get_amount_net‘, 若不加在指定的字段上,你在方法中写self.amount_net = xxx  这样是不会保存在数据库中的

 

采用其它操作时更改

 

比如当我取消订单时 要改变记录一些字段的值

if order.apply_type ==‘cancel‘:
    yj_robot_id =
self.env.ref(‘base.user_yj_robot‘
).id
    order.sudo(yj_robot_id).action_cancel()
   
if
order.agreed_apply_users_type:
        order.sudo(yj_robot_id).agreed_apply_users_type =
None
    if
order.payment_state:
        order.sudo(yj_robot_id).payment_state =
‘cancel‘

技术分享图片

 

 

注意事项:

权限很麻烦 ,有时仓库在出货,要改变销售订单的出货状态,这要求仓库人员有 写的权限

但我们又想,给他们,这时就在代码中临时给一个高权限的用户操作  采用 sudo()方法来操作

比如我上面

order.sudo(yj_robot_id).payment_state = ‘cancel‘

yj_robot_id  这是我自己建立的一个高权限用户,专门用来处理少权限的操作

(61) 总结字段更新方法

标签:销售订单   gre   tom   更新   app   更改   top   precision   man   

原文地址:https://www.cnblogs.com/toby2chen/p/8358967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!