Wizard Eksport Import -Part 1-

Beberapa hal pada awal implementasi yang biasa dilakukan adalah Instalasi Server & Migrasi Data. Untuk instalasi server mungkin tutorialnya bisa dicoba pada pembahasan sebelumnya yang berjudul Instalasi OpenERP Server. Pada kesempatan kali ini kita akan membahas proses migrasi data dengan menggunakan modul customize wizard.

Pada bagian pertama ini, mungkin kita khususkan untuk proses ekport data dari OpenERP. Secara default OpenERP sudah menyiapkan fitur eksport & import data. Fitur ini cukup mudah kita coba dan praktekan. Akan tetapi, ada beberapa hal yang tidak bisa dilakukan fitur default ini. Oleh karna itu penulis putuskan untuk membuat modul khusus eksport & import data dalam bentuk wizard.

Untuk proses pembuatan modul mungkin teman-teman bisa melihat kembali tutorial-tutorial sebelumnya, karna untuk menyingkat waktu kita fokus pada code inti dari modul ini. Seperti biasa hal yang pertama kita lakukan adalah membuat object/tabel dari wizard ini. Untuk codenya seperti dibawah ini :

from osv import fields, osv

class EksportImport(osv.osv_memory):
    _name = "eksport.import"
    _columns = {
                'type': fields.selection((('eks','Export'), ('imp','Import')), 'Type'),
                'name': fields.char('File Name', 16),
                'tabel' : fields.many2one('ir.model', 'Object Model', required=True),
                'data_file': fields.binary('File'),
                }   
    _defaults = {'type' :'eks'}

EksportImport()

Pada code diatas kita membuat object wizard yang bernama eksport.import yang memiliki 4 field diantaranya :

– type = untuk pemilihan metode action yang kita inginkan
– name = field ini merupakan field wajib yang harus ada dalam setiap object openerp
– tabel = untuk memilih object/tabel yang akan kita eksport atau import datanya
– data_file = untuk menyimpan file hasil ekport atau file yang akan diimport

Setelah kita buat objectnya maka selanjutnya kita buat interfacenya pada file xml berikut ini :

<?xml version="1.0" encoding="utf-8"?>
<openerp>
	<data>
		
		<record model="ir.ui.view" id="view_wizard_eksport_import">
            <field name="name">Import Object</field>
            <field name="model">eksport.import</field>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <form col="4" string="Eksport Import Wizard" version="7.0">
                    <group>
						<field name="type"/>
						<field name="tabel"/>
						<field name="name" invisible="True"/>
						<separator colspan="4"/>
                        <field name="data_file" nolabel="1" colspan="4"/>
					</group>
					<footer>
	                    <button name="eksport_excel" string="Eksport" type="object" class="oe_highlight" attrs="{'invisible':[('type','=','imp')]}"/>
	                    
	                    or 
	                    <button string="Cancel" class="oe_link" special="cancel" />
	                </footer>
                </form>
            </field>
        </record>
              
        <record model="ir.actions.act_window" id="action_export_import">
            <field name="name">Import Object</field>
            <field name="res_model">eksport.import</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="target">new</field>
        </record>
       
        <menuitem id="menu_eksport_import" name="Export Import" action="action_export_import" parent="base.menu_config" sequence="103" />
	</data>
</openerp>


Pada tampilan diatas kita membuat 3 hal, yaitu interface form wizard, event dari menu, & menu wizard. Pada code interface diatas kita membuat button untuk eksport yang bernama eksport_excel dengan type ‘object’, artinya kita harus membuat sebuah method sesuai dengan nama dari button tersebut yaitu eksport_excel. Maka kita harus menambahkan sebuat method pada file python sebelumnya seperti dibawah ini :


    def eksport_excel(self, cr, uid, ids, context=None):
        # Mengambil active form data dan menyimpannya ke variabel val
        val = self.browse(cr, uid, ids)[0]
        
        # Melakukan query data semua record object/tabel yang dipilih
        idd = self.pool.get(val.tabel.model).search(cr, uid, [])
        data = self.pool.get(val.tabel.model).read(cr, uid, idd)
      
        # Mengolah hasil query yang berbentuk list dan menjadikannya sebagai file format csv
        result = ';'.join(data[0].keys())   
        value = [d.values() for d in data]
        
        for v in value:
            for x in v:
                if isinstance(x, tuple):
                    v[v.index(x)] = x[0]
        
        for row in value:
            result += '\n' + ';'.join([str(v) for v in row]) 
            
        # Terakhir, mengupdate field data_file dengan mengisinya dengan file csv diatas
        out = base64.encodestring(result)
        self.write(cr, uid, ids, {'data_file':out, 'name': 'eksport.csv'}, context=context)
        
        view_rec = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'ad_eksport_import', 'view_wizard_eksport_import')
        view_id = view_rec[1] or False
    
        # Code dibawah ini digunakan untuk memperbaikin issue wizard OpenERP 7, liat pembahasannya di <a href="https://tutorialopenerp.wordpress.com/2013/12/11/issue-wizard-openerp-7/" title="Issue Wizard OpenERP 7" target="_blank">sini</a>
        return {
            'view_type': 'form',
            'view_id' : [view_id],
            'view_mode': 'form',
            'res_id': val.id,
            'res_model': 'eksport.import',
            'type': 'ir.actions.act_window',
            'target': 'new',
        }
             

Jika kita perhatikan, pada button tersebut kita menggunakan key parameter attrs. Parameter tersebut digunakan untuk mengcustomize button berdasarkan kondisi-kondisi tertentu seperti readonly, invisible, & required berdasarkan hal-hal yang mempengaruhinya. Untuk mempraktekannya mungkin bisa tanya om google 🙂 …

Mungkin ini saja yang bisa saya sampaikan, in syaa Allah bersambung …

Advertisements

One thought on “Wizard Eksport Import -Part 1-

  1. Pingback: Technical Training -Part 10- | Tutorial OpenERP

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