库存数量计算相关代码分析 - xiaohao0576/odoo-doc GitHub Wiki

产品库存数量计算方法

_compute_quantities_dict方法负责计算产品的库存数量,查看源码

这个方法的定义和参数列表如下

def _compute_quantities_dict(self, lot_id, owner_id, package_id, from_date=False, to_date=False)

方法计算后,同时更新以下几个字段的数据

qty_available
free_qty
incoming_qty
outgoing_qty
virtual_available

更新quant数量

_update_available_quantity方法用于直接增加或者减少Quant的quantityreserved quantity查看源码

在stock.move.line中同步stock.quant数量

_synchronize_quant方法用于在stock.move.line中同步quant的数量,主要也是调用Quant的_update_available_quantity方法,查看源码

使用方法实例

# 1. 完成库存移动时
move_line._synchronize_quant(-quantity, source_location)      # 减少源库位数量
move_line._synchronize_quant(quantity, destination_location)  # 增加目标库位数量

# 2. 预留库存时
move_line._synchronize_quant(quantity, location, action="reserved")

查找采购/销售订单行对应的stock.move

在源码中搜索def _get_outgoing_incoming_moves可以找到相关逻辑

销售订单行对应的库存移动,查看源码

采购订单行对应的库存移动,查看源码

统计产品的入库和出库次数

_compute_nbr_moves方法,用于计算产品的入库次数和出库次数,更新product.product的nbr_moves_innbr_moves_out字段,查看源码

计算采购订单行已收货数量

_compute_qty_received用于计算采购订单行的已收货数量,根据qty_received_method的值不同,采用不同的计算逻辑,对于实物库存,qty_received_method=stock_moves, 计算逻辑的源码点击查看

计算销售订单行已发货数量

_compute_qty_delivered用于计算采购订单行的已发货数量,根据qty_delivered_method的值不同,采用不同的计算逻辑,对于实物库存,qty_delivered_method=stock_moves, 计算逻辑的源码查看源码

由于销售的类型有很多种,比如租赁、订阅,每种销售类型都实现了自己的_compute_qty_delivered方法去计算已交货的数量