再次按位置提供数量

时间:2018-06-22 09:49:34

标签: odoo-8 odoo odoo-9

我知道之前已经讨论过了,但这对我来说并不是真正的工作。我现在如何获取数量可用于位置或仓库的产品。

(大多数答案都在旧的API中,而这个答案对我来说并不是很有效)

class ProductProduct(models.Model):
    _inherit = 'product.template'

  available_qty = fields.Integer(
    string='Qty By Loc',
    compute='product_qty_location_check',
)


    def product_qty_location_check(self): 
        if self: 

            self.available_qty = self.with_context({'location' : self.source_location.id}).qty_‌​available 

AttributeError: 'product.template' object has no attribute 'source_location'

2 个答案:

答案 0 :(得分:2)

要按位置获取数量,您需要在 stock.quant

中用 product_id 搜索位置

在您的计算函数中使用以下示例:

quant_sr = self.env["stock.quant"].search([('location_id','=',self.source_location.id),('product_id','=',self.product_id.id)])
qty = 0.0
for quant in quant_sr:
    qty += quant.qty
print qty

答案 1 :(得分:0)

首先,您必须找出您的位置和/或仓库。有足够的可能性这样做:

  1. 使用具有字段的向导
  2. 通过参考进行搜索,例如self.env.ref('my_module.my_location')
  3. 使用其他来源

现在,您可以在product.product的{​​{1}}上使用它们。只需对一个或多个产品(记录集)调用该方法并评估该方法的结果。要筛选位置和/或仓库,请使用上下文。例如:

_product_available()

使用# get a recordset of all products products = self.env['product.product'].search([]) # get a special location (my_location) location = self.env.ref('my_module.my_location') quantities = products.with_context(location=location.id)._product_available() # print the quantities for product_id, quantity_dict in quantities.iteritems(): print product_id print quantity_dict 甚至ID或名称列表也可以做到这一点:with_context(warehouse=warehouse.id)with_context(location=[1,2,3])