我知道之前已经讨论过了,但这对我来说并不是真正的工作。我现在如何获取数量可用于位置或仓库的产品。
(大多数答案都在旧的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'
答案 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)
首先,您必须找出您的位置和/或仓库。有足够的可能性这样做:
self.env.ref('my_module.my_location')
现在,您可以在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])