OpenERP 5.0.16, 6.0.3, 6.04, dan 6.1 Technical Tutorial : Cara Menambahkan Data Dengan Menyertakan Context


Penulsi beberapa kali menemukan kondisi dimana penulis harus melakukan overloading terhadap method create ORM. Pada overloading tersebut ada method yang dijalankan apabila ada nilai context tertentu yang diberikan. Contoh sintaksnya :

def create(cr, uid, value, context={}):
    obj_partner = self.pool.get('res.partner')

    partner_id = super(res_partner, self).create(cr, uid, value, context)

    nilai = context.get('nilai', False)

    if nilai : self.lakukan_method(cr, uid, partner_id)

    return partner_id

Method di atas menginstruksikan bahwa method lakukan_method akan dijalankan ketika ada key ‘nilai’ dalam parametercontext yang diberikan ketika mengeksekusi method create.

Jika selanjutnya Penulis ingin menambahkan data demo (via xml) dan menyertakan context tersebut, maka sintaks xml nya adalah sebagai berikut :

<record context="{'nilai' : True}" id="some_id" model="res.partner">
    ...
    ...
</record>

Perhatikan context=”{‘nilai’ : True}”

OpenERP 5.0.16, 6.0.4, 6.0.3, dan 6.1 Technical Tutorial : Membuat Sequence


Berikut panduan pemrograman untuk membuat sequence pada OpenERP 5.0.16, 6.0.3, 6.0.4 dan 6.1. Mungkin sifatnya hanya algoritma pemrograman saja, codenya silahkan disesuaikan dengan kebiasaan pemrograman masing-masing.

#1 Dapatkan id dari sequence yang ingin digunakan

Contoh menggunakan method search:

obj_sequence = self.pool.get('ir.sequence')

kriteria = [] # contohnya [('name','=','Sale Order')] untuk sequence Sale Order
sequence_id = obj_sequence.search(cr, uid, kriteria)[0]

Continue reading

OpenERP 5.0.16, 6.0.3, 6.0.4 & 6.1 Technical Tutorial : Memperbaiki Relationship many2one


Ketika membuat sebuah field many2one di OpenERP, terkadang developer salah menuliskan ke object mana many2one tersebut direlasikan. Jika field tersebut sudah terbuat, developer tidak bisa serta-merta mengkoreksi file .py untuk membetulkan relasi tersebut.

CONTOH
class object_contoh(osv.osv):
    _columns = {
               'name' : fields.char(string='Nama', size=100),
               'partner_id' : fields.many2one(obj='account.account', string='Partner'),
               }

Relasi many2one pada baris ke-4 harusnya ke object res.partner

LANGKAH KOREKSI

Continue reading

OpenERP 5.0.16, 6.0.3, 6.0.4 & 6.1 Technical Review : Workflow Action paid account.invoice.basic


Penulis menemukan keganjilan pada workflow action paid milik account.invoice.basic. Paid logisnya menjadi akhir dari workflow, tapi entah kenapa pada OpenERP 5.0.16, 6.0.3, 6.0.4, dan 6.1 workflow action tersebut tidak menjadi akhir workflow (flow_stop == False). Lebih aneh lagi ternyata pada file account_invoice_workflow.xml pada awalnya workflow action tersebut seharusnya menjadi flow_stop, tapi entah kenapa akhirnya dijadikan comment (Lihat pada baris ke-4 kode dibawah)

<record id="act_paid" model="workflow.activity">
    <field name="wkf_id" ref="wkf"/>
    <field name="name">paid</field>
    <!--<field name="flow_stop">True</field>-->
    <field name="action">write({'state':'paid'})</field>
    <field name="kind">function</field>
    <field name="signal_send">subflow.paid</field>
</record>

Dengan kode seperti ini semua workflow instance dari account.invoice yang sudah dibayar masih dalam keadaan ‘active’. Strange …

OpenERP 6.0.3, 6.0.4, & 6.1 Technical Tutorial: Memperlakukan Field Binary Sebagai File


Field binary dalam OpenERP mampu menyimpan data yg bertipe binary. Namun untuk memperlakukan isi dari field tersebut seperti layaknya sebuah file diperlukan penanganan khusus. Sebagai contoh sebuah object yang bernama contoh mempunyai 1 field berjenis binary yang bernama field_binary1.

class contoh(osv.osv):
    _name = 'contoh'
    _description = 'contoh'
    _columns = {
               'field_binary1' : fields.binary('Field Binary 1'),
               }
contoh()

Untuk melakukan method readline misalnya, tidak bisa dilakukan dengan code seperti ini :

res_contoh = obj_contoh.browse(cr, uid, [1])[0]
res_contoh.field_binary1.readline()

Code diatas akan menimbulkan eksepsi. Setelah penulis melakukan percobaan, res_contoh.field_binary1 dideteksi sebagai tipe str, bukan file. Nah untuk memperlakukan field binary sebagai file yang harus dilakukan adalah sebagai berikut :

  1. import tools
  2. import base64
  3. from tempfile import TemporaryFile
  4. Buatlah sebuah variabel TemporaryFile dengan parameter +w
  5. Kemudian tulislah isi dari field binary ke variabel tsb. Gunakan base64.decodestring ketika menulis

Contoh code dapat dilihat dibawah :

Continue reading

OpenERP 5.016, 6.0.3, 6.0.4 & 6.1 Technical Tutorial : Mendapatkan id resource Berdasarkan xml_id dan model Dengan Method _get_id


Semua resource OpenERP yang dibuat dengan menggunakan xml pada sebuah modul akan disimpan di dalam object ir.model.data (tabel ir_model_data). Untuk mencari id dari resource tersebut tentu saja kita bisa menggunakan method search milik orm ataupun method execute milik cursor.

Sebagai alternatif pencarian id, object ir.model.data mempunyai method _get_id untuk mencari id sebuah resource dengan menggunakan xml_id dan nama modul.

Sebagai contoh coba liat data untuk object account.account.type pada modul akuntansi di bawah ini:

Continue reading