品目のプロパティに基づいて発注書をフィルタリングしようとしています。したがって、たとえば、product_type = 'X' の項目を持つすべての発注書を表示したいと考えています。
<record id="po_x" model="ir.actions.act_window">
<field name="name">X Purchase Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">purchase.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,graph,gantt</field>
<field name="domain">[('has_x_line','=',True)]</field>
<field name="context">{}</field>
</record>
product_type は、注文明細の継承バージョンに追加したカスタム フィールドです。
class purchase_order_custom(osv.osv):
_name = 'purchase.order'
_inherit = 'purchase.order'
def linehasproducttype(self, cr, uid, ids, name, arg, context=None):
cur_obj={}
cur_obj=self.browse(cr, uid, ids, context=context)
for line in cur_obj.order_line:
if line.product_type == 'X':
return True
return False
_columns={
'has_x_line': fields.function(linehasproducttype, string="Has X Line", type='boolean', context={'pt':'X'})
}
purchase_order_custom()
2 つの質問:
Q1. 上記のコードは機能しません。つまり、実際には希望どおりにフィルタリングされていません。何が間違っている可能性がありますか?
Q2. 私は多くの製品タイプを持っていますが、タイプごとに機能を作成する傾向はありません。私がやろうとしているように、何らかの方法で引数を渡したり、この目的のためにコンテキストを使用したりできますか? もしそうなら、コードでどのように使用しますか?
ありがとう
EDIT :次のコードも試してみましたが、うまくいきませんでした:
def linehasproducttype(self, cr, uid, ids, name, arg, context=None):
res = dict.fromkeys(ids, False)
for cur_obj in self.browse(cr, uid, ids, context=context):
res[cur_obj.id] = False
for line in cur_obj.order_line:
if line.product_type == 'X':
res[cur_obj.id] = True
return res