OpenERP: Text Mode Printing

Foto os

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:

  1. Waktu cetak jauh lebih lama ketimbang text mode printing.
  2. Pita lebih cepat "habis" karena lebih banyak yang ditoreh.
  3. Jarum cetak lebih cepat aus.

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:

  1. Kita akan gunakan paket Mako Templates yang akan memproses report template-nya. Pasanglah terlebih dahulu:
    $ sudo su
    # apt-get install python-mako
  2. Hak akses parallel port printer pada /dev/lp0 perlu disesuaikan agar dapat digunakan oleh user openerp. Karena sesuai petunjuk instalasi OpenERP, openerp-server dijalankan oleh user tersebut. Caranya dengan mendaftarkan user openerp ke dalam grup lp.
    # ls -l /dev/lp0
    crw-rw---- 1 root lp 6, 0 2010-01-04 08:43 /dev/lp0
    # adduser openerp lp

    Lalu siapkan kertas di printer untuk mencobanya.
    # su - openerp
    $ cat /etc/hosts > /dev/lp0
  3. 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.

LampiranUkuran
sale-order.png108.45 KB
order.txt239 bita
order_line.txt106 bita
wizard_cetak.py.txt2.22 KB
cetak_wizard.xml198 bita