所有产品的Odoo按订单配置

时间:2015-07-24 13:24:03

标签: odoo

我正在研究Odoo 8.0我的销售和订购系统配置了5473种产品。我还配置了供应商,并将它们与相应的产品相关联。我已经确认供应商已输入地址字段,我们几乎准备好了。

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

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

1 个答案:

答案 0 :(得分: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