我正在修改sale.order.form中的按钮(确认销售),这样当我按下时,我立即获取库存(stock.picking.form)。这非常有效。但是当我想验证产品何时是可库存类型的功能时。仅当我在订单中仅选择一个产品时,它才有效。
问题是当我选择多个产品时,如下图所示:
这是“确认销售”按钮的功能。
@api.multi
def action_confirm(self):
for order in self:
order.state = 'sale'
if self.env.context.get('send_email'):
self.force_quotation_send()
order.order_line._action_procurement_create()
if not order.project_id:
for line in order.order_line:
if line.product_id.invoice_policy == 'cost':
order._create_analytic_account()
break
if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
self.action_done()
****这里开始改变职能****************
if self.order_line.product_id.product_tmpl_id.type in 'product':
action = self.env.ref('stock.action_picking_tree_all')
result = {
'name': action.name,
'help': action.help,
'type': action.type,
'view_type': action.view_type,
'view_mode': action.view_mode,
'target': action.target,
'context': action.context,
'res_model': action.res_model,
}
pick_ids = sum([order.picking_ids.ids for order in self], [])
if len(pick_ids) > 1:
result['domain'] = "[('id','in',["+','.join(map(str, pick_ids))+"])]"
elif len(pick_ids) == 1:
form = self.env.ref('stock.view_picking_form', False)
form_id = form.id if form else False
result['views'] = [(form_id, 'form')]
result['res_id'] = pick_ids[0]
return result
如果有人可以帮我解决这个问题。它如何验证系统可以接受订单中的多个产品?非常感谢你的帮助。
答案 0 :(得分:0)
我认为问题在于您使用self作为单例,并且由于该方法具有@ api.multi装饰器,因此它可以是一个列表。我认为,如果您的修改位于第一个for循环之下,那么如果您将代码更改为:
,则可能会有效...
if order.order_line.product_id.product_tmpl_id.type in 'product':
...
编辑:
当您在同一行中访问self.order_line时,也可能会引发异常。你做的就好像它是一个单独的元素,它也可以是一个列表。你应该遍历self.order_line列表:
...
for line in self.order_line:
if line.product_id.product_tmpl_id.type in 'product':
...