2013-03-25 24 views
5

我有一個選擇區域(多對一的分區域) 如果我選擇一個分區需要在「筆記本區域」加載其員工。 如何在openerp 7中實現這個?如何在onchange事件中加載一個到多個孩子?

,如果我選擇了相關產業的ID,然後需要加載相關divisions.if師選擇則需要在以下階段

<record model="ir.ui.view" id="bpl_work_offer_form"> 
<field name="name">bpl.work.offer.form</field> 
<field name="model">bpl.work.offer</field> 
<field name="arch" type="xml"> 
<form string='bpl_work_offer' version='7.0'> 
<sheet> 

<group> 
    <group> 
     <field name='bpl_estate_id' /> 
     <field name='bpl_division_id' /> 
     <field name='user_id' /> 
    </group> 
    <group> 
     <field name='date_of_offer' /> 
     <field name='payment_type' /> 
     <field name='select_by' /> 
     <field name='no_of_workers' attrs="{'invisible':[('select_by','=','by_name')]}" /> 
     <field name='work_type' /> 

    </group> 
</group> 
<div name="Worker Selection"></div> 
<separator string='Select workers' /> 
<notebook attrs="{'invisible':[('select_by','=','by_count')]}"> 
    <page string="Tea Workers" attrs="{'readonly':[('work_type','!=','tea')]}"> 
     <field name='selected_tea_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
    <page string="Rubber Workers" attrs="{'readonly':[('work_type','!=','rubber')]}"> 
     <field name='selected_rubber_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
    <page string="Sundry Workers" attrs="{'readonly':[('work_type','!=','sundry')]}"> 
     <field name='selected_sundry_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
</notebook> 
</sheet> 
</form> 
</field> 
</record> 

<record model="ir.actions.act_window" id="bpl_work_offer_action"> 
<field name="name">bpl.work.offer.action</field> 
<field name="res_model">bpl.work.offer</field> 
<field name="view_type">form</field> 
<field name="view_mode">form</field> 
</record> 

型號代碼

class company_new_registration(osv.osv): 
    _name = "bpl.company.n.registration" 
    _description = "Company" 
    _columns = { 
       'name': fields.char('Company Name', size=128, required=True), 
       'estates': fields.one2many('bpl.estate.n.registration', 'company_id', 'Estate')           
    } 
# Bill of Material 
company_new_registration() 

class estate_new_registration(osv.osv): 
    _name = "bpl.estate.n.registration" 
    _description = "Estates" 
    _columns = { 
     'name': fields.char('Estate Name', size=128, required=True), 
     'company_id': fields.many2one('bpl.company.n.registration', 'Company Name', select=True), 
     'divisions': fields.one2many('bpl.division.n.registration', 'estate_id', 'Division') 
    } 

estate_new_registration() 

class division_new_registration(osv.osv): 
    _name = "bpl.division.n.registration" 
    _description = "Divisions" 
    _columns = { 
     'name': fields.char('Division Name', size=128, required=True), 
     'estate_id': fields.many2one('bpl.estate.n.registration', 'Estate Name', select=True), 
    } 

division_new_registration() 

,需要用於映射到加載相關的工人該工作提供(種植項目)

class bpl_work_offer(osv.osv): 
    _name = "bpl.work.offer" 
    _description = "BPL Work Offer" 
    _columns = { 
     'user_id': fields.many2one('res.users', 'User Name'), 
     'date_of_offer': fields.date('Date'), 
     'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate'), 
     'bpl_division_id':fields.many2one('bpl.division.n.registration', 'Division', help='Division'), 
     'payment_type': fields.selection([('normal_work', 'Normal Work'), ('cash_work', 'Cash Work')], 'Payment Type'), 
     'select_by': fields.selection([('by_name', 'By Names'), ('by_count', 'By Count')], 'Select By'), 
     'no_of_workers': fields.integer('No of Workers'), 
     'work_type': fields.selection([('tea', 'Tea'), ('rubber', 'Rubber'), ('sundry', 'Sundry')], 'Work Type'), 
     'total_workers': fields.integer('Total Workers'), 
     'selected_tea_workers_line_ids': fields.one2many('bpl.selected.tea.workers.line', 'worker_id', 'Tea Workers', ondelete="cascade"), 
     'selected_rubber_workers_line_ids': fields.one2many('bpl.selected.rubber.workers.line', 'worker_id', 'Rubber Workers', ondelete="cascade"), 
     'selected_sundry_workers_line_ids': fields.one2many('bpl.selected.sundry.workers.line', 'worker_id', 'Sundry Workers', ondelete="cascade"), 
    } 

