Print Text Dot Matrix

Alhamdulillah, pada kali ini saya akan mencoba menjelaskan tentang cara untuk print text ke printer dot matrix berdasarkan pengalaman saya sewaktu implementasi di sebuah perusahaan manufacture Jepang yaitu PT. Eagle Industry Indonesia (EKK) yang merupakan salah satu vendor dari Suzuki dan Yamaha.

Salah satu jenis report yang sangat dibutuhkan adalah report dalam bentuk text. Report ini banyak digunakan untuk keperluan Delivery Order, Incoming Shipment, POS (Point of Sales), dll.

Seperti kita ketahui, secara default report-report yang diprovide OpenERP adalah dalam bentuk pdf. File pdf akan sangat berat jika kita bebankan pada printer dot matrix disebabkan diperlakukan seperti image dan hasilnya pun tidak maksimal alias banyak terpotong. Diantara solusinya adalah dengan mengganti font dari printer tersebut, akan tetapi disana juga memiliki banyak kekurangan diantaranya adalah jarum cetak cepat aus, pita lebih boros, waktu cetak menjadi lebih lama, dll.

Alhamdulilah akhirnya penulis bisa merealisasikan hal tersebut. Disamping modul OpenERP yang kita buat, disana ada beberapa persyaratannya, diantaranya adalah printer yang akan digunakan adalah Network Printer alias terhubung dalam LAN dan memiliki IP Address sendiri. Jika printer yang kita miliki bukan Network Printer maka jangan perlu khawatir, kita cukup membeli converter seperti dibawah ini (TP-LINK SINGLE PARALLEL PORT FAST ETHERNET PRINT SERVER):

PS-PAR1TP

Untuk menyambungkan Network Printer ke Ubuntu Server maka gunakan webmin (http://www.webmin.com) atau yang sejenisnya. Untuk tutorial instalasi dan penggunaannya silahkan langsung ke TKP 🙂

Selanjutnya inti dari pembahasan, yaitu pembuatan modul utama yang bertujuan untuk mencetak format text ke printer dot matrix. Dalam kasus ini saya membuat report untuk proses Incoming Shipment. Untuk awalan kita inherit object “stock.picking“, lalu kita bikin button dengan type object beserta method action dari button tersebut —cetak()— seperti dibawah ini :


import wizard
import pooler
import re
from osv import osv, fields
from mako.template import Template
from mako.lookup import TemplateLookup
import time
import os
import locale
 
# Mendefinisikan path dari modul report terkait
tpl_lookup = TemplateLookup(directories=['/opt/openerp-6.1/openerp/addons/eid_print_text'])

# Membuat field teks beserta parameternya dan menyimpannya dalam variabel cetak_fields
cetak_fields = {'teks': {'type': 'text', 'default': 'Pencetakan sedang berlangsung.', 'readonly': True }}

# Membuat tampilan formnya dari field teks secara simple 
cetak_form = '''<?xml version="1.0"?>
<form string="Cetak ke printer dotmatrix">
    <field name="teks" />
</form>'''



class stock_picking(osv.osv):    
    _inherit = 'stock.picking'
 
    def cetak(self, cr, uid, ids, context):
        # Mendefinikan template report berdasarkan path modul terkait 
        tpl = tpl_lookup.get_template('picking.txt')
        tpl_line = tpl_lookup.get_template('picking_line.txt')

        # Mempersiapkan data-data yang diperlukan                
        user = self.pool.get('res.users').browse(cr, uid, uid)
        order = self.browse(cr, uid, ids)[0]            
        date = time.strftime('%d/%m/%Y %H:%M', time.strptime(order.date,'%Y-%m-%d %H:%M:%S'))   
               
        no = 0
        rows = []
        for line in order.move_lines:
            no += 1
            s = tpl_line.render(no=str(no),
                                code=line.product_id.default_code,
                                name=line.product_id.name_template,
                                qty=str(line.product_qty))
            rows.append(s)
        
        # Merender data yang telah disiapkan ke dalam template report text
        s = tpl.render(id=order.name,
                       tgl=date,
                       pelanggan=order.partner_id.name,
                       rows=rows,
                       po=order.purchase_id.name,
                       do=order.delivery_supplier,
                       user='('+ user.name +')')
                

        # Membuat temporary file yang akan dicetak beserta pathnya   
        filename = '/tmp/%s.txt' % uid
        
        # Mengisi file tersebut dengan data yang telah dirender
        f = open(filename, 'w')
        f.write(s)
        f.close()
        
        # Proses cetak dijalankan dan pastikan variabel nama_printer adalah nama printer yang anda setting atau tambahkan dengan webmin diatas
        os.system('lpr -Pnama_printer %s' % filename)
        
        # Hapus file yang telah dicetak
        os.remove(filename)
      
        return True
 
    states = {
        'init': {
            'actions': [cetak],
            'result': {'type':'form',
                       'arch':cetak_form,
                       'fields': cetak_fields,
                       'state':[]
                      }
            },
        }
 
 
stock_picking()


Seperti coding diatas kita telah membuat 2 file template report dalam format *.txt, olehkarna itu kita harus membuat file tersebut yang isinya seperti dibawah ini :

File picking.txt


${'RECEIVING REPORT'.rjust(45)}

   No       : ${id}                  PO : ${po}
   Date     : ${tgl}                    DO : ${do}
   Supplier : ${pelanggan}
 
   ${'-'*70}
   No. ${'Part Code'.ljust(15)} ${'Part Name'.ljust(40)} ${'Quantity'.ljust(5)}
   ${'-'*70}
   % for val in rows:
   ${val}
   % endfor
   ${'-'*70}
   
${'Shipper,'.rjust(20)} ${'Created by,'.rjust(20)}
   
   
   
${'(Supplier)'.rjust(20)} ${user.rjust(20)}
${' '}
${' '}
${' '}
${' '}
${' '}
${' '}

File picking_line.txt


${no.rjust(3)} ${code.ljust(15)} ${name.ljust(40)} ${qty.rjust(5)}

Selanjutnya kita tambahkan button pada form Incoming Shipment seperti dibawah ini :



		<record model="ir.ui.view" id="view_inherit_picking_in_form_receive_report">
			<field name="name">stock.picking.in.inherit.form.receive.report</field>
			<field name="model">stock.picking</field>
			<field name="type">form</field>
			<field name="inherit_id" ref="stock.view_picking_in_form" />
			<field name="arch" type="xml">
                <xpath expr="/form/notebook/page[@string='General Information']/group/button[@name='action_process']" position="before">
					<button name="cetak" string="Receiving Report" states="done" type="object" icon="gtk-print"/>
				</xpath>
			</field>
		</record>


Alhamdulillah akhirnya kita bisa menyelesaikan pembahasan ini, semoga bermanfaat untuk teman-teman sekalian ….

Advertisements

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