如何解决在odoo中的销售订单行中具有库存数量的产品过滤器
class sale_product_filter(models.Model):
_inherit= "sale.order.line"
def _get_custom_domain(self):
return [('categ_id.branch_id','=',self.env.user.branch_id.id)]
product_id = fields.Many2one(domain= lambda self: self._get_custom_domain())
<record id="sale_order_form_inherit" model="ir.ui.view">
<field name="name">sale.order.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
<attribute name="domain"/>
</xpath>
</field>
</record>
<record id="rent_order_form_inherit" model="ir.ui.view">
<field name="name">sale.order.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale_renting.rental_order_primary_form_view"/>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
<attribute name="domain"/>
</xpath>
</field>
</record>
我想在销售订单行中过滤产品。当前的登录用户拥有自己的仓库,其中包含许多产品。我为许多用户提供了许多仓库。因此,我只想在销售订单行中显示登录用户的仓库产品。
该怎么办?每个用户都有分支字段,仓库有分支字段。在销售订单行中添加产品时,我只想显示与当前用户的分支和产品数量相同的仓库中的产品仓库中的大于0。
解决方法
将默认product_id
域替换为计算域以包括当前用户分支。
以下示例定义了一个计算域,用于过滤产品并仅显示与当前用户位于同一分支中的产品。
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
def _get_custom_domain(self):
return [('categ_id.branch_id','=',self.env.user.branch_id.id)]
product_id = fields.Many2one(domain=lambda self: self._get_custom_domain())
继承表单视图并替换product_id
域:
<record id="view_order_form" model="ir.ui.view">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='product_id']" position="attributes">
<attribute name="domain"/>
</xpath>
</field>
</record>
您可以通过在上下文中指定仓库来计算特定仓库中的产品可用数量:
product_obj.with_context(warehouse=warehouse_id.id).browse(product_id).qty_available
使用quantity > 0
搜索产品,然后在域中使用id
字段:
[('id','in',filtered_product_ids)]
示例:
def _get_custom_domain(self):
warehouse_id = self.env['stock.warehouse'].search([('branch_id',self.env.user.branch_id.id)])
product_ids = self.env['product.product'].with_context(warehouse=warehouse_id.ids).search([]).filtered(lambda p:p.qty_available > 0)
return [('id',product_ids.ids)]
编辑:通过操作自定义域
尝试向操作上下文添加其他域参数:
'additional_domain': [('sale_ok',True)
然后将其添加到计算域中(如果在操作上下文中可用):
return [('id',product_ids.ids)] + self.env.context.get('additional_domain',[])
编辑:继承引用操作以更改上下文
<record id="sale.action_quotations_with_onboarding" model="ir.actions.act_window">
<field name="context">{'search_default_my_quotation': 1,'additional_domain': [('sale_ok',True)]}</field>
</record>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。