Module OpenERP – Customize Fields

Pada artikel sebelumnya kita selalu membuat modul dengan object & menu tersendiri. Sedangkan kenyataanya -proses development- kita pasti harus mengcustomize suatu tampilan default dari OpenERP. Oleh karna itu pada kesempatan kali ini saya ingin berbagi info tentang cara mengcustomize sebuah object default dari OpenERP.

Module ini adalah modul yang pertama kali saya buat yang berfungsi untuk menambahkan field npwp pada form customer / supplier yaitu object res.partner.

Pertama yang kita lakukan seperti biasanya dalam membuat modul openerp adalah membuat folder dengan mengiisinya dengan 2 file inti, yaitu __init__.py dan __openerp__.py seperti dibawah ini :

ad_npwp_partner/
…. __init__.py
…. __openerp__.py

Karna kita ingin mengcustomize suatu object default OpenERP, maka pada file __openerp__.py kita harus mengisi key ‘depends’: [‘base’] karna object res.partner berada pada module “base” dan key ‘update_xml’: [‘partner_view.xml’] kemudian pada file __init__.py kita isi dengan code ‘import npwp’

Lalu kita tambah dengan satu file python yang saya beri nama npwp.py yang isinya :

from osv import osv, fields

class partner(osv.osv):
    _inherit = 'res.partner'
    _columns = {'npwp' : fields.char('No. NPWP', size=20, help='Misal 01.540.674.7.431-000')}

partner()

Arti dari code diatas adalah kita menginherit object res.partner (menu customer/supplier) yang akan kita tambah kolom baru bernama ‘npwp’

Setelah file python maka kita buat file xml untuk interfacenya yang bernama partner_view.xml, dengan isinya sebagai berikut :

<record model="ir.ui.view" id="partner_npwp_form_view">
    <field name="name">partner.npwp</field>            
    <field name="model">res.partner</field>            
    <field name="type">form</field>							
    <field name="inherit_id" ref="base.view_partner_form"/>
    <field name="arch" type="xml">
        <field name="email" position="after">
            <field name="npwp"/>
        </field>
    </field>
</record>

Artinya kita menginherit object res.partner dengan menyisipkan kolom yang baru kita buat yaitu ‘npwp’ yang akan muncul pada form customer/supplier setelah field ’email’

<field name="inherit_id" ref="base.view_partner_form"/>

Arti dari baris diatas adalah kita menginherit tampilan form customer/supplier yang terdapat pada module ‘base’ dan berada pada tampilan xml dengan id ‘view_partner_form’. Atau ref=”nama_modul_object_terkait.id_view_object_terkait’

Setelah modul selesai kita buat maka kita copy ke path folder addons kita, lalu pada OpenERP masuk ke submenu ‘Update Modules List’ pada menu ‘Settings’ kemudian masuk ke submenu ‘Installed Modules’ , lalu pilih module ad_npwp_partner dan klik Install

Mungkin jika hanya menambah beberapa field cukup sederhana seperti cara saya diatas, untuk itu tidak ada salahnya jika kita coba tambah dengan mengisi method dari event onchange kolom npwp tersebut.

Hal pertama kali yang kita lakukan adalah merubah xml tersebut pada baris :

<field name="npwp"/>

menjadi

 
<field name="npwp" on_change="format_npwp(npwp)"/>

Kemudian pada file npwp.py kita tambah method format_npwp() menjadi :

 

class partner(osv.osv):
    _inherit = 'res.partner'
    _columns = {'npwp' : fields.char('No. NPWP', size=20, help='Misal 01.540.674.7.431-000')}

    def format_npwp(self, cr, uid, ids, npwp):
        # Memastikan User Menginput NPWP
        if npwp:

        # Mendefiniskan variabel result & warning
            result = ''
            warning = {"title": ("NPWP Number Format Incorrect!"), "message": ("Masukan 15 digit NPWP tanpa tanda baca")}

            # Memeriksa jumlah karakter yang diinput berjumlah 15 angka
            # Jika tidak sesuai lemparkan warning error
            if len(npwp) != 15 :
                return {'warning': warning, 'value': {'npwp': result}}

            # Memeriksa karakter yang diinput haruslah angka/number
            # Jika tidak sesuai lemparkan warning error
            elif not npwp.isdigit():
                return {'warning': warning, 'value': {'npwp': result}}

            # Jika semua persayaratan telah benar, maka kita tambahkan separator npwp
            # Kita lemparkan format npwp yang sesuai
            else:
                result = npwp[:2] + '.' + npwp[2:5] + '.' + npwp[5:8] + '.' + npwp[8] + '.' + npwp[9:12] + '-' + npwp[-3:] 
                return {'value': {'npwp': result}}
        return True

partner()

Arti dari perubahan itu adalah pertama kita menambahkan event onchange pada field npwp untuk memberikan action interaktif agar user memasukan format npwp yang kita inginkan, lalu kita olah hasil inputan/parameter yang user lakukan dengan python code diatas.

Selamat mencoba dan semoga bermanfaat …

Advertisements

9 thoughts on “Module OpenERP – Customize Fields

    • Di windows tidak bisa mas, silahkan untuk mengcopy modul tutorial yang sudah dibuat ke path addonsnya pada instalasi openerp server di windows anda. Tapi untuk ‘real’ server sebaiknya gunakan ubuntu …

  1. Assalamu ‘alaikum warohmatulohhi wabarokatuh. Pak Aziz. Seting workspace Eclipse di /opt/openerp/ atau copy folder /opt/openerp ke workspace Eclipse? Terimakasih.

  2. Pak Aziz,
    Jika kita ingin menginherit suatu objecy yang tidak ada namenya gimana ya contohnya pada file addons > account > report > account_financial report.py.
    didlamnya ada object yang tidak di beri nama

    class report_account_common(report_sxw.rml_parse, common_report_header):

    itu cara untuk menginheritnya supaya bisa saya panggil dan debug fungsi” nya gimana ya, mohon infonya

    tks,

  3. Assalamualaikum Pak, sy baru belajar odoo. mulai dengan mencoba customize dengan modul. pertanyaan saya tentang tutorial bapak ini, apakah perubahan tampilan field yang baru ditambahkan bisa hanya berpengaruh pada form view customer tanpa mempengaruhi form view supplier. karena setau saya memang res.partner yang dijadikan inherit nya. terimakasih atas tanggapanya.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s