~ 最近在维护公司ERP的发货模块,代码里面有一个这样的问题:
客户订单里面买个3个产品,每个产品10个,但是一次扫描的时候有可能只扫描其中两个产品,每个产品数量不到10个,所以要求在销货的时候不能把所有的库存都释放掉,由于之前的程序员在写这个地方的时候没有考虑这么清楚,所以客户购买10个,即使只扫描了1个,到最后也是释放了10个,这直接导致的就是库存的不准确。
当我接手在做这个地方的时候,一个需要去面对的问题就是在不能修改之前代码的基础上添加新的函数来处理这样一个部分销货的问题(其实这种还算是比较普遍的情况)。这个地方的代码逻辑是:
1.创建扫描记录
2.创建赠品
3.做库存释放
之前的逻辑是,在生成扫描记录的时候,同时把扫描数量回写到发货明细里面的扫描数量中,然后就是通过sql匹配,找到库存表(stock_move)里面此条扫描记录对应的库存明细id,
select stock_move_id from stock_seeed_delivery s,stock_seeed_delivery_line sl,account_seeed_project a,account_seeed_project_line al
where s.id=sl.delivery_id and a.id=al.project_id and al.stock_move_id is not null
and sl.sale_order_no=al.code and sl.sale_order_type||’-‘||sl.sale_order_code=a.name and s.id=%s
“”“%(str(delivery_entity.id).replace(‘L’,”))
然后调用move_obj.action_done(cr