One2One

Bismillah …

Ada satu field yang semenjak v6 keatas sudah di hapus dan tidak digunakan lagi, yaitu field relasi one2one. Jika kita mencoba membuatnya pastilah akan error. OpenERP memberikan solusi ‘menggabungkannya’ dengan field many2one akan tetapi disini ada sedikit perbedaan. Jika fitur one2one adalah otomatis mengupdate tabel ‘tujuan’ ketika kita menginput dari tabel ‘sumber’ sedangkan hal itu tidak terjadi pada field many2one.

Solusi dari issue diatas adalah dengan membuat fitur onchange() yang fungsinya akan mengupdate tabel ‘tujuan’ sesuai dengan field relasi tabel ‘sumber’. Pada contoh dibawah saya akan gunakan object ‘hr.employee’ sebagai tabel ‘sumber’ dan object ‘res.partner’ sebagai tabel ‘tujuan’.

Langkah pertama kita buat field many2one pada masing-masing object baik ‘hr.employee’ maupun ‘res.partner’ seperti contoh dibawah ini :



class hr_employee(osv.osv):
    _inherit = 'hr.employee'
    _columns = {
        'partner_id': fields.many2one('res.partner','Partner'),
    }

    def onchange_partner_id(self, cr, uid, ids, partner, context=None):
        self.pool.get('res.partner').write(cr, uid, [partner], {'employee_id': ids[0]})
        return True
    
hr_employee()


class partner(osv.osv):
    _inherit = 'res.partner'
    _columns = {
                'employee_id': fields.many2one('hr.employee','Employee'),
    }
    
partner()


Pada contoh diatas, disamping kita membuat field many2one pada masing-masing object, kita juga membuat sebuah method untuk event onchange() yaitu onchange_partner_id(). Dalam OpenERP setiap method wajib mereturn sebuah nilai, jadi minimal kita harus mereturn nilai True (jika tidak lakukan hanya warning di log).

Inti dari method tersebut adalah untuk mengupdate field many2one yang berada di tabel ‘res.partner’. Sehingga update menjadi otomatis ketika user melakukan perubahan pada object ‘hr.employee’

Setelah selesai dengan file pythonnya, selanjutnya kita lanjutkan dengan menambahkan field many2one yang baru kita bikin ke tampilan form Employee dan Partner (Customer/Supplier) pada file xml.



		<record model="ir.ui.view" id="partner_form_view_one2one">
            <field name="name">res.partner.one2one</field>            
            <field name="model">res.partner</field>            
            <field name="inherit_id" ref="base.view_partner_form"/>
            <field name="arch" type="xml">
                <field name="email" position="after">
                	<field name="employee_id"/>
                </field>
            </field>		
		</record>
		
		<record model="ir.ui.view" id="hr_employee_form_view_one2one">
            <field name="name">hr.employee.one2one</field>            
            <field name="model">hr.employee</field>            
            <field name="inherit_id" ref="hr.view_employee_form"/>
            <field name="arch" type="xml">
                <field name="address_id" position="after">
                	<field name="partner_id" on_change="onchange_partner_id(partner_id)" />
                </field>
            </field>		
		</record>


Pada code diatas saya hanya menambahkan fitur onchange() pada object hr.employee saja, jika teman-teman ingin mencoba silahkan tambahkan juga pada object res.partner beserta methodnya.

Mudah-mudahan sharing yang sedikit ini bisa memberikan banyak manfaat. Selamat mencoba ….

2 thoughts on “One2One

Leave a comment