[Odoo 10] Technical Documentation -Part 3-

Alhamdulillah kita lanjutkan kembali tehnical trainingnya. Pada pertemuan kali ini, insya Allah kita akan mulai untuk praktek membuat object berserta tampilannya. Modul yang akan kita gunakan adalah modul hasil dari scaffold pada pertemuan pertama. Sumber materi paling dominan saya ambil dari sini :

Download Ebook
Sumber : http://www.odoo.com/documentation/10.0/index.html

Selanjutnya kita akan membuat object ‘training.kursus’ dengan mengedit file python models.py yang berada di dalam folder models, sehingga hasilnya seperti dibawah ini :


# -*- coding: utf-8 -*-

from odoo import models, fields, api

# class training_odoo(models.Model):
#     _name = 'training_odoo.training_odoo'

#     name = fields.Char()
#     value = fields.Integer()
#     value2 = fields.Float(compute="_value_pc", store=True)
#     description = fields.Text()
#
#     @api.depends('value')
#     def _value_pc(self):
#         self.value2 = float(self.value) / 100

class Kursus(models.Model):
    _name = 'training.kursus'

    name = fields.Char(string="Judul", required=True)
    description = fields.Text()

Bagian atas adalah hasil contoh dari scaffold, jadi kita abaikan saja. Nantinya nama object ‘training.kursus’ akan berubah menjadi tabel ‘training_kursus’ di databasenya. Untuk awalan, kita juga membuat 2 field yaitu name dan description. Setelah itu, kita lanjutkan dengan membuat tampilannya, agar user bisa mengaksesnya, yaitu edit file views.xml yang berada dalam folder views, seperti di bawah ini :


<odoo>
  <data>
  	
  	
    <!-- explicit list view definition -->
    <!--
    <record model="ir.ui.view" id="training_odoo.list">
      <field name="name">training_odoo list</field>
      <field name="model">training_odoo.training_odoo</field>
      <field name="arch" type="xml">
        <tree>
          <field name="name"/>
          <field name="value"/>
          <field name="value2"/>
        </tree>
      </field>
    </record>
    -->

    <!-- actions opening views on models -->
    <!--
    <record model="ir.actions.act_window" id="training_odoo.action_window">
      <field name="name">training_odoo window</field>
      <field name="res_model">training_odoo.training_odoo</field>
      <field name="view_mode">tree,form</field>
    </record>
    -->

    <!-- server action to the one above -->
    <!--
    <record model="ir.actions.server" id="training_odoo.action_server">
      <field name="name">training_odoo server</field>
      <field name="model_id" ref="model_training_odoo_training_odoo"/>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "tree,form",
          "res_model": self._name,
        }
      </field>
    </record>
    -->

    <!-- Top menu item -->
    <!--
    <menuitem name="training_odoo" id="training_odoo.menu_root"/>
    -->
    <!-- menu categories -->
    <!--
    <menuitem name="Menu 1" id="training_odoo.menu_1" parent="training_odoo.menu_root"/>
    <menuitem name="Menu 2" id="training_odoo.menu_2" parent="training_odoo.menu_root"/>
    -->
    <!-- actions -->
    <!--
    <menuitem name="List" id="training_odoo.menu_1_list" parent="training_odoo.menu_1"
              action="training_odoo.action_window"/>
    <menuitem name="Server to list" id="training_odoo" parent="training_odoo.menu_2"
              action="training_odoo.action_server"/>
    -->

    	
    	
    	
    	
	<!-- ### Membuat Tampilan Tree/List ### -->
	
	<record model="ir.ui.view" id="kursus_tree_view">
	    <field name="name">training.kursus.tree</field>
	    <field name="model">training.kursus</field>
	    <field name="arch" type="xml">
	        <tree string="Kursus List">
	            <field name="name"/>
	            <field name="description"/>       
	        </tree>
	    </field>
	</record>
	
	
	<!-- ### Membuat Tampilan Form ### -->
	
	<record model="ir.ui.view" id="kursus_form_view">
	    <field name="name">training.kursus.form</field>
	    <field name="model">training.kursus</field>
	    <field name="arch" type="xml">
	        <form string="Kursus Form">
	            <sheet>
	                <group>
	                    <field name="name"/>
	                </group>
	                <notebook>
	                    <page string="Keterangan">
	                        <field name="description"/>
	                    </page>
	                </notebook>
	            </sheet>
	        </form>
	    </field>
	</record>
	
	
	<!-- ### Membuat Action/Event Object Kursus ### -->
	
	<record model="ir.actions.act_window" id="kursus_list_action">
	    <field name="name">Kursus</field>
	    <field name="res_model">training.kursus</field>
	    <field name="view_type">form</field>
	    <field name="view_mode">tree,form</field>
	    <field name="help" type="html">
	        <p class="oe_view_nocontent_create">Buatlah kursus pertamamu ...</p>
	    </field>
	</record>
	
	
	<!-- ### Membuat Menu Bar ### -->
	
	<menuitem id="main_training_odoo_menu" name="Training Odoo"/>
	
		
	<!-- ### Membuat Menu Title ### -->
	
	<menuitem id="training_odoo_menu" name="Training" parent="main_training_odoo_menu"/>
	
	
	<!-- ### Membuat Sub Menu ### -->
	
	<menuitem id="kursus_menu" name="Kursus" parent="training_odoo_menu" action="kursus_list_action"/>
        

                  	    	    
  </data>
</odoo>

Bagian atas adalah hasil contoh dari scaffold, jadi kita abaikan saja. Pada file xml ini, kita membuat beberapa bagian, diantaranya :

Bagian 1 : Membuat Tampilan Tree/List. Jika tidak kita buat, maka defaultnya hanya field name saja yang tampil.

Bagian 2 : Membuat Tampilan Form. Setiap field harus berada di dalam tag “group”, jika tidak maka akan tidak ada labelnya (seperti field description). Lalu setiap tag “page” harus berada di dalam tag “notebook”, untuk menghasilkan tampilan dengan multi tab seperti di browser.

Bagian 3 : Membuat Action/Event Object Kursus. Action ini dijalankan ketika user mengklik submenu Kursus. Bagian Action ini juga tidak kalah pentingnya, disana kita bisa langsung memfilter (dengan value field) record yang ditampilkan, contohnya adalah menu Customer dan Vendor, kedua menu ini memiliki object yang sama, tetapi kita bisa membedakannya dengan Action. Begitu juga dengan penganturan tampilan, setiap object kita bisa tentukan tampilan (view) apa saja yang ingin kita sajikan.

Bagian 4 : Membuat Menu Bar. Menu yang dihasilkan berada paling atas (Top Menu). Hal ini dikarenakan menu ini tidak memiliki parent menu.

Bagian 5 : Membuat Menu Title. Menu yang berada 1 tingkat dibawah Top Menu, fungsinya sebagai pengkategorian submenu.

Bagian 6 : Membuat Sub Menu. Tingkatan menu yang paling kecil, tempat dimana Action di tentukan. Semakin banyak hirarki parent yang dimiliki, maka akan semakin bawah hirarkinya.

Jika telah sudah selesai, maka lakukan upgrade modul jika memang modul ini sudah pernah diinstal seperti di tutorial sebelumnya, jika belum maka lakukan proses instalasi. Hasilnya seperti berikut :

Kita juga bisa membuat data demo ketika modul pertama kali diinstal (pastikan cekbox “load demonstration data” di centang saat membuat db), caranya dengan mengedit file demo.xml pada folder demo, seperti berikut :


<odoo>
    <data>
        <!--  -->
        <!--   <record id="object0" model="training_odoo.training_odoo"> -->
        <!--     <field name="name">Object 0</field> -->
        <!--     <field name="value">0</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object1" model="training_odoo.training_odoo"> -->
        <!--     <field name="name">Object 1</field> -->
        <!--     <field name="value">10</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object2" model="training_odoo.training_odoo"> -->
        <!--     <field name="name">Object 2</field> -->
        <!--     <field name="value">20</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object3" model="training_odoo.training_odoo"> -->
        <!--     <field name="name">Object 3</field> -->
        <!--     <field name="value">30</field> -->
        <!--   </record> -->
        <!--  -->
        <!--   <record id="object4" model="training_odoo.training_odoo"> -->
        <!--     <field name="name">Object 4</field> -->
        <!--     <field name="value">40</field> -->
        <!--   </record> -->
        <!--  -->

        	
        	
        <record model="training.kursus" id="kursus_1">
            <field name="name">Technical</field>
            <field name="description">Training technical memiliki tujuan agar user dapat membuat dan mengcustom modul ketika implementasi</field>
        </record>
        
        <record model="training.kursus" id="kursus_2">
            <field name="name">Functional</field>
            <field name="description">Training technical memiliki tujuan agar user dapat mengoperasikan sistem seacara baik dan benar</field>
        </record>
        
        <record model="training.kursus" id="kursus_3">
            <field name="name">Python</field>
            <!-- tidak ada tambahan description -->
        </record>
        	
        	        
    </data>
</odoo>

Membuat data demo sangat mudah, cukup mendefinikan objectnya kemudian field yang ingin diisi. Hal ini berguna pada beberapa kondisi, seperti membuat scheduler, sequence, dll.

Sehingga menghasilkan data seperti ini :

Semoga bermanfaat dan insya Allah bersambung ….

Advertisements

3 thoughts on “[Odoo 10] Technical Documentation -Part 3-

  1. Pada http://127.0.0.1:8069/ hasilnya ‘500 Internal Server Error’ Pak.

    Saya lihat di /var/log/odoo/odoo-server.log hasilnya :

    Model not found: training.kursus

    Error context:
    View ` training.kursus.tree `
    [view_id: 2071, xml_id: n/a, model: training.kursus , parent_id: n/a]
    None” while parsing /usr/lib/python2.7/dist-packages/odoo/addons/training_odoo/views/views.xml:21, near

    training.kursus.tree
    training.kursus

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