bpl_work_offer() 

class selected_tea_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.tea.workers.line' 
    _description = 'BPL Selected Tea Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Tea Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_tea_workers_line_ids() 

class selected_rubber_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.rubber.workers.line' 
    _description = 'BPL Selected Rubber Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Rubber Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_rubber_workers_line_ids() 

class selected_sundry_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.sundry.workers.line' 
    _description = 'BPL Selected Sundry Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Sundry Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_sundry_workers_line_ids() 
+0

請告訴我們你寫的,所以我們可以幫助您 – furins 2013-03-25 06:18:05

+0

@furins 代碼added.shall我的郵件我的整個模塊,你如果u想要的代碼? 現在添加的模型代碼 – 2013-03-25 06:26:22

+0

謝謝@AnneMary的代碼片段,關於向我發送代碼:不,謝謝,因爲它不會被其他用戶訪問,所以沒有人會從您的答案中學習。請使用github,bitbucket,gist或者其他任何類似的服務來公開部分代碼,或者試着總結一下,只是必要的部分 – furins 2013-03-25 06:31:49

回答

1

使用(1, ID, { values })更新one2many值

def on_change(self,cr,uid,ids,ur_field,context=None): 
    if context is None: 
     context = {} 
    value_list = val = [] 
    if ur_field: 
     ur_conditions here 
     value_list = (1,ID,{Values}) 
     val = {'one2manyfield':value_list} 
    if not ur_field: 
     val = {'one2manyfield':False} 
    return {'val':val} 
2

您可以使用下面的示例來創建onchange函數。這是一個onchange函數我爲發票創建(只是一個例子)

def onchange_partner_id(self, cr, uid, ids, type, partner_id,\ 
     date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False): 
    res = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id, 
      date_invoice=date_invoice, payment_term=payment_term, partner_bank_id=partner_bank_id, 
      company_id=company_id) 

    invoice_lines = [] 
    product_ids = self.pool.get('product.product').search(cr, uid, [],limit=5) 
    for p in self.pool.get('product.product').browse(cr, uid, product_ids): 
     invoice_lines.append((0,0,{'product_id':p.id,'name':p.name, 
          'account_id':p.categ_id.property_account_income_categ.id, 
          }))#this dict contain keys which are fields of one2many field 
    res['value']['invoice_line']=invoice_lines 
    return res 

如果只有一行被添加然後 RES [「值」]更新({ 「one2many_fieldmname」:[( 0,0,{'field1':value1,'field2':value2,'fieldn':valuen})]

在上面的例子中,我搜索了5個產品,因此,在您的onchange功能中,您還必須搜索隸屬於部門的員工。

在你的代碼,其形式爲「bpl_work_offer_form」你有在外地bpl_division_id加平變化的功能。(在我的例子PARTNER_ID是many2one場和invoice_line是one2many場。)

您需要更多使用onchange加載one2many字段時要小心。在onchange函數中,您必須首先取消加載您的many2one字段中的所有記錄的鏈接。因爲如果記錄一旦保存,那麼如果onchange再次被加載,則會創建一個新行。所以你需要正確管理它。

參考:http://doc.openerp.com/trunk/developers/server/06_misc_on_change_tips/

+0

嗨,Anom,你可以調整你的答案Anne Mary的問題,並提供一些文件鏈接?謝謝 – furins 2013-04-01 12:51:50

+0

我提供了一個正確的例子。安妮瑪麗可以測試它,並且很少修改安妮瑪麗可以簡單地實現這一點。 – OmaL 2013-04-01 13:08:02

+0

讓我們等待安妮瑪麗接受。在這個問題中,有兩個級聯的一對多關係,所以這個例子只是部分相關的,這就是爲什麼我要求更詳細的答案。爲了給未來的讀者提供幫助,我不僅安妮瑪麗,而且還爲了向未來的讀者提供幫助,所以如果你解釋如何修改你的剪貼代碼並且提供了文檔的參考資料,那將是很好的。 – furins 2013-04-01 15:30:41

相關問題