Wizard Form
Tampilan sebuah halaman pada OpenERP umumnya merupakan tampilan sebuah tabel atau sebuah record. Pencetakan laporan bergantung pada record yang sedang tampil ini, atau record yang dicentang. Situasi seperti ini menjadi tidak nyaman manakala kita ingin mencetak lebih dari 80 record dimana ini adalah nilai default record yang tampak. Untuk 80 record berikutnya perlu klik Next page, centang semua, klik lagi menu Cetak. Merepotkan.
Ya, kita membutuhkan sebuah form yang menawarkan filter khusus sesuai jenis laporan. Misalkan untuk kebutuhan "cetak komentar yang mengandung kata open". Pada filter Cari user memasukkan open
lalu klik tombol Cetak yang ada di bawahnya, maka tampillah PDF berisi baris-baris komentar yang mengandung kata open
, incase-senstive. Begitulah skenarionya. Dalam perbincangan OpenERP form ini disebut sebagai wizard.
Sebuah form adalah sebuah tabel, begitulah kebiasaannya. Hal yang sama juga dilakukan untuk membuat wizard, hanya saja tabelnya tidak disimpan di database, melainkan cukup di memori.
Jika Anda belum memiliki modul hello
, ikutilah dua tulisan sebelumnya, berturut-turut:
Kalau sudah, buatlah direktori addons/hello/wizard
, dan mulailah membuat addons/hello/wizard/comment.py
.
class wizard_comment(osv.osv_memory):
_name = 'hello.wizard_comment'
_columns = {
'comment': fields.char('Comment', size=160),
}
def default_get(self, cr, user, fields_list=None, context=None):
return {'comment': 'open'}
def print_report(self, cr, uid, ids, context={}):
res = self.read(cr, uid, ids, ['comment'], context=context)
res = res[0]
obj = self.pool.get('hello.comment')
ids = obj.search(cr, uid, [('comment', 'ilike', res['comment'])])
datas = {'ids': ids,
'form': res}
return {'datas': datas,
'report_name': 'komentar',
'type': 'ir.actions.report.xml'}
wizard_comment()
Perhatikan baris 18 pada 'report_name': 'komentar',
dimana komentar
sesuai file addons/hello/report/comment.py
pada baris 'report.komentar'
:
'addons/hello/report/hello.rml', parser=comment)
tapi tanpa awalan report
. Paham kan ?
Pastikan file ini dimuat sistem, yaitu dengan mendaftarkannya di addons/hello/wizard/__init__.py
:
Tentunya direktori addons/hello/wizard
tidak akan terpanggil bila kita belum mendaftarkannya di addons/hello/__init__.py
:
import report
import wizard
Selanjutnya urusan tampilan, yaitu dengan membuat addons/hello/wizard/menu.xml
:
res_model="hello.wizard_comment"
view_mode="form"
target="new"
key2="client_print_multi"/>
parent="menu_hello"
name="Print comments"
action="window_wizard_comment"/>
Daftarkan di addons/hello/__openerp__.py
di bagian init_xml
:
'init_xml' : [
'wizard/menu.xml',
....
Atau lengkapnya menjadi:
'name' : 'Hello world!',
'version' : '1.0',
'author' : 'OpenSIPKD',
'depends' : ['base'],
'init_xml' : [
'hello_view.xml',
'report/menu.xml',
'wizard/menu.xml'],
'application': True,
'description': 'A simple form to insert, edit, or delete your comments.'
}
Pembuatan file selesai. Kini lakukan langkah pembaharuan / upgrade modul hello
:
- Klik menu Settings, Modules.
- Masukkan
hello
pada Name untuk mencari modul ini. - Setelah ditemukan klik Hello world! untuk melihat rinciannya.
- Klik Upgrade.
- Setelah prosesnya selesai, klik Update.
- Akhiri dengan klik Start configuration, atau cukup klik Close, karena memang tidak ada yang perlu dikonfigurasi.
Saatnya untuk mencoba. Klik menu Hello, Print comments. Masukkan kata yang akan dicari, katakanlah open
, lalu klik Print untuk menampilkan PDF-nya.
Tampak PDF telah menampilkan record yang dimaksud, yaitu hanya menampilkan komentar yang mengandung kata open
. Sudah cukup ? Belum.
Laporan ini tidak ubahnya dengan laporan sebelumnya yang tidak menggunakan wizard form. Mengapa ? Karena ia memang menggunakan file RML yang sama, yaitu hello.rml
. Jadi bagaimana seharusnya ?
Selayaknya PDF yang dihasilkan wizard form memberikan keterangan seperti Daftar Komentar yang Mengandung Kata "open" dimana kata open diambil dari filter yang diisi user. Bagaimana menyertakannya ?
Kita membutuhkan sebuah file RML lagi, mirip hello.rml
, hanya ditambahkan beberapa kata seperti di atas. Salinlah addons/hello/report/hello.rml
menjadi addons/hello/report/cari_kata.rml
.
$ sudo cp addons/hello/report/hello.rml addons/hello/report/cari_kata.rml
Di cari_kata.rml
carilah baris ini:
dan ubah menjadi:
Selanjutnya daftarkan file tersebut di addons/hello/report/comment.py
dengan menambah baris berikut ini:
'addons/hello/report/cari_kata.rml', parser=comment, header=False)
Sehingga secara keseluruhan menjadi:
from report import report_sxw
class comment(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(comment, self).__init__(cr, uid, name, context)
self.localcontext.update({
'time': time,
})
report_sxw.report_sxw('report.komentar', 'hello.comment',
'addons/hello/report/hello.rml', parser=comment)
report_sxw.report_sxw('report.cari_kata', 'hello.comment',
'addons/hello/report/cari_kata.rml', parser=comment, header=False)
Kemudian pada addons/hello/wizard/comment.py
ganti baris:
menjadi:
sehingga secara keseluruhan menjadi:
class wizard_comment(osv.osv_memory):
_name = 'hello.wizard_comment'
_columns = {
'comment': fields.char('Comment', size=160),
}
def print_report(self, cr, uid, ids, context={}):
res = self.read(cr, uid, ids, ['comment'], context=context)
res = res[0]
obj = self.pool.get('hello.comment')
ids = obj.search(cr, uid, [('comment', 'ilike', res['comment'])])
datas = {'ids': ids,
'form': res}
return {'datas': datas,
'report_name': 'cari_kata',
'type': 'ir.actions.report.xml'}
wizard_comment()
Karena ada perubahan pada source Python, maka diperlukan restart daemon openerp
:
$ sudo /etc/init.d/openerp restart
Kemudian cobalah mencetak lagi, seharusnya PDF menjadi seperti ini:
Mudah bukan ?
Referensi: