【Odoo】产品共享库存逻辑优化

上海序说科技,专注于基于Odoo项目实施,实现企业数智化,助力企业成长。
老韩头的开发日常,博客园分享(2022年前博文)

背景

客户在对接第三方的电商平台的时候,存在Odoo系统中配置的属性与第三方电商平台配置的产品属性不一致的情况。比如,我们在Odoo中某产品有4个属性,而电商平台只有其中的三个属性。

因此在该平台销售出去产品的时候,我们是没有办法直接匹配到目标产品的(除非单独建一个三个属性的产品)。

需求

希望在电商平台销售出去这类产品的时候,可以按照一定的规则匹配到其中的任意一台。这里的规则可以是库存最少的、距离客户位置距离最新的等等。

实现

为产品添加一个“共享库存产品”的字段,并为这类产品配置需要共享的产品对象。这里的字段是many2many类型。原因有二,①可避免在核心对象(product.product)新增字段;②可能存在多个产品相互共享的情况。

此处需要强调的是,在获取目标产品的时候,需判断当前库位是否可满足本次销售的数量要求。

if o_product.shared_product_ids:
    product_ids = o_product.shared_product_ids.ids
    product_ids.append(o_product.id)
    prodcut_stock_quants = STOCK_QUANT.search([('product_id','in',product_ids),('location_id','=',location_src_id.id)]).filtered(lambda quant:quant.quantity - quant.reserved_quantity>=demand_count)
    if prodcut_stock_quants:
        prodcut_stock_quants = sorted(prodcut_stock_quants, key=lambda quant: quant.quantity - quant.reserved_quantity)
        o_product = prodcut_stock_quants[0].product_id
        return o_product

热门相关:最强狂兵