Report pada OpenERP biasanya dalam bentuk PDF. Ini artinya dokumen dicetak printer dengan graphic mode. Namun graphic mode printing memiliki beberapa kelemahan pada printer dotmatrix.
Kelemahannya antara lain:
Untuk mengatasi hal ini kita akan buat Laporan Penjualan dapat dicetak dengan text mode printing.
Sebelum masuk ke sesi OpenERP, lakukanlah beberapa persiapan berikut ini:
$ sudo su # apt-get install python-mako
# ls -l /dev/lp0 crw-rw---- 1 root lp 6, 0 2010-01-04 08:43 /dev/lp0 # adduser openerp lp
# su - openerp $ cat /etc/hosts > /dev/lp0
Namun jika Anda belum memiliki printernya, Anda bisa simpan nanti dalam sebuah file sebagai gantinya.
Selanjutnya ke sesi OpenERP. Mulailah dengan membuat template dengan hasil akhirnya seperti ini:
Sales Order Nomor : F0000061 Tanggal : 2010-01-06 Pelanggan: R. GANJAR SUWARGANI ------------------------------------------------------------------------- No. Nama Jumlah Harga Disc Subtotal ------------------------------------------------------------------------- 1 [ME581047] SWITCH 1 207.000,00 0.0 207.000,00 2 [MF660035] PACKING 1 4.100,00 0.0 4.100,00 3 [MF660068] GASKET, CYLINDE 1 5.300,00 0.0 5.300,00 4 [MH037794] PLUG 1 27.500,00 0.0 27.500,00 5 [MS820044] BULB 12V-21W 1 5.400,00 0.0 5.400,00 6 [MS820079] BULB STOP LAMP 1 57.500,00 0.0 57.500,00 7 [TK000013] SEAL TIPE 1 2.000,00 0.0 2.000,00 ------------------------------------------------------------------------- TOTAL 308.800,00
Buatlah /usr/lib/openerp-server/addons/sale/wizard/order.txt sebagai headernya:
Sales Order Nomor : ${id} Tanggal : ${tgl} Pelanggan: ${pelanggan} ${'-'*73} No. ${'Nama'.ljust(30)} Jumlah ${'Harga'.rjust(12)} ${'Disc'.rjust(5)} ${'Subtotal'.rjust(12)} ${'-'*73} ${rows}${'-'*73} ${' '*55}TOTAL ${total.rjust(12)}
Lanjutkan dengan /usr/lib/openerp-server/addons/sale/wizard/order_line.txt untuk daftar barang yang dijual:
${no.rjust(3)} ${prod.ljust(30)[:30]} ${jml.rjust(6)} ${hrg.rjust(12)} ${disc.rjust(5)} ${subt.rjust(12)}
Kemudian ini script utamanya, file /usr/lib/openerp-server/addons/sale/wizard/wizard_cetak.py:
import wizard import pooler from mako.template import Template from mako.lookup import TemplateLookup import time import os import locale locale.setlocale(locale.LC_ALL, 'id_ID.UTF-8') tpl_lookup = TemplateLookup(directories=['/usr/lib/openerp-server/addons/sale/wizard']) def money(n): return locale.format('%.2f', n, True) cetak_form = '''<?xml version="1.0"?> <form string="Cetak ke printer dotmatrix"> <field name="teks" /> </form>''' cetak_fields = { 'teks' : {'type' : 'text', 'default': 'Pencetakan sedang berlangsung.', 'readonly': True }, } class sale_cetak(wizard.interface): def cetak(self, cr, uid, data, context): obj = pooler.get_pool(cr.dbname).get('sale.order') order = obj.browse(cr, uid, data['id']) print order.name, order.date_order, order.partner_id.name, order.amount_total no = 0 rows = [] tpl_line = tpl_lookup.get_template('order_line.txt') for line in order.order_line: no += 1 s = tpl_line.render(no=str(no), prod=line.name, jml=str(int(line.product_uom_qty)), hrg=money(line.price_unit), disc=str(line.discount), subt=money(line.price_subtotal), ) rows.append(s) tpl = tpl_lookup.get_template('order.txt') s = tpl.render(id=order.name, tgl=order.date_order, pelanggan=order.partner_id.name, rows=''.join(rows), total=money(order.amount_total).rjust(12), ) filename = '/dev/lp0' # filename = '/tmp/%s.txt' % uid f = open(filename,'w') f.write(s) f.close() return {} states = { 'init': { 'actions': [cetak], 'result': {'type':'form', 'arch':cetak_form, 'fields': cetak_fields, 'state':[] } }, } sale_cetak('sale.cetak')
Lalu daftarkan di file /usr/lib/openerp-server/addons/sale/wizard/__init__.py dengan menambahkan baris:
import wizard_cetak
Kemudian buatlah menunya di file /usr/lib/openerp-server/addons/sale/cetak_wizard.xml:
<?xml version="1.0" ?> <openerp> <data> <wizard id="report_wizard_cetak" string="Cetak" model="sale.order" name="sale.cetak" keyword="client_print_multi"/> </data> </openerp>
Terakhir daftarkan di /usr/lib/openerp-server/addons/sale/__terp__.py di bagian update_xml:
... 'update_xml': [ 'security/sale_security.xml', 'security/ir.model.access.csv', 'sale_workflow.xml', 'sale_sequence.xml', 'sale_data.xml', 'sale_wizard.xml', 'sale_view.xml', 'sale_report.xml', 'stock_view.xml', 'process/sale_process.xml', 'cetak_wizard.xml', ], ...
Untuk menghindari pesan error yang tak perlu saat update modul nanti, sebaiknya kosongkan bagian demo_xml:
... 'demo_xml': [], ...
Kadang Anda perlu juga mengosongkan demo_xml ini di addons/product/__terp__.py karena update modul sale biasanya mengupdate modul product juga.
Selanjutnya lakukan update modul:
# su - openerp $ openerp-server --database=openerp --update=sale --stop-after-init
Lalu restart daemonnya:
# /etc/init.d/openerp-server restart
Sekarang giliran browser Firefox. Setelah login, masuklah ke menu Sales Management, Sales Order. Klik salah satu tanggal transaksi agar tampil rinciannya. Di sebelah kanan pada bagian REPORTS ada menu Cetak. Jangan klik dulu. Siapkan kertas di printer, lalu klik Cetak.
Selamat mencoba.
Referensi:
Lihat juga:
Update 7 Maret 2010
Menu cetak ke dotmatrix ini sudah disertakan di paket Debian openerp-server 5.0.7 yang dikemas RAB. Anda bisa ikuti petunjuk instalasinya.
Lampiran | Ukuran |
---|---|
sale-order.png | 108.45 KB |
order.txt | 239 bita |
order_line.txt | 106 bita |
wizard_cetak.py.txt | 2.22 KB |
cetak_wizard.xml | 198 bita |
Komentar
gan mau nanya kalo ( "
gan mau nanya kalo ( " filename = '/dev/lp0' " ke printer local) gimana gan kalo mau ganti ke printer jaringan & jaringan clien win XP
Pertanyaan bagus. Intinya
Pertanyaan bagus. Intinya kita bisa gunakan lpr, cups, dan samba. Mudahnya begini dalam command line:
nama_printer merupakan nama printer yang terdaftar di cups. Untuk menambahkan printer pada cups (baik local maupun jaringan), silahkan melihat berbagai dokumentasi yang tersedia (kebanyakan bisa tercapai melalui GUI). Setelah printer yang dimaksud telah ditemukan namailah dengan lx800_pc_a misalnya.
Kemudian pada source ganti baris berikut ini
menjadi
Korelasi user ID dan nama printer menjadi kurang tepat saat prosedur kerja mengizinkan user cahyadi bisa menggunakan pc mana saja yang ada di jaringan. Dalam hal ini yang paling pas adalah menggunakan IP sebagai pengganti user ID. Sayangnya saya belum tahu bagaimana mendapatkan IP client.
makasih gan setelah saya coba
makasih gan setelah saya coba alhamdulilah berhasil gan :D
Terima Kasih gan untuk
Terima Kasih gan untuk postingannya sangat membantu.
Tapi ada sedikit yg ingin saya tanyakan ke agan, untuk mengatur ukuran font dan jenis font itu gimana ya gan?
Mohon bantuannya ya gan.
Salam,
Asrul Bastian Yunas