2017-12-20 11 views
4

私はこのような外部ソースからデータを引っ張っています:Odoo 10ゴー

from odoo import models,fields,api 
import datetime 
import requests 
import logging 
_logger = logging.getLogger(__name__) 
class purchase_order(models.Model): 

_inherit = "purchase.order" 


@api.model 
def getOrdersTechData(self): 

    getServer = 'someapi.xxx' 

    get_response = requests.get(url=getServer).json() 
    partner_id = get_response['partner_id'] 
    name = get_response['name'] 
    product_id = get_response['product_id'] 
    ... 

    self.createBestelAanvraag(partner_id,name,product_id,product_qty,product_uom,price_unit,date_planned) 


@api.multi 
def createBestelAanvraag(self,partner_id,name,product_id,product_qty,product_uom,price_unit,date_planned): 
    _logger.debug("name:") 
    _logger.debug(name) 
    self.PurchaseOrder = self.env['purchase.order'] 
    po_vals = { 
     'partner_id': partner_id, 
     'order_line': [ 
      (0, 0, { 
       'name': name, 
       ... 
      }), 
      ], 
    } 


    self.po = self.PurchaseOrder.create(po_vals) 

私はこのようなホーム画面上のメニュー項目からこれをinitatiate:

<?xml version="1.0" encoding="utf-8"?> 

<odoo> 
    <data> 
     <record id="action_make_testing" model="ir.actions.server"> 
      <field name="name">My Action</field> 
      <field name="model_id" ref="model_purchase_order"/> 
      <field name="code">env['purchase.order'].getOrdersTechData() 
      </field> 
     </record> 

     <menuitem name="Fetch Data" action="action_make_testing" 
       id="sale_order_custom_document" sequence="20"/>  
    </data> 
</odoo> 

しかし、注文が作成された後、空白の表示が表示され、GUIから購入する必要があります。代わりに、私はすぐに新しいものを含むすべての注文と購入リストのビューを表示したいと思います。

+0

私の解決策を試しましたか?私はv8で数日前に同様の問題を抱えていました。 – forvas

答えて

2

コード内のいくつかの部分を修正しました。あなたは、ツリービューを開くにはPythonから別のアクションを返す必要があります。

Pythonコード

@api.model 
def getOrdersTechData(self): 
    getServer = 'someapi.xxx' 
    get_response = requests.get(url=getServer).json() 
    partner_id = get_response['partner_id'] 
    name = get_response['name'] 
    product_id = get_response['product_id'] 
    ... 
    po = self.createBestelAanvraag(partner_id,name,product_id,product_qty,product_uom 
    res = { 
     'view_type': 'form', 
     'view_mode': 'tree', 
     'res_model': 'purchase.order', 
     'type': 'ir.actions.act_window', 
     'target': 'current', 
    } 
    return res 

@api.model 
def createBestelAanvraag(self, partner_id, name, product_id, product_qty, 
         product_uom, price_unit, date_planned): 
    po_vals = { 
     'partner_id': partner_id, 
     'order_line': [ 
      (0, 0, { 
       'name': name, 
       ... 
      }), 
     ], 
    } 
    return self.env['purchase.order'].create(po_vals) 

XMLコード

<record id="action_make_testing" model="ir.actions.server"> 
    <field name="name">My Action</field> 
    <field name="condition">True</field> 
    <field name="type">ir.actions.server</field> 
    <field name="model_id" ref="model_purchase_order"/> 
    <field name="state">code</field> 
    <field name="code">env['purchase.order'].getOrdersTechData()</field> 
</record> 

NOTE 1

If you see the purchase tree view but your purchase order is not there yet, add auto_refresh parameter to the res value:

res = { 
    'view_type': 'form', 
    'view_mode': 'tree', 
    'res_model': 'purchase.order', 
    'type': 'ir.actions.act_window', 
    'target': 'current', 
    'auto_refresh': 1, 
} 
return res 

NOTE 2

If instead of the tree view of purchase order you wanted to see the purchase order you have just created, change the res variable this way (in the above Python code I wrote you):

res = { 
    'view_type': 'form', 
    'view_mode': 'form', 
    'res_model': 'purchase.order', 
    'res_id': po.id, 
    'type': 'ir.actions.act_window', 
    'target': 'current', 
} 
return res 
3

購入のための処置を返すことができます。

これを試してみてください:

action = self.env.ref('purchase.purchase_rfq').read()[0] 
action.update({'domain': [('id', '=', self.po.id)], 'res_id': self.po.id}) 
return action 

これは、購入の景色を開き、発注書が表示されます。

+0

エラー:リストオブジェクトに属性の更新がありません – logistef

+0

エンタープライズエディションを使用していますが、更新機能が利用できない可能性がありますか?私はaction = self.env.ref( 'purchase.orders')を呼び出してみました。read()でも同じエラーが返されます – logistef

+0

私は自分の答えを更新しました。 'self.env.ref( 'purchase.purchase_rfq')。read()[0]' –