Wizard Eksport Import -Part 2-

Alhamdulillah tulisan pertama telah kita selesaikan, selanjutnya kita akan membahas membuat wizard untuk proses import data.

Pada tulisan pertama kita telah berhasil membuat modul wizard yang berfungsi untuk mengeksport data dari OpenERP dalam bentuk csv/excel. Untuk selanjutnya yang pertama kita lakukan adalah menambah button import pada code xml untuk tampilan menjadi seperti dibawah 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')]}"/>
	                    <button name="import_excel" string="Import" type="object" class="oe_highlight" attrs="{'invisible':[('type','=','eks')]}"/>
	                    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 code diatas kita hanya menambahkan baris ini :

<button name="import_excel" string="Import" type="object" class="oe_highlight" attrs="{'invisible':[('type','=','eks')]}"/>

Fungsi dari key parameter attrs adalah untuk menghide button import tersebut ketika user memilih field type dengan nilai eksport.

Jika kita membuat button dengan type object seperti diatas, maka kita WAJIB membuat sebuah method dengan nama yang sama persis dari nilai parameter name yaitu import excel.

Maka kita tambahkan pada file python sebelumnya dengan sebuah method import_excel() dengan code dibawah ini :


   
    def import_excel(self, cr, uid, ids, context=None):
        val = self.browse(cr, uid, ids)[0]

        # Kita buat aturan untuk mewajibkan memilih file yang siap diimport
        if not val.data_file:
            raise osv.except_osv(_('Error'), _("Silahkan memilih file yang akan diimport !"))
        
        # Membaca file csv yang diimport
        filename = val.name
        filedata = base64.b64decode(val.data_file)
        input = cStringIO.StringIO(filedata)
        input.seek(0)

        (fileno, fp_name) = tempfile.mkstemp('.csv', 'openerp_')
        file = open(fp_name, "w")
        file.write(filedata)
        file.close()
        
        # Mengambil nilai header dari file csv sebagai nama kolom yang akan diimport
        crd = csv.reader(open(fp_name,"rb"))
        head = crd.next()[0].split(';')
        
        # Proses pengolahan file csv yang telah menjadi kumpulan list dan siap diimport
        for row in crd:
            res = {}
            for x in range (0, len(row[0].split(';'))):
                r = row[0].split(';')[x]

                # Code untuk mengconversi string false/true menjadi type boolean
                if r.upper() == 'FALSE':
                    r = False
                elif r.upper() == 'TRUE':
                    r = True
                else:
                    # Code untuk mengconversi string angka menjadi type float
                    try:
                        r = float(r)
                    except:
                        pass
                res[head[x]] = r

            # Proses pembuatan record database OpenERP dengan method create()
            self.pool.get(str(val.tabel.model)).create(cr, uid, res) 

        return {}                

Untuk penjelasannya mungkin bisa langsung diliat pada sourcecode diatas. Untuk contoh file csv yang siap diimport bisa di download disini (separator gunakan titikkoma). Mungkin inilah hasil akhir dari modul eksport import dengan wizard. Semoga bermanfaat …

Advertisements

2 thoughts on “Wizard Eksport Import -Part 2-

  1. Pingback: Import Excel File | Tutorial OpenERP

  2. Pingback: Import Database Microsoft Access | 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