首页 文章

Odoo按订单配置所有产品

提问于
浏览
0

我正在开发Odoo 8.0我的销售和订购系统配置了5473个产品 . 我还配置了供应商,并将它们与相应的产品相关联 . 我已经验证供应商已输入地址字段,我们几乎准备好了 .

但是为了启用RFQ(报价请求)的自动采购,我发现在采购标签下的任何产品上都有route_ids . 一个是买,一个是按订单 生产环境 . 有人告诉我,为了让RFQ自动启动,需要启用“购买和按订单 生产环境 ”复选框 .

我已经浏览了模型,字段和数据库,似乎无法找到设置这些复选框的表 . 谁能帮我解决哪些表可以转储和修改然后重新导入以自动设置两个复选框字段?

1 回答

  • 0

    为了快速找到这样的东西,Odoo有一个“技巧”:如果你点击用户名和“关于Odoo”的右上角,你可以点击“激活开发者模式” . 现在,当您转到产品视图时,单击“编辑”,将鼠标悬停在字段标签上,它将显示有关该字段的信息 .

    在这种情况下,将鼠标悬停在“路径”上会告诉我们这是一个名为“route_ids”的“many2many”字段,它将“product.product”对象与“stock_location_route”相关联 .

    通常,相应的数据库表将被称为"stock_location_route_product_rel",但在这种情况下,我们并不那么幸运 . 但是Odoo source code (addons/stock/product.py)给了我们这种关系的定义:

    'route_ids': fields.many2many('stock.location.route', 'stock_route_product', 'product_id', 'route_id', 'Routes', domain="[('product_selectable', '=', True)]",
                                    help="Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."),
    

    这告诉我们表名是“stock_route_product” .

    以下查询将为您提供在某个产品子集上设置的复选框,

    select pt.name, slr.name
    from stock_route_product srp
    inner join product_template pt on srp.product_id = pt.id
    inner join stock_location_route slr on srp.route_id = slr.id
    where pt.name like '%keyword%'
    and slr.name in ('Make To Order', 'Buy');
    

    或者对于所有产品,

    select pt.name, slr.name
    from stock_route_product srp
    inner join product_template pt on srp.product_id = pt.id
    inner join stock_location_route slr on srp.route_id = slr.id
    where slr.name in ('Make To Order', 'Buy');
    

    实际上,以下查询更具洞察力,在这里您将看到缺少的检查显示为NULL,

    select pt_id, slr_id, srp.route_id, srp.product_id
    from (
      select pt.id as pt_id, slr.id as slr_id
      from stock_location_route slr, product_template pt
      where slr.name in ('Make To Order', 'Buy')
    ) q
    left join stock_route_product srp 
      on srp.route_id = q.slr_id 
      and srp.product_id = q.pt_id
    

    现在,这是您需要在stock_route_product中插入的缺失记录列表(使用INSERT或导入/导出):

    select pt_id, slr_id
    from (
      select pt.id as pt_id, slr.id as slr_id
      from stock_location_route slr, product_template pt
      where slr.name in ('Make To Order', 'Buy')
    ) q
    left join stock_route_product srp
      on srp.route_id = q.slr_id
      and srp.product_id = q.pt_id
    where srp.route_id is null
    

相关问题